diff --git a/civicrm.php b/civicrm.php index 3a0403d98d750494241d8749ae87da2fb3aefd8b..2f02a3784235a06af4124fccddc72c03d92a9ab6 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.44.0 + * Version: 5.45.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -54,7 +54,7 @@ if (!defined('ABSPATH')) { } // Set version here: when it changes, will force Javascript & CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.44.0'); +define('CIVICRM_PLUGIN_VERSION', '5.45.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CRM/Activity/Form/Activity.php b/civicrm/CRM/Activity/Form/Activity.php index ac0ba84beca7e78320c463ea2a30a1b89477bf20..8100246ab8d7d2e705cf230ffa39c7264c1490ce 100644 --- a/civicrm/CRM/Activity/Form/Activity.php +++ b/civicrm/CRM/Activity/Form/Activity.php @@ -462,12 +462,11 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { CRM_Core_BAO_File::buildAttachment($this, 'civicrm_activity', $this->_activityId, NULL, TRUE); // figure out the file name for activity type, if any - if ($this->_activityTypeId && - $this->_activityTypeFile = CRM_Activity_BAO_Activity::getFileForActivityTypeId($this->_activityTypeId, $this->_crmDir) - ) { - $this->assign('activityTypeFile', $this->_activityTypeFile); - $this->assign('crmDir', $this->_crmDir); + if ($this->_activityTypeId) { + $this->_activityTypeFile = CRM_Activity_BAO_Activity::getFileForActivityTypeId($this->_activityTypeId, $this->_crmDir); } + $this->assign('activityTypeFile', $this->_activityTypeFile); + $this->assign('crmDir', $this->_crmDir); $this->setFields(); @@ -515,6 +514,19 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { } } + /** + * Get any smarty elements that may not be present in the form. + * + * To make life simpler for smarty we ensure they are set to null + * rather than unset. This is done at the last minute when $this + * is converted to an array to be assigned to the form. + * + * @return array + */ + public function getOptionalQuickFormElements(): array { + return ['separation', 'tag']; + } + /** * Set default values for the form. * diff --git a/civicrm/CRM/Admin/Form/Options.php b/civicrm/CRM/Admin/Form/Options.php index 123eee121fb74bf34457f1aa9944a0e7189f40a3..dc9fe0576810041fc5f664052d12a29495ce4b05 100644 --- a/civicrm/CRM/Admin/Form/Options.php +++ b/civicrm/CRM/Admin/Form/Options.php @@ -69,7 +69,7 @@ class CRM_Admin_Form_Options extends CRM_Admin_Form { 'name' ); $this->_gLabel = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $this->_gid, 'title'); - $this->_domainSpecific = in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups); + $this->_domainSpecific = CRM_Core_OptionGroup::isDomainOptionGroup($this->_gName); $url = "civicrm/admin/options/{$this->_gName}"; $params = "reset=1"; @@ -96,7 +96,7 @@ class CRM_Admin_Form_Options extends CRM_Admin_Form { $session->pushUserContext(CRM_Utils_System::url($url, $params)); $this->assign('id', $this->_id); - if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) { + if ($this->_id && CRM_Core_OptionGroup::isDomainOptionGroup($this->_gName)) { $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id'); if (CRM_Core_Config::domainID() != $domainID) { CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); diff --git a/civicrm/CRM/Admin/Page/Job.php b/civicrm/CRM/Admin/Page/Job.php index 5a8d30767c570fcbc86885b991cd37f9abb7dfaf..a521989ae254f3648d73169fb18df3200aa84dea 100644 --- a/civicrm/CRM/Admin/Page/Job.php +++ b/civicrm/CRM/Admin/Page/Job.php @@ -158,13 +158,13 @@ class CRM_Admin_Page_Job extends CRM_Core_Page_Basic { } $sj = new CRM_Core_JobManager(); - $rows = $temp = []; + $rows = []; foreach ($sj->jobs as $job) { $action = array_sum(array_keys($this->links())); // update enable/disable links. // CRM-9868- remove enable action for jobs that should never be run automatically via execute action or runjobs url - if ($job->api_action == 'process_membership_reminder_date' || $job->api_action == 'update_greeting') { + if ($job->api_action === 'process_membership_reminder_date' || $job->api_action === 'update_greeting') { $action -= CRM_Core_Action::ENABLE; $action -= CRM_Core_Action::DISABLE; } @@ -175,8 +175,8 @@ class CRM_Admin_Page_Job extends CRM_Core_Page_Basic { $action -= CRM_Core_Action::DISABLE; } - $job->action = CRM_Core_Action::formLink(self::links(), $action, - array('id' => $job->id), + $job->action = CRM_Core_Action::formLink($this->links(), $action, + ['id' => $job->id], ts('more'), FALSE, 'job.manage.action', diff --git a/civicrm/CRM/Admin/Page/LocationType.php b/civicrm/CRM/Admin/Page/LocationType.php index 45de123bcf2ef0732076afd7fd79d65988938a88..0b8b9022763e269e1ef4670a166423f5fb010016 100644 --- a/civicrm/CRM/Admin/Page/LocationType.php +++ b/civicrm/CRM/Admin/Page/LocationType.php @@ -107,4 +107,24 @@ class CRM_Admin_Page_LocationType extends CRM_Core_Page_Basic { return 'civicrm/admin/locationType'; } + /** + * @param $sort + * @param $action + * @param array $links + * + * @return array + */ + protected function getRows($sort, $action, array $links): array { + $rows = parent::getRows($sort, $action, $links); + foreach ($rows as &$row) { + // prevent smarty notices. + foreach (['is_default', 'class', 'vcard_name'] as $expectedField) { + if (!isset($row['is_default'])) { + $row[$expectedField] = NULL; + } + } + } + return $rows; + } + } diff --git a/civicrm/CRM/Admin/Page/MailSettings.php b/civicrm/CRM/Admin/Page/MailSettings.php index c3dca8c85342c505c791ecfcda0eff51039243dc..28844d60782df6af6553fe40d79f9edcaa2eda8f 100644 --- a/civicrm/CRM/Admin/Page/MailSettings.php +++ b/civicrm/CRM/Admin/Page/MailSettings.php @@ -105,7 +105,11 @@ class CRM_Admin_Page_MailSettings extends CRM_Core_Page_Basic { $mailSetting->id ); } - + $expectedKeys = ['server', 'username', 'localpart', 'domain', 'return_path', 'protocol', 'source', 'port', 'is_ssl']; + foreach ($allMailSettings as $key => $allMailSetting) { + // make sure they are there to prevent smarty notices. + $allMailSettings[$key] = array_merge(array_fill_keys($expectedKeys, NULL), $allMailSetting); + } $this->assign('rows', $allMailSettings); $setupActions = CRM_Core_BAO_MailSettings::getSetupActions(); diff --git a/civicrm/CRM/Admin/Page/MessageTemplates.php b/civicrm/CRM/Admin/Page/MessageTemplates.php index 544a39770ebea5a7ce5a6f3fbb6a474f7b8afa0b..58f154abda82720c620507cdb26c41383c761b2e 100644 --- a/civicrm/CRM/Admin/Page/MessageTemplates.php +++ b/civicrm/CRM/Admin/Page/MessageTemplates.php @@ -252,7 +252,7 @@ class CRM_Admin_Page_MessageTemplates extends CRM_Core_Page_Basic { // find all objects $messageTemplate->find(); while ($messageTemplate->fetch()) { - $values[$messageTemplate->id] = []; + $values[$messageTemplate->id] = ['class' => '']; CRM_Core_DAO::storeValues($messageTemplate, $values[$messageTemplate->id]); // populate action links $this->action($messageTemplate, $action, $values[$messageTemplate->id], $links, CRM_Core_Permission::EDIT); diff --git a/civicrm/CRM/Admin/Page/Options.php b/civicrm/CRM/Admin/Page/Options.php index fec5b85999a256cb18fa8a7927997b77f0a802eb..84008c58eaa847c235267b1101b24625617b130a 100644 --- a/civicrm/CRM/Admin/Page/Options.php +++ b/civicrm/CRM/Admin/Page/Options.php @@ -95,9 +95,6 @@ class CRM_Admin_Page_Options extends CRM_Core_Page_Basic { self::$_gLabel = ts('Option'); } - $this->assign('gName', self::$_gName); - $this->assign('gLabel', self::$_gLabel); - if (self::$_gName == 'acl_role') { CRM_Utils_System::setTitle(ts('Manage ACL Roles')); // set breadcrumb to append to admin/access @@ -128,14 +125,12 @@ class CRM_Admin_Page_Options extends CRM_Core_Page_Basic { ] )); - if (self::$_gName == 'participant_role') { - $this->assign('showCounted', TRUE); - } + $this->assign('showCounted', self::$_gName === 'participant_role'); $this->assign('isLocked', self::$_isLocked); $this->assign('allowLoggedIn', Civi::settings()->get('allow_mail_from_logged_in_contact')); - if (self::$_gName == 'activity_type') { - $this->assign('showComponent', TRUE); - } + $this->assign('showComponent', self::$_gName === 'activity_type'); + $this->assign('gName', self::$_gName); + $this->assign('gLabel', self::$_gLabel); } /** @@ -222,12 +217,21 @@ class CRM_Admin_Page_Options extends CRM_Core_Page_Basic { CRM_Utils_Weight::addOrder($optionValue, 'CRM_Core_DAO_OptionValue', 'id', $returnURL, $filter ); + $this->assign('hasIcons', FALSE); // retrieve financial account name for the payment method page - if ($gName === "payment_instrument") { - foreach ($optionValue as $key => $option) { + foreach ($optionValue as $key => $option) { + if ($gName === 'payment_instrument') { $optionValue[$key]['financial_account'] = CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($key, NULL, 'civicrm_option_value', 'financial_account_id.name'); } + foreach (['weight', 'description', 'value', 'color', 'label', 'is_default', 'icon'] as $expectedKey) { + if (!array_key_exists($expectedKey, $option)) { + $optionValue[$key][$expectedKey] = NULL; + } + } + if ($option['icon']) { + $this->assign('hasIcons', TRUE); + } } $this->assign('rows', $optionValue); } diff --git a/civicrm/CRM/Batch/Form/Entry.php b/civicrm/CRM/Batch/Form/Entry.php index 1e204d8293020b528f032578bd87f5200563b561..0a395b52afad3a2dd833dc7c4bc63bf1e619773b 100644 --- a/civicrm/CRM/Batch/Form/Entry.php +++ b/civicrm/CRM/Batch/Form/Entry.php @@ -319,7 +319,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $this->add('select', "member_option[$rowNumber]", '', $options); } if ($this->_batchInfo['type_id'] == $batchTypes['Pledge Payment']) { - $options = ['' => '-select-']; + $options = ['' => ts('-select-')]; $optionTypes = [ '1' => ts('Adjust Pledge Payment Schedule?'), '2' => ts('Adjust Total Pledge Amount?'), diff --git a/civicrm/CRM/Campaign/BAO/Campaign.php b/civicrm/CRM/Campaign/BAO/Campaign.php index a4dc88945d323b28011c0ed23c2378162976cf72..cff5bcaa07ffc47f8e854cbe4df3a2e2730c9cd2 100644 --- a/civicrm/CRM/Campaign/BAO/Campaign.php +++ b/civicrm/CRM/Campaign/BAO/Campaign.php @@ -599,16 +599,8 @@ INNER JOIN civicrm_group grp ON ( grp.id = campgrp.entity_id ) ['id' => 'campaigns', 'multiple' => 'multiple', 'class' => 'crm-select2'] ); } - $infoFields = [ - 'elementName', - 'hasAccessCampaign', - 'isCampaignEnabled', - 'showCampaignInSearch', - ]; - foreach ($infoFields as $fld) { - $campaignInfo[$fld] = $$fld; - } - $form->assign('campaignInfo', $campaignInfo); + + $form->assign('campaignElementName', $showCampaignInSearch ? $elementName : ''); } /** diff --git a/civicrm/CRM/Campaign/Form/SurveyType.php b/civicrm/CRM/Campaign/Form/SurveyType.php index 08c034416994e1ba307e4d043b2f8d76d90e13a7..713830405922e321700bf7f7847dc93215080162 100644 --- a/civicrm/CRM/Campaign/Form/SurveyType.php +++ b/civicrm/CRM/Campaign/Form/SurveyType.php @@ -58,7 +58,7 @@ class CRM_Campaign_Form_SurveyType extends CRM_Admin_Form { $url = CRM_Utils_System::url('civicrm/admin/campaign/surveyType', 'reset=1'); $session->pushUserContext($url); - if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) { + if ($this->_id && CRM_Core_OptionGroup::isDomainOptionGroup($this->_gName)) { $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id'); if (CRM_Core_Config::domainID() != $domainID) { CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); diff --git a/civicrm/CRM/Campaign/Selector/Search.php b/civicrm/CRM/Campaign/Selector/Search.php index ce9a302d68a96a8ff359871044c67c00f2062980..3f8c035ec47e023dcc51e4bfdf25e318c2d9321c 100644 --- a/civicrm/CRM/Campaign/Selector/Search.php +++ b/civicrm/CRM/Campaign/Selector/Search.php @@ -267,7 +267,7 @@ class CRM_Campaign_Selector_Search extends CRM_Core_Selector_Base implements CRM $selectSQL = " SELECT %1, contact_a.id, contact_a.display_name -{$sql['from']} +{$sql['from']} {$sql['where']} "; try { diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index 5014e4a0cd1e39ba46bd2ecf995df2e809615c8e..f28721991b5f1edf94d811690dd71f398db1ca5e 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -761,6 +761,9 @@ SELECT civicrm_case.id, case_status.label AS case_status, status_id, civicrm_cas $res = CRM_Core_DAO::executeQuery($query); while ($res->fetch()) { + if (!isset($rows[$res->case_type])) { + $rows[$res->case_type] = array_fill_keys($caseStatuses, []); + } if (!empty($rows[$res->case_type]) && !empty($rows[$res->case_type][$res->case_status])) { $rows[$res->case_type][$res->case_status]['count'] = $rows[$res->case_type][$res->case_status]['count'] + 1; } diff --git a/civicrm/CRM/Case/BAO/CaseType.php b/civicrm/CRM/Case/BAO/CaseType.php index e6a2510c32fd647d4749754a97390c4a952ea940..3cc8291001dd405643589e525adf7d400c2b0b6b 100644 --- a/civicrm/CRM/Case/BAO/CaseType.php +++ b/civicrm/CRM/Case/BAO/CaseType.php @@ -18,7 +18,7 @@ /** * This class contains the functions for Case Type management. */ -class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { +class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType implements \Civi\Test\HookInterface { /** * Static field for all the case information that we can potentially export. @@ -65,7 +65,6 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { $caseTypeDAO->copyValues($params); $result = $caseTypeDAO->save(); - CRM_Case_XMLRepository::singleton()->flush(); return $result; } @@ -407,13 +406,10 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { $transaction->rollback(); return $caseType; } + $transaction->commit(); CRM_Utils_Hook::post($action, 'CaseType', $caseType->id, $case); - $transaction->commit(); - CRM_Case_XMLRepository::singleton(TRUE); - CRM_Core_OptionGroup::flushAll(); - return $caseType; } @@ -438,20 +434,40 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { /** * @param int $caseTypeId * + * @deprecated * @throws CRM_Core_Exception - * @return mixed + * @return CRM_Case_DAO_CaseType */ public static function del($caseTypeId) { - $caseType = new CRM_Case_DAO_CaseType(); - $caseType->id = $caseTypeId; - $refCounts = $caseType->getReferenceCounts(); - $total = array_sum(CRM_Utils_Array::collect('count', $refCounts)); - if ($total) { - throw new CRM_Core_Exception(ts("You can not delete this case type -- it is assigned to %1 existing case record(s). If you do not want this case type to be used going forward, consider disabling it instead.", [1 => $total])); + return static::deleteRecord(['id' => $caseTypeId]); + } + + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + // Before deleting a caseType, check references + if ($event->action === 'delete') { + $caseType = new CRM_Case_DAO_CaseType(); + $caseType->id = $event->id; + $refCounts = $caseType->getReferenceCounts(); + $total = array_sum(CRM_Utils_Array::collect('count', $refCounts)); + if (array_sum(CRM_Utils_Array::collect('count', $refCounts))) { + throw new CRM_Core_Exception(ts("You can not delete this case type -- it is assigned to %1 existing case record(s). If you do not want this case type to be used going forward, consider disabling it instead.", [1 => $total])); + } } - $result = $caseType->delete(); - CRM_Case_XMLRepository::singleton(TRUE); - return $result; + } + + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + // When a caseType is saved or deleted, flush xml and optionGroup cache + CRM_Case_XMLRepository::singleton()->flush(); + CRM_Core_OptionGroup::flushAll(); } /** diff --git a/civicrm/CRM/Case/BAO/Query.php b/civicrm/CRM/Case/BAO/Query.php index c2855f7b944641a4228f465f081066212446f475..e56ec4663fa5b3eaf29ff2bd2e4d993fd59f3f49 100644 --- a/civicrm/CRM/Case/BAO/Query.php +++ b/civicrm/CRM/Case/BAO/Query.php @@ -676,7 +676,8 @@ case_relation_type.id = case_relationship.relationship_type_id )"; * * @param CRM_Case_Form_Search $form */ - public static function buildSearchForm(&$form) { + public static function buildSearchForm(&$form): void { + $form->addOptionalQuickFormElement('upcoming'); //validate case configuration. $configured = CRM_Case_BAO_Case::isCaseConfigured(); $form->assign('notConfigured', !$configured['configured']); diff --git a/civicrm/CRM/Case/Form/Activity.php b/civicrm/CRM/Case/Form/Activity.php index 01714e436b05a4dcb596827eb46b2c86688018c4..0415212fd8ded8ef4aa63be0c1bbb100e7d14b92 100644 --- a/civicrm/CRM/Case/Form/Activity.php +++ b/civicrm/CRM/Case/Form/Activity.php @@ -255,7 +255,7 @@ class CRM_Case_Form_Activity extends CRM_Activity_Form_Activity { $openCaseID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Open Case'); unset($aTypes[$openCaseID]); asort($aTypes); - $this->_fields['followup_activity_type_id']['attributes'] = ['' => '- select activity type -'] + $aTypes; + $this->_fields['followup_activity_type_id']['attributes'] = ['' => ts('- select activity type -')] + $aTypes; } parent::buildQuickForm(); diff --git a/civicrm/CRM/Case/Form/CustomData.php b/civicrm/CRM/Case/Form/CustomData.php index 95a339c2557f75c49c9463b4f6d081c443bb85ff..9e4bb5e2a0f436da399868f516b9e72ab4f77781 100644 --- a/civicrm/CRM/Case/Form/CustomData.php +++ b/civicrm/CRM/Case/Form/CustomData.php @@ -74,6 +74,7 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { $this->assign('groupID', $this->_groupID); $this->assign('subType', $this->_subTypeID); $this->assign('contactID', $this->_contactID); + $this->assign('cgCount'); } /** @@ -148,7 +149,7 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { public function formatCustomDataChangesForDetail($params) { $formattedDetails = []; foreach ($params as $customField => $newCustomValue) { - if (substr($customField, 0, 7) == 'custom_') { + if (substr($customField, 0, 7) === 'custom_') { if (($this->_defaults[$customField] ?? '') === $newCustomValue) { // Don't show values that did not change continue; diff --git a/civicrm/CRM/Case/Page/DashBoard.php b/civicrm/CRM/Case/Page/DashBoard.php index 7a24af22cea6027fb74137b9b11a8d817aec003b..bfc8c1fe3aed26dfa835e3cba4a3cb7bda7e8720 100644 --- a/civicrm/CRM/Case/Page/DashBoard.php +++ b/civicrm/CRM/Case/Page/DashBoard.php @@ -46,8 +46,6 @@ class CRM_Case_Page_DashBoard extends CRM_Core_Page { CRM_Utils_System::setTitle(ts('CiviCase Dashboard')); - $userID = $session->get('userID'); - //validate access for all cases. if ($allCases && !CRM_Core_Permission::check('access all cases and activities')) { $allCases = 0; diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index ab2850c07b34a2545485538de71e6f19e79b0934..64a14674caaf412c189522692cb5e12297daa42d 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -541,6 +541,10 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact implements Civi\Te // If we are setting it to null then null out the display field. $params[$greetingIndex . '_display'] = 'null'; } + if ((int) $params[$greetingParam] != CRM_Core_PseudoConstant::getKey('CRM_Contact_BAO_Contact', $greetingParam, 'Customized')) { + $params[$greetingIndex . '_custom'] = 'null'; + } + } } @@ -1761,7 +1765,7 @@ WHERE civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer'); $returnProperties['household_name'] = 1; $returnProperties['contact_type'] = 1; $returnProperties['contact_sub_type'] = 1; - list($query) = CRM_Contact_BAO_Query::apiQuery($params, $returnProperties); + [$query] = CRM_Contact_BAO_Query::apiQuery($params, $returnProperties); return $query; } @@ -1785,7 +1789,7 @@ WHERE civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer'); $multipleFields = ['website' => 'url']; foreach ($fields as $name => $dontCare) { if (strpos($name, '-') !== FALSE) { - list($fieldName, $id, $type) = CRM_Utils_System::explode('-', $name, 3); + [$fieldName, $id, $type] = CRM_Utils_System::explode('-', $name, 3); if (!in_array($fieldName, $multipleFields)) { if ($id == 'Primary') { @@ -2007,7 +2011,7 @@ ORDER BY civicrm_email.is_primary DESC"; CRM_Utils_Hook::pre('create', 'Profile', NULL, $params); } - list($data, $contactDetails) = self::formatProfileContactParams($params, $fields, $contactID, $ufGroupId, $ctype); + [$data, $contactDetails] = self::formatProfileContactParams($params, $fields, $contactID, $ufGroupId, $ctype); // manage is_opt_out if (array_key_exists('is_opt_out', $fields) && array_key_exists('is_opt_out', $params)) { @@ -2189,7 +2193,7 @@ ORDER BY civicrm_email.is_primary DESC"; $primaryPhoneLoc = NULL; $session = CRM_Core_Session::singleton(); foreach ($params as $key => $value) { - list($fieldName, $locTypeId, $typeId) = CRM_Utils_System::explode('-', $key, 3); + [$fieldName, $locTypeId, $typeId] = CRM_Utils_System::explode('-', $key, 3); if ($locTypeId == 'Primary') { if ($contactID) { @@ -2762,6 +2766,7 @@ LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) // @todo this is still reloading the whole contact -fix to be more selective & use pre-loaded. $contact = new CRM_Contact_BAO_Contact(); $contact->id = $contactID; + $contact->find(TRUE); CRM_Contact_BAO_Contact::processGreetings($contact); } } @@ -2770,11 +2775,14 @@ LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) /** * Process greetings and cache. * - * @param object $contact + * @param \CRM_Contact_DAO_Contact $contact * Contact object after save. */ public static function processGreetings(&$contact) { + $emailGreetingString = self::getTemplateForGreeting('email_greeting', $contact); + $postalGreetingString = self::getTemplateForGreeting('postal_greeting', $contact); + $addresseeString = self::getTemplateForGreeting('addressee', $contact); //@todo this function does a lot of unnecessary loading. // ensureGreetingParamsAreSet now makes sure that the contact is // loaded and using updateGreetingsOnTokenFieldChange @@ -2792,30 +2800,8 @@ LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) CRM_Core_DAO::storeValues($contact, $contactDetails); $contactDetails = [[$contact->id => $contactDetails]]; - $emailGreetingString = $postalGreetingString = $addresseeString = NULL; $updateQueryString = []; - //cache email and postal greeting to greeting display - if ($contact->email_greeting_custom != 'null' && $contact->email_greeting_custom) { - $emailGreetingString = $contact->email_greeting_custom; - } - elseif ($contact->email_greeting_id != 'null' && $contact->email_greeting_id) { - // the filter value for Individual contact type is set to 1 - $filter = [ - 'contact_type' => $contact->contact_type, - 'greeting_type' => 'email_greeting', - ]; - - $emailGreeting = CRM_Core_PseudoConstant::greeting($filter); - $emailGreetingString = $emailGreeting[$contact->email_greeting_id]; - $updateQueryString[] = " email_greeting_custom = NULL "; - } - else { - if ($contact->email_greeting_custom) { - $updateQueryString[] = " email_greeting_display = NULL "; - } - } - if ($emailGreetingString) { CRM_Contact_BAO_Contact_Utils::processGreetingTemplate($emailGreetingString, $contactDetails, @@ -2826,25 +2812,6 @@ LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) $updateQueryString[] = " email_greeting_display = '{$emailGreetingString}'"; } - //postal greetings - if ($contact->postal_greeting_custom !== 'null' && $contact->postal_greeting_custom) { - $postalGreetingString = $contact->postal_greeting_custom; - } - elseif ($contact->postal_greeting_id !== 'null' && $contact->postal_greeting_id) { - $filter = [ - 'contact_type' => $contact->contact_type, - 'greeting_type' => 'postal_greeting', - ]; - $postalGreeting = CRM_Core_PseudoConstant::greeting($filter); - $postalGreetingString = $postalGreeting[$contact->postal_greeting_id]; - $updateQueryString[] = " postal_greeting_custom = NULL "; - } - else { - if ($contact->postal_greeting_custom) { - $updateQueryString[] = " postal_greeting_display = NULL "; - } - } - if ($postalGreetingString) { CRM_Contact_BAO_Contact_Utils::processGreetingTemplate($postalGreetingString, $contactDetails, @@ -2855,26 +2822,6 @@ LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) $updateQueryString[] = " postal_greeting_display = '{$postalGreetingString}'"; } - // addressee - if ($contact->addressee_custom !== 'null' && $contact->addressee_custom) { - $addresseeString = $contact->addressee_custom; - } - elseif ($contact->addressee_id !== 'null' && $contact->addressee_id) { - $filter = [ - 'contact_type' => $contact->contact_type, - 'greeting_type' => 'addressee', - ]; - - $addressee = CRM_Core_PseudoConstant::greeting($filter); - $addresseeString = $addressee[$contact->addressee_id]; - $updateQueryString[] = " addressee_custom = NULL "; - } - else { - if ($contact->addressee_custom) { - $updateQueryString[] = " addressee_display = NULL "; - } - } - if ($addresseeString) { CRM_Contact_BAO_Contact_Utils::processGreetingTemplate($addresseeString, $contactDetails, @@ -3538,6 +3485,30 @@ LEFT JOIN civicrm_address ON ( civicrm_address.contact_id = civicrm_contact.id ) } } + /** + * Get the template string for the given greeting. + * + * @param string $greetingType + * @param CRM_Contact_DAO_Contact $contact + * + * @return string + */ + private static function getTemplateForGreeting(string $greetingType, CRM_Contact_DAO_Contact $contact): string { + $customFieldName = $greetingType . '_custom'; + if (!CRM_Utils_System::isNull($contact->{$customFieldName})) { + return $contact->{$customFieldName}; + } + $idField = $greetingType . '_id'; + if (!is_numeric($contact->{$idField})) { + return ''; + } + $filter = [ + 'contact_type' => $contact->contact_type, + 'greeting_type' => $greetingType, + ]; + return CRM_Core_PseudoConstant::greeting($filter)[$contact->{$idField}]; + } + /** * @inheritDoc */ diff --git a/civicrm/CRM/Contact/BAO/ContactType.php b/civicrm/CRM/Contact/BAO/ContactType.php index 3b7cc388701b96ca676eafe4a5930ffbdb657889..f47c901ba3b7e623279eb3aeb2843534d51308be 100644 --- a/civicrm/CRM/Contact/BAO/ContactType.php +++ b/civicrm/CRM/Contact/BAO/ContactType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { +class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType implements \Civi\Test\HookInterface { /** * Fetch object based on array of properties. @@ -460,52 +460,69 @@ WHERE subtype.name IN ('" . implode("','", $subType) . "' )"; * * @param int $contactTypeId * ID of the Contact Subtype to be deleted. - * + * @deprecated * @return bool */ public static function del($contactTypeId) { - if (!$contactTypeId) { return FALSE; } - - $params = ['id' => $contactTypeId]; - self::retrieve($params, $typeInfo); - $name = $typeInfo['name']; - // check if any custom group - $custom = new CRM_Core_DAO_CustomGroup(); - $custom->whereAdd("extends_entity_column_value LIKE '%" . - CRM_Core_DAO::VALUE_SEPARATOR . - $name . - CRM_Core_DAO::VALUE_SEPARATOR . "%'" - ); - if ($custom->find()) { + try { + static::deleteRecord(['id' => $contactTypeId]); + return TRUE; + } + catch (CRM_Core_Exception $e) { return FALSE; } + } - // remove subtype for existing contacts - $sql = " + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + // Before deleting a contactType, check references by custom groups + if ($event->action === 'delete') { + $name = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_ContactType', $event->id); + $sep = CRM_Core_DAO::VALUE_SEPARATOR; + $custom = new CRM_Core_DAO_CustomGroup(); + $custom->whereAdd("extends_entity_column_value LIKE '%{$sep}{$name}{$sep}%'"); + if ($custom->find()) { + throw new CRM_Core_Exception(ts("You can not delete this contact type -- it is used by %1 custom field group(s). The custom fields must be deleted first.", [1 => $custom->N])); + } + } + } + + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'delete') { + $sep = CRM_Core_DAO::VALUE_SEPARATOR; + $subType = "$sep{$event->object->name}$sep"; + // For contacts with just the one sub-type, set to null + $sql = " UPDATE civicrm_contact SET contact_sub_type = NULL -WHERE contact_sub_type = '$name'"; - CRM_Core_DAO::executeQuery($sql); +WHERE contact_sub_type = '$subType'"; + CRM_Core_DAO::executeQuery($sql); + // For contacts with multipe sub-types, remove this one + $sql = " +UPDATE civicrm_contact SET contact_sub_type = REPLACE(contact_sub_type, '$subType', '$sep') +WHERE contact_sub_type LIKE '%{$subType}%'"; + CRM_Core_DAO::executeQuery($sql); + + // remove navigation entry which was auto-created when this sub-type was added + \Civi\Api4\Navigation::delete(FALSE) + ->addWhere('name', '=', "New {$event->object->name}") + ->addWhere('url', 'LIKE', 'civicrm/contact/add%') + // Overide the default which limits to a single domain + ->addWhere('domain_id', '>', 0) + ->execute(); - // remove subtype from contact type table - $contactType = new CRM_Contact_DAO_ContactType(); - $contactType->id = $contactTypeId; - $contactType->delete(); - - // remove navigation entry if any - if ($name) { - $sql = ' -DELETE -FROM civicrm_navigation -WHERE name = %1'; - $params = [1 => ["New $name", 'String']]; - CRM_Core_DAO::executeQuery($sql, $params); - CRM_Core_BAO_Navigation::resetNavigation(); Civi::cache('contactTypes')->clear(); } - return TRUE; } /** diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index cbe7debf28a06ac4cb131785994ffe8c30ad6dfc..54e6c641e25bec41b1a45a88afb21276a2288f2c 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -5136,7 +5136,7 @@ civicrm_relationship.start_date > {$today} $this->appendFinancialTypeWhereAndFromToQueryStrings($where, $from); - $summary = ['total' => []]; + $summary = ['total' => [], 'soft_credit' => ['count' => 0, 'avg' => 0, 'amount' => 0]]; $this->addBasicStatsToSummary($summary, $where, $from); if (CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled()) { @@ -6701,7 +6701,7 @@ AND displayRelType.is_active = 1 GROUP BY currency"; $dao = CRM_Core_DAO::executeQuery($query); - + $summary['cancel'] = ['count' => 0, 'amount' => 0, 'avg' => 0]; if ($dao->N <= 1) { if ($dao->fetch()) { $summary['cancel']['count'] = $dao->cancel_count; diff --git a/civicrm/CRM/Contact/BAO/RelationshipType.php b/civicrm/CRM/Contact/BAO/RelationshipType.php index 7515f4f14d5da3b1e0809a69824070e5789fd4a1..8a12e55bb4a6a7d6d9c0f339e42dd2ed0b740c8f 100644 --- a/civicrm/CRM/Contact/BAO/RelationshipType.php +++ b/civicrm/CRM/Contact/BAO/RelationshipType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType { +class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType implements \Civi\Test\HookInterface { /** * Class constructor. @@ -99,6 +99,7 @@ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType * * @param int $relationshipTypeId * + * @deprecated * @throws CRM_Core_Exception * @return mixed */ @@ -109,40 +110,21 @@ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType if (!CRM_Utils_Rule::positiveInteger($relationshipTypeId)) { throw new CRM_Core_Exception(ts('Invalid relationship type')); } + return static::deleteRecord(['id' => $relationshipTypeId]); + } - //check dependencies - - // delete all relationships - $relationship = new CRM_Contact_DAO_Relationship(); - $relationship->relationship_type_id = $relationshipTypeId; - $relationship->delete(); - - // remove this relationship type from membership types - $mems = civicrm_api3('MembershipType', 'get', [ - 'relationship_type_id' => ['LIKE' => "%{$relationshipTypeId}%"], - 'return' => ['id', 'relationship_type_id', 'relationship_direction'], - ]); - foreach ($mems['values'] as $membershipTypeId => $membershipType) { - $pos = array_search($relationshipTypeId, $membershipType['relationship_type_id']); - // Api call may have returned false positives but currently the relationship_type_id uses - // nonstandard serialization which makes anything more accurate impossible. - if ($pos !== FALSE) { - unset($membershipType['relationship_type_id'][$pos], $membershipType['relationship_direction'][$pos]); - civicrm_api3('MembershipType', 'create', $membershipType); - } - } - - //fixed for CRM-3323 - $mappingField = new CRM_Core_DAO_MappingField(); - $mappingField->relationship_type_id = $relationshipTypeId; - $mappingField->find(); - while ($mappingField->fetch()) { - $mappingField->delete(); + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + // need to delete all option value field before deleting group + \Civi\Api4\Relationship::delete(FALSE) + ->addWhere('relationship_type_id', '=', $event->id) + ->execute(); } - - $relationshipType = new CRM_Contact_DAO_RelationshipType(); - $relationshipType->id = $relationshipTypeId; - return $relationshipType->delete(); } } diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 860e6e9c50f6442303988b65ed21ea5b037ef95d..a6bb970eea2c8e222e4150a8f8613550c9c63fba 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:5a83ff9bd2a1837caa260151fa56f3ac) + * (GenCodeChecksum:5a410e3dd35c4d4b66fdeeacf1cfd971) */ /** @@ -1500,9 +1500,6 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'required' => TRUE, 'where' => 'civicrm_contact.is_deleted', 'export' => TRUE, - 'permission' => [ - 'access deleted contacts', - ], 'default' => '0', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', diff --git a/civicrm/CRM/Contact/Form/Contact.php b/civicrm/CRM/Contact/Form/Contact.php index 2e6b51d888273b6a021231a0442212589a4076a6..7168f0a9f804ee086c73e42e80c0d7b64f04376e 100644 --- a/civicrm/CRM/Contact/Form/Contact.php +++ b/civicrm/CRM/Contact/Form/Contact.php @@ -126,6 +126,19 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { return 'create'; } + /** + * Get any smarty elements that may not be present in the form. + * + * To make life simpler for smarty we ensure they are set to null + * rather than unset. This is done at the last minute when $this + * is converted to an array to be assigned to the form. + * + * @return array + */ + public function getOptionalSmartyElements(): array { + return ['group']; + } + /** * Build all the data structures needed to build the form. */ @@ -333,7 +346,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { if ($groupCount > 1) { $this->set('groupID', $groupID); //loop the group - for ($i = 0; $i <= $groupCount; $i++) { + for ($i = 1; $i <= $groupCount; $i++) { CRM_Custom_Form_CustomData::preProcess($this, NULL, $contactSubType, $i, $this->_contactType, $this->_contactId ); @@ -357,8 +370,6 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { if ($this->_contactSubType || isset($paramSubType)) { $paramSubType = (isset($paramSubType)) ? $paramSubType : str_replace(CRM_Core_DAO::VALUE_SEPARATOR, ',', trim($this->_contactSubType, CRM_Core_DAO::VALUE_SEPARATOR)); - - $this->assign('paramSubType', $paramSubType); } if (CRM_Utils_Request::retrieve('type', 'String')) { @@ -377,6 +388,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { $this->assign('customValueCount', $this->_customValueCount); } } + $this->assign('paramSubType', $paramSubType ?? ''); } /** @@ -426,9 +438,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { //set address block defaults CRM_Contact_Form_Edit_Address::setDefaultValues($defaults, $this); - if (!empty($defaults['image_URL'])) { - $this->assign("imageURL", CRM_Utils_File::getImageURL($defaults['image_URL'])); - } + $this->assign('imageURL', !empty($defaults['image_URL']) ? CRM_Utils_File::getImageURL($defaults['image_URL']) : ''); //set location type and country to default for each block $this->blockSetDefaults($defaults); diff --git a/civicrm/CRM/Contact/Form/Edit/Address.php b/civicrm/CRM/Contact/Form/Edit/Address.php index 105ef33ce3ccd1939294d3fdb1a05e3ed3444c16..6931364f86946e164eb46baf6b40134d3d52f9e1 100644 --- a/civicrm/CRM/Contact/Form/Edit/Address.php +++ b/civicrm/CRM/Contact/Form/Edit/Address.php @@ -231,6 +231,9 @@ class CRM_Contact_Form_Edit_Address { */ public static function setDefaultValues(&$defaults, &$form) { $addressValues = []; + // Actual values will be assigned to these below if there are some. + $form->assign('masterAddress'); + $form->assign('sharedAddresses', []); if (isset($defaults['address']) && is_array($defaults['address']) && !CRM_Utils_System::isNull($defaults['address']) ) { diff --git a/civicrm/CRM/Contact/Form/Edit/Email.php b/civicrm/CRM/Contact/Form/Edit/Email.php index c75865bd8294c2457bc0cb2d76a8d46a0145d947..f6c1a3cbec124217ddd9689441bc06f007847455 100644 --- a/civicrm/CRM/Contact/Form/Edit/Email.php +++ b/civicrm/CRM/Contact/Form/Edit/Email.php @@ -66,33 +66,32 @@ class CRM_Contact_Form_Edit_Email { //Bulkmail checkbox $form->assign('multipleBulk', $multipleBulk); - $js = ['id' => "Email_" . $blockId . "_IsBulkmail" , 'aria-label' => ts('Bulk Mailing for Email %1?', [1 => $blockId])]; + $js = ['id' => 'Email_' . $blockId . '_IsBulkmail', 'aria-label' => ts('Bulk Mailing for Email %1?', [1 => $blockId])]; if (!$blockEdit) { $js['onClick'] = 'singleSelect( this.id );'; } $form->addElement('advcheckbox', "email[$blockId][is_bulkmail]", NULL, '', $js); //is_Primary radio - $js = ['id' => "Email_" . $blockId . "_IsPrimary", 'aria-label' => ts('Email %1 is primary?', [1 => $blockId])]; + $js = ['id' => 'Email_' . $blockId . '_IsPrimary', 'aria-label' => ts('Email %1 is primary?', [1 => $blockId])]; if (!$blockEdit) { $js['onClick'] = 'singleSelect( this.id );'; } $form->addElement('radio', "email[$blockId][is_primary]", '', '', '1', $js); - - if (CRM_Utils_System::getClassName($form) == 'CRM_Contact_Form_Contact') { - // Only display the signature fields if this contact has a CMS account - // because they can only send email if they have access to the CRM - if (!empty($form->_contactId)) { - $ufID = CRM_Core_BAO_UFMatch::getUFId($form->_contactId); - if ($ufID) { - $form->add('textarea', "email[$blockId][signature_text]", ts('Signature (Text)'), - ['rows' => 2, 'cols' => 40] - ); - $form->add('wysiwyg', "email[$blockId][signature_html]", ts('Signature (HTML)'), - ['rows' => 2, 'cols' => 40] - ); - } + // Only display the signature fields if this contact has a CMS account + // because they can only send email if they have access to the CRM + $isAddSignatureFields = $form instanceof \CRM_Contact_Form_Contact && !empty($form->_contactId); + $form->assign('isAddSignatureFields', $isAddSignatureFields); + if ($isAddSignatureFields) { + $ufID = CRM_Core_BAO_UFMatch::getUFId($form->_contactId); + if ($ufID) { + $form->add('textarea', "email[$blockId][signature_text]", ts('Signature (Text)'), + ['rows' => 2, 'cols' => 40] + ); + $form->add('wysiwyg', "email[$blockId][signature_html]", ts('Signature (HTML)'), + ['rows' => 2, 'cols' => 40] + ); } } } diff --git a/civicrm/CRM/Contact/Form/Edit/Individual.php b/civicrm/CRM/Contact/Form/Edit/Individual.php index f4d933933a3c30915c800db695d7b833e212d98d..af646a350c47b415f66a14c0c86e84fe9f2b09be 100644 --- a/civicrm/CRM/Contact/Form/Edit/Individual.php +++ b/civicrm/CRM/Contact/Form/Edit/Individual.php @@ -31,7 +31,8 @@ class CRM_Contact_Form_Edit_Individual { * ( 1 for contact summary. * top bar form and 2 for display name edit ) */ - public static function buildQuickForm(&$form, $inlineEditMode = NULL) { + public static function buildQuickForm($form, $inlineEditMode = NULL): void { + $form->addOptionalQuickFormElement('formal_title'); $form->applyFilter('__ALL__', 'trim'); if (!$inlineEditMode || $inlineEditMode == 1) { @@ -46,7 +47,7 @@ class CRM_Contact_Form_Edit_Individual { // Fixme: dear god why? these come out in a format that is NOT the name of the fields. foreach ($nameFields as &$fix) { $fix = str_replace(' ', '_', strtolower($fix)); - if ($fix == 'prefix' || $fix == 'suffix') { + if ($fix === 'prefix' || $fix === 'suffix') { // God, why god? $fix .= '_id'; } @@ -81,7 +82,7 @@ class CRM_Contact_Form_Edit_Individual { if (!$inlineEditMode) { //External Identifier Element - $form->addField('external_identifier', ['label' => 'External ID']); + $form->addField('external_identifier', ['label' => ts('External ID')]); $form->addRule('external_identifier', ts('External ID already exists in Database.'), diff --git a/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php b/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php index a3d060fc4726d103107f4f5be16ed79ead85c081..e9ffa6f6677b1b8eedeedcda0e8a66c8563b9644 100644 --- a/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php +++ b/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php @@ -61,7 +61,8 @@ class CRM_Contact_Form_Edit_TagsAndGroups { if (!isset($form->_tagGroup)) { $form->_tagGroup = []; } - + $form->addExpectedSmartyVariable('type'); + $form->addOptionalQuickFormElement('group'); // NYSS 5670 if (!$contactId && !empty($form->_contactId)) { $contactId = $form->_contactId; @@ -99,12 +100,12 @@ class CRM_Contact_Form_Edit_TagsAndGroups { $id = $group['id']; // make sure that this group has public visibility if ($visibility && - $group['visibility'] == 'User and User Admin Only' + $group['visibility'] === 'User and User Admin Only' ) { continue; } - if ($groupElementType == 'select') { + if ($groupElementType === 'select') { $groupsOptions[$key] = $group; } else { @@ -113,23 +114,23 @@ class CRM_Contact_Form_Edit_TagsAndGroups { } } - if ($groupElementType == 'select' && !empty($groupsOptions)) { + if ($groupElementType === 'select' && !empty($groupsOptions)) { $form->add('select2', $fName, $groupName, $groupsOptions, FALSE, ['placeholder' => ts('- select -'), 'multiple' => TRUE, 'class' => 'twenty'] ); $form->assign('groupCount', count($groupsOptions)); } - if ($groupElementType == 'checkbox' && !empty($elements)) { + if ($groupElementType === 'checkbox' && !empty($elements)) { $form->addGroup($elements, $fName, $groupName, ' <br />'); $form->assign('groupCount', count($elements)); if ($isRequired) { $form->addRule($fName, ts('%1 is a required field.', [1 => $groupName]), 'required'); } } - $form->assign('groupElementType', $groupElementType); } } + $form->assign('groupElementType', $groupElementType ?? NULL); if ($type & self::TAG) { $tags = CRM_Core_BAO_Tag::getColorTags('civicrm_contact'); diff --git a/civicrm/CRM/Contact/Form/Inline.php b/civicrm/CRM/Contact/Form/Inline.php index 2f551a1cead28caba1ff536e2fc654f702b89379..ea93dde40ddc58c02e7299e91bf7733201516a7d 100644 --- a/civicrm/CRM/Contact/Form/Inline.php +++ b/civicrm/CRM/Contact/Form/Inline.php @@ -162,6 +162,7 @@ abstract class CRM_Contact_Form_Inline extends CRM_Core_Form { 'contact_view_options', TRUE ); $smarty->assign('changeLog', $viewOptions['log']); + $smarty->ensureVariablesAreAssigned(['action']); $ret = ['markup' => $smarty->fetch('CRM/common/contactFooter.tpl')]; if ($includeCount) { $ret['count'] = CRM_Contact_BAO_Contact::getCountComponent('log', $cid); diff --git a/civicrm/CRM/Contact/Form/Task/EmailTrait.php b/civicrm/CRM/Contact/Form/Task/EmailTrait.php index c4d65015076d4a9b9da621e3eab0c3f404b4eaa8..b62a8c516329c8bdfdb76e3360f8d5b8b6acbd4f 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailTrait.php +++ b/civicrm/CRM/Contact/Form/Task/EmailTrait.php @@ -125,9 +125,7 @@ trait CRM_Contact_Form_Task_EmailTrait { } $this->setContactIDs(); $this->assign('single', $this->_single); - if (CRM_Core_Permission::check('administer CiviCRM')) { - $this->assign('isAdmin', 1); - } + $this->assign('isAdmin', CRM_Core_Permission::check('administer CiviCRM')); } /** diff --git a/civicrm/CRM/Contact/Form/Task/SMS.php b/civicrm/CRM/Contact/Form/Task/SMS.php index 2c795fe8c5b8c222ce127ed9b22b24a46a860dd8..274aab656409a2183ab14586672219d47727710c 100644 --- a/civicrm/CRM/Contact/Form/Task/SMS.php +++ b/civicrm/CRM/Contact/Form/Task/SMS.php @@ -48,9 +48,7 @@ class CRM_Contact_Form_Task_SMS extends CRM_Contact_Form_Task { } $this->assign('single', $this->_single); - if (CRM_Core_Permission::check('administer CiviCRM')) { - $this->assign('isAdmin', 1); - } + $this->assign('isAdmin', CRM_Core_Permission::check('administer CiviCRM')); } /** diff --git a/civicrm/CRM/Contact/Import/Form/DataSource.php b/civicrm/CRM/Contact/Import/Form/DataSource.php index ead2b2435d1ff854da86f7d6643273af0dcb8665..070affb7c8004131579773fd4d0fdf9f790ad23f 100644 --- a/civicrm/CRM/Contact/Import/Form/DataSource.php +++ b/civicrm/CRM/Contact/Import/Form/DataSource.php @@ -28,6 +28,19 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { private $_dataSourceClass; + /** + * Get any smarty elements that may not be present in the form. + * + * To make life simpler for smarty we ensure they are set to null + * rather than unset. This is done at the last minute when $this + * is converted to an array to be assigned to the form. + * + * @return array + */ + public function getOptionalQuickFormElements(): array { + return ['disableUSPS']; + } + /** * Set variables up before form is built. * diff --git a/civicrm/CRM/Contact/Page/View.php b/civicrm/CRM/Contact/Page/View.php index ce076fe83c89d94e7652d5ef7f6d248864db0f67..f891c0d6ac590fa43e5898c445e8a69bcaa2b2f6 100644 --- a/civicrm/CRM/Contact/Page/View.php +++ b/civicrm/CRM/Contact/Page/View.php @@ -143,9 +143,8 @@ class CRM_Contact_Page_View extends CRM_Core_Page { $path = CRM_Utils_System::url('civicrm/contact/view', 'reset=1&cid=' . $this->_contactId); CRM_Utils_System::appendBreadCrumb([['title' => ts('View Contact'), 'url' => $path]]); - if ($image_URL = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->_contactId, 'image_URL')) { - $this->assign("imageURL", CRM_Utils_File::getImageURL($image_URL)); - } + $image_URL = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->_contactId, 'image_URL'); + $this->assign('imageURL', $image_URL ? CRM_Utils_File::getImageURL($image_URL) : ''); // also store in session for future use $session = CRM_Core_Session::singleton(); @@ -157,7 +156,7 @@ class CRM_Contact_Page_View extends CRM_Core_Page { // check logged in user permission self::checkUserPermission($this); - list($displayName, $contactImage, $contactType, $contactSubtype, $contactImageUrl) = self::getContactDetails($this->_contactId); + [$displayName, $contactImage, $contactType, $contactSubtype, $contactImageUrl] = self::getContactDetails($this->_contactId); $this->assign('displayName', $displayName); $this->set('contactType', $contactType); @@ -208,19 +207,7 @@ class CRM_Contact_Page_View extends CRM_Core_Page { // Add links for actions menu self::addUrls($this, $this->_contactId); - - if ($contactType == 'Organization' && - CRM_Core_Permission::check('administer Multiple Organizations') && - Civi::settings()->get('is_enabled')) { - //check is any relationship between the organization and groups - $groupOrg = CRM_Contact_BAO_GroupOrganization::hasGroupAssociated($this->_contactId); - if ($groupOrg) { - $groupOrganizationUrl = CRM_Utils_System::url('civicrm/group', - "reset=1&oid={$this->_contactId}" - ); - $this->assign('groupOrganizationUrl', $groupOrganizationUrl); - } - } + $this->assign('groupOrganizationUrl', $this->getGroupOrganizationUrl($contactType)); } /** @@ -292,7 +279,7 @@ class CRM_Contact_Page_View extends CRM_Core_Page { static $contactDetails; $contactImage = NULL; if (!isset($contactDetails[$contactId])) { - list($displayName, $contactImage) = self::getContactDetails($contactId); + [$displayName, $contactImage] = self::getContactDetails($contactId); $contactDetails[$contactId] = [ 'displayName' => $displayName, 'contactImage' => $contactImage, @@ -341,16 +328,16 @@ class CRM_Contact_Page_View extends CRM_Core_Page { */ public static function addUrls(&$obj, $cid) { $uid = CRM_Core_BAO_UFMatch::getUFId($cid); - + $obj->assign('userRecordId', $uid); + $userRecordUrl = ''; if ($uid) { $userRecordUrl = CRM_Core_Config::singleton()->userSystem->getUserRecordUrl($cid); - $obj->assign('userRecordUrl', $userRecordUrl); - $obj->assign('userRecordId', $uid); } elseif (CRM_Core_Config::singleton()->userSystem->checkPermissionAddUser()) { $userAddUrl = CRM_Utils_System::url('civicrm/contact/view/useradd', 'reset=1&action=add&cid=' . $cid); $obj->assign('userAddUrl', $userAddUrl); } + $obj->assign('userRecordUrl', $userRecordUrl); if (CRM_Core_Permission::check('access Contact Dashboard')) { $dashboardURL = CRM_Utils_System::url('civicrm/user', @@ -371,4 +358,19 @@ class CRM_Contact_Page_View extends CRM_Core_Page { } } + /** + * @param string $contactType + * + * @return string + */ + protected function getGroupOrganizationUrl(string $contactType): string { + if ($contactType !== 'Organization' || !CRM_Core_Permission::check('administer Multiple Organizations') + || !CRM_Contact_BAO_GroupOrganization::hasGroupAssociated($this->_contactId) + || !Civi::settings()->get('is_enabled') + ) { + return ''; + } + return CRM_Utils_System::url('civicrm/group', "reset=1&oid={$this->_contactId}"); + } + } diff --git a/civicrm/CRM/Contact/Page/View/Relationship.php b/civicrm/CRM/Contact/Page/View/Relationship.php index 26cb59f04ce756e4982337488f67acdefd94c547..75dc0a128044be3b9275b58e22c1df9d78866b24 100644 --- a/civicrm/CRM/Contact/Page/View/Relationship.php +++ b/civicrm/CRM/Contact/Page/View/Relationship.php @@ -197,6 +197,7 @@ class CRM_Contact_Page_View_Relationship extends CRM_Core_Page { * @throws \CRM_Core_Exception */ public function run() { + $this->assign('entityInClassFormat', 'relationship'); $this->preProcessQuickEntityPage(); $this->setContext(); diff --git a/civicrm/CRM/Contact/Page/View/Summary.php b/civicrm/CRM/Contact/Page/View/Summary.php index 1cfd39f9db872b7df1785884f573f547294d16dc..0408f9a1143e869b6cc9e090eb554292241dd736 100644 --- a/civicrm/CRM/Contact/Page/View/Summary.php +++ b/civicrm/CRM/Contact/Page/View/Summary.php @@ -110,10 +110,10 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { ->addScriptFile('civicrm', 'templates/CRM/Contact/Page/View/Summary.js', 2, 'html-header') ->addStyleFile('civicrm', 'css/contactSummary.css', 2, 'html-header') ->addScriptFile('civicrm', 'templates/CRM/common/TabHeader.js', 1, 'html-header') - ->addSetting(array( - 'summaryPrint' => array('mode' => $this->_print), - 'tabSettings' => array('active' => CRM_Utils_Request::retrieve('selectedChild', 'Alphanumeric', $this, FALSE, 'summary')), - )); + ->addSetting([ + 'summaryPrint' => ['mode' => $this->_print], + 'tabSettings' => ['active' => CRM_Utils_Request::retrieve('selectedChild', 'Alphanumeric', $this, FALSE, 'summary')], + ]); $this->assign('summaryPrint', $this->_print); $session = CRM_Core_Session::singleton(); $url = CRM_Utils_System::url('civicrm/contact/view', 'reset=1&cid=' . $this->_contactId); @@ -121,7 +121,30 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $this->assignFieldMetadataToTemplate('Contact'); $params = []; - $defaults = []; + $defaults = [ + // Set empty default values for these - they will be overwritten when the contact is + // loaded in CRM_Contact_BAO_Contact::retrieve if there are real values + // but since we are not using apiV4 they will be left unset if empty. + // However, the wind up assigned as smarty variables so we ensure they are set to prevent e-notices + // used by ContactInfo.tpl + 'job_title' => '', + 'current_employer_id' => '', + 'nick_name' => '', + 'legal_name' => '', + 'source' => '', + 'sic_code' => '', + 'external_identifier' => '', + // for CommunicationPreferences.tpl + 'postal_greeting_custom' => '', + 'email_greeting_custom' => '', + 'addressee_custom' => '', + 'communication_style_display' => '', + // for Demographics.tpl + 'age' => ['y' => '', 'm' => ''], + 'birth_date' => '', + // for Website.tpl (the others don't seem to enotice for some reason). + 'website' => [], + ]; $params['id'] = $params['contact_id'] = $this->_contactId; $params['noRelationships'] = $params['noNotes'] = $params['noGroups'] = TRUE; @@ -130,34 +153,34 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $mailingBackend = Civi::settings()->get('mailing_backend'); $this->assign('mailingOutboundOption', $mailingBackend['outBound_option']); - $communicationType = array( - 'phone' => array( + $communicationType = [ + 'phone' => [ 'type' => 'phoneType', 'id' => 'phone_type', 'daoName' => 'CRM_Core_DAO_Phone', 'fieldName' => 'phone_type_id', - ), - 'im' => array( + ], + 'im' => [ 'type' => 'IMProvider', 'id' => 'provider', 'daoName' => 'CRM_Core_DAO_IM', 'fieldName' => 'provider_id', - ), - 'website' => array( + ], + 'website' => [ 'type' => 'websiteType', 'id' => 'website_type', 'daoName' => 'CRM_Core_DAO_Website', 'fieldName' => 'website_type_id', - ), - 'address' => array('skip' => TRUE, 'customData' => 1), - 'email' => array('skip' => TRUE), - 'openid' => array('skip' => TRUE), - ); + ], + 'address' => ['skip' => TRUE, 'customData' => 1], + 'email' => ['skip' => TRUE], + 'openid' => ['skip' => TRUE], + ]; foreach ($communicationType as $key => $value) { if (!empty($defaults[$key])) { foreach ($defaults[$key] as & $val) { - CRM_Utils_Array::lookupValue($val, 'location_type', CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', array('labelColumn' => 'display_name')), FALSE); + CRM_Utils_Array::lookupValue($val, 'location_type', CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', ['labelColumn' => 'display_name']), FALSE); if (empty($value['skip'])) { $daoName = $value['daoName']; $pseudoConst = $daoName::buildOptions($value['fieldName'], 'get'); @@ -183,9 +206,7 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { } } - if (!empty($defaults['gender_id'])) { - $defaults['gender_display'] = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'gender_id', $defaults['gender_id']); - } + $defaults['gender_display'] = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'gender_id', $defaults['gender_id'] ?? NULL); $communicationStyle = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'communication_style_id'); if (!empty($communicationStyle)) { @@ -203,10 +224,8 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $defaults['contact_type_label'] = CRM_Contact_BAO_ContactType::contactTypePairs(TRUE, $contactType, ', '); // get contact tags - $contactTags = CRM_Core_BAO_EntityTag::getContactTags($this->_contactId); - - if (!empty($contactTags)) { - $defaults['contactTag'] = $contactTags; + $defaults['contactTag'] = CRM_Core_BAO_EntityTag::getContactTags($this->_contactId); + if (!empty($defaults['contactTag'])) { $defaults['allTags'] = CRM_Core_BAO_Tag::getTagsUsedFor('civicrm_contact', FALSE); } @@ -231,10 +250,10 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { if (!empty($addressValue['master_id']) && !$shareAddressContactNames[$addressValue['master_id']]['is_deleted'] ) { - $sharedAddresses[$key]['shared_address_display'] = array( + $sharedAddresses[$key]['shared_address_display'] = [ 'address' => $addressValue['display'], 'name' => $shareAddressContactNames[$addressValue['master_id']]['name'], - ); + ]; } } $this->assign('sharedAddresses', $sharedAddresses); @@ -247,7 +266,6 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { } } - $defaults['external_identifier'] = $contact->external_identifier; $this->assign($defaults); // FIXME: when we sort out TZ isssues with DATETIME/TIMESTAMP, we can skip next query @@ -435,10 +453,17 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $context = ['contact_id' => $this->_contactId]; CRM_Utils_Hook::tabset('civicrm/contact/view', $allTabs, $context); - // Get tab counts last to avoid wasting time; if a tab was removed by hook, the count isn't needed. + $expectedKeys = ['count', 'class', 'template', 'hideCount', 'icon']; + foreach ($allTabs as &$tab) { + // Ensure tab has all expected keys + $tab += array_fill_keys($expectedKeys, NULL); + // Get tab counts last to avoid wasting time; if a tab was removed by hook, the count isn't needed. if (!isset($tab['count']) && isset($getCountParams[$tab['id']])) { - $tab['count'] = call_user_func_array(['CRM_Contact_BAO_Contact', 'getCountComponent'], $getCountParams[$tab['id']]); + $tab['count'] = call_user_func_array([ + 'CRM_Contact_BAO_Contact', + 'getCountComponent', + ], $getCountParams[$tab['id']]); } } diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard.php b/civicrm/CRM/Contact/Page/View/UserDashBoard.php index 8cba50bcb095c15408cac5350633b22040bbc67f..9cb559bf47ce63e72a3f93aa367f7a4c5ed958eb 100644 --- a/civicrm/CRM/Contact/Page/View/UserDashBoard.php +++ b/civicrm/CRM/Contact/Page/View/UserDashBoard.php @@ -132,6 +132,7 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page { $contactRelationships = $selector = NULL; CRM_Utils_Hook::searchColumns('relationship.columns', $columnHeaders, $contactRelationships, $selector); $this->assign('columnHeaders', $columnHeaders); + $this->assign('entityInClassFormat', 'relationship'); $dashboardElements[] = [ 'class' => 'crm-dashboard-permissionedOrgs', 'templatePath' => 'CRM/Contact/Page/View/RelationshipSelector.tpl', @@ -166,6 +167,12 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page { } usort($dashboardElements, ['CRM_Utils_Sort', 'cmpFunc']); + foreach ($dashboardElements as $index => $dashboardElement) { + // Ensure property is set to avoid smarty notices + if (!array_key_exists('class', $dashboardElement)) { + $dashboardElements[$index]['class'] = NULL; + } + } $this->assign('dashboardElements', $dashboardElements); if (!empty($dashboardOptions['Groups'])) { diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 89917d0a16ab62c464ee9e7dfe1a864259ff44ad..5ae6f8b73e31ffb7a3e82bfd3d28d3205dd7496c 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -5030,4 +5030,29 @@ LIMIT 1;"; return [$sourceContactId, $targetContactId]; } + /** + * Get the unit label with the plural option + * + * @param string $unit + * @return string + */ + public static function getUnitLabelWithPlural($unit) { + switch ($unit) { + case 'day': + return ts('day(s)'); + + case 'week': + return ts('week(s)'); + + case 'month': + return ts('month(s)'); + + case 'year': + return ts('year(s)'); + + default: + throw new CRM_Core_Exception('Unknown unit: ' . $unit); + } + } + } diff --git a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php index a5161686af547232c51f70cb78c66eb7a5448cb3..59db370f4a6b2ca196f31c4bfd08739d9500a89d 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php +++ b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php @@ -215,12 +215,7 @@ LIMIT 1 * Array of contribution statuses in array('status id' => 'label') format */ public static function getContributionStatuses($usedFor = 'contribution', $name = NULL) { - if ($usedFor === 'pledge') { - $statusNames = CRM_Pledge_BAO_Pledge::buildOptions('status_id', 'validate'); - } - else { - $statusNames = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); - } + $statusNames = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); $statusNamesToUnset = [ // For records which represent a data template for a recurring @@ -237,36 +232,19 @@ LIMIT 1 'Refunded', 'Chargeback', 'Pending refund', + 'In Progress', + 'Overdue', + 'Partially paid', ]); - if ($usedFor === 'contribution') { - $statusNamesToUnset = array_merge($statusNamesToUnset, [ - 'In Progress', - 'Overdue', - 'Partially paid', - ]); - } - elseif ($usedFor === 'participant') { - $statusNamesToUnset = array_merge($statusNamesToUnset, [ - 'Cancelled', - 'Failed', - 'In Progress', - 'Overdue', - 'Partially paid', - ]); - } - elseif ($usedFor === 'membership') { + if ($usedFor && $usedFor !== 'contribution') { $statusNamesToUnset = array_merge($statusNamesToUnset, [ - 'In Progress', 'Cancelled', 'Failed', - 'Overdue', - 'Partially paid', ]); } } else { - switch ($name) { case 'Completed': // [CRM-17498] Removing unsupported status change options. @@ -312,13 +290,8 @@ LIMIT 1 unset($statusNames[CRM_Utils_Array::key($name, $statusNames)]); } - // based on filtered statuse names fetch the final list of statuses in array('id' => 'label') format - if ($usedFor == 'pledge') { - $statuses = CRM_Pledge_BAO_Pledge::buildOptions('status_id'); - } - else { - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id'); - } + $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id'); + foreach ($statuses as $statusID => $label) { if (!array_key_exists($statusID, $statusNames)) { unset($statuses[$statusID]); diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index 818fde0b2a2c892190a610e996902d90e68847d7..b3c5c1cd35c2543ac612afc56e5814ca859afe5e 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -757,11 +757,12 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu } $frUnits = $form->_values['recur_frequency_unit'] ?? NULL; + $frequencyUnits = CRM_Core_OptionGroup::values('recur_frequency_units', FALSE, FALSE, TRUE); if (empty($frUnits) && $className == 'CRM_Contribute_Form_Contribution' ) { $frUnits = implode(CRM_Core_DAO::VALUE_SEPARATOR, - CRM_Core_OptionGroup::values('recur_frequency_units') + CRM_Core_OptionGroup::values('recur_frequency_units', FALSE, FALSE, FALSE, NULL, 'value') ); } @@ -783,15 +784,14 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu // CRM 10860, display text instead of a dropdown if there's only 1 frequency unit if (count($unitVals) == 1) { $form->assign('one_frequency_unit', TRUE); - $unit = $unitVals[0]; - $form->add('hidden', 'frequency_unit', $unit); + $form->add('hidden', 'frequency_unit', $unitVals[0]); if (!empty($form->_values['is_recur_interval']) || $className == 'CRM_Contribute_Form_Contribution') { - $unit .= "(s)"; + $unit = CRM_Contribute_BAO_Contribution::getUnitLabelWithPlural($unitVals[0]); $form->assign('frequency_unit', $unit); } else { $is_recur_label = ts('I want to contribute this amount every %1', - [1 => $unit] + [1 => $frequencyUnits[$unitVals[0]]] ); $form->assign('all_text_recur', TRUE); } @@ -799,12 +799,11 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu else { $form->assign('one_frequency_unit', FALSE); $units = []; - $frequencyUnits = CRM_Core_OptionGroup::values('recur_frequency_units', FALSE, FALSE, TRUE); foreach ($unitVals as $key => $val) { if (array_key_exists($val, $frequencyUnits)) { $units[$val] = $frequencyUnits[$val]; if (!empty($form->_values['is_recur_interval']) || $className == 'CRM_Contribute_Form_Contribution') { - $units[$val] = "{$frequencyUnits[$val]}(s)"; + $units[$val] = CRM_Contribute_BAO_Contribution::getUnitLabelWithPlural($val); $unit = ts('Every'); } } diff --git a/civicrm/CRM/Contribute/Form/ContributionCharts.php b/civicrm/CRM/Contribute/Form/ContributionCharts.php index 84da27929de7342d8db1d3daab5407d0f2577304..57673d947032d5fbf33a2bdc9fda9f6b1c33327e 100644 --- a/civicrm/CRM/Contribute/Form/ContributionCharts.php +++ b/civicrm/CRM/Contribute/Form/ContributionCharts.php @@ -109,7 +109,7 @@ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form { //build the params for chart. $chartData['by_month']['values'][$monthName] = $val; } - $chartData['by_month']['legend'] = 'By Month' . ' - ' . $selectedYear; + $chartData['by_month']['legend'] = ts('By Month - %1', [1 => $selectedYear]); // handle onclick event. $chartData['by_month']['on_click_fun_name'] = 'byMonthOnClick'; @@ -124,7 +124,7 @@ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form { $hasContributions = FALSE; if (is_array($chartInfoYearly)) { $hasContributions = TRUE; - $chartData['by_year']['legend'] = 'By Year'; + $chartData['by_year']['legend'] = ts('By Year'); $chartData['by_year']['values'] = $chartInfoYearly['By Year']; // handle onclick event. diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php b/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php index 07f436065da68a28c8028a839594e427037e6c0b..94c7dc01d54f1b30209bf8bd317e9af2ed1d0660 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php @@ -57,6 +57,11 @@ class CRM_Contribute_Form_ContributionPage_TabHeader { 'valid' => FALSE, 'active' => FALSE, 'current' => FALSE, + 'class' => FALSE, + 'extra' => FALSE, + 'template' => FALSE, + 'count' => FALSE, + 'icon' => FALSE, ]; $tabs = [ diff --git a/civicrm/CRM/Contribute/Form/Task/Invoice.php b/civicrm/CRM/Contribute/Form/Task/Invoice.php index a3d5adab715bcdedd31924fc982f496e8f35e449..cf238c902edc87d05a4db299c801b7b2b7797546 100644 --- a/civicrm/CRM/Contribute/Form/Task/Invoice.php +++ b/civicrm/CRM/Contribute/Form/Task/Invoice.php @@ -135,9 +135,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { */ public function buildQuickForm() { $this->preventAjaxSubmit(); - if (CRM_Core_Permission::check('administer CiviCRM')) { - $this->assign('isAdmin', 1); - } + $this->assign('isAdmin', CRM_Core_Permission::check('administer CiviCRM')); $this->add('select', 'from_email_address', ts('From'), $this->_fromEmails, TRUE); if ($this->_selectedOutput != 'email') { diff --git a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php index 6d0c932b5134b19d4f9313112af7619fec0cfa96..32f3ccb21c7da59dd73094cd84285edeabf9e88b 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php +++ b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php @@ -360,6 +360,7 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { $resolvedContacts = civicrm_api3('Contact', 'get', [ 'return' => array_keys($returnProperties), 'id' => ['IN' => array_keys($contacts)], + 'options' => ['limit' => 0], ])['values']; foreach ($contacts as $contactID => $contact) { $contacts[$contactID] = array_merge($resolvedContacts[$contactID], $contact); diff --git a/civicrm/CRM/Contribute/Page/DashBoard.php b/civicrm/CRM/Contribute/Page/DashBoard.php index 6e2c59c8a8f16efff0445dde06512c285591a553..b7df27e2f79da5750a5684443cce67ea97d0da87 100644 --- a/civicrm/CRM/Contribute/Page/DashBoard.php +++ b/civicrm/CRM/Contribute/Page/DashBoard.php @@ -75,11 +75,7 @@ class CRM_Contribute_Page_DashBoard extends CRM_Core_Page { } // Check for admin permission to see if we should include the Manage Contribution Pages action link - $isAdmin = 0; - if (CRM_Core_Permission::check('administer CiviCRM')) { - $isAdmin = 1; - } - $this->assign('isAdmin', $isAdmin); + $this->assign('isAdmin', CRM_Core_Permission::check('administer CiviCRM')); } /** diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php index f7c8ca8ecc3ca461c11eae347b489dbfafb50f95..e2644ab53905ff5879c27884943e001e6f1e100d 100644 --- a/civicrm/CRM/Core/BAO/Address.php +++ b/civicrm/CRM/Core/BAO/Address.php @@ -78,7 +78,7 @@ class CRM_Core_BAO_Address extends CRM_Core_DAO_Address { if ($address->id) { // first get custom field from master address if any if (isset($params['master_id']) && !CRM_Utils_System::isNull($params['master_id'])) { - $address->copyCustomFields($params['master_id'], $address->id); + $address->copyCustomFields($params['master_id'], $address->id, $hook); } if (isset($params['custom'])) { diff --git a/civicrm/CRM/Core/BAO/ConfigSetting.php b/civicrm/CRM/Core/BAO/ConfigSetting.php index 972ad1260dfb9d3c5fe477f6f1d88e1a4e985a1c..44b71780621b6192a5da56e572838547094ce1ef 100644 --- a/civicrm/CRM/Core/BAO/ConfigSetting.php +++ b/civicrm/CRM/Core/BAO/ConfigSetting.php @@ -309,8 +309,8 @@ class CRM_Core_BAO_ConfigSetting { * true if valid component name and enabling succeeds, else false */ public static function enableComponent($componentName) { - $config = CRM_Core_Config::singleton(); - if (in_array($componentName, $config->enableComponents)) { + $enabledComponents = Civi::settings()->get('enable_components'); + if (in_array($componentName, $enabledComponents)) { // component is already enabled return TRUE; } @@ -321,14 +321,23 @@ class CRM_Core_BAO_ConfigSetting { } // get enabled-components from DB and add to the list - $enabledComponents = Civi::settings()->get('enable_components'); $enabledComponents[] = $componentName; - self::setEnabledComponents($enabledComponents); return TRUE; } + /** + * Ensure all components are enabled + * @throws CRM_Core_Exception + */ + public static function enableAllComponents() { + $allComponents = array_keys(CRM_Core_Component::getComponents()); + if (Civi::settings()->get('enable_components') != $allComponents) { + self::setEnabledComponents($allComponents); + } + } + /** * Disable specified component. * diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index b7a92bae4c7555c10f6514d8b908ce69f6eaea5b..984afff29a5984ec3a37445a55f9830f8488f4d8 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -1096,11 +1096,17 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { case 'Radio': case 'CheckBox': if ($field['data_type'] == 'ContactReference' && (is_array($value) || is_numeric($value))) { - $displayNames = []; - foreach ((array) $value as $contactId) { - $displayNames[] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contactId, 'display_name'); + // Issue #2939 - guard against passing empty values to CRM_Core_DAO::getFieldValue(), which would throw an exception + if (empty($value)) { + $display = ''; + } + else { + $displayNames = []; + foreach ((array) $value as $contactId) { + $displayNames[] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contactId, 'display_name'); + } + $display = implode(', ', $displayNames); } - $display = implode(', ', $displayNames); } elseif ($field['data_type'] == 'ContactReference') { $display = $value; diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index 2fa0d47b5f0ab1d590f257dd3c7ad6084121b524..8baa7f6bd7c92e62347eefbab51be995349ebb87 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -1788,7 +1788,7 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, * @return array * @throws \CRM_Core_Exception */ - public static function formatGroupTree(&$groupTree, $groupCount = 1, &$form = NULL) { + public static function formatGroupTree($groupTree, $groupCount = 1, &$form = NULL) { $formattedGroupTree = []; $uploadNames = $formValues = []; @@ -1822,8 +1822,12 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, $formattedGroupTree[$key]['subtype'] = $value['subtype'] ?? NULL; $formattedGroupTree[$key]['max_multiple'] = $value['max_multiple'] ?? NULL; + // Properties that might have been filtered out but which + // should be present to avoid smarty e-notices. + $expectedProperties = ['options_per_line', 'help_pre', 'help_post']; // add field information foreach ($value['fields'] as $k => $properties) { + $properties = array_merge(array_fill_keys($expectedProperties, NULL), $properties); $properties['element_name'] = "custom_{$k}_-{$groupCount}"; if (isset($properties['customValue']) && !CRM_Utils_System::isNull($properties['customValue']) && diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index 8556c4ec217b11812661f23ce4725864a2da51f2..555de5f9f9f5e00550dee1c6a30b0d9a988ba367 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -376,6 +376,13 @@ class CRM_Core_BAO_CustomValueTable { if (!empty($customValue['id'])) { $cvParam['id'] = $customValue['id']; } + elseif (empty($cvParam['is_multiple']) && !empty($entityID)) { + // dev/core#3000 Ensure that if we are not dealing with multiple record custom data and for some reason have got here without getting the id of the record in the custom table for this entityId let us give it one last shot + $rowId = CRM_Core_DAO::singleValueQuery("SELECT id FROM {$cvParam['table_name']} WHERE entity_id = %1", [1 => [$entityID, 'Integer']]); + if (!empty($rowId)) { + $cvParam['id'] = $rowId; + } + } if (!array_key_exists($customValue['table_name'], $cvParams)) { $cvParams[$customValue['table_name']] = []; } diff --git a/civicrm/CRM/Core/BAO/EntityTag.php b/civicrm/CRM/Core/BAO/EntityTag.php index daa8568faae9658277f4b511e68fd54b23ace127..65d5587b7dbc3f28433c56f16f96f2733c3ae939 100644 --- a/civicrm/CRM/Core/BAO/EntityTag.php +++ b/civicrm/CRM/Core/BAO/EntityTag.php @@ -96,7 +96,7 @@ class CRM_Core_BAO_EntityTag extends CRM_Core_DAO_EntityTag { * Delete the tag for a contact. * * @param array $params - * + * @deprecated * WARNING: Nonstandard params searches by tag_id rather than id! */ public static function del(&$params) { diff --git a/civicrm/CRM/Core/BAO/LocationType.php b/civicrm/CRM/Core/BAO/LocationType.php index ae3b83d068e187dc685bbdb8b7b4ee41d8ed9308..49ddc891fd45cde861129c0ab0cf495b31e26695 100644 --- a/civicrm/CRM/Core/BAO/LocationType.php +++ b/civicrm/CRM/Core/BAO/LocationType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Core_BAO_LocationType extends CRM_Core_DAO_LocationType { +class CRM_Core_BAO_LocationType extends CRM_Core_DAO_LocationType implements \Civi\Test\HookInterface { /** * Static holder for the default LT. @@ -126,28 +126,27 @@ class CRM_Core_BAO_LocationType extends CRM_Core_DAO_LocationType { * Delete location Types. * * @param int $locationTypeId - * ID of the location type to be deleted. - * + * @deprecated */ public static function del($locationTypeId) { - $entity = ['address', 'phone', 'email', 'im']; - //check dependencies - foreach ($entity as $key) { - if ($key == 'im') { - $name = strtoupper($key); - } - else { - $name = ucfirst($key); + static::deleteRecord(['id' => $locationTypeId]); + } + + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + // When deleting a location type, delete related records + if ($event->action === 'delete') { + foreach (['Address', 'IM', 'Email', 'Phone'] as $entity) { + civicrm_api4($entity, 'delete', [ + 'checkPermissions' => FALSE, + 'where' => [['location_type_id', '=', $event->id]], + ]); } - $baoString = 'CRM_Core_BAO_' . $name; - $object = new $baoString(); - $object->location_type_id = $locationTypeId; - $object->delete(); } - - $locationType = new CRM_Core_DAO_LocationType(); - $locationType->id = $locationTypeId; - $locationType->delete(); } } diff --git a/civicrm/CRM/Core/BAO/Managed.php b/civicrm/CRM/Core/BAO/Managed.php new file mode 100644 index 0000000000000000000000000000000000000000..ae64d877bbfa39f3d46ce19b6f344482505c5eee --- /dev/null +++ b/civicrm/CRM/Core/BAO/Managed.php @@ -0,0 +1,53 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * This class contains functions for managed entities. + */ +class CRM_Core_BAO_Managed extends CRM_Core_DAO_Managed implements Civi\Test\HookInterface { + + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function on_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + // When an entity is deleted, delete the corresponding Managed record + if ($event->action === 'delete' && $event->id && self::isApi4ManagedType($event->entity)) { + \Civi\Api4\Managed::delete(FALSE) + ->addWhere('entity_type', '=', $event->entity) + ->addWhere('entity_id', '=', $event->id) + ->execute(); + } + // When an entity is updated, update the timestamp in corresponding Managed record + elseif ($event->action === 'edit' && $event->id && self::isApi4ManagedType($event->entity)) { + CRM_Core_DAO::executeQuery('UPDATE civicrm_managed SET entity_modified_date = CURRENT_TIMESTAMP WHERE entity_type = %1 AND entity_id = %2', [ + 1 => [$event->entity, 'String'], + 2 => [$event->id, 'Integer'], + ]); + } + } + + /** + * @param string $entityName + * @return bool + */ + public static function isApi4ManagedType(string $entityName) { + $type = \Civi\Api4\Utils\CoreUtil::getInfoItem($entityName, 'type'); + return $type && in_array('ManagedEntity', $type, TRUE); + } + +} diff --git a/civicrm/CRM/Core/BAO/Mapping.php b/civicrm/CRM/Core/BAO/Mapping.php index d8358649bbe08c24838c2da2ab89e4c73356aef9..8d7a139a984c81cf7494f1d9506493bac97d9e7e 100644 --- a/civicrm/CRM/Core/BAO/Mapping.php +++ b/civicrm/CRM/Core/BAO/Mapping.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { +class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping implements \Civi\Test\HookInterface { /** * Class constructor. @@ -1211,4 +1211,18 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { $mappingField->delete(); } + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function on_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete' && $event->entity === 'RelationshipType') { + // CRM-3323 - Delete mappingField records when deleting relationship type + \Civi\Api4\MappingField::delete(FALSE) + ->addWhere('relationship_type_id', '=', $event->id) + ->execute(); + } + } + } diff --git a/civicrm/CRM/Core/BAO/MessageTemplate.php b/civicrm/CRM/Core/BAO/MessageTemplate.php index feaa168905e3ac79af28bbbc8d5c3c557cb34d9a..ab0f8e7b6e25638caaf298f0d2413a3e42235b0a 100644 --- a/civicrm/CRM/Core/BAO/MessageTemplate.php +++ b/civicrm/CRM/Core/BAO/MessageTemplate.php @@ -24,7 +24,7 @@ require_once 'Mail/mime.php'; /** * Class CRM_Core_BAO_MessageTemplate. */ -class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { +class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate implements \Civi\Test\HookInterface { /** * Fetch object based on array of properties. @@ -165,7 +165,7 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { * Delete the Message Templates. * * @param int $messageTemplatesID - * + * @deprecated * @throws \CRM_Core_Exception */ public static function del($messageTemplatesID) { @@ -174,20 +174,27 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { throw new CRM_Core_Exception(ts('Invalid Message template')); } - // Set mailing msg template col to NULL - $query = "UPDATE civicrm_mailing - SET msg_template_id = NULL - WHERE msg_template_id = %1"; - - $params = [1 => [$messageTemplatesID, 'Integer']]; - CRM_Core_DAO::executeQuery($query, $params); - - $messageTemplates = new CRM_Core_DAO_MessageTemplate(); - $messageTemplates->id = $messageTemplatesID; - $messageTemplates->delete(); + static::deleteRecord(['id' => $messageTemplatesID]); + // Yikes - bad idea setting status messages in BAO CRUD functions. Don't do this. CRM_Core_Session::setStatus(ts('Selected message template has been deleted.'), ts('Deleted'), 'success'); } + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + // Set mailing msg template col to NULL + $query = "UPDATE civicrm_mailing + SET msg_template_id = NULL + WHERE msg_template_id = %1"; + $params = [1 => [$event->id, 'Integer']]; + CRM_Core_DAO::executeQuery($query, $params); + } + } + /** * Get the Message Templates. * diff --git a/civicrm/CRM/Core/BAO/OptionGroup.php b/civicrm/CRM/Core/BAO/OptionGroup.php index ff972d984227fbdf3f2e02bcd263a84028ff3e86..12da9c3d3f152b04970e6a805b64b4e82e72f4fe 100644 --- a/civicrm/CRM/Core/BAO/OptionGroup.php +++ b/civicrm/CRM/Core/BAO/OptionGroup.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup { +class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup implements \Civi\Test\HookInterface { /** * Class constructor. @@ -92,18 +92,25 @@ class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup { /** * Delete Option Group. * + * @deprecated * @param int $optionGroupId - * Id of the Option Group to be deleted. */ public static function del($optionGroupId) { - // need to delete all option value field before deleting group - $optionValue = new CRM_Core_DAO_OptionValue(); - $optionValue->option_group_id = $optionGroupId; - $optionValue->delete(); + static::deleteRecord(['id' => $optionGroupId]); + } - $optionGroup = new CRM_Core_DAO_OptionGroup(); - $optionGroup->id = $optionGroupId; - $optionGroup->delete(); + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + // need to delete all option value field before deleting group + \Civi\Api4\OptionValue::delete(FALSE) + ->addWhere('option_group_id', '=', $event->id) + ->execute(); + } } /** diff --git a/civicrm/CRM/Core/BAO/OptionValue.php b/civicrm/CRM/Core/BAO/OptionValue.php index 4e3a22533da43b0d74bc7d9907955b4ef3dc2074..69d78bf677ac1b5be0950765bb0a0798de612821 100644 --- a/civicrm/CRM/Core/BAO/OptionValue.php +++ b/civicrm/CRM/Core/BAO/OptionValue.php @@ -169,13 +169,16 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { $optionValue = new CRM_Core_DAO_OptionValue(); $optionValue->copyValues($params); - $isDomainOptionGroup = in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups); - if (empty($params['domain_id']) && $isDomainOptionGroup) { + $isDomainOptionGroup = CRM_Core_OptionGroup::isDomainOptionGroup($groupName); + // When creating a new option for a group that requires a domain, set default domain + if ($isDomainOptionGroup && empty($params['id']) && (empty($params['domain_id']) || CRM_Utils_System::isNull($params['domain_id']))) { $optionValue->domain_id = CRM_Core_Config::domainID(); } // When setting a default option, unset other options in this group as default - if (!empty($params['is_default'])) { + // FIXME: The extra CRM_Utils_System::isNull is because the API will pass the string 'null' + // FIXME: It would help to make this column NOT NULL DEFAULT 0 + if (!empty($params['is_default']) && !CRM_Utils_System::isNull($params['is_default'])) { $query = 'UPDATE civicrm_option_value SET is_default = 0 WHERE option_group_id = %1'; // tweak default reset, and allow multiple default within group. @@ -190,7 +193,7 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { $p = [1 => [$params['option_group_id'], 'Integer']]; // Limit update by domain of option - $domain = $optionValue->domain_id ?? NULL; + $domain = CRM_Utils_System::isNull($optionValue->domain_id) ? NULL : $optionValue->domain_id; if (!$domain && $id && $isDomainOptionGroup) { $domain = CRM_Core_DAO::getFieldValue(__CLASS__, $id, 'domain_id'); } @@ -212,7 +215,7 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { // CRM-21737 languages option group does not use unique values but unique names. $dao->name = $params['name']; } - if (in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups)) { + if (CRM_Core_OptionGroup::isDomainOptionGroup($groupName)) { $dao->domain_id = $optionValue->domain_id; } $dao->option_group_id = $params['option_group_id']; @@ -264,9 +267,12 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { if (!$optionValue->find()) { return FALSE; } + $hookParams = ['id' => $optionValueId]; + CRM_Utils_Hook::pre('delete', 'OptionValue', $optionValueId, $hookParams); if (self::updateRecords($optionValueId, CRM_Core_Action::DELETE)) { CRM_Core_PseudoConstant::flush(); $optionValue->delete(); + CRM_Utils_Hook::post('delete', 'OptionValue', $optionValueId, $optionValue); return TRUE; } return FALSE; diff --git a/civicrm/CRM/Core/BAO/UFField.php b/civicrm/CRM/Core/BAO/UFField.php index b26e8831b224abfcdc8dea9d3bd0643720475abe..b52c3b19c5853e3d40178f0516216758b1846a70 100644 --- a/civicrm/CRM/Core/BAO/UFField.php +++ b/civicrm/CRM/Core/BAO/UFField.php @@ -772,11 +772,13 @@ SELECT id * @param array $profileFilter * Filter to apply to profile fields - expected usage is to only fill based on. * the bottom profile per CRM-13726 + * @param array $paymentProcessorBillingFields + * Array of billing fields required by the payment processor. * * @return bool * Can the address block be hidden safe in the knowledge all fields are elsewhere collected (see CRM-15118) */ - public static function assignAddressField($key, &$profileAddressFields, $profileFilter) { + public static function assignAddressField($key, &$profileAddressFields, $profileFilter, $paymentProcessorBillingFields = NULL) { $billing_id = CRM_Core_BAO_LocationType::getBilling(); list($prefixName, $index) = CRM_Utils_System::explode('-', $key, 2); @@ -790,17 +792,22 @@ SELECT id ] )); //check for valid fields ( fields that are present in billing block ) - $validBillingFields = [ - 'first_name', - 'middle_name', - 'last_name', - 'street_address', - 'supplemental_address_1', - 'city', - 'state_province', - 'postal_code', - 'country', - ]; + if (!empty($paymentProcessorBillingFields)) { + $validBillingFields = $paymentProcessorBillingFields; + } + else { + $validBillingFields = [ + 'first_name', + 'middle_name', + 'last_name', + 'street_address', + 'supplemental_address_1', + 'city', + 'state_province', + 'postal_code', + 'country', + ]; + } $requiredBillingFields = array_diff($validBillingFields, ['middle_name', 'supplemental_address_1']); $validProfileFields = []; $requiredProfileFields = []; @@ -835,8 +842,10 @@ SELECT id } $potentiallyMissingRequiredFields = array_diff($requiredBillingFields, $requiredProfileFields); + $billingProfileIsHideable = empty($potentiallyMissingRequiredFields); CRM_Core_Resources::singleton() - ->addSetting(['billing' => ['billingProfileIsHideable' => empty($potentiallyMissingRequiredFields)]]); + ->addSetting(['billing' => ['billingProfileIsHideable' => $billingProfileIsHideable]]); + return $billingProfileIsHideable; } /** diff --git a/civicrm/CRM/Core/BAO/WordReplacement.php b/civicrm/CRM/Core/BAO/WordReplacement.php index 818e0b2ec8cd9c77f97fec2bcd635dbe4a5051b8..feb3d85393eca5961918e9795c7a479a64db0555 100644 --- a/civicrm/CRM/Core/BAO/WordReplacement.php +++ b/civicrm/CRM/Core/BAO/WordReplacement.php @@ -18,7 +18,7 @@ /** * Class CRM_Core_BAO_WordReplacement. */ -class CRM_Core_BAO_WordReplacement extends CRM_Core_DAO_WordReplacement { +class CRM_Core_BAO_WordReplacement extends CRM_Core_DAO_WordReplacement implements \Civi\Test\HookInterface { /** * Class constructor. @@ -105,21 +105,37 @@ class CRM_Core_BAO_WordReplacement extends CRM_Core_DAO_WordReplacement { } /** - * Delete website. + * Deprecated delete function * + * @deprecated * @param int $id - * WordReplacement id. - * - * @return object + * @return CRM_Core_DAO_WordReplacement */ public static function del($id) { - $dao = new CRM_Core_DAO_WordReplacement(); - $dao->id = $id; - $dao->delete(); - if (!isset($params['options']) || CRM_Utils_Array::value('wp-rebuild', $params['options'], TRUE)) { + return static::deleteRecord(['id' => $id]); + } + + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'delete') { self::rebuild(); } - return $dao; + } + + /** + * Efficient function to write multiple records then rebuild at the end + * + * @param array[] $records + * @return CRM_Core_DAO_WordReplacement[] + * @throws CRM_Core_Exception + */ + public static function writeRecords(array $records): array { + $records = parent::writeRecords($records); + self::rebuild(); + return $records; } /** diff --git a/civicrm/CRM/Core/Controller.php b/civicrm/CRM/Core/Controller.php index 0a5f6482e8d55de2a45cfeb42d9cebbe9e697994..3924aa464173e07a943e57f9fbc16a0d7508f223 100644 --- a/civicrm/CRM/Core/Controller.php +++ b/civicrm/CRM/Core/Controller.php @@ -172,6 +172,7 @@ class CRM_Core_Controller extends HTML_QuickForm_Controller { if (!isset(self::$_template)) { self::$_template = CRM_Core_Smarty::singleton(); self::$_session = CRM_Core_Session::singleton(); + self::$_template->ensureVariablesAreAssigned(['formTpl']); } // lets try to get it from the session and/or the request vars diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index f6ee6f1c84d080e0bab536adbef98576d839e496..84bf0251e9ffa827a7afcdb65680f30e0a5ba9f2 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -300,9 +300,9 @@ class CRM_Core_DAO extends DB_DataObject { $daoName = get_class($this); $handled = FALSE; - if (!$handled && $dbName == 'contact_sub_type') { - //coming up with a rule to set this is too complex let's not set it - $handled = TRUE; + if (in_array($dbName, ['contact_sub_type', 'email_greeting_id', 'postal_greeting_id', 'addressee_id'], TRUE)) { + //coming up with a rule to set these is too complex - skip + return; } // Pick an option value if needed @@ -2523,8 +2523,7 @@ SELECT contact_id /** * Find all records which refer to this entity. * - * @return array - * Array of objects referencing this + * @return CRM_Core_DAO[] */ public function findReferences() { $links = self::getReferencesToTable(static::getTableName()); @@ -2547,7 +2546,7 @@ SELECT contact_id } /** - * @return array + * @return array{name: string, type: string, count: int, table: string|null, key: string|null}[] * each item has keys: * - name: string * - type: string @@ -2562,7 +2561,7 @@ SELECT contact_id foreach ($links as $refSpec) { /** @var $refSpec CRM_Core_Reference_Interface */ $count = $refSpec->getReferenceCount($this); - if ($count['count'] != 0) { + if (!empty($count['count'])) { $counts[] = $count; } } @@ -3080,7 +3079,7 @@ SELECT contact_id $relatedEntities = $this->buildOptions('entity_table', 'get'); foreach ((array) $relatedEntities as $table => $ent) { if (!empty($ent)) { - $ent = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($table)); + $ent = CRM_Core_DAO_AllCoreTables::getEntityNameForTable($table); $subquery = CRM_Utils_SQL::mergeSubquery($ent); if ($subquery) { $relatedClauses[] = "(entity_table = '$table' AND entity_id " . implode(' AND entity_id ', $subquery) . ")"; diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.php b/civicrm/CRM/Core/DAO/AllCoreTables.php index febcb374a83cf9c00cea933e419b1fb693b5bbb3..670ce3e06ebbdd4d483862950f68f640bb78bfd9 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.php @@ -364,6 +364,11 @@ class CRM_Core_DAO_AllCoreTables { */ public static function getEntityNameForTable(string $tableName) { self::init(); + // CRM-19677: on multilingual setup, trim locale from $tableName to fetch class name + if (CRM_Core_I18n::isMultilingual()) { + global $dbLocale; + $tableName = str_replace($dbLocale, '', $tableName); + } $matches = CRM_Utils_Array::findAll(self::$entityTypes, ['table' => $tableName]); return $matches ? $matches[0]['name'] : NULL; } diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index 94da2fa579b17edba6165bfc952b1b9a2372fef1..70015686b6d402adcd0da80ceb5891bc50b7e9a6 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fbf405c2b8b04de06a84977970ae8b02) + * (GenCodeChecksum:e06fe97917806daa0d337c43968ccf2b) */ /** @@ -206,7 +206,7 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { * Whether to return the plural version of the title. */ public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('Custom Groups') : ts('Custom Group'); + return $plural ? ts('Custom Field Groups') : ts('Custom Field Group'); } /** diff --git a/civicrm/CRM/Core/DAO/Dashboard.php b/civicrm/CRM/Core/DAO/Dashboard.php index 127a74dd9cc97a8a0da9b3db9226d2eeffe6c98d..4283041796acb12f0f0928c24d9a29f41a21d5e0 100644 --- a/civicrm/CRM/Core/DAO/Dashboard.php +++ b/civicrm/CRM/Core/DAO/Dashboard.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Dashboard.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0404bd5bf3e04c20da16ec1950db8ac0) + * (GenCodeChecksum:9603ee2a3a27196ef1ec671bf758a783) */ /** @@ -260,6 +260,9 @@ class CRM_Core_DAO_Dashboard extends CRM_Core_DAO { 'entity' => 'Dashboard', 'bao' => 'CRM_Core_BAO_Dashboard', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_SelectValues::andOr', + ], 'add' => '3.1', ], 'fullscreen_url' => [ diff --git a/civicrm/CRM/Core/DAO/Managed.php b/civicrm/CRM/Core/DAO/Managed.php index 91ce2a7b7acc901b5afefa487c8b3df082968843..3e0789e97dfd27c870062036903d4eb64dc99bd4 100644 --- a/civicrm/CRM/Core/DAO/Managed.php +++ b/civicrm/CRM/Core/DAO/Managed.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Managed.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c8697305b613f6ca6854638025df2fd7) + * (GenCodeChecksum:ca11b419bcdf2bce26609d9488527023) */ /** @@ -72,6 +72,13 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { */ public $cleanup; + /** + * When the managed entity was changed from its original settings. + * + * @var timestamp + */ + public $entity_modified_date; + /** * Class constructor. */ @@ -107,7 +114,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.id', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -126,7 +133,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.module', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'add' => '4.2', ], @@ -140,7 +147,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.name', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'add' => '4.2', ], @@ -155,7 +162,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.entity_type', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'add' => '4.2', ], @@ -168,7 +175,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.entity_id', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'add' => '4.2', ], @@ -182,7 +189,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { 'where' => 'civicrm_managed.cleanup', 'table_name' => 'civicrm_managed', 'entity' => 'Managed', - 'bao' => 'CRM_Core_DAO_Managed', + 'bao' => 'CRM_Core_BAO_Managed', 'localizable' => 0, 'html' => [ 'type' => 'Select', @@ -192,6 +199,20 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { ], 'add' => '4.5', ], + 'entity_modified_date' => [ + 'name' => 'entity_modified_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Entity Modified Date'), + 'description' => ts('When the managed entity was changed from its original settings.'), + 'required' => FALSE, + 'where' => 'civicrm_managed.entity_modified_date', + 'default' => NULL, + 'table_name' => 'civicrm_managed', + 'entity' => 'Managed', + 'bao' => 'CRM_Core_BAO_Managed', + 'localizable' => 0, + 'add' => '5.45', + ], ]; CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); } diff --git a/civicrm/CRM/Core/DAO/Navigation.php b/civicrm/CRM/Core/DAO/Navigation.php index 17a36917d8344bf0ecbef7cacbf44d453f66c552..f57b5fe09823e372b39b21298310271ac81a8df5 100644 --- a/civicrm/CRM/Core/DAO/Navigation.php +++ b/civicrm/CRM/Core/DAO/Navigation.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Navigation.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2b9fb139d42e95f23ebc1fe7b055c546) + * (GenCodeChecksum:6400fef9c925231f0d6245030ec46e68) */ /** @@ -78,14 +78,14 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { public $icon; /** - * Permission for menu item + * Permission(s) needed to access menu item * * @var string */ public $permission; /** - * Permission Operator + * Operator to use if item has more than one permission * * @var string */ @@ -261,7 +261,7 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { 'name' => 'permission', 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Required Permission'), - 'description' => ts('Permission for menu item'), + 'description' => ts('Permission(s) needed to access menu item'), 'maxlength' => 255, 'size' => CRM_Utils_Type::HUGE, 'where' => 'civicrm_navigation.permission', @@ -269,13 +269,14 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { 'entity' => 'Navigation', 'bao' => 'CRM_Core_BAO_Navigation', 'localizable' => 0, + 'serialize' => self::SERIALIZE_COMMA, 'add' => '3.0', ], 'permission_operator' => [ 'name' => 'permission_operator', 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Permission Operator'), - 'description' => ts('Permission Operator'), + 'description' => ts('Operator to use if item has more than one permission'), 'maxlength' => 3, 'size' => CRM_Utils_Type::FOUR, 'where' => 'civicrm_navigation.permission_operator', @@ -283,6 +284,9 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { 'entity' => 'Navigation', 'bao' => 'CRM_Core_BAO_Navigation', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_SelectValues::andOr', + ], 'add' => '3.0', ], 'parent_id' => [ diff --git a/civicrm/CRM/Core/DAO/OptionValue.php b/civicrm/CRM/Core/DAO/OptionValue.php index 32e90f667e2b0bcd8a9026d628f17a2bc93fdb96..f1a2b411644fe0c63611a60ea9b39bcab40121e8 100644 --- a/civicrm/CRM/Core/DAO/OptionValue.php +++ b/civicrm/CRM/Core/DAO/OptionValue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OptionValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:171565168517add49222893871a84e43) + * (GenCodeChecksum:598cce8df447dc19cd4c846549be1141) */ /** @@ -30,6 +30,16 @@ class CRM_Core_DAO_OptionValue extends CRM_Core_DAO { */ public static $_log = TRUE; + /** + * Paths for accessing this entity in the UI. + * + * @var string[] + */ + protected static $_paths = [ + 'update' => 'civicrm/admin/options/[option_group_id:name]?reset=1&action=update&id=[id]', + 'delete' => 'civicrm/admin/options/[option_group_id:name]?reset=1&action=delete&id=[id]', + ]; + /** * Option ID * diff --git a/civicrm/CRM/Core/DynamicFKAccessTrait.php b/civicrm/CRM/Core/DynamicFKAccessTrait.php index 041ec3741e2ac40ff6bdc79ba2f0f4def35cf44e..d88401b57651acbccc1d38ed3e8e827a2facab52 100644 --- a/civicrm/CRM/Core/DynamicFKAccessTrait.php +++ b/civicrm/CRM/Core/DynamicFKAccessTrait.php @@ -38,7 +38,7 @@ trait CRM_Core_DynamicFKAccessTrait { $table = CRM_Core_DAO::getFieldValue(__CLASS__, $record['id'], 'entity_table'); } if ($eid && $table) { - $targetEntity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($table)); + $targetEntity = CRM_Core_DAO_AllCoreTables::getEntityNameForTable($table); if ($targetEntity === NULL) { throw new \API_Exception(sprintf('Cannot resolve permissions for dynamic foreign key in "%s". Invalid table reference "%s".', static::getTableName(), $table)); diff --git a/civicrm/CRM/Core/Form.php b/civicrm/CRM/Core/Form.php index b04744fded63b367afb7cb121e1e235ce89c5d08..3cf3e8304f53bb107b14d4090b0df9230aa0894b 100644 --- a/civicrm/CRM/Core/Form.php +++ b/civicrm/CRM/Core/Form.php @@ -253,6 +253,36 @@ class CRM_Core_Form extends HTML_QuickForm_Page { 'color', ]; + /** + * Variables smarty expects to have set. + * + * We ensure these are assigned (value = NULL) when Smarty is instantiated in + * order to avoid e-notices / having to use empty or isset in the template layer. + * + * @var string[] + */ + public $expectedSmartyVariables = [ + // in CMSPrint.tpl + 'breadcrumb', + 'pageTitle', + 'urlIsPublic', + 'isDeleted', + // in 'body.tpl + 'suppressForm', + 'beginHookFormElements', + // required for footer.tpl + 'contactId', + // required for info.tpl + 'infoMessage', + 'infoTitle', + 'infoType', + 'infoOptions', + // required for attachmentjs.tpl + 'context', + // FormButtons.tpl (adds buttons to forms). + 'linkButtons', + ]; + /** * Constructor for the basic form page. * @@ -298,6 +328,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { if (!isset(self::$_template)) { self::$_template = CRM_Core_Smarty::singleton(); } + // Workaround for CRM-15153 - give each form a reasonably unique css class $this->addClass(CRM_Utils_System::getClassName($this)); @@ -675,6 +706,12 @@ class CRM_Core_Form extends HTML_QuickForm_Page { if ($this->submitOnce) { $this->setAttribute('data-submit-once', 'true'); } + // Smarty $_template is a static var which persists between tests, so + // if something calls clearTemplateVars(), the static still exists but + // our ensured variables get blown away, so we need to set them even if + // it's already been initialized. + self::$_template->ensureVariablesAreAssigned($this->expectedSmartyVariables); + } /** @@ -908,7 +945,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $params['country'] = $params["country-{$this->_bltID}"] = $params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($params["billing_country_id-{$this->_bltID}"]); } - list($hasAddressField, $addressParams) = CRM_Contribute_BAO_Contribution::getPaymentProcessorReadyAddressParams($params, $this->_bltID); + [$hasAddressField, $addressParams] = CRM_Contribute_BAO_Contribution::getPaymentProcessorReadyAddressParams($params, $this->_bltID); if ($hasAddressField) { $params = array_merge($params, $addressParams); } @@ -1022,6 +1059,52 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $this->_options = $options; } + /** + * Quick form elements which are conditionally added to the form. + * + * Elements in this array will be added to the form at the end if not present + * so that smarty does not e-notice on things like '{if $form.group}' when + * 'group' is not added to the form (e.g when no groups exist). + * + * @var array + */ + protected $optionalQuickFormElements = []; + + /** + * Add an optional element to the optional elements array. + * + * These elements are assigned as empty (null) variables if + * there is no real field - allowing smarty to use them without + * notices. + * + * @param string $elementName + */ + public function addOptionalQuickFormElement(string $elementName): void { + $this->optionalQuickFormElements[] = $elementName; + } + + /** + * Get any quick-form elements that may not be present in the form. + * + * To make life simpler for smarty we ensure they are set to null + * rather than unset. This is done at the last minute when $this + * is converted to an array to be assigned to the form. + * + * @return array + */ + public function getOptionalQuickFormElements(): array { + return $this->optionalQuickFormElements; + } + + /** + * Add an expected smarty variable to the array. + * + * @param string $elementName + */ + public function addExpectedSmartyVariable(string $elementName): void { + $this->expectedSmartyVariables[] = $elementName; + } + /** * Render form and return contents. * @@ -1035,6 +1118,11 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $content['formName'] = $this->getName(); // CRM-15153 $content['formClass'] = CRM_Utils_System::getClassName($this); + foreach (array_merge($this->getOptionalQuickFormElements(), $this->expectedSmartyVariables) as $string) { + if (!array_key_exists($string, $content)) { + $content[$string] = NULL; + } + } return $content; } @@ -1520,7 +1608,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { } // Handle custom field if (strpos($name, 'custom_') === 0 && is_numeric($name[7])) { - list(, $id) = explode('_', $name); + [, $id] = explode('_', $name); $label = $props['label'] ?? CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', 'label', $id); $gid = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', 'option_group_id', $id); if (CRM_Utils_Array::value('context', $props) != 'search') { diff --git a/civicrm/CRM/Core/Form/RecurringEntity.php b/civicrm/CRM/Core/Form/RecurringEntity.php index 053346a886cce0d551842ed849ba4bff7f312a17..8db1ec228434c99a3351b0b7600294ba335a8036 100644 --- a/civicrm/CRM/Core/Form/RecurringEntity.php +++ b/civicrm/CRM/Core/Form/RecurringEntity.php @@ -94,7 +94,7 @@ class CRM_Core_Form_RecurringEntity { } // Assign variables - $entityType = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($entityTable)); + $entityType = CRM_Core_DAO_AllCoreTables::getEntityNameForTable($entityTable); $tpl = CRM_Core_Smarty::singleton(); $tpl->assign('recurringEntityType', ts($entityType)); $tpl->assign('currentEntityId', self::$_entityId); diff --git a/civicrm/CRM/Core/Form/Tag.php b/civicrm/CRM/Core/Form/Tag.php index 36c0946bfb24e46866dadfcc4521a7e1d5df1a63..ef8c89df4e5039c4d6f6a5c4e084e8bda43525a8 100644 --- a/civicrm/CRM/Core/Form/Tag.php +++ b/civicrm/CRM/Core/Form/Tag.php @@ -26,7 +26,7 @@ class CRM_Core_Form_Tag { * * @param CRM_Core_Form $form * Form object. - * @param string $parentNames + * @param array $parentNames * Parent name ( tag name). * @param string $entityTable * Entitytable 'eg: civicrm_contact'. @@ -43,7 +43,7 @@ class CRM_Core_Form_Tag { &$form, $parentNames, $entityTable, $entityId = NULL, $skipTagCreate = FALSE, $skipEntityAction = FALSE, $tagsetElementName = NULL) { $tagset = $form->_entityTagValues = []; - $form->assign("isTagset", FALSE); + $form->assign('isTagset', FALSE); $mode = NULL; foreach ($parentNames as &$parentNameItem) { @@ -96,8 +96,8 @@ class CRM_Core_Form_Tag { $tagsetInfo[$mode] = []; } $tagsetInfo[$mode] = array_merge($tagsetInfo[$mode], $tagset); - $form->assign("tagsetInfo", $tagsetInfo); - $form->assign("isTagset", TRUE); + $form->assign('tagsetInfo', $tagsetInfo); + $form->assign('isTagset', TRUE); } } diff --git a/civicrm/CRM/Core/IDS.php b/civicrm/CRM/Core/IDS.php index 359ff77e5647f86ba33500dcb30ef0ab4044d3b6..3efdac401b2ddb7f43a7b0468166a3d35073dd12 100644 --- a/civicrm/CRM/Core/IDS.php +++ b/civicrm/CRM/Core/IDS.php @@ -237,13 +237,14 @@ class CRM_Core_IDS { $data = []; $session = CRM_Core_Session::singleton(); + $session_id = CRM_Core_Config::singleton()->userSystem->getSessionId() ? CRM_Core_Config::singleton()->userSystem->getSessionId() : '0'; foreach ($result as $event) { $data[] = [ 'name' => $event->getName(), 'value' => stripslashes($event->getValue()), 'page' => $_SERVER['REQUEST_URI'], 'userid' => $session->get('userID'), - 'session' => session_id() ? session_id() : '0', + 'session' => $session_id, 'ip' => $ip, 'reaction' => $reaction, 'impact' => $result->getImpact(), diff --git a/civicrm/CRM/Core/Invoke.php b/civicrm/CRM/Core/Invoke.php index 12db074dc86f73a2d5b9de786a688b10218fe09c..48bf206c623fb367977bd655388a3e8b0fbae8a9 100644 --- a/civicrm/CRM/Core/Invoke.php +++ b/civicrm/CRM/Core/Invoke.php @@ -220,6 +220,12 @@ class CRM_Core_Invoke { $template = CRM_Core_Smarty::singleton(); $template->assign('activeComponent', 'CiviCRM'); $template->assign('formTpl', 'default'); + // Ensure template variables have 'something' assigned for e-notice + // prevention. These are ones that are included very often + // and not tied to a specific form. + // jsortable.tpl (datatables) + $template->assign('sourceUrl'); + $template->assign('useAjax', 0); if ($item) { diff --git a/civicrm/CRM/Core/JobManager.php b/civicrm/CRM/Core/JobManager.php index d30646262e9f2f9dc99086c8d1c05187cee49a1d..ad170f08cbb3564823c264e8f82caaf6f074235e 100644 --- a/civicrm/CRM/Core/JobManager.php +++ b/civicrm/CRM/Core/JobManager.php @@ -152,14 +152,14 @@ class CRM_Core_JobManager { * @return array * ($id => CRM_Core_ScheduledJob) */ - private function _getJobs() { + private function _getJobs(): array { $jobs = []; $dao = new CRM_Core_DAO_Job(); $dao->orderBy('name'); $dao->domain_id = CRM_Core_Config::domainID(); $dao->find(); while ($dao->fetch()) { - $temp = []; + $temp = ['class' => NULL, 'parameters' => NULL, 'last_run' => NULL]; CRM_Core_DAO::storeValues($dao, $temp); $jobs[$dao->id] = new CRM_Core_ScheduledJob($temp); } diff --git a/civicrm/CRM/Core/Lock.php b/civicrm/CRM/Core/Lock.php index 894b913ab2d60094ab567f499086d2eb576e7003..5f3362dc004d09379e41aac6279ff4ed513ce20c 100644 --- a/civicrm/CRM/Core/Lock.php +++ b/civicrm/CRM/Core/Lock.php @@ -124,7 +124,7 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { // MySQL 5.7 doesn't like long lock names so creating a lock id $this->_id = sha1($this->_name); if (defined('CIVICRM_LOCK_DEBUG')) { - CRM_Core_Error::debug_log_message('trying to construct lock for ' . $this->_name . '(' . $this->_id . ')'); + \Civi::log()->debug('trying to construct lock for ' . $this->_name . '(' . $this->_id . ')'); } $this->_timeout = $timeout !== NULL ? $timeout : self::TIMEOUT; } @@ -177,7 +177,7 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { $res = CRM_Core_DAO::singleValueQuery($query, $params); if ($res) { if (defined('CIVICRM_LOCK_DEBUG')) { - CRM_Core_Error::debug_log_message('acquire lock for ' . $this->_name . '(' . $this->_id . ')'); + \Civi::log()->debug('acquire lock for ' . $this->_name . '(' . $this->_id . ')'); } $this->_hasLock = TRUE; if (stristr($this->_name, 'data.mailing.job.')) { @@ -186,7 +186,7 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { } else { if (defined('CIVICRM_LOCK_DEBUG')) { - CRM_Core_Error::debug_log_message('failed to acquire lock for ' . $this->_name . '(' . $this->_id . ')'); + \Civi::log()->debug('failed to acquire lock for ' . $this->_name . '(' . $this->_id . ')'); } } } @@ -199,7 +199,7 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { public function release() { if ($this->_hasLock) { if (defined('CIVICRM_LOCK_DEBUG')) { - CRM_Core_Error::debug_log_message('release lock for ' . $this->_name . '(' . $this->_id . ')'); + \Civi::log()->debug('release lock for ' . $this->_name . '(' . $this->_id . ')'); } $this->_hasLock = FALSE; @@ -244,11 +244,11 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { */ public function hackyHandleBrokenCode($jobLog) { if (stristr($this->_name, 'job')) { - CRM_Core_Error::debug_log_message('lock acquisition for ' . $this->_name . '(' . $this->_id . ')' . ' attempted when ' . $jobLog . ' is not released'); + \Civi::log()->debug('lock acquisition for ' . $this->_name . '(' . $this->_id . ')' . ' attempted when ' . $jobLog . ' is not released'); throw new CRM_Core_Exception('lock acquisition for ' . $this->_name . '(' . $this->_id . ')' . ' attempted when ' . $jobLog . ' is not released'); } if (defined('CIVICRM_LOCK_DEBUG')) { - CRM_Core_Error::debug_log_message('(CRM-12856) faking lock for ' . $this->_name . '(' . $this->_id . ')'); + \Civi::log()->debug('(CRM-12856) faking lock for ' . $this->_name . '(' . $this->_id . ')'); } $this->_hasLock = TRUE; return TRUE; diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php index a4d2096ae7ed116c6e6ffec0f2fcc4a3e331958a..983bcbd93a8ab0cfabc6f4053a1edc53374bdb99 100644 --- a/civicrm/CRM/Core/ManagedEntities.php +++ b/civicrm/CRM/Core/ManagedEntities.php @@ -143,6 +143,7 @@ class CRM_Core_ManagedEntities { $mgd = new \CRM_Core_DAO_Managed(); $mgd->copyValues($params); $mgd->find(TRUE); + $this->loadDeclarations(); $declarations = CRM_Utils_Array::findAll($this->declarations, [ 'module' => $mgd->module, 'name' => $mgd->name, @@ -185,6 +186,7 @@ class CRM_Core_ManagedEntities { $dao->name = $todo['name']; $dao->entity_type = $todo['entity_type']; $dao->entity_id = $todo['entity_id']; + $dao->entity_modified_date = $todo['entity_modified_date']; $dao->id = $todo['id']; $this->updateExistingEntity($dao, $todo); } @@ -234,7 +236,8 @@ class CRM_Core_ManagedEntities { * @return array */ protected function getManagedEntitiesToDelete(array $filters = []): array { - return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'delete'])); + // Return array in reverse-order so that child entities are cleaned up before their parents + return array_reverse($this->getManagedEntities(array_merge($filters, ['managed_action' => 'delete']))); } /** @@ -336,9 +339,17 @@ class CRM_Core_ManagedEntities { * Entity specification (per hook_civicrm_managedEntities). */ protected function updateExistingEntity($dao, $todo) { - $policy = CRM_Utils_Array::value('update', $todo, 'always'); + $policy = $todo['update'] ?? 'always'; $doUpdate = ($policy === 'always'); + if ($policy === 'unmodified') { + // If this is not an APIv4 managed entity, the entity_modidfied_date will always be null + if (!CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { + Civi::log()->warning('ManagedEntity update policy "unmodified" specified for entity type ' . $dao->entity_type . ' which is not an APIv4 ManagedEntity. Falling back to policy "always".'); + } + $doUpdate = empty($dao->entity_modified_date); + } + if ($doUpdate && $todo['params']['version'] == 3) { $defaults = ['id' => $dao->entity_id]; if ($this->isActivationSupported($dao->entity_type)) { @@ -374,8 +385,10 @@ class CRM_Core_ManagedEntities { civicrm_api4($dao->entity_type, 'update', $params); } - if (isset($todo['cleanup'])) { - $dao->cleanup = $todo['cleanup']; + if (isset($todo['cleanup']) || $doUpdate) { + $dao->cleanup = $todo['cleanup'] ?? NULL; + // Reset the `entity_modified_date` timestamp if reverting record. + $dao->entity_modified_date = $doUpdate ? 'null' : NULL; $dao->update(); } } @@ -401,6 +414,9 @@ class CRM_Core_ManagedEntities { if ($result['is_error']) { $this->onApiError($dao->entity_type, 'create', $params, $result); } + // Reset the `entity_modified_date` timestamp to indicate that the entity has not been modified by the user. + $dao->entity_modified_date = 'null'; + $dao->update(); } } @@ -422,13 +438,18 @@ class CRM_Core_ManagedEntities { break; case 'unused': - $getRefCount = civicrm_api3($dao->entity_type, 'getrefcount', [ - 'debug' => 1, - 'id' => $dao->entity_id, - ]); + if (CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { + $getRefCount = \Civi\Api4\Utils\CoreUtil::getRefCount($dao->entity_type, $dao->entity_id); + } + else { + $getRefCount = civicrm_api3($dao->entity_type, 'getrefcount', [ + 'id' => $dao->entity_id, + ])['values']; + } + // FIXME: This extra counting should be unnecessary, because getRefCount only returns values if count > 0 $total = 0; - foreach ($getRefCount['values'] as $refCount) { + foreach ($getRefCount as $refCount) { $total += $refCount['count']; } @@ -439,13 +460,22 @@ class CRM_Core_ManagedEntities { throw new CRM_Core_Exception('Unrecognized cleanup policy: ' . $policy); } - if ($doDelete) { + // APIv4 delete - deletion from `civicrm_managed` will be taken care of by + // CRM_Core_BAO_Managed::on_hook_civicrm_post() + if ($doDelete && CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { + civicrm_api4($dao->entity_type, 'delete', [ + 'checkPermissions' => FALSE, + 'where' => [['id', '=', $dao->entity_id]], + ]); + } + // APIv3 delete + elseif ($doDelete) { $params = [ 'version' => 3, 'id' => $dao->entity_id, ]; $check = civicrm_api3($dao->entity_type, 'get', $params); - if ((bool) $check['count']) { + if ($check['count']) { $result = civicrm_api($dao->entity_type, 'delete', $params); if ($result['is_error']) { if (isset($dao->name)) { diff --git a/civicrm/CRM/Core/Module.php b/civicrm/CRM/Core/Module.php index 39e006bb9def5e40e9579c0ea02398ca17987f86..7f0daefb2a0923c0bc6a928efcf06b10738c0351 100644 --- a/civicrm/CRM/Core/Module.php +++ b/civicrm/CRM/Core/Module.php @@ -48,7 +48,7 @@ class CRM_Core_Module { * @param bool $fresh * Force new results? * - * @return array + * @return CRM_Core_Module[] */ public static function getAll($fresh = FALSE) { static $result; diff --git a/civicrm/CRM/Core/OptionGroup.php b/civicrm/CRM/Core/OptionGroup.php index 6215f8e6906c8c274ec192e6f5352ba3d76edc6e..0b2b3653d5477804db367163004692b7005f0f61 100644 --- a/civicrm/CRM/Core/OptionGroup.php +++ b/civicrm/CRM/Core/OptionGroup.php @@ -21,6 +21,8 @@ class CRM_Core_OptionGroup { /** * $_domainIDGroups array maintains the list of option groups for whom * domainID is to be considered. + * + * FIXME: Hardcoded list = bad. It would be better to make this a column in the civicrm_option_group table * @var array */ public static $_domainIDGroups = [ @@ -28,6 +30,14 @@ class CRM_Core_OptionGroup { 'grant_type', ]; + /** + * @param $groupName + * @return bool + */ + public static function isDomainOptionGroup($groupName) { + return in_array($groupName, self::$_domainIDGroups, TRUE); + } + /** * @param CRM_Core_DAO $dao * @param bool $flip @@ -106,7 +116,7 @@ class CRM_Core_OptionGroup { $orderBy = 'weight' ) { $cache = CRM_Utils_Cache::singleton(); - if (in_array($name, self::$_domainIDGroups)) { + if (self::isDomainOptionGroup($name)) { $cacheKey = self::createCacheKey($name, CRM_Core_I18n::getLocale(), $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive, $keyColumnName, $orderBy, CRM_Core_Config::domainID()); } else { @@ -144,7 +154,7 @@ WHERE v.option_group_id = g.id } $query .= " AND ($componentClause) "; } - if (in_array($name, self::$_domainIDGroups)) { + if (self::isDomainOptionGroup($name)) { $query .= " AND v.domain_id = " . CRM_Core_Config::domainID(); } @@ -433,7 +443,7 @@ WHERE v.option_group_id = g.id AND g.is_active = 1 AND v.is_default = 1 "; - if (in_array($groupName, self::$_domainIDGroups)) { + if (self::isDomainOptionGroup($groupName)) { $query .= " AND v.domain_id = " . CRM_Core_Config::domainID(); } diff --git a/civicrm/CRM/Core/OptionValue.php b/civicrm/CRM/Core/OptionValue.php index 409e73fc9515827c9bc811ac33c1b5d9c705b865..e1219e982e8485ff5aa576b5d0f6ec29f2818b74 100644 --- a/civicrm/CRM/Core/OptionValue.php +++ b/civicrm/CRM/Core/OptionValue.php @@ -82,7 +82,7 @@ class CRM_Core_OptionValue { if ($optionGroupID) { $dao->option_group_id = $optionGroupID; - if (in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups)) { + if (CRM_Core_OptionGroup::isDomainOptionGroup($groupName)) { $dao->domain_id = CRM_Core_Config::domainID(); } @@ -438,7 +438,7 @@ FROM $params[2] = [$groupName, 'String']; } - if (in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups)) { + if (CRM_Core_OptionGroup::isDomainOptionGroup($groupName)) { $where .= " AND option_value.domain_id = " . CRM_Core_Config::domainID(); } diff --git a/civicrm/CRM/Core/Page.php b/civicrm/CRM/Core/Page.php index f83b170f931f309f924b69f530665899213e4355..99742ac99ca04821a3c156a9cebe8512aa744363 100644 --- a/civicrm/CRM/Core/Page.php +++ b/civicrm/CRM/Core/Page.php @@ -97,6 +97,35 @@ class CRM_Core_Page { */ public $useLivePageJS; + /** + * Variables smarty expects to have set. + * + * We ensure these are assigned (value = NULL) when Smarty is instantiated in + * order to avoid e-notices / having to use empty or isset in the template layer. + * + * @var string[] + */ + public $expectedSmartyVariables = [ + 'isForm', + 'hookContent', + 'hookContentPlacement', + // required for footer.tpl + 'contactId', + // required for info.tpl + 'infoMessage', + 'infoTitle', + 'infoType', + 'infoOptions', + // required for Summary.tpl (contact summary) but seems + // likely to be used more broadly to warrant inclusion here. + 'context', + // for CMSPrint.tpl + 'urlIsPublic', + 'breadcrumb', + 'pageTitle', + 'isDeleted', + ]; + /** * Class constructor. * @@ -117,6 +146,11 @@ class CRM_Core_Page { self::$_template = CRM_Core_Smarty::singleton(); self::$_session = CRM_Core_Session::singleton(); } + // Smarty $_template is a static var which persists between tests, so + // if something calls clearTemplateVars(), the static still exists but + // our ensured variables get blown away, so we need to set them even if + // it's already been initialized. + self::$_template->ensureVariablesAreAssigned($this->expectedSmartyVariables); // FIXME - why are we messing with 'snippet'? Why not just pass it directly into $this->_print? if (!empty($_REQUEST['snippet'])) { @@ -182,9 +216,7 @@ class CRM_Core_Page { CRM_Utils_Hook::alterContent($content, 'page', $pageTemplateFile, $this); if ($this->_print == CRM_Core_Smarty::PRINT_PDF) { - CRM_Utils_PDF_Utils::html2pdf($content, "{$this->_name}.pdf", FALSE, - ['paper_size' => 'a3', 'orientation' => 'landscape'] - ); + CRM_Utils_PDF_Utils::html2pdf($content, "{$this->_name}.pdf", FALSE); } elseif ($this->_print == CRM_Core_Smarty::PRINT_JSON) { $this->ajaxResponse['content'] = $content; diff --git a/civicrm/CRM/Core/Page/Basic.php b/civicrm/CRM/Core/Page/Basic.php index 097ba8b6c07126840fb96e1d7d8dc8ffbe906cee..21b522032b6044a616778ca05e3996bd6295fe97 100644 --- a/civicrm/CRM/Core/Page/Basic.php +++ b/civicrm/CRM/Core/Page/Basic.php @@ -203,67 +203,8 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { if ($action & CRM_Core_Action::ENABLE) { $action -= CRM_Core_Action::ENABLE; } - $baoString = $this->getBAOName(); - $object = new $baoString(); - - $values = []; - - // lets make sure we get the stuff sorted by name if it exists - $fields = &$object->fields(); - $key = ''; - if (!empty($fields['title'])) { - $key = 'title'; - } - elseif (!empty($fields['label'])) { - $key = 'label'; - } - elseif (!empty($fields['name'])) { - $key = 'name'; - } - - if (trim($sort)) { - $object->orderBy($sort); - } - elseif ($key) { - $object->orderBy($key . ' asc'); - } - $contactTypes = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, FALSE); - // find all objects - $object->find(); - while ($object->fetch()) { - if (!isset($object->mapping_type_id) || - // "1 for Search Builder" - $object->mapping_type_id != 1 - ) { - $permission = CRM_Core_Permission::EDIT; - if ($key) { - $permission = $this->checkPermission($object->id, $object->$key); - } - if ($permission) { - $values[$object->id] = []; - CRM_Core_DAO::storeValues($object, $values[$object->id]); - - if (is_a($object, 'CRM_Contact_DAO_RelationshipType')) { - if (isset($values[$object->id]['contact_type_a'])) { - $values[$object->id]['contact_type_a_display'] = $contactTypes[$values[$object->id]['contact_type_a']]; - } - if (isset($values[$object->id]['contact_type_b'])) { - $values[$object->id]['contact_type_b_display'] = $contactTypes[$values[$object->id]['contact_type_b']]; - } - } - - // populate action links - $this->action($object, $action, $values[$object->id], $links, $permission); - - if (isset($object->mapping_type_id)) { - $mappintTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Mapping', 'mapping_type_id'); - $values[$object->id]['mapping_type'] = $mappintTypes[$object->mapping_type_id]; - } - } - } - } - $this->assign('rows', $values); + $this->assign('rows', $this->getRows($sort, $action, $links)); } /** @@ -395,4 +336,75 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { $controller->run(); } + /** + * @param $sort + * @param $action + * @param array $links + * + * @return array + */ + protected function getRows($sort, $action, array $links): array { + $baoString = $this->getBAOName(); + $object = new $baoString(); + + $values = []; + + // lets make sure we get the stuff sorted by name if it exists + $fields = &$object->fields(); + $key = ''; + if (!empty($fields['title'])) { + $key = 'title'; + } + elseif (!empty($fields['label'])) { + $key = 'label'; + } + elseif (!empty($fields['name'])) { + $key = 'name'; + } + + if (trim($sort)) { + $object->orderBy($sort); + } + elseif ($key) { + $object->orderBy($key . ' asc'); + } + + $contactTypes = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, FALSE); + // find all objects + $object->find(); + while ($object->fetch()) { + if (!isset($object->mapping_type_id) || + // "1 for Search Builder" + $object->mapping_type_id != 1 + ) { + $permission = CRM_Core_Permission::EDIT; + if ($key) { + $permission = $this->checkPermission($object->id, $object->$key); + } + if ($permission) { + $values[$object->id] = []; + CRM_Core_DAO::storeValues($object, $values[$object->id]); + + if (is_a($object, 'CRM_Contact_DAO_RelationshipType')) { + if (isset($values[$object->id]['contact_type_a'])) { + $values[$object->id]['contact_type_a_display'] = $contactTypes[$values[$object->id]['contact_type_a']]; + } + if (isset($values[$object->id]['contact_type_b'])) { + $values[$object->id]['contact_type_b_display'] = $contactTypes[$values[$object->id]['contact_type_b']]; + } + } + + // populate action links + $this->action($object, $action, $values[$object->id], $links, $permission); + + if (isset($object->mapping_type_id)) { + $mappintTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Mapping', 'mapping_type_id'); + $values[$object->id]['mapping_type'] = $mappintTypes[$object->mapping_type_id]; + } + } + } + } + return $values; + } + } diff --git a/civicrm/CRM/Core/Payment/AuthorizeNet.php b/civicrm/CRM/Core/Payment/AuthorizeNet.php index e28bdbf900a5f4487e50a316495b431a11e8719a..ef44058b12b659df741cd64681e8983213b25af7 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNet.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNet.php @@ -304,7 +304,8 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $template->assign('billingState', $this->_getParam('state_province')); $template->assign('billingZip', $this->_getParam('postal_code', TRUE)); $template->assign('billingCountry', $this->_getParam('country')); - + // Required to be set for s + $template->ensureVariablesAreAssigned(['subscriptionType']); $arbXML = $template->fetch('CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl'); // Submit to authorize.net diff --git a/civicrm/CRM/Core/Payment/Dummy.php b/civicrm/CRM/Core/Payment/Dummy.php index ba458d18953b5c8578feea5da025b21bc1b6ef27..9d36f55aff63ae82b8e85695bed46f79354f8019 100644 --- a/civicrm/CRM/Core/Payment/Dummy.php +++ b/civicrm/CRM/Core/Payment/Dummy.php @@ -90,7 +90,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment { CRM_Utils_Hook::alterPaymentProcessorParams($this, $params, $propertyBag); // This means we can test failing transactions by setting a past year in expiry. A full expiry check would // be more complete. - if (!empty($params['credit_card_exp_date']['Y']) && date('Y') > + if (!empty($params['credit_card_exp_date']['Y']) && CRM_Utils_Time::date('Y') > CRM_Core_Payment_Form::getCreditCardExpirationYear($params)) { throw new PaymentProcessorException(ts('Invalid expiry date')); } diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php index 54f59b1c7aa0683ecbf1c9c04e99b98f72d6b887..fbec70ca29961ed77d8c730ff4e49f9fcdd5bdc1 100644 --- a/civicrm/CRM/Core/Payment/PayPalImpl.php +++ b/civicrm/CRM/Core/Payment/PayPalImpl.php @@ -796,6 +796,11 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $paypalIPN = new CRM_Core_Payment_PayPalProIPN($params); break; + case 'PayPal_Express': + // "PayPal - Express" + $paypalIPN = new CRM_Core_Payment_PayPalProIPN($params); + break; + case 'PayPal_Standard': // "PayPal - Website Payments Standard" $paypalIPN = new CRM_Core_Payment_PayPalIPN($params); diff --git a/civicrm/CRM/Core/Payment/ProcessorForm.php b/civicrm/CRM/Core/Payment/ProcessorForm.php index 1649fa333a13808506041219b25f3fdbaef3ce52..a4062aef44b042db5c227928e5aa075d36135f57 100644 --- a/civicrm/CRM/Core/Payment/ProcessorForm.php +++ b/civicrm/CRM/Core/Payment/ProcessorForm.php @@ -67,13 +67,15 @@ class CRM_Core_Payment_ProcessorForm { $form->_values['cancelSubscriptionUrl'] = $form->_paymentObject->subscriptionURL(NULL, NULL, 'cancel'); } + $paymentProcessorBillingFields = array_keys($form->_paymentProcessor['object']->getBillingAddressFields()); + if (!empty($form->_values['custom_pre_id'])) { $profileAddressFields = []; $fields = CRM_Core_BAO_UFGroup::getFields($form->_values['custom_pre_id'], FALSE, CRM_Core_Action::ADD, NULL, NULL, FALSE, NULL, FALSE, NULL, CRM_Core_Permission::CREATE, NULL); foreach ((array) $fields as $key => $value) { - CRM_Core_BAO_UFField::assignAddressField($key, $profileAddressFields, ['uf_group_id' => $form->_values['custom_pre_id']]); + CRM_Core_BAO_UFField::assignAddressField($key, $profileAddressFields, ['uf_group_id' => $form->_values['custom_pre_id']], $paymentProcessorBillingFields); } if (count($profileAddressFields)) { $form->set('profileAddressFields', $profileAddressFields); diff --git a/civicrm/CRM/Core/Reference/Interface.php b/civicrm/CRM/Core/Reference/Interface.php index f1bcaff6d26e0d4d18c6630a876b14247b309f82..c5ee1fff58af78c20059bda123d78def2743f01c 100644 --- a/civicrm/CRM/Core/Reference/Interface.php +++ b/civicrm/CRM/Core/Reference/Interface.php @@ -31,7 +31,7 @@ interface CRM_Core_Reference_Interface { * * @param CRM_Core_DAO $targetDao * The instance for which we want references. - * @return array + * @return array{type: string, count: int}|NULL * a record describing the reference; must include the keys: * - 'type': string (not necessarily unique) * - 'count': int diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index 83c177e3de5b49b56287a68968e2d911e564a02b..4dbdc153c974e181b5fc868635819fe11c65f3dc 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -410,7 +410,7 @@ class CRM_Core_SelectValues { public static function mapProvider() { static $map = NULL; if (!$map) { - $map = ['' => '- select -'] + CRM_Utils_System::getPluginList('templates/CRM/Contact/Form/Task/Map', ".tpl"); + $map = ['' => ts('- select -')] + CRM_Utils_System::getPluginList('templates/CRM/Contact/Form/Task/Map', ".tpl"); } return $map; } @@ -424,7 +424,7 @@ class CRM_Core_SelectValues { public static function geoProvider() { static $geo = NULL; if (!$geo) { - $geo = ['' => '- select -'] + CRM_Utils_System::getPluginList('CRM/Utils/Geocode'); + $geo = ['' => ts('- select -')] + CRM_Utils_System::getPluginList('CRM/Utils/Geocode'); } return $geo; } @@ -459,7 +459,7 @@ class CRM_Core_SelectValues { public static function addressProvider() { static $addr = NULL; if (!$addr) { - $addr = array_merge(['' => '- select -'], CRM_Utils_System::getPluginList('CRM/Utils/Address', '.php', ['BatchUpdate'])); + $addr = array_merge(['' => ts('- select -')], CRM_Utils_System::getPluginList('CRM/Utils/Address', '.php', ['BatchUpdate'])); } return $addr; } @@ -1101,4 +1101,14 @@ class CRM_Core_SelectValues { ]; } + /** + * @return array + */ + public static function andOr() { + return [ + 'AND' => ts('And'), + 'OR' => ts('Or'), + ]; + } + } diff --git a/civicrm/CRM/Core/Smarty.php b/civicrm/CRM/Core/Smarty.php index 9f805c9c8d23597c2514770739f364a8e7eba136..32d21372d4a0fb0c856dc5a90da0bd37df7208d0 100644 --- a/civicrm/CRM/Core/Smarty.php +++ b/civicrm/CRM/Core/Smarty.php @@ -98,7 +98,7 @@ class CRM_Core_Smarty extends Smarty { $this->use_sub_dirs = TRUE; $customPluginsDir = NULL; - if (isset($config->customPHPPathDir)) { + if (!empty($config->customPHPPathDir) || $config->customPHPPathDir === '0') { $customPluginsDir = $config->customPHPPathDir . DIRECTORY_SEPARATOR . 'CRM' . DIRECTORY_SEPARATOR . @@ -138,6 +138,12 @@ class CRM_Core_Smarty extends Smarty { } $this->register_function('crmURL', ['CRM_Utils_System', 'crmURL']); + if (CRM_Utils_Constant::value('CIVICRM_SMARTY_DEFAULT_ESCAPE')) { + if (!isset($this->_plugins['modifier']['escape'])) { + $this->register_modifier('escape', ['CRM_Core_Smarty', 'escape']); + } + $this->default_modifiers[] = 'escape:"htmlall"'; + } $this->load_filter('pre', 'resetExtScope'); $this->assign('crmPermissions', new CRM_Core_Smarty_Permissions()); @@ -348,4 +354,92 @@ class CRM_Core_Smarty extends Smarty { return CRM_Utils_Constant::value('CIVICRM_TEMPLATE_COMPILE_CHECK', TRUE); } + /** + * Smarty escape modifier plugin. + * + * This replaces the core smarty modifier and basically does a lot of + * early-returning before calling the core function. + * + * It early returns on patterns that are common 'no-escape' patterns + * in CiviCRM - this list can be honed over time. + * + * It also logs anything that is actually escaped. Since this only kicks + * in when CIVICRM_SMARTY_DEFAULT_ESCAPE is defined it is ok to be aggressive + * about logging as we mostly care about developers using it at this stage. + * + * Note we don't actually use 'htmlall' anywhere in our tpl layer yet so + * anything coming in with this be happening because of the default modifier. + * + * Also note the right way to opt a field OUT of escaping is + * ``{$fieldName|smarty:nodefaults}`` + * This should be used for fields with known html AND for fields where + * we are doing empty or isset checks - as otherwise the value is passed for + * escaping first so you still get an enotice for 'empty' or a fatal for 'isset' + * + * Type: modifier<br> + * Name: escape<br> + * Purpose: Escape the string according to escapement type + * + * @link http://smarty.php.net/manual/en/language.modifier.escape.php + * escape (Smarty online manual) + * @author Monte Ohrt <monte at ohrt dot com> + * + * @param string $string + * @param string $esc_type + * @param string $char_set + * + * @return string + */ + public static function escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1') { + // CiviCRM variables are often arrays - just handle them. + // The early return on booleans & numbers is mostly to prevent them being + // logged as 'changed' when they are cast to a string. + if (!is_scalar($string) || empty($string) || is_bool($string) || is_numeric($string) || $esc_type === 'none') { + return $string; + } + if ($esc_type === 'htmlall') { + // 'htmlall' is the nothing-specified default. + // Don't escape things we think quickform added. + if (strpos($string, '<input') === 0 + || strpos($string, '<select') === 0 + // Not handling as yet but these ones really should get some love. + || strpos($string, '<label') === 0 + || strpos($string, '<button') === 0 + || strpos($string, '<span class="crm-frozen-field">') === 0 + || strpos($string, '<textarea') === 0 + + // The ones below this point are hopefully here short term. + || strpos($string, '<a') === 0 + // Message templates screen + || strpos($string, '<span><a href') === 0 + // Not sure how big a pattern this is - used in Pledge view tab + // not sure if it needs escaping + || strpos($string, ' action="/civicrm/') === 0 + // eg. Tag edit page, civicrm/admin/financial/financialType/accounts?action=add&reset=1&aid=1 + || strpos($string, ' action="" method="post"') === 0 + // This seems to be urls... + || strpos($string, '/civicrm/') === 0 + // Validation error message - eg. <span class="crm-error">Tournament Fees is a required field.</span> + || strpos($string, ' + <span class="crm-error">') === 0 + // e.g from participant tab class="action-item" href=/civicrm/contact/view/participant?reset=1&action=add&cid=142&context=participant + || strpos($string, 'class="action-item" href=/civicrm/"') === 0 + ) { + // Do not escape the above common patterns. + return $string; + } + } + require_once 'Smarty/plugins/modifier.escape.php'; + $value = smarty_modifier_escape($string, $esc_type, $char_set); + if ($value !== $string) { + Civi::log()->debug('smarty escaping original {original}, escaped {escaped} type {type} charset {charset}', [ + 'original' => $string, + 'escaped' => $value, + 'type' => $esc_type, + 'charset' => $char_set, + ]); + } + return $value; + } + } diff --git a/civicrm/CRM/Dedupe/BAO/DedupeRule.php b/civicrm/CRM/Dedupe/BAO/DedupeRule.php index 16683b5e5ef12c2e1a8acf3e8d7150bd1c4ef8dd..a1d9d6394476ef14b7552ad611a01477ed89c0b4 100644 --- a/civicrm/CRM/Dedupe/BAO/DedupeRule.php +++ b/civicrm/CRM/Dedupe/BAO/DedupeRule.php @@ -237,7 +237,7 @@ class CRM_Dedupe_BAO_DedupeRule extends CRM_Dedupe_DAO_DedupeRule { * @throws \CiviCRM_API3_Exception */ public function getFieldType($fieldName) { - $entity = CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($this->rule_table)); + $entity = CRM_Core_DAO_AllCoreTables::getEntityNameForTable($this->rule_table); if (!$entity) { // This means we have stored a custom field rather than an entity name in rule_table, figure out the entity. $entity = civicrm_api3('CustomGroup', 'getvalue', ['table_name' => $this->rule_table, 'return' => 'extends']); diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 680c2b5fa1eacdd30f3057b01030231a91f0401d..d2511540859430875b789b02f7e8fc487c8030ec 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -1171,7 +1171,7 @@ WHERE civicrm_event.is_active = 1 'credit_card_number' => CRM_Utils_System::mungeCreditCard(CRM_Utils_Array::value('credit_card_number', $participantParams)), 'credit_card_exp_date' => CRM_Utils_Date::mysqlToIso(CRM_Utils_Date::format(CRM_Utils_Array::value('credit_card_exp_date', $participantParams))), 'selfcancelxfer_time' => abs($values['event']['selfcancelxfer_time']), - 'selfservice_preposition' => $values['event']['selfcancelxfer_time'] < 0 ? 'after' : 'before', + 'selfservice_preposition' => $values['event']['selfcancelxfer_time'] < 0 ? ts('after') : ts('before'), 'currency' => $values['event']['currency'] ?? CRM_Core_Config::singleton()->defaultCurrency, ]); diff --git a/civicrm/CRM/Event/BAO/Query.php b/civicrm/CRM/Event/BAO/Query.php index ba9a353df8df9151cf96f383d40f583a51edafc9..61500c645fe691942f438483a5b0278646460113 100644 --- a/civicrm/CRM/Event/BAO/Query.php +++ b/civicrm/CRM/Event/BAO/Query.php @@ -323,7 +323,7 @@ class CRM_Event_BAO_Query extends CRM_Core_BAO_Query { "Boolean" ); - $isTest = $value ? 'a Test' : 'not a Test'; + $isTest = $value ? ts('a Test') : ts('not a Test'); $query->_qill[$grouping][] = ts("Participant is %1", [1 => $isTest]); $query->_tables['civicrm_participant'] = $query->_whereTables['civicrm_participant'] = 1; } diff --git a/civicrm/CRM/Event/Form/ManageEvent/Repeat.php b/civicrm/CRM/Event/Form/ManageEvent/Repeat.php index 3f1183d606b780ff27d970e4dc12a63e29f7d388..2012c6c9d313006ab5e324e6379b5280907719d3 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Repeat.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Repeat.php @@ -52,7 +52,7 @@ class CRM_Event_Form_ManageEvent_Repeat extends CRM_Event_Form_ManageEvent { "; $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Event_DAO_Event'); - $permissions = CRM_Event_BAO_Event::checkPermission(); + $permissions = CRM_Event_BAO_Event::getAllPermissions(); while ($dao->fetch()) { if (in_array($dao->id, $permissions[CRM_Core_Permission::VIEW])) { $manageEvent[$dao->id] = []; diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 12d1cfbecc4fe2d54f3dcaf4e6169c6e9f95ae9a..5ccb819dc5b933cc7bc6148836f5ef0d5fe52a09 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -686,12 +686,6 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { $this->set('primaryParticipant', $this->_params); } - CRM_Core_BAO_CustomValueTable::postProcess($this->_params, - 'civicrm_participant', - $participant->id, - 'Participant' - ); - $createPayment = (CRM_Utils_Array::value('amount', $this->_params, 0) != 0) ? TRUE : FALSE; // force to create zero amount payment, CRM-5095 @@ -828,6 +822,15 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { $participantParams['discount_id'] = "null"; } + $participantParams['custom'] = []; + foreach ($form->_params as $paramName => $paramValue) { + if (strpos($paramName, 'custom_') === 0) { + list($customFieldID, $customValueID) = CRM_Core_BAO_CustomField::getKeyID($paramName, TRUE); + CRM_Core_BAO_CustomField::formatCustomField($customFieldID, $participantParams['custom'], $paramValue, 'Participant', $customValueID); + + } + } + $participant = CRM_Event_BAO_Participant::create($participantParams); $transaction->commit(); diff --git a/civicrm/CRM/Event/Page/ManageEvent.php b/civicrm/CRM/Event/Page/ManageEvent.php index 6c45eb732d9dfea14ff337b50b2f2d0fbfa741a2..a39eb17a6a32e0308a1fc11ed1bfe4254360d23f 100644 --- a/civicrm/CRM/Event/Page/ManageEvent.php +++ b/civicrm/CRM/Event/Page/ManageEvent.php @@ -53,7 +53,6 @@ class CRM_Event_Page_ManageEvent extends CRM_Core_Page { if (!(self::$_actionLinks)) { // helper variable for nicer formatting $copyExtra = ts('Are you sure you want to make a copy of this Event?'); - $deleteExtra = ts('Are you sure you want to delete this Event?'); self::$_actionLinks = [ CRM_Core_Action::DISABLE => [ @@ -70,7 +69,6 @@ class CRM_Event_Page_ManageEvent extends CRM_Core_Page { 'name' => ts('Delete'), 'url' => CRM_Utils_System::currentPath(), 'qs' => 'action=delete&id=%%id%%', - 'extra' => 'onclick = "return confirm(\'' . $deleteExtra . '\');"', 'title' => ts('Delete Event'), ], CRM_Core_Action::COPY => [ @@ -348,7 +346,14 @@ ORDER BY start_date desc $eventType = CRM_Core_OptionGroup::values('event_type'); while ($dao->fetch()) { if (in_array($dao->id, $permittedEventsByAction[CRM_Core_Permission::VIEW])) { - $manageEvent[$dao->id] = []; + $manageEvent[$dao->id] = [ + // Set defaults to prevent smarty e-notices, will be overwritten if populated. + 'city' => '', + 'state_province' => '', + 'end_date' => '', + 'loc_block_id' => '', + 'participant_listing_id' => '', + ]; $repeat = CRM_Core_BAO_RecurringEntity::getPositionAndCount($dao->id, 'civicrm_event'); $manageEvent[$dao->id]['repeat'] = ''; if ($repeat) { diff --git a/civicrm/CRM/Extension/BootCache.php b/civicrm/CRM/Extension/BootCache.php new file mode 100644 index 0000000000000000000000000000000000000000..574a32dd743486f192c7cca6dc87bc26ba010d0d --- /dev/null +++ b/civicrm/CRM/Extension/BootCache.php @@ -0,0 +1,85 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + */ +class CRM_Extension_BootCache { + + protected $locked = FALSE; + + protected $data; + + /** + * Define a persistent value in the extension's boot-cache. + * + * This value is retained as part of the boot-cache. It will be loaded + * very quickly (eg via php op-code caching). However, as a trade-off, + * you will not be able to change/reset at runtime - it will only + * reset in response to a system-wide flush or redeployment. + * + * Ex: $mix->define('initTime', function() { return time(); }); + * + * @param string $key + * @param mixed $callback + * @return mixed + * The value of $callback (either cached or fresh) + */ + public function define($key, $callback) { + if (!isset($this->data[$key])) { + $this->set($key, $callback($this)); + } + return $this->data[$key]; + } + + /** + * Determine if $key has been set. + * + * @param string $key + * @return bool + */ + public function has($key) { + return isset($this->data[$key]); + } + + /** + * Get the value of $key. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = NULL) { + return $this->data[$key] ?? $default; + } + + /** + * Set a value in the cache. + * + * This operation is only valid on the first page-load when a cache is built. + * + * @param string $key + * @param mixed $value + * @return static + * @throws \Exception + */ + public function set($key, $value) { + if ($this->locked) { + throw new \Exception("Cannot modify a locked boot-cache."); + } + $this->data[$key] = $value; + return $this; + } + + public function lock() { + $this->locked = TRUE; + } + +} diff --git a/civicrm/CRM/Extension/Info.php b/civicrm/CRM/Extension/Info.php index 8b8ee51143794cc307561b1101f4036bf823c3c7..2f14314c078bb685890b78b02e05476cb7ec5fd9 100644 --- a/civicrm/CRM/Extension/Info.php +++ b/civicrm/CRM/Extension/Info.php @@ -44,6 +44,13 @@ class CRM_Extension_Info { */ public $requires = []; + /** + * @var array + * List of expected mixins. + * Ex: ['civix@2.0.0'] + */ + public $mixins = []; + /** * @var array * List of strings (tag-names). @@ -197,6 +204,12 @@ class CRM_Extension_Info { $this->tags[] = (string) $tag; } } + elseif ($attr === 'mixins') { + $this->mixins = []; + foreach ($val->mixin as $mixin) { + $this->mixins[] = (string) $mixin; + } + } elseif ($attr === 'requires') { $this->requires = $this->filterRequirements($val); } diff --git a/civicrm/CRM/Extension/Mapper.php b/civicrm/CRM/Extension/Mapper.php index 3e0c9dd14e4b7dc190becc1a83d8124a807aa9b9..7f56f176f2f66da78b442321ff2acd5027fdfb1c 100644 --- a/civicrm/CRM/Extension/Mapper.php +++ b/civicrm/CRM/Extension/Mapper.php @@ -480,8 +480,7 @@ class CRM_Extension_Mapper { /** * Get a list of all installed modules, including enabled and disabled ones * - * @return array - * CRM_Core_Module + * @return CRM_Core_Module[] */ public function getModules() { $result = []; @@ -539,6 +538,7 @@ class CRM_Extension_Mapper { } // FIXME: How can code so code wrong be so right? CRM_Extension_System::singleton()->getClassLoader()->refresh(); + CRM_Extension_System::singleton()->getMixinLoader()->run(TRUE); } /** diff --git a/civicrm/CRM/Extension/MixInfo.php b/civicrm/CRM/Extension/MixInfo.php new file mode 100644 index 0000000000000000000000000000000000000000..4e97d8f8e90d8cbaf676d49f945d0fe42abd912f --- /dev/null +++ b/civicrm/CRM/Extension/MixInfo.php @@ -0,0 +1,73 @@ +<?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 | + +--------------------------------------------------------------------+ + */ + +/** + * "Mixins" allow extensions to be initialized with small, reusable chunks of code. + * + * Example: A mixin might scan an extension for YAML files, aggregate them, add that + * to the boot-cache, and use the results to register event-listeners during initialization. + * + * Mixins have the following characteristics: + * + * - They are defined by standalone PHP files, e.g. `civix@1.0.2.mixin.php` + * - They are implicitly versioned via strict SemVer. (`1.1.0` can replace `1.0.0`; `2.0.0` and `1.0.0` are separate/parallel things). + * - They are activated via `info.xml` (`<mix>civix@1.0</mix>`). + * - They may be copied/reproduced in multiple extensions. + * - They are de-duped - such that a major-version (eg `civix@1` or `civix@2`) is only loaded once. + * + * The "MixInfo" record tracks the mixins needed by an extension. You may consider this an + * optimized subset of the 'info.xml'. (The mix-info is loaded on every page-view, so this + * record is serialized and stored in the MixinLoader cache.) + */ +class CRM_Extension_MixInfo { + + /** + * @var string + * + * Ex: 'org.civicrm.flexmailer' + */ + public $longName; + + /** + * @var string + * + * Ex: 'flexmailer' + */ + public $shortName; + + /** + * @var string|null + * + * Ex: '/var/www/modules/civicrm/ext/flexmailer'. + */ + public $path; + + /** + * @var array + * Ex: ['civix@2.0', 'menu@1.0'] + */ + public $mixins; + + /** + * Get a path relative to the target extension. + * + * @param string $relPath + * @return string + */ + public function getPath($relPath = NULL) { + return $relPath === NULL ? $this->path : $this->path . DIRECTORY_SEPARATOR . ltrim($relPath, '/'); + } + + public function isActive() { + return \CRM_Extension_System::singleton()->getMapper()->isActiveModule($this->shortName); + } + +} diff --git a/civicrm/CRM/Extension/MixinLoader.php b/civicrm/CRM/Extension/MixinLoader.php new file mode 100644 index 0000000000000000000000000000000000000000..edb67a0814d1a946f8051ba59fba34c1d88081a3 --- /dev/null +++ b/civicrm/CRM/Extension/MixinLoader.php @@ -0,0 +1,85 @@ +<?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 | + +--------------------------------------------------------------------+ + */ + +/** + * The MixinLoader gets a list of extensions and mixins - then loads them. + */ +class CRM_Extension_MixinLoader { + + /** + * List extension-mixins that have been loaded already. + * + * @var array + */ + protected $done = []; + + public function run($force = FALSE) { + $system = CRM_Extension_System::singleton(); + $cache = $system->getCache(); + + $cachedScan = $force ? NULL : $cache->get('mixinScan'); + $cachedBootData = $force ? NULL : $cache->get('mixinBoot'); + + [$funcFiles, $mixInfos] = $cachedScan ?: (new CRM_Extension_MixinScanner($system->getMapper(), $system->getManager(), TRUE))->build(); + $bootData = $cachedBootData ?: new CRM_Extension_BootCache(); + + $this->loadMixins($bootData, $funcFiles, $mixInfos); + + if ($cachedScan === NULL) { + $cache->set('mixinScan', [$funcFiles, $mixInfos], 24 * 60 * 60); + } + if ($cachedBootData === NULL) { + $bootData->lock(); + $cache->set('mixinBoot', $bootData, 24 * 60 * 60); + } + } + + /** + * Load all extensions and call their respective function-files. + * + * @throws \CRM_Core_Exception + */ + protected function loadMixins(CRM_Extension_BootCache $bootCache, array $liveFuncFiles, array $mixInfos): void { + // Read each live func-file once, even if there's some kind of Civi::reset(). This avoids hard-crash where the func-file registers a PHP class/function/interface. + // Granted, PHP symbols require care to avoid conflicts between `mymixin@1.0` and `mymixin@2.0` -- but you can deal with that. For minor-versions, you're + // safe because we deduplicate. + static $funcsByFile = []; + foreach ($liveFuncFiles as $verExpr => $file) { + if (!isset($funcsByFile[$file])) { + $func = include_once $file; + if (is_callable($func)) { + $funcsByFile[$file] = $func; + } + else { + error_log(sprintf('MixinLoader: Received invalid callback from \"%s\"', $file)); + } + } + } + + foreach ($mixInfos as $ext) { + /** @var \CRM_Extension_MixInfo $ext */ + foreach ($ext->mixins as $verExpr) { + $doneId = $ext->longName . '::' . $verExpr; + if (isset($this->done[$doneId])) { + continue; + } + if (isset($funcsByFile[$liveFuncFiles[$verExpr]])) { + call_user_func($funcsByFile[$liveFuncFiles[$verExpr]], $ext, $bootCache); + $this->done[$doneId] = 1; + } + else { + error_log(sprintf('MixinLoader: Failed to load "%s" for extension "%s"', $verExpr, $ext->longName)); + } + } + } + } + +} diff --git a/civicrm/CRM/Extension/MixinScanner.php b/civicrm/CRM/Extension/MixinScanner.php new file mode 100644 index 0000000000000000000000000000000000000000..8e4039b6042a6076a2c3df64a4b93f300dee2b0e --- /dev/null +++ b/civicrm/CRM/Extension/MixinScanner.php @@ -0,0 +1,283 @@ +<?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 | + +--------------------------------------------------------------------+ + */ + +/** + * The MixinScanner scans the list of actives extensions and their required mixins. + */ +class CRM_Extension_MixinScanner { + + /** + * @var CRM_Extension_Mapper + */ + protected $mapper; + + /** + * @var CRM_Extension_Manager + */ + protected $manager; + + /** + * @var string[]|null + * A list of base-paths which are implicitly supported by 'include' directives. + * Sorted with the longest paths first. + */ + protected $relativeBases; + + /** + * @var array + * Ex: ['civix' => ['1.0.0' => 'path/to/civix@1.0.0.mixin.php']] + */ + protected $allFuncFiles = []; + + /** + * @var array|null + * If we have not scanned for live funcs, then NULL. + * Otherwise, every live version-requirement is mapped to the corresponding file. + * Ex: ['civix@1' => 'path/to/civix@1.0.0.mixin.php'] + */ + protected $liveFuncFiles = NULL; + + /** + * @var \CRM_Extension_MixInfo[] + */ + protected $mixInfos = []; + + /** + * CRM_Extension_ClassLoader constructor. + * @param \CRM_Extension_Mapper|NULL $mapper + * @param \CRM_Extension_Manager|NULL $manager + * @param bool $relativize + * Whether to store paths in relative form. + * Enabling this may slow-down scanning a bit, and it has no benefit when for on-demand loaders. + * However, if the loader is cached, then it may make for smaller, more portable cache-file. + */ + public function __construct(?\CRM_Extension_Mapper $mapper = NULL, \CRM_Extension_Manager $manager = NULL, $relativize = TRUE) { + $this->mapper = $mapper ?: CRM_Extension_System::singleton()->getMapper(); + $this->manager = $manager ?: CRM_Extension_System::singleton()->getManager(); + if ($relativize) { + $this->relativeBases = [Civi::paths()->getVariable('civicrm.root', 'path')]; + // Previous drafts used `relativeBases=explode(include_path)`. However, this produces unstable results + // when flip through the phases of the lifecycle - because the include_path changes throughout the lifecycle. + usort($this->relativeBases, function($a, $b) { + return strlen($b) - strlen($a); + }); + } + else { + $this->relativeBases = NULL; + } + } + + /** + * @return array{0: funcFiles, 1: mixInfos} + */ + public function build() { + $this->scan(); + return $this->compile(); + } + + /** + * Search through known extensions + */ + protected function scan() { + foreach ($this->getInstalledKeys() as $key) { + try { + $path = $this->mapper->keyToBasePath($key); + $this->addMixInfo($this->createMixInfo($path . DIRECTORY_SEPARATOR . CRM_Extension_Info::FILENAME)); + $this->addFunctionFiles($this->findFunctionFiles("$path/mixin/*@*.mixin.php")); + $this->addFunctionFiles($this->findFunctionFiles("$path/mixin/*@*/mixin.php"), TRUE); + } + catch (CRM_Extension_Exception_ParseException $e) { + error_log(sprintf('MixinScanner: Failed to read extension (%s)', $key)); + } + } + + $this->addFunctionFiles($this->findFunctionFiles(Civi::paths()->getPath('[civicrm.root]/mixin/*@*.mixin.php'))); + $this->addFunctionFiles($this->findFunctionFiles(Civi::paths()->getPath('[civicrm.root]/mixin/*@*/mixin.php')), TRUE); + } + + /** + * Optimize the metadata, removing information that is not needed at runtime. + * + * Steps: + * + * - Remove any unnecessary $mixInfos (ie they have no mixins). + * - Given the available versions and expectations, pick the best $liveFuncFiles. + * - Drop $allFuncFiles. + */ + protected function compile() { + $this->liveFuncFiles = []; + $allFuncs = $this->allFuncFiles ?? []; + + $sortByVer = function ($a, $b) { + return version_compare($a, $b /* ignore third arg */); + }; + foreach (array_keys($allFuncs) as $name) { + uksort($allFuncs[$name], $sortByVer); + } + + $this->mixInfos = array_filter($this->mixInfos, function(CRM_Extension_MixInfo $mixInfo) { + return !empty($mixInfo->mixins); + }); + + foreach ($this->mixInfos as $ext) { + /** @var \CRM_Extension_MixInfo $ext */ + foreach ($ext->mixins as $verExpr) { + list ($name, $expectVer) = explode('@', $verExpr); + $matchFile = NULL; + // NOTE: allFuncs[$name] is sorted by increasing version number. Choose highest satisfactory match. + foreach ($allFuncs[$name] ?? [] as $availVer => $availFile) { + if (static::satisfies($expectVer, $availVer)) { + $matchFile = $availFile; + } + } + if ($matchFile) { + $this->liveFuncFiles[$verExpr] = $matchFile; + } + else { + error_log(sprintf('MixinLoader: Failed to locate match for "%s"', $verExpr)); + } + } + } + + $this->allFuncFiles = NULL; + + return [$this->liveFuncFiles, $this->mixInfos]; + } + + /** + * @param CRM_Extension_MixInfo $mix + * @return static + * @throws \CRM_Extension_Exception_ParseException + */ + public function addMixInfo(CRM_Extension_MixInfo $mix) { + $this->mixInfos[$mix->longName] = $mix; + return $this; + } + + /** + * @param array|string $files + * Ex: 'path/to/some/file@1.0.0.mixin.php' + * @param bool $deepRead + * If TRUE, then the file will be read to find metadata. + * @return $this + */ + public function addFunctionFiles($files, $deepRead = FALSE) { + $files = (array) $files; + foreach ($files as $file) { + if (preg_match(';^([^@]+)@([^@]+)\.mixin\.php$;', basename($file), $m)) { + $this->allFuncFiles[$m[1]][$m[2]] = $file; + continue; + } + + if ($deepRead) { + $header = $this->loadFunctionFileHeader($file); + if (isset($header['mixinName'], $header['mixinVersion'])) { + $this->allFuncFiles[$header['mixinName']][$header['mixinVersion']] = $file; + continue; + } + else { + error_log(sprintf('MixinLoader: Invalid mixin header for "%s". @mixinName and @mixinVersion required.', $file)); + continue; + } + } + + error_log(sprintf('MixinLoader: File \"%s\" cannot be parsed.', $file)); + } + return $this; + } + + private function loadFunctionFileHeader($file) { + $php = file_get_contents($file, TRUE); + foreach (token_get_all($php) as $token) { + if (is_array($token) && in_array($token[0], [T_DOC_COMMENT, T_COMMENT, T_FUNC_C, T_METHOD_C, T_TRAIT_C, T_CLASS_C])) { + return \Civi\Api4\Utils\ReflectionUtils::parseDocBlock($token[1]); + } + } + return []; + } + + /** + * @return array + */ + private function getInstalledKeys() { + $keys = []; + + $statuses = $this->manager->getStatuses(); + ksort($statuses); + foreach ($statuses as $key => $status) { + if ($status === CRM_Extension_Manager::STATUS_INSTALLED) { + $keys[] = $key; + } + } + + return $keys; + } + + /** + * @param string $infoFile + * Path to the 'info.xml' file + * @return \CRM_Extension_MixInfo + * @throws \CRM_Extension_Exception_ParseException + */ + private function createMixInfo(string $infoFile) { + $info = CRM_Extension_Info::loadFromFile($infoFile); + $instance = new CRM_Extension_MixInfo(); + $instance->longName = $info->key; + $instance->shortName = $info->file; + $instance->path = rtrim(dirname($infoFile), '/' . DIRECTORY_SEPARATOR); + $instance->mixins = $info->mixins; + return $instance; + } + + /** + * @param string $globPat + * @return array + * Ex: ['mix/xml-menu-autoload@1.0.mixin.php'] + */ + private function findFunctionFiles($globPat) { + $useRel = $this->relativeBases !== NULL; + $result = []; + $funcFiles = (array) glob($globPat); + sort($funcFiles); + foreach ($funcFiles as $shimFile) { + $shimFileRel = $useRel ? $this->relativize($shimFile) : $shimFile; + $result[] = $shimFileRel; + } + return $result; + } + + /** + * Convert the absolute $file to an expression that is supported by 'include'. + * + * @param string $file + * @return string + */ + private function relativize($file) { + foreach ($this->relativeBases as $relativeBase) { + if (CRM_Utils_File::isChildPath($relativeBase, $file)) { + return ltrim(CRM_Utils_File::relativize($file, $relativeBase), '/' . DIRECTORY_SEPARATOR); + } + } + return $file; + } + + /** + * @param string $expectVer + * @param string $actualVer + * @return bool + */ + private static function satisfies($expectVer, $actualVer) { + [$expectMajor] = explode('.', $expectVer); + [$actualMajor] = explode('.', $actualVer); + return ($expectMajor == $actualMajor) && version_compare($actualVer, $expectVer, '>='); + } + +} diff --git a/civicrm/CRM/Extension/System.php b/civicrm/CRM/Extension/System.php index b9bb47dd3bcca7f0515ac5acff9dcf095078abb5..e27d93fe1dc5b80762e3b0af5c1450d406b53243 100644 --- a/civicrm/CRM/Extension/System.php +++ b/civicrm/CRM/Extension/System.php @@ -26,6 +26,7 @@ class CRM_Extension_System { private $manager = NULL; private $browser = NULL; private $downloader = NULL; + private $mixinLoader = NULL; /** * @var CRM_Extension_ClassLoader @@ -243,6 +244,16 @@ class CRM_Extension_System { return $this->downloader; } + /** + * @return CRM_Extension_MixinLoader; + */ + public function getMixinLoader() { + if ($this->mixinLoader === NULL) { + $this->mixinLoader = new CRM_Extension_MixinLoader(); + } + return $this->mixinLoader; + } + /** * @return CRM_Utils_Cache_Interface */ diff --git a/civicrm/CRM/Financial/BAO/FinancialAccount.php b/civicrm/CRM/Financial/BAO/FinancialAccount.php index 0fc9b58d9b66ff769db7c10b32df9f8081804b20..de3da002c737e364aca5ae6f6b4fffd0e34fe966 100644 --- a/civicrm/CRM/Financial/BAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/BAO/FinancialAccount.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Financial_BAO_FinancialAccount extends CRM_Financial_DAO_FinancialAccount { +class CRM_Financial_BAO_FinancialAccount extends CRM_Financial_DAO_FinancialAccount implements \Civi\Test\HookInterface { /** * Class constructor. @@ -121,38 +121,43 @@ class CRM_Financial_BAO_FinancialAccount extends CRM_Financial_DAO_FinancialAcco /** * Delete financial Types. * + * @deprecated * @param int $financialAccountId */ public static function del($financialAccountId) { - // checking if financial type is present - $check = FALSE; - - //check dependencies - $dependency = [ - ['Core', 'FinancialTrxn', 'to_financial_account_id'], - ['Financial', 'FinancialTypeAccount', 'financial_account_id'], - ['Financial', 'FinancialItem', 'financial_account_id'], - ]; - foreach ($dependency as $name) { - require_once str_replace('_', DIRECTORY_SEPARATOR, "CRM_" . $name[0] . "_BAO_" . $name[1]) . ".php"; - $className = "CRM_{$name[0]}_BAO_{$name[1]}"; - $bao = new $className(); - $bao->{$name[2]} = $financialAccountId; - if ($bao->find(TRUE)) { - $check = TRUE; - } + try { + static::deleteRecord(['id' => $financialAccountId]); + return TRUE; } - - if ($check) { - CRM_Core_Session::setStatus(ts('This financial account cannot be deleted since it is being used as a header account. Please remove it from being a header account before trying to delete it again.')); + catch (CRM_Core_Exception $e) { + // FIXME: Setting status messages within a BAO CRUD function is bad bad bad. But this fn is deprecated so who cares. + CRM_Core_Session::setStatus($e->getMessage(), ts('Delete Error'), 'error'); return FALSE; } + } - // delete from financial Type table - $financialAccount = new CRM_Financial_DAO_FinancialAccount(); - $financialAccount->id = $financialAccountId; - $financialAccount->delete(); - return TRUE; + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + // Check dependencies before deleting + $dependency = [ + ['Core', 'FinancialTrxn', 'to_financial_account_id'], + ['Financial', 'FinancialTypeAccount', 'financial_account_id'], + ['Financial', 'FinancialItem', 'financial_account_id'], + ]; + foreach ($dependency as $name) { + $className = "CRM_{$name[0]}_BAO_{$name[1]}"; + $bao = new $className(); + $bao->{$name[2]} = $event->id; + if ($bao->find(TRUE)) { + throw new CRM_Core_Exception(ts('This financial account cannot be deleted since it is being used as a header account. Please remove it from being a header account before trying to delete it again.')); + } + } + } } /** diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index 0ddb52138fc20b7276cc08babc32c0b485785908..ecdb421af55ab8575c98982fceb292e7ffa20f8b 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { +class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType implements \Civi\Test\HookInterface { /** * Static cache holder of available financial types for this session @@ -117,46 +117,60 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { * Delete financial Types. * * @param int $financialTypeId - * + * @deprecated * @return array|bool */ public static function del($financialTypeId) { - $financialType = new CRM_Financial_DAO_FinancialType(); - $financialType->id = $financialTypeId; - $financialType->find(TRUE); - // tables to ignore checks for financial_type_id - $ignoreTables = ['CRM_Financial_DAO_EntityFinancialAccount']; + try { + static::deleteRecord(['id' => $financialTypeId]); + return TRUE; + } + catch (CRM_Core_Exception $e) { + return [ + 'is_error' => 1, + 'error_message' => $e->getMessage(), + ]; + } + } - // TODO: if (!$financialType->find(true)) { + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + $financialType = new CRM_Financial_DAO_FinancialType(); + $financialType->id = $event->id; - // ensure that we have no objects that have an FK to this financial type id TODO: that cannot be null - $occurrences = $financialType->findReferences(); - if ($occurrences) { + // tables to ignore checks for financial_type_id + $ignoreTables = ['CRM_Financial_DAO_EntityFinancialAccount']; + + // ensure that we have no objects that have an FK to this financial type id TODO: that cannot be null $tables = []; - foreach ($occurrences as $occurrence) { + foreach ($financialType->findReferences() as $occurrence) { $className = get_class($occurrence); if (!in_array($className, $tables) && !in_array($className, $ignoreTables)) { $tables[] = $className; } } if (!empty($tables)) { - $message = ts('The following tables have an entry for this financial type: %1', [1 => implode(', ', $tables)]); - - $errors = []; - $errors['is_error'] = 1; - $errors['error_message'] = $message; - return $errors; + throw new CRM_Core_Exception(ts('The following tables have an entry for this financial type: %1', [1 => implode(', ', $tables)])); } } + } - // delete from financial Type table - $financialType->delete(); - - $entityFinancialType = new CRM_Financial_DAO_EntityFinancialAccount(); - $entityFinancialType->entity_id = $financialTypeId; - $entityFinancialType->entity_table = 'civicrm_financial_type'; - $entityFinancialType->delete(); - return TRUE; + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'delete') { + \Civi\Api4\EntityFinancialAccount::delete(FALSE) + ->addWhere('entity_id', '=', $event->id) + ->addWhere('entity_table', '=', 'civicrm_financial_type') + ->execute(); + } } /** diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessor.php b/civicrm/CRM/Financial/BAO/PaymentProcessor.php index 7c94cad4f63264fa339f54d5e020eab2a097cf45..d27b502fb3ba69893c5ba413914edb14d1b67ab9 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessor.php @@ -18,7 +18,7 @@ /** * This class contains payment processor related functions. */ -class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProcessor { +class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProcessor implements \Civi\Test\HookInterface { /** * Static holder for the default payment processor * @var object @@ -184,27 +184,29 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces * Delete payment processor. * * @param int $paymentProcessorID - * - * @return null + * @deprecated */ public static function del($paymentProcessorID) { if (!$paymentProcessorID) { throw new CRM_Core_Exception(ts('Invalid value passed to delete function.')); } + static::deleteRecord(['id' => $paymentProcessorID]); + } - $dao = new CRM_Financial_DAO_PaymentProcessor(); - $dao->id = $paymentProcessorID; - if (!$dao->find(TRUE)) { - return NULL; - } - - $testDAO = new CRM_Financial_DAO_PaymentProcessor(); - $testDAO->name = $dao->name; - $testDAO->is_test = 1; - $testDAO->delete(); + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'delete') { + // When a paymentProcessor is deleted, delete the associated test processor + $testDAO = new CRM_Financial_DAO_PaymentProcessor(); + $testDAO->name = $event->object->name; + $testDAO->is_test = 1; + $testDAO->delete(); - $dao->delete(); - Civi\Payment\System::singleton()->flushProcessors(); + Civi\Payment\System::singleton()->flushProcessors(); + } } /** diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php index c0f49c2b10bfe17b862267e198c496bdba872347..796e5cfd37e0e3fb237bd74e1c9868befb89e69f 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Financial_BAO_PaymentProcessorType extends CRM_Financial_DAO_PaymentProcessorType { +class CRM_Financial_BAO_PaymentProcessorType extends CRM_Financial_DAO_PaymentProcessorType implements \Civi\Test\HookInterface { /** * Static holder for the default payment processor. @@ -153,29 +153,40 @@ class CRM_Financial_BAO_PaymentProcessorType extends CRM_Financial_DAO_PaymentPr * Delete payment processor. * * @param int $paymentProcessorTypeId - * ID of the processor to be deleted. - * + * @deprecated * @return bool|NULL */ public static function del($paymentProcessorTypeId) { - $query = " + try { + static::deleteRecord(['id' => $paymentProcessorTypeId]); + // This message is bad on so many levels + CRM_Core_Session::setStatus(ts('Selected Payment Processor type has been deleted.<br/>'), '', 'success'); + return TRUE; + } + catch (CRM_Core_Exception $e) { + CRM_Core_Session::setStatus($e->getMessage(), ts('Deletion Error'), 'error'); + return NULL; + } + } + + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + $query = " SELECT pp.id processor_id FROM civicrm_payment_processor pp, civicrm_payment_processor_type ppt WHERE pp.payment_processor_type_id = ppt.id AND ppt.id = %1"; - $params = [1 => [$paymentProcessorTypeId, 'Integer']]; - $dao = CRM_Core_DAO::executeQuery($query, $params); - - if ($dao->fetch()) { - CRM_Core_Session::setStatus(ts('There is a Payment Processor associated with selected Payment Processor type, hence it can not be deleted.'), ts('Deletion Error'), 'error'); - return NULL; - } + $params = [1 => [$event->id, 'Integer']]; + $dao = CRM_Core_DAO::executeQuery($query, $params); - $paymentProcessorType = new CRM_Financial_DAO_PaymentProcessorType(); - $paymentProcessorType->id = $paymentProcessorTypeId; - if ($paymentProcessorType->delete()) { - CRM_Core_Session::setStatus(ts('Selected Payment Processor type has been deleted.<br/>'), '', 'success'); - return TRUE; + if ($dao->fetch()) { + throw new CRM_Core_Exception(ts('There is a Payment Processor associated with selected Payment Processor type, hence it can not be deleted.')); + } } } diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php index 0afebfb8108840ceb44b764a47f8ce36453ca163..6f76bdecb29a41b32ddb15bd49eb2c99e3b0d81f 100644 --- a/civicrm/CRM/Group/Form/Edit.php +++ b/civicrm/CRM/Group/Form/Edit.php @@ -92,6 +92,8 @@ class CRM_Group_Form_Edit extends CRM_Core_Form { * Set up variables to build the form. */ public function preProcess() { + $this->addOptionalQuickFormElement('parents'); + $this->addExpectedSmartyVariable('parent_groups'); $this->_id = $this->get('id'); if ($this->_id) { $breadCrumb = array( diff --git a/civicrm/CRM/Group/Form/Search.php b/civicrm/CRM/Group/Form/Search.php index a56623fefc016011195a13864e0c2a7a53e21a91..9ff60f05aadc44b9e2ee1ad405f6196739c28d83 100644 --- a/civicrm/CRM/Group/Form/Search.php +++ b/civicrm/CRM/Group/Form/Search.php @@ -17,6 +17,9 @@ class CRM_Group_Form_Search extends CRM_Core_Form { public function preProcess() { + // This variable does not appear to be set in core civicrm + // and is possibly obsolete? It probably relates to the multisite extension. + $this->expectedSmartyVariables[] = 'showOrgInfo'; parent::preProcess(); CRM_Core_Resources::singleton()->addPermissions('edit groups'); diff --git a/civicrm/CRM/Mailing/BAO/Mailing.php b/civicrm/CRM/Mailing/BAO/Mailing.php index 3270945ca2ed6f826a369985ef8f3173298e5143..d7b2817d656d4e32ba0d2e00c09fc08a9aca7ddc 100644 --- a/civicrm/CRM/Mailing/BAO/Mailing.php +++ b/civicrm/CRM/Mailing/BAO/Mailing.php @@ -2061,7 +2061,7 @@ ORDER BY civicrm_email.is_bulkmail DESC 'clicks' => $mailing->clicks, 'unique' => $mailing->unique_clicks, 'rate' => !empty($report['event_totals']['delivered']) ? (100.0 * $mailing->unique_clicks) / $report['event_totals']['delivered'] : 0, - 'report' => CRM_Report_Utils_Report::getNextUrl('mailing/clicks', "reset=1&mailing_id_value={$mailing_id}&url_value={$mailing->url}", FALSE, TRUE), + 'report' => CRM_Report_Utils_Report::getNextUrl('mailing/clicks', "reset=1&mailing_id_value={$mailing_id}&url_value=" . rawurlencode($mailing->url), FALSE, TRUE), ]; } diff --git a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php index 73e15ec35dafcf9c73cca1e68852b8b4f58026e0..dea877f6a0811c2d0307ed4ad0f45a29c76e81fc 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php @@ -172,12 +172,10 @@ class CRM_Mailing_Event_BAO_Resubscribe { * The queue event ID. * @param array $groups * List of group IDs. - * @param bool $is_domain - * Is this domain-level?. * @param int $job * The job ID. */ - public static function send_resub_response($queue_id, $groups, $is_domain = FALSE, $job) { + public static function send_resub_response($queue_id, $groups, $job) { // param is_domain is not supported as of now. $config = CRM_Core_Config::singleton(); diff --git a/civicrm/CRM/Mailing/Page/Common.php b/civicrm/CRM/Mailing/Page/Common.php index 4bae016690a9bd3523ead06a9c5660201663395c..e1d6f05e5f94362842ffd50d832213071862783c 100644 --- a/civicrm/CRM/Mailing/Page/Common.php +++ b/civicrm/CRM/Mailing/Page/Common.php @@ -79,7 +79,7 @@ class CRM_Mailing_Page_Common extends CRM_Core_Page { elseif ($this->_type == 'resubscribe') { $groups = CRM_Mailing_Event_BAO_Resubscribe::resub_to_mailing($job_id, $queue_id, $hash); if (count($groups)) { - CRM_Mailing_Event_BAO_Resubscribe::send_resub_response($queue_id, $groups, FALSE, $job_id); + CRM_Mailing_Event_BAO_Resubscribe::send_resub_response($queue_id, $groups, $job_id); } else { // should we indicate an error, or just ignore? diff --git a/civicrm/CRM/Member/BAO/MembershipStatus.php b/civicrm/CRM/Member/BAO/MembershipStatus.php index 026b133062ccb886f0ea9ad4e9ca0a0884082691..7fa4a1248aadb1e30d96df72a49a7d2774df4f9e 100644 --- a/civicrm/CRM/Member/BAO/MembershipStatus.php +++ b/civicrm/CRM/Member/BAO/MembershipStatus.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus { +class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus implements \Civi\Test\HookInterface { /** * Fetch object based on array of properties. @@ -52,7 +52,7 @@ class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus { } /** - * Takes an associative array and creates a membership Status object. + * Takes an associative array and creates a membership status object. * * @param array $params * Array of name/value pairs. @@ -73,7 +73,7 @@ class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus { } /** - * Add the membership types. + * Add the membership status. * * @param array $params * Reference array contains the values submitted by the form. @@ -130,7 +130,7 @@ class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus { } /** - * Get membership status. + * Get membership status. * * @param int $membershipStatusId * @@ -147,35 +147,36 @@ class CRM_Member_BAO_MembershipStatus extends CRM_Member_DAO_MembershipStatus { } /** - * Delete membership Types. + * Delete membership status. * * @param int $membershipStatusId - * + * @deprecated * @throws CRM_Core_Exception */ public static function del($membershipStatusId) { - //check dependencies - //checking if membership status is present in some other table - $check = FALSE; + static::deleteRecord(['id' => $membershipStatusId]); + } - $dependency = ['Membership', 'MembershipLog']; - foreach ($dependency as $name) { - $baoString = 'CRM_Member_BAO_' . $name; - $dao = new $baoString(); - $dao->status_id = $membershipStatusId; - if ($dao->find(TRUE)) { - throw new CRM_Core_Exception(ts('This membership status cannot be deleted as memberships exist with this status')); + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete') { + // Check if any membership records are assigned this membership status + $dependency = ['Membership']; + foreach ($dependency as $name) { + $baoString = 'CRM_Member_BAO_' . $name; + $dao = new $baoString(); + $dao->status_id = $event->id; + if ($dao->find(TRUE)) { + throw new CRM_Core_Exception(ts('This membership status cannot be deleted. Memberships exist with this status.')); + } } + CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipStatus', $event->id); + CRM_Member_PseudoConstant::flush('membershipStatus'); } - CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipStatus', $membershipStatusId); - //delete from membership Type table - $membershipStatus = new CRM_Member_DAO_MembershipStatus(); - $membershipStatus->id = $membershipStatusId; - if (!$membershipStatus->find()) { - throw new CRM_Core_Exception(ts('Cannot delete membership status ' . $membershipStatusId)); - } - $membershipStatus->delete(); - CRM_Member_PseudoConstant::flush('membershipStatus'); } /** diff --git a/civicrm/CRM/Member/BAO/MembershipType.php b/civicrm/CRM/Member/BAO/MembershipType.php index 1ec67d2e16a547386545969da79b4d9d1ccc323a..2093eea87859aae535626ca3189c42c8ee35776d 100644 --- a/civicrm/CRM/Member/BAO/MembershipType.php +++ b/civicrm/CRM/Member/BAO/MembershipType.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { +class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType implements \Civi\Test\HookInterface { /** * Static holder for the default Membership Type. @@ -146,63 +146,85 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { * * @param int $membershipTypeId * + * @deprecated * @throws CRM_Core_Exception - * @return bool|mixed + * @return bool */ public static function del($membershipTypeId) { - // Check dependencies. - $check = FALSE; - $status = []; - $dependency = [ - 'Membership' => 'membership_type_id', - 'MembershipBlock' => 'membership_type_default', - ]; + try { + static::deleteRecord(['id' => $membershipTypeId]); + return TRUE; + } + catch (CRM_Core_Exception $e) { + return FALSE; + } + } - foreach ($dependency as $name => $field) { - $baoString = 'CRM_Member_BAO_' . $name; - $dao = new $baoString(); - $dao->$field = $membershipTypeId; - /** @noinspection PhpUndefinedMethodInspection */ - if ($dao->find(TRUE)) { - $check = TRUE; - $status[] = $name; + /** + * Callback for hook_civicrm_pre(). + * @param \Civi\Core\Event\PreEvent $event + * @throws CRM_Core_Exception + */ + public static function on_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete' && $event->entity === 'RelationshipType') { + // When deleting relationship type, remove from membership types + $mems = civicrm_api3('MembershipType', 'get', [ + 'relationship_type_id' => ['LIKE' => "%{$event->id}%"], + 'return' => ['id', 'relationship_type_id', 'relationship_direction'], + ]); + foreach ($mems['values'] as $membershipType) { + $pos = array_search($event->id, $membershipType['relationship_type_id']); + // Api call may have returned false positives but currently the relationship_type_id uses + // nonstandard serialization which makes anything more accurate impossible. + if ($pos !== FALSE) { + unset($membershipType['relationship_type_id'][$pos], $membershipType['relationship_direction'][$pos]); + civicrm_api3('MembershipType', 'create', $membershipType); + } } } - if ($check) { - $cnt = 1; - $message = ts('This membership type cannot be deleted due to following reason(s):'); - if (in_array('Membership', $status)) { - $findMembersURL = CRM_Utils_System::url('civicrm/member/search', 'reset=1'); - $deleteURL = CRM_Utils_System::url('civicrm/contact/search/advanced', 'reset=1'); - $message .= '<br/>' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from <a href=\'%1\'>Find Members</a>. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using <a href="%2">Advanced Search</a> and checking "Search in Trash".', [ - 1 => $findMembersURL, - 2 => $deleteURL, - 3 => $cnt, - ]); - $cnt++; - } + if ($event->action === 'delete' && $event->entity === 'MembershipType') { + // Check dependencies. + $check = FALSE; + $status = []; + $dependency = [ + 'Membership' => 'membership_type_id', + 'MembershipBlock' => 'membership_type_default', + ]; - if (in_array('MembershipBlock', $status)) { - $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'); - $message .= ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', [ - 1 => $deleteURL, - 2 => $cnt, - ]); - throw new CRM_Core_Exception($message); + foreach ($dependency as $name => $field) { + $baoString = 'CRM_Member_BAO_' . $name; + $dao = new $baoString(); + $dao->$field = $event->id; + if ($dao->find(TRUE)) { + $check = TRUE; + $status[] = $name; + } } - } - CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipType', $membershipTypeId); - //delete from membership Type table - $membershipType = new CRM_Member_DAO_MembershipType(); - $membershipType->id = $membershipTypeId; + if ($check) { + $cnt = 1; + $message = ts('This membership type cannot be deleted due to following reason(s):'); + if (in_array('Membership', $status)) { + $findMembersURL = CRM_Utils_System::url('civicrm/member/search', 'reset=1'); + $deleteURL = CRM_Utils_System::url('civicrm/contact/search/advanced', 'reset=1'); + $message .= '<br/>' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from <a href=\'%1\'>Find Members</a>. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using <a href="%2">Advanced Search</a> and checking "Search in Trash".', [ + 1 => $findMembersURL, + 2 => $deleteURL, + 3 => $cnt, + ]); + $cnt++; + } - //fix for membership type delete api - $result = FALSE; - if ($membershipType->find(TRUE)) { - return $membershipType->delete(); + if (in_array('MembershipBlock', $status)) { + $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'); + $message .= ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', [ + 1 => $deleteURL, + 2 => $cnt, + ]); + throw new CRM_Core_Exception($message); + } + } + CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipType', $event->id); } - - return $result; } /** diff --git a/civicrm/CRM/Price/BAO/PriceField.php b/civicrm/CRM/Price/BAO/PriceField.php index 244a32fbe44c17a0017327bf4c8cc87f1526d8e2..bac6d7a1a6e1b04f6c09f4e6bc35abbf6a8ab9f1 100644 --- a/civicrm/CRM/Price/BAO/PriceField.php +++ b/civicrm/CRM/Price/BAO/PriceField.php @@ -274,6 +274,7 @@ class CRM_Price_BAO_PriceField extends CRM_Price_DAO_PriceField { $config = CRM_Core_Config::singleton(); $currencySymbol = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_Currency', $config->defaultCurrency, 'symbol', 'name'); $qf->assign('currencySymbol', $currencySymbol); + $qf->assign('currency', $config->defaultCurrency); // get currency name for price field and option attributes $currencyName = $config->defaultCurrency; diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 40b3e19a77e112b6bd255cacbdb8f392dbe8c87d..987eea19e1d30b59f9d75d02322c756975665711 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -13,6 +13,16 @@ * Class CRM_Report_Form */ class CRM_Report_Form extends CRM_Core_Form { + /** + * Variables smarty expects to have set. + * + * We ensure these are assigned (value = NULL) when Smarty is instantiated in + * order to avoid e-notices / having to use empty or isset in the template layer. + * + * @var string[] + */ + public $expectedSmartyVariables = ['pager', 'skip', 'sections', 'grandStat']; + /** * Deprecated constant, Reports should be updated to use the getRowCount function. */ @@ -605,7 +615,9 @@ class CRM_Report_Form extends CRM_Core_Form { */ public function preProcessCommon() { $this->_force = CRM_Utils_Request::retrieve('force', 'Boolean'); - + // Ensure smarty variables are assigned here since this function is called from + // the report api and the main buildForm is not. + self::$_template->ensureVariablesAreAssigned($this->expectedSmartyVariables); $this->_dashBoardRowCount = CRM_Utils_Request::retrieve('rowCount', 'Integer'); $this->_section = CRM_Utils_Request::retrieve('section', 'Integer'); @@ -2471,14 +2483,14 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND if ($pager) { $this->setPager(); } - + $chartEnabled = !empty($this->_params['charts']) && !empty($rows); + $this->assign('chartEnabled', $chartEnabled); // allow building charts if any - if (!empty($this->_params['charts']) && !empty($rows)) { + if ($chartEnabled) { $this->buildChart($rows); - $this->assign('chartEnabled', TRUE); $this->_chartId = "{$this->_params['charts']}_" . ($this->_id ? $this->_id : substr(get_class($this), 16)) . '_' . - session_id(); + CRM_Core_Config::singleton()->userSystem->getSessionId(); $this->assign('chartId', $this->_chartId); } @@ -2487,6 +2499,12 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND if (!empty($value['no_display'])) { unset($this->_columnHeaders[$key]); } + foreach (['colspan', 'type'] as $expectedKey) { + if (!isset($this->_columnHeaders[$key][$expectedKey])) { + // Ensure it is set to prevent smarty notices. + $this->_columnHeaders[$key][$expectedKey] = FALSE; + } + } } // unset columns not to be displayed. @@ -2494,6 +2512,12 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND foreach ($this->_noDisplay as $noDisplayField) { foreach ($rows as $rowNum => $row) { unset($this->_columnHeaders[$noDisplayField]); + $expectedKeys = ['class']; + foreach ($expectedKeys as $expectedKey) { + if (!array_key_exists($expectedKey, $row)) { + $rows[$rowNum][$expectedKey] = NULL; + } + } } } } @@ -3300,7 +3324,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND * @param array $rows */ public function doTemplateAssignment(&$rows) { - $this->assign_by_ref('columnHeaders', $this->_columnHeaders); + $this->assign('columnHeaders', $this->_columnHeaders); $this->assign_by_ref('rows', $rows); $this->assign('statistics', $this->statistics($rows)); } @@ -3344,12 +3368,14 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $statistics['counts']['rowCount'] = [ 'title' => ts('Row(s) Listed'), 'value' => $count, + 'type' => CRM_Utils_Type::T_INT, ]; if ($this->_rowsFound && ($this->_rowsFound > $count)) { $statistics['counts']['rowsFound'] = [ 'title' => ts('Total Row(s)'), 'value' => $this->_rowsFound, + 'type' => CRM_Utils_Type::T_INT, ]; } } @@ -3378,6 +3404,10 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND 'value' => implode(' & ', $combinations), ]; } + else { + // prevents an e-notice in statistics.tpl. + $statistics['groups'] = []; + } } /** @@ -3485,6 +3515,10 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND } } } + else { + // Prevents an e-notice in statistics.tpl. + $statistics['filters'] = []; + } } } @@ -5029,7 +5063,7 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a public function setEntityRefDefaults(&$field, $table) { $field['attributes'] = $field['attributes'] ? $field['attributes'] : []; $field['attributes'] += [ - 'entity' => CRM_Core_DAO_AllCoreTables::getBriefName(CRM_Core_DAO_AllCoreTables::getClassForTable($table)), + 'entity' => CRM_Core_DAO_AllCoreTables::getEntityNameForTable($table), 'multiple' => TRUE, 'placeholder' => ts('- select -'), ]; diff --git a/civicrm/CRM/Report/Form/Case/Detail.php b/civicrm/CRM/Report/Form/Case/Detail.php index 3cb0fcfbd9767bd08bdb6b5436598a883af8e30b..053e21c540210359a5675da169dc882dfa9fa0c9 100644 --- a/civicrm/CRM/Report/Form/Case/Detail.php +++ b/civicrm/CRM/Report/Form/Case/Detail.php @@ -122,7 +122,7 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form { 'dao' => 'CRM_Case_DAO_Case', 'order_bys' => [ 'case_type_title' => [ - 'title' => 'Case Type', + 'title' => ts('Case Type'), 'name' => 'title', ], ], diff --git a/civicrm/CRM/Report/Form/Contribute/History.php b/civicrm/CRM/Report/Form/Contribute/History.php index 3a85c348b79eca6d28d8e32e60d40ffc0fe3d7b8..ba2dd4212cbb0451f89823656cb6063ba0846d10 100644 --- a/civicrm/CRM/Report/Form/Contribute/History.php +++ b/civicrm/CRM/Report/Form/Contribute/History.php @@ -15,10 +15,6 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { - /** - * Primary Contacts count limitCONSTROW_COUNT_LIMIT = 10; - */ - /** * @var array */ @@ -394,7 +390,7 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { public function where() { $whereClauses = $havingClauses = $relationshipWhere = []; $this->_relationshipWhere = ''; - $this->_statusClause = ''; + $this->_contributionClauses = []; foreach ($this->_columns as $tableName => $table) { if (array_key_exists('filters', $table)) { @@ -429,8 +425,11 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { continue; } - if ($fieldName == 'contribution_status_id') { - $this->_statusClause = " AND " . $clause; + // Make contribution filters work. + // Note total_sum is already accounted for in the main buildRows + // and this_year and other_year skip the loop above. + if ($tableName == 'civicrm_contribution' && $fieldName != 'total_sum') { + $this->_contributionClauses[$fieldName] = $clause; } if (!empty($field['having'])) { @@ -685,9 +684,14 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { return $rows; } + $contributionClauses = ''; + if (!empty($this->_contributionClauses)) { + $contributionClauses = ' AND ' . implode(' AND ', $this->_contributionClauses); + } + $sqlContribution = "{$this->_select} {$this->_from} WHERE {$this->_aliases['civicrm_contact']}.id IN (" . implode(',', $contactIds) . - ") AND {$this->_aliases['civicrm_contribution']}.is_test = 0 AND {$this->_aliases['civicrm_contribution']}.is_template = 0 {$this->_statusClause} {$this->_groupBy} "; + ") AND {$this->_aliases['civicrm_contribution']}.is_test = 0 AND {$this->_aliases['civicrm_contribution']}.is_template = 0 {$contributionClauses} {$this->_groupBy} "; $dao = CRM_Core_DAO::executeQuery($sqlContribution); $contributionSum = 0; @@ -818,13 +822,24 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { } if ($last_primary && ($rowNum == "{$last_primary}_total")) { - $value = CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($value); + // Passing non-numeric is deprecated, but this isn't a perfect fix + // since it will still format things like postal code 90210 as + // "90,210.00", but that predates the deprecation. See dev/core#2819 + if (is_numeric($value)) { + $value = CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($value); + } } + // TODO: It later tries to format this as money which then gives a warning. One option is to instead set something like $row[$key]['classes'] and then use that in the template, but I don't think the stock template supports something like that. $row[$key] = '<strong>' . $value . '</strong>'; } $rows[$rowNum] = $row; } + // The main rows don't have this set so gives a smarty warning. + if (!isset($row['civicrm_relationship_relationship_type_id'])) { + $rows[$rowNum]['civicrm_relationship_relationship_type_id'] = ''; + } + // Convert Display name into link if (!empty($row['civicrm_contact_sort_name']) && !empty($row['civicrm_contact_id']) @@ -839,12 +854,10 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { if (!empty($row['civicrm_financial_trxn_card_type_id'])) { $rows[$rowNum]['civicrm_financial_trxn_card_type_id'] = $this->getLabels($row['civicrm_financial_trxn_card_type_id'], 'CRM_Financial_DAO_FinancialTrxn', 'card_type_id'); - $entryFound = TRUE; } - $entryFound = $this->alterDisplayContactFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound; - $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound; - + $this->alterDisplayContactFields($row, $rows, $rowNum, NULL, NULL); + $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL); } } diff --git a/civicrm/CRM/Report/Form/Contribute/Lybunt.php b/civicrm/CRM/Report/Form/Contribute/Lybunt.php index 97ed34f08d70352e04894023f993e76e2cee0d90..95789c10a9f908611ea2e879204f0f39480eca64 100644 --- a/civicrm/CRM/Report/Form/Contribute/Lybunt.php +++ b/civicrm/CRM/Report/Form/Contribute/Lybunt.php @@ -35,6 +35,7 @@ class CRM_Report_Form_Contribute_Lybunt extends CRM_Report_Form { protected $lifeTime_from = NULL; protected $lifeTime_where = NULL; protected $_customGroupExtends = [ + 'Contribution', 'Contact', 'Individual', 'Household', diff --git a/civicrm/CRM/Report/Form/Contribute/Repeat.php b/civicrm/CRM/Report/Form/Contribute/Repeat.php index 5a028ae438c63bb5d20fa38d4e62c281fa692160..3ec045ca10f6dca6d648c2eb72d8920b8798e8ee 100644 --- a/civicrm/CRM/Report/Form/Contribute/Repeat.php +++ b/civicrm/CRM/Report/Form/Contribute/Repeat.php @@ -882,8 +882,8 @@ GROUP BY currency $from2 = CRM_Utils_Date::customFormat($from2, NULL, array('d')); $to2 = CRM_Utils_Date::customFormat($to2, NULL, array('d')); - $this->_columnHeaders['contribution1_total_amount_sum']['title'] = "$from1 -<br/> $to1"; - $this->_columnHeaders['contribution2_total_amount_sum']['title'] = "$from2 -<br/> $to2"; + $this->_columnHeaders['contribution1_total_amount_sum']['title'] = "$from1 - $to1"; + $this->_columnHeaders['contribution2_total_amount_sum']['title'] = "$from2 - $to2"; unset($this->_columnHeaders['contribution1_total_amount_count'], $this->_columnHeaders['contribution2_total_amount_count'] ); diff --git a/civicrm/CRM/Report/Form/Event/ParticipantListing.php b/civicrm/CRM/Report/Form/Event/ParticipantListing.php index 7bd68693a0dc51de50536ebf0c7bb783bd9c1c2c..c302223728b7e0f1c5e7adc8d2e47b7e110ab528 100644 --- a/civicrm/CRM/Report/Form/Event/ParticipantListing.php +++ b/civicrm/CRM/Report/Form/Event/ParticipantListing.php @@ -183,6 +183,7 @@ class CRM_Report_Form_Event_ParticipantListing extends CRM_Report_Form { 'rid' => array( 'name' => 'role_id', 'title' => ts('Participant Role'), + 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => CRM_Event_PseudoConstant::participantRole(), ), @@ -207,6 +208,11 @@ class CRM_Report_Form_Event_ParticipantListing extends CRM_Report_Form { 'type' => CRM_Utils_Type::T_STRING, 'operator' => 'like', ), + 'is_test' => [ + 'title' => ts('Is Test'), + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'default' => 0, + ], ), 'order_bys' => array( 'participant_register_date' => array( @@ -529,67 +535,6 @@ ORDER BY cv.label } } - public function where() { - $clauses = []; - foreach ($this->_columns as $tableName => $table) { - if (array_key_exists('filters', $table)) { - foreach ($table['filters'] as $fieldName => $field) { - $clause = NULL; - - if (CRM_Utils_Array::value('type', $field) & CRM_Utils_Type::T_DATE) { - $relative = $this->_params["{$fieldName}_relative"] ?? NULL; - $from = $this->_params["{$fieldName}_from"] ?? NULL; - $to = $this->_params["{$fieldName}_to"] ?? NULL; - - if ($relative || $from || $to) { - $clause = $this->dateClause($field['name'], $relative, $from, $to, $field['type']); - } - } - else { - $op = $this->_params["{$fieldName}_op"] ?? NULL; - - if ($fieldName == 'rid') { - $value = $this->_params["{$fieldName}_value"] ?? NULL; - if (!empty($value)) { - $operator = ''; - if ($op == 'notin') { - $operator = 'NOT'; - } - - $regexp = "[[:cntrl:]]*" . implode('[[:>:]]*|[[:<:]]*', $value) . "[[:cntrl:]]*"; - $clause = "{$field['dbAlias']} {$operator} REGEXP '{$regexp}'"; - } - $op = NULL; - } - - if ($op) { - $clause = $this->whereClause($field, - $op, - CRM_Utils_Array::value("{$fieldName}_value", $this->_params), - CRM_Utils_Array::value("{$fieldName}_min", $this->_params), - CRM_Utils_Array::value("{$fieldName}_max", $this->_params) - ); - } - } - - if (!empty($clause)) { - $clauses[] = $clause; - } - } - } - } - if (empty($clauses)) { - $this->_where = "WHERE {$this->_aliases['civicrm_participant']}.is_test = 0 "; - } - else { - $this->_where = "WHERE {$this->_aliases['civicrm_participant']}.is_test = 0 AND " . - implode(' AND ', $clauses); - } - if ($this->_aclWhere) { - $this->_where .= " AND {$this->_aclWhere} "; - } - } - public function groupBy() { $this->_groupBy = CRM_Contact_BAO_Query::getGroupByFromSelectColumns($this->_selectClauses, "{$this->_aliases['civicrm_participant']}.id"); } diff --git a/civicrm/CRM/Report/Page/InstanceList.php b/civicrm/CRM/Report/Page/InstanceList.php index 97657f082974c5af6605929c3402005a0dce0126..96c31a479987b0c27e7ca928247e63ef32615f2e 100644 --- a/civicrm/CRM/Report/Page/InstanceList.php +++ b/civicrm/CRM/Report/Page/InstanceList.php @@ -45,6 +45,15 @@ class CRM_Report_Page_InstanceList extends CRM_Core_Page { */ protected $_grouping = NULL; + /** + * Possibly always null.... maybe $_title is used... + * + * The relationship between this & $_title is ambigous & seemingly not worked through. + * + * @var string + */ + protected $title; + /** * ID of parent report template if list is filtered by template. * @@ -190,19 +199,16 @@ class CRM_Report_Page_InstanceList extends CRM_Core_Page { $this->grouping = CRM_Utils_Request::retrieve('grp', 'String', $this); $rows = $this->info(); - + $this->assign('title', $this->title); $this->assign('list', $rows); if ($this->ovID or $this->compID) { // link to view all reports $reportUrl = CRM_Utils_System::url('civicrm/report/list', "reset=1"); - $this->assign('reportUrl', $reportUrl); - if ($this->ovID) { - $this->assign('title', $this->title); - } - else { + if (!$this->ovID) { CRM_Utils_System::setTitle(ts('%1 Reports', [1 => $this->_compName])); } } + $this->assign('reportUrl', $reportUrl ?? FALSE); // assign link to template list for users with appropriate permissions if (CRM_Core_Permission::check('administer Reports')) { if ($this->compID) { @@ -214,10 +220,10 @@ class CRM_Report_Page_InstanceList extends CRM_Core_Page { $templateUrl = CRM_Utils_System::url('civicrm/report/template/list', "reset=1"); } $this->assign('newButton', $newButton); - $this->assign('templateUrl', $templateUrl); $this->assign('compName', $this->_compName); - $this->assign('myReports', $this->myReports); } + $this->assign('myReports', $this->myReports); + $this->assign('templateUrl', $templateUrl ?? NULL); return parent::run(); } @@ -235,14 +241,17 @@ class CRM_Report_Page_InstanceList extends CRM_Core_Page { 'copy' => [ 'url' => CRM_Utils_System::url($urlCommon, 'reset=1&output=copy'), 'label' => ts('Save a Copy'), + 'confirm_message' => NULL, ], 'pdf' => [ 'url' => CRM_Utils_System::url($urlCommon, 'reset=1&force=1&output=pdf'), 'label' => ts('View as pdf'), + 'confirm_message' => NULL, ], 'print' => [ 'url' => CRM_Utils_System::url($urlCommon, 'reset=1&force=1&output=print'), 'label' => ts('Print report'), + 'confirm_message' => NULL, ], ]; // Hackery, Hackera, Hacker ahahahahahaha a super nasty hack. @@ -257,6 +266,7 @@ class CRM_Report_Page_InstanceList extends CRM_Core_Page { $actions['csv'] = [ 'url' => CRM_Utils_System::url($urlCommon, 'reset=1&force=1&output=csv'), 'label' => ts('Export to csv'), + 'confirm_message' => NULL, ]; } if (CRM_Core_Permission::check('administer Reports')) { diff --git a/civicrm/CRM/Report/Utils/Report.php b/civicrm/CRM/Report/Utils/Report.php index b3fd9556fa74b4c2e18444ff6ed1523f95775f21..7e05025016f94675df46ea36ec42c67fd7f3b2bc 100644 --- a/civicrm/CRM/Report/Utils/Report.php +++ b/civicrm/CRM/Report/Utils/Report.php @@ -394,7 +394,7 @@ WHERE inst.report_id = %1"; $_REQUEST['reset'] = CRM_Utils_Array::value('reset', $params, 1); $optionVal = self::getValueFromUrl($instanceId); - $messages = ["Report Mail Triggered..."]; + $messages = ['Report Mail Triggered...']; $templateInfo = CRM_Core_OptionGroup::getRowValues('report_template', $optionVal, 'value'); $obj = new CRM_Report_Page_Instance(); diff --git a/civicrm/CRM/SMS/Form/Group.php b/civicrm/CRM/SMS/Form/Group.php index 5dad9206a10edee7733683730140304603cc3a2f..b79064ee96983e2e06a5cddf053bd9257a23eada 100644 --- a/civicrm/CRM/SMS/Form/Group.php +++ b/civicrm/CRM/SMS/Form/Group.php @@ -30,10 +30,7 @@ class CRM_SMS_Form_Group extends CRM_Contact_Form_Task { $session = CRM_Core_Session::singleton(); $session->replaceUserContext(CRM_Utils_System::url('civicrm/mailing/browse', 'reset=1&sms=1')); - - if (CRM_Core_Permission::check('administer CiviCRM')) { - $this->assign('isAdmin', 1); - } + $this->assign('isAdmin', CRM_Core_Permission::check('administer CiviCRM')); } /** diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 883dc50e165eeb1044b21dab3ce030d44f4bfefc..b3884010e30511f91f9a5bb4744f3209a71ad363 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -321,6 +321,61 @@ class CRM_Upgrade_Incremental_Base { return TRUE; } + /** + * Updated a currency in civicrm_currency and related configurations + * + * @param CRM_Queue_TaskContext $ctx + * @param string $old_name + * @param string $new_name + * + * @return bool + */ + public static function updateCurrencyName($ctx, string $old_name, string $new_name): bool { + CRM_Core_DAO::executeQuery('UPDATE civicrm_currency SET name = %1 WHERE name = %2', [ + 1 => [$new_name, 'String'], + 2 => [$old_name, 'String'], + ]); + + $oid = CRM_Core_DAO::singleValueQuery("SELECT id FROM civicrm_option_group WHERE name = 'currencies_enabled'"); + if ($oid) { + CRM_Core_DAO::executeQuery('UPDATE civicrm_option_value SET value = %1 WHERE value = %2 AND option_group_id = %3', [ + 1 => [$new_name, 'String'], + 2 => [$old_name, 'String'], + 3 => [$oid, 'String'], + ]); + } + + CRM_Core_DAO::executeQuery('UPDATE civicrm_participant SET fee_currency = %1 WHERE fee_currency = %2', [ + 1 => [$new_name, 'String'], + 2 => [$old_name, 'String'], + ]); + + $tables = [ + 'civicrm_contribution', + 'civicrm_contribution_page', + 'civicrm_contribution_recur', + 'civicrm_contribution_soft', + 'civicrm_event', + 'civicrm_financial_item', + 'civicrm_financial_trxn', + 'civicrm_grant', + 'civicrm_pcp', + 'civicrm_pledge_payment', + 'civicrm_pledge', + 'civicrm_product', + ]; + + foreach ($tables as $table) { + CRM_Core_DAO::executeQuery('UPDATE %3 SET currency = %1 WHERE currency = %2', [ + 1 => [$new_name, 'String'], + 2 => [$old_name, 'String'], + 3 => [$table, 'MysqlColumnNameOrAlias'], + ]); + } + + return TRUE; + } + /** * Re-save any valid values from contribute settings into the normal setting * format. diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveFortyFive.php b/civicrm/CRM/Upgrade/Incremental/php/FiveFortyFive.php new file mode 100644 index 0000000000000000000000000000000000000000..cb783ee669463842d935874baa522cb7da834362 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveFortyFive.php @@ -0,0 +1,66 @@ +<?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 FiveFortyFive */ +class CRM_Upgrade_Incremental_php_FiveFortyFive extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL): void { + // Example: Generate a pre-upgrade message. + // if ($rev == '5.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>'; + // } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev): void { + // Example: Generate a post-upgrade message. + // if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + // } + } + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_45_alpha1($rev): void { + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('Add entity_modified_date column to civicrm_managed', 'addColumn', + 'civicrm_managed', 'entity_modified_date', "timestamp NULL DEFAULT NULL COMMENT 'When the managed entity was changed from its original settings.'" + ); + $this->addTask('Update currency symbols for Ghana', 'updateCurrencyName', 'GHC', 'GHS'); + $this->addTask('Update currency symbols for Belarus', 'updateCurrencyName', 'BYR', 'BYN'); + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.45.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.45.alpha1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e8690aeb440674ef5083ce2bfb742e4ec4d742ce --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.45.alpha1.mysql.tpl @@ -0,0 +1,13 @@ +{* file to handle db changes in 5.45.alpha1 during upgrade *} +-- Add in missing province for Philippines and update names as per ISO. +SELECT @PHILIPPINESID := id FROM civicrm_country WHERE name = 'Philippines' AND iso_code='PH'; +INSERT IGNORE INTO civicrm_state_province (country_id, abbreviation, is_active, name) VALUES (@PHILIPPINESID, "DIN", 1, 'Dinagat Islands'); +UPDATE civicrm_state_province SET name = 'Davao del Norte' WHERE country_id = @PHILIPPINESID AND abbreviation = "DAV" AND name = "Davao"; +UPDATE civicrm_state_province SET name = 'Davao de Oro' WHERE country_id = @PHILIPPINESID AND abbreviation = "COM" AND name = "Compostela Valley"; +UPDATE civicrm_state_province SET name = 'Kalinga' WHERE country_id = @PHILIPPINESID AND abbreviation = "KAL" AND name = "Kalinga-Apayso"; +UPDATE civicrm_state_province SET name = 'Cotabato' WHERE country_id = @PHILIPPINESID AND abbreviation = "NCO" AND name = "North Cotabato"; + +-- Add missing state for Colombia +SELECT @country_id := id from civicrm_country where name = 'Colombia' AND iso_code = 'CO'; +INSERT IGNORE INTO `civicrm_state_province` (`id`, `country_id`, `abbreviation`, `name`) VALUES +(NULL, @country_id, 'HUI', 'Huila'); diff --git a/civicrm/CRM/Utils/Check/Component/Env.php b/civicrm/CRM/Utils/Check/Component/Env.php index c1d7b767944fce7ba66751003746ca36b81421bb..96b8be565ce8f30c94ae6306971b51cc89eedb6f 100644 --- a/civicrm/CRM/Utils/Check/Component/Env.php +++ b/civicrm/CRM/Utils/Check/Component/Env.php @@ -676,6 +676,7 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { else { $message = ts('All extensions are up-to-date:'); } + natcasesort($okextensions); $messages[] = new CRM_Utils_Check_Message( __FUNCTION__ . 'Ok', $message . '<ul><li>' . implode('</li><li>', $okextensions) . '</li></ul>', diff --git a/civicrm/CRM/Utils/File.php b/civicrm/CRM/Utils/File.php index 4fd3706bfa08e05e91b69546d0517a5db62aa13c..e4df98f11faeaa8365fc070a92b3903b25d89bc3 100644 --- a/civicrm/CRM/Utils/File.php +++ b/civicrm/CRM/Utils/File.php @@ -802,6 +802,9 @@ HTACCESS; if ($checkRealPath) { $parent = realpath($parent); $child = realpath($child); + if ($parent === FALSE || $child === FALSE) { + return FALSE; + } } $parentParts = explode('/', rtrim($parent, '/')); $childParts = explode('/', rtrim($child, '/')); diff --git a/civicrm/CRM/Utils/Mail/Incoming.php b/civicrm/CRM/Utils/Mail/Incoming.php index 1b5b71f1bf3f3cd407132227d72a8e1d248e7bc6..cf2f7978b1291fc8821d0548851df983a40a4827 100644 --- a/civicrm/CRM/Utils/Mail/Incoming.php +++ b/civicrm/CRM/Utils/Mail/Incoming.php @@ -452,6 +452,12 @@ class CRM_Utils_Mail_Incoming { $contactID = NULL; if ($dao) { $contactID = $dao->contact_id; + } else { + $dao = CRM_Contact_BAO_Contact::matchContactOnEmail($email, 'Organization'); + + if ($dao) { + $contactID = $dao->contact_id; + } } $result = NULL; diff --git a/civicrm/CRM/Utils/String.php b/civicrm/CRM/Utils/String.php index f98d4ec6d5c7ca00a3802ec8808e115b699c9b70..3400263aa06bd4afa9cdc3b3489befe5df813fea 100644 --- a/civicrm/CRM/Utils/String.php +++ b/civicrm/CRM/Utils/String.php @@ -99,6 +99,16 @@ class CRM_Utils_String { return $ucFirst ? $camel : lcfirst($camel); } + /** + * Inverse of above function, converts camelCase to snake_case + * + * @param string $str + * @return string + */ + public static function convertStringToSnakeCase(string $str): string { + return strtolower(ltrim(preg_replace('/(?=[A-Z])/', '_$0', $str), '_')); + } + /** * Takes a variable name and munges it randomly into another variable name. * diff --git a/civicrm/CRM/Utils/Token.php b/civicrm/CRM/Utils/Token.php index 1ab9cc2dbf0a21dbb3c8447171ade5b2286174e3..dea929d99ae7bcfeea41fc3e7c7815645026ef6b 100644 --- a/civicrm/CRM/Utils/Token.php +++ b/civicrm/CRM/Utils/Token.php @@ -213,6 +213,8 @@ class CRM_Utils_Token { /** * Replace all the domain-level tokens in $str * + * @deprecated + * * @param string $str * The string with tokens to be replaced. * @param object $domain @@ -251,6 +253,10 @@ class CRM_Utils_Token { } /** + * Do not use. + * + * @deprecated + * * @param string $token * @param CRM_Core_BAO_Domain $domain * @param bool $html @@ -367,6 +373,8 @@ class CRM_Utils_Token { * * @return string * The processed string + * + * @deprecated */ public static function &replaceMailingTokens( $str, @@ -534,6 +542,8 @@ class CRM_Utils_Token { } /** + * @deprecated + * * @param $token * @param $addresses * @param $urls @@ -1281,6 +1291,8 @@ class CRM_Utils_Token { * @param string $jobID * @return array * contactDetails with hooks swapped out + * + * @deprecated */ public static function getAnonymousTokenDetails($contactIDs = [0], $returnProperties = NULL, diff --git a/civicrm/CRM/Utils/Weight.php b/civicrm/CRM/Utils/Weight.php index 345d6b1a80d724fcb7f0db6948efb69d867c2d60..ec0176c614638e9aebc62023467e0f092e3b25d7 100644 --- a/civicrm/CRM/Utils/Weight.php +++ b/civicrm/CRM/Utils/Weight.php @@ -122,14 +122,11 @@ class CRM_Utils_Weight { * @return int */ public static function updateOtherWeights($daoName, $oldWeight, $newWeight, $fieldValues = NULL, $weightField = 'weight') { - $oldWeight = (int ) $oldWeight; - $newWeight = (int ) $newWeight; + $oldWeight = (int) $oldWeight; + $newWeight = (int) $newWeight; // max weight is the highest current weight - $maxWeight = CRM_Utils_Weight::getMax($daoName, $fieldValues, $weightField); - if (!$maxWeight) { - $maxWeight = 1; - } + $maxWeight = self::getMax($daoName, $fieldValues, $weightField) ?: 1; if ($newWeight > $maxWeight) { // calculate new weight, CRM-4133 @@ -154,12 +151,18 @@ class CRM_Utils_Weight { return $newWeight; } + // Check for an existing record with this weight + $existing = self::query('SELECT', $daoName, $fieldValues, "id", "$weightField = $newWeight"); + // Nothing to do if no existing record has this weight + if (empty($existing->N)) { + return $newWeight; + } + // if oldWeight not present, indicates new weight is to be added. So create a gap for a new row to be inserted. if (!$oldWeight) { $additionalWhere = "$weightField >= $newWeight"; $update = "$weightField = ($weightField + 1)"; CRM_Utils_Weight::query('UPDATE', $daoName, $fieldValues, $update, $additionalWhere); - return $newWeight; } else { if ($newWeight > $oldWeight) { @@ -171,8 +174,8 @@ class CRM_Utils_Weight { $update = "$weightField = ($weightField + 1)"; } CRM_Utils_Weight::query('UPDATE', $daoName, $fieldValues, $update, $additionalWhere); - return $newWeight; } + return $newWeight; } /** @@ -262,7 +265,7 @@ class CRM_Utils_Weight { * * @param string $queryType * SELECT, UPDATE, DELETE. - * @param string $daoName + * @param CRM_Core_DAO|string $daoName * Full name of the DAO. * @param array $fieldValues * Field => value to be used in the WHERE. @@ -286,12 +289,8 @@ class CRM_Utils_Weight { $orderBy = NULL, $groupBy = NULL ) { - - require_once str_replace('_', DIRECTORY_SEPARATOR, $daoName) . ".php"; - - $dao = new $daoName(); - $table = $dao->getTablename(); - $fields = &$dao->fields(); + $table = $daoName::getTablename(); + $fields = $daoName::getSupportedFields(); $fieldlist = array_keys($fields); $whereConditions = []; @@ -304,12 +303,17 @@ class CRM_Utils_Weight { foreach ($fieldValues as $fieldName => $value) { if (!in_array($fieldName, $fieldlist)) { // invalid field specified. abort. - return FALSE; + throw new CRM_Core_Exception("Invalid field '$fieldName' for $daoName"); + } + if (CRM_Utils_System::isNull($value)) { + $whereConditions[] = "$fieldName IS NULL"; + } + else { + $fieldNum++; + $whereConditions[] = "$fieldName = %$fieldNum"; + $fieldType = $fields[$fieldName]['type']; + $params[$fieldNum] = [$value, CRM_Utils_Type::typeToString($fieldType)]; } - $fieldNum++; - $whereConditions[] = "$fieldName = %$fieldNum"; - $fieldType = $fields[$fieldName]['type']; - $params[$fieldNum] = [$value, CRM_Utils_Type::typeToString($fieldType)]; } } $where = implode(' AND ', $whereConditions); @@ -340,7 +344,7 @@ class CRM_Utils_Weight { break; default: - return FALSE; + throw new CRM_Core_Exception("Invalid query operation for $daoName"); } $resultDAO = CRM_Core_DAO::executeQuery($query, $params); diff --git a/civicrm/Civi/API/Subscriber/DebugSubscriber.php b/civicrm/Civi/API/Subscriber/DebugSubscriber.php index ac1abad89494c6daaf929c36db7a7cc8446f841b..0e6be75478e74dd606e2923cd00bf66955aee798 100644 --- a/civicrm/Civi/API/Subscriber/DebugSubscriber.php +++ b/civicrm/Civi/API/Subscriber/DebugSubscriber.php @@ -24,6 +24,29 @@ class DebugSubscriber implements EventSubscriberInterface { */ private $debugLog; + /** + * @var bool + */ + private $enableStats; + + public function __construct() { + $version = phpversion('xdebug'); + switch ($version ? substr($version, 0, 2) : NULL) { + case '2.': + $this->enableStats = function_exists('xdebug_time_index'); + break; + + case '3.': + $xdebugMode = explode(',', ini_get('xdebug.mode')); + $this->enableStats = in_array('develop', $xdebugMode); + break; + + default: + $this->enableStats = FALSE; + break; + } + } + /** * @return array */ @@ -70,7 +93,7 @@ class DebugSubscriber implements EventSubscriberInterface { if (isset($this->debugLog) && $this->debugLog->getMessages()) { $debug['log'] = $this->debugLog->getMessages(); } - if (function_exists('xdebug_time_index')) { + if ($this->enableStats) { $debug['peakMemory'] = xdebug_peak_memory_usage(); $debug['memory'] = xdebug_memory_usage(); $debug['timeIndex'] = xdebug_time_index(); diff --git a/civicrm/Civi/Api4/Action/Contact/Delete.php b/civicrm/Civi/Api4/Action/Contact/Delete.php new file mode 100644 index 0000000000000000000000000000000000000000..5d2267441ac8d23bd68c563748e49879cfdda2e9 --- /dev/null +++ b/civicrm/Civi/Api4/Action/Contact/Delete.php @@ -0,0 +1,37 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Action\Contact; + +/** + * Deletes a contact, by default moving to trash. Set `useTrash = FALSE` for permanent deletion. + * @inheritDoc + */ +class Delete extends \Civi\Api4\Generic\DAODeleteAction { + use \Civi\Api4\Generic\Traits\SoftDelete; + + /** + * @param $items + * @return array + * @throws \API_Exception + */ + protected function deleteObjects($items) { + foreach ($items as $item) { + if (!\CRM_Contact_BAO_Contact::deleteContact($item['id'], FALSE, !$this->useTrash, $this->checkPermissions)) { + throw new \API_Exception("Could not delete {$this->getEntityName()} id {$item['id']}"); + } + $ids[] = ['id' => $item['id']]; + } + return $ids; + } + +} diff --git a/civicrm/Civi/Api4/CaseContact.php b/civicrm/Civi/Api4/CaseContact.php index b3e3405183778746b9ddfd3b7b754f8506d4ef2f..da651d499fd29dab5b3eb0e0de516e19cec60817 100644 --- a/civicrm/Civi/Api4/CaseContact.php +++ b/civicrm/Civi/Api4/CaseContact.php @@ -27,4 +27,24 @@ class CaseContact extends Generic\DAOEntity { return $plural ? ts('Case Clients') : ts('Case Client'); } + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['bridge_title'] = ts('Clients'); + $info['bridge'] = [ + 'case_id' => [ + 'to' => 'contact_id', + 'description' => ts('Cases with this contact as a client'), + ], + 'contact_id' => [ + 'label' => ts('Clients'), + 'to' => 'case_id', + 'description' => ts('Clients for this case'), + ], + ]; + return $info; + } + } diff --git a/civicrm/Civi/Api4/CaseType.php b/civicrm/Civi/Api4/CaseType.php index a8ae7273e4f9ac1eda389b170d223c3793602437..3de80b7965178b699fa2ca5e34a70b22e5a5bc69 100644 --- a/civicrm/Civi/Api4/CaseType.php +++ b/civicrm/Civi/Api4/CaseType.php @@ -21,6 +21,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class CaseType extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/Contact.php b/civicrm/Civi/Api4/Contact.php index 9ec5679d9555a3bd409d980fa969f3f1ef3bdcd9..34f6463f5530f8c5f28962f67c3330352255d88f 100644 --- a/civicrm/Civi/Api4/Contact.php +++ b/civicrm/Civi/Api4/Contact.php @@ -20,11 +20,21 @@ namespace Civi\Api4; * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ * @searchable primary + * @orderBy sort_name * @since 5.19 * @package Civi\Api4 */ class Contact extends Generic\DAOEntity { + /** + * @param bool $checkPermissions + * @return Action\Contact\Delete + */ + public static function delete($checkPermissions = TRUE) { + return (new Action\Contact\Delete(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + /** * @param bool $checkPermissions * @return Action\Contact\GetChecksum diff --git a/civicrm/Civi/Api4/ContactType.php b/civicrm/Civi/Api4/ContactType.php index e78beb2cc169c0e0997302d37b5a673d02763137..e949845613a168a4e8f6decb856397471e899e6b 100644 --- a/civicrm/Civi/Api4/ContactType.php +++ b/civicrm/Civi/Api4/ContactType.php @@ -26,6 +26,6 @@ namespace Civi\Api4; * @package Civi\Api4 */ class ContactType extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/Country.php b/civicrm/Civi/Api4/Country.php index 63093db8e845538349efa4ee98e894767b8b19a1..47fb952f530059f5b5eed3a42428c89a087d340b 100644 --- a/civicrm/Civi/Api4/Country.php +++ b/civicrm/Civi/Api4/Country.php @@ -18,6 +18,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class Country extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/CustomField.php b/civicrm/Civi/Api4/CustomField.php index c308738a962e909f5df5a2f717294150e49757a4..37be6eb2b45f37b12722bbdac56a6e18ad4d57b8 100644 --- a/civicrm/Civi/Api4/CustomField.php +++ b/civicrm/Civi/Api4/CustomField.php @@ -14,10 +14,13 @@ namespace Civi\Api4; * CustomField entity. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ - * @searchable none + * @searchable secondary + * @orderBy weight * @since 5.19 * @package Civi\Api4 */ class CustomField extends Generic\DAOEntity { + use Generic\Traits\ManagedEntity; + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/CustomGroup.php b/civicrm/Civi/Api4/CustomGroup.php index 26125a102dc070161921ccb7b7b4d5b89ee12ad5..1aed113a4860aceb34c930361fe354c214d26ede 100644 --- a/civicrm/Civi/Api4/CustomGroup.php +++ b/civicrm/Civi/Api4/CustomGroup.php @@ -14,10 +14,13 @@ namespace Civi\Api4; * CustomGroup entity. * * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ - * @searchable none + * @searchable secondary + * @orderBy weight * @since 5.19 * @package Civi\Api4 */ class CustomGroup extends Generic\DAOEntity { + use Generic\Traits\ManagedEntity; + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/Dashboard.php b/civicrm/Civi/Api4/Dashboard.php index de640785254dc7645ac92a8dd39ad1e15fdabe51..882b9a3a75e638b33f0964c3d1fd1f602721a8c4 100644 --- a/civicrm/Civi/Api4/Dashboard.php +++ b/civicrm/Civi/Api4/Dashboard.php @@ -25,5 +25,6 @@ namespace Civi\Api4; * @package Civi\Api4 */ class Dashboard extends Generic\DAOEntity { + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/Entity.php b/civicrm/Civi/Api4/Entity.php index d6b0dfcc3c064b667bc252f9fd297d41a30a226b..69f5363b455866d16ee717f24b9f5929ae087313 100644 --- a/civicrm/Civi/Api4/Entity.php +++ b/civicrm/Civi/Api4/Entity.php @@ -58,9 +58,9 @@ class Entity extends Generic\AbstractEntity { 'DAOEntity' => 'DAOEntity', 'CustomValue' => 'CustomValue', 'BasicEntity' => 'BasicEntity', + 'SortableEntity' => 'SortableEntity', 'ManagedEntity' => 'ManagedEntity', 'EntityBridge' => 'EntityBridge', - 'OptionList' => 'OptionList', ], ], [ @@ -88,6 +88,10 @@ class Entity extends Generic\AbstractEntity { 'name' => 'label_field', 'description' => 'Field to show when displaying a record', ], + [ + 'name' => 'order_by', + 'description' => 'Default column to sort results', + ], [ 'name' => 'searchable', 'description' => 'How should this entity be presented in search UIs', diff --git a/civicrm/Civi/Api4/EntityFinancialAccount.php b/civicrm/Civi/Api4/EntityFinancialAccount.php index b5495e3d6e69c1520e32d24303b50f3ec1d6957b..4be18592aa79d8108ff5af35e1d634841048b43b 100644 --- a/civicrm/Civi/Api4/EntityFinancialAccount.php +++ b/civicrm/Civi/Api4/EntityFinancialAccount.php @@ -30,8 +30,8 @@ class EntityFinancialAccount extends Generic\DAOEntity { public static function getInfo() { $info = parent::getInfo(); $info['bridge'] = [ - 'entity_id' => [], - 'financial_account_id' => [], + 'entity_id' => ['to' => 'financial_account_id'], + 'financial_account_id' => ['to' => 'entity_id'], ]; return $info; } diff --git a/civicrm/Civi/Api4/EntityFinancialTrxn.php b/civicrm/Civi/Api4/EntityFinancialTrxn.php index 0c7172d35e61252708aff9f4f1f61d359db7df98..091c858c33ebb087c05b46fbe4794c30c13bb184 100644 --- a/civicrm/Civi/Api4/EntityFinancialTrxn.php +++ b/civicrm/Civi/Api4/EntityFinancialTrxn.php @@ -30,8 +30,8 @@ class EntityFinancialTrxn extends Generic\DAOEntity { public static function getInfo() { $info = parent::getInfo(); $info['bridge'] = [ - 'entity_id' => [], - 'financial_trxn_id' => [], + 'entity_id' => ['to' => 'financial_trxn_id'], + 'financial_trxn_id' => ['to' => 'entity_id'], ]; return $info; } diff --git a/civicrm/Civi/Api4/FinancialType.php b/civicrm/Civi/Api4/FinancialType.php index 14db20d00a55b950c7d23f8223230dc15f9e61c1..ea85931db80d68ad1d1e57aedcda088d4930178c 100644 --- a/civicrm/Civi/Api4/FinancialType.php +++ b/civicrm/Civi/Api4/FinancialType.php @@ -22,6 +22,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class FinancialType extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index 735327f88fb977de795f811f03020d8407ecdef0..72116630249bc4b550272e8106fc9c3e9c19f237 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -52,7 +52,7 @@ abstract class AbstractEntity { * @return \Civi\Api4\Generic\CheckAccessAction */ public static function checkAccess() { - return new CheckAccessAction(self::getEntityName(), __FUNCTION__); + return new CheckAccessAction(static::getEntityName(), __FUNCTION__); } /** @@ -64,7 +64,7 @@ abstract class AbstractEntity { $permissions = \CRM_Core_Permission::getEntityActionPermissions(); // For legacy reasons the permissions are keyed by lowercase entity name - $lcentity = \CRM_Core_DAO_AllCoreTables::convertEntityNameToLower(self::getEntityName()); + $lcentity = \CRM_Core_DAO_AllCoreTables::convertEntityNameToLower(static::getEntityName()); // Merge permissions for this entity with the defaults return ($permissions[$lcentity] ?? []) + $permissions['default']; } @@ -163,7 +163,13 @@ abstract class AbstractEntity { $info['description'] = $dao::getEntityDescription() ?? $info['description'] ?? NULL; } unset($info['package'], $info['method']); - return $info; + + // Ensure all keys are snake_case + $keys = array_keys($info); + foreach ($keys as &$key) { + $key = \CRM_Utils_String::convertStringToSnakeCase($key); + } + return array_combine($keys, array_values($info)); } /** diff --git a/civicrm/Civi/Api4/Generic/BasicGetAction.php b/civicrm/Civi/Api4/Generic/BasicGetAction.php index cdf071b620601aefa09cf06ac1efe43bf23a9bfc..8f5ffdc1d7fe46067108677c58af29008fd077c4 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetAction.php @@ -107,6 +107,7 @@ class BasicGetAction extends AbstractGetAction { $fields = $this->entityFields(); foreach ($records as &$values) { foreach ($this->entityFields() as $field) { + $values += [$field['name'] => NULL]; if (!empty($field['options'])) { foreach (FormattingUtil::$pseudoConstantSuffixes as $suffix) { $pseudofield = $field['name'] . ':' . $suffix; diff --git a/civicrm/Civi/Api4/Generic/DAODeleteAction.php b/civicrm/Civi/Api4/Generic/DAODeleteAction.php index b2b9584e921db92494b24ae08eba4e2340de2c38..84d818de9b1c51d34b46a547a2eb583a9e5aa0c5 100644 --- a/civicrm/Civi/Api4/Generic/DAODeleteAction.php +++ b/civicrm/Civi/Api4/Generic/DAODeleteAction.php @@ -14,6 +14,7 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\UnauthorizedException; use Civi\Api4\Utils\CoreUtil; +use Civi\Api4\Utils\ReflectionUtils; /** * Delete one or more $ENTITIES. @@ -56,7 +57,8 @@ class DAODeleteAction extends AbstractBatchAction { $ids = []; $baoName = $this->getBaoName(); - if ($this->getEntityName() !== 'EntityTag' && method_exists($baoName, 'del')) { + // Use BAO::del() method if it is not deprecated + if (method_exists($baoName, 'del') && !ReflectionUtils::isMethodDeprecated($baoName, 'del')) { foreach ($items as $item) { $args = [$item['id']]; $bao = call_user_func_array([$baoName, 'del'], $args); diff --git a/civicrm/Civi/Api4/Generic/ExportAction.php b/civicrm/Civi/Api4/Generic/ExportAction.php new file mode 100644 index 0000000000000000000000000000000000000000..bb7e14a0c74394e58a28a56cb6279e625aeefc8d --- /dev/null +++ b/civicrm/Civi/Api4/Generic/ExportAction.php @@ -0,0 +1,241 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Generic; + +use Civi\API\Exception\NotImplementedException; +use Civi\Api4\Utils\CoreUtil; + +/** + * Export $ENTITY to civicrm_managed format. + * + * This action generates an exportable array suitable for use in a .mgd.php file. + * The array will include any other entities that reference the $ENTITY. + * + * @method $this setId(int $id) + * @method int getId() + * @method $this setCleanup(string $cleanup) + * @method string getCleanup() + * @method $this setUpdate(string $update) + * @method string getUpdate() + */ +class ExportAction extends AbstractAction { + + /** + * Id of $ENTITY to export + * @var int + * @required + */ + protected $id; + + /** + * Specify rule for auto-updating managed entity + * @var string + * @options never,always,unmodified + */ + protected $update = 'unmodified'; + + /** + * Specify rule for auto-deleting managed entity + * @var string + * @options never,always,unused + */ + protected $cleanup = 'unused'; + + /** + * Used to prevent circular references + * @var array + */ + private $exportedEntities = []; + + /** + * @param \Civi\Api4\Generic\Result $result + */ + public function _run(Result $result) { + $this->exportRecord($this->getEntityName(), $this->id, $result); + } + + /** + * @param string $entityType + * @param int $entityId + * @param \Civi\Api4\Generic\Result $result + * @param string $parentName + * @param array $excludeFields + */ + private function exportRecord(string $entityType, int $entityId, Result $result, $parentName = NULL, $excludeFields = []) { + if (isset($this->exportedEntities[$entityType][$entityId])) { + throw new \API_Exception("Circular reference detected: attempted to export $entityType id $entityId multiple times."); + } + $this->exportedEntities[$entityType][$entityId] = TRUE; + $select = $pseudofields = []; + $allFields = $this->getFieldsForExport($entityType, TRUE, $excludeFields); + foreach ($allFields as $field) { + // Use implicit join syntax but only if the fk entity has a `name` field + if (!empty($field['fk_entity']) && array_key_exists('name', $this->getFieldsForExport($field['fk_entity']))) { + $select[] = $field['name'] . '.name'; + $pseudofields[$field['name'] . '.name'] = $field['name']; + } + // Use pseudoconstant syntax if appropriate + elseif ($this->shouldUsePseudoconstant($entityType, $field)) { + $select[] = $field['name'] . ':name'; + $pseudofields[$field['name'] . ':name'] = $field['name']; + } + elseif (empty($field['fk_entity'])) { + $select[] = $field['name']; + } + } + $record = civicrm_api4($entityType, 'get', [ + 'checkPermissions' => $this->checkPermissions, + 'select' => $select, + 'where' => [['id', '=', $entityId]], + ])->first(); + if (!$record) { + return; + } + // The get api always returns ID, but it should not be included in an export + unset($record['id']); + // Null fields should not use joins/pseudoconstants + foreach ($pseudofields as $alias => $fieldName) { + if (is_null($record[$alias])) { + unset($record[$alias]); + $record[$fieldName] = NULL; + } + } + // Should references be limited to the current domain? + $limitRefsByDomain = $entityType === 'OptionGroup' && \CRM_Core_OptionGroup::isDomainOptionGroup($record['name']) ? \CRM_Core_BAO_Domain::getDomain()->id : FALSE; + foreach ($allFields as $fieldName => $field) { + if (($field['fk_entity'] ?? NULL) === 'Domain') { + $alias = $fieldName . '.name'; + if (isset($record[$alias])) { + // If this entity is for a specific domain, limit references to that same domain + if ($fieldName === 'domain_id') { + $limitRefsByDomain = \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Domain', $record[$alias], 'id', 'name'); + } + // Swap current domain for special API keyword + if ($record[$alias] === \CRM_Core_BAO_Domain::getDomain()->name) { + unset($record[$alias]); + $record[$fieldName] = 'current_domain'; + } + } + } + } + $name = ($parentName ?? '') . $entityType . '_' . ($record['name'] ?? count($this->exportedEntities[$entityType])); + $result[] = [ + 'name' => $name, + 'entity' => $entityType, + 'cleanup' => $this->cleanup, + 'update' => $this->update, + 'params' => [ + 'version' => 4, + 'values' => $record, + ], + ]; + // Export entities that reference this one + $daoName = CoreUtil::getInfoItem($entityType, 'dao'); + if ($daoName) { + /** @var \CRM_Core_DAO $dao */ + $dao = new $daoName(); + $dao->id = $entityId; + // Collect references into arrays keyed by entity type + $references = []; + foreach ($dao->findReferences() as $reference) { + $refEntity = \CRM_Utils_Array::first($reference::fields())['entity'] ?? ''; + // Limit references by domain + if (property_exists($reference, 'domain_id')) { + if (!isset($reference->domain_id)) { + $reference->find(TRUE); + } + if (isset($reference->domain_id) && $reference->domain_id != $limitRefsByDomain) { + continue; + } + } + $references[$refEntity][] = $reference; + } + foreach ($references as $refEntity => $records) { + $refApiType = CoreUtil::getInfoItem($refEntity, 'type') ?? []; + // Reference must be a ManagedEntity + if (!in_array('ManagedEntity', $refApiType, TRUE)) { + continue; + } + $exclude = []; + // For sortable entities, order by weight and exclude weight from the export (it will be auto-managed) + if (in_array('SortableEntity', $refApiType, TRUE)) { + $exclude[] = $weightCol = CoreUtil::getInfoItem($refEntity, 'order_by'); + usort($records, function ($a, $b) use ($weightCol) { + if (!isset($a->$weightCol)) { + $a->find(TRUE); + } + if (!isset($b->$weightCol)) { + $b->find(TRUE); + } + return $a->$weightCol < $b->$weightCol ? -1 : 1; + }); + } + foreach ($records as $record) { + $this->exportRecord($refEntity, $record->id, $result, $name . '_', $exclude); + } + } + } + } + + /** + * If a field has a pseudoconstant list, determine whether it would be better + * to use pseudoconstant (field:name) syntax vs plain value. + * + * @param string $entityType + * @param array $field + * @return bool + */ + private function shouldUsePseudoconstant(string $entityType, array $field) { + if (empty($field['options'])) { + return FALSE; + } + $daoName = CoreUtil::getInfoItem($entityType, 'dao'); + // Options generated by a callback function tend to be stable, + // and the :name property may not be reliable. Use plain value. + if ($daoName && !empty($daoName::getSupportedFields()[$field['name']]['pseudoconstant']['callback'])) { + return FALSE; + } + // Options with numeric keys probably refer to auto-increment keys + // which vary across different databases. Use :name syntax. + $numericKeys = array_filter(array_keys($field['options']), 'is_numeric'); + return count($numericKeys) === count($field['options']); + } + + /** + * @param $entityType + * @param bool $loadOptions + * @param array $excludeFields + * @return array + */ + private function getFieldsForExport($entityType, $loadOptions = FALSE, $excludeFields = []): array { + $conditions = [ + ['type', 'IN', ['Field', 'Custom']], + ['readonly', '!=', TRUE], + ]; + if ($excludeFields) { + $conditions[] = ['name', 'NOT IN', $excludeFields]; + } + try { + return (array) civicrm_api4($entityType, 'getFields', [ + 'action' => 'create', + 'where' => $conditions, + 'loadOptions' => $loadOptions, + 'checkPermissions' => $this->checkPermissions, + ])->indexBy('name'); + } + catch (NotImplementedException $e) { + return []; + } + } + +} diff --git a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php index 98707aff3b7f5da14c1183f5ad61c26cc3000994..46120cd40beb57534d678c5cbaba7d038bd8bc10 100644 --- a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php @@ -32,6 +32,8 @@ trait DAOActionTrait { */ protected $language; + private $_maxWeights = []; + /** * @return \CRM_Core_DAO|string */ @@ -105,6 +107,7 @@ trait DAOActionTrait { */ protected function writeObjects(&$items) { $baoName = $this->getBaoName(); + $updateWeights = FALSE; // TODO: Opt-in more entities to use the new writeRecords BAO method. $functionNames = [ @@ -112,12 +115,24 @@ trait DAOActionTrait { 'CustomField' => 'writeRecords', 'EntityTag' => 'add', 'GroupContact' => 'add', + 'Navigation' => 'writeRecords', + 'WordReplacement' => 'writeRecords', ]; $method = $functionNames[$this->getEntityName()] ?? NULL; if (!isset($method)) { $method = method_exists($baoName, 'create') ? 'create' : (method_exists($baoName, 'add') ? 'add' : 'writeRecords'); } + // Adjust weights for sortable entities + if (in_array('SortableEntity', CoreUtil::getInfoItem($this->getEntityName(), 'type'))) { + $weightField = CoreUtil::getInfoItem($this->getEntityName(), 'order_by'); + // Only take action if updating a single record, or if no weights are specified in any record + // This avoids messing up a bulk update with multiple recalculations + if (count($items) === 1 || !array_filter(array_column($items, $weightField))) { + $updateWeights = TRUE; + } + } + $result = []; foreach ($items as &$item) { @@ -125,6 +140,11 @@ trait DAOActionTrait { FormattingUtil::formatWriteParams($item, $this->entityFields()); $this->formatCustomParams($item, $entityId); + // Adjust weights for sortable entities + if ($updateWeights) { + $this->updateWeight($item); + } + // Skip individual processing if using writeRecords if ($method === 'writeRecords') { continue; @@ -179,8 +199,12 @@ trait DAOActionTrait { * @param array $record */ private function resolveFKValues(array &$record): void { + // Resolve domain id first + uksort($record, function($a, $b) { + return substr($a, 0, 9) == 'domain_id' ? -1 : 1; + }); foreach ($record as $key => $value) { - if (substr_count($key, '.') !== 1) { + if (!$value || substr_count($key, '.') !== 1) { continue; } [$fieldName, $fkField] = explode('.', $key); @@ -189,7 +213,27 @@ trait DAOActionTrait { continue; } $fkDao = CoreUtil::getBAOFromApiName($field['fk_entity']); - $record[$fieldName] = \CRM_Core_DAO::getFieldValue($fkDao, $value, 'id', $fkField); + // Constrain search to the domain of the current entity + $domainConstraint = NULL; + if (isset($fkDao::getSupportedFields()['domain_id'])) { + if (!empty($record['domain_id'])) { + $domainConstraint = $record['domain_id'] === 'current_domain' ? \CRM_Core_Config::domainID() : $record['domain_id']; + } + elseif (!empty($record['id']) && isset($this->entityFields()['domain_id'])) { + $domainConstraint = \CRM_Core_DAO::getFieldValue($this->getBaoName(), $record['id'], 'domain_id'); + } + } + if ($domainConstraint) { + $fkSearch = new $fkDao(); + $fkSearch->domain_id = $domainConstraint; + $fkSearch->$fkField = $value; + $fkSearch->find(TRUE); + $record[$fieldName] = $fkSearch->id; + } + // Simple lookup without all the fuss about domains + else { + $record[$fieldName] = \CRM_Core_DAO::getFieldValue($fkDao, $value, 'id', $fkField); + } unset($record[$key]); } } @@ -287,4 +331,58 @@ trait DAOActionTrait { return isset($info[$fieldName]) ? ['suffix' => $suffix] + $info[$fieldName] : NULL; } + /** + * Update weights when inserting or updating a sortable entity + * @param array $record + * @see SortableEntity + */ + protected function updateWeight(array &$record) { + /** @var \CRM_Core_DAO|string $daoName */ + $daoName = CoreUtil::getInfoItem($this->getEntityName(), 'dao'); + $weightField = CoreUtil::getInfoItem($this->getEntityName(), 'order_by'); + $idField = CoreUtil::getIdFieldName($this->getEntityName()); + // If updating an existing record without changing weight, do nothing + if (!isset($record[$weightField]) && !empty($record[$idField])) { + return; + } + $daoFields = $daoName::getSupportedFields(); + $newWeight = $record[$weightField] ?? NULL; + $oldWeight = empty($record[$idField]) ? NULL : \CRM_Core_DAO::getFieldValue($daoName, $record[$idField], $weightField); + + // FIXME: Need a more metadata-ish approach. For now here's a hardcoded list of the fields sortable entities use for grouping. + $guesses = ['option_group_id', 'price_set_id', 'price_field_id', 'premiums_id', 'uf_group_id', 'custom_group_id', 'parent_id', 'domain_id']; + $filters = []; + foreach (array_intersect($guesses, array_keys($daoFields)) as $filter) { + $filters[$filter] = $record[$filter] ?? (empty($record[$idField]) ? NULL : \CRM_Core_DAO::getFieldValue($daoName, $record[$idField], $filter)); + } + // Supply default weight for new record + if (!isset($record[$weightField]) && empty($record[$idField])) { + $record[$weightField] = $this->getMaxWeight($daoName, $filters, $weightField); + } + else { + $record[$weightField] = \CRM_Utils_Weight::updateOtherWeights($daoName, $oldWeight, $newWeight, $filters, $weightField); + } + } + + /** + * Looks up max weight for a set of sortable entities + * + * Keeps it in memory in case this operation is writing more than one record + * + * @param $daoName + * @param $filters + * @param $weightField + * @return int|mixed + */ + private function getMaxWeight($daoName, $filters, $weightField) { + $key = $daoName . json_encode($filters); + if (!isset($this->_maxWeights[$key])) { + $this->_maxWeights[$key] = \CRM_Utils_Weight::getMax($daoName, $filters, $weightField) + 1; + } + else { + ++$this->_maxWeights[$key]; + } + return $this->_maxWeights[$key]; + } + } diff --git a/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php b/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php index 2b5807b67e08b7f15e40371ce7a249b2bd002adc..2f08289cfb24b2e46577e42b26fb47f9fdbcb460 100644 --- a/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php +++ b/civicrm/Civi/Api4/Generic/Traits/EntityBridge.php @@ -15,8 +15,6 @@ namespace Civi\Api4\Generic\Traits; * A bridge is a small table that provides an intermediary link between two other tables. * * The API can automatically incorporate a Bridge into a join expression. - * - * Note: at time of writing this trait does nothing except affect the "type" shown in Entity::get() metadata. */ trait EntityBridge { @@ -29,13 +27,20 @@ trait EntityBridge { */ public static function getInfo() { $info = parent::getInfo(); + $bridgeFields = []; if (!empty($info['dao'])) { foreach (($info['dao'])::fields() as $field) { if (!empty($field['FKClassName']) || $field['name'] === 'entity_id') { - $info['bridge'][$field['name']] = []; + $bridgeFields[] = $field['name']; } } } + if (count($bridgeFields) === 2) { + $info['bridge'] = [ + $bridgeFields[0] => ['to' => $bridgeFields[1]], + $bridgeFields[1] => ['to' => $bridgeFields[0]], + ]; + } return $info; } diff --git a/civicrm/Civi/Api4/Generic/Traits/ManagedEntity.php b/civicrm/Civi/Api4/Generic/Traits/ManagedEntity.php index da2e25899c4e4a41f181b1c2bc02c89e56a918b0..df7fc0edf6be5393c4cc952cf189ebee6f4201b8 100644 --- a/civicrm/Civi/Api4/Generic/Traits/ManagedEntity.php +++ b/civicrm/Civi/Api4/Generic/Traits/ManagedEntity.php @@ -12,6 +12,7 @@ namespace Civi\Api4\Generic\Traits; use Civi\Api4\Generic\BasicBatchAction; +use Civi\Api4\Generic\ExportAction; /** * A managed entity includes extra fields and methods to revert from an overridden local to base state. @@ -36,4 +37,13 @@ trait ManagedEntity { }))->setCheckPermissions($checkPermissions); } + /** + * @param bool $checkPermissions + * @return \Civi\Api4\Generic\ExportAction + */ + public static function export($checkPermissions = TRUE) { + return (new ExportAction(static::getEntityName(), __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + } diff --git a/civicrm/Civi/Api4/Generic/Traits/SoftDelete.php b/civicrm/Civi/Api4/Generic/Traits/SoftDelete.php new file mode 100644 index 0000000000000000000000000000000000000000..108495d7fc182db925c92a9292d6b6b07fbf2c45 --- /dev/null +++ b/civicrm/Civi/Api4/Generic/Traits/SoftDelete.php @@ -0,0 +1,27 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Generic\Traits; + +/** + * This trait is used by entities with a "move to trash" option. + * @method $this setUseTrash(bool $useTrash) Pass FALSE to force delete and bypass trash + * @method bool getUseTrash() + */ +trait SoftDelete { + + /** + * Should $ENTITY be moved to the trash instead of permanently deleted? + * @var bool + */ + protected $useTrash = TRUE; + +} diff --git a/civicrm/Civi/Api4/Generic/Traits/OptionList.php b/civicrm/Civi/Api4/Generic/Traits/SortableEntity.php similarity index 60% rename from civicrm/Civi/Api4/Generic/Traits/OptionList.php rename to civicrm/Civi/Api4/Generic/Traits/SortableEntity.php index 3dea083bfdece0b7b16979973a9f42acb9b9a66b..272b53d5f9d6f50db745c74df432e5d62f0a1cef 100644 --- a/civicrm/Civi/Api4/Generic/Traits/OptionList.php +++ b/civicrm/Civi/Api4/Generic/Traits/SortableEntity.php @@ -12,12 +12,10 @@ namespace Civi\Api4\Generic\Traits; /** - * An optionList is a small entity whose primary purpose is to supply a semi-static list of options to fields in other entities. + * A sortable entity has a 'weight' column which will be auto-updated by the API. * - * The options appear in the field metadata for other entities that reference this one via pseudoconstant. - * - * Note: At time of writing, this trait does nothing except add "OptionList" to the "type" in Entity::get() metadata. + * NOTE: In order to use this trait, an entity must declare `@orderBy` */ -trait OptionList { +trait SortableEntity { } diff --git a/civicrm/Civi/Api4/GroupContact.php b/civicrm/Civi/Api4/GroupContact.php index cb7259ef9e31e74266062332cb723fbdd0d79322..13fa4e66370cb4c37621ea96f1d5663af59f8e71 100644 --- a/civicrm/Civi/Api4/GroupContact.php +++ b/civicrm/Civi/Api4/GroupContact.php @@ -59,8 +59,14 @@ class GroupContact extends Generic\DAOEntity { public static function getInfo() { $info = parent::getInfo(); $info['bridge'] = [ - 'group_id' => ['description' => ts('Static (non-smart) group contacts')], - 'contact_id' => ['description' => ts('Static (non-smart) group contacts')], + 'group_id' => [ + 'to' => 'contact_id', + 'description' => ts('Static (non-smart) group contacts'), + ], + 'contact_id' => [ + 'to' => 'group_id', + 'description' => ts('Static (non-smart) group contacts'), + ], ]; return $info; } diff --git a/civicrm/Civi/Api4/LocationType.php b/civicrm/Civi/Api4/LocationType.php index a3b282dace61a5371450120bfad1d0434e05c368..feadcb37a63809c67d6ba9c89bb3eaa0d9bdebc2 100644 --- a/civicrm/Civi/Api4/LocationType.php +++ b/civicrm/Civi/Api4/LocationType.php @@ -13,11 +13,10 @@ namespace Civi\Api4; /** * LocationType entity. * - * @searchable none + * @searchable secondary * @since 5.19 * @package Civi\Api4 */ class LocationType extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/Membership.php b/civicrm/Civi/Api4/Membership.php index 3906edd80232b5e437099ff6b09e783adca299e3..751cd65e32a8a1a1ec7a02019f67001ea00d3676 100644 --- a/civicrm/Civi/Api4/Membership.php +++ b/civicrm/Civi/Api4/Membership.php @@ -18,6 +18,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class Membership extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/MembershipBlock.php b/civicrm/Civi/Api4/MembershipBlock.php index 880cbe5159f62c341e02c096c43a01b31bb5a292..9980b3b23c49003c26c14227df4902b0d37d42e5 100644 --- a/civicrm/Civi/Api4/MembershipBlock.php +++ b/civicrm/Civi/Api4/MembershipBlock.php @@ -18,6 +18,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class MembershipBlock extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/MembershipStatus.php b/civicrm/Civi/Api4/MembershipStatus.php index e94c6c237ed395c42df98902dc466c9d87d7f531..5abaaac42b1ce6b1cc3ea48b83682853f60b8cb8 100644 --- a/civicrm/Civi/Api4/MembershipStatus.php +++ b/civicrm/Civi/Api4/MembershipStatus.php @@ -14,10 +14,12 @@ namespace Civi\Api4; * MembershipStatus entity. * * @searchable secondary + * @orderBy weight * @since 5.42 * @package Civi\Api4 */ class MembershipStatus extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/MembershipType.php b/civicrm/Civi/Api4/MembershipType.php index 7b1d891c23d275798b49d58e013b6030f59d8914..ba4c6f80d722b75d97d84ff1b0b78b2d129ddec4 100644 --- a/civicrm/Civi/Api4/MembershipType.php +++ b/civicrm/Civi/Api4/MembershipType.php @@ -14,10 +14,12 @@ namespace Civi\Api4; * MembershipType entity. * * @searchable secondary + * @orderBy weight * @since 5.27 * @package Civi\Api4 */ class MembershipType extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/Navigation.php b/civicrm/Civi/Api4/Navigation.php index 5c8a65c50013973ffc4d4044f49856a1ac3c7284..ecf14ffe4165b23698655f48572603c5945a1f21 100644 --- a/civicrm/Civi/Api4/Navigation.php +++ b/civicrm/Civi/Api4/Navigation.php @@ -11,12 +11,15 @@ namespace Civi\Api4; /** - * Navigation entity. + * Navigation menu items. * * @searchable none + * @orderBy weight * @since 5.19 * @package Civi\Api4 */ class Navigation extends Generic\DAOEntity { + use Generic\Traits\SortableEntity; + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/OptionGroup.php b/civicrm/Civi/Api4/OptionGroup.php index 0f909bd6b0b77f4fa13f04da106b08c9be0478b2..30c45aa1b767999a83e1cb707c065cfcd1733fbc 100644 --- a/civicrm/Civi/Api4/OptionGroup.php +++ b/civicrm/Civi/Api4/OptionGroup.php @@ -14,11 +14,11 @@ namespace Civi\Api4; * OptionGroup entity. * * @see \Civi\Api4\OptionValue - * @searchable none + * @searchable secondary * @since 5.19 * @package Civi\Api4 */ class OptionGroup extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/OptionValue.php b/civicrm/Civi/Api4/OptionValue.php index cccb88f6be551ee5f7ae36a2fb59a7b2c16d129e..7ca6e314811ab725552bf3f7e94eea93d496f468 100644 --- a/civicrm/Civi/Api4/OptionValue.php +++ b/civicrm/Civi/Api4/OptionValue.php @@ -14,11 +14,13 @@ namespace Civi\Api4; * OptionValue entity. * * @see \Civi\Api4\OptionGroup - * @searchable none + * @searchable secondary + * @orderBy weight * @since 5.19 * @package Civi\Api4 */ class OptionValue extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/PaymentProcessor.php b/civicrm/Civi/Api4/PaymentProcessor.php index 761fa58c2120a3cf795d8ec8bea5d177c184c690..c419634f12538c4e87568c5c7be7832d39cf6584 100644 --- a/civicrm/Civi/Api4/PaymentProcessor.php +++ b/civicrm/Civi/Api4/PaymentProcessor.php @@ -20,6 +20,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class PaymentProcessor extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/PaymentProcessorType.php b/civicrm/Civi/Api4/PaymentProcessorType.php index bc60c6180d95a55318c4068f56e63dd9e354a09b..178d5189677aa6f5b6d61aed9dbcecd2d0c36570 100644 --- a/civicrm/Civi/Api4/PaymentProcessorType.php +++ b/civicrm/Civi/Api4/PaymentProcessorType.php @@ -20,6 +20,6 @@ namespace Civi\Api4; * @package Civi\Api4 */ class PaymentProcessorType extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/PaymentToken.php b/civicrm/Civi/Api4/PaymentToken.php index f1fb0d38f14c20adc3012d8a9b1d4d5faefb711c..d4569d51f296389803c824a821549e4d18eda516 100644 --- a/civicrm/Civi/Api4/PaymentToken.php +++ b/civicrm/Civi/Api4/PaymentToken.php @@ -20,6 +20,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class PaymentToken extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/PriceField.php b/civicrm/Civi/Api4/PriceField.php index 0e8e7d11e2a0a1110f90297b8a6a02e989cec39e..dcbe67026ef30efc36094b2701aa688a5fe6eb87 100644 --- a/civicrm/Civi/Api4/PriceField.php +++ b/civicrm/Civi/Api4/PriceField.php @@ -14,9 +14,11 @@ namespace Civi\Api4; * PriceField entity. * * @searchable secondary + * @orderBy weight * @since 5.27 * @package Civi\Api4 */ class PriceField extends Generic\DAOEntity { + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/PriceFieldValue.php b/civicrm/Civi/Api4/PriceFieldValue.php index f5bb0372614e08a2d5cd441ef8e3d6bc729b075f..d6e20203efdebd83930d9ca618f3572a85797983 100644 --- a/civicrm/Civi/Api4/PriceFieldValue.php +++ b/civicrm/Civi/Api4/PriceFieldValue.php @@ -14,9 +14,11 @@ namespace Civi\Api4; * PriceFieldValue entity. * * @searchable secondary + * @orderBy weight * @since 5.27 * @package Civi\Api4 */ class PriceFieldValue extends Generic\DAOEntity { + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 29f9345cbb2ca7068e622ae307190070a380c3a3..b8240078b9cc9ecc1d7f7764146ead4d70905aaa 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -872,31 +872,28 @@ class Api4SelectQuery { * @throws \API_Exception */ private function getBridgeRefs(string $bridgeEntity, string $joinEntity): array { - $bridgeFields = CoreUtil::getInfoItem($bridgeEntity, 'bridge') ?? []; - // Sanity check - bridge entity should declare exactly 2 FK fields - if (count($bridgeFields) !== 2) { - throw new \API_Exception("Illegal bridge entity specified: $bridgeEntity. Expected 2 bridge fields, found " . count($bridgeFields)); - } + $bridges = CoreUtil::getInfoItem($bridgeEntity, 'bridge') ?? []; /* @var \CRM_Core_DAO $bridgeDAO */ $bridgeDAO = CoreUtil::getInfoItem($bridgeEntity, 'dao'); + $bridgeEntityFields = \Civi\API\Request::create($bridgeEntity, 'get', ['version' => 4, 'checkPermissions' => $this->getCheckPermissions()])->entityFields(); $bridgeTable = $bridgeDAO::getTableName(); // Get the 2 bridge reference columns as CRM_Core_Reference_* objects - $joinRef = $baseRef = NULL; - foreach ($bridgeDAO::getReferenceColumns() as $ref) { - if (array_key_exists($ref->getReferenceKey(), $bridgeFields)) { - if (!$joinRef && in_array($joinEntity, $ref->getTargetEntities())) { - $joinRef = $ref; + $referenceColumns = $bridgeDAO::getReferenceColumns(); + foreach ($referenceColumns as $joinRef) { + $refKey = $joinRef->getReferenceKey(); + if (array_key_exists($refKey, $bridges) && in_array($joinEntity, $joinRef->getTargetEntities())) { + if (!empty($bridgeEntityFields[$refKey]['fk_entity']) && $joinEntity !== $bridgeEntityFields[$refKey]['fk_entity']) { + continue; } - else { - $baseRef = $ref; + foreach ($bridgeDAO::getReferenceColumns() as $baseRef) { + if ($baseRef->getReferenceKey() === $bridges[$refKey]['to']) { + return [$bridgeTable, $baseRef, $joinRef]; + } } } } - if (!$joinRef || !$baseRef) { - throw new \API_Exception("Unable to join $bridgeEntity to $joinEntity"); - } - return [$bridgeTable, $baseRef, $joinRef]; + throw new \API_Exception("Unable to join $bridgeEntity to $joinEntity"); } /** diff --git a/civicrm/Civi/Api4/RelationshipCache.php b/civicrm/Civi/Api4/RelationshipCache.php index e967d2373fbb604534cab0546fe064a09c995b8f..77db19c2f2d75c1750052cbebebb810a8da3cafa 100644 --- a/civicrm/Civi/Api4/RelationshipCache.php +++ b/civicrm/Civi/Api4/RelationshipCache.php @@ -47,9 +47,19 @@ class RelationshipCache extends Generic\AbstractEntity { $info = parent::getInfo(); $info['bridge_title'] = ts('Relationship'); $info['bridge'] = [ - 'near_contact_id' => ['description' => ts('One or more contacts with a relationship to this contact')], - 'far_contact_id' => ['description' => ts('One or more contacts with a relationship to this contact')], + 'near_contact_id' => [ + 'to' => 'far_contact_id', + 'label' => ts('Related Contacts'), + 'description' => ts('One or more related contacts'), + ], ]; + if (in_array('CiviCase', \Civi::settings()->get('enable_components'), TRUE)) { + $info['bridge']['case_id'] = [ + 'to' => 'far_contact_id', + 'label' => ts('Case Roles'), + 'description' => ts('Cases in which this contact has a role'), + ]; + } return $info; } diff --git a/civicrm/Civi/Api4/RelationshipType.php b/civicrm/Civi/Api4/RelationshipType.php index a46723a051b3170aaabf3bd279b455840551bb53..9e0ff6a6b57f97c3c4280f451e2ea166564b9876 100644 --- a/civicrm/Civi/Api4/RelationshipType.php +++ b/civicrm/Civi/Api4/RelationshipType.php @@ -20,6 +20,6 @@ namespace Civi\Api4; * @package Civi\Api4 */ class RelationshipType extends Generic\DAOEntity { - use Generic\Traits\OptionList; + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/FieldDomainIdSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/FieldDomainIdSpecProvider.php index c833277c4eeba911f2b67da512a48cdb8bb7658f..bb3533cd023afdd8e1d7d845617880ec49a93af2 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/FieldDomainIdSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/FieldDomainIdSpecProvider.php @@ -21,7 +21,8 @@ class FieldDomainIdSpecProvider implements Generic\SpecProviderInterface { */ public function modifySpec(RequestSpec $spec) { $domainIdField = $spec->getFieldByName('domain_id'); - if ($domainIdField && $domainIdField->isRequired()) { + // TODO: The WordReplacement entity should have domain_id required so this OR condition can be removed + if ($domainIdField && ($domainIdField->isRequired() || $domainIdField->getEntity() === 'WordReplacement')) { $domainIdField->setRequired(FALSE)->setDefaultValue('current_domain');; } } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ManagedEntitySpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ManagedEntitySpecProvider.php index c7ae06b979e760818ca4dd8c299209b32ebc8b36..175cadf6fe186fb37174a97ed43c2038a13ddaa8 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/ManagedEntitySpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ManagedEntitySpecProvider.php @@ -53,6 +53,16 @@ class ManagedEntitySpecProvider implements Generic\SpecProviderInterface { ->setOptionsCallback(['CRM_Core_PseudoConstant', 'getExtensions']) ->setSqlRenderer([__CLASS__, 'renderBaseModule']); $spec->addFieldSpec($field); + + $field = (new FieldSpec('local_modified_date', $spec->getEntity(), 'Timestamp')) + ->setLabel(ts('Locally Modified')) + ->setTitle(ts('Locally modified')) + ->setColumnName('id') + ->setDescription(ts('When the managed entity was changed from its original settings')) + ->setType('Extra') + ->setReadonly(TRUE) + ->setSqlRenderer([__CLASS__, 'renderLocalModifiedDate']); + $spec->addFieldSpec($field); } /** @@ -91,4 +101,15 @@ class ManagedEntitySpecProvider implements Generic\SpecProviderInterface { return "(SELECT `civicrm_managed`.`module` FROM `civicrm_managed` WHERE `civicrm_managed`.`entity_id` = $id AND `civicrm_managed`.`entity_type` = '$entity' LIMIT 1)"; } + /** + * Get sql snippet for local_modified_date + * @param array $field + * return string + */ + public static function renderLocalModifiedDate(array $field): string { + $id = $field['sql_name']; + $entity = $field['entity']; + return "(SELECT `civicrm_managed`.`entity_modified_date` FROM `civicrm_managed` WHERE `civicrm_managed`.`entity_id` = $id AND `civicrm_managed`.`entity_type` = '$entity' LIMIT 1)"; + } + } diff --git a/civicrm/Civi/Api4/StateProvince.php b/civicrm/Civi/Api4/StateProvince.php index fdea49b91f8404833be85cdb49bbae45a1609fb0..a42938fb723bc53bd2911425cbe884859e2eeed8 100644 --- a/civicrm/Civi/Api4/StateProvince.php +++ b/civicrm/Civi/Api4/StateProvince.php @@ -18,6 +18,5 @@ namespace Civi\Api4; * @package Civi\Api4 */ class StateProvince extends Generic\DAOEntity { - use Generic\Traits\OptionList; } diff --git a/civicrm/Civi/Api4/UFField.php b/civicrm/Civi/Api4/UFField.php index 46a5744f95d4c082aa2ec2a1cae0ceb6f123c731..7fbd05df2f6d26685f1a8ea39c50a36d909aab16 100644 --- a/civicrm/Civi/Api4/UFField.php +++ b/civicrm/Civi/Api4/UFField.php @@ -15,9 +15,11 @@ namespace Civi\Api4; * * @see \Civi\Api4\UFGroup * @searchable none + * @orderBy weight * @since 5.19 * @package Civi\Api4 */ class UFField extends Generic\DAOEntity { + use Generic\Traits\SortableEntity; } diff --git a/civicrm/Civi/Api4/Utils/CoreUtil.php b/civicrm/Civi/Api4/Utils/CoreUtil.php index f57b1aa8a54948d511ec929780370d473292e600..d6d6320ca41a009e9c8bce7f22669d4924aff137 100644 --- a/civicrm/Civi/Api4/Utils/CoreUtil.php +++ b/civicrm/Civi/Api4/Utils/CoreUtil.php @@ -12,6 +12,7 @@ namespace Civi\Api4\Utils; +use Civi\API\Exception\NotImplementedException; use Civi\API\Request; use Civi\Api4\Entity; use Civi\Api4\Event\CreateApi4RequestEvent; @@ -252,4 +253,24 @@ class CoreUtil { return $schemaMap; } + /** + * Fetches database references + those returned by hook + * + * @see \CRM_Utils_Hook::referenceCounts() + * @param string $entityName + * @param int $entityId + * @return array{name: string, type: string, count: int, table: string|null, key: string|null}[] + * @throws NotImplementedException + */ + public static function getRefCount(string $entityName, $entityId) { + $daoName = self::getInfoItem($entityName, 'dao'); + if (!$daoName) { + throw new NotImplementedException("Cannot getRefCount for $entityName - dao not found."); + } + /** @var \CRM_Core_DAO $dao */ + $dao = new $daoName(); + $dao->id = $entityId; + return $dao->getReferenceCounts(); + } + } diff --git a/civicrm/Civi/Api4/Utils/ReflectionUtils.php b/civicrm/Civi/Api4/Utils/ReflectionUtils.php index a5d59803f13a46770cd8ee83b4a3e7beb6abf293..0263718e3aa44b82a5bd78cbcc3e373536910bfb 100644 --- a/civicrm/Civi/Api4/Utils/ReflectionUtils.php +++ b/civicrm/Civi/Api4/Utils/ReflectionUtils.php @@ -179,6 +179,20 @@ class ReflectionUtils { } } + /** + * Check if a class method is deprecated + * + * @param string $className + * @param string $methodName + * @return bool + * @throws \ReflectionException + */ + public static function isMethodDeprecated(string $className, string $methodName): bool { + $reflection = new \ReflectionClass($className); + $docBlock = $reflection->getMethod($methodName)->getDocComment(); + return strpos($docBlock, "@deprecated") !== FALSE; + } + /** * Find any methods in this class which match the given prefix. * diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index 841f318ba5b4a33e57ed406bf423621e40cbd133..d733b6ce0473f8334377335edc6be7def331befc 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -607,7 +607,8 @@ class Container { \CRM_Core_DAO::init($runtime->dsn); \CRM_Utils_Hook::singleton(TRUE); \CRM_Extension_System::singleton(TRUE); - \CRM_Extension_System::singleton(TRUE)->getClassLoader()->register(); + \CRM_Extension_System::singleton()->getClassLoader()->register(); + \CRM_Extension_System::singleton()->getMixinLoader()->run(); $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); $runtime->includeCustomPath(); diff --git a/civicrm/Civi/Test/Api3TestTrait.php b/civicrm/Civi/Test/Api3TestTrait.php index 65bd2ee2162e5c167d6bc1a56ef70513a13d937c..dafe7e70a63ad275eb59c093ab2f181335f5d8dd 100644 --- a/civicrm/Civi/Test/Api3TestTrait.php +++ b/civicrm/Civi/Test/Api3TestTrait.php @@ -510,6 +510,10 @@ trait Api3TestTrait { } } + if (isset($actionInfo[0]['params']['useTrash'])) { + $v4Params['useTrash'] = empty($v3Params['skip_undelete']); + } + // Build where clause for 'getcount', 'getsingle', 'getvalue', 'get' & 'replace' if ($v4Action == 'get' || $v3Action == 'replace') { foreach ($v3Params as $key => $val) { diff --git a/civicrm/Civi/Token/TokenRow.php b/civicrm/Civi/Token/TokenRow.php index 29ad5a25592ff6b948df7b37316739ff7612fef3..67010083918f5b7b22c1aed21a6889149f1a7199 100644 --- a/civicrm/Civi/Token/TokenRow.php +++ b/civicrm/Civi/Token/TokenRow.php @@ -280,7 +280,7 @@ class TokenRow { $htmlTokens[$entity][$field] = \CRM_Utils_String::purifyHTML($value); } else { - $htmlTokens[$entity][$field] = is_object($value) ? $value : htmlentities($value); + $htmlTokens[$entity][$field] = is_object($value) ? $value : htmlentities($value, ENT_QUOTES); } } } diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index 43308c15bba7b7c65686ecf7789d2324bad2ca9f..a170e2aa847d36f5ef5e3dab6d095692ff61d6e7 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -1,215 +1,224 @@ <div id="bootstrap-theme" class="api4-explorer-page"> - <div crm-ui-debug="availableParams"></div> <h1 crm-page-title> {{:: ts('CiviCRM APIv4') }}{{ entity ? (' (' + entity + '::' + action + ')') : '' }} </h1> <div class="api4-explorer-row crm-flex-box"> - <form name="api4-explorer" class="panel panel-default explorer-params-panel crm-flex-2"> - <div class="panel-heading"> - <div class="form-inline"> - <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, formatResultCssClass: formatResultCssClass}" /> - </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, formatResultCssClass: formatResultCssClass}" /> - </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()" ng-mouseenter="help(ts('Execute'), executeDoc())" ng-mouseleave="help()">{{:: ts('Execute') }}</button> - <button class="btn btn-primary pull-right" crm-icon="fa-save" ng-show="perm.editGroups && action === 'get'" ng-click="save()" ng-mouseenter="help(ts('Save smart group'), saveDoc())" ng-mouseleave="help()">{{:: ts('Save...') }}</button> - </div> + <form name="api4-explorer" class="panel panel-default explorer-params-panel crm-flex-2"> + <div class="panel-heading"> + <div class="form-inline"> + <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, formatResultCssClass: formatResultCssClass}" /> + </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, formatResultCssClass: formatResultCssClass}" /> + </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()" ng-mouseenter="help(ts('Execute'), executeDoc())" ng-mouseleave="help()">{{:: ts('Execute') }}</button> + <button class="btn btn-primary pull-right" crm-icon="fa-save" ng-show="perm.editGroups && action === 'get'" ng-click="save()" ng-mouseenter="help(ts('Save smart group'), saveDoc())" ng-mouseleave="help()">{{:: ts('Save...') }}</button> </div> - <div class="panel-body"> - <div class="api4-input form-inline"> - <div class="checkbox-inline form-control" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['bool'], false)"> - <label> - <input type="checkbox" id="api4-param-{{:: name }}" ng-model="params[name]"/> - <span>{{:: name }}</span><span class="crm-marker" ng-if="::param.required"> *</span> - </label> - </div> - <div class="checkbox-inline form-control" ng-mouseenter="help('selectRowCount', availableParams.select)" ng-mouseleave="help()" ng-if="::availableParams.select"> - <label> - <input type="checkbox" id="api4-param-selectRowCount" ng-checked="isSelectRowCount()" ng-click="selectRowCount()" /> - <span>SelectRowCount</span> - </label> - </div> - </div> - <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['bool'], true)"> - <label>{{ name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> - <label class="radio-inline"> - <input type="radio" ng-model="params[name]" ng-value="true" />true + </div> + <div class="panel-body"> + <div class="api4-input form-inline"> + <div class="checkbox-inline form-control" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['bool'], false)"> + <label> + <input type="checkbox" id="api4-param-{{:: name }}" ng-model="params[name]"/> + <span>{{:: name }}</span><span class="crm-marker" ng-if="::param.required"> *</span> </label> - <label class="radio-inline"> - <input type="radio" ng-model="params[name]" ng-value="false" />false + </div> + <div class="checkbox-inline form-control" ng-mouseenter="help('selectRowCount', availableParams.select)" ng-mouseleave="help()" ng-if="::availableParams.select"> + <label> + <input type="checkbox" id="api4-param-selectRowCount" ng-checked="isSelectRowCount()" ng-click="selectRowCount()" /> + <span>SelectRowCount</span> </label> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="params[name] !== null"><i class="crm-i fa-times" aria-hidden="true"></i></a> - </div> - <fieldset class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select"> - <legend>select<span class="crm-marker" ng-if="::availableParams.select.required"> *</span></legend> - <div ng-model="params.select" ui-sortable="{axis: 'y'}"> - <div class="api4-input form-inline" ng-repeat="item in params.select track by $index" ng-show="item !== 'row_count'"> - <i class="crm-i fa-arrows" aria-hidden="true"></i> - <input class="form-control huge" type="text" ng-model="params.select[$index]" /> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('select', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> - </div> - </div> - <div class="api4-input form-inline"> - <input class="collapsible-optgroups form-control huge" ng-model="controls.select" crm-ui-select="{data: fieldsAndJoinsAndFunctionsAndWildcards}" placeholder="Add select" /> - </div> - </fieldset> - <fieldset id="api4-join-fieldset" class="api4-input form-inline" ng-mouseenter="help('join', availableParams.join)" ng-mouseleave="help()" ng-if="::availableParams.join"> - <legend>join<span class="crm-marker" ng-if="::availableParams.join.required"> *</span></legend> - <div ng-model="params.join" ui-sortable="{axis: 'y', containment: '#api4-join-fieldset'}"> - <fieldset ng-repeat="item in params.join track by $index"> - <div class="api4-input form-inline"> - <i class="crm-i fa-arrows"></i> - <input class="form-control twenty" type="text" ng-model="params.join[$index][0]" ng-model-options="{updateOn: 'blur'}" ng-change="$ctrl.buildFieldList()"/> - <label>{{:: ts('Required:') }}</label> - <select class="form-control" ng-model="params.join[$index][1]" ng-options="o.k as o.v for o in ::joinTypes" ></select> - <label>{{:: ts('Using:') }}</label> - <select class="form-control" ng-model="params.join[$index][2]" ng-options="e.name as e.name for e in ::bridgeEntities" ng-change="$ctrl.buildFieldList()"> - <option value="">{{:: ts('- none -') }}</option> - </select> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('join', $index)"><i class="crm-i fa-times"></i></a> - </div> - <fieldset class="api4-clause-fieldset"> - <crm-api4-clause clauses="params.join[$index]" format="plain" skip="3" op="AND" label="On" fields="fieldsAndJoins" ></crm-api4-clause> - </fieldset> - </fieldset> - </div> - <div class="api4-input form-inline"> - <input class="collapsible-optgroups form-control huge" ng-model="controls.join" crm-ui-select="{data: entities}" placeholder="Add join" /> - </div> - </fieldset> - <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> - <input class="form-control" ng-list crm-ui-select="::{data: fields, multiple: true}" id="api4-param-fields" ng-model="params.fields" style="width: 85%;"/> - </div> - <div class="api4-input form-inline" ng-mouseenter="help('action', availableParams.action)" ng-mouseleave="help()"ng-if="::availableParams.action"> - <label for="api4-param-action">action<span class="crm-marker" ng-if="::availableParams.action.required"> *</span></label> - <input class="form-control" crm-ui-select="{data: actions, allowClear: true, placeholder: 'None'}" id="api4-param-action" ng-model="params.action"/> - </div> - <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['string', 'int'])"> - <label for="api4-param-{{:: name }}">{{:: name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> - <input class="form-control" ng-if="::!param.options" type="{{:: param.type[0] === 'int' && param.type.length === 1 ? 'number' : 'text' }}" id="api4-param-{{:: name }}" ng-model="params[name]"/> - <select class="form-control" ng-if="::param.options" ng-options="o for o in ::param.options" id="api4-param-{{:: name }}" ng-model="params[name]"></select> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="!!params[name]"><i class="crm-i fa-times" aria-hidden="true"></i></a> - </div> - <div class="api4-input" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['array', 'mixed'])"> - <label for="api4-param-{{:: name }}">{{:: name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> - <textarea class="form-control" ng-if="::!param.options" id="api4-param-{{:: name }}" ng-model="params[name]"> - </textarea> - <select multiple ng-if="::param.options" crm-ui-select class="form-control" id="api4-param-{{:: name }}" ng-model="params[name]"> - <option ng-repeat="opt in param.options" value="{{ opt }}">{{ opt }}</option> - </select> - </div> - <fieldset ng-if="::availableParams.where" class="api4-clause-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()"> - <crm-api4-clause clauses="params.where" is-required="availableParams.where.required" op="AND" label="Where" fields="fieldsAndJoins" ></crm-api4-clause> - </fieldset> - <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 twenty" 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 twenty" 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.groupBy" ng-mouseenter="help('groupBy', availableParams.groupBy)" ng-mouseleave="help()"> - <legend>groupBy<span class="crm-marker" ng-if="::availableParams.groupBy.required"> *</span></legend> - <div ng-model="params.groupBy" ui-sortable="{axis: 'y'}"> - <div class="api4-input form-inline" ng-repeat="item in params.groupBy track by $index"> - <i class="crm-i fa-arrows" aria-hidden="true"></i> - <input class="form-control huge" type="text" ng-model="params.groupBy[$index]" /> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('groupBy', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> - </div> - </div> - <div class="api4-input form-inline"> - <input class="collapsible-optgroups form-control huge" ng-model="controls.groupBy" crm-ui-select="{data: fieldsAndJoinsAndFunctions}" placeholder="Add groupBy" /> + </div> + </div> + <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['bool'], true)"> + <label>{{ name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> + <label class="radio-inline"> + <input type="radio" ng-model="params[name]" ng-value="true" />true + </label> + <label class="radio-inline"> + <input type="radio" ng-model="params[name]" ng-value="false" />false + </label> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="params[name] !== null"><i class="crm-i fa-times" aria-hidden="true"></i></a> + </div> + <fieldset class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select"> + <legend>select<span class="crm-marker" ng-if="::availableParams.select.required"> *</span></legend> + <div ng-model="params.select" ui-sortable="{axis: 'y'}"> + <div class="api4-input form-inline" ng-repeat="item in params.select track by $index" ng-show="item !== 'row_count'"> + <i class="crm-i fa-arrows" aria-hidden="true"></i> + <input class="form-control huge" type="text" ng-model="params.select[$index]" /> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('select', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> </div> - </fieldset> - <fieldset ng-if="::availableParams.having" class="api4-clause-fieldset" ng-mouseenter="help('having', availableParams.having)" ng-mouseleave="help()"> - <crm-api4-clause clauses="params.having" is-required="availableParams.having.required" op="AND" label="Having" fields="havingOptions" ></crm-api4-clause> - </fieldset> - <fieldset ng-if="::availableParams.orderBy" ng-mouseenter="help('orderBy', availableParams.orderBy)" ng-mouseleave="help()"> - <legend>orderBy<span class="crm-marker" ng-if="::availableParams.orderBy.required"> *</span></legend> - <div ng-model="params.orderBy" ui-sortable="{axis: 'y'}"> - <div class="api4-input form-inline" ng-repeat="clause in params.orderBy"> - <i class="crm-i fa-arrows" aria-hidden="true"></i> - <input class="form-control huge" type="text" ng-model="clause[0]" /> - <select class="form-control" ng-model="clause[1]"> - <option value="ASC">ASC</option> - <option value="DESC">DESC</option> + </div> + <div class="api4-input form-inline"> + <input class="collapsible-optgroups form-control huge" ng-model="controls.select" crm-ui-select="{data: fieldsAndJoinsAndFunctionsAndWildcards}" placeholder="Add select" /> + </div> + </fieldset> + <fieldset id="api4-join-fieldset" class="api4-input form-inline" ng-mouseenter="help('join', availableParams.join)" ng-mouseleave="help()" ng-if="::availableParams.join"> + <legend>join<span class="crm-marker" ng-if="::availableParams.join.required"> *</span></legend> + <div ng-model="params.join" ui-sortable="{axis: 'y', containment: '#api4-join-fieldset'}"> + <fieldset ng-repeat="item in params.join track by $index"> + <div class="api4-input form-inline"> + <i class="crm-i fa-arrows"></i> + <input class="form-control twenty" type="text" ng-model="params.join[$index][0]" ng-model-options="{updateOn: 'blur'}" ng-change="$ctrl.buildFieldList()"/> + <label>{{:: ts('Required:') }}</label> + <select class="form-control" ng-model="params.join[$index][1]" ng-options="o.k as o.v for o in ::joinTypes" ></select> + <label>{{:: ts('Using:') }}</label> + <select class="form-control" ng-model="params.join[$index][2]" ng-options="e.name as e.name for e in ::bridgeEntities" ng-change="$ctrl.buildFieldList()"> + <option value="">{{:: ts('- none -') }}</option> </select> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('orderBy', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('join', $index)"><i class="crm-i fa-times"></i></a> </div> - </div> - <div class="api4-input form-inline"> - <input class="collapsible-optgroups form-control huge" ng-model="controls.orderBy" crm-ui-select="{data: fieldsAndJoinsAndFunctionsWithSuffixes}" placeholder="Add orderBy" /> - </div> - </fieldset> - <fieldset ng-if="::availableParams.limit && availableParams.offset"> - <div class="api4-input form-inline"> - <span ng-mouseenter="help('limit', availableParams.limit)" ng-mouseleave="help()"> - <label for="api4-param-limit">limit<span class="crm-marker" ng-if="::availableParams.limit.required"> *</span></label> - <input class="form-control" type="number" min="0" id="api4-param-limit" ng-model="params.limit"/> - </span> - <span ng-mouseenter="help('offset', availableParams.offset)" ng-mouseleave="help()"> - <label for="api4-param-offset">offset<span class="crm-marker" ng-if="::availableParams.offset.required"> *</span></label> - <input class="form-control" type="number" min="0" id="api4-param-offset" ng-model="params.offset"/> - </span> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('limit');clearParam('offset');" ng-show="!!params.limit || !!params.offset"><i class="crm-i fa-times" aria-hidden="true"></i></a> - </div> - </fieldset> - <fieldset ng-if="::availableParams.chain" ng-mouseenter="help('chain', availableParams.chain)" ng-mouseleave="help()"> - <legend>chain</legend> - <div class="api4-input form-inline" ng-repeat="clause in params.chain" api4-exp-chain="clause" entities="::entities" main-entity="::entity" > - </div> - <div class="api4-input form-inline"> - <input class="form-control" ng-model="controls.chain" crm-ui-select="::{data: entities}" placeholder="Add chain" /> - </div> - </fieldset> + <fieldset class="api4-clause-fieldset"> + <crm-api4-clause clauses="params.join[$index]" format="plain" skip="3" op="AND" label="On" fields="fieldsAndJoins" ></crm-api4-clause> + </fieldset> + </fieldset> + </div> + <div class="api4-input form-inline"> + <input class="collapsible-optgroups form-control huge" ng-model="controls.join" crm-ui-select="{data: entities}" placeholder="Add join" /> + </div> + </fieldset> + <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> + <input class="form-control" ng-list crm-ui-select="::{data: fields, multiple: true}" id="api4-param-fields" ng-model="params.fields" style="width: 85%;"/> </div> - </form> - <div class="panel panel-info explorer-help-panel"> - <div class="panel-heading"> - <h3 class="panel-title" crm-icon="fa-info-circle">{{ helpTitle }}</h3> + <div class="api4-input form-inline" ng-mouseenter="help('action', availableParams.action)" ng-mouseleave="help()"ng-if="::availableParams.action"> + <label for="api4-param-action">action<span class="crm-marker" ng-if="::availableParams.action.required"> *</span></label> + <input class="form-control" crm-ui-select="{data: actions, allowClear: true, placeholder: 'None'}" id="api4-param-action" ng-model="params.action"/> </div> - <div class="panel-body"> - <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 class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['string', 'int'])"> + <label for="api4-param-{{:: name }}">{{:: name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> + <input class="form-control" ng-if="::!param.options" type="{{:: param.type[0] === 'int' && param.type.length === 1 ? 'number' : 'text' }}" id="api4-param-{{:: name }}" ng-model="params[name]"/> + <select class="form-control" ng-if="::param.options" ng-options="o for o in ::param.options" id="api4-param-{{:: name }}" ng-model="params[name]"></select> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="!!params[name]"><i class="crm-i fa-times" aria-hidden="true"></i></a> + </div> + <div class="api4-input" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in ::getGenericParams(['array', 'mixed'])"> + <label for="api4-param-{{:: name }}">{{:: name }}<span class="crm-marker" ng-if="::param.required"> *</span></label> + <textarea class="form-control" ng-if="::!param.options" id="api4-param-{{:: name }}" ng-model="params[name]"> + </textarea> + <select multiple ng-if="::param.options" crm-ui-select class="form-control" id="api4-param-{{:: name }}" ng-model="params[name]"> + <option ng-repeat="opt in param.options" value="{{ opt }}">{{ opt }}</option> + </select> + </div> + <fieldset ng-if="::availableParams.where" class="api4-clause-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()"> + <crm-api4-clause clauses="params.where" is-required="availableParams.where.required" op="AND" label="Where" fields="fieldsAndJoins" ></crm-api4-clause> + </fieldset> + <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 twenty" 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 twenty" 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.groupBy" ng-mouseenter="help('groupBy', availableParams.groupBy)" ng-mouseleave="help()"> + <legend>groupBy<span class="crm-marker" ng-if="::availableParams.groupBy.required"> *</span></legend> + <div ng-model="params.groupBy" ui-sortable="{axis: 'y'}"> + <div class="api4-input form-inline" ng-repeat="item in params.groupBy track by $index"> + <i class="crm-i fa-arrows" aria-hidden="true"></i> + <input class="form-control huge" type="text" ng-model="params.groupBy[$index]" /> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('groupBy', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> + </div> + </div> + <div class="api4-input form-inline"> + <input class="collapsible-optgroups form-control huge" ng-model="controls.groupBy" crm-ui-select="{data: fieldsAndJoinsAndFunctions}" placeholder="Add groupBy" /> + </div> + </fieldset> + <fieldset ng-if="::availableParams.having" class="api4-clause-fieldset" ng-mouseenter="help('having', availableParams.having)" ng-mouseleave="help()"> + <crm-api4-clause clauses="params.having" is-required="availableParams.having.required" op="AND" label="Having" fields="havingOptions" ></crm-api4-clause> + </fieldset> + <fieldset ng-if="::availableParams.orderBy" ng-mouseenter="help('orderBy', availableParams.orderBy)" ng-mouseleave="help()"> + <legend>orderBy<span class="crm-marker" ng-if="::availableParams.orderBy.required"> *</span></legend> + <div ng-model="params.orderBy" ui-sortable="{axis: 'y'}"> + <div class="api4-input form-inline" ng-repeat="clause in params.orderBy"> + <i class="crm-i fa-arrows" aria-hidden="true"></i> + <input class="form-control huge" type="text" ng-model="clause[0]" /> + <select class="form-control" ng-model="clause[1]"> + <option value="ASC">ASC</option> + <option value="DESC">DESC</option> + </select> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('orderBy', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> + </div> + </div> + <div class="api4-input form-inline"> + <input class="collapsible-optgroups form-control huge" ng-model="controls.orderBy" crm-ui-select="{data: fieldsAndJoinsAndFunctionsWithSuffixes}" placeholder="Add orderBy" /> </div> + </fieldset> + <fieldset ng-if="::availableParams.limit && availableParams.offset"> + <div class="api4-input form-inline"> + <span ng-mouseenter="help('limit', availableParams.limit)" ng-mouseleave="help()"> + <label for="api4-param-limit">limit<span class="crm-marker" ng-if="::availableParams.limit.required"> *</span></label> + <input class="form-control" type="number" min="0" id="api4-param-limit" ng-model="params.limit"/> + </span> + <span ng-mouseenter="help('offset', availableParams.offset)" ng-mouseleave="help()"> + <label for="api4-param-offset">offset<span class="crm-marker" ng-if="::availableParams.offset.required"> *</span></label> + <input class="form-control" type="number" min="0" id="api4-param-offset" ng-model="params.offset"/> + </span> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('limit');clearParam('offset');" ng-show="!!params.limit || !!params.offset"><i class="crm-i fa-times" aria-hidden="true"></i></a> + </div> + </fieldset> + <fieldset ng-if="::availableParams.chain" ng-mouseenter="help('chain', availableParams.chain)" ng-mouseleave="help()"> + <legend>chain</legend> + <div class="api4-input form-inline" ng-repeat="clause in params.chain" api4-exp-chain="clause" entities="::entities" main-entity="::entity" > + </div> + <div class="api4-input form-inline"> + <input class="form-control" ng-model="controls.chain" crm-ui-select="::{data: entities}" placeholder="Add chain" /> + </div> + </fieldset> + </div> + </form> + <div class="panel panel-info explorer-help-panel"> + <div class="panel-heading"> + <h3 class="panel-title" crm-icon="fa-info-circle">{{ helpTitle }}</h3> + </div> + <div class="panel-body"> + <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 crm-flex-box"> - <div class="panel panel-info explorer-code-panel"> - <ul class="panel-heading nav nav-tabs"> + <div class="panel panel-info explorer-code-panel"> + <div class="panel-heading"> + <ul class="nav nav-tabs"> <li role="presentation" ng-repeat="lang in ::langs" ng-class="{active: selectedTab.code === lang}"> <a href ng-click="selectLang(lang)"> {{:: lang }} </a> </li> </ul> - <div class="panel-body"> - <div ng-repeat="style in code[selectedTab.code]"> - <label>{{:: style.label }}</label> - <div><pre class="prettyprint" ng-bind-html="style.code"></pre></div> - </div> + </div> + <div class="panel-body"> + <div ng-repeat="style in code[selectedTab.code]"> + <label>{{:: style.label }}</label> + <div><pre class="prettyprint" ng-bind-html="style.code"></pre></div> </div> </div> - <div class="panel explorer-result-panel panel-{{ status }}" > - <ul class="panel-heading nav nav-tabs"> + </div> + <div class="panel explorer-result-panel panel-{{ status }}" > + <div class="panel-heading"> + <div class="form-inline pull-right"> + <select ng-show="selectedTab.result === 'result'" class="form-control" ng-model="$ctrl.resultFormat" ng-change="$ctrl.formatResult()"> + <option ng-repeat="fmt in $ctrl.resultFormats" value="{{:: fmt.name }}"> + {{:: fmt.label }} + </option> + </select> + </div> + <ul class="nav nav-tabs"> <li role="presentation" ng-class="{active: selectedTab.result === 'result'}"> <a href ng-click="selectedTab.result = 'result'"> <span ng-switch="status"> @@ -229,22 +238,23 @@ </a> </li> </ul> - <div class="panel-body"> - <div ng-show="selectedTab.result === 'result'"> - <pre class="prettyprint" ng-repeat="code in result" ng-bind-html="code"></pre> - </div> - <div ng-if="::perm.accessDebugOutput" ng-show="selectedTab.result === 'debug'"> - <pre ng-if="debug" class="prettyprint" ng-bind-html="debug"></pre> - <div ng-if="!debug"> - <p> - {{:: ts('To view debugging output, enable the debug param before executing.') }} - </p> - <p> - {{:: ts('Enable backtrace in system settings to see error backtraces.') }} - </p> - </div> + </div> + <div class="panel-body"> + <div ng-show="selectedTab.result === 'result'"> + <pre class="prettyprint" ng-repeat="code in result" ng-bind-html="code"></pre> + </div> + <div ng-if="::perm.accessDebugOutput" ng-show="selectedTab.result === 'debug'"> + <pre ng-if="debug" class="prettyprint" ng-bind-html="debug"></pre> + <div ng-if="!debug"> + <p> + {{:: ts('To view debugging output, enable the debug param before executing.') }} + </p> + <p> + {{:: ts('Enable backtrace in system settings to see error backtraces.') }} + </p> </div> </div> </div> + </div> </div> </div> diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 0d5404a8f4a189d17863de8968a8b1ce071a8f8f..991bc2f6f293de42dddb67badf0aa65d5a589c89 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -42,6 +42,7 @@ var getMetaParams = {}, objectParams = {orderBy: 'ASC', values: '', defaults: '', chain: ['Entity', '', '{}']}, docs = CRM.vars.api4.docs, + response, helpTitle = '', helpContent = {}; $scope.helpTitle = ''; @@ -74,6 +75,17 @@ {name: 'pipe', label: ts('CV (pipe)'), code: ''} ] }; + this.resultFormat = 'json'; + this.resultFormats = [ + { + name: 'json', + label: ts('View as JSON') + }, + { + name: 'php', + label: ts('View as PHP') + }, + ]; if (!entities.length) { formatForSelect2(schema, entities, 'name', ['description', 'icon']); @@ -261,9 +273,9 @@ return; } var info = { - description: field.description, - type: field.data_type - }; + description: field.description, + type: field.data_type + }; if (field.default_value) { info.default = field.default_value; } @@ -846,22 +858,37 @@ 'X-Requested-With': 'XMLHttpRequest' } }).then(function(resp) { - $scope.loading = false; - $scope.status = resp.data && resp.data.debug && resp.data.debug.log ? 'warning' : 'success'; - $scope.debug = debugFormat(resp.data); - $scope.result = [ - formatMeta(resp.data), - prettyPrintOne((_.isArray(resp.data.values) ? '(' + resp.data.values.length + ') ' : '') + _.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))) - ]; - }); + $scope.loading = false; + $scope.status = resp.data && resp.data.debug && resp.data.debug.log ? 'warning' : 'success'; + $scope.debug = debugFormat(resp.data); + response = { + meta: resp.data, + values: resp.data.values + }; + ctrl.formatResult(); + }, function(resp) { + $scope.loading = false; + $scope.status = 'danger'; + $scope.debug = debugFormat(resp.data); + response = { + meta: resp, + values: resp.data + }; + ctrl.formatResult(); + }); + }; + + ctrl.formatResult = function() { + $scope.result = [formatMeta(response.meta)]; + switch (ctrl.resultFormat) { + case 'json': + $scope.result.push(prettyPrintOne((_.isArray(response.values) ? '(' + response.values.length + ') ' : '') + _.escape(JSON.stringify(response.values, null, 2)), 'js', 1)); + break; + + case 'php': + $scope.result.push(prettyPrintOne((_.isArray(response.values) ? '(' + response.values.length + ') ' : '') + _.escape(phpFormat(response.values, 2, 2)), 'php', 1)); + break; + } }; function debugFormat(data) { @@ -873,27 +900,34 @@ /** * Format value to look like php code */ - function phpFormat(val, indent) { + function phpFormat(val, indent, indentChildren) { if (typeof val === 'undefined') { return ''; } if (val === null || val === true || val === false) { return JSON.stringify(val).toUpperCase(); } + var indentChild = indentChildren ? indent + indentChildren : null; indent = (typeof indent === 'number') ? _.repeat(' ', indent) : (indent || ''); var ret = '', baseLine = indent ? indent.slice(0, -2) : '', newLine = indent ? '\n' : '', trailingComma = indent ? ',' : ''; if ($.isPlainObject(val)) { + if ($.isEmptyObject(val)) { + return '[]'; + } $.each(val, function(k, v) { - ret += (ret ? ', ' : '') + newLine + indent + "'" + k + "' => " + phpFormat(v); + ret += (ret ? ', ' : '') + newLine + indent + "'" + k + "' => " + phpFormat(v, indentChild, indentChildren); }); return '[' + ret + trailingComma + newLine + baseLine + ']'; } if ($.isArray(val)) { + if (!val.length) { + return '[]'; + } $.each(val, function(k, v) { - ret += (ret ? ', ' : '') + newLine + indent + phpFormat(v); + ret += (ret ? ', ' : '') + newLine + indent + phpFormat(v, indentChild, indentChildren); }); return '[' + ret + trailingComma + newLine + baseLine + ']'; } diff --git a/civicrm/ang/crmStatusPage.js b/civicrm/ang/crmStatusPage.js index 4be75df5c8bde52ed29fda83d5dd89877a9efd32..c2eafe3935f3cd6eed2dd42b53664c0080e9f57b 100644 --- a/civicrm/ang/crmStatusPage.js +++ b/civicrm/ang/crmStatusPage.js @@ -9,7 +9,7 @@ resolve: { statusData: function(crmApi) { - return crmApi('System', 'check', {sequential: 1, options: {limit: 0}}); + return crmApi('System', 'check', {sequential: 1, options: {limit: 0, sort: 'severity_id DESC'}}); } } }); diff --git a/civicrm/ang/crmStatusPage/StatusPageCtrl.js b/civicrm/ang/crmStatusPage/StatusPageCtrl.js index 0fd79df29f4b3b6c4f8f47061fe90dd647739fd8..5dad04fc593c67f282ce5bcd62909ca057144ebc 100644 --- a/civicrm/ang/crmStatusPage/StatusPageCtrl.js +++ b/civicrm/ang/crmStatusPage/StatusPageCtrl.js @@ -10,7 +10,7 @@ // Refresh the list. Optionally execute api calls first. function refresh(apiCalls, title) { title = title || 'Untitled operation'; - apiCalls = (apiCalls || []).concat([['System', 'check', {sequential: 1, options: {limit: 0}}]]); + apiCalls = (apiCalls || []).concat([['System', 'check', {sequential: 1, options: {limit: 0, sort: 'severity_id DESC'}}]]); $('#crm-status-list').block(); crmApi(apiCalls, true) .then(function(results) { diff --git a/civicrm/api/v3/MailingEventResubscribe.php b/civicrm/api/v3/MailingEventResubscribe.php index 7ec13dcbea7181de2dbadc8281733044a4b740bd..1e5017caa42a6545867231d43679f82226838aa8 100644 --- a/civicrm/api/v3/MailingEventResubscribe.php +++ b/civicrm/api/v3/MailingEventResubscribe.php @@ -35,7 +35,7 @@ function civicrm_api3_mailing_event_resubscribe_create($params) { if (count($groups)) { CRM_Mailing_Event_BAO_Resubscribe::send_resub_response( $params['event_queue_id'], - $groups, FALSE, + $groups, $params['job_id'] ); return civicrm_api3_create_success($params); diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index 94159385132100cb5be5668baa9310a62c5cf475..93b899b5e0c72add30db491a3876d7e2cec18f66 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -2244,7 +2244,7 @@ function _civicrm_api3_validate_string(&$params, &$fieldName, &$fieldInfo, $enti if ($fieldName == 'currency') { //When using IN operator $fieldValue is a array of currency codes if (!CRM_Utils_Rule::currencyCode($value)) { - throw new Exception("Currency not a valid code: $currency"); + throw new Exception("Currency not a valid code: $value"); } } } diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index fdb91c9ace98ef4c0d290bf70709eb3b97143f5a..a44f8e400d47a45c7a12598023b136f53eb15d97 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.44.0', + return array( 'version' => '5.45.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/css/api4-explorer.css b/civicrm/css/api4-explorer.css index 02dd6dbadf1b426aa4ea0511b3e4adc35f876d61..b2cfa771cb117bcbdb0272bf452ba5f1f4e7bf82 100644 --- a/civicrm/css/api4-explorer.css +++ b/civicrm/css/api4-explorer.css @@ -26,10 +26,7 @@ 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 { +#bootstrap-theme .panel-heading li>a { background-color: #f1f1f18c } #bootstrap-theme.api4-explorer-page .explorer-code-panel pre { @@ -37,7 +34,7 @@ word-break: break-all; white-space: pre-wrap; } -#bootstrap-theme.api4-explorer-page .explorer-code-panel .panel-heading.nav li a { +#bootstrap-theme.api4-explorer-page .explorer-code-panel .panel-heading>.nav li a { text-transform: uppercase; } diff --git a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php index bd72efb865b4fcd6f51ff98269d51f5d81967e5a..6ac1d0350339d2e588b2705cf4f34453a0c7c921 100644 --- a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php +++ b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php @@ -20,7 +20,7 @@ class AfformAdminMeta { ->execute(); // Pluralize tabs (too bad option groups only store a single label) $plurals = [ - 'form' => E::ts('Custom Forms'), + 'form' => E::ts('Submission Forms'), 'search' => E::ts('Search Forms'), 'block' => E::ts('Field Blocks'), 'system' => E::ts('System Forms'), diff --git a/civicrm/ext/afform/admin/afform_admin.civix.php b/civicrm/ext/afform/admin/afform_admin.civix.php index 1a1fcfc28ef0ad27a365f32a9925ebd9ac19abea..132b74923975f9fa793a5e86fdde9986bc0a39e9 100644 --- a/civicrm/ext/afform/admin/afform_admin.civix.php +++ b/civicrm/ext/afform/admin/afform_admin.civix.php @@ -107,19 +107,6 @@ function _afform_admin_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _afform_admin_civix_civicrm_xmlMenu(&$files) { - foreach (_afform_admin_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _afform_admin_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _afform_admin_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _afform_admin_civix_civicrm_managed(&$entities) { - $mgdFiles = _afform_admin_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _afform_admin_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_afform_admin_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _afform_admin_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _afform_admin_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _afform_admin_civix_civicrm_themes(&$themes) { - $files = _afform_admin_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _afform_admin_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _afform_admin_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parent } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _afform_admin_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/afform/admin/afform_admin.php b/civicrm/ext/afform/admin/afform_admin.php index 9799e8e91b6f6feebc528746303bf263f41f926d..61b588aa9733baafe21838f6891cea6b43509171 100644 --- a/civicrm/ext/afform/admin/afform_admin.php +++ b/civicrm/ext/afform/admin/afform_admin.php @@ -12,15 +12,6 @@ function afform_admin_civicrm_config(&$config) { _afform_admin_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function afform_admin_civicrm_xmlMenu(&$files) { - _afform_admin_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -75,54 +66,6 @@ function afform_admin_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _afform_admin_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function afform_admin_civicrm_managed(&$entities) { - _afform_admin_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function afform_admin_civicrm_caseTypes(&$caseTypes) { - _afform_admin_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules - */ -function afform_admin_civicrm_angularModules(&$angularModules) { - _afform_admin_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function afform_admin_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _afform_admin_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -133,10 +76,3 @@ function afform_admin_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { function afform_admin_civicrm_entityTypes(&$entityTypes) { _afform_admin_civix_civicrm_entityTypes($entityTypes); } - -/** - * Implements hook_civicrm_themes(). - */ -function afform_admin_civicrm_themes(&$themes) { - _afform_admin_civix_civicrm_themes($themes); -} diff --git a/civicrm/ext/afform/admin/ang/afAdmin.js b/civicrm/ext/afform/admin/ang/afAdmin.js index e118f5c8d35c2b69f087a84eb10dd9c4decc7bab..cf7716175517e56ca9c5f858641e5d3b8d412d34 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin.js +++ b/civicrm/ext/afform/admin/ang/afAdmin.js @@ -11,7 +11,7 @@ // Load data for lists afforms: function(crmApi4) { return crmApi4('Afform', 'get', { - select: ['name', 'title', 'type', 'server_route', 'is_public', 'has_local', 'has_base', 'is_dashlet', 'contact_summary:label'] + select: ['name', 'title', 'type', 'server_route', 'is_public', 'has_local', 'has_base', 'base_module', 'base_module:label', 'is_dashlet', 'contact_summary:label'] }); } } diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js index abf0064c2e9134162ed69d315d500b33d20c315f..019281936b0404c84f1e47a448ce42b80e8b9fb5 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js @@ -36,6 +36,18 @@ afforms[afform.type].push(afform); }, {}); + // Load aggregated submission stats for each form + crmApi4('AfformSubmission', 'get', { + select: ['afform_name', 'MAX(submission_date) AS last_submission', 'COUNT(id) AS submission_count'], + groupBy: ['afform_name'] + }).then(function(submissions) { + _.each(submissions, function(submission) { + var afform = _.findWhere(afforms, {name: submission.afform_name}) || {}; + afform.last_submission = CRM.utils.formatDate(submission.last_submission); + afform.submission_count = submission.submission_count; + }); + }); + // Change sort field/direction when clicking a column header this.sortBy = function(col) { ctrl.sortDir = ctrl.sortField === col ? !ctrl.sortDir : false; @@ -45,10 +57,13 @@ $scope.$bindToRoute({ expr: '$ctrl.tab', param: 'tab', - format: 'raw', - default: ctrl.tabs[0].name + format: 'raw' }); + if (!ctrl.tab) { + ctrl.tab = ctrl.tabs[0].name; + } + this.createLinks = function() { ctrl.searchCreateLinks = ''; if ($scope.types[ctrl.tab].options) { @@ -126,7 +141,7 @@ if (afform.has_base) { apiOps.push(['Afform', 'get', { where: [['name', '=', afform.name]], - select: ['name', 'title', 'type', 'is_public', 'server_route', 'has_local', 'has_base'] + select: ['name', 'title', 'type', 'is_public', 'server_route', 'has_local', 'has_base', 'base_module', 'base_module:label'] }, 0]); } var apiCall = crmStatus( diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html index b6459ccb27e1c5ee0f507330b3df7d8d650a7f08..0f119d02d575703108f823f23efb0c89533c6913 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html @@ -3,7 +3,10 @@ <ul class="nav nav-tabs"> <li role="presentation" ng-repeat="tab in $ctrl.tabs" ng-class="{active: tab.name === $ctrl.tab}"> - <a href ng-click="$ctrl.tab = tab.name; $ctrl.searchAfformList = ''"><i class="crm-i {{ tab.icon }}"></i> {{:: tab.plural }}</a> + <a href ng-click="$ctrl.tab = tab.name; $ctrl.searchAfformList = ''"> + <i class="crm-i {{ tab.icon }}"></i> {{:: tab.plural }} + <span class="badge">{{ $ctrl.afforms[tab.name].length }}</span> + </a> </li> </ul> @@ -47,7 +50,7 @@ <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'name'"></i> {{:: ts('Name') }} </th> - <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('server_route')"> + <th ng-if="$ctrl.tab !== 'block'" title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('server_route')"> <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'server_route'"></i> <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'server_route'"></i> {{:: ts('Page') }} @@ -57,6 +60,16 @@ <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'placement.length'"></i> {{:: ts('Placement') }} </th> + <th ng-if="$ctrl.tab === 'form'" title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('submission_count')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'submission_count'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'submission_count'"></i> + {{:: ts('Submissions') }} + </th> + <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('base_module')"> + <i class="crm-i fa-sort disabled" ng-if="$ctrl.sortField !== 'base_module'"></i> + <i class="crm-i fa-sort-{{ $ctrl.sortDir ? 'asc' : 'desc' }}" ng-if="$ctrl.sortField === 'base_module'"></i> + {{:: ts('Package') }} + </th> <th></th> </tr> </thead> @@ -66,17 +79,28 @@ <td> <code>{{:: afform.name }}</code> </td> - <td> + <td ng-if="$ctrl.tab !== 'block'"> <a ng-if=":: afform.server_route" ng-href="{{:: crmUrl(afform.server_route, null, afform.is_public ? 'front' : 'back') }}" target="_blank"> <i class="crm-i fa-external-link"></i> {{:: afform.server_route }} </a> </td> <td>{{:: afform.placement.join(', ') }}</td> + <td ng-if="$ctrl.tab === 'form'"> + <a ng-if="afform.submission_count" ng-href="{{:: crmUrl('civicrm/admin/afform/submissions#/?name=' + afform.name) }}"> + {{:: afform.submission_count === 1 ? ts('1 Submission') : ts('%1 Submissions', {1: afform.submission_count}) }} + </a> + <div ng-if="afform.last_submission"> + {{:: ts('Last submitted: %1', {1: afform.last_submission}) }} + </div> + </td> + <td> + {{:: afform['base_module:label'] }} + </td> <td class="text-right"> <a ng-if="afform.type !== 'system'" href="#/edit/{{:: afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Edit') }}</a> <a ng-if="afform.type !== 'system'" href="#/clone/{{:: afform.name }}" class="btn btn-xs btn-secondary">{{:: ts('Clone') }}</a> - <a href ng-if="afform.has_local" class="btn btn-xs btn-danger" crm-confirm="{type: afform.has_base ? 'revert' : 'delete', obj: afform}" on-yes="$ctrl.revert(afform)"> + <a href ng-if="afform.has_local" class="btn btn-xs btn-{{ afform.has_base ? 'warning' : 'danger' }}" crm-confirm="{type: afform.has_base ? 'revert' : 'delete', obj: afform}" on-yes="$ctrl.revert(afform)"> {{ afform.has_base ? ts('Revert') : ts('Delete') }} </a> </td> diff --git a/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.html b/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.html new file mode 100644 index 0000000000000000000000000000000000000000..f26eb38f85ba8dc334cebd7900a3189d4d899a51 --- /dev/null +++ b/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.html @@ -0,0 +1,10 @@ +<div + ng-if="routeParams.name" + af-api4="['Afform', 'get', {select: ['title'], where: [['name', '=', routeParams.name]]}, 0]" + af-api4-ctrl="api4"> + <h2>{{ ts('%1 Submissions', {1: api4.result.title || ts('Loading')}) }}</h2> +</div> +<div af-fieldset=""> + <crm-search-display-table search-name="AfAdmin_Submission_List" display-name="AfAdmin_Submission_List_Display" filters="{afform_name: routeParams.name}"> + </crm-search-display-table> +</div> diff --git a/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.json b/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.json new file mode 100644 index 0000000000000000000000000000000000000000..3e4fa2160daa9298064dd3144350b9408c402ec2 --- /dev/null +++ b/civicrm/ext/afform/admin/ang/afAdminFormSubmissionList.aff.json @@ -0,0 +1,6 @@ +{ + "type": "search", + "title": "Form Submissions", + "server_route": "civicrm/admin/afform/submissions", + "permission": "administer CiviCRM" +} diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html index 466f4bc2518d383767f311754502b85f15b97980..56ad2334c454a2a3df2758011da7827595a297d8 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html @@ -4,7 +4,7 @@ <label for="af_config_form_title"> {{:: ts('Title') }} <span class="crm-marker">*</span> </label> - <p class="help-block">{{:: ts('Public title (usually displayed at the top of the form).') }}</p> + <p class="help-block" ng-if=":: editor.afform.type !== 'block'">{{:: ts('Public title (usually displayed at the top of the form).') }}</p> <input ng-model="editor.afform.title" class="form-control" id="af_config_form_title" required title="{{:: ts('Required') }}" /> </div> @@ -17,7 +17,8 @@ <!-- Description is "semi-private": not generally public, but not audited for secrecy --> </div> - <div class="form-group"> + <!-- Form permissions do not apply to blocks --> + <div class="form-group" ng-if=":: editor.afform.type !== 'block'"> <label for="af_config_form_permission"> {{:: ts('Permission') }} </label> @@ -25,7 +26,8 @@ <p class="help-block">{{:: ts('What permission is required to use this form?') }}</p> </div> - <fieldset> + <!-- Placement options do not apply to blocks --> + <fieldset ng-if=":: editor.afform.type !== 'block'"> <legend>{{:: ts('Placement') }}</legend> <div class="form-group" ng-class="{'has-error': !!config_form.server_route.$error.pattern}"> @@ -84,8 +86,9 @@ <p class="help-block">{{:: ts('Choose which contact from the search should match the contact being viewed.') }}</p> </div> </fieldset> - <fieldset> + <!-- Submit actions are only applicable to form types with a submit button (exclude blocks and search forms) --> + <fieldset ng-if=":: editor.afform.type === 'custom'"> <legend>{{:: ts('Submit Actions') }}</legend> <div class="form-group" > diff --git a/civicrm/ext/afform/admin/info.xml b/civicrm/ext/afform/admin/info.xml index 843f8d8c1e6e7a2ce104273dd64ba396bfa10c77..ad7d916350a098e7aacc9295221dac59e462b249 100644 --- a/civicrm/ext/afform/admin/info.xml +++ b/civicrm/ext/afform/admin/info.xml @@ -1,28 +1,27 @@ <?xml version="1.0"?> <extension key="org.civicrm.afform_admin" type="module"> <file>afform_admin</file> - <name>Afform: Form Builder</name> - <description>GUI for designing forms</description> + <name>Form Builder</name> + <description>Administer, edit and compose dynamic forms</description> <license>AGPL-3.0</license> <maintainer> <author>Tim Otten</author> <email>totten@civicrm.org</email> </maintainer> <urls> - <url desc="Main Extension Page">http://FIXME</url> - <url desc="Documentation">http://FIXME</url> - <url desc="Support">http://FIXME</url> + <url desc="Chat">https://chat.civicrm.org/civicrm/channels/dev-afform</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>beta</develStage> <compatibility> <ver>5.23</ver> </compatibility> - <comments>Administer, edit and compose CiviCRM Afforms.</comments> + <comments>Form Builder provides a UI to administer and edit forms. It is an optional admin tool and not required for the forms to function.</comments> <requires> <ext>org.civicrm.afform</ext> + <ext>org.civicrm.search_kit</ext> </requires> <civix> <namespace>CRM/AfformAdmin</namespace> @@ -30,4 +29,9 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>ang-php@1.0.0</mixin> + <mixin>menu-xml@1.0.0</mixin> + <mixin>mgd-php@1.0.0</mixin> + </mixins> </extension> diff --git a/civicrm/ext/afform/admin/managed/FormSubmissionSavedSearch.mgd.php b/civicrm/ext/afform/admin/managed/FormSubmissionSavedSearch.mgd.php new file mode 100644 index 0000000000000000000000000000000000000000..bd6634a37e061174772670e067a6d1c5aec8f3d1 --- /dev/null +++ b/civicrm/ext/afform/admin/managed/FormSubmissionSavedSearch.mgd.php @@ -0,0 +1,104 @@ +<?php + +use CRM_AfformAdmin_ExtensionUtil as E; + +// This file declares a SavedSearch and SearchDisplay for viewing form submissions. +return [ + [ + 'name' => 'AfAdmin_Submission_List', + 'entity' => 'SavedSearch', + 'update' => 'unmodified', + 'cleanup' => 'unused', + 'params' => [ + 'version' => 4, + 'values' => [ + 'name' => 'AfAdmin_Submission_List', + 'label' => E::ts('Form Submissions'), + 'form_values' => NULL, + 'mapping_id' => NULL, + 'search_custom_id' => NULL, + 'api_entity' => 'AfformSubmission', + 'api_params' => [ + 'version' => 4, + 'select' => [ + 'id', + 'contact_id.display_name', + 'submission_date', + ], + ], + ], + ], + ], + [ + 'name' => 'AfAdmin_Submission_List_Display', + 'entity' => 'SearchDisplay', + 'update' => 'unmodified', + 'cleanup' => 'unused', + 'params' => [ + 'version' => 4, + 'values' => [ + 'name' => 'AfAdmin_Submission_List_Display', + 'label' => E::ts('Form Submissions Table'), + 'saved_search_id.name' => 'AfAdmin_Submission_List', + 'type' => 'table', + 'actions' => TRUE, + 'acl_bypass' => FALSE, + 'settings' => [ + 'actions' => TRUE, + 'limit' => 50, + 'classes' => [ + 'table', + 'table-striped', + ], + 'pager' => [ + 'show_count' => TRUE, + 'expose_limit' => TRUE, + ], + 'columns' => [ + [ + 'type' => 'field', + 'key' => 'id', + 'dataType' => 'Integer', + 'label' => E::ts('Id'), + 'sortable' => TRUE, + ], + [ + 'type' => 'field', + 'key' => 'contact_id.display_name', + 'dataType' => 'String', + 'label' => E::ts('Submitted by'), + 'sortable' => TRUE, + 'link' => [ + 'entity' => 'Contact', + 'action' => 'view', + 'join' => 'contact_id', + 'target' => '_blank', + ], + 'empty_value' => E::ts('Anonymous'), + 'cssRules' => [ + [ + 'disabled', + 'contact_id.display_name', + '=', + ], + ], + ], + [ + 'type' => 'field', + 'key' => 'submission_date', + 'dataType' => 'Timestamp', + 'label' => E::ts('Submission Date/Time'), + 'sortable' => TRUE, + ], + ], + 'sort' => [ + [ + 'submission_date', + 'ASC', + ], + ], + ], + ], + ], + ], +]; diff --git a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php index f7a7125f4beef75901dc525ee87d41a9aa5535f8..8d02738fe72e49698bcbec0ecf7a9e1162daf1e0 100644 --- a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php +++ b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php @@ -49,10 +49,9 @@ class CRM_Afform_AfformScanner { $mapper = CRM_Extension_System::singleton()->getMapper(); foreach ($mapper->getModules() as $module) { - /** @var $module CRM_Core_Module */ try { if ($module->is_active) { - $this->appendFilePaths($paths, dirname($mapper->keyToPath($module->name)) . DIRECTORY_SEPARATOR . 'ang', 20); + $this->appendFilePaths($paths, dirname($mapper->keyToPath($module->name)) . DIRECTORY_SEPARATOR . 'ang', $module->name); } } catch (CRM_Extension_Exception_MissingException $e) { @@ -60,7 +59,7 @@ class CRM_Afform_AfformScanner { } } - $this->appendFilePaths($paths, $this->getSiteLocalPath(), 10); + $this->appendFilePaths($paths, $this->getSiteLocalPath(), ''); $this->cache->set('afformAllPaths', $paths); return $paths; @@ -157,23 +156,19 @@ class CRM_Afform_AfformScanner { } /** - * Adds has_local & has_base to an afform metadata record + * Adds base_module, has_local & has_base to an afform metadata record * * @param array $record */ public function addComputedFields(&$record) { $name = $record['name']; - // Ex: $allPaths['viewIndividual'][0] == '/var/www/foo/afform/view-individual']. + // Ex: $allPaths['viewIndividual']['org.civicrm.foo'] == '/var/www/foo/afform/view-individual']. $allPaths = $this->findFilePaths()[$name] ?? []; - // $activeLayoutPath = $this->findFilePath($name, self::LAYOUT_FILE); - // $activeMetaPath = $this->findFilePath($name, self::METADATA_FILE); - $localLayoutPath = $this->createSiteLocalPath($name, self::LAYOUT_FILE); - $localMetaPath = $this->createSiteLocalPath($name, self::METADATA_FILE); - - $record['has_local'] = file_exists($localLayoutPath) || file_exists($localMetaPath); + // Empty string key refers to the site local path + $record['has_local'] = isset($allPaths['']); if (!isset($record['has_base'])) { - $record['has_base'] = ($record['has_local'] && count($allPaths) > 1) - || (!$record['has_local'] && count($allPaths) > 0); + $record['base_module'] = \CRM_Utils_Array::first(array_filter(array_keys($allPaths))); + $record['has_base'] = !empty($record['base_module']); } } @@ -211,16 +206,17 @@ class CRM_Afform_AfformScanner { * Ex: ['foo' => [0 => '/var/www/org.example.foobar/ang']] * @param string $parent * Ex: '/var/www/org.example.foobar/afform/' - * @param int $priority - * Lower priority files override higher priority files. + * @param string $module + * Name of module or '' empty string for local files. */ - private function appendFilePaths(&$formPaths, $parent, $priority) { + private function appendFilePaths(&$formPaths, $parent, $module) { $files = preg_grep(self::FILE_REGEXP, (array) glob("$parent/*")); foreach ($files as $file) { $fileBase = preg_replace(self::FILE_REGEXP, '', $file); $name = basename($fileBase); - $formPaths[$name][$priority] = $fileBase; + $formPaths[$name][$module] = $fileBase; + // Local files get top priority ksort($formPaths[$name]); } } diff --git a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php index 5b8bb9e7ddd49ff1e658cf363d9347f1554c8744..aceb38f6e85c8359980008405c85fe8fd2eaf1a2 100644 --- a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php +++ b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php @@ -18,8 +18,11 @@ class CRM_Afform_Page_AfformBase extends CRM_Core_Page { Civi::service('angularjs.loader') ->addModules([$afform['module_name'], 'afformStandalone']); - // If the user has "access civicrm" append home breadcrumb - if (CRM_Core_Permission::check('access CiviCRM')) { + $config = \CRM_Core_Config::singleton(); + $isFrontEndPage = $config->userSystem->isFrontEndPage(); + + // If the user has "access civicrm" append home breadcrumb, if not being shown on the front-end website + if (CRM_Core_Permission::check('access CiviCRM') && !$isFrontEndPage) { CRM_Utils_System::appendBreadCrumb([['title' => E::ts('CiviCRM'), 'url' => CRM_Utils_System::url('civicrm')]]); // If the user has "admin civicrm" & the admin extension is enabled if (CRM_Core_Permission::check('administer CiviCRM')) { @@ -38,7 +41,14 @@ class CRM_Afform_Page_AfformBase extends CRM_Core_Page { if (!empty($afform['title'])) { $title = strip_tags($afform['title']); CRM_Utils_System::setTitle($title); - CRM_Utils_System::appendBreadCrumb([['title' => $title, 'url' => CRM_Utils_System::url(implode('/', $pagePath)) . '#']]); + if (!$isFrontEndPage) { + CRM_Utils_System::appendBreadCrumb([ + [ + 'title' => $title, + 'url' => CRM_Utils_System::url(implode('/', $pagePath)) . '#', + ], + ]); + } } parent::run(); diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php index 629083e655d51b9f4af2c6e517d8756d626d8d9e..cfd32556cfd088e2e94695dc1740727151e621a5 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php @@ -17,7 +17,7 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { public function getRecords() { /** @var \CRM_Afform_AfformScanner $scanner */ $scanner = \Civi::service('afform_scanner'); - $getComputed = $this->_isFieldSelected('has_local', 'has_base'); + $getComputed = $this->_isFieldSelected('has_local', 'has_base', 'base_module'); $getLayout = $this->_isFieldSelected('layout'); $getSearchDisplays = $this->_isFieldSelected('search_displays'); $values = []; diff --git a/civicrm/ext/afform/core/Civi/Api4/Afform.php b/civicrm/ext/afform/core/Civi/Api4/Afform.php index 4e5f0c977f7085456137bbaa68c99f138b3f013d..c1f481e20dad70e673eb908f5181ac743f395f4d 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Afform.php +++ b/civicrm/ext/afform/core/Civi/Api4/Afform.php @@ -3,6 +3,7 @@ namespace Civi\Api4; use Civi\Api4\Generic\BasicBatchAction; +use Civi\Api4\Generic\BasicGetFieldsAction; /** * User-configurable forms. @@ -138,7 +139,7 @@ class Afform extends Generic\AbstractEntity { * @return Generic\BasicGetFieldsAction */ public static function getFields($checkPermissions = TRUE) { - return (new Generic\BasicGetFieldsAction('Afform', __FUNCTION__, function($self) { + return (new Generic\BasicGetFieldsAction('Afform', __FUNCTION__, function(BasicGetFieldsAction $self) { $fields = [ [ 'name' => 'name', @@ -222,14 +223,24 @@ class Afform extends Generic\AbstractEntity { 'name' => 'has_local', 'type' => 'Extra', 'data_type' => 'Boolean', + 'description' => 'Whether a local copy is saved on site', 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'has_base', 'type' => 'Extra', 'data_type' => 'Boolean', + 'description' => 'Is provided by an extension', 'readonly' => TRUE, ]; + $fields[] = [ + 'name' => 'base_module', + 'type' => 'Extra', + 'data_type' => 'String', + 'description' => 'Name of extension which provides this form', + 'readonly' => TRUE, + 'options' => $self->getLoadOptions() ? \CRM_Core_PseudoConstant::getExtensions() : TRUE, + ]; $fields[] = [ 'name' => 'search_displays', 'type' => 'Extra', diff --git a/civicrm/ext/afform/core/afform.civix.php b/civicrm/ext/afform/core/afform.civix.php index 1a10bb02d0842c71933393c86c4de5c4ed909b75..b33d0cce1b2bbf638c4ce114f5318b463d22c89d 100644 --- a/civicrm/ext/afform/core/afform.civix.php +++ b/civicrm/ext/afform/core/afform.civix.php @@ -107,19 +107,6 @@ function _afform_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _afform_civix_civicrm_xmlMenu(&$files) { - foreach (_afform_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _afform_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _afform_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _afform_civix_civicrm_managed(&$entities) { - $mgdFiles = _afform_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _afform_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_afform_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _afform_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _afform_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _afform_civix_civicrm_themes(&$themes) { - $files = _afform_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _afform_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _afform_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _afform_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index 2ecf7c854dc33b98ee908b12508392ddfd486ff0..daaa23b3e436c9475cb0aeee388011c1e6572b95 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -63,15 +63,6 @@ function afform_civicrm_config(&$config) { } } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function afform_civicrm_xmlMenu(&$files) { - _afform_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -135,8 +126,6 @@ function afform_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed */ function afform_civicrm_managed(&$entities) { - _afform_civix_civicrm_managed($entities); - /** @var \CRM_Afform_AfformScanner $scanner */ if (\Civi::container()->has('afform_scanner')) { $scanner = \Civi::service('afform_scanner'); @@ -273,8 +262,6 @@ function afform_civicrm_contactSummaryBlocks(&$blocks) { * Generate a list of Afform Angular modules. */ function afform_civicrm_angularModules(&$angularModules) { - _afform_civix_civicrm_angularModules($angularModules); - $afforms = \Civi\Api4\Afform::get(FALSE) ->setSelect(['name', 'requires', 'module_name', 'directive_name']) ->execute(); @@ -321,15 +308,6 @@ function _afform_get_partials($moduleName, $module) { ]; } -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function afform_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _afform_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -341,13 +319,6 @@ function afform_civicrm_entityTypes(&$entityTypes) { _afform_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function afform_civicrm_themes(&$themes) { - _afform_civix_civicrm_themes($themes); -} - /** * Implements hook_civicrm_buildAsset(). */ @@ -535,6 +506,72 @@ function afform_civicrm_pre($op, $entity, $id, &$params) { ->addWhere('search_displays', 'CONTAINS', $display['saved_search_id.name'] . ".{$display['name']}") ->execute(); } + // When deleting a savedSearch, delete any Afforms which use the default display + if ($entity === 'SearchDisplay' && $op === 'delete') { + $search = \Civi\Api4\SavedSearch::get(FALSE) + ->addSelect('name') + ->addWhere('id', '=', $id) + ->execute()->first(); + \Civi\Api4\Afform::revert(FALSE) + ->addWhere('search_displays', 'CONTAINS', $search['name']) + ->execute(); + } +} + +/** + * Implements hook_civicrm_referenceCounts(). + */ +function afform_civicrm_referenceCounts($dao, &$counts) { + // Count afforms which contain a search display + if (is_a($dao, 'CRM_Search_DAO_SearchDisplay') && $dao->id) { + if (empty($dao->saved_search_id) || empty($dao->name)) { + $dao->find(TRUE); + } + $search = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $dao->saved_search_id); + $afforms = \Civi\Api4\Afform::get(FALSE) + ->selectRowCount() + ->addWhere('search_displays', 'CONTAINS', "$search.$dao->name") + ->execute(); + if ($afforms->count()) { + $counts[] = [ + 'name' => 'Afform', + 'type' => 'Afform', + 'count' => $afforms->count(), + ]; + } + } + // Count afforms which contain any displays from a SavedSearch (including the default display) + elseif (is_a($dao, 'CRM_Contact_DAO_SavedSearch') && $dao->id) { + if (empty($dao->name)) { + $dao->find(TRUE); + } + $clauses = [ + ['search_displays', 'CONTAINS', $dao->name], + ]; + try { + $displays = civicrm_api4('SearchDisplay', 'get', [ + 'where' => [['saved_search_id', '=', $dao->id]], + 'select' => 'name', + ], ['name']); + foreach ($displays as $displayName) { + $clauses[] = ['search_displays', 'CONTAINS', $dao->name . '.' . $displayName]; + } + } + catch (Exception $e) { + // In case SearchKit is not installed, the api call would fail + } + $afforms = \Civi\Api4\Afform::get(FALSE) + ->selectRowCount() + ->addClause('OR', $clauses) + ->execute(); + if ($afforms->count()) { + $counts[] = [ + 'name' => 'Afform', + 'type' => 'Afform', + 'count' => $afforms->count(), + ]; + } + } } // Wordpress only: Register callback for rendering shortcodes diff --git a/civicrm/ext/afform/core/info.xml b/civicrm/ext/afform/core/info.xml index 32b9b4f16061ae7363f04bf880e9d716ffd418a7..8699f2cd3cccb67bfd668c7039ce13834aa07e6a 100644 --- a/civicrm/ext/afform/core/info.xml +++ b/civicrm/ext/afform/core/info.xml @@ -1,33 +1,32 @@ <?xml version="1.0"?> <extension key="org.civicrm.afform" type="module"> <file>afform</file> - <name>Afform: Core Runtime</name> - <description>Afform is the Affable Administrative AngularJS Form Framework</description> + <name>Form Core</name> + <description>Core functionality for rendering and processing dynamic forms</description> <license>AGPL-3.0</license> <maintainer> <author>CiviCRM LLC</author> <email>info@civicrm.org</email> </maintainer> <urls> - <url desc="Main Extension Page">http://FIXME</url> - <url desc="Documentation">http://FIXME</url> - <url desc="Support">http://FIXME</url> + <url desc="Chat">https://chat.civicrm.org/civicrm/channels/dev-afform</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>beta</develStage> <compatibility> <ver>5.23</ver> </compatibility> - <requires> - <ext version="~4.5">org.civicrm.api4</ext> - </requires> - <comments>Core functionality for CiviCRM Afforms</comments> + <comments>The Form Core extension is required to use any dynamic form. To administer and edit forms, also install the Form Builder extension.</comments> <civix> <namespace>CRM/Afform</namespace> </civix> <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>ang-php@1.0.0</mixin> + <mixin>mgd-php@1.0.0</mixin> + </mixins> </extension> diff --git a/civicrm/ext/afform/core/managed/AfformType.mgd.php b/civicrm/ext/afform/core/managed/AfformType.mgd.php index baeaccb8c6c4daf6ac9cabd3007e42141861e667..25da5682b7a8af7b867b73c6d6e3afa9ddf82918 100644 --- a/civicrm/ext/afform/core/managed/AfformType.mgd.php +++ b/civicrm/ext/afform/core/managed/AfformType.mgd.php @@ -17,11 +17,23 @@ $mgd = [ 'option_group_id' => 'afform_type', 'name' => 'form', 'value' => 'form', - 'label' => 'Custom Form', + 'label' => 'Submission Form', 'weight' => 0, 'icon' => 'fa-list-alt', ], ], + [ + 'name' => 'AfformType:search', + 'entity' => 'OptionValue', + 'params' => [ + 'option_group_id' => 'afform_type', + 'name' => 'search', + 'value' => 'search', + 'label' => 'Search Form', + 'weight' => 10, + 'icon' => 'fa-search', + ], + ], [ 'name' => 'AfformType:block', 'entity' => 'OptionValue', @@ -48,27 +60,4 @@ $mgd = [ ], ]; -try { - $search = civicrm_api3('Extension', 'getsingle', [ - 'full_name' => 'org.civicrm.search_kit', - ]); - if ($search['status'] === 'installed') { - $mgd[] = [ - 'name' => 'AfformType:search', - 'entity' => 'OptionValue', - 'params' => [ - 'option_group_id' => 'afform_type', - 'name' => 'search', - 'value' => 'search', - 'label' => 'Search Form', - 'weight' => 10, - 'icon' => 'fa-search', - ], - ]; - } -} -catch (Exception $e) { - // ¯\_(ツ)_/¯ -} - return $mgd; diff --git a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php index b8d0f9d8b08310035bcefa4a22d59a914eff522a..8be0dc3fb128d67f62df18e8983d8ad90b561b45 100644 --- a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php @@ -52,6 +52,7 @@ class AfformGetTest extends \PHPUnit\Framework\TestCase implements HeadlessInter $this->assertEquals($this->formName, $result['name']); $this->assertFalse($result['has_base']); $this->assertArrayNotHasKey('has_local', $result); + $this->assertArrayNotHasKey('base_module', $result); } public function testGetSearchDisplays() { diff --git a/civicrm/ext/afform/html/afform_html.civix.php b/civicrm/ext/afform/html/afform_html.civix.php index eb663989c5d5cc15005fce0f2b3d01beeca7f97a..8d7ccb562601ce2ff887754d26b6b5da5a4a6b61 100644 --- a/civicrm/ext/afform/html/afform_html.civix.php +++ b/civicrm/ext/afform/html/afform_html.civix.php @@ -107,19 +107,6 @@ function _afform_html_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _afform_html_civix_civicrm_xmlMenu(&$files) { - foreach (_afform_html_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _afform_html_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _afform_html_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _afform_html_civix_civicrm_managed(&$entities) { - $mgdFiles = _afform_html_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _afform_html_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_afform_html_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _afform_html_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _afform_html_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _afform_html_civix_civicrm_themes(&$themes) { - $files = _afform_html_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _afform_html_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _afform_html_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentI } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _afform_html_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/afform/html/afform_html.php b/civicrm/ext/afform/html/afform_html.php index 0b75ec68d24331ed5503deedac9045c9be24efc4..4410f3eb177f95b04b613c858e721bcdad182d3f 100644 --- a/civicrm/ext/afform/html/afform_html.php +++ b/civicrm/ext/afform/html/afform_html.php @@ -16,15 +16,6 @@ function afform_html_civicrm_config(&$config) { _afform_html_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function afform_html_civicrm_xmlMenu(&$files) { - _afform_html_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -79,54 +70,6 @@ function afform_html_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _afform_html_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function afform_html_civicrm_managed(&$entities) { - _afform_html_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function afform_html_civicrm_caseTypes(&$caseTypes) { - _afform_html_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules - */ -function afform_html_civicrm_angularModules(&$angularModules) { - _afform_html_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function afform_html_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _afform_html_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -137,10 +80,3 @@ function afform_html_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { function afform_html_civicrm_entityTypes(&$entityTypes) { _afform_html_civix_civicrm_entityTypes($entityTypes); } - -/** - * Implements hook_civicrm_themes(). - */ -function afform_html_civicrm_themes(&$themes) { - _afform_html_civix_civicrm_themes($themes); -} diff --git a/civicrm/ext/afform/html/info.xml b/civicrm/ext/afform/html/info.xml index d84a8defe7d5658c1201edf153c5fa94178e34bf..f95d91c663a77431c19b4b5ee9044255bc997b5c 100644 --- a/civicrm/ext/afform/html/info.xml +++ b/civicrm/ext/afform/html/info.xml @@ -1,21 +1,19 @@ <?xml version="1.0"?> <extension key="org.civicrm.afform-html" type="module"> <file>afform_html</file> - <name>Afform: HTML</name> - <description>Power-tool for editing Afform as HTML</description> + <name>Form Code Editor</name> + <description>Tool for developers to edit afform html code</description> <license>AGPL-3.0</license> <maintainer> <author>Tim Otten</author> <email>totten@civicrm.org</email> </maintainer> <urls> - <url desc="Main Extension Page">http://FIXME</url> - <url desc="Documentation">http://FIXME</url> - <url desc="Support">http://FIXME</url> + <url desc="Chat">https://chat.civicrm.org/civicrm/channels/dev-afform</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.23</ver> @@ -23,7 +21,10 @@ <requires> <ext>org.civicrm.afform</ext> </requires> - <comments>Code-based form editor for CiviCRM Afforms.</comments> + <comments>This extension is experimental and has limited functionality.</comments> + <mixins> + <mixin>ang-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/AfformHtml</namespace> </civix> diff --git a/civicrm/ext/afform/mock/afform_mock.civix.php b/civicrm/ext/afform/mock/afform_mock.civix.php index 37f78752702257a75f98d4039ee1eaf3d83f9c38..9714aef7d9ae22f0924ee0cf3651ec25a98a0640 100644 --- a/civicrm/ext/afform/mock/afform_mock.civix.php +++ b/civicrm/ext/afform/mock/afform_mock.civix.php @@ -107,19 +107,6 @@ function _afform_mock_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _afform_mock_civix_civicrm_xmlMenu(&$files) { - foreach (_afform_mock_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _afform_mock_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _afform_mock_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _afform_mock_civix_civicrm_managed(&$entities) { - $mgdFiles = _afform_mock_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _afform_mock_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_afform_mock_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _afform_mock_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _afform_mock_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _afform_mock_civix_civicrm_themes(&$themes) { - $files = _afform_mock_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _afform_mock_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _afform_mock_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentI } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _afform_mock_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/afform/mock/afform_mock.php b/civicrm/ext/afform/mock/afform_mock.php index 578aed00f9c9ec5d958793b1d1c9077b66edd3b9..3f6d87a1a9ad138f696c5c22eaca50e7545875f8 100644 --- a/civicrm/ext/afform/mock/afform_mock.php +++ b/civicrm/ext/afform/mock/afform_mock.php @@ -12,15 +12,6 @@ function afform_mock_civicrm_config(&$config) { _afform_mock_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function afform_mock_civicrm_xmlMenu(&$files) { - _afform_mock_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -75,54 +66,6 @@ function afform_mock_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _afform_mock_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function afform_mock_civicrm_managed(&$entities) { - _afform_mock_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function afform_mock_civicrm_caseTypes(&$caseTypes) { - _afform_mock_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules - */ -function afform_mock_civicrm_angularModules(&$angularModules) { - _afform_mock_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function afform_mock_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _afform_mock_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -133,10 +76,3 @@ function afform_mock_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { function afform_mock_civicrm_entityTypes(&$entityTypes) { _afform_mock_civix_civicrm_entityTypes($entityTypes); } - -/** - * Implements hook_civicrm_themes(). - */ -function afform_mock_civicrm_themes(&$themes) { - _afform_mock_civix_civicrm_themes($themes); -} diff --git a/civicrm/ext/afform/mock/info.xml b/civicrm/ext/afform/mock/info.xml index 2ccf1aaf1369229dc27625ec9acea031a9cd9603..1ce09ee40ad235a6104e4eb708ea6622fe27f72c 100644 --- a/civicrm/ext/afform/mock/info.xml +++ b/civicrm/ext/afform/mock/info.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <extension key="org.civicrm.afform-mock" type="module"> <file>afform_mock</file> - <name>Afform: Mock Form Collection</name> + <name>Mock Form Collection</name> <description>(DEVELOPMENT ONLY) List of example forms used for automated testing</description> <license>AGPL-3.0</license> <maintainer> @@ -9,13 +9,10 @@ <email>totten@civicrm.org</email> </maintainer> <urls> - <url desc="Main Extension Page">http://FIXME</url> - <url desc="Documentation">http://FIXME</url> - <url desc="Support">http://FIXME</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -27,6 +24,9 @@ <ext>org.civicrm.afform</ext> </requires> <comments>Examples and tests for CiviCRM Afforms.</comments> + <mixins> + <mixin>ang-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/AfformMock</namespace> </civix> diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php index ffb62766f81c29d801d5b2399e500813372b7d32..af4854f74e3b2c3cc5625f1418d279c532726e68 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php @@ -54,7 +54,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $message = 'The initial Afform.get should return default data'; $result = Civi\Api4\Afform::get() - ->addSelect('*', 'has_base', 'has_local') + ->addSelect('*', 'has_base', 'has_local', 'base_module') ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); @@ -65,6 +65,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $this->assertTrue(is_array($result[0]['layout']), $message); $this->assertEquals(TRUE, $get($result[0], 'has_base'), $message); $this->assertEquals(FALSE, $get($result[0], 'has_local'), $message); + $this->assertEquals('org.civicrm.afform-mock', $get($result[0], 'base_module'), $message); $message = 'After updating with Afform.create, the revised data should be returned'; $result = Civi\Api4\Afform::update() @@ -78,7 +79,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $message = 'After updating, the Afform.get API should return blended data'; $result = Civi\Api4\Afform::get() - ->addSelect('*', 'has_base', 'has_local') + ->addSelect('*', 'has_base', 'has_local', 'base_module') ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); @@ -89,11 +90,12 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $this->assertTrue(is_array($result[0]['layout']), $message); $this->assertEquals(TRUE, $get($result[0], 'has_base'), $message); $this->assertEquals(TRUE, $get($result[0], 'has_local'), $message); + $this->assertEquals('org.civicrm.afform-mock', $get($result[0], 'base_module'), $message); Civi\Api4\Afform::revert()->addWhere('name', '=', $formName)->execute(); $message = 'After reverting, the final Afform.get should return default data'; $result = Civi\Api4\Afform::get() - ->addSelect('*', 'has_base', 'has_local') + ->addSelect('*', 'has_base', 'has_local', 'base_module') ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); @@ -103,6 +105,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $this->assertTrue(is_array($result[0]['layout']), $message); $this->assertEquals(TRUE, $get($result[0], 'has_base'), $message); $this->assertEquals(FALSE, $get($result[0], 'has_local'), $message); + $this->assertEquals('org.civicrm.afform-mock', $get($result[0], 'base_module'), $message); } public function getFormatExamples() { diff --git a/civicrm/ext/authx/authx.civix.php b/civicrm/ext/authx/authx.civix.php index a1ab61ebe325a62639731e81822a1f9bdb3637cd..6a25c05c5c0e5bdf915e3c77cc0f0855ab433d62 100644 --- a/civicrm/ext/authx/authx.civix.php +++ b/civicrm/ext/authx/authx.civix.php @@ -107,19 +107,6 @@ function _authx_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _authx_civix_civicrm_xmlMenu(&$files) { - foreach (_authx_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _authx_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _authx_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_authx_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _authx_civix_civicrm_managed(&$entities) { - $mgdFiles = _authx_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _authx_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_authx_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _authx_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _authx_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _authx_civix_civicrm_themes(&$themes) { - $files = _authx_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _authx_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _authx_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _authx_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/authx/authx.php b/civicrm/ext/authx/authx.php index 95fd219557b8a725f4f1d7367051701f05f2b720..a30dcede14f054457e3081fee07acba6cf925dd7 100644 --- a/civicrm/ext/authx/authx.php +++ b/civicrm/ext/authx/authx.php @@ -85,15 +85,6 @@ function authx_civicrm_config(&$config) { _authx_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function authx_civicrm_xmlMenu(&$files) { - _authx_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -148,54 +139,6 @@ function authx_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _authx_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function authx_civicrm_managed(&$entities) { - _authx_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function authx_civicrm_caseTypes(&$caseTypes) { - _authx_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function authx_civicrm_angularModules(&$angularModules) { - _authx_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function authx_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _authx_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -207,13 +150,6 @@ function authx_civicrm_entityTypes(&$entityTypes) { _authx_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_thems(). - */ -function authx_civicrm_themes(&$themes) { - _authx_civix_civicrm_themes($themes); -} - /** * Implements hook_civicrm_permission(). * diff --git a/civicrm/ext/authx/info.xml b/civicrm/ext/authx/info.xml index 813a928ce4d03c9f754ce74282f09c5f4bc8d788..66339766c7ff959e1886621e45786b2ddc925758 100644 --- a/civicrm/ext/authx/info.xml +++ b/civicrm/ext/authx/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-02-11</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.0</ver> @@ -24,6 +24,10 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Authx</namespace> </civix> diff --git a/civicrm/ext/ckeditor4/ckeditor4.civix.php b/civicrm/ext/ckeditor4/ckeditor4.civix.php index aa0b6e5f490ceeb502828bb1c0373f49da380441..bb862286b56836f51e6b785381edfeb09c06c4d8 100644 --- a/civicrm/ext/ckeditor4/ckeditor4.civix.php +++ b/civicrm/ext/ckeditor4/ckeditor4.civix.php @@ -107,19 +107,6 @@ function _ckeditor4_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _ckeditor4_civix_civicrm_xmlMenu(&$files) { - foreach (_ckeditor4_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _ckeditor4_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _ckeditor4_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _ckeditor4_civix_civicrm_managed(&$entities) { - $mgdFiles = _ckeditor4_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _ckeditor4_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_ckeditor4_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _ckeditor4_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _ckeditor4_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _ckeditor4_civix_civicrm_themes(&$themes) { - $files = _ckeditor4_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _ckeditor4_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _ckeditor4_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _ckeditor4_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/ckeditor4/ckeditor4.php b/civicrm/ext/ckeditor4/ckeditor4.php index 1823176d607502ddbaacfdece649ac94f50ff41d..cdd366c94d683b76f9f30dbb9ecc32f33b724d32 100644 --- a/civicrm/ext/ckeditor4/ckeditor4.php +++ b/civicrm/ext/ckeditor4/ckeditor4.php @@ -14,15 +14,6 @@ function ckeditor4_civicrm_config(&$config) { _ckeditor4_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function ckeditor4_civicrm_xmlMenu(&$files) { - _ckeditor4_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,54 +68,6 @@ function ckeditor4_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _ckeditor4_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function ckeditor4_civicrm_managed(&$entities) { - _ckeditor4_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function ckeditor4_civicrm_caseTypes(&$caseTypes) { - _ckeditor4_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function ckeditor4_civicrm_angularModules(&$angularModules) { - _ckeditor4_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function ckeditor4_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _ckeditor4_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -136,13 +79,6 @@ function ckeditor4_civicrm_entityTypes(&$entityTypes) { _ckeditor4_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function ckeditor4_civicrm_themes(&$themes) { - _ckeditor4_civix_civicrm_themes($themes); -} - function ckeditor4_civicrm_buildForm($formName, $form) { if ($formName === 'CRM_Admin_Form_Preferences_Display') { $form->addElement( diff --git a/civicrm/ext/ckeditor4/info.xml b/civicrm/ext/ckeditor4/info.xml index 43ff09950ebbc83cbac76c81fbcad6916bf3edfc..82b465e0b502ac5be32aeac280bc4f4f022b5152 100644 --- a/civicrm/ext/ckeditor4/info.xml +++ b/civicrm/ext/ckeditor4/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">https://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-05-23</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <compatibility> <ver>5.39</ver> @@ -24,6 +24,9 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Ckeditor4</namespace> </civix> diff --git a/civicrm/ext/contributioncancelactions/contributioncancelactions.civix.php b/civicrm/ext/contributioncancelactions/contributioncancelactions.civix.php index 14754302b5f54cf1586fc4c671edea8815adc41c..7f1e9712e94929d92036d5f1ba1bf2b1152e4d76 100644 --- a/civicrm/ext/contributioncancelactions/contributioncancelactions.civix.php +++ b/civicrm/ext/contributioncancelactions/contributioncancelactions.civix.php @@ -107,19 +107,6 @@ function _contributioncancelactions_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _contributioncancelactions_civix_civicrm_xmlMenu(&$files) { - foreach (_contributioncancelactions_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _contributioncancelactions_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _contributioncancelactions_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_contributioncancelactions_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _contributioncancelactions_civix_civicrm_managed(&$entities) { - $mgdFiles = _contributioncancelactions_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _contributioncancelactions_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_contributioncancelactions_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _contributioncancelactions_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _contributioncancelactions_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _contributioncancelactions_civix_civicrm_themes(&$themes) { - $files = _contributioncancelactions_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _contributioncancelactions_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _contributioncancelactions_civix_fixNavigationMenuItems(&$nodes, &$maxN } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _contributioncancelactions_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/contributioncancelactions/info.xml b/civicrm/ext/contributioncancelactions/info.xml index 59a0941bbab14a90326964283d8be8379c13ca7a..87537548a7bce0ca06123a12064b96d9493c38a2 100644 --- a/civicrm/ext/contributioncancelactions/info.xml +++ b/civicrm/ext/contributioncancelactions/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-12</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <compatibility> <ver>5.32</ver> diff --git a/civicrm/ext/eventcart/eventcart.civix.php b/civicrm/ext/eventcart/eventcart.civix.php index 482ac73bf65eb5d652d272e64f04974250350969..bec41bc7f2e406f56470f5515f8b32ea5f1d44eb 100644 --- a/civicrm/ext/eventcart/eventcart.civix.php +++ b/civicrm/ext/eventcart/eventcart.civix.php @@ -107,19 +107,6 @@ function _eventcart_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _eventcart_civix_civicrm_xmlMenu(&$files) { - foreach (_eventcart_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _eventcart_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _eventcart_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_eventcart_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _eventcart_civix_civicrm_managed(&$entities) { - $mgdFiles = _eventcart_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _eventcart_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_eventcart_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _eventcart_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _eventcart_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _eventcart_civix_civicrm_themes(&$themes) { - $files = _eventcart_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _eventcart_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _eventcart_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _eventcart_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/eventcart/eventcart.php b/civicrm/ext/eventcart/eventcart.php index 9fac71ca9847e27b6fb7c668f2a725c48b602047..d160a35861ac025fc27bed03f88d736a8e50f91e 100644 --- a/civicrm/ext/eventcart/eventcart.php +++ b/civicrm/ext/eventcart/eventcart.php @@ -23,15 +23,6 @@ function eventcart_civicrm_config(&$config) { _eventcart_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function eventcart_civicrm_xmlMenu(&$files) { - _eventcart_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -86,41 +77,6 @@ function eventcart_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _eventcart_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function eventcart_civicrm_managed(&$entities) { - _eventcart_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function eventcart_civicrm_angularModules(&$angularModules) { - _eventcart_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function eventcart_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _eventcart_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/eventcart/info.xml b/civicrm/ext/eventcart/info.xml index ee2bbbdd7b0a7a17a3a2e96f4379b60c311cf73f..b96c2dc233c5b50b613e4f800f5e600edf330866 100644 --- a/civicrm/ext/eventcart/info.xml +++ b/civicrm/ext/eventcart/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-03</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -24,6 +24,10 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Event/Cart</namespace> </civix> diff --git a/civicrm/ext/ewaysingle/ewaysingle.civix.php b/civicrm/ext/ewaysingle/ewaysingle.civix.php index 2a71b5bdba5e8175ea318d925b33022d40ae3ecc..474030a1c24a82dd3f826d1c55f631aba03d4986 100644 --- a/civicrm/ext/ewaysingle/ewaysingle.civix.php +++ b/civicrm/ext/ewaysingle/ewaysingle.civix.php @@ -107,19 +107,6 @@ function _ewaysingle_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _ewaysingle_civix_civicrm_xmlMenu(&$files) { - foreach (_ewaysingle_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _ewaysingle_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _ewaysingle_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_ewaysingle_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _ewaysingle_civix_civicrm_managed(&$entities) { - $mgdFiles = _ewaysingle_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _ewaysingle_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_ewaysingle_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _ewaysingle_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _ewaysingle_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _ewaysingle_civix_civicrm_themes(&$themes) { - $files = _ewaysingle_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _ewaysingle_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _ewaysingle_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _ewaysingle_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/ewaysingle/ewaysingle.php b/civicrm/ext/ewaysingle/ewaysingle.php index d3f2932d6a0055830a04eb6bba385033db101782..9347754258e714a66d9846e667d16f6b05dfe596 100644 --- a/civicrm/ext/ewaysingle/ewaysingle.php +++ b/civicrm/ext/ewaysingle/ewaysingle.php @@ -14,15 +14,6 @@ function ewaysingle_civicrm_config(&$config) { _ewaysingle_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function ewaysingle_civicrm_xmlMenu(&$files) { - _ewaysingle_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,54 +68,6 @@ function ewaysingle_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _ewaysingle_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function ewaysingle_civicrm_managed(&$entities) { - _ewaysingle_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function ewaysingle_civicrm_caseTypes(&$caseTypes) { - _ewaysingle_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function ewaysingle_civicrm_angularModules(&$angularModules) { - _ewaysingle_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function ewaysingle_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _ewaysingle_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -136,13 +79,6 @@ function ewaysingle_civicrm_entityTypes(&$entityTypes) { _ewaysingle_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_thems(). - */ -function ewaysingle_civicrm_themes(&$themes) { - _ewaysingle_civix_civicrm_themes($themes); -} - // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/civicrm/ext/ewaysingle/info.xml b/civicrm/ext/ewaysingle/info.xml index 0570d5ed4f8814d851c7896de9d7615cbf9d4233..aceb71e688fd1fb22965040979bd57350bdac266 100644 --- a/civicrm/ext/ewaysingle/info.xml +++ b/civicrm/ext/ewaysingle/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-07</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -27,6 +27,9 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>mgd-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Ewaysingle</namespace> </civix> diff --git a/civicrm/ext/financialacls/financialacls.civix.php b/civicrm/ext/financialacls/financialacls.civix.php index 2f5da65961871ba28bb8e0f1a97a376226fa9aa2..d9ade0d325f3c50c1ddfcf8f02cc1153fb141cb0 100644 --- a/civicrm/ext/financialacls/financialacls.civix.php +++ b/civicrm/ext/financialacls/financialacls.civix.php @@ -107,19 +107,6 @@ function _financialacls_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _financialacls_civix_civicrm_xmlMenu(&$files) { - foreach (_financialacls_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _financialacls_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _financialacls_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_financialacls_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _financialacls_civix_civicrm_managed(&$entities) { - $mgdFiles = _financialacls_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _financialacls_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_financialacls_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _financialacls_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _financialacls_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _financialacls_civix_civicrm_themes(&$themes) { - $files = _financialacls_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _financialacls_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _financialacls_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $paren } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _financialacls_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/financialacls/financialacls.php b/civicrm/ext/financialacls/financialacls.php index c36fcdc0ac26cc7ed8bb11a73207d6a9c9b86b2e..bbbbd9c52f3d9bf64a14f506df934faae29c2f77 100644 --- a/civicrm/ext/financialacls/financialacls.php +++ b/civicrm/ext/financialacls/financialacls.php @@ -23,15 +23,6 @@ function financialacls_civicrm_container($container) { $dispatcherDefn->addMethodCall('addListener', ['civi.api4.authorizeRecord::Contribution', '_financialacls_civi_api4_authorizeContribution']); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function financialacls_civicrm_xmlMenu(&$files) { - _financialacls_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -86,54 +77,6 @@ function financialacls_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _financialacls_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function financialacls_civicrm_managed(&$entities) { - _financialacls_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function financialacls_civicrm_caseTypes(&$caseTypes) { - _financialacls_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function financialacls_civicrm_angularModules(&$angularModules) { - _financialacls_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function financialacls_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _financialacls_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -145,13 +88,6 @@ function financialacls_civicrm_entityTypes(&$entityTypes) { _financialacls_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_thems(). - */ -function financialacls_civicrm_themes(&$themes) { - _financialacls_civix_civicrm_themes($themes); -} - /** * Intervene to prevent deletion, where permissions block it. * diff --git a/civicrm/ext/financialacls/info.xml b/civicrm/ext/financialacls/info.xml index 9b745b12bb6ed0899a9cc0c10e16eeb234966140..442c9dbd42cb867eb9f3dd02215915adf70b442e 100644 --- a/civicrm/ext/financialacls/info.xml +++ b/civicrm/ext/financialacls/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-27</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <compatibility> <ver>5.30</ver> @@ -27,6 +27,9 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Financialacls</namespace> </civix> diff --git a/civicrm/ext/flexmailer/flexmailer.civix.php b/civicrm/ext/flexmailer/flexmailer.civix.php index 9fb3aa28e31cedc92717cba31543abeddf0e689e..0935d49cc32fd53f7720e5f6459da168a3a6b241 100644 --- a/civicrm/ext/flexmailer/flexmailer.civix.php +++ b/civicrm/ext/flexmailer/flexmailer.civix.php @@ -107,19 +107,6 @@ function _flexmailer_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _flexmailer_civix_civicrm_xmlMenu(&$files) { - foreach (_flexmailer_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _flexmailer_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array(string) - */ -function _flexmailer_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_flexmailer_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _flexmailer_civix_civicrm_managed(&$entities) { - $mgdFiles = _flexmailer_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _flexmailer_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_flexmailer_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _flexmailer_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _flexmailer_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _flexmailer_civix_civicrm_themes(&$themes) { - $files = _flexmailer_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array, possibly empty - */ -function _flexmailer_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _flexmailer_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _flexmailer_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/flexmailer/flexmailer.php b/civicrm/ext/flexmailer/flexmailer.php index f8850486f760a282c6ca2caddb5c387a8f6d510c..bf3047f4276d1305a6ef3fc1370816a4321d6610 100644 --- a/civicrm/ext/flexmailer/flexmailer.php +++ b/civicrm/ext/flexmailer/flexmailer.php @@ -23,15 +23,6 @@ function flexmailer_civicrm_config(&$config) { _flexmailer_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function flexmailer_civicrm_xmlMenu(&$files) { - _flexmailer_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -86,41 +77,6 @@ function flexmailer_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _flexmailer_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function flexmailer_civicrm_managed(&$entities) { - _flexmailer_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function flexmailer_civicrm_angularModules(&$angularModules) { - _flexmailer_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function flexmailer_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _flexmailer_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_navigationMenu(). * diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml index 5cc0b8f3dda2df26aa2fccb075dccaa089cd80bc..96c5f03dd2e018a321a860130c323a7b3f1aa2c7 100644 --- a/civicrm/ext/flexmailer/info.xml +++ b/civicrm/ext/flexmailer/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-05</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <comments> FlexMailer is an email delivery engine which replaces the internal guts @@ -28,6 +28,10 @@ <classloader> <psr4 prefix="Civi\FlexMailer\" path="src"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Flexmailer</namespace> </civix> diff --git a/civicrm/ext/greenwich/greenwich.civix.php b/civicrm/ext/greenwich/greenwich.civix.php index 45a6619d008ccae49d3b9e3ebab4f7c0e004a7a8..a1903f1e9080d0accca211a24a4ba0017ecc7469 100644 --- a/civicrm/ext/greenwich/greenwich.civix.php +++ b/civicrm/ext/greenwich/greenwich.civix.php @@ -107,19 +107,6 @@ function _greenwich_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _greenwich_civix_civicrm_xmlMenu(&$files) { - foreach (_greenwich_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _greenwich_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _greenwich_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_greenwich_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _greenwich_civix_civicrm_managed(&$entities) { - $mgdFiles = _greenwich_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _greenwich_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_greenwich_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _greenwich_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _greenwich_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _greenwich_civix_civicrm_themes(&$themes) { - $files = _greenwich_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _greenwich_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _greenwich_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _greenwich_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/greenwich/greenwich.php b/civicrm/ext/greenwich/greenwich.php index 3f4ffc0b89f8b7a237395c7db0d892494c87bdad..5a0fa917ad239182e522c1aed993eff0d503323d 100644 --- a/civicrm/ext/greenwich/greenwich.php +++ b/civicrm/ext/greenwich/greenwich.php @@ -14,29 +14,10 @@ function greenwich_civicrm_config(&$config) { _greenwich_civix_civicrm_config($config); } -///** -// * Implements hook_civicrm_xmlMenu(). -// * -// * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu -// */ -//function greenwich_civicrm_xmlMenu(&$files) { -// _greenwich_civix_civicrm_xmlMenu($files); -//} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function greenwich_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _greenwich_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_themes(). */ function greenwich_civicrm_themes(&$themes) { - // _greenwich_civix_civicrm_themes($themes); $themes['greenwich'] = [ 'ext' => 'civicrm', 'title' => 'Greenwich', diff --git a/civicrm/ext/greenwich/info.xml b/civicrm/ext/greenwich/info.xml index 670b661fcf3808bb5f3ece1feb7cb3dfad67a44a..99aeea03a501ed5c866ebe841542bc8598bea615 100644 --- a/civicrm/ext/greenwich/info.xml +++ b/civicrm/ext/greenwich/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-07-21</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/legacycustomsearches/info.xml b/civicrm/ext/legacycustomsearches/info.xml index 0cc4ae20552e9b9ecd9e46bb366961c877d9b37c..6e062e80983cf611edaaef26858cee87688a21e2 100644 --- a/civicrm/ext/legacycustomsearches/info.xml +++ b/civicrm/ext/legacycustomsearches/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-07-25</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <tags> <tag>mgmt:hidden</tag> @@ -28,6 +28,9 @@ <psr0 prefix="CRM_" path=""/> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Legacycustomsearches</namespace> </civix> diff --git a/civicrm/ext/legacycustomsearches/legacycustomsearches.civix.php b/civicrm/ext/legacycustomsearches/legacycustomsearches.civix.php index b1a7c1b60fac33a01c5c023e6abf3162d66576b2..25b8eb3f5a61b5135ab46c12b9d2cf4efde30fd1 100644 --- a/civicrm/ext/legacycustomsearches/legacycustomsearches.civix.php +++ b/civicrm/ext/legacycustomsearches/legacycustomsearches.civix.php @@ -107,19 +107,6 @@ function _legacycustomsearches_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _legacycustomsearches_civix_civicrm_xmlMenu(&$files) { - foreach (_legacycustomsearches_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _legacycustomsearches_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _legacycustomsearches_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _legacycustomsearches_civix_civicrm_managed(&$entities) { - $mgdFiles = _legacycustomsearches_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _legacycustomsearches_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_legacycustomsearches_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _legacycustomsearches_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _legacycustomsearches_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _legacycustomsearches_civix_civicrm_themes(&$themes) { - $files = _legacycustomsearches_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _legacycustomsearches_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _legacycustomsearches_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _legacycustomsearches_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/legacycustomsearches/legacycustomsearches.php b/civicrm/ext/legacycustomsearches/legacycustomsearches.php index 1f61ff622450171cb6c57c2352126372b485230c..2213da60d38bdf0a04adbc7a4c07458ea6b4c1af 100644 --- a/civicrm/ext/legacycustomsearches/legacycustomsearches.php +++ b/civicrm/ext/legacycustomsearches/legacycustomsearches.php @@ -14,15 +14,6 @@ function legacycustomsearches_civicrm_config(&$config) { _legacycustomsearches_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function legacycustomsearches_civicrm_xmlMenu(&$files) { - _legacycustomsearches_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,54 +68,6 @@ function legacycustomsearches_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL return _legacycustomsearches_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function legacycustomsearches_civicrm_managed(&$entities) { - _legacycustomsearches_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function legacycustomsearches_civicrm_caseTypes(&$caseTypes) { - _legacycustomsearches_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function legacycustomsearches_civicrm_angularModules(&$angularModules) { - _legacycustomsearches_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function legacycustomsearches_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _legacycustomsearches_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -136,13 +79,6 @@ function legacycustomsearches_civicrm_entityTypes(&$entityTypes) { _legacycustomsearches_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function legacycustomsearches_civicrm_themes(&$themes) { - _legacycustomsearches_civix_civicrm_themes($themes); -} - // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/FullText.tpl b/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/FullText.tpl index 7c12f721ccdcce40a900006fc84764891c939450..d720d1843c9e89ab76a71d15477ce7d1a4e4fa80 100644 --- a/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/FullText.tpl +++ b/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/FullText.tpl @@ -35,7 +35,7 @@ {/if} {* @TODO: This is confusing - the variable `table` is already set and used above, and now we set it again to something that is technically different but has the same value, except on a blank form where it doesn't exist, but effectively then is the same value that it already has which is ''. So do we need this line even? *} -{if (isset($form.table.value.0))}{assign var=table value=$form.table.value.0}{/if} +{if $form.table.value && (array_key_exists(0, $form.table.value))}{assign var=table value=$form.table.value.0}{/if} {assign var=text value=$form.text.value} {if !empty($summary.Contact) } <div class="section"> diff --git a/civicrm/ext/message_admin/info.xml b/civicrm/ext/message_admin/info.xml index cd4e9a2d9f09929557f25b663847e8e31fc48b7a..127c6ef1b279b34f25e7f827b4ed948f3af6970d 100644 --- a/civicrm/ext/message_admin/info.xml +++ b/civicrm/ext/message_admin/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-06-12</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -30,6 +30,10 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>ang-php@1.0.0</mixin> + <mixin>menu-xml@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/MessageAdmin</namespace> </civix> diff --git a/civicrm/ext/message_admin/message_admin.civix.php b/civicrm/ext/message_admin/message_admin.civix.php index d030462a2f4e1769dcd7bd8dfd45d6a34400de9c..3de3912c36558772205430f42214e5b313a62d87 100644 --- a/civicrm/ext/message_admin/message_admin.civix.php +++ b/civicrm/ext/message_admin/message_admin.civix.php @@ -107,19 +107,6 @@ function _message_admin_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _message_admin_civix_civicrm_xmlMenu(&$files) { - foreach (_message_admin_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _message_admin_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _message_admin_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _message_admin_civix_civicrm_managed(&$entities) { - $mgdFiles = _message_admin_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _message_admin_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_message_admin_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _message_admin_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _message_admin_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _message_admin_civix_civicrm_themes(&$themes) { - $files = _message_admin_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _message_admin_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _message_admin_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $paren } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _message_admin_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/message_admin/message_admin.php b/civicrm/ext/message_admin/message_admin.php index 851e1fac483d4e0b6c95c41e8be46cbb91efa262..9135d05bec1d2d6d477384642e232fa865595521 100644 --- a/civicrm/ext/message_admin/message_admin.php +++ b/civicrm/ext/message_admin/message_admin.php @@ -14,15 +14,6 @@ function message_admin_civicrm_config(&$config) { _message_admin_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function message_admin_civicrm_xmlMenu(&$files) { - _message_admin_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,54 +68,6 @@ function message_admin_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _message_admin_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function message_admin_civicrm_managed(&$entities) { - _message_admin_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function message_admin_civicrm_caseTypes(&$caseTypes) { - _message_admin_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function message_admin_civicrm_angularModules(&$angularModules) { - _message_admin_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function message_admin_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _message_admin_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -136,13 +79,6 @@ function message_admin_civicrm_entityTypes(&$entityTypes) { _message_admin_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function message_admin_civicrm_themes(&$themes) { - _message_admin_civix_civicrm_themes($themes); -} - // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/civicrm/ext/oauth-client/info.xml b/civicrm/ext/oauth-client/info.xml index 84e87df2378d8004b71b291cbdf78f77a75252b5..c658da0411a33bcd758da6f7ef9caff1cdff5f5a 100644 --- a/civicrm/ext/oauth-client/info.xml +++ b/civicrm/ext/oauth-client/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-23</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <compatibility> <ver>5.38</ver> @@ -29,6 +29,11 @@ <psr4 prefix="Civi\" path="Civi"/> </classloader> <upgrader>CRM_OAuth_Upgrader</upgrader> + <mixins> + <mixin>ang-php@1.0.0</mixin> + <mixin>menu-xml@1.0.0</mixin> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/OAuth</namespace> </civix> diff --git a/civicrm/ext/oauth-client/oauth_client.civix.php b/civicrm/ext/oauth-client/oauth_client.civix.php index 0347786a07a057c5ac4584d938cb7bfcd2c72168..f4fc3b04680b0b0cae0b4711363c39d34ad20094 100644 --- a/civicrm/ext/oauth-client/oauth_client.civix.php +++ b/civicrm/ext/oauth-client/oauth_client.civix.php @@ -107,19 +107,6 @@ function _oauth_client_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _oauth_client_civix_civicrm_xmlMenu(&$files) { - foreach (_oauth_client_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _oauth_client_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _oauth_client_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _oauth_client_civix_civicrm_managed(&$entities) { - $mgdFiles = _oauth_client_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _oauth_client_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_oauth_client_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _oauth_client_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _oauth_client_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _oauth_client_civix_civicrm_themes(&$themes) { - $files = _oauth_client_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _oauth_client_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _oauth_client_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parent } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _oauth_client_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/oauth-client/oauth_client.php b/civicrm/ext/oauth-client/oauth_client.php index 91bd0f85e534f42beb65eb7d2d7d82755b4dc0d3..a4d6e1592d4f2c1e35e4525485c995021dfdd27d 100644 --- a/civicrm/ext/oauth-client/oauth_client.php +++ b/civicrm/ext/oauth-client/oauth_client.php @@ -14,27 +14,6 @@ function oauth_client_civicrm_config(&$config) { _oauth_client_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function oauth_client_civicrm_xmlMenu(&$files) { - _oauth_client_civix_civicrm_xmlMenu($files); -} - -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function oauth_client_civicrm_managed(&$entities) { - _oauth_client_civix_civicrm_managed($entities); -} - /** * Implements hook_civicrm_permission(). * @@ -65,42 +44,6 @@ function oauth_client_civicrm_permission(&$permissions) { ]; } -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function oauth_client_civicrm_caseTypes(&$caseTypes) { - _oauth_client_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function oauth_client_civicrm_angularModules(&$angularModules) { - _oauth_client_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function oauth_client_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _oauth_client_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -112,13 +55,6 @@ function oauth_client_civicrm_entityTypes(&$entityTypes) { _oauth_client_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_thems(). - */ -function oauth_client_civicrm_themes(&$themes) { - _oauth_client_civix_civicrm_themes($themes); -} - // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/civicrm/ext/payflowpro/info.xml b/civicrm/ext/payflowpro/info.xml index f89c18b8f2bb88a85a37bc1e8855f59a08419ec3..d265573a97e1d28ec612357b14f6a060498e2325 100644 --- a/civicrm/ext/payflowpro/info.xml +++ b/civicrm/ext/payflowpro/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-13</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>stable</develStage> <compatibility> <ver>5.0</ver> @@ -24,6 +24,9 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>mgd-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Payflowpro</namespace> </civix> diff --git a/civicrm/ext/payflowpro/payflowpro.civix.php b/civicrm/ext/payflowpro/payflowpro.civix.php index 5a368a27114cc12d18dd0ddd89a9341b3efd6644..981716e9d649b29cb3d41b777bd1c5be80a92756 100644 --- a/civicrm/ext/payflowpro/payflowpro.civix.php +++ b/civicrm/ext/payflowpro/payflowpro.civix.php @@ -107,19 +107,6 @@ function _payflowpro_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _payflowpro_civix_civicrm_xmlMenu(&$files) { - foreach (_payflowpro_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _payflowpro_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _payflowpro_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_payflowpro_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _payflowpro_civix_civicrm_managed(&$entities) { - $mgdFiles = _payflowpro_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _payflowpro_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_payflowpro_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _payflowpro_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _payflowpro_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _payflowpro_civix_civicrm_themes(&$themes) { - $files = _payflowpro_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _payflowpro_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _payflowpro_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _payflowpro_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/payflowpro/payflowpro.php b/civicrm/ext/payflowpro/payflowpro.php index 68dc914e2e919a212123fb2cc4918f7b0c7ed4fc..e4f8cd8ab7aa0bdcdb6a5e5f5b4e2b205fefb83e 100644 --- a/civicrm/ext/payflowpro/payflowpro.php +++ b/civicrm/ext/payflowpro/payflowpro.php @@ -14,15 +14,6 @@ function payflowpro_civicrm_config(&$config) { _payflowpro_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function payflowpro_civicrm_xmlMenu(&$files) { - _payflowpro_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,54 +68,6 @@ function payflowpro_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _payflowpro_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function payflowpro_civicrm_managed(&$entities) { - _payflowpro_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_caseTypes(). - * - * Generate a list of case-types. - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function payflowpro_civicrm_caseTypes(&$caseTypes) { - _payflowpro_civix_civicrm_caseTypes($caseTypes); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function payflowpro_civicrm_angularModules(&$angularModules) { - _payflowpro_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function payflowpro_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _payflowpro_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -136,13 +79,6 @@ function payflowpro_civicrm_entityTypes(&$entityTypes) { _payflowpro_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function payflowpro_civicrm_themes(&$themes) { - _payflowpro_civix_civicrm_themes($themes); -} - // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml index 6504c7968072c23649fd5debb19f39f77ce06648..12f98f4934097ad82db6f22942bbd2620d964fa7 100644 --- a/civicrm/ext/recaptcha/info.xml +++ b/civicrm/ext/recaptcha/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-03</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -24,6 +24,10 @@ <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> + <mixins> + <mixin>menu-xml@1.0.0</mixin> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Recaptcha</namespace> </civix> diff --git a/civicrm/ext/recaptcha/recaptcha.civix.php b/civicrm/ext/recaptcha/recaptcha.civix.php index 53696864e20c440fcfc73b19da54ad4c3c1fb499..3b0feb388075b8b465eead4a910e6169a222ad06 100644 --- a/civicrm/ext/recaptcha/recaptcha.civix.php +++ b/civicrm/ext/recaptcha/recaptcha.civix.php @@ -107,19 +107,6 @@ function _recaptcha_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _recaptcha_civix_civicrm_xmlMenu(&$files) { - foreach (_recaptcha_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,160 +204,6 @@ function _recaptcha_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _recaptcha_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_recaptcha_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _recaptcha_civix_civicrm_managed(&$entities) { - $mgdFiles = _recaptcha_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _recaptcha_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_recaptcha_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _recaptcha_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _recaptcha_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _recaptcha_civix_civicrm_themes(&$themes) { - $files = _recaptcha_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _recaptcha_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -453,18 +286,6 @@ function _recaptcha_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _recaptcha_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/recaptcha/recaptcha.php b/civicrm/ext/recaptcha/recaptcha.php index 9cad89a71c7498de787295fbac63e5ae8ea2dd90..467ff84cc6f46a1ae392521d4ec56dce71b60d1b 100644 --- a/civicrm/ext/recaptcha/recaptcha.php +++ b/civicrm/ext/recaptcha/recaptcha.php @@ -14,15 +14,6 @@ function recaptcha_civicrm_config(&$config) { _recaptcha_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function recaptcha_civicrm_xmlMenu(&$files) { - _recaptcha_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -77,41 +68,6 @@ function recaptcha_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _recaptcha_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function recaptcha_civicrm_managed(&$entities) { - _recaptcha_civix_civicrm_managed($entities); -} - -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function recaptcha_civicrm_angularModules(&$angularModules) { - _recaptcha_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function recaptcha_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _recaptcha_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/search_kit/CRM/Search/Upgrader.php b/civicrm/ext/search_kit/CRM/Search/Upgrader.php index 523425c5223796793cc2a8d6d8c3ca9cbf8b6322..321ed4cc8274e74e9289dc45c6b588eb9417eb34 100644 --- a/civicrm/ext/search_kit/CRM/Search/Upgrader.php +++ b/civicrm/ext/search_kit/CRM/Search/Upgrader.php @@ -18,7 +18,7 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { ->addValue('icon', 'crm-i fa-search-plus') ->addValue('has_separator', 2) ->addValue('weight', 99) - ->addValue('permission', 'administer CiviCRM data') + ->addValue('permission', ['administer CiviCRM data']) ->execute(); } @@ -155,6 +155,32 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { return TRUE; } + /** + * Upgrade 1006 - add image column type + * @return bool + */ + public function upgrade_1006(): bool { + $this->ctx->log->info('Applying update 1006 - add image column type.'); + $displays = \Civi\Api4\SearchDisplay::get(FALSE) + ->setSelect(['id', 'settings']) + ->execute(); + foreach ($displays as $display) { + $update = FALSE; + foreach ($display['settings']['columns'] ?? [] as $c => $column) { + if (!empty($column['image'])) { + $display['settings']['columns'][$c]['type'] = 'image'; + $update = TRUE; + } + } + if ($update) { + \Civi\Api4\SearchDisplay::update(FALSE) + ->setValues($display) + ->execute(); + } + } + return TRUE; + } + /** * Add a column to a table if it doesn't already exist * diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php index fb0e91e93183ba2f514db30590cd419c4f96a118..e49b718f73943674d78657cb39afa7893639bd36 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php @@ -4,6 +4,7 @@ namespace Civi\Api4\Action\SearchDisplay; use Civi\API\Exception\UnauthorizedException; use Civi\Api4\Generic\Traits\ArrayQueryActionTrait; +use Civi\Api4\Query\SqlField; use Civi\Api4\SearchDisplay; use Civi\Api4\Utils\CoreUtil; @@ -153,10 +154,38 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { return \CRM_Core_Session::getLoggedInContactID(); default: + if (!empty($data[$key])) { + $item = $this->getSelectExpression($key); + if ($item['expr'] instanceof SqlField && $item['fields'][0]['fk_entity'] === 'File') { + return $this->generateFileUrl($data[$key]); + } + } return $data[$key] ?? NULL; } } + /** + * Convert file id to a readable url + * + * @param $fileID + * @return string + * @throws \CRM_Core_Exception + */ + private function generateFileUrl($fileID) { + $entityId = \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_EntityFile', + $fileID, + 'entity_id', + 'file_id' + ); + $fileHash = \CRM_Core_BAO_File::generateFileHash($entityId, $fileID); + return $this->getUrl('civicrm/file', [ + 'reset' => 1, + 'id' => $fileID, + 'eid' => $entityId, + 'fcs' => $fileHash, + ]); + } + /** * @param $column * @param $data @@ -167,22 +196,19 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $out = []; switch ($column['type']) { case 'field': - if (isset($column['image']) && is_array($column['image'])) { - $out['img'] = $this->formatImage($column, $data); - $out['val'] = $this->replaceTokens($column['image']['alt'] ?? NULL, $data, 'view'); + $rawValue = $data[$column['key']] ?? NULL; + if (!$this->hasValue($rawValue) && isset($column['empty_value'])) { + $out['val'] = $this->replaceTokens($column['empty_value'], $data, 'view'); } elseif ($column['rewrite']) { $out['val'] = $this->replaceTokens($column['rewrite'], $data, 'view'); } else { - $out['val'] = $this->formatViewValue($column['key'], $data[$column['key']] ?? NULL); + $out['val'] = $this->formatViewValue($column['key'], $rawValue); } if ($this->hasValue($column['label']) && (!empty($column['forceLabel']) || $this->hasValue($out['val']))) { $out['label'] = $this->replaceTokens($column['label'], $data, 'view'); } - if (isset($column['title']) && strlen($column['title'])) { - $out['title'] = $this->replaceTokens($column['title'], $data, 'view'); - } if (!empty($column['link'])) { $links = $this->formatFieldLinks($column, $data, $out['val']); if ($links) { @@ -197,12 +223,32 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { } break; + case 'image': + $out['img'] = $this->formatImage($column, $data); + if ($out['img']) { + $out['val'] = $this->replaceTokens($column['image']['alt'] ?? NULL, $data, 'view'); + } + if ($this->hasValue($column['label']) && (!empty($column['forceLabel']) || $out['img'])) { + $out['label'] = $this->replaceTokens($column['label'], $data, 'view'); + } + if (!empty($column['link'])) { + $links = $this->formatFieldLinks($column, $data, ''); + if ($links) { + $out['links'] = $links; + } + } + break; + case 'links': case 'buttons': case 'menu': $out = $this->formatLinksColumn($column, $data); break; } + // Format tooltip + if (isset($column['title']) && strlen($column['title'])) { + $out['title'] = $this->replaceTokens($column['title'], $data, 'view'); + } $cssClass = $this->getCssStyles($column['cssRules'] ?? [], $data); if (!empty($column['alignment'])) { $cssClass[] = $column['alignment']; @@ -282,9 +328,6 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { */ private function formatFieldLinks($column, $data, $value): array { $links = []; - if (!empty($column['image'])) { - $value = ['']; - } foreach ((array) $value as $index => $val) { $path = $this->getLinkPath($column['link'], $data, $index); $path = $this->replaceTokens($path, $data, 'url', $index); @@ -382,15 +425,16 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { /** * @param string $path + * @param array $query * @return string */ - private function getUrl(string $path) { + private function getUrl(string $path, $query = NULL) { if ($path[0] === '/' || strpos($path, 'http://') || strpos($path, 'https://')) { return $path; } // Use absolute urls when downloading spreadsheet $absolute = $this->getActionName() === 'download'; - return \CRM_Utils_System::url($path, NULL, $absolute, NULL, FALSE); + return \CRM_Utils_System::url($path, $query, $absolute, NULL, FALSE); } /** @@ -427,8 +471,8 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { private function getEditableInfo($key) { [$key] = explode(':', $key); $field = $this->getField($key); - // If field is an implicit join, use the original fk field - if (!empty($field['implicit_join'])) { + // If field is an implicit join to another entity (not a custom group), use the original fk field + if (!empty($field['implicit_join']) && empty($field['custom_field_id'])) { return $this->getEditableInfo(substr($key, 0, -1 - strlen($field['name']))); } if ($field) { @@ -458,12 +502,19 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { /** * @param $column * @param $data - * @return array{url: string, width: int, height: int} + * @return array{url: string, width: int, height: int}|NULL */ private function formatImage($column, $data) { $tokenExpr = $column['rewrite'] ?: '[' . $column['key'] . ']'; + $url = $this->replaceTokens($tokenExpr, $data, 'url'); + if (!$url && !empty($column['empty_value'])) { + $url = $this->replaceTokens($column['empty_value'], $data, 'url'); + } + if (!$url) { + return NULL; + } return [ - 'src' => $this->replaceTokens($tokenExpr, $data, 'url'), + 'src' => $url, 'height' => $column['image']['height'] ?? NULL, 'width' => $column['image']['width'] ?? NULL, ]; @@ -661,6 +712,11 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { * @return array */ protected function getOrderByFromSort() { + // Drag-sortable tables have a forced order + if (!empty($this->display['settings']['draggable'])) { + return [$this->display['settings']['draggable'] => 'ASC']; + } + $defaultSort = $this->display['settings']['sort'] ?? []; $currentSort = $this->sort; @@ -694,9 +750,13 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { }, $apiParams['select']); $additions = []; // Add primary key field if actions are enabled - if (!empty($this->display['settings']['actions'])) { + if (!empty($this->display['settings']['actions']) || !empty($this->display['settings']['draggable'])) { $additions = CoreUtil::getInfoItem($this->savedSearch['api_entity'], 'primary_key'); } + // Add draggable column (typically "weight") + if (!empty($this->display['settings']['draggable'])) { + $additions[] = $this->display['settings']['draggable']; + } // Add style conditions for the display foreach ($this->getCssRulesSelect($this->display['settings']['cssRules'] ?? []) as $addition) { $additions[] = $addition; @@ -705,6 +765,8 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { foreach ($this->display['settings']['columns'] as $column) { // Collect display values in which a token is allowed $possibleTokens .= ($column['rewrite'] ?? ''); + $possibleTokens .= ($column['title'] ?? ''); + $possibleTokens .= ($column['empty_value'] ?? ''); if (!empty($column['link'])) { $possibleTokens .= $this->getLinkPath($column['link']) ?? ''; } diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetDefault.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetDefault.php index 72bc09b69dfe91626ba1411cc79a29dd6728974a..cfdc81a2a07237102054186652f26ee8bf3d777e 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetDefault.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/GetDefault.php @@ -69,9 +69,17 @@ class GetDefault extends \Civi\Api4\Generic\AbstractAction { 'show_count' => TRUE, 'expose_limit' => TRUE, ], + 'sort' => [], 'columns' => [], ], ]; + // Supply default sort if no orderBy given in api params + if (!empty($this->savedSearch['api_entity']) && empty($this->savedSearch['api_params']['orderBy'])) { + $defaultSort = CoreUtil::getInfoItem($this->savedSearch['api_entity'], 'order_by'); + if ($defaultSort) { + $display['settings']['sort'][] = [$defaultSort, 'ASC']; + } + } foreach ($this->getSelectClause() as $key => $clause) { $display['settings']['columns'][] = $this->configureColumn($clause, $key); } diff --git a/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php b/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php index 8ab71220e81be8b397e212b999fa53291b0b63ca..58e37d483c32bf582fd455817cf411dfa02ce481 100644 --- a/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php +++ b/civicrm/ext/search_kit/Civi/Api4/SearchDisplay.php @@ -11,7 +11,7 @@ namespace Civi\Api4; */ class SearchDisplay extends Generic\DAOEntity { - use \Civi\Api4\Generic\Traits\ManagedEntity; + use Generic\Traits\ManagedEntity; /** * @param bool $checkPermissions diff --git a/civicrm/ext/search_kit/Civi/Search/Admin.php b/civicrm/ext/search_kit/Civi/Search/Admin.php index 96ecf41db4ec536d985ce7461e2a65e30b4c7be1..0e6887386831593c1d97f19baeb624d99ff2a2ed 100644 --- a/civicrm/ext/search_kit/Civi/Search/Admin.php +++ b/civicrm/ext/search_kit/Civi/Search/Admin.php @@ -42,6 +42,8 @@ class Admin { 'defaultDisplay' => SearchDisplay::getDefault(FALSE)->setSavedSearch(['id' => NULL])->execute()->first(), 'afformEnabled' => $extensions->isActiveModule('afform'), 'afformAdminEnabled' => $extensions->isActiveModule('afform_admin'), + // TODO: Add v4 API for Extensions + 'modules' => array_column(civicrm_api3('Extension', 'get', ['status' => "installed"])['values'], 'label', 'key'), 'tags' => Tag::get() ->addSelect('id', 'name', 'color', 'is_selectable', 'description') ->addWhere('used_for', 'CONTAINS', 'civicrm_saved_search') @@ -96,7 +98,7 @@ class Admin { public static function getSchema() { $schema = []; $entities = \Civi\Api4\Entity::get() - ->addSelect('name', 'title', 'title_plural', 'bridge_title', 'type', 'primary_key', 'description', 'label_field', 'icon', 'dao', 'bridge', 'ui_join_filters', 'searchable') + ->addSelect('name', 'title', 'title_plural', 'bridge_title', 'type', 'primary_key', 'description', 'label_field', 'icon', 'dao', 'bridge', 'ui_join_filters', 'searchable', 'order_by') ->addWhere('searchable', '!=', 'none') ->addOrderBy('title_plural') ->setChain([ @@ -178,21 +180,22 @@ class Admin { foreach ($allowedEntities as $entity) { // Multi-record custom field groups (to-date only the contact entity supports these) if (in_array('CustomValue', $entity['type'])) { + // TODO: Lookup target entity from custom group if someday other entities support multi-record custom data $targetEntity = $allowedEntities['Contact']; // Join from Custom group to Contact (n-1) - $alias = $entity['name'] . '_Contact_entity_id'; + $alias = "{$entity['name']}_{$targetEntity['name']}_entity_id"; $joins[$entity['name']][] = [ 'label' => $entity['title'] . ' ' . $targetEntity['title'], 'description' => '', - 'entity' => 'Contact', + 'entity' => $targetEntity['name'], 'conditions' => self::getJoinConditions('entity_id', $alias . '.id'), 'defaults' => self::getJoinDefaults($alias, $targetEntity), 'alias' => $alias, 'multi' => FALSE, ]; // Join from Contact to Custom group (n-n) - $alias = 'Contact_' . $entity['name'] . '_entity_id'; - $joins['Contact'][] = [ + $alias = "{$targetEntity['name']}_{$entity['name']}_entity_id"; + $joins[$targetEntity['name']][] = [ 'label' => $entity['title_plural'], 'description' => '', 'entity' => $entity['name'], @@ -207,43 +210,32 @@ class Admin { /* @var \CRM_Core_DAO $daoClass */ $daoClass = $entity['dao']; $references = $daoClass::getReferenceColumns(); - // Only the first bridge reference gets processed, so if it's dynamic we want to be sure it's first in the list - usort($references, function($first, $second) { - foreach ([-1 => $first, 1 => $second] as $weight => $reference) { - if (is_a($reference, 'CRM_Core_Reference_Dynamic')) { - return $weight; - } - } - return 0; - }); $fields = array_column($entity['fields'], NULL, 'name'); $bridge = in_array('EntityBridge', $entity['type']) ? $entity['name'] : NULL; - $bridgeFields = array_keys($entity['bridge'] ?? []); - foreach ($references as $reference) { - $keyField = $fields[$reference->getReferenceKey()] ?? NULL; - if ( - // Sanity check - keyField must exist - !$keyField || - // Exclude any joins that are better represented by pseudoconstants - is_a($reference, 'CRM_Core_Reference_OptionValue') || (!$bridge && !empty($keyField['options'])) || - // Limit bridge joins to just the first - ($bridge && array_search($keyField['name'], $bridgeFields) !== 0) || - // Sanity check - table should match - $daoClass::getTableName() !== $reference->getReferenceTable() - ) { - continue; - } - // Dynamic references use a column like "entity_table" (for normal joins this value will be null) - $dynamicCol = $reference->getTypeColumn(); - // For dynamic references getTargetEntities will return multiple targets; for normal joins this loop will only run once - foreach ($reference->getTargetEntities() as $targetTable => $targetEntityName) { - if (!isset($allowedEntities[$targetEntityName]) || $targetEntityName === $entity['name']) { + // Non-bridge joins directly between 2 entities + if (!$bridge) { + foreach ($references as $reference) { + $keyField = $fields[$reference->getReferenceKey()] ?? NULL; + if ( + // Sanity check - keyField must exist + !$keyField || + // Exclude any joins that are better represented by pseudoconstants + is_a($reference, 'CRM_Core_Reference_OptionValue') || !empty($keyField['options']) || + // Sanity check - table should match + $daoClass::getTableName() !== $reference->getReferenceTable() + ) { continue; } - $targetEntity = $allowedEntities[$targetEntityName]; - // Non-bridge joins directly between 2 entities - if (!$bridge) { + // Dynamic references use a column like "entity_table" (for normal joins this value will be null) + $dynamicCol = $reference->getTypeColumn(); + + // For dynamic references getTargetEntities will return multiple targets; for normal joins this loop will only run once + foreach ($reference->getTargetEntities() as $targetTable => $targetEntityName) { + if (!isset($allowedEntities[$targetEntityName]) || $targetEntityName === $entity['name']) { + continue; + } + $targetEntity = $allowedEntities[$targetEntityName]; // Add the straight 1-1 join $alias = $entity['name'] . '_' . $targetEntityName . '_' . $keyField['name']; $joins[$entity['name']][] = [ @@ -267,21 +259,27 @@ class Admin { 'multi' => TRUE, ]; } - // Bridge joins (sanity check - bridge must specify exactly 2 FK fields) - elseif (count($entity['bridge']) === 2) { - // Get the other entity being linked through this bridge - $baseKey = array_search($reference->getReferenceKey(), $bridgeFields) ? $bridgeFields[0] : $bridgeFields[1]; + } + } + // Bridge joins go through an intermediary table + elseif (!empty($entity['bridge'])) { + foreach ($entity['bridge'] as $targetKey => $bridgeInfo) { + $baseKey = $bridgeInfo['to']; + $reference = self::getReference($targetKey, $references); + $dynamicCol = $reference->getTypeColumn(); + $keyField = $fields[$reference->getReferenceKey()] ?? NULL; + foreach ($reference->getTargetEntities() as $targetTable => $targetEntityName) { + $targetEntity = $allowedEntities[$targetEntityName] ?? NULL; $baseEntity = $allowedEntities[$fields[$baseKey]['fk_entity']] ?? NULL; - if (!$baseEntity) { + if (!$targetEntity || !$baseEntity) { continue; } // Add joins for the two entities that connect through this bridge (n-n) - $symmetric = $baseEntity['name'] === $targetEntityName; - $targetsTitle = $symmetric ? $allowedEntities[$bridge]['title_plural'] : $targetEntity['title_plural']; + $targetsTitle = $bridgeInfo['label'] ?? $targetEntity['title_plural']; $alias = $baseEntity['name'] . "_{$bridge}_" . $targetEntityName; $joins[$baseEntity['name']][] = [ 'label' => $baseEntity['title'] . ' ' . $targetsTitle, - 'description' => $entity['bridge'][$baseKey]['description'] ?? E::ts('Multiple %1 per %2', [1 => $targetsTitle, 2 => $baseEntity['title']]), + 'description' => $bridgeInfo['description'] ?? E::ts('Multiple %1 per %2', [1 => $targetsTitle, 2 => $baseEntity['title']]), 'entity' => $targetEntityName, 'conditions' => array_merge( [$bridge], @@ -292,10 +290,11 @@ class Admin { 'alias' => $alias, 'multi' => TRUE, ]; - if (!$symmetric) { + // Back-fill the reverse join if declared + if ($dynamicCol && $keyField && !empty($entity['bridge'][$baseKey])) { $alias = $targetEntityName . "_{$bridge}_" . $baseEntity['name']; $joins[$targetEntityName][] = [ - 'label' => $targetEntity['title'] . ' ' . $baseEntity['title_plural'], + 'label' => $targetEntity['title'] . ' ' . ($entity['bridge'][$baseKey]['label'] ?? $baseEntity['title_plural']), 'description' => $entity['bridge'][$reference->getReferenceKey()]['description'] ?? E::ts('Multiple %1 per %2', [1 => $baseEntity['title_plural'], 2 => $targetEntity['title']]), 'entity' => $baseEntity['name'], 'conditions' => array_merge( @@ -316,6 +315,19 @@ class Admin { return $joins; } + /** + * @param string $fieldName + * @param \CRM_Core_Reference_Basic[] $references + * @return \CRM_Core_Reference_Basic + */ + private static function getReference(string $fieldName, array $references) { + foreach ($references as $reference) { + if ($reference->getReferenceKey() === $fieldName) { + return $reference; + } + } + } + /** * Boilerplate join clause * diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js index b920e7ba90acc74bc9a1ca0ecbed214ae15fb2ec..62737a96c88e1a4d3c67840da89677de6b3897e6 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js @@ -11,10 +11,9 @@ .config(function($routeProvider) { $routeProvider.when('/list', { - controller: function() { - searchEntity = 'SavedSearch'; - }, - template: '<crm-search-admin-search-listing></crm-search-admin-search-listing>', + controller: 'searchList', + reloadOnSearch: false, + templateUrl: '~/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html', }); $routeProvider.when('/create/:entity', { controller: 'searchCreate', @@ -45,6 +44,36 @@ }); }) + // Controller for tabbed view of SavedSearches + .controller('searchList', function($scope, searchMeta, formatForSelect2) { + var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), + ctrl = $scope.$ctrl = this; + searchEntity = 'SavedSearch'; + + // Metadata needed for filters + this.entitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); + this.modules = _.sortBy(_.transform((CRM.crmSearchAdmin.modules), function(modules, label, key) { + modules.push({text: label, id: key}); + }, []), 'text'); + this.getTags = function() { + return {results: formatForSelect2(CRM.crmSearchAdmin.tags, 'id', 'name', ['color', 'description'])}; + }; + + // Tabs include a rowCount which will be updated by the search controller + this.tabs = [ + {name: 'custom', title: ts('Custom Searches'), icon: 'fa-search-plus', rowCount: null, filters: {has_base: false}}, + {name: 'packaged', title: ts('Packaged Searches'), icon: 'fa-suitcase', rowCount: null, filters: {has_base: true}} + ]; + $scope.$bindToRoute({ + expr: '$ctrl.tab', + param: 'tab', + format: 'raw' + }); + if (!this.tab) { + this.tab = this.tabs[0].name; + } + }) + // Controller for creating a new search .controller('searchCreate', function($scope, $routeParams, $location) { searchEntity = $routeParams.entity; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index 8cbc6177805a6fadd6c728c10ad06f324fcd1ca3..f94bd17440e0a39a5d6991b14c4016aa243624fc 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -40,16 +40,23 @@ this.groupExists = !!this.savedSearch.groups.length; if (!this.savedSearch.id) { + var defaults = { + version: 4, + select: getDefaultSelect(), + orderBy: {}, + where: [], + }; + _.each(['groupBy', 'join', 'having'], function(param) { + if (ctrl.paramExists(param)) { + defaults[param] = []; + } + }); + $scope.$bindToRoute({ param: 'params', expr: '$ctrl.savedSearch.api_params', deep: true, - default: { - version: 4, - select: getDefaultSelect(), - orderBy: {}, - where: [], - } + default: defaults }); } @@ -57,18 +64,6 @@ $scope.$watchCollection('$ctrl.savedSearch.api_params.select', onChangeSelect); - if (this.paramExists('groupBy')) { - this.savedSearch.api_params.groupBy = this.savedSearch.api_params.groupBy || []; - } - - if (this.paramExists('join')) { - this.savedSearch.api_params.join = this.savedSearch.api_params.join || []; - } - - if (this.paramExists('having')) { - this.savedSearch.api_params.having = this.savedSearch.api_params.having || []; - } - $scope.$watch('$ctrl.savedSearch', onChangeAnything, true); // After watcher runs for the first time and messes up the status, set it correctly @@ -429,7 +424,7 @@ // Is a column eligible to use an aggregate function? this.canAggregate = function(col) { // If the query does not use grouping, never - if (!ctrl.savedSearch.api_params.groupBy.length) { + if (!ctrl.savedSearch.api_params.groupBy || !ctrl.savedSearch.api_params.groupBy.length) { return false; } var arg = _.findWhere(searchMeta.parseExpr(col).args, {type: 'field'}) || {}; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js index d45a4be1cfaeed256ace51b38d078e2931a1a59d..94d4007ab3ffce8cd74f195974ef14e25521ddff 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js @@ -34,14 +34,14 @@ }, controller: function($scope, $timeout, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - ctrl = this, - afforms; + ctrl = this; this.isSuperAdmin = CRM.checkPerm('all CiviCRM permissions and ACLs'); this.aclBypassHelp = ts('Only users with "all CiviCRM permissions and ACLs" can disable permission checks.'); this.preview = this.stale = false; + // Extra (non-field) colum types this.colTypes = { links: { label: ts('Links'), @@ -126,12 +126,20 @@ }; this.getColLabel = function(col) { - if (col.type === 'field') { + if (col.type === 'field' || col.type === 'image') { return ctrl.getFieldLabel(col.key); } return ctrl.colTypes[col.type].label; }; + this.toggleEmptyVal = function(col) { + if (col.empty_value) { + delete col.empty_value; + } else { + col.empty_value = ts('None'); + } + }; + this.toggleRewrite = function(col) { if (col.rewrite) { col.rewrite = ''; @@ -142,16 +150,24 @@ }; this.toggleImage = function(col) { - if (col.image) { + if (col.type === 'image') { delete col.image; + col.type = 'field'; } else { col.image = { alt: this.getColLabel(col) }; delete col.editable; + col.type = 'image'; } }; + this.canBeImage = function(col) { + var expr = ctrl.getExprFromSelect(col.key), + info = searchMeta.parseExpr(expr); + return info.args[0] && info.args[0].field && info.args[0].field.input_type === 'File'; + }; + this.toggleEditable = function(col) { if (col.editable) { delete col.editable; @@ -163,12 +179,16 @@ this.canBeEditable = function(col) { var expr = ctrl.getExprFromSelect(col.key), info = searchMeta.parseExpr(expr); - return !col.image && !col.rewrite && !col.link && !info.fn && info.args[0] && info.args[0].field && !info.args[0].field.readonly; + return !col.rewrite && !col.link && !info.fn && info.args[0] && info.args[0].field && !info.args[0].field.readonly; }; // Checks if a column contains a sortable value // Must be a real sql expression (not a pseudo-field like `result_row_num`) this.canBeSortable = function(col) { + // Column-header sorting is incompatible with draggable sorting + if (ctrl.display.settings.draggable) { + return false; + } var expr = ctrl.getExprFromSelect(col.key), info = searchMeta.parseExpr(expr), arg = (info && info.args && _.findWhere(info.args, {type: 'field'})) || {}; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js index 3fda35afe004bb38c7ad97ce04bf855633d03943..3673bf809b1e02fb9e093cd0ed41db9fb1b11b95 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js @@ -118,11 +118,11 @@ delete ctrl.fieldArg.flag_before; ctrl.args = [ctrl.fieldArg]; if (ctrl.fn) { - var exprType, pos = 0, - uiDefaults = ctrl.fn.params[0].ui_defaults || []; + var exprType, + pos = 0; // Add non-field args to the beginning if needed - while (uiDefaults[pos] && uiDefaults[pos].type && uiDefaults[pos].type !== 'SqlField') { - exprType = uiDefaults[pos].type; + while (!_.includes(ctrl.fn.params[pos].must_be, 'SqlField')) { + exprType = ctrl.fn.params[pos].must_be[0]; ctrl.args.splice(pos, 0, { type: ctrl.exprTypes[exprType].type, value: exprType === 'SqlNumber' ? 0 : '' diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html index fbb47263f8d4810305715c5b41291e4721e5c415..05b69b78bba8b6fd12bec17ebaee322429ffa0a8 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html @@ -1,3 +1,9 @@ +<div class="form-inline" ng-if=":: $ctrl.parent.canBeImage(col)"> + <label> + <input type="checkbox" ng-click="$ctrl.parent.toggleImage(col)" > + {{:: ts('Image') }} + </label> +</div> <div class="form-inline crm-search-admin-flex-row" ng-if=":: $ctrl.parent.canBeLink(col)"> <label title="{{:: ts('Display as clickable link') }}" > <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" > @@ -19,20 +25,13 @@ <input class="form-control crm-flex-1" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" /> <crm-search-admin-token-select ng-if="col.title" model="col" field="title" suffix=":label"></crm-search-admin-token-select> </div> -<div class="form-inline"> - <label> - <input type="checkbox" ng-checked="col.image" ng-click="$ctrl.parent.toggleImage(col)" > - {{:: ts('Image') }} +<div class="form-inline crm-search-admin-flex-row"> + <label title="{{:: ts('Text to display if the field contents are empty.') }}"> + <input type="checkbox" ng-checked="col.empty_value" ng-click="$ctrl.parent.toggleEmptyVal(col)" > + {{:: ts('Empty placeholder') }} </label> - <div class="crm-search-admin-flex-row" ng-if="col.image"> - <label>{{:: ts('Width') }}</label> - <input type="number" min="1" class="form-control crm-flex-1" placeholder="Auto" ng-model="col.image.width"> - <label>{{:: ts('Height') }}</label> - <input type="number" min="1" class="form-control crm-flex-1" placeholder="Auto" ng-model="col.image.height"> - <label>{{:: ts('Alt Text') }}</label> - <input type="text" class="form-control crm-flex-2" ng-model="col.image.alt"> - <crm-search-admin-token-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col.image" field="alt"></crm-search-admin-token-select> - </div> + <input type="text" class="form-control crm-flex-1" ng-if="col.empty_value" ng-model="col.empty_value" ng-model-options="{updateOn: 'blur'}"> + <crm-search-admin-token-select ng-if="col.empty_value" model="col" field="empty_value" suffix=":label"></crm-search-admin-token-select> </div> <div class="form-inline crm-search-admin-flex-row"> <label title="{{:: ts('Change the contents of this field, or combine multiple field values.') }}"> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/image.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/image.html new file mode 100644 index 0000000000000000000000000000000000000000..5f1a4caad128c1f44aff279efd69b4579e0ce102 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/image.html @@ -0,0 +1,53 @@ +<div class="form-inline"> + <label> + <input type="checkbox" checked="checked" ng-click="$ctrl.parent.toggleImage(col)" > + {{:: ts('Image') }} + </label> + <div class="crm-search-admin-flex-row"> + <label>{{:: ts('Width') }}</label> + <input type="number" min="1" class="form-control crm-flex-1" placeholder="Auto" ng-model="col.image.width"> + <label>{{:: ts('Height') }}</label> + <input type="number" min="1" class="form-control crm-flex-1" placeholder="Auto" ng-model="col.image.height"> + <label>{{:: ts('Alt Text') }}</label> + <input type="text" class="form-control crm-flex-2" ng-model="col.image.alt"> + <crm-search-admin-token-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col.image" field="alt"></crm-search-admin-token-select> + </div> +</div> +<div class="form-inline crm-search-admin-flex-row" ng-if=":: $ctrl.parent.canBeLink(col)"> + <label title="{{:: ts('Display as clickable link') }}" > + <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" > + {{:: ts('Link') }} + </label> + <select class="form-control" ng-model="col.link.target" ng-if="col.link"> + <option value>{{:: ts('Open normally') }}</option> + <option value="_blank">{{:: ts('New tab') }}</option> + <option value="crm-popup">{{:: ts('Popup dialog') }}</option> + </select> + <crm-search-admin-link-select ng-if="col.link" link="col.link" on-change="$ctrl.parent.onChangeLink(col, newLink)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" links=":: $ctrl.parent.getLinks(col.key)"> + </crm-search-admin-link-select> +</div> +<div class="form-inline crm-search-admin-flex-row"> + <label> + <input type="checkbox" ng-checked="col.title" ng-click="col.title = col.title ? null : $ctrl.parent.getFieldLabel(col.key)" > + {{:: ts('Tooltip') }} + </label> + <input class="form-control crm-flex-1" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" /> + <crm-search-admin-token-select ng-if="col.title" model="col" field="title" suffix=":label"></crm-search-admin-token-select> +</div> +<div class="form-inline crm-search-admin-flex-row"> + <label title="{{:: ts('Image to display if the field contents are empty.') }}"> + <input type="checkbox" ng-checked="col.empty_value" ng-click="$ctrl.parent.toggleEmptyVal(col)" > + {{:: ts('Alternate image') }} + </label> + <input type="text" class="form-control crm-flex-1" ng-if="col.empty_value" ng-model="col.empty_value" ng-model-options="{updateOn: 'blur'}"> + <crm-search-admin-token-select ng-if="col.empty_value" model="col" field="empty_value" suffix=":label"></crm-search-admin-token-select> +</div> +<div class="form-inline crm-search-admin-flex-row"> + <label title="{{:: ts('Specify url path to this image.') }}"> + <input type="checkbox" ng-checked="col.rewrite" ng-click="$ctrl.parent.toggleRewrite(col)" > + {{:: ts('Custom image url') }} + </label> + <input type="text" class="form-control crm-flex-1" ng-if="col.rewrite" ng-model="col.rewrite" ng-model-options="{updateOn: 'blur'}"> + <crm-search-admin-token-select ng-if="col.rewrite" model="col" field="rewrite" suffix=":label"></crm-search-admin-token-select> +</div> +<search-admin-css-rules label="{{:: ts('Style') }}" item="col" default="col.key"></search-admin-css-rules> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.component.js index 3a55a7aab16868e8134fe63af284a6b1b8a92397..3273fafa1cd578a26c05a6a519897986cb56408a 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.component.js @@ -11,7 +11,7 @@ parent: '^crmSearchAdminDisplay' }, templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayGrid.html', - controller: function($scope) { + controller: function($scope, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this; @@ -20,8 +20,12 @@ ctrl.display.settings = { colno: '3', limit: CRM.crmSearchAdmin.defaultPagerSize, + sort: [], pager: {} }; + if (searchMeta.getEntity(ctrl.apiEntity).order_by) { + ctrl.display.settings.sort.push([searchMeta.getEntity(ctrl.apiEntity).order_by, 'ASC']); + } } ctrl.parent.initColumns({}); }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js index fe35e0a024fc9dbb97526f33c82e7edc11024a7b..de64dfb92c0a0f910d4ba85f4979bed37e9534b3 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js @@ -11,7 +11,7 @@ parent: '^crmSearchAdminDisplay' }, templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayList.html', - controller: function($scope) { + controller: function($scope, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this; @@ -35,8 +35,12 @@ ctrl.display.settings = { style: 'ul', limit: CRM.crmSearchAdmin.defaultPagerSize, + sort: [], pager: {} }; + if (searchMeta.getEntity(ctrl.apiEntity).order_by) { + ctrl.display.settings.sort.push([searchMeta.getEntity(ctrl.apiEntity).order_by, 'ASC']); + } } ctrl.parent.initColumns({}); }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js index 78119bbad1b8bee0c3ac659459e5214a54b4eb76..b8cdfee5a5b37eb654810728a4cbd4082a7e93d5 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js @@ -11,7 +11,7 @@ parent: '^crmSearchAdminDisplay' }, templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayTable.html', - controller: function($scope) { + controller: function($scope, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this; @@ -33,12 +33,26 @@ } }; + this.toggleDraggable = function() { + if (ctrl.display.settings.draggable) { + delete ctrl.display.settings.draggable; + } else { + ctrl.display.settings.sort = []; + ctrl.display.settings.draggable = searchMeta.getEntity(ctrl.apiEntity).order_by; + } + }; + this.$onInit = function () { if (!ctrl.display.settings) { - ctrl.display.settings = _.extend({}, CRM.crmSearchAdmin.defaultDisplay.settings, {columns: null}); + ctrl.display.settings = _.extend({}, _.cloneDeep(CRM.crmSearchAdmin.defaultDisplay.settings), {columns: null}); + if (searchMeta.getEntity(ctrl.apiEntity).order_by) { + ctrl.display.settings.sort.push([searchMeta.getEntity(ctrl.apiEntity).order_by, 'ASC']); + } } // Displays created prior to 5.43 may not have this property ctrl.display.settings.classes = ctrl.display.settings.classes || []; + // Table can be draggable if the main entity is a SortableEntity. + ctrl.canBeDraggable = _.includes(searchMeta.getEntity(ctrl.apiEntity).type, 'SortableEntity'); ctrl.parent.initColumns({label: true, sortable: true}); }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html index a3090f9203261d8ac07a97b87ef294639291bdad..4794ea0e409a2f3de6eac023fce7b039c2656267 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html @@ -1,5 +1,13 @@ -<fieldset ng-include="'~/crmSearchAdmin/crmSearchAdminDisplaySort.html'"></fieldset> +<fieldset ng-if="!$ctrl.display.settings.draggable" ng-include="'~/crmSearchAdmin/crmSearchAdminDisplaySort.html'"></fieldset> <fieldset> + <div ng-if="$ctrl.canBeDraggable" class="form-inline"> + <div class="checkbox-inline form-control"> + <label> + <input type="checkbox" ng-checked="!!$ctrl.display.settings.draggable" ng-click="$ctrl.toggleDraggable()"> + <span>{{:: ts('Drag and drop sorting') }}</span> + </label> + </div> + </div> <div class="form-inline"> <div class="checkbox-inline form-control"> <label> @@ -44,7 +52,7 @@ <option value="text-right">{{:: ts('Right') }}</option> </select> </div> - <div class="form-inline" ng-if=":: $ctrl.parent.canBeSortable(col)"> + <div class="form-inline" ng-if="$ctrl.parent.canBeSortable(col)"> <label title="{{:: ts('Allow user to click on header to sort table by this column') }}"> <input type="checkbox" ng-checked="col.sortable !== false" ng-click="col.sortable = col.sortable === false" > {{:: ts('Sortable Header') }} diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html index f8c04f2f6cfe6b088e520acb98736067ed604653..aff0c96b795aa14c3f3af53cb5311a78eda0d24e 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html @@ -25,7 +25,7 @@ </th> </tr> </thead> - <tbody ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTableBody.html'"></tbody> + <tbody ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTable' + ($ctrl.loading ? 'Loading' : 'Body') + '.html'"></tbody> </table> <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html index 29cf615ec786c0ed38869c92cbef228dd83b1349..e7ed5a67b1082c31bbad87402bd2d71a38eb72c8 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html @@ -1,12 +1,12 @@ <a class="btn btn-xs btn-default" title="{{:: ts('View search results table') }}" ng-href="{{:: $ctrl.searchDisplayPath + '#/display/' + row.data.name }}" target="_blank"> {{:: ts('View') }} </a> -<a class="btn btn-xs btn-primary" href="#/edit/{{:: row.data.id }}" ng-if="row.permissionToEdit"> +<a class="btn btn-xs btn-primary" href="#/edit/{{:: row.data.id }}" ng-style="{visibility: row.permissionToEdit ? 'visible' : 'hidden'}"> {{:: ts('Edit') }} </a> <a class="btn btn-xs btn-secondary" href="#/create/{{:: row.data.api_entity + '?params=' + $ctrl.encode(row.data.api_params) }}"> {{:: ts('Clone') }} </a> -<a href class="btn btn-xs btn-danger" ng-click="$ctrl.confirmDelete(row)"> - {{:: ts('Delete') }} +<a href ng-style="{visibility: row.data['base_module:label'] && !row.data['local_modified_date'] ? 'hidden' : 'visible'}" class="btn btn-xs btn-{{ row.data['base_module:label'] ? 'warning' : 'danger' }}" ng-click="$ctrl.deleteOrRevert(row)"> + {{ row.data['base_module:label'] ? ts('Revert') : ts('Delete') }} </a> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js index 6509a165694af1908ceced680f17825d7bb65dd2..5b18b02ee09ffbd239ab77132087f9f28827c53d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js @@ -3,8 +3,12 @@ // Specialized searchDisplay, only used by Admins angular.module('crmSearchAdmin').component('crmSearchAdminSearchListing', { - templateUrl: '~/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html', - controller: function($scope, $q, crmApi4, crmStatus, searchMeta, searchDisplayBaseTrait, searchDisplaySortableTrait, formatForSelect2) { + bindings: { + filters: '<', + tabCount: '=' + }, + templateUrl: '~/crmSearchDisplayTable/crmSearchDisplayTable.html', + controller: function($scope, $q, crmApi4, crmStatus, searchMeta, searchDisplayBaseTrait, searchDisplaySortableTrait) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), // Mix in traits to this controller ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplaySortableTrait), @@ -14,7 +18,6 @@ this.afformPath = CRM.url('civicrm/admin/afform'); this.afformEnabled = CRM.crmSearchAdmin.afformEnabled; this.afformAdminEnabled = CRM.crmSearchAdmin.afformAdminEnabled; - this.entitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); this.apiEntity = 'SavedSearch'; this.search = { @@ -33,6 +36,9 @@ 'modified_id.display_name', 'created_date', 'modified_date', + 'has_base', + 'base_module:label', + 'local_modified_date', 'DATE(created_date) AS date_created', 'DATE(modified_date) AS date_modified', 'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name', @@ -56,6 +62,12 @@ this.$onInit = function() { buildDisplaySettings(); this.initializeDisplay($scope, $()); + // Keep tab counts up-to-date - put rowCount in current tab if there are no other filters + $scope.$watch('$ctrl.rowCount', function(val) { + if (typeof val === 'number' && angular.equals(['has_base'], _.keys(ctrl.filters))) { + ctrl.tabCount = val; + } + }); }; this.onPostRun.push(function(result) { @@ -73,51 +85,81 @@ return encodeURI(angular.toJson(params)); }; - this.confirmDelete = function(search) { - function getConfirmationMsg() { - var msg = '<h4>' + _.escape(ts('Permanently delete this saved search?')) + '</h4>' + + this.deleteOrRevert = function(row) { + var search = row.data, + revert = !!search['base_module:label']; + function getMessage() { + var title = revert ? ts('Revert this search to its packaged settings?') : ts('Permanently delete this saved search?'), + msg = '<h4>' + _.escape(title) + '</h4>' + '<ul>'; - if (search.data.display_label && search.data.display_label.length === 1) { - msg += '<li>' + _.escape(ts('Includes 1 display which will also be deleted.')) + '</li>'; - } else if (search.data.display_label && search.data.display_label.length > 1) { - msg += '<li>' + _.escape(ts('Includes %1 displays which will also be deleted.', {1: search.data.display_label.length})) + '</li>'; - } - _.each(search.data.groups, function(smartGroup) { - msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Smart group "%1" will also be deleted.', {1: smartGroup})) + '</li>'; - }); - if (search.afform_count) { - _.each(ctrl.afforms[search.data.name], function(afform) { - msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Form "%1" will also be deleted because it contains an embedded display from this search.', {1: afform.title})) + '</li>'; + if (revert) { + if (search.display_label && search.display_label.length === 1) { + msg += '<li>' + _.escape(ts('Includes 1 display which will also be reverted.')) + '</li>'; + } else if (search.display_label && search.display_label.length > 1) { + msg += '<li>' + _.escape(ts('Includes %1 displays which will also be reverted.', {1: search.display_label.length})) + '</li>'; + } + _.each(search.groups, function(smartGroup) { + msg += '<li>' + _.escape(ts('Smart group "%1" will be reset to the packaged search criteria.', {1: smartGroup})) + '</li>'; + }); + if (row.afform_count) { + _.each(ctrl.afforms[search.name], function(afform) { + msg += '<li><i class="crm-i fa-list-alt"></i> ' + _.escape(ts('Form "%1" will be affected because it contains an embedded display from this search.', {1: afform.title})) + '</li>'; + }); + } + } else { + if (search.display_label && search.display_label.length === 1) { + msg += '<li>' + _.escape(ts('Includes 1 display which will also be deleted.')) + '</li>'; + } else if (search.display_label && search.display_label.length > 1) { + msg += '<li>' + _.escape(ts('Includes %1 displays which will also be deleted.', {1: search.display_label.length})) + '</li>'; + } + _.each(search.groups, function (smartGroup) { + msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Smart group "%1" will also be deleted.', {1: smartGroup})) + '</li>'; }); + if (row.afform_count) { + _.each(ctrl.afforms[search.name], function (afform) { + msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Form "%1" will also be deleted because it contains an embedded display from this search.', {1: afform.title})) + '</li>'; + }); + } } return msg + '</ul>'; } var dialog = CRM.confirm({ - title: ts('Delete %1', {1: search.data.label}), - message: getConfirmationMsg(), + title: revert ? ts('Revert %1', {1: search.label}) : ts('Delete %1', {1: search.label}), + message: getMessage(), }).on('crmConfirm:yes', function() { $scope.$apply(function() { - ctrl.deleteSearch(search); + return revert ? ctrl.revertSearch(search) : ctrl.deleteSearch(search); }); }).block(); ctrl.loadAfforms().then(function() { - dialog.html(getConfirmationMsg()).unblock(); + dialog.html(getMessage()).unblock(); }); }; this.deleteSearch = function(search) { crmStatus({start: ts('Deleting...'), success: ts('Search Deleted')}, - crmApi4('SavedSearch', 'delete', {where: [['id', '=', search.data.id]]}).then(function() { + crmApi4('SavedSearch', 'delete', {where: [['id', '=', search.id]]}).then(function() { ctrl.rowCount = null; ctrl.runSearch(); }) ); }; - this.getTags = function() { - return {results: formatForSelect2(CRM.crmSearchAdmin.tags, 'id', 'name', ['color', 'description'])}; + this.revertSearch = function(search) { + crmStatus({start: ts('Reverting...'), success: ts('Search Reverted')}, + crmApi4('SavedSearch', 'revert', { + where: [['id', '=', search.id]], + chain: { + revertDisplays: ['SearchDisplay', 'revert', {'where': [['saved_search_id', '=', '$id'], ['has_base', '=', true]]}], + deleteDisplays: ['SearchDisplay', 'delete', {'where': [['saved_search_id', '=', '$id'], ['has_base', '=', false]]}] + } + }).then(function() { + ctrl.rowCount = null; + ctrl.runSearch(); + }) + ); }; function buildDisplaySettings() { @@ -147,35 +189,67 @@ type: 'include', label: ts('Displays'), path: '~/crmSearchAdmin/searchListing/displays.html' - }, - searchMeta.fieldToColumn('GROUP_CONCAT(DISTINCT group.title) AS groups', { - label: ts('Smart Group') - }), - searchMeta.fieldToColumn('created_date', { - label: ts('Created'), - title: '[created_date]', - rewrite: ts('%1 by %2', {1: '[date_created]', 2: '[created_id.display_name]'}) - }), - searchMeta.fieldToColumn('modified_date', { - label: ts('Last Modified'), - title: '[modified_date]', - rewrite: ts('%1 by %2', {1: '[date_modified]', 2: '[modified_id.display_name]'}) - }), - { - type: 'include', - alignment: 'text-right', - path: '~/crmSearchAdmin/searchListing/buttons.html' } ] } }; if (ctrl.afformEnabled) { - ctrl.display.settings.columns.splice(4, 0, { + ctrl.display.settings.columns.push({ type: 'include', label: ts('Forms'), path: '~/crmSearchAdmin/searchListing/afforms.html' }); } + ctrl.display.settings.columns.push( + searchMeta.fieldToColumn('GROUP_CONCAT(DISTINCT group.title) AS groups', { + label: ts('Smart Group') + }) + ); + if (ctrl.filters.has_base) { + ctrl.display.settings.columns.push( + searchMeta.fieldToColumn('base_module:label', { + label: ts('Package'), + title: '[base_module]', + empty_value: ts('Missing'), + cssRules: [ + ['font-italic', 'base_module:label', 'IS EMPTY'] + ] + }) + ); + ctrl.display.settings.columns.push( + // Using 'local_modified_date' as the column + an empty_value will only show the rewritten value + // if the record has been modified from its packaged state. + searchMeta.fieldToColumn('local_modified_date', { + label: ts('Modified'), + empty_value: ts('No'), + title: ts('Whether and when a search was modified from its packaged settings'), + rewrite: ts('%1 by %2', {1: '[date_modified]', 2: '[modified_id.display_name]'}), + cssRules: [ + ['font-italic', 'local_modified_date', 'IS EMPTY'] + ] + }) + ); + } else { + ctrl.display.settings.columns.push( + searchMeta.fieldToColumn('created_date', { + label: ts('Created'), + title: '[created_date]', + rewrite: ts('%1 by %2', {1: '[date_created]', 2: '[created_id.display_name]'}) + }) + ); + ctrl.display.settings.columns.push( + searchMeta.fieldToColumn('modified_date', { + label: ts('Modified'), + title: '[modified_date]', + rewrite: ts('%1 by %2', {1: '[date_modified]', 2: '[modified_id.display_name]'}) + }) + ); + } + ctrl.display.settings.columns.push({ + type: 'include', + alignment: 'text-right', + path: '~/crmSearchAdmin/searchListing/buttons.html' + }); ctrl.settings = ctrl.display.settings; } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html index 9bab8797707919d5f1a09badd2fec74acdbffbae..2f0361fd1a3305f5fc6cf1565f98676f5aadfaa6 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html @@ -1,16 +1,32 @@ <div id="bootstrap-theme" class="crm-search"> <h1 crm-page-title>{{:: ts('Saved Searches') }}</h1> - <div class="form-inline"> - <input class="form-control" type="search" ng-model="$ctrl.filters.label" placeholder="{{:: ts('Filter by label...') }}"> - <input class="form-control" type="search" ng-model="$ctrl.filters['created_id.display_name,modified_id.display_name']" placeholder="{{:: ts('Filter by author...') }}"> - <input class="form-control collapsible-optgroups" ng-model="$ctrl.filters.api_entity" ng-list crm-ui-select="{multiple: true, data: $ctrl.entitySelect, placeholder: ts('Filter by entity...')}"> - <span ng-if="$ctrl.getTags().results.length"> - <input class="form-control" ng-model="$ctrl.filters.tags" ng-list crm-ui-select="{multiple: true, data: $ctrl.getTags, placeholder: ts('Filter by tags...')}"> - </span> - <a class="btn btn-primary pull-right" href="#/create/Contact/"> - <i class="crm-i fa-plus"></i> - {{:: ts('New Search') }} - </a> + + <!-- Tabs based on the has_base filter --> + <ul class="nav nav-tabs"> + <li ng-repeat="tab in $ctrl.tabs" role="presentation" ng-class="{active: $ctrl.tab === tab.name}"> + <a href ng-click="$ctrl.tab = tab.name"><i class="crm-i {{:: tab.icon }}"></i> + {{:: tab.title }} + <span class="badge">{{ tab.rowCount }}</span> + </a> + </li> + </ul> + + <div ng-repeat="tab in $ctrl.tabs" ng-show="$ctrl.tab === tab.name"> + <div class="form-inline"> + <input class="form-control" type="search" ng-model="tab.filters.label" placeholder="{{:: ts('Filter by label...') }}"> + <input class="form-control" type="search" ng-if="tab.name === 'custom'" ng-model="tab.filters['created_id.display_name,modified_id.display_name']" placeholder="{{:: ts('Filter by author...') }}"> + <span ng-if="tab.name === 'packaged'"> + <input class="form-control" ng-model="tab.filters.base_module" ng-list crm-ui-select="{multiple: true, data: $ctrl.modules, placeholder: ts('Filter by package...')}"> + </span> + <input class="form-control collapsible-optgroups" ng-model="tab.filters.api_entity" ng-list crm-ui-select="{multiple: true, data: $ctrl.entitySelect, placeholder: ts('Filter by entity...')}"> + <span ng-if="$ctrl.getTags().results.length"> + <input class="form-control" ng-model="tab.filters.tags" ng-list crm-ui-select="{multiple: true, data: $ctrl.getTags, placeholder: ts('Filter by tags...')}"> + </span> + <a class="btn btn-primary pull-right" ng-if="tab.name === 'custom'" href="#/create/Contact/"> + <i class="crm-i fa-plus"></i> + {{:: ts('New Search') }} + </a> + </div> + <crm-search-admin-search-listing filters="tab.filters" tab-count="tab.rowCount"></crm-search-admin-search-listing> </div> - <div ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTable.html'"></div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay.ang.php b/civicrm/ext/search_kit/ang/crmSearchDisplay.ang.php index a70d2f1ec263be994446eab027cac2c0d48e3844..0dbdeb3526e2bb9c2ec8e3c87061bb48337326e8 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay.ang.php @@ -9,6 +9,9 @@ return [ 'partials' => [ 'ang/crmSearchDisplay', ], + 'css' => [ + 'css/crmSearchDisplay.css', + ], 'basePages' => [], 'requires' => ['api4', 'ngSanitize'], 'exports' => [ diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html index e39d7e215e7c51ae7d985643fe340d31edab231d..cee95047ffe407723f49f6b5f9a21c7c81374196 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/field.html @@ -1,17 +1,11 @@ -<crm-search-display-editable row="row" col="colData" on-success="$ctrl.runSearch(row)" cancel="$ctrl.editing = null;" ng-if="colData.edit && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === colIndex"></crm-search-display-editable> -<span ng-if="::!colData.links && !colData.img" ng-class="{'crm-editable-enabled': colData.edit && !$ctrl.editing}" ng-click="colData.edit && !$ctrl.editing && ($ctrl.editing = [rowIndex, colIndex])"> +<crm-search-display-editable row="row" col="colData" do-save="$ctrl.runSearch([apiCall], {}, row)" cancel="$ctrl.editing = null;" ng-if="colData.edit && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === colIndex"></crm-search-display-editable> +<span ng-if="::!colData.links" ng-class="{'crm-editable-enabled': colData.edit && !$ctrl.editing}" ng-click="colData.edit && !$ctrl.editing && ($ctrl.editing = [rowIndex, colIndex])"> {{:: $ctrl.formatFieldValue(colData) }} </span> <span ng-if="::colData.links"> <span ng-repeat="link in colData.links"> <a target="{{:: link.target }}" href="{{:: link.url }}"> - <span ng-if=":: colData.img"> - <img ng-src="{{:: colData.img.src }}" alt="{{:: colData.val }}" height="{{:: colData.img.height }}" width="{{:: colData.img.width }}"/> - </span> {{:: link.text }}</a><span ng-if="!$last">, </span> </span> </span> -<span ng-if=":: !colData.links && colData.img"> - <img ng-src="{{:: colData.img.src }}" alt="{{:: colData.val }}" height="{{:: colData.img.height }}" width="{{:: colData.img.width }}"/> -</span> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/image.html b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/image.html new file mode 100644 index 0000000000000000000000000000000000000000..c76036340dddac9b4792000a1a225bf6cdc289d4 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/colType/image.html @@ -0,0 +1,10 @@ +<span ng-if="::colData.links && colData.img"> + <span ng-repeat="link in colData.links"> + <a target="{{:: link.target }}" href="{{:: link.url }}"> + <img ng-src="{{:: colData.img.src }}" alt="{{:: colData.val }}" height="{{:: colData.img.height }}" width="{{:: colData.img.width }}"/> + </a> + </span> +</span> +<span ng-if=":: !colData.links && colData.img"> + <img ng-src="{{:: colData.img.src }}" alt="{{:: colData.val }}" height="{{:: colData.img.height }}" width="{{:: colData.img.width }}"/> +</span> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js index 2df08087f87561793818d9e30fd52b1c68ebdd01..052b9dcfbc5f7bc3f618b0229ec925465758c120 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js @@ -9,10 +9,10 @@ row: '<', col: '<', cancel: '&', - onSuccess: '&' + doSave: '&' }, templateUrl: '~/crmSearchDisplay/crmSearchDisplayEditable.html', - controller: function($scope, $element, crmApi4, crmStatus) { + controller: function($scope, $element, crmApi4) { var ctrl = this, initialValue, col; @@ -58,9 +58,7 @@ var record = _.cloneDeep(col.edit.record); record[col.edit.value_key] = ctrl.value; $('input', $element).attr('disabled', true); - crmStatus({}, crmApi4(col.edit.entity, 'update', { - values: record - })).then(ctrl.onSuccess); + ctrl.doSave({apiCall: [col.edit.entity, 'update', {values: record}]}); }; function loadOptions() { diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js index e1e49cbf8d9ca845d7aeb031665693c94d9b17b1..41c07dda5539d17d6106133810e506ba21b167e9 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js @@ -2,7 +2,7 @@ "use strict"; // Trait provides base methods and properties common to all search display types - angular.module('crmSearchDisplay').factory('searchDisplayBaseTrait', function(crmApi4) { + angular.module('crmSearchDisplay').factory('searchDisplayBaseTrait', function(crmApi4, crmStatus) { // Return a base trait shared by all search display controllers // Gets mixed in using angular.extend() @@ -90,23 +90,29 @@ }, // Call SearchDisplay.run and update ctrl.results and ctrl.rowCount - runSearch: function(editedRow) { + runSearch: function(apiCalls, statusParams, editedRow) { var ctrl = this, requestId = ++this._runCount, apiParams = this.getApiParams(); - this.loading = true; + if (!statusParams) { + this.loading = true; + } _.each(ctrl.onPreRun, function(callback) { callback.call(ctrl, apiParams); }); - return crmApi4('SearchDisplay', 'run', apiParams).then(function(results) { + apiCalls = apiCalls || []; + apiCalls.push(['SearchDisplay', 'run', apiParams]); + var apiRequest = crmApi4(apiCalls); + apiRequest.then(function(apiResults) { if (requestId < ctrl._runCount) { return; // Another request started after this one } - ctrl.results = results; + ctrl.results = _.last(apiResults); ctrl.editing = ctrl.loading = false; - if (!ctrl.rowCount) { - if (!ctrl.limit || results.length < ctrl.limit) { - ctrl.rowCount = results.length; + // Update rowCount if running for the first time or during an update op + if (!ctrl.rowCount || editedRow) { + if (!ctrl.limit || ctrl.results.length < ctrl.limit) { + ctrl.rowCount = ctrl.results.length; } else if (ctrl.settings.pager) { var params = ctrl.getApiParams('row_count'); crmApi4('SearchDisplay', 'run', params).then(function(result) { @@ -115,7 +121,7 @@ } } _.each(ctrl.onPostRun, function(callback) { - callback.call(ctrl, results, 'success', editedRow); + callback.call(ctrl, ctrl.results, 'success', editedRow); }); }, function(error) { if (requestId < ctrl._runCount) { @@ -127,6 +133,10 @@ callback.call(ctrl, error, 'error', editedRow); }); }); + if (statusParams) { + crmStatus(statusParams, apiRequest); + } + return apiRequest; }, formatFieldValue: function(colData) { return angular.isArray(colData.val) ? colData.val.join(', ') : colData.val; diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js index 403ddeab5398fffd752fc4684ed0053aca39a0ce..b671627c4af8d687058b5d1ccc0c4ce26e0c5927 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js @@ -11,7 +11,7 @@ sort: [], isSortable: function(col) { - return col.type === 'field' && col.sortable !== false; + return !this.settings.draggable && col.type === 'field' && col.sortable !== false; }, getSort: function(col) { diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.html b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.html index 5d8c3b71964265d8a7b9b0611e4a9477474516d3..46c09304ed634b513b85fda8a44b102518c27fec 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.html @@ -2,7 +2,7 @@ <div ng-include="'~/crmSearchDisplay/SearchButton.html'" ng-if="$ctrl.settings.button"></div> <div class="crm-search-display-grid-container crm-search-display-grid-layout-{{$ctrl.settings.colno}}" - ng-include="'~/crmSearchDisplayGrid/crmSearchDisplayGridItems.html'" + ng-include="'~/crmSearchDisplayGrid/crmSearchDisplayGrid' + ($ctrl.loading ? 'Loading' : 'Items') + '.html'" ></div> <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGridLoading.html b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGridLoading.html new file mode 100644 index 0000000000000000000000000000000000000000..b63dd058f7fa31d15e05d4d1367f456c6fc4a419 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGridLoading.html @@ -0,0 +1,4 @@ +<!-- Placeholder shown during ajax loading --> +<div ng-repeat="num in [1,2,3,4,5] track by $index" style="width: 100px; height: 50px;"> + <div class="crm-search-loading-placeholder"></div> +</div> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.html b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.html index 5428a7713d1e755412e7e1812ffc474d979d7696..1b20b52b6d18c37d3a50093ba6db7415e1a23ed4 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.html @@ -1,6 +1,6 @@ <div class="crm-search-display crm-search-display-list"> <div ng-include="'~/crmSearchDisplay/SearchButton.html'" ng-if="$ctrl.settings.button"></div> - <ol ng-if=":: $ctrl.settings.style === 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ol> - <ul ng-if=":: $ctrl.settings.style !== 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ul> + <ol ng-if=":: $ctrl.settings.style === 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayList' + ($ctrl.loading ? 'Loading' : 'Items') + '.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ol> + <ul ng-if=":: $ctrl.settings.style !== 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayList' + ($ctrl.loading ? 'Loading' : 'Items') + '.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ul> <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayListLoading.html b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayListLoading.html new file mode 100644 index 0000000000000000000000000000000000000000..af84f53ea46e94b27d6d4f136137422880624a30 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayListLoading.html @@ -0,0 +1,4 @@ +<!-- Placeholder shown during ajax loading --> +<li ng-repeat="num in [1,2,3,4,5] track by $index"> + <div class="crm-search-loading-placeholder"></div> +</li> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php b/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php index d010a2f97d6af24312033a5f6cff79a5b773a235..c52b7f3e173c15e13555ebc2f793b53313e9209e 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable.ang.php @@ -9,7 +9,7 @@ return [ 'ang/crmSearchDisplayTable', ], 'basePages' => ['civicrm/search', 'civicrm/admin/search'], - 'requires' => ['crmSearchDisplay', 'crmUi', 'crmSearchTasks', 'ui.bootstrap'], + 'requires' => ['crmSearchDisplay', 'crmUi', 'crmSearchTasks', 'ui.bootstrap', 'ui.sortable'], 'bundles' => ['bootstrap3'], 'exports' => [ 'crm-search-display-table' => 'E', diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js index 096c033d959463dd9a94a836df405a93249fa4ce..d1c859ef49401100e632a6d5fff73e3982d10670 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js @@ -13,13 +13,45 @@ afFieldset: '?^^afFieldset' }, templateUrl: '~/crmSearchDisplayTable/crmSearchDisplayTable.html', - controller: function($scope, $element, searchDisplayBaseTrait, searchDisplayTasksTrait, searchDisplaySortableTrait) { + controller: function($scope, $element, searchDisplayBaseTrait, searchDisplayTasksTrait, searchDisplaySortableTrait, crmApi4, crmStatus) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), // Mix in traits to this controller ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplayTasksTrait, searchDisplaySortableTrait); + this.$onInit = function() { this.initializeDisplay($scope, $element); + + if (ctrl.settings.draggable) { + ctrl.draggableOptions = { + containment: 'table', + direction: 'vertical', + handle: '.crm-draggable', + forcePlaceholderSize: true, + helper: function(e, ui) { + // Prevent table row width from changing during drag + ui.children().each(function() { + $(this).width($(this).width()); + }); + return ui; + }, + stop: function(e, ui) { + $scope.$apply(function() { + var movedItem = ui.item.sortable.model, + oldPosition = ui.item.sortable.index, + newPosition = ctrl.results.indexOf(movedItem), + displacement = newPosition < oldPosition ? -1 : 1, + displacedItem = ctrl.results[newPosition - displacement], + weightColumn = ctrl.settings.draggable, + updateParams = {where: [['id', '=', movedItem.data.id]], values: {}}; + if (newPosition > -1 && oldPosition !== newPosition) { + updateParams.values[weightColumn] = displacedItem.data[weightColumn]; + ctrl.runSearch([[ctrl.apiEntity, 'update', updateParams]], {}, movedItem); + } + }); + } + }; + } }; } diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html index 5857239c13684814984f958f3c61e95f1c4fa488..2731e1f056816a3ce263d4d5ae5dd6bdac7d7710 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html @@ -6,16 +6,19 @@ <table class="{{:: $ctrl.settings.classes.join(' ') }}"> <thead> <tr> - <th class="crm-search-result-select" ng-if=":: $ctrl.settings.actions"> - <input type="checkbox" ng-disabled="$ctrl.loading || !$ctrl.results.length" ng-checked="$ctrl.allRowsSelected" ng-click="$ctrl.selectAllRows()" > + <th class="crm-search-result-select" ng-if=":: $ctrl.settings.actions || $ctrl.settings.draggable"> + <i ng-if=":: $ctrl.settings.draggable" class="crm-i fa-sort-amount-asc" title="{{:: ts('Drag columns to reposition') }}"></i> + <input type="checkbox" ng-if=":: $ctrl.settings.actions" ng-disabled="$ctrl.loading || !$ctrl.results.length" ng-checked="$ctrl.allRowsSelected" ng-click="$ctrl.selectAllRows()" > </th> - <th ng-repeat="col in $ctrl.settings.columns" ng-click="$ctrl.setSort(col, $event)" title="{{:: $ctrl.isSortable(col) ? ts('Click to sort results (shift-click to sort by multiple).') : '' }}"> + <th ng-repeat="col in $ctrl.settings.columns" ng-click="$ctrl.setSort(col, $event)" class="{{:: $ctrl.isSortable(col) ? 'crm-sortable-col' : ''}}" title="{{:: $ctrl.isSortable(col) ? ts('Click to sort results (shift-click to sort by multiple).') : '' }}"> <i ng-if=":: $ctrl.isSortable(col)" class="crm-i {{ $ctrl.getSort(col) }}"></i> <span>{{:: col.label }}</span> </th> </tr> </thead> - <tbody ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTableBody.html'"></tbody> + <tbody ng-if="$ctrl.loading" ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTableLoading.html'"></tbody> + <tbody ng-if="!$ctrl.loading && !$ctrl.settings.draggable" ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTableBody.html'"></tbody> + <tbody ng-if="!$ctrl.loading && $ctrl.settings.draggable" ng-include="'~/crmSearchDisplayTable/crmSearchDisplayTableBody.html'" ui-sortable="$ctrl.draggableOptions" ng-model="$ctrl.results"></tbody> </table> <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html index f3f525aa6f1115c8330911cf5231bdcb0e6f12df..1bb55193a4f431cb46beef807b508842937716ee 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html @@ -1,6 +1,9 @@ <tr ng-repeat="(rowIndex, row) in $ctrl.results"> - <td ng-if=":: $ctrl.settings.actions" class="{{:: row.cssClass }}"> - <input type="checkbox" ng-checked="$ctrl.isRowSelected(row)" ng-click="$ctrl.selectRow(row)" ng-disabled="!!$ctrl.loadingAllRows"> + <td ng-if=":: $ctrl.settings.actions || $ctrl.settings.draggable" class="{{:: row.cssClass }}"> + <span ng-if=":: $ctrl.settings.draggable" class="crm-draggable" title="{{:: ts('Drag to reposition') }}"> + <i class="crm-i fa-arrows-v"></i> + </span> + <input ng-if=":: $ctrl.settings.actions" type="checkbox" ng-checked="$ctrl.isRowSelected(row)" ng-click="$ctrl.selectRow(row)" ng-disabled="!!$ctrl.loadingAllRows"> </td> <td ng-repeat="(colIndex, colData) in row.columns" ng-include="'~/crmSearchDisplay/colType/' + $ctrl.settings.columns[colIndex].type + '.html'" title="{{:: colData.title }}" class="{{:: row.cssClass }} {{:: colData.cssClass }}"> </td> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableLoading.html b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableLoading.html new file mode 100644 index 0000000000000000000000000000000000000000..35738b7edd6b4adae646a79839fc0fa105785d82 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableLoading.html @@ -0,0 +1,9 @@ +<!-- Placeholder table rows shown during ajax loading --> +<tr ng-repeat="num in [1,2,3,4,5] track by $index"> + <td ng-if=":: $ctrl.settings.actions || $ctrl.settings.draggable"> + <input ng-if=":: $ctrl.settings.actions" type="checkbox" disabled> + </td> + <td ng-repeat="col in $ctrl.settings.columns"> + <div class="crm-search-loading-placeholder"></div> + </td> +</tr> diff --git a/civicrm/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js index f7cb558d76649b176a57509ddbe0571cd7b995bd..4dc4e14a12041f406fddffe77cd045cd3bce455d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js @@ -55,6 +55,7 @@ refreshAfterTask: function() { this.selectedRows.length = 0; this.allRowsSelected = false; + this.rowCount = undefined; this.runSearch(); }, @@ -70,7 +71,7 @@ if (editedRow && status === 'success') { // If edited row disappears (because edits cause it to not meet search criteria), deselect it var index = this.selectedRows.indexOf(editedRow.key); - if (index > -1 && !_.findWhere(results, {id: editedRow.key})) { + if (index > -1 && !_.findWhere(results, {key: editedRow.key})) { this.selectedRows.splice(index, 1); } } diff --git a/civicrm/ext/search_kit/css/crmSearchDisplay.css b/civicrm/ext/search_kit/css/crmSearchDisplay.css new file mode 100644 index 0000000000000000000000000000000000000000..a2c84a7a4597b9e1f5a652175f10a4fad865b0de --- /dev/null +++ b/civicrm/ext/search_kit/css/crmSearchDisplay.css @@ -0,0 +1,40 @@ +/* Sortable headers */ +#bootstrap-theme .crm-search-display th.crm-sortable-col { + cursor: pointer; +} +#bootstrap-theme .crm-search-display th i.fa-sort-desc, +#bootstrap-theme .crm-search-display th i.fa-sort-asc { + color: #1a5a82; +} +#bootstrap-theme .crm-search-display th:not(:hover) i.fa-sort { + opacity: .5; +} + +/* Loading placeholders */ +#bootstrap-theme .crm-search-loading-placeholder { + height: 2em; + width: 80%; + position: relative; + overflow: hidden; + background-color: rgba(0,0,0,.04); + display: inline-block; +} +#bootstrap-theme .crm-search-loading-placeholder::before { + content: ''; + display: block; + position: absolute; + left: -150px; + top: 0; + height: 100%; + width: 150px; + background: linear-gradient(to right, transparent 0%, rgba(0,0,0,.1) 50%, transparent 100%); + animation: searchKitLoadingAnimation 1s cubic-bezier(0.4, 0.0, 0.2, 1) infinite; +} +@keyframes searchKitLoadingAnimation { + from { + left: -150px; + } + to { + left: 100%; + } +} diff --git a/civicrm/ext/search_kit/css/crmSearchTasks.css b/civicrm/ext/search_kit/css/crmSearchTasks.css index dbd48542e1c2ea67f80c5e4b48cc1ba21a50bd4f..89fada1d5909697343b820e7a8f22db270184be5 100644 --- a/civicrm/ext/search_kit/css/crmSearchTasks.css +++ b/civicrm/ext/search_kit/css/crmSearchTasks.css @@ -26,13 +26,3 @@ bottom: -22px; left: 0; } -#bootstrap-theme .crm-search-display th[ng-click] { - cursor: pointer; -} -#bootstrap-theme .crm-search-display th i.fa-sort-desc, -#bootstrap-theme .crm-search-display th i.fa-sort-asc { - color: #1a5a82; -} -#bootstrap-theme .crm-search-display th:not(:hover) i.fa-sort { - opacity: .5; -} diff --git a/civicrm/ext/search_kit/info.xml b/civicrm/ext/search_kit/info.xml index bea886a3b16ffdd2bad884a8e0603d100f32456f..39cc5f8c06929a3c1fb3c8a5e6d6b4d6fd5e9c1e 100644 --- a/civicrm/ext/search_kit/info.xml +++ b/civicrm/ext/search_kit/info.xml @@ -9,12 +9,13 @@ <email>coleman@civicrm.org</email> </maintainer> <urls> + <url desc="Documentation">https://docs.civicrm.org/user/en/latest/the-user-interface/search-kit/</url> <url desc="Chat">https://chat.civicrm.org/civicrm/channels/search-improvements</url> <url desc="Issues">https://lab.civicrm.org/dev/report/-/issues</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-01-06</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <develStage>beta</develStage> <compatibility> <ver>5.38</ver> @@ -25,6 +26,11 @@ <psr4 prefix="Civi\" path="Civi"/> </classloader> <upgrader>CRM_Search_Upgrader</upgrader> + <mixins> + <mixin>ang-php@1.0.0</mixin> + <mixin>menu-xml@1.0.0</mixin> + <mixin>mgd-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Search</namespace> </civix> diff --git a/civicrm/ext/search_kit/search_kit.civix.php b/civicrm/ext/search_kit/search_kit.civix.php index 9ed76d92146e1d1c1ee7a8126a1486e55e92889c..dde94ac93763bc231a11aac7d87ee1abff5e07a3 100644 --- a/civicrm/ext/search_kit/search_kit.civix.php +++ b/civicrm/ext/search_kit/search_kit.civix.php @@ -107,19 +107,6 @@ function _search_kit_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _search_kit_civix_civicrm_xmlMenu(&$files) { - foreach (_search_kit_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -217,136 +204,6 @@ function _search_kit_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only - * for backward compatibility of extension code that uses it. - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array - */ -function _search_kit_civix_find_files($dir, $pattern) { - return CRM_Utils_File::findFiles($dir, $pattern); -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _search_kit_civix_civicrm_managed(&$entities) { - $mgdFiles = _search_kit_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _search_kit_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_search_kit_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _search_kit_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _search_kit_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _search_kit_civix_civicrm_themes(&$themes) { - $files = _search_kit_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array - */ -function _search_kit_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -429,18 +286,6 @@ function _search_kit_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _search_kit_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/search_kit/search_kit.php b/civicrm/ext/search_kit/search_kit.php index c37d3e5c482df014e340672d4f210383bc1d6548..24a0e76058af4593fda561d6b738a9b39ddce263 100644 --- a/civicrm/ext/search_kit/search_kit.php +++ b/civicrm/ext/search_kit/search_kit.php @@ -38,27 +38,6 @@ function search_kit_civicrm_alterApiRoutePermissions(&$permissions, $entity, $ac } } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function search_kit_civicrm_xmlMenu(&$files) { - _search_kit_civix_civicrm_xmlMenu($files); -} - -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function search_kit_civicrm_managed(&$entities) { - _search_kit_civix_civicrm_managed($entities); -} - /** * Implements hook_civicrm_angularModules(). * @@ -70,7 +49,6 @@ function search_kit_civicrm_managed(&$entities) { * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules */ function search_kit_civicrm_angularModules(&$angularModules) { - _search_kit_civix_civicrm_angularModules($angularModules); // Fetch all search tasks provided by extensions and add their Angular modules as crmSearchTasks dependencies $tasks = []; $null = NULL; @@ -90,15 +68,6 @@ function search_kit_civicrm_angularModules(&$angularModules) { } } -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function search_kit_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _search_kit_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Implements hook_civicrm_entityTypes(). * @@ -110,13 +79,6 @@ function search_kit_civicrm_entityTypes(&$entityTypes) { _search_kit_civix_civicrm_entityTypes($entityTypes); } -/** - * Implements hook_civicrm_themes(). - */ -function search_kit_civicrm_themes(&$themes) { - _search_kit_civix_civicrm_themes($themes); -} - /** * Implements hook_civicrm_pre(). */ diff --git a/civicrm/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php b/civicrm/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9aeb06424c45d235f53cdf0a75aeec48a82d67ec --- /dev/null +++ b/civicrm/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php @@ -0,0 +1,101 @@ +<?php +namespace Civi\Search; + +use Civi\Test\HeadlessInterface; +use Civi\Test\TransactionalInterface; + +/** + * @group headless + */ +class AdminTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface { + + public function setUpHeadless() { + return \Civi\Test::headless()->installMe(__DIR__)->apply(); + } + + /** + */ + public function testGetJoins(): void { + \CRM_Core_BAO_ConfigSetting::disableComponent('CiviCase'); + $allowedEntities = Admin::getSchema(); + $this->assertArrayNotHasKey('Case', $allowedEntities); + $this->assertArrayNotHasKey('CaseContact', $allowedEntities); + + \CRM_Core_BAO_ConfigSetting::enableComponent('CiviCase'); + $allowedEntities = Admin::getSchema(); + $this->assertArrayHasKey('Case', $allowedEntities); + $this->assertArrayHasKey('CaseContact', $allowedEntities); + + $joins = Admin::getJoins($allowedEntities); + $this->assertNotEmpty($joins); + + $groupContactJoins = \CRM_Utils_Array::findAll($joins['Group'], [ + 'entity' => 'Contact', + 'bridge' => 'GroupContact', + 'alias' => 'Group_GroupContact_Contact', + 'multi' => TRUE, + ]); + $this->assertCount(1, $groupContactJoins); + $this->assertEquals( + ['GroupContact', ['id', '=', 'Group_GroupContact_Contact.group_id']], + $groupContactJoins[0]['conditions'] + ); + $this->assertEquals( + [['Group_GroupContact_Contact.status:name', '=', '"Added"']], + $groupContactJoins[0]['defaults'] + ); + + $relationshipJoins = \CRM_Utils_Array::findAll($joins['Contact'], [ + 'entity' => 'Contact', + 'bridge' => 'RelationshipCache', + 'alias' => 'Contact_RelationshipCache_Contact', + 'multi' => TRUE, + ]); + $this->assertCount(1, $relationshipJoins); + $this->assertEquals( + ['RelationshipCache', ['id', '=', 'Contact_RelationshipCache_Contact.far_contact_id']], + $relationshipJoins[0]['conditions'] + ); + $this->assertEquals( + [['Contact_RelationshipCache_Contact.near_relation:name', '=', '"Child of"']], + $relationshipJoins[0]['defaults'] + ); + + $eventParticipantJoins = \CRM_Utils_Array::findAll($joins['Event'], [ + 'entity' => 'Participant', + 'alias' => 'Event_Participant_event_id', + 'multi' => TRUE, + ]); + $this->assertCount(1, $eventParticipantJoins); + $this->assertNull($eventParticipantJoins[0]['bridge'] ?? NULL); + $this->assertEquals( + [['id', '=', 'Event_Participant_event_id.event_id']], + $eventParticipantJoins[0]['conditions'] + ); + + $tagActivityJoins = \CRM_Utils_Array::findAll($joins['Tag'], [ + 'entity' => 'Activity', + 'bridge' => 'EntityTag', + 'alias' => 'Tag_EntityTag_Activity', + 'multi' => TRUE, + ]); + $this->assertCount(1, $tagActivityJoins); + $this->assertEquals( + ['EntityTag', ['id', '=', 'Tag_EntityTag_Activity.tag_id']], + $tagActivityJoins[0]['conditions'] + ); + + $activityTagJoins = \CRM_Utils_Array::findAll($joins['Activity'], [ + 'entity' => 'Tag', + 'bridge' => 'EntityTag', + 'alias' => 'Activity_EntityTag_Tag', + 'multi' => TRUE, + ]); + $this->assertCount(1, $activityTagJoins); + $this->assertEquals( + ['EntityTag', ['id', '=', 'Activity_EntityTag_Tag.entity_id'], ['Activity_EntityTag_Tag.entity_table', '=', "'civicrm_activity'"]], + $activityTagJoins[0]['conditions'] + ); + } + +} diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/ManagedSearchTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/ManagedSearchTest.php new file mode 100644 index 0000000000000000000000000000000000000000..244d19ce13e400b865eaeb7e953eaab9184ef129 --- /dev/null +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/ManagedSearchTest.php @@ -0,0 +1,106 @@ +<?php +namespace api\v4\SearchDisplay; + +use Civi\Api4\SavedSearch; +use Civi\Test\HeadlessInterface; +use Civi\Test\HookInterface; +use Civi\Test\TransactionalInterface; + +/** + * @group headless + */ +class ManagedSearchTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface, HookInterface { + + /** + * @var array[] + */ + private $_managedEntities = []; + + public function setUp(): void { + $this->_managedEntities = []; + parent::setUp(); + } + + public function setUpHeadless() { + // Civi\Test has many helpers, like install(), uninstall(), sql(), and sqlFile(). + // See: https://docs.civicrm.org/dev/en/latest/testing/phpunit/#civitest + return \Civi\Test::headless() + ->installMe(__DIR__) + ->apply(); + } + + public function hook_civicrm_managed(array &$entities): void { + $entities = array_merge($entities, $this->_managedEntities); + } + + public function testDeleteUnusedSearch() { + $savedSearch = [ + 'module' => 'civicrm', + 'name' => 'testDeleteUnusedSearch', + 'entity' => 'SavedSearch', + 'cleanup' => 'unused', + 'update' => 'unmodified', + 'params' => [ + 'version' => 4, + 'values' => [ + 'name' => 'testDeleteUnusedSearch', + 'label' => 'Test Search', + 'description' => 'Original state', + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id'], + ], + ], + ], + ]; + $searchDisplay = [ + 'module' => 'civicrm', + 'name' => 'testDeleteUnusedDisplay', + 'entity' => 'SearchDisplay', + 'cleanup' => 'unused', + 'update' => 'unmodified', + 'params' => [ + 'version' => 4, + 'values' => [ + 'type' => 'table', + 'name' => 'testDeleteUnusedDisplay', + 'label' => 'testDeleteUnusedDisplay', + 'saved_search_id.name' => 'testDeleteUnusedSearch', + 'settings' => [ + 'limit' => 20, + 'pager' => TRUE, + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + ], + ], + ], + ], + ]; + // Add managed search + display + $this->_managedEntities[] = $savedSearch; + $this->_managedEntities[] = $searchDisplay; + \CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(); + + $search = SavedSearch::get(FALSE) + ->selectRowCount() + ->addWhere('name', '=', 'testDeleteUnusedSearch') + ->execute(); + $this->assertCount(1, $search); + + $this->_managedEntities = []; + \CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(); + + $search = SavedSearch::get(FALSE) + ->selectRowCount() + ->addWhere('name', '=', 'testDeleteUnusedSearch') + ->execute(); + $this->assertCount(0, $search); + } + +} diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php index feaee1539f1a3b28e7577ac9c513d5d9abe582fa..91a7ecf8a2c2f61b4f161de594e820b4dea3476b 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php @@ -7,6 +7,7 @@ use Civi\Api4\Contact; use Civi\Api4\Email; use Civi\Api4\SavedSearch; use Civi\Api4\SearchDisplay; +use Civi\Api4\Utils\CoreUtil; use Civi\Test\HeadlessInterface; use Civi\Test\TransactionalInterface; @@ -23,6 +24,11 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn ->apply(); } + public function tearDown(): void { + Afform::revert(FALSE)->addWhere('has_local', '=', TRUE)->execute(); + parent::tearDown(); + } + /** * Test running a searchDisplay within an afform. */ @@ -153,7 +159,7 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn $this->assertCount(1, $result); } - public function testDeleteSearchWillDeleteAfform() { + public function testSearchReferencesToAfform() { $search = SavedSearch::create(FALSE) ->setValues([ 'name' => 'TestSearchToDelete', @@ -186,6 +192,14 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn ]) ->execute()->first(); + // The search should have one reference (its display) + $refs = CoreUtil::getRefCount('SavedSearch', $search['id']); + $this->assertCount(1, $refs); + + // The display should have zero references + $refs = CoreUtil::getRefCount('SearchDisplay', $display['id']); + $this->assertCount(0, $refs); + Afform::create(FALSE) ->addValue('name', 'TestAfformToDelete') ->addValue('title', 'TestAfformToDelete') @@ -193,13 +207,44 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn ->addValue('layout', '<div><crm-search-display-table search-name="TestSearchToDelete" display-name="TestDisplayToDelete"></crm-search-display-table></div>') ->execute(); - $this->assertCount(1, Afform::get(FALSE)->addWhere('name', '=', 'TestAfformToDelete')->execute()); + $this->assertCount(1, Afform::get(FALSE)->addWhere('search_displays', 'CONTAINS', 'TestSearchToDelete.TestDisplayToDelete')->execute()); + + // The search should now have two references (its display + Afform) + $refs = CoreUtil::getRefCount('SavedSearch', $search['id']); + $this->assertCount(2, $refs); + + // The display should now have one reference (the Afform) + $refs = CoreUtil::getRefCount('SearchDisplay', $display['id']); + $this->assertCount(1, $refs); + $this->assertEquals('Afform', $refs[0]['type']); + + // Create an afform that uses the search default display + Afform::create(FALSE) + ->addValue('name', 'TestAfformToDelete2') + ->addValue('title', 'TestAfformToDelete2') + ->setLayoutFormat('html') + ->addValue('layout', '<div><crm-search-display-table search-name="TestSearchToDelete"></crm-search-display-table></div>') + ->execute(); + + $this->assertCount(1, Afform::get(FALSE)->addWhere('search_displays', 'CONTAINS', 'TestSearchToDelete')->execute()); + $this->assertCount(2, Afform::get(FALSE)->addWhere('name', 'CONTAINS', 'TestAfformToDelete')->execute()); + + // The search should now have three references (its display + 2 Afforms) + $refs = CoreUtil::getRefCount('SavedSearch', $search['id']); + $this->assertCount(2, $refs); + $this->assertEquals(2, array_column($refs, 'count', 'type')['Afform']); + + // The display should still have one reference (the Afform) + $refs = CoreUtil::getRefCount('SearchDisplay', $display['id']); + $this->assertCount(1, $refs); + $this->assertEquals('Afform', $refs[0]['type']); SavedSearch::delete(FALSE) ->addWhere('name', '=', 'TestSearchToDelete') ->execute(); - $this->assertCount(0, Afform::get(FALSE)->addWhere('name', '=', 'TestAfformToDelete')->execute()); + $this->assertCount(0, Afform::get(FALSE)->addWhere('search_displays', 'CONTAINS', 'TestSearchToDelete.TestDisplayToDelete')->execute()); + $this->assertCount(0, Afform::get(FALSE)->addWhere('name', 'CONTAINS', 'TestAfformToDelete')->execute()); } } diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchExportTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchExportTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9a90a0910c42be6bc25f9dbf3a80816ebc357bf6 --- /dev/null +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchExportTest.php @@ -0,0 +1,121 @@ +<?php +namespace api\v4\SearchDisplay; + +use Civi\Api4\SavedSearch; +use Civi\Api4\SearchDisplay; +use Civi\Test\HeadlessInterface; +use Civi\Test\TransactionalInterface; + +/** + * @group headless + */ +class SearchExportTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface { + + public function setUpHeadless() { + // Civi\Test has many helpers, like install(), uninstall(), sql(), and sqlFile(). + // See: https://docs.civicrm.org/dev/en/latest/testing/phpunit/#civitest + return \Civi\Test::headless() + ->installMe(__DIR__) + ->apply(); + } + + /** + * Test using the Export action on a SavedSearch. + */ + public function testExportSearch() { + $search = SavedSearch::create(FALSE) + ->setValues([ + 'name' => 'TestSearchToExport', + 'label' => 'TestSearchToExport', + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id'], + ], + ]) + ->execute()->first(); + + SearchDisplay::create(FALSE) + ->setValues([ + 'name' => 'TestDisplayToExport', + 'label' => 'TestDisplayToExport', + 'saved_search_id.name' => 'TestSearchToExport', + 'type' => 'table', + 'settings' => [ + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + ], + ], + 'acl_bypass' => FALSE, + ]) + ->execute(); + + $export = SavedSearch::export(FALSE) + ->setId($search['id']) + ->execute() + ->indexBy('name'); + + $this->assertCount(2, $export); + // Default update policy should be 'unmodified' + $this->assertEquals('unmodified', $export->first()['update']); + $this->assertEquals('unmodified', $export->itemAt(1)['update']); + // Default cleanup policy should be 'unused' + $this->assertEquals('unused', $export->first()['cleanup']); + $this->assertEquals('unused', $export->itemAt(1)['cleanup']); + // The savedSearch should be first before its reference entities + $this->assertEquals('SavedSearch', $export->first()['entity']); + // Ensure api version is set to 4 + $this->assertEquals(4, $export['SavedSearch_TestSearchToExport']['params']['version']); + $this->assertEquals('Contact', $export['SavedSearch_TestSearchToExport']['params']['values']['api_entity']); + // Ensure FK is set correctly + $this->assertArrayNotHasKey('saved_search_id', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']); + $this->assertEquals('TestSearchToExport', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']['saved_search_id.name']); + // Ensure value is used instead of pseudoconstant + $this->assertEquals('table', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']['type']); + $this->assertArrayNotHasKey('type:name', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']); + // Readonly fields should not be included + $this->assertArrayNotHasKey('created_date', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']); + $this->assertArrayNotHasKey('modified_date', $export['SavedSearch_TestSearchToExport_SearchDisplay_TestDisplayToExport']['params']['values']); + + // Add a second display + SearchDisplay::create(FALSE) + ->setValues([ + 'name' => 'SecondDisplayToExport', + 'label' => 'TestDisplayToExport', + 'saved_search_id.name' => 'TestSearchToExport', + 'type' => 'table', + 'settings' => [ + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + ], + ], + 'acl_bypass' => FALSE, + ]) + ->execute(); + + $export = SavedSearch::export(FALSE) + ->setId($search['id']) + ->setCleanup('always') + ->setUpdate('never') + ->execute() + ->indexBy('name'); + + $this->assertCount(3, $export); + $this->assertEquals('always', $export->first()['cleanup']); + $this->assertEquals('never', $export->first()['update']); + $this->assertEquals('always', $export->last()['cleanup']); + $this->assertEquals('never', $export->last()['update']); + $this->assertEquals('TestSearchToExport', $export['SavedSearch_TestSearchToExport_SearchDisplay_SecondDisplayToExport']['params']['values']['saved_search_id.name']); + } + +} diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php index 941708c43ebcd913e7e753f9132042c6f2148b05..ee09339fc1a2d607e178ed23167f136ed7f78761 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php @@ -718,4 +718,80 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter $this->assertStringContainsString('bg-warning', $result[2]['columns'][2]['cssClass']); } + /** + * Test conditional styles + */ + public function testPlaceholderFields() { + $lastName = uniqid(__FUNCTION__); + $sampleContacts = [ + ['first_name' => 'Zero', 'last_name' => $lastName, 'nick_name' => 'Nick'], + ['first_name' => 'First', 'last_name' => $lastName], + ]; + Contact::save(FALSE)->setRecords($sampleContacts)->execute(); + + $search = [ + 'name' => 'Test', + 'label' => 'Test Me', + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id', 'nick_name'], + 'where' => [['last_name', '=', $lastName]], + ], + 'acl_bypass' => FALSE, + ]; + + $display = [ + 'type' => 'table', + 'settings' => [ + 'actions' => TRUE, + 'columns' => [ + [ + 'type' => 'field', + 'key' => 'id', + 'dataType' => 'Integer', + 'label' => 'Contact ID', + 'sortable' => TRUE, + 'alignment' => 'text-center', + ], + [ + 'type' => 'field', + 'key' => 'nick_name', + 'dataType' => 'String', + 'label' => 'Display Name', + 'sortable' => TRUE, + 'rewrite' => '[nick_name] [last_name]', + 'empty_value' => '[first_name] [last_name]', + 'link' => [ + 'entity' => 'Contact', + 'action' => 'view', + 'target' => '_blank', + ], + 'title' => '[display_name]', + ], + ], + ], + ]; + + $result = SearchDisplay::Run(FALSE) + ->setSavedSearch($search) + ->setDisplay($display) + ->setReturn('page:1') + ->setSort([['id', 'ASC']]) + ->execute(); + + // Has a nick name + $this->assertEquals("Nick $lastName", $result[0]['columns'][1]['val']); + $this->assertEquals("Nick $lastName", $result[0]['columns'][1]['links'][0]['text']); + // Title is display name + $this->assertEquals("Zero $lastName", $result[0]['columns'][1]['title']); + // No nick name - using first name instead per empty_value setting + $this->assertEquals("First $lastName", $result[1]['columns'][1]['val']); + $this->assertEquals("First $lastName", $result[1]['columns'][1]['title']); + $this->assertEquals("First $lastName", $result[1]['columns'][1]['links'][0]['text']); + // Check links + $this->assertNotEmpty($result[0]['columns'][1]['links'][0]['url']); + $this->assertNotEmpty($result[1]['columns'][1]['links'][0]['url']); + } + } diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunWithCustomFieldTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunWithCustomFieldTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b62494aa35706249570141dde248261803dfee04 --- /dev/null +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunWithCustomFieldTest.php @@ -0,0 +1,106 @@ +<?php +namespace api\v4\SearchDisplay; + +use Civi\Api4\Contact; +use Civi\Api4\CustomField; +use Civi\Api4\CustomGroup; +use Civi\Api4\File; +use Civi\Test\HeadlessInterface; + +/** + * @group headless + */ +class SearchRunWithCustomFieldTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface { + + public function setUpHeadless() { + return \Civi\Test::headless() + ->installMe(__DIR__) + ->apply(); + } + + /** + * Delete all created custom groups. + * + * @throws \API_Exception + */ + public function tearDown(): void { + CustomGroup::delete(FALSE)->addWhere('id', '>', 0)->execute(); + parent::tearDown(); + } + + /** + * Test running a searchDisplay with various filters. + */ + public function testRunWithImageField() { + CustomGroup::create(FALSE) + ->addValue('name', 'TestSearchFields') + ->addValue('extends', 'Individual') + ->execute() + ->first(); + + CustomField::create(FALSE) + ->addValue('label', 'MyFile') + ->addValue('custom_group_id.name', 'TestSearchFields') + ->addValue('html_type', 'File') + ->addValue('data_type', 'File') + ->execute(); + + $lastName = uniqid(__FUNCTION__); + + $file = File::create() + ->addValue('mime_type', 'image/png') + ->addValue('uri', "tmp/$lastName.png") + ->execute()->first(); + + $sampleData = [ + ['first_name' => 'Zero', 'last_name' => $lastName, 'TestSearchFields.MyFile' => $file['id']], + ['first_name' => 'One', 'middle_name' => 'None', 'last_name' => $lastName], + ]; + Contact::save(FALSE)->setRecords($sampleData)->execute(); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id', 'first_name', 'last_name', 'TestSearchFields.MyFile'], + 'where' => [['last_name', '=', $lastName]], + ], + ], + 'display' => [ + 'type' => 'table', + 'label' => '', + 'settings' => [ + 'limit' => 20, + 'pager' => TRUE, + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'type' => 'field', + ], + [ + 'key' => 'TestSearchFields.MyFile', + 'label' => 'Type', + 'type' => 'image', + 'empty_value' => 'http://example.com/image', + ], + ], + 'sort' => [ + ['id', 'ASC'], + ], + ], + ], + ]; + + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertStringContainsString('id=' . $file['id'], $result[0]['data']['TestSearchFields.MyFile']); + $this->assertStringContainsString('id=' . $file['id'], $result[0]['columns'][1]['img']['src']); + $this->assertEmpty($result[1]['data']['TestSearchFields.MyFile']); + // Placeholder image + $this->assertStringContainsString('example.com', $result[1]['columns'][1]['img']['src']); + } + +} diff --git a/civicrm/ext/sequentialcreditnotes/info.xml b/civicrm/ext/sequentialcreditnotes/info.xml index 8959948489f9b6d2e0ec9b23242c572cb49ef128..b6fe3f55408a77f589c82bec6c8082a85826ad6b 100644 --- a/civicrm/ext/sequentialcreditnotes/info.xml +++ b/civicrm/ext/sequentialcreditnotes/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-28</releaseDate> - <version>5.44.0</version> + <version>5.45.0</version> <tags> <tag>mgmt:hidden</tag> </tags> @@ -23,6 +23,9 @@ <compatibility> <ver>5.24</ver> </compatibility> + <mixins> + <mixin>setting-php@1.0.0</mixin> + </mixins> <civix> <namespace>CRM/Sequentialcreditnotes</namespace> </civix> diff --git a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php index 891a0c069c78c9401f572235ffe8f1fba20a4c78..260b7128fcafd6343a6099272ec6d3b0a823a885 100644 --- a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php +++ b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php @@ -107,19 +107,6 @@ function _sequentialcreditnotes_civix_civicrm_config(&$config = NULL) { set_include_path($include_path); } -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu - */ -function _sequentialcreditnotes_civix_civicrm_xmlMenu(&$files) { - foreach (_sequentialcreditnotes_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } -} - /** * Implements hook_civicrm_install(). * @@ -216,160 +203,6 @@ function _sequentialcreditnotes_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern. - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param string $dir base dir - * @param string $pattern , glob pattern, eg "*.txt" - * - * @return array(string) - */ -function _sequentialcreditnotes_civix_find_files($dir, $pattern) { - if (is_callable(['CRM_Utils_File', 'findFiles'])) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = [$dir]; - $result = []; - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_sequentialcreditnotes_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} - -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed - */ -function _sequentialcreditnotes_civix_civicrm_managed(&$entities) { - $mgdFiles = _sequentialcreditnotes_civix_find_files(__DIR__, '*.mgd.php'); - sort($mgdFiles); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = E::LONG_NAME; - } - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - $entities[] = $e; - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes - */ -function _sequentialcreditnotes_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_sequentialcreditnotes_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = [ - 'module' => E::LONG_NAME, - 'name' => $name, - 'file' => $file, - ]; - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules - */ -function _sequentialcreditnotes_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _sequentialcreditnotes_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = E::LONG_NAME; - } - $angularModules[$name] = $module; - } -} - -/** - * (Delegated) Implements hook_civicrm_themes(). - * - * Find any and return any files matching "*.theme.php" - */ -function _sequentialcreditnotes_civix_civicrm_themes(&$themes) { - $files = _sequentialcreditnotes_civix_glob(__DIR__ . '/*.theme.php'); - foreach ($files as $file) { - $themeMeta = include $file; - if (empty($themeMeta['name'])) { - $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); - } - if (empty($themeMeta['ext'])) { - $themeMeta['ext'] = E::LONG_NAME; - } - $themes[$themeMeta['name']] = $themeMeta; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * - * @return array, possibly empty - */ -function _sequentialcreditnotes_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : []; -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * @@ -452,18 +285,6 @@ function _sequentialcreditnotes_civix_fixNavigationMenuItems(&$nodes, &$maxNavID } } -/** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function _sequentialcreditnotes_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR; - if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { - $metaDataFolders[] = $settingsDir; - } -} - /** * (Delegated) Implements hook_civicrm_entityTypes(). * diff --git a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.php b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.php index 4e84a7676cdf54f18a73d996be8c50a311f7792f..efb3d3cd380a219c1c79c5e1ccc236a50a08a191 100644 --- a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.php +++ b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.php @@ -3,15 +3,6 @@ require_once 'sequentialcreditnotes.civix.php'; use Civi\Api4\Contribution; -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders - */ -function sequentialcreditnotes_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _sequentialcreditnotes_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Add a creditnote_id if appropriate. * diff --git a/civicrm/js/crm.ajax.js b/civicrm/js/crm.ajax.js index 609e1074a16dd56d345226eb6d63928325206d0b..39f7c85ef9aa29d3c196f69d2c9094bd90aafcb3 100644 --- a/civicrm/js/crm.ajax.js +++ b/civicrm/js/crm.ajax.js @@ -511,6 +511,7 @@ var $el = $(this), label = $el.is('input') ? $el.attr('value') : $el.text(), identifier = $el.attr('name') || $el.attr('href'); + $el.attr('tabindex', '-1'); if (!identifier || identifier === '#' || $.inArray(identifier, added) < 0) { var $icon = $el.find('.icon, .crm-i'), button = {'data-identifier': identifier, text: label, click: function() { @@ -526,7 +527,7 @@ added.push(identifier); } // display:none causes the form to not submit when pressing "enter" - $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}); + $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}).attr('aria-hidden', 'true'); }); $el.dialog('option', 'buttons', buttons); } diff --git a/civicrm/mixin/ang-php@1/mixin.php b/civicrm/mixin/ang-php@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..6719db3571176c71f4d06846afb55ee821555a48 --- /dev/null +++ b/civicrm/mixin/ang-php@1/mixin.php @@ -0,0 +1,37 @@ +<?php + +/** + * Auto-register "ang/*.ang.php" files. + * + * @mixinName ang-php + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::angularModules() + */ + Civi::dispatcher()->addListener('hook_civicrm_angularModules', function ($e) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + if (!$mixInfo->isActive() || !is_dir($mixInfo->getPath('ang'))) { + return; + } + + $files = (array) glob($mixInfo->getPath('ang/*.ang.php')); + foreach ($files as $file) { + $name = preg_replace(':\.ang\.php$:', '', basename($file)); + $module = include $file; + if (empty($module['ext'])) { + $module['ext'] = $mixInfo->longName; + } + $e->angularModules[$name] = $module; + } + }); + +}; diff --git a/civicrm/mixin/case-xml@1/mixin.php b/civicrm/mixin/case-xml@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..649c51e3c6d8c1d809d2ca4bd5d9b2b9274520f6 --- /dev/null +++ b/civicrm/mixin/case-xml@1/mixin.php @@ -0,0 +1,41 @@ +<?php + +/** + * Auto-register "xml/case/*.xml" files. + * + * @mixinName case-xml + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::caseTypes() + */ + Civi::dispatcher()->addListener('hook_civicrm_caseTypes', function ($e) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + + if (!$mixInfo->isActive() || !is_dir($mixInfo->getPath('xml/case'))) { + return; + } + + foreach ((array) glob($mixInfo->getPath('xml/case/*.xml')) as $file) { + $name = preg_replace('/\.xml$/', '', basename($file)); + if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { + $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); + throw new CRM_Core_Exception($errorMessage); + } + $e->caseTypes[$name] = [ + 'module' => $mixInfo->longName, + 'name' => $name, + 'file' => $file, + ]; + } + }); + +}; diff --git a/civicrm/mixin/menu-xml@1/mixin.php b/civicrm/mixin/menu-xml@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..4c0b2276c0a0c0b8a1180294cc8ff1899321a449 --- /dev/null +++ b/civicrm/mixin/menu-xml@1/mixin.php @@ -0,0 +1,31 @@ +<?php + +/** + * Auto-register "xml/Menu/*.xml" files. + * + * @mixinName menu-xml + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::xmlMenu() + */ + Civi::dispatcher()->addListener('hook_civicrm_xmlMenu', function ($e) use ($mixInfo) { + if (!$mixInfo->isActive()) { + return; + } + + $files = (array) glob($mixInfo->getPath('xml/Menu/*.xml')); + foreach ($files as $file) { + $e->files[] = $file; + } + }); + +}; diff --git a/civicrm/mixin/mgd-php@1/mixin.php b/civicrm/mixin/mgd-php@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..39d45b14abcfbd711b4594c72293dca7b49069e5 --- /dev/null +++ b/civicrm/mixin/mgd-php@1/mixin.php @@ -0,0 +1,42 @@ +<?php + +/** + * Auto-register "**.mgd.php" files. + * + * @mixinName mgd-php + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::managed() + */ + Civi::dispatcher()->addListener('hook_civicrm_managed', function ($event) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + if (!$mixInfo->isActive()) { + return; + } + + $mgdFiles = CRM_Utils_File::findFiles($mixInfo->getPath(), '*.mgd.php'); + sort($mgdFiles); + foreach ($mgdFiles as $file) { + $es = include $file; + foreach ($es as $e) { + if (empty($e['module'])) { + $e['module'] = $mixInfo->longName; + } + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } + $event->entities[] = $e; + } + } + }); + +}; diff --git a/civicrm/mixin/polyfill.md b/civicrm/mixin/polyfill.md new file mode 100644 index 0000000000000000000000000000000000000000..d8059fc2845a8d24e5d5521626507821afc79411 --- /dev/null +++ b/civicrm/mixin/polyfill.md @@ -0,0 +1,46 @@ +# Mixin Polyfill + +Mixins will have built-in support in a future version of CiviCRM (vTBD). However, +for an extension to use a mixin on an older version of CiviCRM, it should +include the polyfill ([mixin/polyfill.php](../mixin/polyfill.php)). + +## Usage + +The polyfill will be enabled in `civix` (vTBD). To activate the polyfill in +a bespoke extension (`myext`, `org.example.myextension`), copy `mixin/polyfill.php`. +Load this file during a few key moments: + +```php +function _myext_mixin_polyfill() { + if (!class_exists('CRM_Extension_MixInfo')) { + $polyfill = __DIR__ . '/mixin/polyfill.php'; + (require $polyfill)('org.example.myextension', 'myext', __DIR__); + } +} + +function myext_civicrm_config() { + _myext_mixin_polyfill(); +} + +function myext_civicrm_install() { + _myext_mixin_polyfill(); +} + +function myext_civicrm_enable() { + _myext_mixin_polyfill(); +} +``` + +## Limitations / Comparison + +The polyfill loader is not as sophisticated as the core loader. Here's a comparison to highlight some of the limitations: + +| Feature | Core Loader | Polyfill Loader | +| -- | -- | -- | +| Load mixins from files (`mixin/*.mixin.php`) | Yes | Yes | +| Load mixins from subdirectories (`mixin/*/mixin.php`) | Yes | No | +| Read annotations from mixin files (eg `@mixinVersion`) | Yes | No | +| Activation - How does it decide to activate a mixin? | Read `info.xml` | Read `mixin/*.mixin.php` | +| Boot cache - How does it store boot-cache? | All boot-caches combined into one file | Each extension has separate boot-cache file | +| Deduplication - If two extensions include the same mixin, then only load one copy. | Yes | Partial - for exact version matches. | +| Upgrade - If two extensions include different-but-compatible versions, always load the newer version. | Yes | No | diff --git a/civicrm/mixin/polyfill.php b/civicrm/mixin/polyfill.php new file mode 100644 index 0000000000000000000000000000000000000000..f57c5ebbf8051629f0efeccce952341c6a0eb2d6 --- /dev/null +++ b/civicrm/mixin/polyfill.php @@ -0,0 +1,101 @@ +<?php + +/** + * When deploying on systems that lack mixin support, fake it. + * + * @mixinFile polyfill.php + * + * This polyfill does some (persnickity) deduplication, but it doesn't allow upgrades or shipping replacements in core. + * + * Note: The polyfill.php is designed to be copied into extensions for interoperability. Consequently, this file is + * not used 'live' by `civicrm-core`. However, the file does need a canonical home, and it's convenient to keep it + * adjacent to the actual mixin files. + * + * @param string $longName + * @param string $shortName + * @param string $basePath + */ +return function ($longName, $shortName, $basePath) { + // Construct imitations of the mixin services. These cannot work as well (e.g. with respect to + // number of file-reads, deduping, upgrading)... but they should be OK for a few months while + // the mixin services become available. + + // List of active mixins; deduped by version + $mixinVers = []; + foreach ((array) glob($basePath . '/mixin/*.mixin.php') as $f) { + [$name, $ver] = explode('@', substr(basename($f), 0, -10)); + if (!isset($mixinVers[$name]) || version_compare($ver, $mixinVers[$name], '>')) { + $mixinVers[$name] = $ver; + } + } + $mixins = []; + foreach ($mixinVers as $name => $ver) { + $mixins[] = "$name@$ver"; + } + + // Imitate CRM_Extension_MixInfo. + $mixInfo = new class() { + + /** + * @var string + */ + public $longName; + + /** + * @var string + */ + public $shortName; + + public $_basePath; + + public function getPath($file = NULL) { + return $this->_basePath . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + public function isActive() { + return \CRM_Extension_System::singleton()->getMapper()->isActiveModule($this->shortName); + } + + }; + $mixInfo->longName = $longName; + $mixInfo->shortName = $shortName; + $mixInfo->_basePath = $basePath; + + // Imitate CRM_Extension_BootCache. + $bootCache = new class() { + + public function define($name, $callback) { + $envId = \CRM_Core_Config_Runtime::getId(); + $oldExtCachePath = \Civi::paths()->getPath("[civicrm.compile]/CachedExtLoader.{$envId}.php"); + $stat = stat($oldExtCachePath); + $file = Civi::paths()->getPath('[civicrm.compile]/CachedMixin.' . md5($name . ($stat['mtime'] ?? 0)) . '.php'); + if (file_exists($file)) { + return include $file; + } + else { + $data = $callback(); + file_put_contents($file, '<' . "?php\nreturn " . var_export($data, 1) . ';'); + return $data; + } + } + + }; + + // Imitate CRM_Extension_MixinLoader::run() + // Parse all live mixins before trying to scan any classes. + global $_CIVIX_MIXIN_POLYFILL; + foreach ($mixins as $mixin) { + // If the exact same mixin is defined by multiple exts, just use the first one. + if (!isset($_CIVIX_MIXIN_POLYFILL[$mixin])) { + $_CIVIX_MIXIN_POLYFILL[$mixin] = include_once $basePath . '/mixin/' . $mixin . '.mixin.php'; + } + } + foreach ($mixins as $mixin) { + // If there's trickery about installs/uninstalls/resets, then we may need to register a second time. + if (!isset(\Civi::$statics[__FUNCTION__][$mixin])) { + \Civi::$statics[__FUNCTION__][$mixin] = 1; + $func = $_CIVIX_MIXIN_POLYFILL[$mixin]; + $func($mixInfo, $bootCache); + } + } +}; diff --git a/civicrm/mixin/setting-php@1/mixin.php b/civicrm/mixin/setting-php@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..7195af40dee388f9c3a6e47f4b4bc0a13e0a98fe --- /dev/null +++ b/civicrm/mixin/setting-php@1/mixin.php @@ -0,0 +1,32 @@ +<?php + +/** + * Auto-register "settings/*.setting.php" files. + * + * @mixinName setting-php + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::alterSettingsFolders() + */ + Civi::dispatcher()->addListener('hook_civicrm_alterSettingsFolders', function ($e) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + if (!$mixInfo->isActive()) { + return; + } + + $settingsDir = $mixInfo->getPath('settings'); + if (!in_array($settingsDir, $e->settingsFolders) && is_dir($settingsDir)) { + $e->settingsFolders[] = $settingsDir; + } + }); + +}; diff --git a/civicrm/mixin/theme-php@1/mixin.php b/civicrm/mixin/theme-php@1/mixin.php new file mode 100644 index 0000000000000000000000000000000000000000..c49b60538f827dff683be196dc7559243b24ad43 --- /dev/null +++ b/civicrm/mixin/theme-php@1/mixin.php @@ -0,0 +1,38 @@ +<?php + +/** + * Auto-register "*.theme.php" files. + * + * @mixinName theme-php + * @mixinVersion 1.0.0 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::themes() + */ + Civi::dispatcher()->addListener('hook_civicrm_themes', function ($e) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + if (!$mixInfo->isActive()) { + return; + } + $files = (array) glob($mixInfo->getPath('*.theme.php')); + foreach ($files as $file) { + $themeMeta = include $file; + if (empty($themeMeta['name'])) { + $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); + } + if (empty($themeMeta['ext'])) { + $themeMeta['ext'] = $mixInfo->longName; + } + $e->themes[$themeMeta['name']] = $themeMeta; + } + }); + +}; diff --git a/civicrm/packages/PHP/Beautifier.php b/civicrm/packages/PHP/Beautifier.php index ebe21fe21b4aef62cb26c3b248f0320ebf32ed43..09473523185df5a560e748da3bfa9d01bb820a64 100644 --- a/civicrm/packages/PHP/Beautifier.php +++ b/civicrm/packages/PHP/Beautifier.php @@ -1303,7 +1303,7 @@ class PHP_Beautifier implements PHP_Beautifier_Interface public function getPreviousTokenConstant($iPrev = 1) { $sToken = $this->getPreviousToken($iPrev); - return $sToken[0]; + return $sToken[0] ?? NULL; } /** * Get the 'x' significant (non whitespace) previous token text diff --git a/civicrm/packages/kcfinder/core/class/browser.php b/civicrm/packages/kcfinder/core/class/browser.php index 36d1350914eb0ed03184999a8d0b7a6bc25811ae..4421d58604499e20ae1b13fd8f5c096c5bcbb4d1 100644 --- a/civicrm/packages/kcfinder/core/class/browser.php +++ b/civicrm/packages/kcfinder/core/class/browser.php @@ -526,7 +526,7 @@ class browser extends uploader { $this->errorMsg("Unknown error."); $filename = basename($dir) . ".zip"; do { - $file = md5(time() . session_id()); + $file = md5(time() . CRM_Core_Config::singleton()->userSystem->getSessionId()); $file = "{$this->config['uploadDir']}/$file.zip"; } while (file_exists($file)); new zipFolder($file, $dir); @@ -559,7 +559,7 @@ class browser extends uploader { } do { - $file = md5(time() . session_id()); + $file = md5(time() . CRM_Core_Config::singleton()->userSystem->getSessionId()); $file = "{$this->config['uploadDir']}/$file.zip"; } while (file_exists($file)); @@ -601,7 +601,7 @@ class browser extends uploader { } do { - $file = md5(time() . session_id()); + $file = md5(time() . CRM_Core_Config::singleton()->userSystem->getSessionId()); $file = "{$this->config['uploadDir']}/$file.zip"; } while (file_exists($file)); @@ -919,4 +919,4 @@ class browser extends uploader { } } -?> \ No newline at end of file +?> diff --git a/civicrm/packages/kcfinder/core/class/uploader.php b/civicrm/packages/kcfinder/core/class/uploader.php index d2b0a3be482a4a6e94eab71e2e8c04bf9b43e4fe..e2c34d92f8018d0d22b8287a0cde78013279985f 100644 --- a/civicrm/packages/kcfinder/core/class/uploader.php +++ b/civicrm/packages/kcfinder/core/class/uploader.php @@ -115,7 +115,7 @@ class uploader { require "conf/config.php"; // SETTING UP SESSION - if (!session_id()) { + if (!CRM_Core_Config::singleton()->userSystem->getSessionId()) { if (isset($_CONFIG['_sessionLifetime'])) ini_set('session.gc_maxlifetime', $_CONFIG['_sessionLifetime'] * 60); if (isset($_CONFIG['_sessionDir'])) diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 8282dc49ec69a6a9dac972c61eb023c96d2fcbcd..224e3a227a7986fb09efc8654b83f8f313239a1a 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.45.0 + +Released January 5, 2022 + +- **[Synopsis](release-notes/5.45.0.md#synopsis)** +- **[Features](release-notes/5.45.0.md#features)** +- **[Bugs resolved](release-notes/5.45.0.md#bugs)** +- **[Miscellany](release-notes/5.45.0.md#misc)** +- **[Credits](release-notes/5.45.0.md#credits)** +- **[Feedback](release-notes/5.45.0.md#feedback)** + ## CiviCRM 5.44.0 Released December 1, 2021 diff --git a/civicrm/release-notes/5.45.0.md b/civicrm/release-notes/5.45.0.md new file mode 100644 index 0000000000000000000000000000000000000000..8e80f0180cd3748efedd099cd52a7451b67ad995 --- /dev/null +++ b/civicrm/release-notes/5.45.0.md @@ -0,0 +1,761 @@ +# CiviCRM 5.45.0 + +Released January 5, 2022 + +- **[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? | no | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Add CiviX class in Core? (Work Towards + [civix#175](https://github.com/totten/civix/issues/175): + [22198](https://github.com/civicrm/civicrm-core/pull/22198) and + [22199](https://github.com/civicrm/civicrm-core/pull/22199))** + + Adds support for mixins to civix and updates core extensions to use them. + +- **Escape-on-Input => Escape-on-Output (Work Towards + [dev/core#1328](https://lab.civicrm.org/dev/core/-/issues/1328): + [21956](https://github.com/civicrm/civicrm-core/pull/21956))** + + Adds option to enable escape-on-output. + +- **APIv4 Explorer - Optionally view results in PHP format + ([22010](https://github.com/civicrm/civicrm-core/pull/22010))** + + Improves the APIv4 Explorer UX by showing output in PHP format as well as + JSON. + +- **APIv4 - Add SortableEntity type which auto-adjusts weights + ([22137](https://github.com/civicrm/civicrm-core/pull/22137))** + + Gives APIv4 the ability to manage the "weight" of certain entities. + +- **APIv4 - Add export action for managed entities + ([22014](https://github.com/civicrm/civicrm-core/pull/22014))** + + Adds a new APIv4 export action which generates an exportable array suitable + for use in a .mgd.php file. + +- **APIv4 - Opt-in more ManagedEntity types + ([22068](https://github.com/civicrm/civicrm-core/pull/22068))** + + Adds the ManagedEntity trait to a number of entities that are commonly used + for configuration, making it possible to work with them as APIv4 managed + entities. + +- **SearchKit - Animated loading skeleton + ([22019](https://github.com/civicrm/civicrm-core/pull/22019))** + + Shows a wireframe "skeleton" while loading results in SearchKit. Improves the + user perception of load times. + +- **SearchKit - tabbed display for custom vs packaged searches + ([21986](https://github.com/civicrm/civicrm-core/pull/21986))** + + Splits the SearchKit admin UI in to 2 tabs - one for custom (locally-created) + searches, and one for packaged searches (defined in extensions). Adds a + "revert" button for packaged searches. + +- **SearchKit - Add default text/image to displays; support custom file fields + ([21992](https://github.com/civicrm/civicrm-core/pull/21992))** + + Allows for "placeholder" text in a search display when a column value is + empty. Also works for image fields. Image fields now support custom file + fields to display images out-of-the-box. + +- **SearchKit - Add drag-sortable weight functionality + ([22081](https://github.com/civicrm/civicrm-core/pull/22081))** + + Allows SearchKit table displays to be drag-sortable. + +- **SearchKit - enable search by case role + ([22121](https://github.com/civicrm/civicrm-core/pull/22121) and + [22270](https://github.com/civicrm/civicrm-core/pull/22270))** + + Permits searching for contacts by case role in SearchKit. + +- **SearchKit - Allow searches of OptionValues, LocationTypes, CustomFields + ([22151](https://github.com/civicrm/civicrm-core/pull/22151))** + + Flips the switch on a few entities to be searchable in SearchKit, with an eye + toward more UIs being built with it. + +- **SearchKit - Improve UX for refresh after editing + ([22125](https://github.com/civicrm/civicrm-core/pull/22125))** + + Makes editing records faster and easier, and fixes a bug where the pager + count would not be correctly updated. + +- **SearchKit - Improve search listing UI + ([22114](https://github.com/civicrm/civicrm-core/pull/22114))** + + Makes a few improvements to the main SearchKit screen (the tabbed listing of + Saved Searches) specifically: + + - More responsive switching between tabs + - Bookmarkable urls for each tab + - Fixes the "modified" column for packaged searches, only showing a value if + the packaged version has been overridden + - Only shows "revert" button when a packaged search has been overridden + +- **Update Afform & search kit info + ([22126](https://github.com/civicrm/civicrm-core/pull/22126))** + + Updates SearchKit and Afform info.xml files with more helpful and less + confusing titles, descriptions and links. + +- **Afform - Add table of submission results + ([22009](https://github.com/civicrm/civicrm-core/pull/22009))** + + Uses a SearchDisplay in an Afform to display form submissions. + +- **Afform - Display the extension in which an Afform is packaged + ([21960](https://github.com/civicrm/civicrm-core/pull/21960))** + + Displays extension name in the UI for packaged Afforms. + +- **Make more hardcoded strings available for translation + ([21994](https://github.com/civicrm/civicrm-core/pull/21994))** + + Improves translation. + +- **Alter default frequency for scheduled reminders job + ([dev/core#2916](https://lab.civicrm.org/dev/core/-/issues/2916): + [21835](https://github.com/civicrm/civicrm-core/pull/21835))** + + Changes the scheduled reminder job to default to run hourly instead of daily. + +- **Display higher severity status checks first + ([22143](https://github.com/civicrm/civicrm-core/pull/22143))** + + Improves user experience on the status page by displaying highest severity + status checks first. + +- **Sort list of extensions alphabetically in 'Extensions ok' check + ([22142](https://github.com/civicrm/civicrm-core/pull/22142))** + + Improves user experience by sorting the list of extensions alphabetically in + the 'Extensions ok' check. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **Email to Activity processing: If there's a matching org contact and no + matching individual, then file on the org instead of creating a new individual + ([dev/core#2872](https://lab.civicrm.org/dev/core/-/issues/2872): + [21983](https://github.com/civicrm/civicrm-core/pull/21983))** + +- **Activity redirects to search instead of view + ([dev/core#2894](https://lab.civicrm.org/dev/core/-/issues/2894): + [22088](https://github.com/civicrm/civicrm-core/pull/22088))** + +- **Can't save extra custom fields when inline and required + ([dev/core#2912](https://lab.civicrm.org/dev/core/-/issues/2912): + [21936](https://github.com/civicrm/civicrm-core/pull/21936))** + +- **Can't save a shared address twice when you have custom address fields + ([dev/core#3000](https://lab.civicrm.org/dev/core/-/issues/3000): + [22286](https://github.com/civicrm/civicrm-core/pull/22286)) + +- **Hidden submit buttons are confusing for keyboard users + ([dev/core#2919](https://lab.civicrm.org/dev/core/-/issues/2919): + [21854](https://github.com/civicrm/civicrm-core/pull/21854))** + +- **some PDFs hard-code format to "a3 landscape", overriding default PDF format + ([dev/core#2959](https://lab.civicrm.org/dev/core/-/issues/2959): + [22098](https://github.com/civicrm/civicrm-core/pull/22098))** + +- **All custom fields broken on edit forms + ([dev/core#2973](https://lab.civicrm.org/dev/core/-/issues/2973): + [22178](https://github.com/civicrm/civicrm-core/pull/22178))** + +- **APIv4 Export - Fix logic for exporting pseudoconstant syntax + ([22201](https://github.com/civicrm/civicrm-core/pull/22201))** + +- **APIv4 - Add fixes & tests for domain-specific managed entities + ([22173](https://github.com/civicrm/civicrm-core/pull/22173))** + +- **Api v4 contact delete bug + ([dev/core#2757](https://lab.civicrm.org/dev/core/-/issues/2757): + [21232](https://github.com/civicrm/civicrm-core/pull/21232))** + +- **APIv4 - Delete unused OptionList trait + ([22158](https://github.com/civicrm/civicrm-core/pull/22158))** + +- **API4: "Invalid field 'contact.is_deleted'" + ([dev/core#2507](https://lab.civicrm.org/dev/core/-/issues/2507): + [22203](https://github.com/civicrm/civicrm-core/pull/22203))** + + This undoes a permission requirement for the `is_deleted` field on the contact + record. Deleted contacts are still hidden if a user lacks "access deleted + contacts", but the field is now available for those contacts that a user can + access. + +- **APIv4 - Treat navigation permissions as array, add pseudoconstant for + operator ([22160](https://github.com/civicrm/civicrm-core/pull/22160))** + +- **APIv4 - Fix checkAccess for CiviCase or other entities with nonstandard + class names ([22090](https://github.com/civicrm/civicrm-core/pull/22090))** + +- **SearchKit with Form Builder when viewed on the front-end displays a CiviCRM + breadcrumb trail which can duplicate the existing website breadcrumb trail + ([22087](https://github.com/civicrm/civicrm-core/pull/22087))** + +- **SearchKit - Fix undefined variable for searches of Afforms etc. + ([22218](https://github.com/civicrm/civicrm-core/pull/22218))** + +- **Search Kit: "Combine text" field transformation seems to break output + ([dev/report#88](https://lab.civicrm.org/dev/report/-/issues/88): + [22281](https://github.com/civicrm/civicrm-core/pull/22281))** + +- **SearchKit - Fix editable custom fields + ([22293](https://github.com/civicrm/civicrm-core/pull/22293))** + + Fixes a regression where custom fields were not editable in SearchKit + +- **[Smarty variables] Consistently assign isAdmin at php layer + ([22189](https://github.com/civicrm/civicrm-core/pull/22189))** + +- **Smarty variables] Remove isset from a.net + ([22191](https://github.com/civicrm/civicrm-core/pull/22191))** + +- **[Smarty variables] remove isset from Mail accounts + ([22190](https://github.com/civicrm/civicrm-core/pull/22190))** + +- **[Smarty variables] Remove another isset - user dashboard + ([22181](https://github.com/civicrm/civicrm-core/pull/22181))** + +- **Smarty variables] Remove isset from relationship tab + ([22177](https://github.com/civicrm/civicrm-core/pull/22177))** + +- **[Smarty variables] [CiviCase] remove isset from case dashboard + ([22176](https://github.com/civicrm/civicrm-core/pull/22176))** + +- **[Smarty variables] - remove isset + ([22185](https://github.com/civicrm/civicrm-core/pull/22185))** + +- **[Smarty variables] Fix contribution tab to work with escape by default + ([22179](https://github.com/civicrm/civicrm-core/pull/22179))** + +- **[Smarty variables] The last isset.... + ([22196](https://github.com/civicrm/civicrm-core/pull/22196))** + +- **Smarty variables] Prevent settings form assigned html from being escaped + ([22165](https://github.com/civicrm/civicrm-core/pull/22165))** + +- **[Smarty variable][Civicase] remove isset + ([22175](https://github.com/civicrm/civicrm-core/pull/22175))** + +- **[Smarty variables] Remove isset from add new group form + ([22184](https://github.com/civicrm/civicrm-core/pull/22184))** + +- **[Smarty Variables] Remove isset from location type form + ([22167](https://github.com/civicrm/civicrm-core/pull/22167))** + +- **[Smarty variables] Remove issets from scheduled job screen + ([22166](https://github.com/civicrm/civicrm-core/pull/22166))** + +- **[Smarty variables] [custom data form] Template notice cleanup - make sane + ([22138](https://github.com/civicrm/civicrm-core/pull/22138))** + +- **[Smarty variables] [report test]Ensure smarty variables are consistently + assigned in report + ([22147](https://github.com/civicrm/civicrm-core/pull/22147))** + +- **[Smarty variables] [Activity form] Ensure separation,tag are assigned to + the template ([22152](https://github.com/civicrm/civicrm-core/pull/22152))** + +- **[Smarty variables] Specify isRepeatingEntity when including + ConfirmRepeatMode.tpl + ([22155](https://github.com/civicrm/civicrm-core/pull/22155))** + +- **[Smarty variables] Ensure groupElementType is always set + ([22074](https://github.com/civicrm/civicrm-core/pull/22074))** + +- **[Smarty variables] [contact summary] Assign variable to determine whether + to show email signature field + ([22132](https://github.com/civicrm/civicrm-core/pull/22132))** + +- **[Smarty variables] Use always-assigned isTagSet to determine if is tagset + ([22154](https://github.com/civicrm/civicrm-core/pull/22154))** + +- **[Smarty variables] [Activity form] Ensure activityTypeFile is always + assigned ([22153](https://github.com/civicrm/civicrm-core/pull/22153))** + +- **TokenProcessor - Escape single quotes in HTML format + ([dev/core#3001](https://lab.civicrm.org/dev/core/-/issues/3001): + [22387](https://github.com/civicrm/civicrm-core/pull/22387))** + +- **Remove issets from Activity search screen + ([22180](https://github.com/civicrm/civicrm-core/pull/22180))** + +- **Remove isset checks on isForm + ([22174](https://github.com/civicrm/civicrm-core/pull/22174))** + +- **Remove isset from custom data tpls + ([22124](https://github.com/civicrm/civicrm-core/pull/22124))** + +- **Remove issets from Options.tpl + ([22079](https://github.com/civicrm/civicrm-core/pull/22079))** + +- **Remove a bunch of isset from options.tpl + ([22111](https://github.com/civicrm/civicrm-core/pull/22111))** + +- **Remove isset from Datasource.tpl + ([21988](https://github.com/civicrm/civicrm-core/pull/21988))** + +- **Remove smarty isset in favour of always set + ([22084](https://github.com/civicrm/civicrm-core/pull/22084))** + +- **Escape-on-output: Cleanup addCampaignToSearch, remove isset + ([22035](https://github.com/civicrm/civicrm-core/pull/22035))** + +- **OptionValue - Fix checking if domain is set + ([22095](https://github.com/civicrm/civicrm-core/pull/22095))** + +- **Fix all the issets that affect ability to load contact summary page + ([22030](https://github.com/civicrm/civicrm-core/pull/22030))** + +- **Remove use of isset for info.tpl + ([22028](https://github.com/civicrm/civicrm-core/pull/22028))** + +- **Ensure smarty variable formTpl is set + ([22018](https://github.com/civicrm/civicrm-core/pull/22018))** + +- **Enotice fixes - ensure a couple more variables are consistently assigned + ([22148](https://github.com/civicrm/civicrm-core/pull/22148))** + +- **Fix broken extension page smarty assignment + ([22168](https://github.com/civicrm/civicrm-core/pull/22168))** + +- **Ensure custom fields properties are assigned to the template + ([22139](https://github.com/civicrm/civicrm-core/pull/22139))** + +- **Ensure context is always assigned + ([22141](https://github.com/civicrm/civicrm-core/pull/22141))** + +- **FormBuilder - Hide configuration options that do not apply to certain form + types ([22127](https://github.com/civicrm/civicrm-core/pull/22127))** + +- **Ensure CMSPrint variables are assigned to the template + ([22134](https://github.com/civicrm/civicrm-core/pull/22134))** + +- **Ensure tab headers are assigned, fix widget form test + ([22135](https://github.com/civicrm/civicrm-core/pull/22135))** + +- **Ensure buildForm is called to assign values + ([22128](https://github.com/civicrm/civicrm-core/pull/22128))** + +- **Update Fields.tpl + ([22129](https://github.com/civicrm/civicrm-core/pull/22129))** + +- **Add Colombia missing state + ([22007](https://github.com/civicrm/civicrm-core/pull/22007))** + +- **Use getEntityNameForTable() instead of getClassForTable(), as this might + yield ambiguous results + ([22116](https://github.com/civicrm/civicrm-core/pull/22116))** + +- **Suppresses error logging on every page load when open_basedir restriction + in effect: File(/CRM/Core/Smarty/plugins/) is not within the allowed path(s) + ([21589](https://github.com/civicrm/civicrm-core/pull/21589))** + +- **Bypass any default escaping for blog, getting started + ([22119](https://github.com/civicrm/civicrm-core/pull/22119))** + +- **Do not use default escaping on address display + ([22120](https://github.com/civicrm/civicrm-core/pull/22120))** + +- **Throw spaghetti + ([22070](https://github.com/civicrm/civicrm-core/pull/22070))** + +- **Allow "Download chart" text to be translated. + ([22106](https://github.com/civicrm/civicrm-core/pull/22106))** + +- **Contribution amounts configuration page is borked when translation contains + apostrophe ([22091](https://github.com/civicrm/civicrm-core/pull/22091))** + +- **Use smarty:nodefaults with smarty.get + ([22082](https://github.com/civicrm/civicrm-core/pull/22082))** + +- **Ensure masterAddress is always assigned + ([22076](https://github.com/civicrm/civicrm-core/pull/22076))** + +- **Ensure paramSubType is always set + ([22075](https://github.com/civicrm/civicrm-core/pull/22075))** + +- **Do not check is context is set, should always be + ([22069](https://github.com/civicrm/civicrm-core/pull/22069))** + +- **Fix typo in smarty template "gender_display" + ([22066](https://github.com/civicrm/civicrm-core/pull/22066))** + +- **Ensure context is always set + ([22056](https://github.com/civicrm/civicrm-core/pull/22056))** + +- **Ensure contactTag is always set + ([22055](https://github.com/civicrm/civicrm-core/pull/22055))** + +- **php8 - fix for breadcrumb fails during tests + ([22059](https://github.com/civicrm/civicrm-core/pull/22059))** + +- **Mark a few more token functions as deprected + ([22044](https://github.com/civicrm/civicrm-core/pull/22044))** + +- **Ensure gender_display is always set + ([22047](https://github.com/civicrm/civicrm-core/pull/22047))** + +- **ManagedEntities - Track modification and auto-update + ([21989](https://github.com/civicrm/civicrm-core/pull/21989))** + +- **Ensure userRecordUrl is always set- fixes enotice with escape-on-output + ([22042](https://github.com/civicrm/civicrm-core/pull/22042))** + +- **Fix tabs getting overwritten by double foreach loop + ([22040](https://github.com/civicrm/civicrm-core/pull/22040))** + +- **Ensure imageUrl is always set + ([22031](https://github.com/civicrm/civicrm-core/pull/22031))** + +- **Escape-on-output-proof enotice fixes + ([22036](https://github.com/civicrm/civicrm-core/pull/22036))** + +- **Do not smarty encode quicksearch html + ([22033](https://github.com/civicrm/civicrm-core/pull/22033))** + +- **Ensure action is set when loading contactFooter + ([22029](https://github.com/civicrm/civicrm-core/pull/22029))** + +- **Flip logic for determining if $section variable is set. + ([22027](https://github.com/civicrm/civicrm-core/pull/22027))** + +- **Ensure beginHookFormElements is assigned + ([22000](https://github.com/civicrm/civicrm-core/pull/22000))** + +- **CRM_Utils_File::isChildPath - Fix checking of non-existent paths + ([22021](https://github.com/civicrm/civicrm-core/pull/22021))** + +- **Ensure hookContentPlacement is assigned + ([22001](https://github.com/civicrm/civicrm-core/pull/22001))** + +- **Ensure that keys are set in tabValues before hitting smarty + ([21991](https://github.com/civicrm/civicrm-core/pull/21991))** + +- **Extract getGroupOrganizationUrl & ensure always assigned + ([22002](https://github.com/civicrm/civicrm-core/pull/22002))** + +- **Avoid default escaping for blog titles + ([22172](https://github.com/civicrm/civicrm-core/pull/22172))** + +- **PHP 8 compat - no optional param before required + ([22210](https://github.com/civicrm/civicrm-core/pull/22210))** + +- **tools/mixin/bin/test-all - Fix guard for EXT_DIR + ([22204](https://github.com/civicrm/civicrm-core/pull/22204))** + +- **DebugSubscriber - Fix test-suite compatibility with XDebug 3 + ([22197](https://github.com/civicrm/civicrm-core/pull/22197))** + +- **ManagedEntities - Fix permission error during uninstallation + (regression-fix) + ([22188](https://github.com/civicrm/civicrm-core/pull/22188))** + +- **Fix two English strings + ([22097](https://github.com/civicrm/civicrm-core/pull/22097))** + +- **OptionValue - Fix incorrect update of `is_default` + ([22089](https://github.com/civicrm/civicrm-core/pull/22089))** + +- **Fix missing currency for event registration when configured via + "quick config" ([21966](https://github.com/civicrm/civicrm-core/pull/21966))** + +- **don't overfill the prevnext cache when reserving for a survey. + ([22011](https://github.com/civicrm/civicrm-core/pull/22011))** + +- **Guard against passing empty values to CRM_Core_DAO::getFieldValue() + ([21998](https://github.com/civicrm/civicrm-core/pull/21998))** + +- **Tidy up title attributes + ([21995](https://github.com/civicrm/civicrm-core/pull/21995))** + +- **Enotice fixes in debug.tpl that are compatible with default escaping + ([21940](https://github.com/civicrm/civicrm-core/pull/21940))** + +- **Fix isForm to be always assigned, remove checks + ([21979](https://github.com/civicrm/civicrm-core/pull/21979))** + +- **Enotice fixes + ([21987](https://github.com/civicrm/civicrm-core/pull/21987))** + +- **Beautifier - avoid e_notice in php 7.4 when acting on first comment token + ([332](https://github.com/civicrm/civicrm-packages/pull/332))** + +### CiviCase + +- **Assign cgCount in Case custom data form + ([22140](https://github.com/civicrm/civicrm-core/pull/22140))** + +### CiviContribute + +- **Can't filter by anything other than contribution status in Contribution + Aggregate by Relationship CiviReport + ([dev/report#77](https://lab.civicrm.org/dev/report/-/issues/77): + [22041](https://github.com/civicrm/civicrm-core/pull/22041), + [22024](https://github.com/civicrm/civicrm-core/pull/22024), + [22015](https://github.com/civicrm/civicrm-core/pull/22015), + [22016](https://github.com/civicrm/civicrm-core/pull/22016) and + [22025](https://github.com/civicrm/civicrm-core/pull/22025))** + +- **Using GHC as a default currency causes a fatal error with Brick/Money + ([dev/financial#184](https://lab.civicrm.org/dev/financial/-/issues/184): + [21751](https://github.com/civicrm/civicrm-core/pull/21751))** + + Fixes the currency names for Ghana and Belarus. + +- **Repeat Contributions CiviReport warnings: Formatting non-numeric values is + no longer supported + ([dev/core#2982](https://lab.civicrm.org/dev/core/-/issues/2982): + [22216](https://github.com/civicrm/civicrm-core/pull/22216))** + +- **Expose contribution custom fields in LYBUNT report + ([dev/core#2951](https://lab.civicrm.org/dev/core/-/issues/2951): + [22038](https://github.com/civicrm/civicrm-core/pull/22038))** + +- **fix unit plural in contribution page + ([21944](https://github.com/civicrm/civicrm-core/pull/21944))** + +- **Can't create > 25 thank-you letters from contributions + ([dev/core#3013](https://lab.civicrm.org/dev/core/-/issues/3013): + [22341](https://github.com/civicrm/civicrm-core/pull/22341))** + +- **Update PayPalImpl.php - action on style test failure + ([22112](https://github.com/civicrm/civicrm-core/pull/22112))** + +- **Check the billing fields returned by each payment processor + ([20811](https://github.com/civicrm/civicrm-core/pull/20811))** + +- **Contribution Confirm: fix wording on the recurring + ([22247](https://github.com/civicrm/civicrm-core/pull/22247))** + +### CiviEvent + +- **Participant Listing report filters incorrectly on role ID + ([dev/report#18](https://lab.civicrm.org/dev/report/-/issues/18): + [21975](https://github.com/civicrm/civicrm-core/pull/21975))** + +- **Remove broken dynamic title from event template + ([22113](https://github.com/civicrm/civicrm-core/pull/22113))** + +- **CRM/Event/BAO/Event: Fix ts usage on selfservice_preposition + ([22136](https://github.com/civicrm/civicrm-core/pull/22136))** + +- **Notice error Deprecated function CRM_Event_BAO_Event::checkPermission + ([dev/core#1529](https://lab.civicrm.org/dev/core/-/issues/1529): + [22017](https://github.com/civicrm/civicrm-core/pull/22017))** + +- **Custom data not available in the post hook after registering for an event + ([dev/core#2948](https://lab.civicrm.org/dev/core/-/issues/2948): + [22022](https://github.com/civicrm/civicrm-core/pull/22022))** + +- **CiviCRM Event, remove the superfluous "Are you sure you want to delete this + Event?" confirmation for the Event delete action + ([22122](https://github.com/civicrm/civicrm-core/pull/22122))** + +### CiviMail + +- **Fix unencoded mailing url query param in Mailing report + ([22008](https://github.com/civicrm/civicrm-core/pull/22008))** + +- **CiviCRM Message Template, HTML Format and Text Format fields are listed in + a different order on the Default Message Template + ([22110](https://github.com/civicrm/civicrm-core/pull/22110))** + +- **Fix message templates screen to work with escape enabled by default + ([22118](https://github.com/civicrm/civicrm-core/pull/22118))** + +### CiviMember + +- **CiviCRM Membership Status can never be deleted when logging is enabled + ([22032](https://github.com/civicrm/civicrm-core/pull/22032))** + +- **Fix membership test to use full flow + ([22162](https://github.com/civicrm/civicrm-core/pull/22162))** + +### Drupal Integration + +- **Add back in body classes for themeing. + ([68](https://github.com/civicrm/civicrm-drupal-8/pull/68))** + +### WordPress Integration + +- **CiviCRM WordPress shortcode remove the display of default text and instead + just return blank if the shortcode cannot be rendered. + ([262](https://github.com/civicrm/civicrm-wordpress/pull/262))** + +- **Resolve conflict with AIOSEO stomping on CiviCRM Shortcode + ([263](https://github.com/civicrm/civicrm-wordpress/pull/263))** + +- **Prevent fatal error when the "the_title" filter has only one param + ([261](https://github.com/civicrm/civicrm-wordpress/pull/261))** + +- **HookTest - Fix execution on PHP 8 + ([266](https://github.com/civicrm/civicrm-wordpress/pull/266), + [269](https://github.com/civicrm/civicrm-wordpress/pull/269))** + +## <a name="misc"></a>Miscellany + +- **APIv4 ConformanceTest - Demonstrate entity APIs which fail to emit + `hook_civicrm_post(delete)` + ([22205](https://github.com/civicrm/civicrm-core/pull/22205))** + +- **Move responsibilty for ensuring greeting parameters are set to + `ensureGreetingParamsAreSet` + ([21912](https://github.com/civicrm/civicrm-core/pull/21912))** + +- **Remove unused variable + ([21933](https://github.com/civicrm/civicrm-core/pull/21933))** + +- **Remove obsolete showVisibility + ([22102](https://github.com/civicrm/civicrm-core/pull/22102))** + +- **Remove empty check previously commented to be meaningless + ([22164](https://github.com/civicrm/civicrm-core/pull/22164))** + +- **[REF] Remove support for not-passed 'pledge' value + ([21908](https://github.com/civicrm/civicrm-core/pull/21908))** + +- **[REF] - Switch BAOs to use standard delete function which calls hooks + ([22207](https://github.com/civicrm/civicrm-core/pull/22207))** + +- **[REF] Remove usage of deprecated jqXHR.error in jQuery code + ([21919](https://github.com/civicrm/civicrm-core/pull/21919))** + +- **[REF] Preliminary cleanup in update greeting + ([21909](https://github.com/civicrm/civicrm-core/pull/21909))** + +- **REF: Switch to debug level logging for lock debugging + ([22026](https://github.com/civicrm/civicrm-core/pull/22026))** + +- **[REF] Fix Pledge Test failing on php8 by ensuring all payments have a + status assigned and that customGroup is always assigned to the template and + updating test to pass in some additional form values + ([22037](https://github.com/civicrm/civicrm-core/pull/22037))** + +- **[REF] Add in missing province for Philippines and update names to match ISO + ([22005](https://github.com/civicrm/civicrm-core/pull/22005))** + +- **[REF] "Your browser session has expired and we are unable to complete your + form submission" on all D9.2 anonymous sessions + ([dev/drupal#169](https://lab.civicrm.org/dev/drupal/-/issues/169): + [22080](https://github.com/civicrm/civicrm-core/pull/22080) + and [335](https://github.com/civicrm/civicrm-packages/pull/335))** + +- **[NFC] Update System Uft8mb4 check to handle for the fact that MySQL8 + outputs utf8mb3 when the charset has been set to utf8 as utf8mb3 is the + underlyling charset for utf8 + ([22221](https://github.com/civicrm/civicrm-core/pull/22221))** + +- **[NFC] Remove Selenium WebTest code from CiviMailUtils + ([22219](https://github.com/civicrm/civicrm-core/pull/22219))** + +- **(NFC) tools/mixin/bin/test-all - Work-around segfault in CI + ([22215](https://github.com/civicrm/civicrm-core/pull/22215))** + +- **[NFC] Fix test failures for testRelativeDateRanges + ([22209](https://github.com/civicrm/civicrm-core/pull/22209))** + +- **[NFC] Add missing calls to parent::setUp and tearDown in unit tests + ([22073](https://github.com/civicrm/civicrm-core/pull/22073))** + +- **[NFC] Array formatting + ([22067](https://github.com/civicrm/civicrm-core/pull/22067))** + +- **[NFC] ENsure that formTpl is assigned in CRM_Custom_Form_OptionTest + ([22065](https://github.com/civicrm/civicrm-core/pull/22065))** + +- **[NFC] php8 assign formTpl in HookTest test + ([22061](https://github.com/civicrm/civicrm-core/pull/22061))** + +- **[NFC] php8 - set smarty null defaults for CRM_Core_SessionTest + ([22048](https://github.com/civicrm/civicrm-core/pull/22048))** + +- **[NFC] php8 - fix test fails for CRM_Contact_Page_View_UserDashBoardTest + ([22023](https://github.com/civicrm/civicrm-core/pull/22023))** + +- **[NFC] Fix test issue about trying to do array offset on NULL in Payment + ProcessorFormTest + ([22020](https://github.com/civicrm/civicrm-core/pull/22020))** + +- **[NFC] Add in unit test to demonstate issue with API + ([dev/mail#103](https://lab.civicrm.org/dev/mail/-/issues/103): + [22045](https://github.com/civicrm/civicrm-core/pull/22045))** + +- **[NFC] Additional Fix on UserDashBoard Tests to assign action value to + dashboard ([22034](https://github.com/civicrm/civicrm-core/pull/22034))** + +- **Test fix - use more 'real' rendering function + ([22123](https://github.com/civicrm/civicrm-core/pull/22123))** + +- **Fix more tests to use full flow + ([22161](https://github.com/civicrm/civicrm-core/pull/22161))** + +- **[Test] Fix tests to use form helper + ([22157](https://github.com/civicrm/civicrm-core/pull/22157))** + +- **[Test] Test cleanup to use full-form methods + ([22156](https://github.com/civicrm/civicrm-core/pull/22156))** + +- **[REF] Fix tests that fail after 2021 + ([22353](https://github.com/civicrm/civicrm-core/pull/22353))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Justin Freeman; +BrightMinded Ltd - Bradley Taylor; Christian Wach; CiviCoop - Jaap Jansma; +CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - +Lisandro; Coop SymbioTIC - Mathieu Lutfy; CSES (Chelmsford Science and +Engineering Society) - Adam Wood; Dave D; Digitalcourage - Detlev Sieber; +homotechsual - Mikey O'Toole; Jens Schuppe; JMA Consulting - Monish Deb, Seamus +Lee; joapta; Joinery - Allen Shaw; Lighthouse Consulting and Design - Brian +Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - +Matthew Wire; PERORA SRL - Samuele Masetto; Progressive Technology Project - +Jamie McClelland; Third Sector Design - Kurund Jalmi, William Mortada; +Wikimedia Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +Arnaud Broes; Artful Robot - Rich Lott; Asylum Seekers Centre; Australian +Greens - John Twyman; Betty Dolfing; Blackfly Solutions - Alan Dixon; Carlos +Capote; Guydn; JMA Consulting - Joe Murray; Lemniscus - Noah Miller; netzih; +Nicol Wistreich; Richard van Oosterhout; Skvare - Sunil Pawar; Tadpole +Collective - Kevin Cristiano + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andie Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/settings/Core.setting.php b/civicrm/settings/Core.setting.php index b01373382d6a9be22c9810fb973948f851827d33..f3079b296c5525f4ee5dbe759b88fc09a3925153 100644 --- a/civicrm/settings/Core.setting.php +++ b/civicrm/settings/Core.setting.php @@ -375,7 +375,7 @@ return [ 'pseudoconstant' => [ 'callback' => 'CRM_Contact_BAO_GroupContactCache::getModes', ], - 'description' => ts('Should the acl cache be by cron jobs or user actions'), + 'description' => ts('Should the acl cache be flushed by cron jobs or user actions'), 'help_text' => ts('In "Opportunistic Flush" mode, caches are flushed in response to user actions; this mode is broadly compatible but may add latency during form-submissions. In "Cron Flush" mode, you should schedule a cron job to flush caches if your site uses ACLs; this can improve latency on form-submissions but requires more setup.'), ], 'installed' => [ diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index 6af28576f355f58b4dd3f90a3a042dde67e9baf1..c7e15172e801846bb36f57d8b55a33b996f07f6f 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -243,6 +243,7 @@ CREATE TABLE `civicrm_managed` ( `entity_type` varchar(64) NOT NULL COMMENT 'API entity type', `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', `cleanup` varchar(32) COMMENT 'Policy on when to cleanup entity (always, never, unused)', + `entity_modified_date` timestamp NULL DEFAULT NULL COMMENT 'When the managed entity was changed from its original settings.', PRIMARY KEY (`id`), INDEX `UI_managed_module_name`(module, name), INDEX `UI_managed_entity`(entity_type, entity_id) @@ -1756,8 +1757,8 @@ CREATE TABLE `civicrm_navigation` ( `name` varchar(255) COMMENT 'Internal Name', `url` varchar(255) COMMENT 'url in case of custom navigation link', `icon` varchar(255) NULL DEFAULT NULL COMMENT 'CSS class name for an icon', - `permission` varchar(255) COMMENT 'Permission for menu item', - `permission_operator` varchar(3) COMMENT 'Permission Operator', + `permission` varchar(255) COMMENT 'Permission(s) needed to access menu item', + `permission_operator` varchar(3) COMMENT 'Operator to use if item has more than one permission', `parent_id` int unsigned COMMENT 'Parent navigation item, used for grouping', `is_active` tinyint COMMENT 'Is this navigation item active?', `has_separator` tinyint DEFAULT 0 COMMENT 'Place a separator either before or after this menu item.', diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 92f9e4289926d4d33c32753961e48e5efd4ddfa1..cf3856d4eda27ea57b6ecd7f66b0fd438657e485 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -2783,8 +2783,8 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4062, 1170, "CAT", "Catanduanes"), (4063, 1170, "CAV", "Cavite"), (4064, 1170, "CEB", "Cebu"), -(4065, 1170, "COM", "Compostela Valley"), -(4066, 1170, "DAV", "Davao"), +(4065, 1170, "COM", "Davao de Oro"), +(4066, 1170, "DAV", "Davao del Norte"), (4067, 1170, "DAS", "Davao del Sur"), (4068, 1170, "DAO", "Davao Oriental"), (4069, 1170, "EAS", "Eastern Samar"), @@ -2794,7 +2794,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4073, 1170, "ILS", "Ilocos Sur"), (4074, 1170, "ILI", "Iloilo"), (4075, 1170, "ISA", "Isabela"), -(4076, 1170, "KAL", "Kalinga-Apayso"), +(4076, 1170, "KAL", "Kalinga"), (4077, 1170, "LAG", "Laguna"), (4078, 1170, "LAN", "Lanao del Norte"), (4079, 1170, "LAS", "Lanao del Sur"), @@ -2810,7 +2810,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4089, 1170, "MOU", "Mountain Province"), (4090, 1170, "NEC", "Negroe Occidental"), (4091, 1170, "NER", "Negros Oriental"), -(4092, 1170, "NCO", "North Cotabato"), +(4092, 1170, "NCO", "Cotabato"), (4093, 1170, "NSA", "Northern Samar"), (4094, 1170, "NUE", "Nueva Ecija"), (4095, 1170, "NUV", "Nueva Vizcaya"), @@ -4421,7 +4421,13 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1226, "WRX", "Wrexham"), -- Add missing state for South Korea -(NULL, 1115, "50", "Sejong"); +(NULL, 1115, "50", "Sejong"), + +-- Add missing province for Philippines +(NULL, 1170, "DIN", "Dinagat Islands"), + +-- Add missing state for Colombia +(NULL, 1048, "HUI", "Huila"); -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | @@ -4474,7 +4480,7 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 37, "BSD", "$", "044", "Bahamian Dollar"), ( 38, "BTN", NULL, "064", "Bhutan Ngultrum"), ( 39, "BWP", "P", "072", "Botswana Pula"), -( 40, "BYR", "p.", "974", "Belarussian Rouble"), +( 40, "BYN", "p.", "974", "Belarussian Rouble"), ( 41, "BZD","BZ$", "084", "Belize Dollar"), ( 42, "CDF", NULL, "976", "Franc Congolais"), ( 43, "CHE", NULL, "947", "WIR Euro"), @@ -4501,7 +4507,7 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 65, "FJD", "$", "242", "Fiji Dollar"), ( 66, "FKP", "£", "238", "Falkland Islands Pound"), ( 67, "GEL", NULL, "981", "Georgian Lari"), -( 68, "GHC", "¢", "288", "Ghanaian Cedi"), +( 68, "GHS", "¢", "288", "Ghanaian Cedi"), ( 69, "GIP", "£", "292", "Gibraltar Pound"), ( 70, "GMD", NULL, "270", "Gambian Dalasi"), ( 71, "GNF", NULL, "324", "Guinea Franc"), @@ -22925,7 +22931,7 @@ VALUES ( @domainID, 'Daily' , NULL, 'Geocode and Parse Addresses', 'Retrieves geocodes (lat and long) and / or parses street addresses (populates street number, street name, etc.)', 'job', 'geocode', 'geocoding=[1 or 0] required\nparse=[1 or 0] required\nstart=[contact ID] optional-begin with this contact ID\nend=[contact ID] optional-process contacts with IDs less than this\nthrottle=[1 or 0] optional-1 adds five second sleep', 0), ( @domainID, 'Daily' , NULL, 'Update Greetings and Addressees','Goes through contact records and updates email and postal greetings, or addressee value', 'job', 'update_greeting','ct=[Individual or Household or Organization] required\ngt=[email_greeting or postal_greeting or addressee] required\nforce=[0 or 1] optional-0 update contacts with null value, 1 update all\nlimit=Number optional-Limit the number of contacts to update', 0), ( @domainID, 'Daily' , NULL, 'Mail Reports', 'Generates and sends out reports via email', 'job', 'mail_report','instanceId=[ID of report instance] required\nformat=[csv or print] optional-output CSV or print-friendly HTML, else PDF', 0), - ( @domainID, 'Daily' , NULL, 'Send Scheduled Reminders', 'Sends out scheduled reminders via email', 'job', 'send_reminder', NULL, 0), + ( @domainID, 'Hourly' , NULL, 'Send Scheduled Reminders', 'Sends out scheduled reminders via email', 'job', 'send_reminder', NULL, 0), ( @domainID, 'Always' , NULL, 'Update Participant Statuses', 'Updates pending event participant statuses based on time', 'job', 'process_participant', NULL, 0), ( @domainID, 'Daily' , NULL, 'Update Membership Statuses', 'Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.', 'job', 'process_membership', NULL, 0), ( @domainID, 'Always' , NULL, 'Process Survey Respondents', 'Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.', 'job', 'process_respondent',NULL, 0), @@ -23847,4 +23853,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.44.0'; +UPDATE civicrm_domain SET version = '5.45.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index d853cfc8675d113582f12e02ce4e386e1fea0c77..bf36c94e0abc04bc7094d175ef02c42437ea8bf8 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -160,629 +160,629 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity` WRITE; /*!40000 ALTER TABLE `civicrm_activity` DISABLE KEYS */; INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES - (1,NULL,9,'Subject for Tell a Friend','2021-01-07 11:25:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (2,NULL,9,'Subject for Tell a Friend','2020-12-31 20:12:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (3,NULL,10,'Subject for Pledge Acknowledgment','2021-04-09 21:24:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (4,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 20:16:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (5,NULL,10,'Subject for Pledge Acknowledgment','2021-05-08 23:44:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (6,NULL,9,'Subject for Tell a Friend','2021-09-19 13:59:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (7,NULL,9,'Subject for Tell a Friend','2021-05-18 20:23:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (8,NULL,10,'Subject for Pledge Acknowledgment','2021-09-07 05:20:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (9,NULL,9,'Subject for Tell a Friend','2021-03-17 04:46:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (10,NULL,10,'Subject for Pledge Acknowledgment','2021-02-12 14:55:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (11,NULL,9,'Subject for Tell a Friend','2020-11-27 08:49:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (12,NULL,10,'Subject for Pledge Acknowledgment','2021-11-03 07:48:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (13,NULL,9,'Subject for Tell a Friend','2021-09-14 19:29:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (14,NULL,9,'Subject for Tell a Friend','2021-09-23 11:41:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (15,NULL,9,'Subject for Tell a Friend','2021-08-12 13:28:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (16,NULL,10,'Subject for Pledge Acknowledgment','2021-01-12 07:41:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (17,NULL,9,'Subject for Tell a Friend','2021-02-13 21:06:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (18,NULL,9,'Subject for Tell a Friend','2021-06-19 15:27:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (19,NULL,10,'Subject for Pledge Acknowledgment','2021-09-13 02:40:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (20,NULL,10,'Subject for Pledge Acknowledgment','2021-08-06 14:53:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (21,NULL,9,'Subject for Tell a Friend','2021-09-03 20:55:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (22,NULL,9,'Subject for Tell a Friend','2021-01-06 16:56:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (23,NULL,10,'Subject for Pledge Acknowledgment','2021-05-06 15:39:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (24,NULL,10,'Subject for Pledge Acknowledgment','2021-04-04 23:55:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (25,NULL,9,'Subject for Tell a Friend','2021-01-13 10:04:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (26,NULL,9,'Subject for Tell a Friend','2021-10-20 06:32:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (27,NULL,9,'Subject for Tell a Friend','2020-11-19 17:26:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (28,NULL,10,'Subject for Pledge Acknowledgment','2021-06-17 19:41:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (29,NULL,10,'Subject for Pledge Acknowledgment','2021-04-23 23:47:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (30,NULL,9,'Subject for Tell a Friend','2021-04-24 12:43:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (31,NULL,9,'Subject for Tell a Friend','2021-06-16 16:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (32,NULL,9,'Subject for Tell a Friend','2021-07-03 09:01:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (33,NULL,9,'Subject for Tell a Friend','2021-04-22 03:20:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (34,NULL,9,'Subject for Tell a Friend','2021-02-28 12:38:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (35,NULL,10,'Subject for Pledge Acknowledgment','2021-01-22 09:28:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (36,NULL,9,'Subject for Tell a Friend','2021-10-20 22:37:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (37,NULL,10,'Subject for Pledge Acknowledgment','2021-02-07 07:30:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (38,NULL,9,'Subject for Tell a Friend','2021-10-08 22:38:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (39,NULL,10,'Subject for Pledge Acknowledgment','2021-11-03 18:18:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (40,NULL,10,'Subject for Pledge Acknowledgment','2020-12-13 05:43:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (41,NULL,10,'Subject for Pledge Acknowledgment','2021-10-30 19:22:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (42,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 09:27:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (43,NULL,9,'Subject for Tell a Friend','2021-04-19 00:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (44,NULL,9,'Subject for Tell a Friend','2021-10-13 16:28:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (45,NULL,9,'Subject for Tell a Friend','2021-03-25 19:59:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (46,NULL,10,'Subject for Pledge Acknowledgment','2021-10-21 17:13:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (47,NULL,10,'Subject for Pledge Acknowledgment','2021-08-22 09:46:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (48,NULL,9,'Subject for Tell a Friend','2021-01-28 18:59:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (49,NULL,10,'Subject for Pledge Acknowledgment','2020-12-26 14:46:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (50,NULL,9,'Subject for Tell a Friend','2021-02-09 16:40:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (51,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 19:05:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (52,NULL,10,'Subject for Pledge Acknowledgment','2021-07-25 06:54:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (53,NULL,9,'Subject for Tell a Friend','2020-11-07 07:46:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (54,NULL,10,'Subject for Pledge Acknowledgment','2021-08-04 13:50:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (55,NULL,9,'Subject for Tell a Friend','2021-02-16 07:58:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (56,NULL,10,'Subject for Pledge Acknowledgment','2021-07-18 11:01:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (57,NULL,10,'Subject for Pledge Acknowledgment','2021-03-23 10:57:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (58,NULL,9,'Subject for Tell a Friend','2021-05-27 02:36:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (59,NULL,10,'Subject for Pledge Acknowledgment','2020-11-23 02:32:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (60,NULL,10,'Subject for Pledge Acknowledgment','2020-11-19 00:42:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (61,NULL,9,'Subject for Tell a Friend','2021-06-13 12:20:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (62,NULL,9,'Subject for Tell a Friend','2021-09-23 11:46:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (63,NULL,9,'Subject for Tell a Friend','2020-12-05 19:54:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (64,NULL,9,'Subject for Tell a Friend','2021-07-12 21:53:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (65,NULL,9,'Subject for Tell a Friend','2021-05-06 12:41:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (66,NULL,10,'Subject for Pledge Acknowledgment','2021-09-01 07:28:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (67,NULL,10,'Subject for Pledge Acknowledgment','2020-12-19 02:31:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (68,NULL,9,'Subject for Tell a Friend','2020-11-27 09:36:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (69,NULL,10,'Subject for Pledge Acknowledgment','2020-11-29 11:29:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (70,NULL,9,'Subject for Tell a Friend','2021-06-22 22:25:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (71,NULL,9,'Subject for Tell a Friend','2021-07-22 20:51:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (72,NULL,10,'Subject for Pledge Acknowledgment','2021-07-10 07:45:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (73,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 04:00:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (74,NULL,9,'Subject for Tell a Friend','2020-12-07 23:44:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (75,NULL,9,'Subject for Tell a Friend','2020-12-30 20:39:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (76,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 00:48:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (77,NULL,9,'Subject for Tell a Friend','2021-01-27 20:45:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (78,NULL,9,'Subject for Tell a Friend','2021-09-03 20:52:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (79,NULL,10,'Subject for Pledge Acknowledgment','2021-04-28 18:43:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (80,NULL,10,'Subject for Pledge Acknowledgment','2021-01-17 18:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (81,NULL,9,'Subject for Tell a Friend','2021-03-06 23:26:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (82,NULL,9,'Subject for Tell a Friend','2021-06-26 05:42:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (83,NULL,9,'Subject for Tell a Friend','2021-06-04 20:21:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (84,NULL,9,'Subject for Tell a Friend','2021-09-29 16:08:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (85,NULL,9,'Subject for Tell a Friend','2021-04-18 15:41:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (86,NULL,10,'Subject for Pledge Acknowledgment','2021-10-31 01:55:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (87,NULL,10,'Subject for Pledge Acknowledgment','2021-09-29 19:50:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (88,NULL,9,'Subject for Tell a Friend','2021-08-25 18:38:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (89,NULL,10,'Subject for Pledge Acknowledgment','2020-12-31 08:44:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (90,NULL,9,'Subject for Tell a Friend','2021-05-11 05:45:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (91,NULL,10,'Subject for Pledge Acknowledgment','2021-05-06 17:09:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (92,NULL,9,'Subject for Tell a Friend','2020-12-13 11:08:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (93,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 13:30:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (94,NULL,9,'Subject for Tell a Friend','2021-03-20 09:22:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (95,NULL,9,'Subject for Tell a Friend','2020-11-06 21:30:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (96,NULL,10,'Subject for Pledge Acknowledgment','2021-06-28 19:57:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (97,NULL,10,'Subject for Pledge Acknowledgment','2021-07-24 14:34:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (98,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 18:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (99,NULL,10,'Subject for Pledge Acknowledgment','2021-06-28 12:14:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (100,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 17:09:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (101,NULL,10,'Subject for Pledge Acknowledgment','2020-11-15 08:24:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (102,NULL,9,'Subject for Tell a Friend','2021-08-19 03:50:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (103,NULL,10,'Subject for Pledge Acknowledgment','2021-09-27 00:38:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (104,NULL,9,'Subject for Tell a Friend','2021-06-05 16:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (105,NULL,9,'Subject for Tell a Friend','2021-10-10 14:48:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (106,NULL,10,'Subject for Pledge Acknowledgment','2021-03-16 20:33:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (107,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 17:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (108,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 22:47:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (109,NULL,9,'Subject for Tell a Friend','2021-06-27 05:59:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (110,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 15:47:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (111,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 08:00:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (112,NULL,10,'Subject for Pledge Acknowledgment','2021-10-29 22:27:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:33','2021-11-03 22:14:33'), - (113,NULL,10,'Subject for Pledge Acknowledgment','2021-01-05 06:14:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (114,NULL,10,'Subject for Pledge Acknowledgment','2021-06-13 06:50:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (115,NULL,10,'Subject for Pledge Acknowledgment','2021-10-09 08:31:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (116,NULL,10,'Subject for Pledge Acknowledgment','2021-01-16 16:06:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (117,NULL,9,'Subject for Tell a Friend','2021-04-26 15:31:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (118,NULL,9,'Subject for Tell a Friend','2021-10-03 13:04:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (119,NULL,10,'Subject for Pledge Acknowledgment','2021-02-07 07:35:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (120,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 00:25:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (121,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 04:14:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (122,NULL,9,'Subject for Tell a Friend','2021-07-19 18:56:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (123,NULL,9,'Subject for Tell a Friend','2021-02-07 08:44:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (124,NULL,9,'Subject for Tell a Friend','2021-08-31 06:59:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (125,NULL,9,'Subject for Tell a Friend','2021-09-30 08:15:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (126,NULL,9,'Subject for Tell a Friend','2020-11-06 08:21:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (127,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 22:05:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (128,NULL,9,'Subject for Tell a Friend','2020-12-19 20:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (129,NULL,9,'Subject for Tell a Friend','2021-06-22 21:37:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (130,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 13:18:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (131,NULL,10,'Subject for Pledge Acknowledgment','2021-09-04 10:51:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (132,NULL,9,'Subject for Tell a Friend','2021-04-24 13:42:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (133,NULL,9,'Subject for Tell a Friend','2021-04-18 09:45:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (134,NULL,10,'Subject for Pledge Acknowledgment','2021-02-18 19:33:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (135,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 09:34:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (136,NULL,9,'Subject for Tell a Friend','2020-12-14 01:15:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (137,NULL,9,'Subject for Tell a Friend','2021-08-27 15:14:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (138,NULL,9,'Subject for Tell a Friend','2020-12-06 14:50:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (139,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 17:39:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (140,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 20:26:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (141,NULL,10,'Subject for Pledge Acknowledgment','2021-01-26 12:28:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (142,NULL,9,'Subject for Tell a Friend','2021-09-21 23:11:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (143,NULL,9,'Subject for Tell a Friend','2021-08-09 17:02:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (144,NULL,10,'Subject for Pledge Acknowledgment','2021-06-06 16:49:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (145,NULL,9,'Subject for Tell a Friend','2021-02-04 16:57:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (146,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 05:47:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (147,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 05:00:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (148,NULL,10,'Subject for Pledge Acknowledgment','2021-06-16 04:12:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (149,NULL,9,'Subject for Tell a Friend','2021-01-18 18:42:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (150,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 17:32:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (151,NULL,9,'Subject for Tell a Friend','2021-09-15 00:48:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (152,NULL,10,'Subject for Pledge Acknowledgment','2021-04-13 05:41:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (153,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 20:32:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (154,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 18:36:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (155,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 10:47:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (156,NULL,9,'Subject for Tell a Friend','2021-03-29 10:37:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (157,NULL,9,'Subject for Tell a Friend','2021-03-03 12:25:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (158,NULL,9,'Subject for Tell a Friend','2021-06-03 08:39:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (159,NULL,9,'Subject for Tell a Friend','2021-09-16 05:02:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (160,NULL,9,'Subject for Tell a Friend','2021-10-11 09:50:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (161,NULL,9,'Subject for Tell a Friend','2020-12-02 10:58:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (162,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 04:20:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (163,NULL,9,'Subject for Tell a Friend','2021-05-27 22:07:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (164,NULL,10,'Subject for Pledge Acknowledgment','2021-02-01 13:09:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (165,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 21:41:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (166,NULL,10,'Subject for Pledge Acknowledgment','2020-12-25 07:14:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (167,NULL,9,'Subject for Tell a Friend','2021-05-07 23:24:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (168,NULL,9,'Subject for Tell a Friend','2021-09-12 14:54:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (169,NULL,9,'Subject for Tell a Friend','2021-10-21 20:09:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (170,NULL,10,'Subject for Pledge Acknowledgment','2021-03-20 03:49:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (171,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 06:10:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (172,NULL,9,'Subject for Tell a Friend','2020-11-16 05:10:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (173,NULL,9,'Subject for Tell a Friend','2021-08-25 13:13:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (174,NULL,9,'Subject for Tell a Friend','2021-04-11 07:25:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (175,NULL,10,'Subject for Pledge Acknowledgment','2021-09-14 14:18:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (176,NULL,9,'Subject for Tell a Friend','2020-12-14 15:28:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (177,NULL,9,'Subject for Tell a Friend','2021-10-26 10:59:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (178,NULL,9,'Subject for Tell a Friend','2021-03-06 17:25:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (179,NULL,9,'Subject for Tell a Friend','2021-08-30 18:47:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (180,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 16:26:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (181,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 10:43:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (182,NULL,9,'Subject for Tell a Friend','2021-02-22 07:21:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (183,NULL,9,'Subject for Tell a Friend','2021-04-12 22:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (184,NULL,10,'Subject for Pledge Acknowledgment','2020-11-15 03:23:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (185,NULL,10,'Subject for Pledge Acknowledgment','2021-02-19 17:55:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (186,NULL,9,'Subject for Tell a Friend','2020-11-13 04:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (187,NULL,10,'Subject for Pledge Acknowledgment','2021-03-22 10:40:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (188,NULL,9,'Subject for Tell a Friend','2020-12-04 19:11:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (189,NULL,9,'Subject for Tell a Friend','2021-01-10 19:22:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (190,NULL,10,'Subject for Pledge Acknowledgment','2021-09-08 01:32:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (191,NULL,10,'Subject for Pledge Acknowledgment','2020-12-18 23:19:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (192,NULL,9,'Subject for Tell a Friend','2020-12-09 23:44:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (193,NULL,10,'Subject for Pledge Acknowledgment','2020-12-15 03:11:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (194,NULL,10,'Subject for Pledge Acknowledgment','2021-09-05 21:55:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (195,NULL,10,'Subject for Pledge Acknowledgment','2021-05-29 01:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (196,NULL,10,'Subject for Pledge Acknowledgment','2021-02-09 09:10:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (197,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 15:13:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (198,NULL,9,'Subject for Tell a Friend','2021-05-13 05:54:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (199,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 22:48:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (200,NULL,9,'Subject for Tell a Friend','2021-01-12 10:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (201,NULL,9,'Subject for Tell a Friend','2020-11-13 10:39:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (202,NULL,9,'Subject for Tell a Friend','2021-06-19 09:24:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (203,NULL,9,'Subject for Tell a Friend','2020-12-13 17:06:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (204,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 00:35:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (205,NULL,10,'Subject for Pledge Acknowledgment','2020-11-25 00:05:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (206,NULL,10,'Subject for Pledge Acknowledgment','2021-11-02 04:57:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (207,NULL,9,'Subject for Tell a Friend','2021-06-01 06:06:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (208,NULL,9,'Subject for Tell a Friend','2021-05-13 14:51:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (209,NULL,9,'Subject for Tell a Friend','2021-03-03 22:43:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (210,NULL,10,'Subject for Pledge Acknowledgment','2021-10-04 13:06:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (211,NULL,9,'Subject for Tell a Friend','2020-12-15 13:04:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (212,NULL,9,'Subject for Tell a Friend','2020-12-02 15:39:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (213,NULL,9,'Subject for Tell a Friend','2021-01-06 05:15:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (214,NULL,9,'Subject for Tell a Friend','2021-10-22 20:43:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (215,NULL,10,'Subject for Pledge Acknowledgment','2021-05-14 14:20:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (216,NULL,9,'Subject for Tell a Friend','2021-01-23 13:53:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (217,NULL,10,'Subject for Pledge Acknowledgment','2021-01-21 16:39:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (218,NULL,10,'Subject for Pledge Acknowledgment','2021-01-29 23:58:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:34','2021-11-03 22:14:34'), - (219,NULL,10,'Subject for Pledge Acknowledgment','2021-01-17 21:36:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (220,NULL,9,'Subject for Tell a Friend','2021-11-03 08:18:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (221,NULL,10,'Subject for Pledge Acknowledgment','2020-11-05 00:19:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (222,NULL,10,'Subject for Pledge Acknowledgment','2020-11-22 07:39:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (223,NULL,10,'Subject for Pledge Acknowledgment','2021-07-30 01:34:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (224,NULL,9,'Subject for Tell a Friend','2021-05-05 15:48:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (225,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 17:21:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (226,NULL,9,'Subject for Tell a Friend','2021-04-13 19:51:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (227,NULL,9,'Subject for Tell a Friend','2021-01-24 20:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (228,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 07:25:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (229,NULL,10,'Subject for Pledge Acknowledgment','2021-10-14 19:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (230,NULL,10,'Subject for Pledge Acknowledgment','2021-06-23 15:00:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (231,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 12:36:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (232,NULL,10,'Subject for Pledge Acknowledgment','2021-04-12 02:38:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (233,NULL,10,'Subject for Pledge Acknowledgment','2021-09-28 01:25:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (234,NULL,10,'Subject for Pledge Acknowledgment','2021-06-05 12:08:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (235,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 16:32:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (236,NULL,10,'Subject for Pledge Acknowledgment','2021-04-14 20:44:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (237,NULL,10,'Subject for Pledge Acknowledgment','2021-06-14 13:49:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (238,NULL,10,'Subject for Pledge Acknowledgment','2021-01-05 23:12:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (239,NULL,10,'Subject for Pledge Acknowledgment','2020-11-08 02:56:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (240,NULL,9,'Subject for Tell a Friend','2021-06-06 16:03:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (241,NULL,10,'Subject for Pledge Acknowledgment','2021-06-11 00:32:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (242,NULL,9,'Subject for Tell a Friend','2021-08-14 03:29:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (243,NULL,9,'Subject for Tell a Friend','2021-08-14 10:08:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (244,NULL,10,'Subject for Pledge Acknowledgment','2021-07-08 09:52:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (245,NULL,9,'Subject for Tell a Friend','2021-04-08 22:28:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (246,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 22:19:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (247,NULL,9,'Subject for Tell a Friend','2021-01-08 23:01:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (248,NULL,9,'Subject for Tell a Friend','2021-09-29 09:46:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (249,NULL,9,'Subject for Tell a Friend','2021-01-15 15:49:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (250,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 18:50:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (251,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 13:36:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (252,NULL,10,'Subject for Pledge Acknowledgment','2021-01-31 23:13:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (253,NULL,10,'Subject for Pledge Acknowledgment','2021-02-05 07:49:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (254,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 23:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (255,NULL,10,'Subject for Pledge Acknowledgment','2021-08-12 00:58:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (256,NULL,9,'Subject for Tell a Friend','2021-05-07 06:06:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (257,NULL,10,'Subject for Pledge Acknowledgment','2021-11-03 23:02:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (258,NULL,10,'Subject for Pledge Acknowledgment','2021-02-11 10:27:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (259,NULL,9,'Subject for Tell a Friend','2021-04-09 04:12:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (260,NULL,9,'Subject for Tell a Friend','2021-02-01 11:57:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (261,NULL,9,'Subject for Tell a Friend','2021-06-26 09:27:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (262,NULL,9,'Subject for Tell a Friend','2020-12-14 10:27:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (263,NULL,9,'Subject for Tell a Friend','2021-08-09 23:09:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (264,NULL,10,'Subject for Pledge Acknowledgment','2020-12-04 23:49:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (265,NULL,10,'Subject for Pledge Acknowledgment','2021-09-10 03:21:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (266,NULL,9,'Subject for Tell a Friend','2021-05-07 00:23:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (267,NULL,10,'Subject for Pledge Acknowledgment','2021-04-20 08:38:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (268,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 09:03:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (269,NULL,10,'Subject for Pledge Acknowledgment','2021-03-08 16:14:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (270,NULL,9,'Subject for Tell a Friend','2021-08-16 02:15:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (271,NULL,9,'Subject for Tell a Friend','2020-12-22 06:11:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (272,NULL,9,'Subject for Tell a Friend','2021-07-24 19:38:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (273,NULL,10,'Subject for Pledge Acknowledgment','2021-09-28 09:45:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (274,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 01:45:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (275,NULL,10,'Subject for Pledge Acknowledgment','2020-12-10 00:04:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (276,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 14:54:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (277,NULL,9,'Subject for Tell a Friend','2021-10-02 09:05:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (278,NULL,10,'Subject for Pledge Acknowledgment','2021-04-10 05:29:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (279,NULL,10,'Subject for Pledge Acknowledgment','2020-11-25 05:03:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (280,NULL,9,'Subject for Tell a Friend','2020-12-30 16:09:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (281,NULL,9,'Subject for Tell a Friend','2020-11-20 04:43:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (282,NULL,9,'Subject for Tell a Friend','2020-12-01 03:56:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (283,NULL,9,'Subject for Tell a Friend','2020-11-15 21:16:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (284,NULL,9,'Subject for Tell a Friend','2021-09-05 02:49:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (285,NULL,9,'Subject for Tell a Friend','2020-11-25 21:12:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (286,NULL,10,'Subject for Pledge Acknowledgment','2021-05-29 03:15:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (287,NULL,9,'Subject for Tell a Friend','2021-06-28 04:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (288,NULL,10,'Subject for Pledge Acknowledgment','2021-08-07 15:25:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (289,NULL,9,'Subject for Tell a Friend','2021-06-08 12:17:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (290,NULL,10,'Subject for Pledge Acknowledgment','2020-11-08 14:42:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (291,NULL,10,'Subject for Pledge Acknowledgment','2021-07-05 14:41:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (292,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 16:17:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (293,NULL,9,'Subject for Tell a Friend','2021-05-27 23:03:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (294,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 05:51:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (295,NULL,9,'Subject for Tell a Friend','2020-11-04 16:06:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (296,NULL,9,'Subject for Tell a Friend','2021-01-24 20:45:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (297,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 20:27:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (298,NULL,10,'Subject for Pledge Acknowledgment','2021-08-26 15:30:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (299,NULL,10,'Subject for Pledge Acknowledgment','2021-07-09 10:35:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (300,NULL,9,'Subject for Tell a Friend','2021-04-13 04:32:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (301,NULL,10,'Subject for Pledge Acknowledgment','2021-03-30 15:33:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (302,NULL,10,'Subject for Pledge Acknowledgment','2021-03-11 07:24:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (303,NULL,9,'Subject for Tell a Friend','2021-07-04 10:22:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (304,NULL,10,'Subject for Pledge Acknowledgment','2021-10-19 17:19:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (305,NULL,10,'Subject for Pledge Acknowledgment','2021-06-07 12:46:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (306,NULL,10,'Subject for Pledge Acknowledgment','2021-04-28 21:28:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (307,NULL,10,'Subject for Pledge Acknowledgment','2021-02-24 00:29:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (308,NULL,9,'Subject for Tell a Friend','2021-05-23 04:41:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (309,NULL,9,'Subject for Tell a Friend','2020-11-07 06:59:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (310,NULL,10,'Subject for Pledge Acknowledgment','2021-03-12 18:05:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (311,NULL,10,'Subject for Pledge Acknowledgment','2021-04-07 23:19:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (312,NULL,9,'Subject for Tell a Friend','2021-03-22 02:20:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (313,NULL,10,'Subject for Pledge Acknowledgment','2021-09-23 20:45:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (314,NULL,10,'Subject for Pledge Acknowledgment','2021-05-10 11:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (315,NULL,10,'Subject for Pledge Acknowledgment','2021-05-07 10:19:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (316,NULL,10,'Subject for Pledge Acknowledgment','2020-11-09 11:22:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (317,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 03:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (318,NULL,10,'Subject for Pledge Acknowledgment','2021-06-13 23:00:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (319,NULL,9,'Subject for Tell a Friend','2021-09-12 00:51:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (320,NULL,10,'Subject for Pledge Acknowledgment','2021-08-18 23:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (321,NULL,9,'Subject for Tell a Friend','2021-06-27 06:24:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (322,NULL,9,'Subject for Tell a Friend','2020-12-10 12:24:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (323,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 00:44:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (324,NULL,9,'Subject for Tell a Friend','2021-01-09 03:30:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (325,NULL,9,'Subject for Tell a Friend','2021-08-13 15:40:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (326,NULL,9,'Subject for Tell a Friend','2021-08-26 08:36:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (327,NULL,10,'Subject for Pledge Acknowledgment','2021-02-01 20:31:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (328,NULL,9,'Subject for Tell a Friend','2020-12-12 01:47:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (329,NULL,9,'Subject for Tell a Friend','2021-04-06 13:59:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (330,NULL,9,'Subject for Tell a Friend','2021-05-20 19:20:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (331,NULL,10,'Subject for Pledge Acknowledgment','2021-01-30 01:39:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (332,NULL,9,'Subject for Tell a Friend','2021-07-06 15:50:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (333,NULL,9,'Subject for Tell a Friend','2021-02-23 08:47:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (334,NULL,10,'Subject for Pledge Acknowledgment','2020-12-23 23:33:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (335,NULL,9,'Subject for Tell a Friend','2021-09-24 17:14:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (336,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 02:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (337,NULL,10,'Subject for Pledge Acknowledgment','2021-02-12 09:35:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (338,NULL,10,'Subject for Pledge Acknowledgment','2021-01-13 16:20:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (339,NULL,10,'Subject for Pledge Acknowledgment','2020-12-15 16:31:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (340,NULL,9,'Subject for Tell a Friend','2020-12-20 11:46:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (341,NULL,9,'Subject for Tell a Friend','2020-11-15 00:05:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (342,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 05:00:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (343,NULL,9,'Subject for Tell a Friend','2020-11-23 18:56:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (344,NULL,9,'Subject for Tell a Friend','2021-06-12 15:39:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (345,NULL,9,'Subject for Tell a Friend','2021-10-13 02:17:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (346,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 11:27:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (347,NULL,9,'Subject for Tell a Friend','2020-12-22 19:24:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (348,NULL,9,'Subject for Tell a Friend','2021-02-25 14:00:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (349,NULL,9,'Subject for Tell a Friend','2021-07-10 07:51:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (350,NULL,10,'Subject for Pledge Acknowledgment','2021-05-13 15:01:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (351,NULL,10,'Subject for Pledge Acknowledgment','2021-01-07 09:41:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (352,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 15:11:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (353,NULL,9,'Subject for Tell a Friend','2021-03-14 02:44:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:35','2021-11-03 22:14:35'), - (354,NULL,9,'Subject for Tell a Friend','2021-07-04 18:37:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (355,NULL,9,'Subject for Tell a Friend','2021-10-22 13:12:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (356,NULL,10,'Subject for Pledge Acknowledgment','2021-02-21 00:21:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (357,NULL,9,'Subject for Tell a Friend','2021-01-07 15:42:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (358,NULL,9,'Subject for Tell a Friend','2021-05-29 14:38:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (359,NULL,9,'Subject for Tell a Friend','2021-07-03 09:19:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (360,NULL,10,'Subject for Pledge Acknowledgment','2021-02-18 14:09:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (361,NULL,10,'Subject for Pledge Acknowledgment','2021-02-23 10:41:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (362,NULL,10,'Subject for Pledge Acknowledgment','2020-11-27 14:04:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (363,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 11:39:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (364,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 03:18:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (365,NULL,9,'Subject for Tell a Friend','2021-05-17 07:44:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (366,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 22:24:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (367,NULL,10,'Subject for Pledge Acknowledgment','2020-11-19 16:00:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (368,NULL,9,'Subject for Tell a Friend','2021-05-21 10:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (369,NULL,9,'Subject for Tell a Friend','2021-07-08 17:11:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (370,NULL,10,'Subject for Pledge Acknowledgment','2021-05-05 15:05:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (371,NULL,9,'Subject for Tell a Friend','2020-11-25 18:50:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (372,NULL,10,'Subject for Pledge Acknowledgment','2021-05-19 17:36:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (373,NULL,9,'Subject for Tell a Friend','2020-12-21 04:33:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (374,NULL,10,'Subject for Pledge Acknowledgment','2021-03-28 20:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (375,NULL,9,'Subject for Tell a Friend','2021-05-16 07:02:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (376,NULL,10,'Subject for Pledge Acknowledgment','2021-05-30 13:37:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (377,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 09:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (378,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 02:54:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (379,NULL,9,'Subject for Tell a Friend','2021-07-13 11:00:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (380,NULL,9,'Subject for Tell a Friend','2021-01-09 21:23:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (381,NULL,10,'Subject for Pledge Acknowledgment','2021-06-08 23:18:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (382,NULL,10,'Subject for Pledge Acknowledgment','2020-11-22 06:43:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (383,NULL,10,'Subject for Pledge Acknowledgment','2021-01-16 18:28:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (384,NULL,9,'Subject for Tell a Friend','2021-04-15 09:08:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (385,NULL,9,'Subject for Tell a Friend','2021-04-29 09:09:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (386,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 18:07:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (387,NULL,9,'Subject for Tell a Friend','2021-06-30 17:46:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (388,NULL,10,'Subject for Pledge Acknowledgment','2021-02-08 10:53:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (389,NULL,9,'Subject for Tell a Friend','2020-12-29 12:56:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (390,NULL,10,'Subject for Pledge Acknowledgment','2021-02-26 19:49:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (391,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 04:38:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (392,NULL,10,'Subject for Pledge Acknowledgment','2021-03-13 05:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (393,NULL,10,'Subject for Pledge Acknowledgment','2021-11-04 07:47:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (394,NULL,9,'Subject for Tell a Friend','2021-08-02 13:49:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (395,NULL,9,'Subject for Tell a Friend','2021-03-31 02:59:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (396,NULL,9,'Subject for Tell a Friend','2020-12-23 22:52:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (397,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 21:27:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (398,NULL,9,'Subject for Tell a Friend','2021-08-28 06:15:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (399,NULL,9,'Subject for Tell a Friend','2021-04-16 00:44:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (400,NULL,10,'Subject for Pledge Acknowledgment','2021-03-23 07:38:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (401,NULL,10,'Subject for Pledge Acknowledgment','2020-11-25 07:08:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (402,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 22:46:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (403,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 12:49:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (404,NULL,9,'Subject for Tell a Friend','2021-09-10 04:38:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (405,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 19:20:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (406,NULL,9,'Subject for Tell a Friend','2021-10-19 23:44:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (407,NULL,9,'Subject for Tell a Friend','2021-10-20 08:38:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (408,NULL,9,'Subject for Tell a Friend','2020-12-15 09:45:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (409,NULL,10,'Subject for Pledge Acknowledgment','2021-04-27 04:43:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (410,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 22:52:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (411,NULL,10,'Subject for Pledge Acknowledgment','2021-02-15 03:08:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (412,NULL,9,'Subject for Tell a Friend','2020-12-07 02:52:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (413,NULL,10,'Subject for Pledge Acknowledgment','2021-06-23 13:29:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (414,NULL,9,'Subject for Tell a Friend','2021-01-31 12:02:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (415,NULL,9,'Subject for Tell a Friend','2021-08-30 17:04:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (416,NULL,9,'Subject for Tell a Friend','2021-05-19 19:50:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (417,NULL,9,'Subject for Tell a Friend','2021-04-25 21:02:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (418,NULL,10,'Subject for Pledge Acknowledgment','2021-07-09 13:22:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (419,NULL,9,'Subject for Tell a Friend','2021-10-16 02:51:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (420,NULL,9,'Subject for Tell a Friend','2021-07-09 22:03:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (421,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 06:03:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (422,NULL,10,'Subject for Pledge Acknowledgment','2021-05-04 00:39:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (423,NULL,9,'Subject for Tell a Friend','2020-11-08 01:16:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (424,NULL,9,'Subject for Tell a Friend','2021-09-23 12:29:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (425,NULL,9,'Subject for Tell a Friend','2021-08-13 13:31:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (426,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 17:29:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (427,NULL,9,'Subject for Tell a Friend','2020-12-24 20:17:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (428,NULL,9,'Subject for Tell a Friend','2021-09-13 06:48:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (429,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 18:38:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (430,NULL,9,'Subject for Tell a Friend','2021-03-22 02:16:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (431,NULL,10,'Subject for Pledge Acknowledgment','2021-03-30 09:56:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (432,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 08:53:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (433,NULL,10,'Subject for Pledge Acknowledgment','2021-09-08 21:49:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (434,NULL,9,'Subject for Tell a Friend','2021-07-29 18:02:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (435,NULL,9,'Subject for Tell a Friend','2020-12-05 04:00:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (436,NULL,9,'Subject for Tell a Friend','2020-12-31 08:25:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (437,NULL,10,'Subject for Pledge Acknowledgment','2021-05-18 10:14:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (438,NULL,10,'Subject for Pledge Acknowledgment','2021-03-06 17:22:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (439,NULL,9,'Subject for Tell a Friend','2021-01-14 13:30:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (440,NULL,9,'Subject for Tell a Friend','2021-01-29 10:55:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (441,NULL,9,'Subject for Tell a Friend','2021-05-06 09:30:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (442,NULL,9,'Subject for Tell a Friend','2021-04-29 16:08:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (443,NULL,10,'Subject for Pledge Acknowledgment','2021-03-09 17:42:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (444,NULL,10,'Subject for Pledge Acknowledgment','2021-04-08 07:28:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (445,NULL,9,'Subject for Tell a Friend','2021-01-11 01:02:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (446,NULL,9,'Subject for Tell a Friend','2021-07-17 08:38:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (447,NULL,10,'Subject for Pledge Acknowledgment','2021-06-14 20:58:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (448,NULL,9,'Subject for Tell a Friend','2021-10-28 17:26:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (449,NULL,9,'Subject for Tell a Friend','2021-05-13 08:14:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (450,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 17:55:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (464,1,7,'General','2021-11-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (465,2,7,'Student','2021-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,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (466,3,7,'General','2021-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,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (467,4,7,'Student','2021-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,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (468,5,7,'Student','2020-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,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (469,6,7,'Student','2021-10-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (470,7,7,'General','2021-10-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (471,8,7,'Student','2021-10-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (472,9,7,'General','2021-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,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (473,10,7,'Student','2020-10-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (474,11,7,'Lifetime','2021-10-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (475,12,7,'Student','2021-10-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (476,13,7,'General','2021-10-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (477,14,7,'Student','2021-10-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (478,15,7,'General','2019-07-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (479,16,7,'Student','2021-10-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (480,17,7,'General','2021-10-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (481,18,7,'Student','2021-10-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (482,19,7,'General','2021-10-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (483,20,7,'Student','2020-10-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (484,21,7,'General','2021-10-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (485,22,7,'Lifetime','2021-10-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (486,23,7,'General','2021-10-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (487,24,7,'Student','2021-10-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (488,25,7,'General','2019-04-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (489,26,7,'Student','2021-10-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (490,27,7,'General','2021-10-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (491,28,7,'Student','2021-10-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (492,29,7,'General','2021-10-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (493,30,7,'General','2019-03-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (494,14,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (495,15,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (496,16,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (497,17,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (498,18,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (499,19,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (500,20,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (501,21,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (502,22,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (503,23,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (504,24,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (505,25,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (506,26,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (508,28,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (510,30,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (512,32,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (513,33,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (514,34,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (515,35,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (516,36,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (518,38,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (520,40,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (522,42,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (523,43,6,'$ 100.00 - General Membership: Offline signup','2021-11-04 09:14:36',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:36','2021-11-03 22:14:36'), - (525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (575,45,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (579,49,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (580,50,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (581,51,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (584,54,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (585,55,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (586,56,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (588,58,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (589,59,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (590,60,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (600,70,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (601,71,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (602,72,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (604,74,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (610,80,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (611,81,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'), - (624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-04 09:14:37',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-03 22:14:37','2021-11-03 22:14:37'); + (1,NULL,9,'Subject for Tell a Friend','2021-04-05 02:11:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (2,NULL,9,'Subject for Tell a Friend','2021-04-23 04:37:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (3,NULL,9,'Subject for Tell a Friend','2021-05-25 07:10:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (4,NULL,9,'Subject for Tell a Friend','2021-08-23 04:05:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (5,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 13:59:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (6,NULL,9,'Subject for Tell a Friend','2021-01-04 01:09:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (7,NULL,10,'Subject for Pledge Acknowledgment','2021-08-21 09:03:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (8,NULL,9,'Subject for Tell a Friend','2021-08-24 12:04:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (9,NULL,10,'Subject for Pledge Acknowledgment','2021-08-17 12:44:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (10,NULL,10,'Subject for Pledge Acknowledgment','2021-10-29 20:50:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (11,NULL,9,'Subject for Tell a Friend','2021-08-13 13:08:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (12,NULL,9,'Subject for Tell a Friend','2021-01-15 16:10:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (13,NULL,9,'Subject for Tell a Friend','2021-08-03 11:06:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (14,NULL,9,'Subject for Tell a Friend','2021-09-04 06:10:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (15,NULL,10,'Subject for Pledge Acknowledgment','2021-08-23 13:42:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (16,NULL,10,'Subject for Pledge Acknowledgment','2021-04-13 05:49:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (17,NULL,9,'Subject for Tell a Friend','2021-03-23 07:04:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (18,NULL,10,'Subject for Pledge Acknowledgment','2020-12-20 18:55:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (19,NULL,9,'Subject for Tell a Friend','2020-12-19 23:40:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (20,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 12:48:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (21,NULL,10,'Subject for Pledge Acknowledgment','2020-12-04 00:47:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:27','2021-11-08 01:45:27'), + (22,NULL,9,'Subject for Tell a Friend','2021-03-19 15:22:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (23,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 19:20:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (24,NULL,10,'Subject for Pledge Acknowledgment','2021-01-23 02:54:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (25,NULL,9,'Subject for Tell a Friend','2020-11-11 09:03:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (26,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 13:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (27,NULL,10,'Subject for Pledge Acknowledgment','2021-01-11 20:04:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (28,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 09:38:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (29,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 15:16:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (30,NULL,9,'Subject for Tell a Friend','2021-08-15 05:51:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (31,NULL,9,'Subject for Tell a Friend','2021-08-23 23:09:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (32,NULL,10,'Subject for Pledge Acknowledgment','2021-06-21 03:29:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (33,NULL,10,'Subject for Pledge Acknowledgment','2021-06-23 19:44:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (34,NULL,9,'Subject for Tell a Friend','2021-09-10 04:40:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (35,NULL,10,'Subject for Pledge Acknowledgment','2021-09-14 08:08:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (36,NULL,9,'Subject for Tell a Friend','2021-09-17 04:04:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (37,NULL,9,'Subject for Tell a Friend','2021-05-07 03:22:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (38,NULL,9,'Subject for Tell a Friend','2021-09-16 05:26:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (39,NULL,9,'Subject for Tell a Friend','2021-02-04 12:24:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (40,NULL,10,'Subject for Pledge Acknowledgment','2021-01-04 13:12:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (41,NULL,10,'Subject for Pledge Acknowledgment','2021-01-09 21:53:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (42,NULL,9,'Subject for Tell a Friend','2021-05-21 04:31:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (43,NULL,10,'Subject for Pledge Acknowledgment','2021-08-09 14:20:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (44,NULL,9,'Subject for Tell a Friend','2021-09-03 05:46:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (45,NULL,9,'Subject for Tell a Friend','2021-03-29 10:59:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (46,NULL,10,'Subject for Pledge Acknowledgment','2021-04-16 01:02:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (47,NULL,10,'Subject for Pledge Acknowledgment','2021-07-11 17:54:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (48,NULL,9,'Subject for Tell a Friend','2021-06-22 07:57:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (49,NULL,10,'Subject for Pledge Acknowledgment','2021-08-04 15:39:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (50,NULL,9,'Subject for Tell a Friend','2021-03-01 16:41:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (51,NULL,9,'Subject for Tell a Friend','2021-05-09 03:01:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (52,NULL,9,'Subject for Tell a Friend','2021-03-24 05:55:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (53,NULL,9,'Subject for Tell a Friend','2021-02-06 06:46:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (54,NULL,9,'Subject for Tell a Friend','2021-02-15 01:31:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (55,NULL,9,'Subject for Tell a Friend','2020-12-19 09:33:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (56,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 07:49:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (57,NULL,9,'Subject for Tell a Friend','2021-09-10 16:48:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (58,NULL,9,'Subject for Tell a Friend','2021-05-21 22:19:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (59,NULL,9,'Subject for Tell a Friend','2021-07-06 05:00:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (60,NULL,10,'Subject for Pledge Acknowledgment','2021-06-20 03:18:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (61,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 12:14:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (62,NULL,10,'Subject for Pledge Acknowledgment','2021-09-03 15:31:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (63,NULL,9,'Subject for Tell a Friend','2021-04-26 21:08:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (64,NULL,10,'Subject for Pledge Acknowledgment','2021-03-30 08:37:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (65,NULL,10,'Subject for Pledge Acknowledgment','2021-02-10 02:57:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (66,NULL,9,'Subject for Tell a Friend','2021-06-15 23:02:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (67,NULL,9,'Subject for Tell a Friend','2021-09-21 07:40:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (68,NULL,10,'Subject for Pledge Acknowledgment','2021-01-21 20:02:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (69,NULL,10,'Subject for Pledge Acknowledgment','2021-03-13 12:54:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (70,NULL,9,'Subject for Tell a Friend','2021-03-03 07:44:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (71,NULL,10,'Subject for Pledge Acknowledgment','2021-09-27 05:42:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (72,NULL,9,'Subject for Tell a Friend','2021-02-05 21:58:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (73,NULL,9,'Subject for Tell a Friend','2020-12-31 15:44:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (74,NULL,9,'Subject for Tell a Friend','2021-09-30 04:57:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (75,NULL,10,'Subject for Pledge Acknowledgment','2020-11-27 05:43:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (76,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 13:40:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (77,NULL,10,'Subject for Pledge Acknowledgment','2021-02-18 11:55:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (78,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 19:54:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (79,NULL,9,'Subject for Tell a Friend','2020-11-25 00:21:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (80,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 03:39:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (81,NULL,10,'Subject for Pledge Acknowledgment','2021-06-13 14:16:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (82,NULL,9,'Subject for Tell a Friend','2021-05-09 03:37:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (83,NULL,9,'Subject for Tell a Friend','2021-10-13 00:04:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (84,NULL,9,'Subject for Tell a Friend','2021-11-05 15:43:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (85,NULL,10,'Subject for Pledge Acknowledgment','2021-04-11 03:37:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (86,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 20:57:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (87,NULL,10,'Subject for Pledge Acknowledgment','2021-04-04 08:57:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (88,NULL,9,'Subject for Tell a Friend','2021-01-17 08:27:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (89,NULL,10,'Subject for Pledge Acknowledgment','2021-09-23 12:49:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (90,NULL,9,'Subject for Tell a Friend','2021-06-25 07:55:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (91,NULL,9,'Subject for Tell a Friend','2021-09-06 15:24:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (92,NULL,9,'Subject for Tell a Friend','2021-02-20 21:52:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (93,NULL,9,'Subject for Tell a Friend','2021-08-31 14:23:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (94,NULL,9,'Subject for Tell a Friend','2021-06-29 01:02:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (95,NULL,9,'Subject for Tell a Friend','2021-04-10 07:19:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (96,NULL,10,'Subject for Pledge Acknowledgment','2021-02-07 15:23:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (97,NULL,9,'Subject for Tell a Friend','2020-11-21 08:05:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (98,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 01:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (99,NULL,9,'Subject for Tell a Friend','2021-01-06 04:32:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (100,NULL,10,'Subject for Pledge Acknowledgment','2020-12-22 14:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (101,NULL,9,'Subject for Tell a Friend','2021-10-24 09:29:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (102,NULL,9,'Subject for Tell a Friend','2020-12-28 20:35:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (103,NULL,10,'Subject for Pledge Acknowledgment','2021-03-19 11:38:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (104,NULL,10,'Subject for Pledge Acknowledgment','2021-03-19 10:41:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (105,NULL,9,'Subject for Tell a Friend','2021-08-30 17:39:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (106,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 09:00:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (107,NULL,10,'Subject for Pledge Acknowledgment','2021-10-24 04:42:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (108,NULL,10,'Subject for Pledge Acknowledgment','2021-10-26 13:05:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (109,NULL,10,'Subject for Pledge Acknowledgment','2021-10-09 23:14:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (110,NULL,10,'Subject for Pledge Acknowledgment','2021-06-21 01:38:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (111,NULL,9,'Subject for Tell a Friend','2021-03-12 02:08:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (112,NULL,10,'Subject for Pledge Acknowledgment','2021-03-01 08:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (113,NULL,10,'Subject for Pledge Acknowledgment','2020-12-16 02:19:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (114,NULL,10,'Subject for Pledge Acknowledgment','2021-09-17 12:08:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (115,NULL,9,'Subject for Tell a Friend','2021-03-01 17:04:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:28','2021-11-08 01:45:28'), + (116,NULL,9,'Subject for Tell a Friend','2021-06-12 16:23:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (117,NULL,9,'Subject for Tell a Friend','2021-04-29 03:49:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (118,NULL,9,'Subject for Tell a Friend','2021-09-14 04:28:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (119,NULL,9,'Subject for Tell a Friend','2021-06-30 22:14:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (120,NULL,9,'Subject for Tell a Friend','2021-08-15 14:30:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (121,NULL,10,'Subject for Pledge Acknowledgment','2021-06-11 08:25:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (122,NULL,9,'Subject for Tell a Friend','2021-05-05 09:45:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (123,NULL,9,'Subject for Tell a Friend','2021-09-26 03:26:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (124,NULL,9,'Subject for Tell a Friend','2021-08-16 21:59:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (125,NULL,10,'Subject for Pledge Acknowledgment','2021-09-18 03:24:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (126,NULL,10,'Subject for Pledge Acknowledgment','2021-07-10 22:24:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (127,NULL,10,'Subject for Pledge Acknowledgment','2021-03-31 06:34:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (128,NULL,9,'Subject for Tell a Friend','2021-08-28 22:00:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (129,NULL,10,'Subject for Pledge Acknowledgment','2020-11-12 19:01:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (130,NULL,9,'Subject for Tell a Friend','2021-06-18 06:27:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (131,NULL,10,'Subject for Pledge Acknowledgment','2021-01-16 14:39:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (132,NULL,9,'Subject for Tell a Friend','2020-12-03 15:26:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (133,NULL,10,'Subject for Pledge Acknowledgment','2021-03-18 17:22:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (134,NULL,9,'Subject for Tell a Friend','2021-02-04 02:19:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (135,NULL,10,'Subject for Pledge Acknowledgment','2021-10-19 01:31:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (136,NULL,10,'Subject for Pledge Acknowledgment','2020-12-21 04:37:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (137,NULL,10,'Subject for Pledge Acknowledgment','2021-03-15 09:41:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (138,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 16:14:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (139,NULL,10,'Subject for Pledge Acknowledgment','2021-04-13 04:41:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (140,NULL,9,'Subject for Tell a Friend','2021-10-21 21:10:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (141,NULL,9,'Subject for Tell a Friend','2021-02-12 08:45:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (142,NULL,9,'Subject for Tell a Friend','2021-03-15 11:28:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (143,NULL,9,'Subject for Tell a Friend','2021-07-10 04:32:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (144,NULL,9,'Subject for Tell a Friend','2021-03-06 18:42:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (145,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 11:41:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (146,NULL,9,'Subject for Tell a Friend','2020-11-11 02:31:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (147,NULL,10,'Subject for Pledge Acknowledgment','2021-03-07 04:21:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (148,NULL,10,'Subject for Pledge Acknowledgment','2020-11-19 04:12:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (149,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 09:31:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (150,NULL,10,'Subject for Pledge Acknowledgment','2021-02-01 05:53:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (151,NULL,9,'Subject for Tell a Friend','2021-04-16 12:53:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (152,NULL,10,'Subject for Pledge Acknowledgment','2021-05-06 00:37:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (153,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 16:10:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (154,NULL,9,'Subject for Tell a Friend','2021-02-05 06:05:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (155,NULL,9,'Subject for Tell a Friend','2021-05-06 13:04:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (156,NULL,10,'Subject for Pledge Acknowledgment','2021-07-08 10:47:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (157,NULL,10,'Subject for Pledge Acknowledgment','2021-02-22 23:58:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (158,NULL,10,'Subject for Pledge Acknowledgment','2020-12-23 01:44:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (159,NULL,10,'Subject for Pledge Acknowledgment','2021-04-03 09:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (160,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 21:57:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (161,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 00:17:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (162,NULL,9,'Subject for Tell a Friend','2021-06-11 20:48:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (163,NULL,9,'Subject for Tell a Friend','2020-11-28 18:31:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (164,NULL,9,'Subject for Tell a Friend','2021-10-25 10:49:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (165,NULL,9,'Subject for Tell a Friend','2021-04-23 06:13:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (166,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 04:48:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (167,NULL,9,'Subject for Tell a Friend','2021-10-15 23:14:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (168,NULL,9,'Subject for Tell a Friend','2021-09-06 19:29:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (169,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 12:10:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (170,NULL,9,'Subject for Tell a Friend','2021-06-29 07:38:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (171,NULL,9,'Subject for Tell a Friend','2021-01-27 12:57:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (172,NULL,10,'Subject for Pledge Acknowledgment','2021-02-21 10:36:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (173,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 01:38:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (174,NULL,9,'Subject for Tell a Friend','2020-12-29 03:07:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (175,NULL,9,'Subject for Tell a Friend','2021-05-24 22:03:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (176,NULL,9,'Subject for Tell a Friend','2021-07-01 14:21:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (177,NULL,9,'Subject for Tell a Friend','2021-08-22 20:48:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (178,NULL,10,'Subject for Pledge Acknowledgment','2021-01-27 23:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (179,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 23:13:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (180,NULL,9,'Subject for Tell a Friend','2021-04-26 15:06:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (181,NULL,9,'Subject for Tell a Friend','2021-09-16 03:39:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (182,NULL,10,'Subject for Pledge Acknowledgment','2021-10-26 15:37:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (183,NULL,9,'Subject for Tell a Friend','2021-03-29 04:47:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (184,NULL,9,'Subject for Tell a Friend','2021-07-08 03:43:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (185,NULL,9,'Subject for Tell a Friend','2021-03-17 01:05:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (186,NULL,9,'Subject for Tell a Friend','2021-05-01 20:15:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (187,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 11:44:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (188,NULL,9,'Subject for Tell a Friend','2021-03-09 00:15:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (189,NULL,9,'Subject for Tell a Friend','2020-11-19 01:57:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (190,NULL,9,'Subject for Tell a Friend','2020-11-18 09:27:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (191,NULL,10,'Subject for Pledge Acknowledgment','2021-08-05 21:12:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (192,NULL,10,'Subject for Pledge Acknowledgment','2021-03-25 18:05:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (193,NULL,9,'Subject for Tell a Friend','2020-12-01 05:26:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (194,NULL,9,'Subject for Tell a Friend','2021-10-27 07:09:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (195,NULL,9,'Subject for Tell a Friend','2021-04-11 16:38:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (196,NULL,9,'Subject for Tell a Friend','2021-02-03 08:11:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (197,NULL,10,'Subject for Pledge Acknowledgment','2021-09-09 12:10:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (198,NULL,9,'Subject for Tell a Friend','2021-04-02 19:52:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (199,NULL,9,'Subject for Tell a Friend','2021-05-15 09:10:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (200,NULL,10,'Subject for Pledge Acknowledgment','2021-07-04 14:55:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (201,NULL,10,'Subject for Pledge Acknowledgment','2021-09-10 11:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (202,NULL,10,'Subject for Pledge Acknowledgment','2021-02-27 10:04:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (203,NULL,9,'Subject for Tell a Friend','2021-06-01 13:37:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (204,NULL,10,'Subject for Pledge Acknowledgment','2021-03-17 21:41:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (205,NULL,10,'Subject for Pledge Acknowledgment','2021-08-28 18:08:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (206,NULL,9,'Subject for Tell a Friend','2020-11-24 02:08:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (207,NULL,9,'Subject for Tell a Friend','2021-04-10 19:23:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (208,NULL,9,'Subject for Tell a Friend','2021-08-19 18:08:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (209,NULL,9,'Subject for Tell a Friend','2021-11-06 21:29:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (210,NULL,9,'Subject for Tell a Friend','2021-03-17 16:13:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (211,NULL,9,'Subject for Tell a Friend','2021-06-10 03:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (212,NULL,9,'Subject for Tell a Friend','2020-11-24 03:07:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (213,NULL,10,'Subject for Pledge Acknowledgment','2021-06-08 05:48:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (214,NULL,9,'Subject for Tell a Friend','2021-04-17 20:56:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (215,NULL,10,'Subject for Pledge Acknowledgment','2021-03-02 19:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (216,NULL,10,'Subject for Pledge Acknowledgment','2020-11-29 13:32:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (217,NULL,9,'Subject for Tell a Friend','2021-10-04 00:40:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (218,NULL,10,'Subject for Pledge Acknowledgment','2021-05-19 19:05:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (219,NULL,9,'Subject for Tell a Friend','2021-08-19 15:06:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (220,NULL,9,'Subject for Tell a Friend','2021-07-15 08:17:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (221,NULL,10,'Subject for Pledge Acknowledgment','2020-11-19 11:30:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (222,NULL,9,'Subject for Tell a Friend','2021-10-17 11:09:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (223,NULL,10,'Subject for Pledge Acknowledgment','2021-01-19 00:15:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (224,NULL,10,'Subject for Pledge Acknowledgment','2021-05-17 03:36:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (225,NULL,9,'Subject for Tell a Friend','2021-04-01 06:07:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (226,NULL,10,'Subject for Pledge Acknowledgment','2021-04-06 08:42:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (227,NULL,9,'Subject for Tell a Friend','2021-06-11 08:02:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (228,NULL,9,'Subject for Tell a Friend','2021-09-22 01:14:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (229,NULL,9,'Subject for Tell a Friend','2021-08-03 02:55:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (230,NULL,9,'Subject for Tell a Friend','2020-11-09 22:37:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (231,NULL,9,'Subject for Tell a Friend','2021-05-24 14:13:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (232,NULL,9,'Subject for Tell a Friend','2021-07-03 04:23:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (233,NULL,9,'Subject for Tell a Friend','2021-04-14 02:32:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (234,NULL,9,'Subject for Tell a Friend','2021-10-14 04:41:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (235,NULL,9,'Subject for Tell a Friend','2020-12-09 08:04:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (236,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 05:03:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (237,NULL,9,'Subject for Tell a Friend','2021-11-06 04:13:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (238,NULL,9,'Subject for Tell a Friend','2021-04-23 21:18:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (239,NULL,9,'Subject for Tell a Friend','2021-07-13 04:20:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (240,NULL,10,'Subject for Pledge Acknowledgment','2021-01-03 13:34:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (241,NULL,10,'Subject for Pledge Acknowledgment','2021-05-25 00:13:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (242,NULL,10,'Subject for Pledge Acknowledgment','2021-06-22 06:40:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (243,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 13:29:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (244,NULL,9,'Subject for Tell a Friend','2021-01-08 21:18:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (245,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 01:02:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (246,NULL,10,'Subject for Pledge Acknowledgment','2021-04-02 23:07:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:29','2021-11-08 01:45:29'), + (247,NULL,9,'Subject for Tell a Friend','2021-10-11 13:58:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (248,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 16:09:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (249,NULL,9,'Subject for Tell a Friend','2021-01-11 03:56:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (250,NULL,9,'Subject for Tell a Friend','2021-02-02 17:37:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (251,NULL,10,'Subject for Pledge Acknowledgment','2021-09-28 09:53:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (252,NULL,9,'Subject for Tell a Friend','2021-10-19 16:14:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (253,NULL,9,'Subject for Tell a Friend','2020-11-28 09:09:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (254,NULL,9,'Subject for Tell a Friend','2021-08-04 17:25:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (255,NULL,10,'Subject for Pledge Acknowledgment','2021-09-23 03:19:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (256,NULL,10,'Subject for Pledge Acknowledgment','2021-05-14 20:07:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (257,NULL,10,'Subject for Pledge Acknowledgment','2021-01-04 14:40:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (258,NULL,10,'Subject for Pledge Acknowledgment','2021-03-08 03:24:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (259,NULL,9,'Subject for Tell a Friend','2021-11-06 09:34:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (260,NULL,9,'Subject for Tell a Friend','2021-07-04 17:15:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (261,NULL,10,'Subject for Pledge Acknowledgment','2021-04-07 00:58:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (262,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 05:48:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (263,NULL,9,'Subject for Tell a Friend','2021-10-07 01:36:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (264,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 15:37:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (265,NULL,9,'Subject for Tell a Friend','2020-12-16 00:54:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (266,NULL,9,'Subject for Tell a Friend','2021-08-06 11:35:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (267,NULL,10,'Subject for Pledge Acknowledgment','2021-06-20 18:44:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (268,NULL,10,'Subject for Pledge Acknowledgment','2020-11-24 13:08:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (269,NULL,9,'Subject for Tell a Friend','2021-04-29 03:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (270,NULL,10,'Subject for Pledge Acknowledgment','2021-08-15 04:54:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (271,NULL,9,'Subject for Tell a Friend','2021-07-31 07:58:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (272,NULL,10,'Subject for Pledge Acknowledgment','2021-11-03 13:08:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (273,NULL,9,'Subject for Tell a Friend','2021-06-15 04:24:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (274,NULL,9,'Subject for Tell a Friend','2021-06-20 09:10:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (275,NULL,9,'Subject for Tell a Friend','2021-11-08 02:46:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (276,NULL,10,'Subject for Pledge Acknowledgment','2020-12-20 22:21:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (277,NULL,9,'Subject for Tell a Friend','2020-12-23 08:02:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (278,NULL,9,'Subject for Tell a Friend','2021-11-03 19:43:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (279,NULL,9,'Subject for Tell a Friend','2021-06-11 14:32:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (280,NULL,9,'Subject for Tell a Friend','2021-04-08 23:53:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (281,NULL,9,'Subject for Tell a Friend','2021-03-19 20:56:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (282,NULL,10,'Subject for Pledge Acknowledgment','2021-04-11 18:38:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (283,NULL,10,'Subject for Pledge Acknowledgment','2021-01-14 02:48:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (284,NULL,9,'Subject for Tell a Friend','2021-08-15 07:08:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (285,NULL,9,'Subject for Tell a Friend','2021-02-22 03:26:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (286,NULL,10,'Subject for Pledge Acknowledgment','2021-10-30 08:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (287,NULL,10,'Subject for Pledge Acknowledgment','2020-12-22 15:20:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (288,NULL,9,'Subject for Tell a Friend','2021-07-21 14:54:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (289,NULL,9,'Subject for Tell a Friend','2020-12-23 03:29:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (290,NULL,9,'Subject for Tell a Friend','2021-07-12 07:30:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (291,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 13:17:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (292,NULL,10,'Subject for Pledge Acknowledgment','2021-08-29 11:51:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (293,NULL,10,'Subject for Pledge Acknowledgment','2021-10-11 04:01:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (294,NULL,9,'Subject for Tell a Friend','2021-07-23 04:42:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (295,NULL,9,'Subject for Tell a Friend','2021-06-10 00:35:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (296,NULL,9,'Subject for Tell a Friend','2021-09-25 17:58:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (297,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 07:13:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (298,NULL,10,'Subject for Pledge Acknowledgment','2021-10-24 22:47:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (299,NULL,10,'Subject for Pledge Acknowledgment','2021-08-31 23:37:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (300,NULL,9,'Subject for Tell a Friend','2021-07-03 01:31:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (301,NULL,9,'Subject for Tell a Friend','2021-06-25 00:25:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (302,NULL,9,'Subject for Tell a Friend','2021-06-08 07:18:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (303,NULL,10,'Subject for Pledge Acknowledgment','2021-09-26 10:57:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (304,NULL,9,'Subject for Tell a Friend','2021-06-12 08:00:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (305,NULL,9,'Subject for Tell a Friend','2021-05-13 16:15:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (306,NULL,9,'Subject for Tell a Friend','2021-05-29 00:53:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (307,NULL,9,'Subject for Tell a Friend','2021-10-27 01:48:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (308,NULL,10,'Subject for Pledge Acknowledgment','2021-06-16 01:52:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (309,NULL,9,'Subject for Tell a Friend','2020-12-23 23:35:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (310,NULL,10,'Subject for Pledge Acknowledgment','2021-10-18 12:23:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (311,NULL,9,'Subject for Tell a Friend','2020-12-25 19:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (312,NULL,9,'Subject for Tell a Friend','2021-05-13 14:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (313,NULL,9,'Subject for Tell a Friend','2021-09-10 15:04:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (314,NULL,10,'Subject for Pledge Acknowledgment','2021-02-15 13:50:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (315,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 03:08:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (316,NULL,9,'Subject for Tell a Friend','2021-06-12 13:26:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (317,NULL,10,'Subject for Pledge Acknowledgment','2021-03-20 21:49:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (318,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 07:30:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (319,NULL,9,'Subject for Tell a Friend','2021-02-06 04:25:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (320,NULL,10,'Subject for Pledge Acknowledgment','2021-02-07 22:13:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (321,NULL,10,'Subject for Pledge Acknowledgment','2020-11-09 21:26:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (322,NULL,9,'Subject for Tell a Friend','2021-03-23 22:25:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (323,NULL,9,'Subject for Tell a Friend','2021-05-24 20:58:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (324,NULL,10,'Subject for Pledge Acknowledgment','2020-11-25 20:27:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (325,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 00:24:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (326,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 04:35:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (327,NULL,10,'Subject for Pledge Acknowledgment','2020-12-08 22:01:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (328,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 11:15:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (329,NULL,9,'Subject for Tell a Friend','2021-04-15 03:30:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (330,NULL,10,'Subject for Pledge Acknowledgment','2021-05-26 07:36:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (331,NULL,9,'Subject for Tell a Friend','2021-03-22 03:57:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (332,NULL,9,'Subject for Tell a Friend','2020-12-23 17:13:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (333,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 00:27:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (334,NULL,9,'Subject for Tell a Friend','2021-05-05 11:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (335,NULL,10,'Subject for Pledge Acknowledgment','2021-06-01 19:01:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (336,NULL,10,'Subject for Pledge Acknowledgment','2021-06-15 19:35:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (337,NULL,9,'Subject for Tell a Friend','2021-10-16 20:52:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (338,NULL,10,'Subject for Pledge Acknowledgment','2021-07-10 12:14:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (339,NULL,10,'Subject for Pledge Acknowledgment','2021-07-02 15:47:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (340,NULL,9,'Subject for Tell a Friend','2021-09-14 07:24:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (341,NULL,10,'Subject for Pledge Acknowledgment','2021-02-23 21:24:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (342,NULL,9,'Subject for Tell a Friend','2020-11-13 18:57:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (343,NULL,9,'Subject for Tell a Friend','2021-06-13 09:26:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (344,NULL,10,'Subject for Pledge Acknowledgment','2020-11-28 22:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (345,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 09:56:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (346,NULL,10,'Subject for Pledge Acknowledgment','2021-02-21 14:01:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (347,NULL,9,'Subject for Tell a Friend','2021-08-30 23:26:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (348,NULL,10,'Subject for Pledge Acknowledgment','2021-05-01 13:57:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (349,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 13:19:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (350,NULL,10,'Subject for Pledge Acknowledgment','2021-06-29 10:58:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (351,NULL,10,'Subject for Pledge Acknowledgment','2021-02-20 17:34:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (352,NULL,10,'Subject for Pledge Acknowledgment','2021-03-15 02:23:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (353,NULL,9,'Subject for Tell a Friend','2021-09-18 16:04:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (354,NULL,9,'Subject for Tell a Friend','2021-01-09 07:49:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (355,NULL,9,'Subject for Tell a Friend','2021-08-25 22:02:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (356,NULL,9,'Subject for Tell a Friend','2021-01-19 03:41:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (357,NULL,9,'Subject for Tell a Friend','2021-10-12 15:25:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (358,NULL,9,'Subject for Tell a Friend','2021-06-03 08:30:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (359,NULL,9,'Subject for Tell a Friend','2021-04-16 13:40:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (360,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 18:12:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (361,NULL,9,'Subject for Tell a Friend','2021-09-07 12:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (362,NULL,9,'Subject for Tell a Friend','2021-01-04 14:39:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (363,NULL,9,'Subject for Tell a Friend','2021-09-23 07:57:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:30','2021-11-08 01:45:30'), + (364,NULL,9,'Subject for Tell a Friend','2021-09-13 10:25:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (365,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 00:38:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (366,NULL,9,'Subject for Tell a Friend','2021-05-04 04:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (367,NULL,10,'Subject for Pledge Acknowledgment','2021-10-04 10:26:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (368,NULL,10,'Subject for Pledge Acknowledgment','2021-01-09 10:10:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (369,NULL,10,'Subject for Pledge Acknowledgment','2021-03-15 07:22:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (370,NULL,9,'Subject for Tell a Friend','2021-02-05 21:56:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (371,NULL,9,'Subject for Tell a Friend','2021-09-18 15:31:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (372,NULL,10,'Subject for Pledge Acknowledgment','2021-01-20 11:05:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (373,NULL,9,'Subject for Tell a Friend','2021-06-17 16:24:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (374,NULL,10,'Subject for Pledge Acknowledgment','2021-11-04 02:39:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (375,NULL,9,'Subject for Tell a Friend','2021-09-12 15:29:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (376,NULL,9,'Subject for Tell a Friend','2021-08-14 08:52:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (377,NULL,10,'Subject for Pledge Acknowledgment','2020-11-20 22:10:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (378,NULL,10,'Subject for Pledge Acknowledgment','2021-10-31 13:12:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (379,NULL,9,'Subject for Tell a Friend','2021-10-06 03:45:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (380,NULL,9,'Subject for Tell a Friend','2021-03-10 04:27:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (381,NULL,10,'Subject for Pledge Acknowledgment','2021-01-26 00:40:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (382,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 12:22:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (383,NULL,9,'Subject for Tell a Friend','2021-05-02 04:56:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (384,NULL,9,'Subject for Tell a Friend','2021-10-16 20:14:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (385,NULL,9,'Subject for Tell a Friend','2020-11-10 08:21:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (386,NULL,9,'Subject for Tell a Friend','2021-10-07 07:58:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (387,NULL,10,'Subject for Pledge Acknowledgment','2021-05-08 02:19:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (388,NULL,10,'Subject for Pledge Acknowledgment','2021-04-22 00:26:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (389,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 07:58:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (390,NULL,10,'Subject for Pledge Acknowledgment','2020-11-26 10:06:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (391,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 02:32:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (392,NULL,10,'Subject for Pledge Acknowledgment','2021-04-11 05:12:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (393,NULL,10,'Subject for Pledge Acknowledgment','2021-03-11 04:08:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (394,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 10:26:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (395,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 09:21:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (396,NULL,10,'Subject for Pledge Acknowledgment','2021-02-02 02:04:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (397,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 12:24:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (398,NULL,9,'Subject for Tell a Friend','2020-12-26 02:16:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (399,NULL,10,'Subject for Pledge Acknowledgment','2021-01-20 19:57:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (400,NULL,9,'Subject for Tell a Friend','2021-09-19 22:36:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (401,NULL,9,'Subject for Tell a Friend','2021-06-09 23:36:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (402,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 17:00:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (403,NULL,9,'Subject for Tell a Friend','2021-03-21 13:28:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (404,NULL,9,'Subject for Tell a Friend','2021-07-24 17:08:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (405,NULL,9,'Subject for Tell a Friend','2020-11-13 10:00:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (406,NULL,9,'Subject for Tell a Friend','2020-12-02 06:44:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (407,NULL,9,'Subject for Tell a Friend','2021-05-26 03:13:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (408,NULL,9,'Subject for Tell a Friend','2021-05-26 13:55:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (409,NULL,9,'Subject for Tell a Friend','2021-08-13 16:53:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (410,NULL,10,'Subject for Pledge Acknowledgment','2021-10-22 05:08:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (411,NULL,9,'Subject for Tell a Friend','2020-11-30 06:23:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (412,NULL,10,'Subject for Pledge Acknowledgment','2021-09-03 22:11:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (413,NULL,10,'Subject for Pledge Acknowledgment','2021-06-12 14:52:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (414,NULL,9,'Subject for Tell a Friend','2021-10-26 02:56:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (415,NULL,10,'Subject for Pledge Acknowledgment','2021-03-06 06:05:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (416,NULL,9,'Subject for Tell a Friend','2021-02-06 21:11:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (417,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 10:56:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (418,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 13:32:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (419,NULL,9,'Subject for Tell a Friend','2021-02-23 07:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (420,NULL,9,'Subject for Tell a Friend','2021-06-16 22:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (421,NULL,10,'Subject for Pledge Acknowledgment','2021-02-26 05:27:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (422,NULL,10,'Subject for Pledge Acknowledgment','2020-11-09 09:48:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (423,NULL,9,'Subject for Tell a Friend','2021-01-13 00:40:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (424,NULL,9,'Subject for Tell a Friend','2020-11-16 01:56:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (425,NULL,10,'Subject for Pledge Acknowledgment','2021-09-24 17:45:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (426,NULL,9,'Subject for Tell a Friend','2021-03-14 18:25:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (427,NULL,9,'Subject for Tell a Friend','2021-06-03 08:31:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (428,NULL,9,'Subject for Tell a Friend','2021-02-10 10:51:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (429,NULL,9,'Subject for Tell a Friend','2021-02-18 22:48:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (430,NULL,9,'Subject for Tell a Friend','2021-10-05 01:56:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (431,NULL,9,'Subject for Tell a Friend','2021-05-29 08:05:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (432,NULL,9,'Subject for Tell a Friend','2021-10-21 00:38:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (433,NULL,9,'Subject for Tell a Friend','2021-05-22 15:53:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (434,NULL,9,'Subject for Tell a Friend','2021-02-22 20:13:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (435,NULL,9,'Subject for Tell a Friend','2021-08-07 18:43:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (436,NULL,9,'Subject for Tell a Friend','2020-12-01 04:45:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (437,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 06:18:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (438,NULL,9,'Subject for Tell a Friend','2021-05-10 13:35:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (439,NULL,10,'Subject for Pledge Acknowledgment','2021-07-22 16:10:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (440,NULL,10,'Subject for Pledge Acknowledgment','2021-04-20 03:13:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (441,NULL,9,'Subject for Tell a Friend','2021-08-16 10:35:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (442,NULL,9,'Subject for Tell a Friend','2020-12-24 17:42:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (443,NULL,9,'Subject for Tell a Friend','2021-01-18 17:18:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (444,NULL,9,'Subject for Tell a Friend','2021-08-25 17:54:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (445,NULL,9,'Subject for Tell a Friend','2021-06-27 10:59:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (446,NULL,9,'Subject for Tell a Friend','2021-06-29 08:34:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (447,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 09:27:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (448,NULL,9,'Subject for Tell a Friend','2021-04-06 10:34:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (449,NULL,9,'Subject for Tell a Friend','2020-11-19 20:06:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (450,NULL,9,'Subject for Tell a Friend','2021-09-22 10:07:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (464,1,7,'General','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (465,2,7,'Student','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (466,3,7,'General','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (467,4,7,'Student','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (468,5,7,'General','2019-10-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (469,6,7,'Student','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (470,7,7,'General','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (471,8,7,'Student','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (472,9,7,'General','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (473,10,7,'General','2019-08-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (474,11,7,'Lifetime','2021-10-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (475,12,7,'Student','2021-10-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (476,13,7,'General','2021-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,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (477,14,7,'Student','2021-10-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (478,15,7,'Student','2020-10-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (479,16,7,'Student','2021-10-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (480,17,7,'General','2021-10-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (481,18,7,'Student','2021-10-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (482,19,7,'General','2021-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (483,20,7,'General','2019-06-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (484,21,7,'General','2021-10-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (485,22,7,'Lifetime','2021-10-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (486,23,7,'General','2021-10-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (487,24,7,'Student','2021-10-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (488,25,7,'General','2019-04-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (489,26,7,'Student','2021-10-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (490,27,7,'General','2021-10-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (491,28,7,'Student','2021-10-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (492,29,7,'General','2021-10-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (493,30,7,'Student','2020-10-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (494,14,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (495,15,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (496,16,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (497,17,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (498,18,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (499,19,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (500,20,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (501,21,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (502,22,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (503,23,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (504,24,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (505,25,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (506,26,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (508,28,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (510,30,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (512,32,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (513,33,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (514,34,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (515,35,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (516,36,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (518,38,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (520,40,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (522,42,6,'$ 100.00 - General Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (523,43,6,'$ 50.00 - Student Membership: Offline signup','2021-11-08 12:45:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:31','2021-11-08 01:45:31'), + (525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (575,45,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (579,49,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (580,50,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (581,51,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (584,54,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (585,55,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (586,56,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (588,58,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (589,59,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (590,60,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (600,70,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (601,71,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (602,72,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (604,74,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (610,80,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (611,81,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'), + (624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-11-08 12:45:32',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-11-08 01:45:32','2021-11-08 01:45:32'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -793,800 +793,827 @@ 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 - (129,83,1,3), - (237,158,1,3), - (403,271,1,3), - (188,125,2,3), - (209,138,2,3), - (672,451,2,2), - (690,469,2,2), - (720,499,2,2), - (756,535,2,2), - (119,77,3,3), - (431,289,3,3), - (766,545,3,2), - (143,92,4,3), - (617,416,4,3), - (673,452,4,2), - (266,176,5,3), - (577,389,5,3), - (789,568,5,2), - (186,124,6,3), - (423,284,6,3), - (480,325,6,3), - (674,453,6,2), - (253,168,7,3), - (305,202,7,3), - (470,319,7,3), - (43,27,8,3), - (675,454,8,2), - (140,90,9,3), - (628,423,9,3), - (285,188,10,3), - (365,245,10,3), - (425,285,11,3), - (505,341,11,3), - (649,436,11,3), - (778,557,11,2), - (261,173,12,3), - (670,449,12,3), - (709,488,12,2), - (739,518,12,2), - (47,30,13,3), - (51,32,13,3), - (510,344,13,3), - (622,419,13,3), - (663,445,13,3), - (714,493,13,2), - (744,523,13,2), - (615,415,14,3), - (29,18,15,3), - (475,322,15,3), - (770,549,15,2), - (676,455,16,2), - (82,53,17,3), - (343,227,17,3), - (533,358,17,3), - (692,471,17,2), - (722,501,17,2), - (159,104,18,3), - (751,530,18,2), - (546,368,19,3), - (677,456,19,2), - (69,44,20,3), - (146,94,20,3), - (512,345,20,3), - (630,424,20,3), - (657,441,20,3), - (85,55,21,3), - (390,262,21,3), - (794,573,21,2), - (450,303,22,3), - (49,31,23,3), - (105,68,23,3), - (108,70,23,3), - (554,373,23,3), - (601,406,23,3), - (755,534,23,2), - (93,61,24,3), - (701,480,24,2), - (731,510,24,2), - (9,6,25,3), - (405,272,25,3), - (564,380,25,3), - (585,395,25,3), - (697,476,25,2), - (727,506,25,2), - (497,335,26,3), - (557,375,26,3), - (771,550,26,2), - (75,48,27,3), - (255,169,27,3), - (341,226,27,3), - (458,309,27,3), - (515,347,27,3), - (53,33,28,3), - (246,163,29,3), - (708,487,30,2), - (738,517,30,2), - (195,129,31,3), - (710,489,31,2), - (740,519,31,2), - (795,574,31,2), - (156,102,32,3), - (357,240,32,3), - (528,355,32,3), - (683,462,32,2), - (684,463,32,2), - (707,486,32,2), - (737,516,32,2), - (338,224,33,3), - (436,293,33,3), - (598,404,33,3), - (640,430,33,3), - (482,326,34,3), - (680,459,34,2), - (792,571,34,2), - (41,26,35,3), - (133,85,35,3), - (224,149,35,3), - (783,562,35,2), - (58,36,36,3), - (259,172,36,3), - (392,263,36,3), - (478,324,36,3), - (517,348,36,3), - (89,58,37,3), - (325,214,37,3), - (446,300,38,3), - (526,354,38,3), - (695,474,38,2), - (725,504,38,2), - (137,88,39,3), - (175,117,39,3), - (199,132,39,3), - (270,178,39,3), - (372,249,39,3), - (233,156,40,3), - (241,160,40,3), - (492,332,40,3), - (328,216,41,3), - (688,467,41,2), - (718,497,41,2), - (235,157,42,3), - (380,256,43,3), - (682,461,43,2), - (419,282,44,3), - (116,75,45,3), - (291,192,45,3), - (421,283,45,3), - (17,11,46,3), - (127,82,46,3), - (110,71,47,3), - (314,208,47,3), - (439,295,47,3), - (494,333,47,3), - (647,435,47,3), - (693,472,47,2), - (723,502,47,2), - (61,38,48,3), - (99,64,48,3), - (462,312,48,3), - (632,425,48,3), - (131,84,49,3), - (14,9,50,3), - (645,434,50,3), - (33,21,51,3), - (535,359,51,3), - (659,442,51,3), - (760,539,51,2), - (624,420,52,3), - (569,384,53,3), - (774,553,53,2), - (71,45,54,3), - (487,329,54,3), - (323,213,55,3), - (388,261,55,3), - (278,183,56,3), - (101,65,57,3), - (227,151,57,3), - (207,137,58,3), - (243,161,58,3), - (182,122,59,3), - (370,248,59,3), - (753,532,60,2), - (415,280,61,3), - (542,365,61,3), - (219,145,62,3), - (276,182,62,3), - (411,277,62,3), - (635,427,62,3), - (653,439,62,3), - (216,143,64,3), - (489,330,64,3), - (531,357,64,3), - (665,446,64,3), - (27,17,65,3), - (603,407,65,3), - (785,564,65,2), - (583,394,66,3), - (757,536,66,2), - (11,7,67,3), - (287,189,67,3), - (303,201,67,3), - (655,440,67,3), - (4,2,68,3), - (121,78,68,3), - (386,260,68,3), - (762,541,68,2), - (316,209,69,3), - (333,220,69,3), - (20,13,70,3), - (214,142,70,3), - (307,203,70,3), - (605,408,70,3), - (571,385,71,3), - (610,412,71,3), - (681,460,71,2), - (574,387,72,3), - (637,428,72,3), - (759,538,72,2), - (417,281,73,3), - (190,126,74,3), - (321,212,75,3), - (694,473,75,2), - (724,503,75,2), - (125,81,76,3), - (592,399,76,3), - (55,34,77,3), - (205,136,77,3), - (763,542,77,2), - (39,25,78,3), - (319,211,78,3), - (503,340,78,3), - (590,398,78,3), - (668,448,78,3), - (696,475,78,2), - (726,505,78,2), - (193,128,79,3), - (298,198,80,3), - (428,287,80,3), - (184,123,81,3), - (368,247,81,3), - (613,414,81,3), - (148,95,82,3), - (678,457,82,2), - (706,485,82,2), - (736,515,82,2), - (78,50,83,3), - (251,167,83,3), - (619,417,83,3), - (775,554,83,2), - (441,296,84,3), - (508,343,85,3), - (587,396,85,3), - (268,177,86,3), - (282,186,86,3), - (22,14,87,3), - (67,43,87,3), - (114,74,87,3), - (161,105,87,3), - (362,243,87,3), - (35,22,88,3), - (166,109,88,3), - (312,207,89,3), - (793,572,89,2), - (201,133,90,3), - (239,159,90,3), - (95,62,91,3), - (752,531,91,2), - (263,174,92,3), - (679,458,92,2), - (713,492,92,2), - (743,522,92,2), - (473,321,93,3), - (519,349,93,3), - (700,479,93,2), - (730,509,93,2), - (788,567,93,2), - (782,561,94,2), - (272,179,95,3), - (384,259,95,3), - (485,328,95,3), - (2,1,96,3), - (548,369,96,3), - (562,379,96,3), - (704,483,96,2), - (734,513,96,2), - (177,118,97,3), - (396,266,97,3), - (24,15,98,3), - (97,63,98,3), - (301,200,98,3), - (551,371,98,3), - (791,570,98,2), - (524,353,99,3), - (769,548,99,2), - (360,242,100,3), - (456,308,100,3), - (686,465,100,2), - (716,495,100,2), - (764,543,100,2), - (401,270,101,3), - (773,552,101,2), - (786,565,104,2), - (703,482,107,2), - (733,512,107,2), - (790,569,109,2), - (749,528,111,2), - (761,540,112,2), - (711,490,114,2), - (741,520,114,2), - (772,551,120,2), - (758,537,122,2), - (746,525,124,2), - (750,529,125,2), - (777,556,126,2), - (699,478,129,2), - (729,508,129,2), - (689,468,134,2), - (719,498,134,2), - (784,563,138,2), - (779,558,139,2), - (767,546,143,2), - (1,1,144,2), - (3,2,144,2), - (5,3,144,2), - (6,4,144,2), - (7,5,144,2), - (8,6,144,2), - (10,7,144,2), - (12,8,144,2), - (13,9,144,2), - (15,10,144,2), - (16,11,144,2), - (18,12,144,2), - (19,13,144,2), - (21,14,144,2), - (23,15,144,2), - (25,16,144,2), - (26,17,144,2), - (28,18,144,2), - (30,19,144,2), - (31,20,144,2), - (32,21,144,2), - (34,22,144,2), - (36,23,144,2), - (37,24,144,2), - (38,25,144,2), - (40,26,144,2), - (42,27,144,2), - (44,28,144,2), - (45,29,144,2), - (46,30,144,2), - (48,31,144,2), - (50,32,144,2), - (52,33,144,2), - (54,34,144,2), - (56,35,144,2), - (57,36,144,2), - (59,37,144,2), - (60,38,144,2), - (62,39,144,2), - (63,40,144,2), - (64,41,144,2), - (65,42,144,2), - (66,43,144,2), - (68,44,144,2), - (70,45,144,2), - (72,46,144,2), - (73,47,144,2), - (74,48,144,2), - (76,49,144,2), - (77,50,144,2), - (79,51,144,2), - (80,52,144,2), - (81,53,144,2), - (83,54,144,2), - (84,55,144,2), - (86,56,144,2), - (87,57,144,2), - (88,58,144,2), - (90,59,144,2), - (91,60,144,2), - (92,61,144,2), - (94,62,144,2), - (96,63,144,2), - (98,64,144,2), - (100,65,144,2), - (102,66,144,2), - (103,67,144,2), - (104,68,144,2), - (106,69,144,2), - (107,70,144,2), - (109,71,144,2), - (111,72,144,2), - (112,73,144,2), - (113,74,144,2), - (115,75,144,2), - (117,76,144,2), - (118,77,144,2), - (120,78,144,2), - (122,79,144,2), - (123,80,144,2), - (124,81,144,2), - (126,82,144,2), - (128,83,144,2), - (130,84,144,2), - (132,85,144,2), - (134,86,144,2), - (135,87,144,2), - (136,88,144,2), - (138,89,144,2), - (139,90,144,2), - (141,91,144,2), - (142,92,144,2), - (144,93,144,2), - (145,94,144,2), - (147,95,144,2), - (149,96,144,2), - (150,97,144,2), - (151,98,144,2), - (152,99,144,2), - (153,100,144,2), - (154,101,144,2), - (155,102,144,2), - (157,103,144,2), - (158,104,144,2), - (160,105,144,2), - (162,106,144,2), - (163,107,144,2), - (164,108,144,2), - (165,109,144,2), - (167,110,144,2), - (168,111,144,2), - (169,112,144,2), - (170,113,144,2), - (171,114,144,2), - (172,115,144,2), - (173,116,144,2), - (174,117,144,2), - (176,118,144,2), - (178,119,144,2), - (179,120,144,2), - (180,121,144,2), - (181,122,144,2), - (183,123,144,2), - (185,124,144,2), - (187,125,144,2), - (189,126,144,2), - (191,127,144,2), - (192,128,144,2), - (194,129,144,2), - (196,130,144,2), - (197,131,144,2), - (198,132,144,2), - (200,133,144,2), - (202,134,144,2), - (203,135,144,2), - (204,136,144,2), - (206,137,144,2), - (208,138,144,2), - (210,139,144,2), - (211,140,144,2), - (212,141,144,2), - (213,142,144,2), - (215,143,144,2), - (217,144,144,2), - (218,145,144,2), - (220,146,144,2), - (221,147,144,2), - (222,148,144,2), - (223,149,144,2), - (225,150,144,2), - (698,477,149,2), - (728,507,149,2), - (748,527,150,2), - (685,464,151,2), - (715,494,151,2), - (712,491,152,2), - (742,521,152,2), - (705,484,157,2), - (735,514,157,2), - (776,555,159,2), - (747,526,163,2), - (765,544,168,2), - (702,481,173,2), - (732,511,173,2), - (787,566,183,2), - (780,559,184,2), - (781,560,185,2), - (447,301,187,2), - (448,302,187,2), - (449,303,187,2), - (451,304,187,2), - (452,305,187,2), - (453,306,187,2), - (454,307,187,2), - (455,308,187,2), - (457,309,187,2), - (459,310,187,2), - (460,311,187,2), - (461,312,187,2), - (463,313,187,2), - (464,314,187,2), - (465,315,187,2), - (466,316,187,2), - (467,317,187,2), - (468,318,187,2), - (469,319,187,2), - (471,320,187,2), - (472,321,187,2), - (474,322,187,2), - (476,323,187,2), - (477,324,187,2), - (479,325,187,2), - (481,326,187,2), - (483,327,187,2), - (484,328,187,2), - (486,329,187,2), - (488,330,187,2), - (490,331,187,2), - (491,332,187,2), - (493,333,187,2), - (495,334,187,2), - (496,335,187,2), - (498,336,187,2), - (499,337,187,2), - (500,338,187,2), - (501,339,187,2), - (502,340,187,2), - (504,341,187,2), - (506,342,187,2), - (507,343,187,2), - (509,344,187,2), - (511,345,187,2), - (513,346,187,2), - (514,347,187,2), - (516,348,187,2), - (518,349,187,2), - (520,350,187,2), - (521,351,187,2), - (522,352,187,2), - (523,353,187,2), - (525,354,187,2), - (527,355,187,2), - (529,356,187,2), - (530,357,187,2), - (532,358,187,2), - (534,359,187,2), - (536,360,187,2), - (537,361,187,2), - (538,362,187,2), - (539,363,187,2), - (540,364,187,2), - (541,365,187,2), - (543,366,187,2), - (544,367,187,2), - (545,368,187,2), - (547,369,187,2), - (549,370,187,2), - (550,371,187,2), - (552,372,187,2), - (553,373,187,2), - (555,374,187,2), - (556,375,187,2), - (558,376,187,2), - (559,377,187,2), - (560,378,187,2), - (561,379,187,2), - (563,380,187,2), - (565,381,187,2), - (566,382,187,2), - (567,383,187,2), - (568,384,187,2), - (570,385,187,2), - (572,386,187,2), - (573,387,187,2), - (575,388,187,2), - (576,389,187,2), - (578,390,187,2), - (579,391,187,2), - (580,392,187,2), - (581,393,187,2), - (582,394,187,2), - (584,395,187,2), - (586,396,187,2), - (588,397,187,2), - (589,398,187,2), - (591,399,187,2), - (593,400,187,2), - (594,401,187,2), - (595,402,187,2), - (596,403,187,2), - (597,404,187,2), - (599,405,187,2), - (600,406,187,2), - (602,407,187,2), - (604,408,187,2), - (606,409,187,2), - (607,410,187,2), - (608,411,187,2), - (609,412,187,2), - (611,413,187,2), - (612,414,187,2), - (614,415,187,2), - (616,416,187,2), - (618,417,187,2), - (620,418,187,2), - (621,419,187,2), - (623,420,187,2), - (625,421,187,2), - (626,422,187,2), - (627,423,187,2), - (629,424,187,2), - (631,425,187,2), - (633,426,187,2), - (634,427,187,2), - (636,428,187,2), - (638,429,187,2), - (639,430,187,2), - (641,431,187,2), - (642,432,187,2), - (643,433,187,2), - (644,434,187,2), - (646,435,187,2), - (648,436,187,2), - (650,437,187,2), - (651,438,187,2), - (652,439,187,2), - (654,440,187,2), - (656,441,187,2), - (658,442,187,2), - (660,443,187,2), - (661,444,187,2), - (662,445,187,2), - (664,446,187,2), - (666,447,187,2), - (667,448,187,2), - (669,449,187,2), - (671,450,187,2), - (768,547,190,2), - (691,470,192,2), - (721,500,192,2), - (687,466,195,2), - (717,496,195,2), - (754,533,198,2), - (226,151,200,2), - (228,152,200,2), - (229,153,200,2), - (230,154,200,2), - (231,155,200,2), - (232,156,200,2), - (234,157,200,2), - (236,158,200,2), - (238,159,200,2), - (240,160,200,2), - (242,161,200,2), - (244,162,200,2), - (245,163,200,2), - (247,164,200,2), - (248,165,200,2), - (249,166,200,2), - (250,167,200,2), - (252,168,200,2), - (254,169,200,2), - (256,170,200,2), - (257,171,200,2), - (258,172,200,2), - (260,173,200,2), - (262,174,200,2), - (264,175,200,2), - (265,176,200,2), - (267,177,200,2), - (269,178,200,2), - (271,179,200,2), - (273,180,200,2), - (274,181,200,2), - (275,182,200,2), - (277,183,200,2), - (279,184,200,2), - (280,185,200,2), - (281,186,200,2), - (283,187,200,2), - (284,188,200,2), - (286,189,200,2), - (288,190,200,2), - (289,191,200,2), - (290,192,200,2), - (292,193,200,2), - (293,194,200,2), - (294,195,200,2), - (295,196,200,2), - (296,197,200,2), - (297,198,200,2), - (299,199,200,2), - (300,200,200,2), - (302,201,200,2), - (304,202,200,2), - (306,203,200,2), - (308,204,200,2), - (309,205,200,2), - (310,206,200,2), - (311,207,200,2), - (313,208,200,2), - (315,209,200,2), - (317,210,200,2), - (318,211,200,2), - (320,212,200,2), - (322,213,200,2), - (324,214,200,2), - (326,215,200,2), - (327,216,200,2), - (329,217,200,2), - (330,218,200,2), - (331,219,200,2), - (332,220,200,2), - (334,221,200,2), - (335,222,200,2), - (336,223,200,2), - (337,224,200,2), - (339,225,200,2), - (340,226,200,2), - (342,227,200,2), - (344,228,200,2), - (345,229,200,2), - (346,230,200,2), - (347,231,200,2), - (348,232,200,2), - (349,233,200,2), - (350,234,200,2), - (351,235,200,2), - (352,236,200,2), - (353,237,200,2), - (354,238,200,2), - (355,239,200,2), - (356,240,200,2), - (358,241,200,2), - (359,242,200,2), - (361,243,200,2), - (363,244,200,2), - (364,245,200,2), - (366,246,200,2), - (367,247,200,2), - (369,248,200,2), - (371,249,200,2), - (373,250,200,2), - (374,251,200,2), - (375,252,200,2), - (376,253,200,2), - (377,254,200,2), - (378,255,200,2), - (379,256,200,2), - (381,257,200,2), - (382,258,200,2), - (383,259,200,2), - (385,260,200,2), - (387,261,200,2), - (389,262,200,2), - (391,263,200,2), - (393,264,200,2), - (394,265,200,2), - (395,266,200,2), - (397,267,200,2), - (398,268,200,2), - (399,269,200,2), - (400,270,200,2), - (402,271,200,2), - (404,272,200,2), - (406,273,200,2), - (407,274,200,2), - (408,275,200,2), - (409,276,200,2), - (410,277,200,2), - (412,278,200,2), - (413,279,200,2), - (414,280,200,2), - (416,281,200,2), - (418,282,200,2), - (420,283,200,2), - (422,284,200,2), - (424,285,200,2), - (426,286,200,2), - (427,287,200,2), - (429,288,200,2), - (430,289,200,2), - (432,290,200,2), - (433,291,200,2), - (434,292,200,2), - (435,293,200,2), - (437,294,200,2), - (438,295,200,2), - (440,296,200,2), - (442,297,200,2), - (443,298,200,2), - (444,299,200,2), - (445,300,200,2); + (129,84,1,3), + (662,430,2,3), + (699,451,2,2), + (718,470,2,2), + (748,500,2,2), + (228,151,3,2), + (230,152,3,2), + (231,153,3,2), + (232,154,3,2), + (234,155,3,2), + (236,156,3,2), + (237,157,3,2), + (238,158,3,2), + (239,159,3,2), + (240,160,3,2), + (241,161,3,2), + (242,162,3,2), + (244,163,3,2), + (246,164,3,2), + (248,165,3,2), + (250,166,3,2), + (251,167,3,2), + (253,168,3,2), + (255,169,3,2), + (256,170,3,2), + (258,171,3,2), + (260,172,3,2), + (261,173,3,2), + (262,174,3,2), + (263,174,3,3), + (264,175,3,2), + (266,176,3,2), + (268,177,3,2), + (270,178,3,2), + (271,179,3,2), + (272,180,3,2), + (274,181,3,2), + (276,182,3,2), + (277,183,3,2), + (279,184,3,2), + (280,184,3,3), + (281,185,3,2), + (283,186,3,2), + (285,187,3,2), + (286,188,3,2), + (288,189,3,2), + (290,190,3,2), + (292,191,3,2), + (293,192,3,2), + (294,193,3,2), + (296,194,3,2), + (298,195,3,2), + (300,196,3,2), + (302,197,3,2), + (303,198,3,2), + (305,199,3,2), + (307,200,3,2), + (308,201,3,2), + (309,202,3,2), + (310,203,3,2), + (312,204,3,2), + (313,205,3,2), + (314,206,3,2), + (316,207,3,2), + (318,208,3,2), + (320,209,3,2), + (322,210,3,2), + (324,211,3,2), + (326,212,3,2), + (328,213,3,2), + (329,214,3,2), + (331,215,3,2), + (332,216,3,2), + (333,217,3,2), + (335,218,3,2), + (336,219,3,2), + (338,220,3,2), + (340,221,3,2), + (341,222,3,2), + (343,223,3,2), + (344,224,3,2), + (345,225,3,2), + (347,226,3,2), + (348,227,3,2), + (350,228,3,2), + (352,229,3,2), + (354,230,3,2), + (356,231,3,2), + (358,232,3,2), + (360,233,3,2), + (362,234,3,2), + (364,235,3,2), + (366,236,3,2), + (367,237,3,2), + (369,238,3,2), + (371,239,3,2), + (373,240,3,2), + (374,241,3,2), + (375,242,3,2), + (376,243,3,2), + (377,244,3,2), + (379,245,3,2), + (380,246,3,2), + (381,247,3,2), + (383,248,3,2), + (384,249,3,2), + (386,250,3,2), + (388,251,3,2), + (389,252,3,2), + (391,253,3,2), + (393,254,3,2), + (395,255,3,2), + (396,256,3,2), + (397,257,3,2), + (398,258,3,2), + (399,259,3,2), + (401,260,3,2), + (403,261,3,2), + (404,262,3,2), + (405,263,3,2), + (407,264,3,2), + (408,265,3,2), + (410,266,3,2), + (412,267,3,2), + (413,268,3,2), + (414,269,3,2), + (416,270,3,2), + (417,271,3,2), + (419,272,3,2), + (420,273,3,2), + (422,274,3,2), + (424,275,3,2), + (426,276,3,2), + (427,277,3,2), + (429,278,3,2), + (431,279,3,2), + (433,280,3,2), + (435,281,3,2), + (437,282,3,2), + (438,283,3,2), + (439,284,3,2), + (441,285,3,2), + (443,286,3,2), + (444,287,3,2), + (445,288,3,2), + (447,289,3,2), + (449,290,3,2), + (451,291,3,2), + (452,292,3,2), + (453,293,3,2), + (454,294,3,2), + (456,295,3,2), + (458,296,3,2), + (460,297,3,2), + (461,298,3,2), + (462,299,3,2), + (463,300,3,2), + (471,304,4,3), + (636,414,4,3), + (700,452,4,2), + (822,574,4,2), + (269,177,5,3), + (418,271,5,3), + (477,307,5,3), + (721,473,5,2), + (751,503,5,2), + (811,563,5,2), + (191,124,6,3), + (643,419,6,3), + (701,453,6,2), + (4,2,7,3), + (125,82,7,3), + (323,210,7,3), + (402,260,7,3), + (627,408,7,3), + (466,301,8,3), + (575,373,8,3), + (702,454,8,2), + (731,483,8,2), + (761,513,8,2), + (35,22,9,3), + (76,50,9,3), + (141,92,9,3), + (795,547,9,2), + (801,553,10,2), + (80,52,11,3), + (353,229,12,3), + (480,309,12,3), + (687,444,12,3), + (169,111,13,3), + (423,274,14,3), + (475,306,14,3), + (337,219,15,3), + (361,233,15,3), + (436,281,15,3), + (584,379,15,3), + (368,237,16,3), + (450,290,16,3), + (513,332,16,3), + (527,342,16,3), + (703,455,16,2), + (798,550,16,2), + (24,14,17,3), + (91,58,17,3), + (319,208,17,3), + (145,94,18,3), + (229,151,18,3), + (446,288,18,3), + (67,44,19,3), + (440,284,19,3), + (596,386,19,3), + (704,456,19,2), + (47,31,20,3), + (666,432,20,3), + (243,162,21,3), + (415,269,21,3), + (720,472,21,2), + (750,502,21,2), + (812,564,21,2), + (278,183,22,3), + (346,225,22,3), + (551,358,22,3), + (698,450,22,3), + (590,383,23,3), + (639,416,23,3), + (108,70,24,3), + (265,175,24,3), + (150,97,25,3), + (804,556,25,2), + (257,170,26,3), + (317,207,26,3), + (321,209,26,3), + (594,385,26,3), + (781,533,26,2), + (45,30,28,3), + (218,143,28,3), + (370,238,28,3), + (495,319,28,3), + (182,119,29,3), + (654,426,29,3), + (805,557,29,2), + (592,384,30,3), + (741,493,30,2), + (771,523,30,2), + (786,538,30,2), + (543,354,31,3), + (710,462,32,2), + (711,463,32,2), + (714,466,32,2), + (744,496,32,2), + (806,558,32,2), + (20,12,34,3), + (127,83,34,3), + (284,186,34,3), + (325,211,34,3), + (707,459,34,2), + (520,337,35,3), + (670,434,35,3), + (14,8,36,3), + (516,334,36,3), + (651,424,36,3), + (363,234,37,3), + (430,278,37,3), + (487,313,37,3), + (773,525,37,2), + (104,67,38,3), + (113,73,38,3), + (295,193,38,3), + (355,230,38,3), + (485,312,38,3), + (89,57,39,3), + (524,340,39,3), + (187,122,40,3), + (612,400,40,3), + (158,102,41,3), + (797,549,41,2), + (54,36,42,3), + (174,115,42,3), + (545,355,42,3), + (212,140,43,3), + (529,343,43,3), + (709,461,43,2), + (282,185,44,3), + (39,25,45,3), + (664,431,45,3), + (728,480,45,2), + (758,510,45,2), + (249,165,46,3), + (327,212,46,3), + (342,222,46,3), + (357,231,46,3), + (534,347,46,3), + (623,406,46,3), + (275,181,47,3), + (468,302,47,3), + (808,560,47,2), + (93,59,48,3), + (580,376,48,3), + (609,398,48,3), + (78,51,49,3), + (156,101,49,3), + (289,189,49,3), + (315,206,49,3), + (184,120,50,3), + (617,403,50,3), + (625,407,50,3), + (776,528,50,2), + (406,263,51,3), + (660,429,51,3), + (223,146,53,3), + (259,171,53,3), + (448,289,53,3), + (586,380,53,3), + (614,401,53,3), + (689,445,53,3), + (180,118,54,3), + (202,132,54,3), + (304,198,54,3), + (499,322,54,3), + (214,141,55,3), + (428,277,55,3), + (810,562,55,2), + (69,45,56,3), + (306,199,56,3), + (311,203,56,3), + (425,275,56,3), + (6,3,57,3), + (84,54,57,3), + (220,144,58,3), + (432,279,58,3), + (656,427,58,3), + (691,446,58,3), + (143,93,59,3), + (291,190,59,3), + (339,220,59,3), + (349,227,59,3), + (189,123,60,3), + (31,19,61,3), + (137,90,61,3), + (459,296,61,3), + (560,363,61,3), + (813,565,61,2), + (82,53,62,3), + (147,95,62,3), + (153,99,62,3), + (178,117,62,3), + (235,155,62,3), + (511,331,62,3), + (547,356,62,3), + (683,442,62,3), + (802,554,62,2), + (729,481,63,2), + (759,511,63,2), + (778,530,63,2), + (2,1,64,3), + (297,194,64,3), + (621,405,64,3), + (715,467,64,2), + (745,497,64,2), + (162,105,65,3), + (252,167,66,3), + (351,228,66,3), + (442,285,66,3), + (570,370,66,3), + (51,34,67,3), + (102,66,67,3), + (483,311,67,3), + (334,217,68,3), + (473,305,68,3), + (677,438,68,3), + (11,6,69,3), + (18,11,69,3), + (216,142,69,3), + (411,266,69,3), + (60,39,70,3), + (565,366,70,3), + (501,323,71,3), + (556,361,71,3), + (558,362,71,3), + (708,460,71,2), + (799,551,71,2), + (273,180,72,3), + (553,359,72,3), + (562,364,72,3), + (685,443,72,3), + (578,375,73,3), + (58,38,74,3), + (674,436,74,3), + (56,37,75,3), + (649,423,75,3), + (382,247,76,3), + (385,249,76,3), + (390,252,76,3), + (789,541,76,2), + (205,134,77,3), + (267,176,77,3), + (734,486,77,2), + (764,516,77,2), + (111,72,78,3), + (64,42,79,3), + (372,239,79,3), + (619,404,79,3), + (819,571,79,2), + (491,316,80,3), + (681,441,80,3), + (632,411,81,3), + (254,168,82,3), + (299,195,82,3), + (508,329,82,3), + (696,449,82,3), + (705,457,82,2), + (730,482,82,2), + (760,512,82,2), + (134,88,83,3), + (247,164,83,3), + (301,196,83,3), + (694,448,83,3), + (330,214,84,3), + (668,433,84,3), + (245,163,85,3), + (455,294,85,3), + (572,371,87,3), + (365,235,88,3), + (199,130,89,3), + (378,244,89,3), + (464,300,89,3), + (738,490,89,2), + (768,520,89,2), + (8,4,90,3), + (73,48,90,3), + (409,265,90,3), + (775,527,90,2), + (139,91,91,3), + (196,128,91,3), + (658,428,91,3), + (457,295,92,3), + (706,458,92,2), + (821,573,92,2), + (392,253,93,3), + (645,420,93,3), + (733,485,93,2), + (763,515,93,2), + (22,13,94,3), + (176,116,94,3), + (28,17,95,3), + (121,79,95,3), + (359,232,95,3), + (86,55,96,3), + (421,273,96,3), + (672,435,96,3), + (387,250,97,3), + (780,532,97,2), + (400,259,98,3), + (434,280,98,3), + (98,63,99,3), + (287,188,99,3), + (394,254,99,3), + (549,357,100,3), + (723,475,100,2), + (753,505,100,2), + (800,552,100,2), + (115,74,101,3), + (233,154,101,3), + (541,353,101,3), + (629,409,101,3), + (820,572,107,2), + (774,526,108,2), + (725,477,110,2), + (755,507,110,2), + (785,537,113,2), + (722,474,114,2), + (752,504,114,2), + (739,491,115,2), + (769,521,115,2), + (777,529,118,2), + (779,531,120,2), + (794,546,121,2), + (735,487,126,2), + (765,517,126,2), + (782,534,128,2), + (803,555,129,2), + (717,469,131,2), + (747,499,131,2), + (784,536,134,2), + (727,479,138,2), + (757,509,138,2), + (790,542,138,2), + (792,544,139,2), + (713,465,147,2), + (743,495,147,2), + (732,484,149,2), + (762,514,149,2), + (807,559,151,2), + (712,464,154,2), + (742,494,154,2), + (814,566,155,2), + (815,567,156,2), + (783,535,158,2), + (465,301,159,2), + (467,302,159,2), + (469,303,159,2), + (470,304,159,2), + (472,305,159,2), + (474,306,159,2), + (476,307,159,2), + (478,308,159,2), + (479,309,159,2), + (481,310,159,2), + (482,311,159,2), + (484,312,159,2), + (486,313,159,2), + (488,314,159,2), + (489,315,159,2), + (490,316,159,2), + (492,317,159,2), + (493,318,159,2), + (494,319,159,2), + (496,320,159,2), + (497,321,159,2), + (498,322,159,2), + (500,323,159,2), + (502,324,159,2), + (503,325,159,2), + (504,326,159,2), + (505,327,159,2), + (506,328,159,2), + (507,329,159,2), + (509,330,159,2), + (510,331,159,2), + (512,332,159,2), + (514,333,159,2), + (515,334,159,2), + (517,335,159,2), + (518,336,159,2), + (519,337,159,2), + (521,338,159,2), + (522,339,159,2), + (523,340,159,2), + (525,341,159,2), + (526,342,159,2), + (528,343,159,2), + (530,344,159,2), + (531,345,159,2), + (532,346,159,2), + (533,347,159,2), + (535,348,159,2), + (536,349,159,2), + (537,350,159,2), + (538,351,159,2), + (539,352,159,2), + (540,353,159,2), + (542,354,159,2), + (544,355,159,2), + (546,356,159,2), + (548,357,159,2), + (550,358,159,2), + (552,359,159,2), + (554,360,159,2), + (555,361,159,2), + (557,362,159,2), + (559,363,159,2), + (561,364,159,2), + (563,365,159,2), + (564,366,159,2), + (566,367,159,2), + (567,368,159,2), + (568,369,159,2), + (569,370,159,2), + (571,371,159,2), + (573,372,159,2), + (574,373,159,2), + (576,374,159,2), + (577,375,159,2), + (579,376,159,2), + (581,377,159,2), + (582,378,159,2), + (583,379,159,2), + (585,380,159,2), + (587,381,159,2), + (588,382,159,2), + (589,383,159,2), + (591,384,159,2), + (593,385,159,2), + (595,386,159,2), + (597,387,159,2), + (598,388,159,2), + (599,389,159,2), + (600,390,159,2), + (601,391,159,2), + (602,392,159,2), + (603,393,159,2), + (604,394,159,2), + (605,395,159,2), + (606,396,159,2), + (607,397,159,2), + (608,398,159,2), + (610,399,159,2), + (611,400,159,2), + (613,401,159,2), + (615,402,159,2), + (616,403,159,2), + (618,404,159,2), + (620,405,159,2), + (622,406,159,2), + (624,407,159,2), + (626,408,159,2), + (628,409,159,2), + (630,410,159,2), + (631,411,159,2), + (633,412,159,2), + (634,413,159,2), + (635,414,159,2), + (637,415,159,2), + (638,416,159,2), + (640,417,159,2), + (641,418,159,2), + (642,419,159,2), + (644,420,159,2), + (646,421,159,2), + (647,422,159,2), + (648,423,159,2), + (650,424,159,2), + (652,425,159,2), + (653,426,159,2), + (655,427,159,2), + (657,428,159,2), + (659,429,159,2), + (661,430,159,2), + (663,431,159,2), + (665,432,159,2), + (667,433,159,2), + (669,434,159,2), + (671,435,159,2), + (673,436,159,2), + (675,437,159,2), + (676,438,159,2), + (678,439,159,2), + (679,440,159,2), + (680,441,159,2), + (682,442,159,2), + (684,443,159,2), + (686,444,159,2), + (688,445,159,2), + (690,446,159,2), + (692,447,159,2), + (693,448,159,2), + (695,449,159,2), + (697,450,159,2), + (719,471,159,2), + (749,501,159,2), + (816,568,159,2), + (737,489,161,2), + (767,519,161,2), + (787,539,161,2), + (1,1,163,2), + (3,2,163,2), + (5,3,163,2), + (7,4,163,2), + (9,5,163,2), + (10,6,163,2), + (12,7,163,2), + (13,8,163,2), + (15,9,163,2), + (16,10,163,2), + (17,11,163,2), + (19,12,163,2), + (21,13,163,2), + (23,14,163,2), + (25,15,163,2), + (26,16,163,2), + (27,17,163,2), + (29,18,163,2), + (30,19,163,2), + (32,20,163,2), + (33,21,163,2), + (34,22,163,2), + (36,23,163,2), + (37,24,163,2), + (38,25,163,2), + (40,26,163,2), + (41,27,163,2), + (42,28,163,2), + (43,29,163,2), + (44,30,163,2), + (46,31,163,2), + (48,32,163,2), + (49,33,163,2), + (50,34,163,2), + (52,35,163,2), + (53,36,163,2), + (55,37,163,2), + (57,38,163,2), + (59,39,163,2), + (61,40,163,2), + (62,41,163,2), + (63,42,163,2), + (65,43,163,2), + (66,44,163,2), + (68,45,163,2), + (70,46,163,2), + (71,47,163,2), + (72,48,163,2), + (74,49,163,2), + (75,50,163,2), + (77,51,163,2), + (79,52,163,2), + (81,53,163,2), + (83,54,163,2), + (85,55,163,2), + (87,56,163,2), + (88,57,163,2), + (90,58,163,2), + (92,59,163,2), + (94,60,163,2), + (95,61,163,2), + (96,62,163,2), + (97,63,163,2), + (99,64,163,2), + (100,65,163,2), + (101,66,163,2), + (103,67,163,2), + (105,68,163,2), + (106,69,163,2), + (107,70,163,2), + (109,71,163,2), + (110,72,163,2), + (112,73,163,2), + (114,74,163,2), + (116,75,163,2), + (117,76,163,2), + (118,77,163,2), + (119,78,163,2), + (120,79,163,2), + (122,80,163,2), + (123,81,163,2), + (124,82,163,2), + (126,83,163,2), + (128,84,163,2), + (130,85,163,2), + (131,86,163,2), + (132,87,163,2), + (133,88,163,2), + (135,89,163,2), + (136,90,163,2), + (138,91,163,2), + (140,92,163,2), + (142,93,163,2), + (144,94,163,2), + (146,95,163,2), + (148,96,163,2), + (149,97,163,2), + (151,98,163,2), + (152,99,163,2), + (154,100,163,2), + (155,101,163,2), + (157,102,163,2), + (159,103,163,2), + (160,104,163,2), + (161,105,163,2), + (163,106,163,2), + (164,107,163,2), + (165,108,163,2), + (166,109,163,2), + (167,110,163,2), + (168,111,163,2), + (170,112,163,2), + (171,113,163,2), + (172,114,163,2), + (173,115,163,2), + (175,116,163,2), + (177,117,163,2), + (179,118,163,2), + (181,119,163,2), + (183,120,163,2), + (185,121,163,2), + (186,122,163,2), + (188,123,163,2), + (190,124,163,2), + (192,125,163,2), + (193,126,163,2), + (194,127,163,2), + (195,128,163,2), + (197,129,163,2), + (198,130,163,2), + (200,131,163,2), + (201,132,163,2), + (203,133,163,2), + (204,134,163,2), + (206,135,163,2), + (207,136,163,2), + (208,137,163,2), + (209,138,163,2), + (210,139,163,2), + (211,140,163,2), + (213,141,163,2), + (215,142,163,2), + (217,143,163,2), + (219,144,163,2), + (221,145,163,2), + (222,146,163,2), + (224,147,163,2), + (225,148,163,2), + (226,149,163,2), + (227,150,163,2), + (726,478,164,2), + (756,508,164,2), + (724,476,167,2), + (754,506,167,2), + (791,543,170,2), + (740,492,174,2), + (770,522,174,2), + (817,569,179,2), + (796,548,185,2), + (736,488,187,2), + (766,518,187,2), + (716,468,188,2), + (746,498,188,2), + (793,545,192,2), + (788,540,195,2), + (809,561,196,2), + (818,570,201,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -1597,200 +1624,195 @@ 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,162,1,1,0,'395D El Camino Path SW',395,'D',NULL,'El Camino','Path','SW',NULL,NULL,NULL,NULL,'Loudon',1,1028,NULL,'03307',NULL,1228,43.31773,-71.4534,0,NULL,NULL,NULL), - (2,140,1,1,0,'260W Dowlen Path SE',260,'W',NULL,'Dowlen','Path','SE',NULL,NULL,NULL,NULL,'Inwood',1,1047,NULL,'25428',NULL,1228,39.368967,-78.02742,0,NULL,NULL,NULL), - (3,84,1,1,0,'337J Pine Ave E',337,'J',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Glade',1,1015,NULL,'67639',NULL,1228,39.652794,-99.30712,0,NULL,NULL,NULL), - (4,67,1,1,0,'390Z Pine Path E',390,'Z',NULL,'Pine','Path','E',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77099',NULL,1228,29.668489,-95.5869,0,NULL,NULL,NULL), - (5,123,1,1,0,'733K Caulder Pl NW',733,'K',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Bryn Mawr',1,1037,NULL,'19010',NULL,1228,40.02371,-75.32764,0,NULL,NULL,NULL), - (6,153,1,1,0,'651F Main Blvd SE',651,'F',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Verona',1,1045,NULL,'24482',NULL,1228,38.19958,-78.99553,0,NULL,NULL,NULL), - (7,124,1,1,0,'452E College Ave W',452,'E',NULL,'College','Ave','W',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00914',NULL,1228,18.410462,-66.060533,0,NULL,NULL,NULL), - (8,184,1,1,0,'877Q Caulder Path NW',877,'Q',NULL,'Caulder','Path','NW',NULL,NULL,NULL,NULL,'Robeline',1,1017,NULL,'71469',NULL,1228,31.693192,-93.29586,0,NULL,NULL,NULL), - (9,101,1,1,0,'453W Van Ness St W',453,'W',NULL,'Van Ness','St','W',NULL,NULL,NULL,NULL,'Shawnee Mission',1,1015,NULL,'66205',NULL,1228,39.030172,-94.63097,0,NULL,NULL,NULL), - (10,10,1,1,0,'791T Cadell Pl S',791,'T',NULL,'Cadell','Pl','S',NULL,NULL,NULL,NULL,'Wood River',1,1012,NULL,'62095',NULL,1228,38.860447,-90.09418,0,NULL,NULL,NULL), - (11,173,1,1,0,'80X Caulder Pl N',80,'X',NULL,'Caulder','Pl','N',NULL,NULL,NULL,NULL,'Fillmore',1,1004,NULL,'93015',NULL,1228,34.396646,-118.90082,0,NULL,NULL,NULL), - (12,121,1,1,0,'510X Beech Blvd NW',510,'X',NULL,'Beech','Blvd','NW',NULL,NULL,NULL,NULL,'Corpus Christi',1,1042,NULL,'78410',NULL,1228,27.846568,-97.59435,0,NULL,NULL,NULL), - (13,156,1,1,0,'705P Caulder Pl E',705,'P',NULL,'Caulder','Pl','E',NULL,NULL,NULL,NULL,'Peoria',1,1002,NULL,'85345',NULL,1228,33.573602,-112.23984,0,NULL,NULL,NULL), - (14,77,1,1,0,'749O Beech Pl N',749,'O',NULL,'Beech','Pl','N',NULL,NULL,NULL,NULL,'Bullhead City',1,1002,NULL,'86439',NULL,1228,35.095848,-114.619445,0,NULL,NULL,NULL), - (15,147,1,1,0,'850U Woodbridge Pl NE',850,'U',NULL,'Woodbridge','Pl','NE',NULL,NULL,NULL,NULL,'Marston',1,1032,NULL,'28363',NULL,1228,34.938451,-79.54609,0,NULL,NULL,NULL), - (16,159,1,1,0,'525K Jackson Dr S',525,'K',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Lamy',1,1030,NULL,'87540',NULL,1228,35.434943,-105.91873,0,NULL,NULL,NULL), - (17,130,1,1,0,'92Q Pine Dr W',92,'Q',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hockessin',1,1007,NULL,'19707',NULL,1228,39.784014,-75.68586,0,NULL,NULL,NULL), - (18,5,1,1,0,'991I Cadell Way NW',991,'I',NULL,'Cadell','Way','NW',NULL,NULL,NULL,NULL,'Newport Beach',1,1004,NULL,'92661',NULL,1228,33.601822,-117.89966,0,NULL,NULL,NULL), - (19,4,1,1,0,'189O Jackson Ln SW',189,'O',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Jamison',1,1037,NULL,'18929',NULL,1228,40.256648,-75.09357,0,NULL,NULL,NULL), - (20,99,1,1,0,'847G Dowlen Pl NW',847,'G',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Lake View',1,1031,NULL,'14085',NULL,1228,42.718308,-78.9372,0,NULL,NULL,NULL), - (21,56,1,1,0,'187M Beech Ave E',187,'M',NULL,'Beech','Ave','E',NULL,NULL,NULL,NULL,'Denver',1,1016,NULL,'41215',NULL,1228,37.771963,-82.865092,0,NULL,NULL,NULL), - (22,171,1,1,0,'850J Main Dr N',850,'J',NULL,'Main','Dr','N',NULL,NULL,NULL,NULL,'Minter City',1,1023,NULL,'38944',NULL,1228,33.763479,-90.32393,0,NULL,NULL,NULL), - (23,136,1,1,0,'77V States Path N',77,'V',NULL,'States','Path','N',NULL,NULL,NULL,NULL,'Harrison',1,1026,NULL,'69346',NULL,1228,42.624764,-103.83101,0,NULL,NULL,NULL), - (24,167,1,1,0,'294Z Green Rd E',294,'Z',NULL,'Green','Rd','E',NULL,NULL,NULL,NULL,'Saint Paul',1,1022,NULL,'55119',NULL,1228,44.957315,-93.00616,0,NULL,NULL,NULL), - (25,200,1,1,0,'625M Martin Luther King Pl E',625,'M',NULL,'Martin Luther King','Pl','E',NULL,NULL,NULL,NULL,'Ferndale',1,1021,NULL,'48220',NULL,1228,42.460986,-83.13398,0,NULL,NULL,NULL), - (26,139,1,1,0,'480J Martin Luther King Blvd N',480,'J',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'West Farmington',1,1018,NULL,'04992',NULL,1228,44.662822,-70.153049,0,NULL,NULL,NULL), - (27,9,1,1,0,'975K El Camino Rd E',975,'K',NULL,'El Camino','Rd','E',NULL,NULL,NULL,NULL,'Troutman',1,1032,NULL,'28166',NULL,1228,35.687365,-80.88715,0,NULL,NULL,NULL), - (28,195,1,1,0,'954A Maple Blvd NW',954,'A',NULL,'Maple','Blvd','NW',NULL,NULL,NULL,NULL,'Minneapolis',1,1022,NULL,'55455',NULL,1228,44.971965,-93.23588,0,NULL,NULL,NULL), - (29,144,1,1,0,'411J Second Ave NE',411,'J',NULL,'Second','Ave','NE',NULL,NULL,NULL,NULL,'Holtville',1,1004,NULL,'92250',NULL,1228,32.800259,-115.35369,0,NULL,NULL,NULL), - (30,21,1,1,0,'213R College Dr SW',213,'R',NULL,'College','Dr','SW',NULL,NULL,NULL,NULL,'Fallon',1,1027,NULL,'89406',NULL,1228,39.461072,-118.69306,0,NULL,NULL,NULL), - (31,114,1,1,0,'155L Van Ness St SW',155,'L',NULL,'Van Ness','St','SW',NULL,NULL,NULL,NULL,'Fredericksburg',1,1045,NULL,'22406',NULL,1228,38.387261,-77.54676,0,NULL,NULL,NULL), - (32,50,1,1,0,'686C Caulder Blvd E',686,'C',NULL,'Caulder','Blvd','E',NULL,NULL,NULL,NULL,'Emerson',1,1026,NULL,'68733',NULL,1228,42.288154,-96.73644,0,NULL,NULL,NULL), - (33,44,1,1,0,'346X Maple Pl SW',346,'X',NULL,'Maple','Pl','SW',NULL,NULL,NULL,NULL,'Altamont',1,1043,NULL,'84001',NULL,1228,40.395531,-110.27969,0,NULL,NULL,NULL), - (34,155,1,1,0,'252J College Pl E',252,'J',NULL,'College','Pl','E',NULL,NULL,NULL,NULL,'Withams',1,1045,NULL,'23488',NULL,1228,37.952168,-75.59681,0,NULL,NULL,NULL), - (35,42,1,1,0,'518S Maple Ln S',518,'S',NULL,'Maple','Ln','S',NULL,NULL,NULL,NULL,'Santa Fe',1,1030,NULL,'87585',NULL,1228,35.632858,-106.044394,0,NULL,NULL,NULL), - (36,158,1,1,0,'705W Jackson Dr NE',705,'W',NULL,'Jackson','Dr','NE',NULL,NULL,NULL,NULL,'Chase',1,1017,NULL,'71324',NULL,1228,32.138935,-91.691899,0,NULL,NULL,NULL), - (37,6,1,1,0,'252H Beech St N',252,'H',NULL,'Beech','St','N',NULL,NULL,NULL,NULL,'Hampton',1,1045,NULL,'23681',NULL,1228,37.072658,-76.38992,0,NULL,NULL,NULL), - (38,134,1,1,0,'971K Martin Luther King Ln SE',971,'K',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Pickford',1,1021,NULL,'49774',NULL,1228,46.165132,-84.33219,0,NULL,NULL,NULL), - (39,39,1,1,0,'162Y Main St S',162,'Y',NULL,'Main','St','S',NULL,NULL,NULL,NULL,'East Livermore',1,1018,NULL,'04228',NULL,1228,44.400997,-70.13383,0,NULL,NULL,NULL), - (40,2,1,1,0,'504I Dowlen Path E',504,'I',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Waite Park',1,1022,NULL,'56387',NULL,1228,45.550378,-94.22429,0,NULL,NULL,NULL), - (41,113,1,1,0,'257X Main Ln SE',257,'X',NULL,'Main','Ln','SE',NULL,NULL,NULL,NULL,'Elm Creek',1,1026,NULL,'68836',NULL,1228,40.708697,-99.37512,0,NULL,NULL,NULL), - (42,69,1,1,0,'974W Green St S',974,'W',NULL,'Green','St','S',NULL,NULL,NULL,NULL,'Chicago Park',1,1004,NULL,'95712',NULL,1228,39.167276,-120.964275,0,NULL,NULL,NULL), - (43,119,1,1,0,'961W Van Ness Rd N',961,'W',NULL,'Van Ness','Rd','N',NULL,NULL,NULL,NULL,'Rochelle Park',1,1029,NULL,'07662',NULL,1228,40.906553,-74.07797,0,NULL,NULL,NULL), - (44,199,1,1,0,'106U Main Blvd NE',106,'U',NULL,'Main','Blvd','NE',NULL,NULL,NULL,NULL,'Provo',1,1043,NULL,'84606',NULL,1228,40.226302,-111.64439,0,NULL,NULL,NULL), - (45,179,1,1,0,'339D Green St W',339,'D',NULL,'Green','St','W',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90037',NULL,1228,34.002063,-118.28737,0,NULL,NULL,NULL), - (46,76,1,1,0,'621J Green St NE',621,'J',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80239',NULL,1228,39.788236,-104.83034,0,NULL,NULL,NULL), - (47,17,1,1,0,'373O Green Ln W',373,'O',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Peaks Island',1,1018,NULL,'04108',NULL,1228,43.665177,-70.19475,0,NULL,NULL,NULL), - (48,24,1,1,0,'564C Jackson Path W',564,'C',NULL,'Jackson','Path','W',NULL,NULL,NULL,NULL,'Mizpah',1,1022,NULL,'56660',NULL,1228,47.954759,-94.20965,0,NULL,NULL,NULL), - (49,27,1,1,0,'932R Dowlen St NE',932,'R',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Wellman',1,1014,NULL,'52356',NULL,1228,41.478896,-91.85354,0,NULL,NULL,NULL), - (50,143,1,1,0,'775V States Way S',775,'V',NULL,'States','Way','S',NULL,NULL,NULL,NULL,'Hendersonville',1,1032,NULL,'28793',NULL,1228,35.292714,-82.503611,0,NULL,NULL,NULL), - (51,89,1,1,0,'23U Jackson Way NW',23,'U',NULL,'Jackson','Way','NW',NULL,NULL,NULL,NULL,'Lake City',1,1005,NULL,'81235',NULL,1228,37.961233,-107.29953,0,NULL,NULL,NULL), - (52,48,1,1,0,'491U Green Ln S',491,'U',NULL,'Green','Ln','S',NULL,NULL,NULL,NULL,'Westborough',1,1020,NULL,'01582',NULL,1228,42.364807,-71.896868,0,NULL,NULL,NULL), - (53,168,1,1,0,'629D Cadell Pl SW',629,'D',NULL,'Cadell','Pl','SW',NULL,NULL,NULL,NULL,'Wadsworth',1,1012,NULL,'60083',NULL,1228,42.428187,-87.92935,0,NULL,NULL,NULL), - (54,131,1,1,0,'238N Van Ness Ln W',238,'N',NULL,'Van Ness','Ln','W',NULL,NULL,NULL,NULL,'Girdletree',1,1019,NULL,'21829',NULL,1228,38.097861,-75.39378,0,NULL,NULL,NULL), - (55,169,1,1,0,'567Q Bay Dr SE',567,'Q',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Hammond',1,1048,NULL,'54015',NULL,1228,44.957487,-92.44589,0,NULL,NULL,NULL), - (56,35,1,1,0,'858W Green St W',858,'W',NULL,'Green','St','W',NULL,NULL,NULL,NULL,'Farwell',1,1021,NULL,'48622',NULL,1228,43.840787,-84.86734,0,NULL,NULL,NULL), - (57,186,1,1,0,'359C Cadell Rd SW',359,'C',NULL,'Cadell','Rd','SW',NULL,NULL,NULL,NULL,'Kintyre',1,1033,NULL,'58549',NULL,1228,46.467732,-99.93796,0,NULL,NULL,NULL), - (58,126,1,1,0,'231L Caulder Way NW',231,'L',NULL,'Caulder','Way','NW',NULL,NULL,NULL,NULL,'Clarksville',1,1042,NULL,'75426',NULL,1228,33.626445,-95.03534,0,NULL,NULL,NULL), - (59,161,1,1,0,'662Y Northpoint Pl SE',662,'Y',NULL,'Northpoint','Pl','SE',NULL,NULL,NULL,NULL,'Pomona',1,1004,NULL,'91797',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL), - (60,117,1,1,0,'912V Lincoln Path E',912,'V',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Sulphur',1,1013,NULL,'47174',NULL,1228,38.210303,-86.46657,0,NULL,NULL,NULL), - (61,58,1,1,0,'675Q Van Ness Ave SW',675,'Q',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Philipsburg',1,1025,NULL,'59858',NULL,1228,46.293656,-113.36273,0,NULL,NULL,NULL), - (62,105,1,1,0,'491U Second Dr NE',491,'U',NULL,'Second','Dr','NE',NULL,NULL,NULL,NULL,'Lincolnton',1,1032,NULL,'28092',NULL,1228,35.473447,-81.24094,0,NULL,NULL,NULL), - (63,196,1,1,0,'605L Woodbridge Path SW',605,'L',NULL,'Woodbridge','Path','SW',NULL,NULL,NULL,NULL,'Blountville',1,1041,NULL,'37617',NULL,1228,36.534729,-82.37229,0,NULL,NULL,NULL), - (64,66,1,1,0,'709G Bay Ln SE',709,'G',NULL,'Bay','Ln','SE',NULL,NULL,NULL,NULL,'Pensacola',1,1008,NULL,'32523',NULL,1228,30.61428,-87.275772,0,NULL,NULL,NULL), - (65,106,1,1,0,'930J Lincoln Rd SE',930,'J',NULL,'Lincoln','Rd','SE',NULL,NULL,NULL,NULL,'Lansing',1,1021,NULL,'48930',NULL,1228,42.732535,-84.558679,0,NULL,NULL,NULL), - (66,125,1,1,0,'483R Lincoln Path N',483,'R',NULL,'Lincoln','Path','N',NULL,NULL,NULL,NULL,'Mountain Home',1,1003,NULL,'72654',NULL,1228,36.23638,-92.372635,0,NULL,NULL,NULL), - (67,8,1,1,0,'43Y Woodbridge Pl SE',43,'Y',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Blossburg',1,1037,NULL,'16912',NULL,1228,41.676922,-77.0616,0,NULL,NULL,NULL), - (68,86,1,1,0,'524R Pine Ave W',524,'R',NULL,'Pine','Ave','W',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32869',NULL,1228,28.566338,-81.260818,0,NULL,NULL,NULL), - (69,108,1,1,0,'998F States Path NE',998,'F',NULL,'States','Path','NE',NULL,NULL,NULL,NULL,'Naples',1,1008,NULL,'34102',NULL,1228,26.142938,-81.79852,0,NULL,NULL,NULL), - (70,90,1,1,0,'754F Bay Dr E',754,'F',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87107',NULL,1228,35.134094,-106.64073,0,NULL,NULL,NULL), - (71,70,1,1,0,'893H Caulder Ave SW',893,'H',NULL,'Caulder','Ave','SW',NULL,NULL,NULL,NULL,'Sanford',1,1008,NULL,'32771',NULL,1228,28.803979,-81.28761,0,NULL,NULL,NULL), - (72,182,1,1,0,'503O Van Ness Rd NE',503,'O',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99201',NULL,1228,47.663945,-117.43185,0,NULL,NULL,NULL), - (73,88,1,1,0,'923B Beech St S',923,'B',NULL,'Beech','St','S',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,NULL), - (74,122,1,1,0,'641E States St W',641,'E',NULL,'States','St','W',NULL,NULL,NULL,NULL,'Aurora',1,1022,NULL,'55705',NULL,1228,47.45225,-92.24109,0,NULL,NULL,NULL), - (75,36,1,1,0,'778U Northpoint Way W',778,'U',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,NULL), - (76,194,1,1,0,'312R Maple Ave NW',312,'R',NULL,'Maple','Ave','NW',NULL,NULL,NULL,NULL,'Sterling',1,1045,NULL,'20164',NULL,1228,39.011909,-77.39295,0,NULL,NULL,NULL), - (77,74,1,1,0,'65I Bay Way NE',65,'I',NULL,'Bay','Way','NE',NULL,NULL,NULL,NULL,'Homer',1,1001,NULL,'99603',NULL,1228,59.665074,-151.4493,0,NULL,NULL,NULL), - (78,154,3,1,0,'662K Caulder Ln SW',662,'K',NULL,'Caulder','Ln','SW',NULL,'Disbursements',NULL,NULL,'Grabill',1,1013,NULL,'46741',NULL,1228,41.202549,-84.93811,0,NULL,NULL,NULL), - (79,92,2,1,0,'662K Caulder Ln SW',662,'K',NULL,'Caulder','Ln','SW',NULL,'Disbursements',NULL,NULL,'Grabill',1,1013,NULL,'46741',NULL,1228,41.202549,-84.93811,0,NULL,NULL,78), - (80,190,3,1,0,'972N Caulder Dr W',972,'N',NULL,'Caulder','Dr','W',NULL,'Editorial Dept',NULL,NULL,'Evansville',1,1013,NULL,'47706',NULL,1228,37.997128,-87.574963,0,NULL,NULL,NULL), - (81,43,2,1,0,'972N Caulder Dr W',972,'N',NULL,'Caulder','Dr','W',NULL,'Editorial Dept',NULL,NULL,'Evansville',1,1013,NULL,'47706',NULL,1228,37.997128,-87.574963,0,NULL,NULL,80), - (82,148,3,1,0,'694H Bay Rd N',694,'H',NULL,'Bay','Rd','N',NULL,'Urgent',NULL,NULL,'Watchung',1,1029,NULL,'07969',NULL,1228,40.631652,-74.454547,0,NULL,NULL,NULL), - (83,65,3,1,0,'57B Dowlen Path E',57,'B',NULL,'Dowlen','Path','E',NULL,'Churchgate',NULL,NULL,'Gulfport',1,1023,NULL,'39507',NULL,1228,30.397044,-89.03998,0,NULL,NULL,NULL), - (84,21,2,0,0,'57B Dowlen Path E',57,'B',NULL,'Dowlen','Path','E',NULL,'Churchgate',NULL,NULL,'Gulfport',1,1023,NULL,'39507',NULL,1228,30.397044,-89.03998,0,NULL,NULL,83), - (85,120,3,1,0,'616L States Dr SE',616,'L',NULL,'States','Dr','SE',NULL,'Urgent',NULL,NULL,'Saint Petersburg',1,1008,NULL,'33737',NULL,1228,27.891809,-82.724763,0,NULL,NULL,NULL), - (86,153,2,0,0,'616L States Dr SE',616,'L',NULL,'States','Dr','SE',NULL,'Urgent',NULL,NULL,'Saint Petersburg',1,1008,NULL,'33737',NULL,1228,27.891809,-82.724763,0,NULL,NULL,85), - (87,79,3,1,0,'858U Second Path S',858,'U',NULL,'Second','Path','S',NULL,'Urgent',NULL,NULL,'South Roxana',1,1012,NULL,'62087',NULL,1228,38.828347,-90.05894,0,NULL,NULL,NULL), - (88,166,2,1,0,'858U Second Path S',858,'U',NULL,'Second','Path','S',NULL,'Urgent',NULL,NULL,'South Roxana',1,1012,NULL,'62087',NULL,1228,38.828347,-90.05894,0,NULL,NULL,87), - (89,62,3,1,0,'880Y El Camino Rd NE',880,'Y',NULL,'El Camino','Rd','NE',NULL,'Mailstop 101',NULL,NULL,'Eureka Springs',1,1003,NULL,'72631',NULL,1228,36.443322,-93.77474,0,NULL,NULL,NULL), - (90,143,2,0,0,'880Y El Camino Rd NE',880,'Y',NULL,'El Camino','Rd','NE',NULL,'Mailstop 101',NULL,NULL,'Eureka Springs',1,1003,NULL,'72631',NULL,1228,36.443322,-93.77474,0,NULL,NULL,89), - (91,33,3,1,0,'215M El Camino Way W',215,'M',NULL,'El Camino','Way','W',NULL,'Cuffe Parade',NULL,NULL,'Kirkman',1,1014,NULL,'51547',NULL,1228,41.77,-95.644264,0,NULL,NULL,NULL), - (92,127,3,1,0,'332C Second Ln S',332,'C',NULL,'Second','Ln','S',NULL,'Disbursements',NULL,NULL,'Gloucester Point',1,1045,NULL,'23104',NULL,1228,37.298919,-76.530276,0,NULL,NULL,NULL), - (93,181,3,1,0,'369Q Pine Ave NE',369,'Q',NULL,'Pine','Ave','NE',NULL,'Disbursements',NULL,NULL,'Steptoe',1,1046,NULL,'99174',NULL,1228,46.838747,-117.644337,0,NULL,NULL,NULL), - (94,27,2,0,0,'369Q Pine Ave NE',369,'Q',NULL,'Pine','Ave','NE',NULL,'Disbursements',NULL,NULL,'Steptoe',1,1046,NULL,'99174',NULL,1228,46.838747,-117.644337,0,NULL,NULL,93), - (95,103,3,1,0,'269W El Camino Path SE',269,'W',NULL,'El Camino','Path','SE',NULL,'Subscriptions Dept',NULL,NULL,'Littcarr',1,1016,NULL,'41834',NULL,1228,37.270358,-82.9403,0,NULL,NULL,NULL), - (96,199,2,0,0,'269W El Camino Path SE',269,'W',NULL,'El Camino','Path','SE',NULL,'Subscriptions Dept',NULL,NULL,'Littcarr',1,1016,NULL,'41834',NULL,1228,37.270358,-82.9403,0,NULL,NULL,95), - (97,174,3,1,0,'658Q Woodbridge Rd SE',658,'Q',NULL,'Woodbridge','Rd','SE',NULL,'Community Relations',NULL,NULL,'Swartz Creek',1,1021,NULL,'48473',NULL,1228,42.950128,-83.82612,0,NULL,NULL,NULL), - (98,116,2,1,0,'658Q Woodbridge Rd SE',658,'Q',NULL,'Woodbridge','Rd','SE',NULL,'Community Relations',NULL,NULL,'Swartz Creek',1,1021,NULL,'48473',NULL,1228,42.950128,-83.82612,0,NULL,NULL,97), - (99,160,3,1,0,'129V Martin Luther King Way NW',129,'V',NULL,'Martin Luther King','Way','NW',NULL,'Community Relations',NULL,NULL,'McSherrystown',1,1037,NULL,'17344',NULL,1228,39.805693,-77.01905,0,NULL,NULL,NULL), - (100,91,2,1,0,'129V Martin Luther King Way NW',129,'V',NULL,'Martin Luther King','Way','NW',NULL,'Community Relations',NULL,NULL,'McSherrystown',1,1037,NULL,'17344',NULL,1228,39.805693,-77.01905,0,NULL,NULL,99), - (101,135,3,1,0,'105H Cadell Ln NW',105,'H',NULL,'Cadell','Ln','NW',NULL,'c/o PO Plus',NULL,NULL,'Eldorado Springs',1,1005,NULL,'80025',NULL,1228,39.92926,-105.28863,0,NULL,NULL,NULL), - (102,177,2,1,0,'105H Cadell Ln NW',105,'H',NULL,'Cadell','Ln','NW',NULL,'c/o PO Plus',NULL,NULL,'Eldorado Springs',1,1005,NULL,'80025',NULL,1228,39.92926,-105.28863,0,NULL,NULL,101), - (103,94,3,1,0,'362Z Dowlen Ln E',362,'Z',NULL,'Dowlen','Ln','E',NULL,'c/o OPDC',NULL,NULL,'Mango',1,1008,NULL,'33550',NULL,1228,27.871964,-82.438841,0,NULL,NULL,NULL), - (104,128,3,1,0,'437H Dowlen St SE',437,'H',NULL,'Dowlen','St','SE',NULL,'c/o OPDC',NULL,NULL,'Fort Wayne',1,1013,NULL,'46809',NULL,1228,41.023147,-85.1826,0,NULL,NULL,NULL), - (105,118,2,1,0,'437H Dowlen St SE',437,'H',NULL,'Dowlen','St','SE',NULL,'c/o OPDC',NULL,NULL,'Fort Wayne',1,1013,NULL,'46809',NULL,1228,41.023147,-85.1826,0,NULL,NULL,104), - (106,188,3,1,0,'991I Beech Dr NW',991,'I',NULL,'Beech','Dr','NW',NULL,'Donor Relations',NULL,NULL,'Felton',1,1004,NULL,'95018',NULL,1228,37.057708,-122.05967,0,NULL,NULL,NULL), - (107,7,3,1,0,'833D Maple Pl E',833,'D',NULL,'Maple','Pl','E',NULL,'c/o OPDC',NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,NULL), - (108,141,3,1,0,'817L Martin Luther King Ln SW',817,'L',NULL,'Martin Luther King','Ln','SW',NULL,'Attn: Accounting',NULL,NULL,'Elizaville',1,1016,NULL,'41037',NULL,1228,38.3481,-83.718626,0,NULL,NULL,NULL), - (109,130,2,0,0,'817L Martin Luther King Ln SW',817,'L',NULL,'Martin Luther King','Ln','SW',NULL,'Attn: Accounting',NULL,NULL,'Elizaville',1,1016,NULL,'41037',NULL,1228,38.3481,-83.718626,0,NULL,NULL,108), - (110,40,3,1,0,'962Q Van Ness St S',962,'Q',NULL,'Van Ness','St','S',NULL,'Disbursements',NULL,NULL,'Point Washington',1,1008,NULL,'32454',NULL,1228,30.603777,-86.12111,0,NULL,NULL,NULL), - (111,17,2,0,0,'962Q Van Ness St S',962,'Q',NULL,'Van Ness','St','S',NULL,'Disbursements',NULL,NULL,'Point Washington',1,1008,NULL,'32454',NULL,1228,30.603777,-86.12111,0,NULL,NULL,110), - (112,59,1,1,0,'231L Caulder Way NW',231,'L',NULL,'Caulder','Way','NW',NULL,NULL,NULL,NULL,'Clarksville',1,1042,NULL,'75426',NULL,1228,33.626445,-95.03534,0,NULL,NULL,58), - (113,109,1,1,0,'231L Caulder Way NW',231,'L',NULL,'Caulder','Way','NW',NULL,NULL,NULL,NULL,'Clarksville',1,1042,NULL,'75426',NULL,1228,33.626445,-95.03534,0,NULL,NULL,58), - (114,172,1,1,0,'231L Caulder Way NW',231,'L',NULL,'Caulder','Way','NW',NULL,NULL,NULL,NULL,'Clarksville',1,1042,NULL,'75426',NULL,1228,33.626445,-95.03534,0,NULL,NULL,58), - (115,186,1,0,0,'327V Main Pl NW',327,'V',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Atlantic City',1,1029,NULL,'08404',NULL,1228,39.509208,-74.608557,0,NULL,NULL,NULL), - (116,71,1,1,0,'662Y Northpoint Pl SE',662,'Y',NULL,'Northpoint','Pl','SE',NULL,NULL,NULL,NULL,'Pomona',1,1004,NULL,'91797',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59), - (117,3,1,1,0,'662Y Northpoint Pl SE',662,'Y',NULL,'Northpoint','Pl','SE',NULL,NULL,NULL,NULL,'Pomona',1,1004,NULL,'91797',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59), - (118,191,1,1,0,'662Y Northpoint Pl SE',662,'Y',NULL,'Northpoint','Pl','SE',NULL,NULL,NULL,NULL,'Pomona',1,1004,NULL,'91797',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59), - (119,37,1,1,0,'699F Jackson St NW',699,'F',NULL,'Jackson','St','NW',NULL,NULL,NULL,NULL,'Plumsteadville',1,1037,NULL,'18949',NULL,1228,40.38805,-75.142522,0,NULL,NULL,NULL), - (120,20,1,1,0,'912V Lincoln Path E',912,'V',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Sulphur',1,1013,NULL,'47174',NULL,1228,38.210303,-86.46657,0,NULL,NULL,60), - (121,49,1,1,0,'912V Lincoln Path E',912,'V',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Sulphur',1,1013,NULL,'47174',NULL,1228,38.210303,-86.46657,0,NULL,NULL,60), - (122,164,1,1,0,'912V Lincoln Path E',912,'V',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Sulphur',1,1013,NULL,'47174',NULL,1228,38.210303,-86.46657,0,NULL,NULL,60), - (123,151,1,1,0,'912V Lincoln Path E',912,'V',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Sulphur',1,1013,NULL,'47174',NULL,1228,38.210303,-86.46657,0,NULL,NULL,60), - (124,96,1,1,0,'675Q Van Ness Ave SW',675,'Q',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Philipsburg',1,1025,NULL,'59858',NULL,1228,46.293656,-113.36273,0,NULL,NULL,61), - (125,201,1,1,0,'675Q Van Ness Ave SW',675,'Q',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Philipsburg',1,1025,NULL,'59858',NULL,1228,46.293656,-113.36273,0,NULL,NULL,61), - (126,185,1,1,0,'675Q Van Ness Ave SW',675,'Q',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Philipsburg',1,1025,NULL,'59858',NULL,1228,46.293656,-113.36273,0,NULL,NULL,61), - (127,176,1,1,0,'675Q Van Ness Ave SW',675,'Q',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Philipsburg',1,1025,NULL,'59858',NULL,1228,46.293656,-113.36273,0,NULL,NULL,61), - (128,175,1,1,0,'491U Second Dr NE',491,'U',NULL,'Second','Dr','NE',NULL,NULL,NULL,NULL,'Lincolnton',1,1032,NULL,'28092',NULL,1228,35.473447,-81.24094,0,NULL,NULL,62), - (129,118,1,0,0,'491U Second Dr NE',491,'U',NULL,'Second','Dr','NE',NULL,NULL,NULL,NULL,'Lincolnton',1,1032,NULL,'28092',NULL,1228,35.473447,-81.24094,0,NULL,NULL,62), - (130,102,1,1,0,'491U Second Dr NE',491,'U',NULL,'Second','Dr','NE',NULL,NULL,NULL,NULL,'Lincolnton',1,1032,NULL,'28092',NULL,1228,35.473447,-81.24094,0,NULL,NULL,62), - (131,83,1,1,0,'480T Jackson Way N',480,'T',NULL,'Jackson','Way','N',NULL,NULL,NULL,NULL,'Lamar',1,1024,NULL,'64759',NULL,1228,37.507321,-94.2761,0,NULL,NULL,NULL), - (132,34,1,1,0,'605L Woodbridge Path SW',605,'L',NULL,'Woodbridge','Path','SW',NULL,NULL,NULL,NULL,'Blountville',1,1041,NULL,'37617',NULL,1228,36.534729,-82.37229,0,NULL,NULL,63), - (133,14,1,1,0,'605L Woodbridge Path SW',605,'L',NULL,'Woodbridge','Path','SW',NULL,NULL,NULL,NULL,'Blountville',1,1041,NULL,'37617',NULL,1228,36.534729,-82.37229,0,NULL,NULL,63), - (134,110,1,1,0,'605L Woodbridge Path SW',605,'L',NULL,'Woodbridge','Path','SW',NULL,NULL,NULL,NULL,'Blountville',1,1041,NULL,'37617',NULL,1228,36.534729,-82.37229,0,NULL,NULL,63), - (135,145,1,1,0,'605L Woodbridge Path SW',605,'L',NULL,'Woodbridge','Path','SW',NULL,NULL,NULL,NULL,'Blountville',1,1041,NULL,'37617',NULL,1228,36.534729,-82.37229,0,NULL,NULL,63), - (136,47,1,1,0,'709G Bay Ln SE',709,'G',NULL,'Bay','Ln','SE',NULL,NULL,NULL,NULL,'Pensacola',1,1008,NULL,'32523',NULL,1228,30.61428,-87.275772,0,NULL,NULL,64), - (137,25,1,1,0,'709G Bay Ln SE',709,'G',NULL,'Bay','Ln','SE',NULL,NULL,NULL,NULL,'Pensacola',1,1008,NULL,'32523',NULL,1228,30.61428,-87.275772,0,NULL,NULL,64), - (138,41,1,1,0,'709G Bay Ln SE',709,'G',NULL,'Bay','Ln','SE',NULL,NULL,NULL,NULL,'Pensacola',1,1008,NULL,'32523',NULL,1228,30.61428,-87.275772,0,NULL,NULL,64), - (139,107,1,1,0,'942S Woodbridge Dr NW',942,'S',NULL,'Woodbridge','Dr','NW',NULL,NULL,NULL,NULL,'Oak Ridge',1,1041,NULL,'37831',NULL,1228,36.105971,-84.195796,0,NULL,NULL,NULL), - (140,178,1,1,0,'930J Lincoln Rd SE',930,'J',NULL,'Lincoln','Rd','SE',NULL,NULL,NULL,NULL,'Lansing',1,1021,NULL,'48930',NULL,1228,42.732535,-84.558679,0,NULL,NULL,65), - (141,63,1,1,0,'930J Lincoln Rd SE',930,'J',NULL,'Lincoln','Rd','SE',NULL,NULL,NULL,NULL,'Lansing',1,1021,NULL,'48930',NULL,1228,42.732535,-84.558679,0,NULL,NULL,65), - (142,87,1,1,0,'930J Lincoln Rd SE',930,'J',NULL,'Lincoln','Rd','SE',NULL,NULL,NULL,NULL,'Lansing',1,1021,NULL,'48930',NULL,1228,42.732535,-84.558679,0,NULL,NULL,65), - (143,73,1,1,0,'298N Caulder St NE',298,'N',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Reynolds',1,1033,NULL,'58275',NULL,1228,47.67933,-97.121,0,NULL,NULL,NULL), - (144,55,1,1,0,'483R Lincoln Path N',483,'R',NULL,'Lincoln','Path','N',NULL,NULL,NULL,NULL,'Mountain Home',1,1003,NULL,'72654',NULL,1228,36.23638,-92.372635,0,NULL,NULL,66), - (145,13,1,1,0,'483R Lincoln Path N',483,'R',NULL,'Lincoln','Path','N',NULL,NULL,NULL,NULL,'Mountain Home',1,1003,NULL,'72654',NULL,1228,36.23638,-92.372635,0,NULL,NULL,66), - (146,189,1,1,0,'483R Lincoln Path N',483,'R',NULL,'Lincoln','Path','N',NULL,NULL,NULL,NULL,'Mountain Home',1,1003,NULL,'72654',NULL,1228,36.23638,-92.372635,0,NULL,NULL,66), - (147,15,1,1,0,'483R Lincoln Path N',483,'R',NULL,'Lincoln','Path','N',NULL,NULL,NULL,NULL,'Mountain Home',1,1003,NULL,'72654',NULL,1228,36.23638,-92.372635,0,NULL,NULL,66), - (148,30,1,1,0,'43Y Woodbridge Pl SE',43,'Y',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Blossburg',1,1037,NULL,'16912',NULL,1228,41.676922,-77.0616,0,NULL,NULL,67), - (149,38,1,1,0,'43Y Woodbridge Pl SE',43,'Y',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Blossburg',1,1037,NULL,'16912',NULL,1228,41.676922,-77.0616,0,NULL,NULL,67), - (150,187,1,1,0,'43Y Woodbridge Pl SE',43,'Y',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Blossburg',1,1037,NULL,'16912',NULL,1228,41.676922,-77.0616,0,NULL,NULL,67), - (151,133,1,1,0,'43Y Woodbridge Pl SE',43,'Y',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Blossburg',1,1037,NULL,'16912',NULL,1228,41.676922,-77.0616,0,NULL,NULL,67), - (152,46,1,1,0,'524R Pine Ave W',524,'R',NULL,'Pine','Ave','W',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32869',NULL,1228,28.566338,-81.260818,0,NULL,NULL,68), - (153,12,1,1,0,'524R Pine Ave W',524,'R',NULL,'Pine','Ave','W',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32869',NULL,1228,28.566338,-81.260818,0,NULL,NULL,68), - (154,115,1,1,0,'524R Pine Ave W',524,'R',NULL,'Pine','Ave','W',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32869',NULL,1228,28.566338,-81.260818,0,NULL,NULL,68), - (155,150,1,1,0,'524R Pine Ave W',524,'R',NULL,'Pine','Ave','W',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32869',NULL,1228,28.566338,-81.260818,0,NULL,NULL,68), - (156,91,1,0,0,'998F States Path NE',998,'F',NULL,'States','Path','NE',NULL,NULL,NULL,NULL,'Naples',1,1008,NULL,'34102',NULL,1228,26.142938,-81.79852,0,NULL,NULL,69), - (157,57,1,1,0,'998F States Path NE',998,'F',NULL,'States','Path','NE',NULL,NULL,NULL,NULL,'Naples',1,1008,NULL,'34102',NULL,1228,26.142938,-81.79852,0,NULL,NULL,69), - (158,95,1,1,0,'998F States Path NE',998,'F',NULL,'States','Path','NE',NULL,NULL,NULL,NULL,'Naples',1,1008,NULL,'34102',NULL,1228,26.142938,-81.79852,0,NULL,NULL,69), - (159,177,1,0,0,'998F States Path NE',998,'F',NULL,'States','Path','NE',NULL,NULL,NULL,NULL,'Naples',1,1008,NULL,'34102',NULL,1228,26.142938,-81.79852,0,NULL,NULL,69), - (160,166,1,0,0,'754F Bay Dr E',754,'F',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87107',NULL,1228,35.134094,-106.64073,0,NULL,NULL,70), - (161,43,1,0,0,'754F Bay Dr E',754,'F',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87107',NULL,1228,35.134094,-106.64073,0,NULL,NULL,70), - (162,32,1,1,0,'754F Bay Dr E',754,'F',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87107',NULL,1228,35.134094,-106.64073,0,NULL,NULL,70), - (163,22,1,1,0,'870S Woodbridge St NE',870,'S',NULL,'Woodbridge','St','NE',NULL,NULL,NULL,NULL,'Tavares',1,1008,NULL,'32778',NULL,1228,28.799017,-81.73184,0,NULL,NULL,NULL), - (164,85,1,1,0,'893H Caulder Ave SW',893,'H',NULL,'Caulder','Ave','SW',NULL,NULL,NULL,NULL,'Sanford',1,1008,NULL,'32771',NULL,1228,28.803979,-81.28761,0,NULL,NULL,71), - (165,165,1,1,0,'893H Caulder Ave SW',893,'H',NULL,'Caulder','Ave','SW',NULL,NULL,NULL,NULL,'Sanford',1,1008,NULL,'32771',NULL,1228,28.803979,-81.28761,0,NULL,NULL,71), - (166,72,1,1,0,'893H Caulder Ave SW',893,'H',NULL,'Caulder','Ave','SW',NULL,NULL,NULL,NULL,'Sanford',1,1008,NULL,'32771',NULL,1228,28.803979,-81.28761,0,NULL,NULL,71), - (167,111,1,1,0,'893H Caulder Ave SW',893,'H',NULL,'Caulder','Ave','SW',NULL,NULL,NULL,NULL,'Sanford',1,1008,NULL,'32771',NULL,1228,28.803979,-81.28761,0,NULL,NULL,71), - (168,23,1,1,0,'503O Van Ness Rd NE',503,'O',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99201',NULL,1228,47.663945,-117.43185,0,NULL,NULL,72), - (169,81,1,1,0,'503O Van Ness Rd NE',503,'O',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99201',NULL,1228,47.663945,-117.43185,0,NULL,NULL,72), - (170,92,1,0,0,'503O Van Ness Rd NE',503,'O',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99201',NULL,1228,47.663945,-117.43185,0,NULL,NULL,72), - (171,60,1,1,0,'503O Van Ness Rd NE',503,'O',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99201',NULL,1228,47.663945,-117.43185,0,NULL,NULL,72), - (172,100,1,1,0,'923B Beech St S',923,'B',NULL,'Beech','St','S',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,73), - (173,97,1,1,0,'923B Beech St S',923,'B',NULL,'Beech','St','S',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,73), - (174,157,1,1,0,'923B Beech St S',923,'B',NULL,'Beech','St','S',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,73), - (175,132,1,1,0,'103S Main St N',103,'S',NULL,'Main','St','N',NULL,NULL,NULL,NULL,'Miami',1,1008,NULL,'33121',NULL,1228,25.558428,-80.458168,0,NULL,NULL,NULL), - (176,112,1,1,0,'641E States St W',641,'E',NULL,'States','St','W',NULL,NULL,NULL,NULL,'Aurora',1,1022,NULL,'55705',NULL,1228,47.45225,-92.24109,0,NULL,NULL,74), - (177,28,1,1,0,'641E States St W',641,'E',NULL,'States','St','W',NULL,NULL,NULL,NULL,'Aurora',1,1022,NULL,'55705',NULL,1228,47.45225,-92.24109,0,NULL,NULL,74), - (178,149,1,1,0,'641E States St W',641,'E',NULL,'States','St','W',NULL,NULL,NULL,NULL,'Aurora',1,1022,NULL,'55705',NULL,1228,47.45225,-92.24109,0,NULL,NULL,74), - (179,45,1,1,0,'989V College Blvd NW',989,'V',NULL,'College','Blvd','NW',NULL,NULL,NULL,NULL,'Van Lear',1,1016,NULL,'41265',NULL,1228,37.761356,-82.72165,0,NULL,NULL,NULL), - (180,26,1,1,0,'778U Northpoint Way W',778,'U',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,75), - (181,54,1,1,0,'778U Northpoint Way W',778,'U',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,75), - (182,61,1,1,0,'778U Northpoint Way W',778,'U',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,75), - (183,51,1,1,0,'778U Northpoint Way W',778,'U',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Macedonia',1,1034,NULL,'44056',NULL,1228,41.321189,-81.50135,0,NULL,NULL,75), - (184,116,1,0,0,'312R Maple Ave NW',312,'R',NULL,'Maple','Ave','NW',NULL,NULL,NULL,NULL,'Sterling',1,1045,NULL,'20164',NULL,1228,39.011909,-77.39295,0,NULL,NULL,76), - (185,180,1,1,0,'312R Maple Ave NW',312,'R',NULL,'Maple','Ave','NW',NULL,NULL,NULL,NULL,'Sterling',1,1045,NULL,'20164',NULL,1228,39.011909,-77.39295,0,NULL,NULL,76), - (186,137,1,1,0,'312R Maple Ave NW',312,'R',NULL,'Maple','Ave','NW',NULL,NULL,NULL,NULL,'Sterling',1,1045,NULL,'20164',NULL,1228,39.011909,-77.39295,0,NULL,NULL,76), - (187,68,1,1,0,'312R Maple Ave NW',312,'R',NULL,'Maple','Ave','NW',NULL,NULL,NULL,NULL,'Sterling',1,1045,NULL,'20164',NULL,1228,39.011909,-77.39295,0,NULL,NULL,76), - (188,11,1,1,0,'65I Bay Way NE',65,'I',NULL,'Bay','Way','NE',NULL,NULL,NULL,NULL,'Homer',1,1001,NULL,'99603',NULL,1228,59.665074,-151.4493,0,NULL,NULL,77), - (189,170,1,1,0,'65I Bay Way NE',65,'I',NULL,'Bay','Way','NE',NULL,NULL,NULL,NULL,'Homer',1,1001,NULL,'99603',NULL,1228,59.665074,-151.4493,0,NULL,NULL,77), - (190,197,1,1,0,'65I Bay Way NE',65,'I',NULL,'Bay','Way','NE',NULL,NULL,NULL,NULL,'Homer',1,1001,NULL,'99603',NULL,1228,59.665074,-151.4493,0,NULL,NULL,77), - (191,193,1,1,0,'65I Bay Way NE',65,'I',NULL,'Bay','Way','NE',NULL,NULL,NULL,NULL,'Homer',1,1001,NULL,'99603',NULL,1228,59.665074,-151.4493,0,NULL,NULL,77), - (192,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), - (193,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), - (194,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); + (1,81,1,1,0,'539N Maple Way N',539,'N',NULL,'Maple','Way','N',NULL,NULL,NULL,NULL,'Alma',1,1024,NULL,'64001',NULL,1228,39.10223,-93.53531,0,NULL,NULL,NULL), + (2,77,1,1,0,'435H States Dr SW',435,'H',NULL,'States','Dr','SW',NULL,NULL,NULL,NULL,'Wana',1,1047,NULL,'26590',NULL,1228,39.704464,-80.27178,0,NULL,NULL,NULL), + (3,4,1,1,0,'419K Maple Rd NW',419,'K',NULL,'Maple','Rd','NW',NULL,NULL,NULL,NULL,'Britt',1,1022,NULL,'55710',NULL,1228,47.655096,-92.66189,0,NULL,NULL,NULL), + (4,197,1,1,0,'178V Martin Luther King Dr NW',178,'V',NULL,'Martin Luther King','Dr','NW',NULL,NULL,NULL,NULL,'Lake Havasu City',1,1002,NULL,'86406',NULL,1228,34.469945,-114.27861,0,NULL,NULL,NULL), + (5,131,1,1,0,'673D States Rd E',673,'D',NULL,'States','Rd','E',NULL,NULL,NULL,NULL,'Rimrock',1,1002,NULL,'86335',NULL,1228,34.653475,-111.75103,0,NULL,NULL,NULL), + (6,33,1,1,0,'55R Second Ave SE',55,'R',NULL,'Second','Ave','SE',NULL,NULL,NULL,NULL,'White Owl',1,1040,NULL,'57792',NULL,1228,44.562488,-102.41683,0,NULL,NULL,NULL), + (7,101,1,1,0,'778M Woodbridge Dr NE',778,'M',NULL,'Woodbridge','Dr','NE',NULL,NULL,NULL,NULL,'Paris',1,1042,NULL,'75460',NULL,1228,33.660274,-95.55958,0,NULL,NULL,NULL), + (8,35,1,1,0,'818Z Second Way N',818,'Z',NULL,'Second','Way','N',NULL,NULL,NULL,NULL,'Rosario',1,1056,NULL,'00636',NULL,1228,18.113284,-67.039706,0,NULL,NULL,NULL), + (9,104,1,1,0,'389Y Dowlen Pl SE',389,'Y',NULL,'Dowlen','Pl','SE',NULL,NULL,NULL,NULL,'Monroe',1,1014,NULL,'50170',NULL,1228,41.528347,-93.10517,0,NULL,NULL,NULL), + (10,105,1,1,0,'639I Van Ness Ln N',639,'I',NULL,'Van Ness','Ln','N',NULL,NULL,NULL,NULL,'Walla Walla',1,1036,NULL,'99362',NULL,1228,45.986775,-118.07919,0,NULL,NULL,NULL), + (11,187,1,1,0,'757I Second Pl SW',757,'I',NULL,'Second','Pl','SW',NULL,NULL,NULL,NULL,'Shawnee Mission',1,1015,NULL,'66250',NULL,1228,38.899901,-94.831991,0,NULL,NULL,NULL), + (12,24,1,1,0,'223F Martin Luther King St W',223,'F',NULL,'Martin Luther King','St','W',NULL,NULL,NULL,NULL,'Safford',1,1002,NULL,'85546',NULL,1228,32.800222,-109.69052,0,NULL,NULL,NULL), + (13,55,1,1,0,'270S Northpoint Ln SE',270,'S',NULL,'Northpoint','Ln','SE',NULL,NULL,NULL,NULL,'Memphis',1,1041,NULL,'38133',NULL,1228,35.208709,-89.80518,0,NULL,NULL,NULL), + (14,56,1,1,0,'51X College Path E',51,'X',NULL,'College','Path','E',NULL,NULL,NULL,NULL,'Melrose',1,1034,NULL,'45861',NULL,1228,41.090714,-84.41948,0,NULL,NULL,NULL), + (15,146,1,1,0,'356W States Blvd N',356,'W',NULL,'States','Blvd','N',NULL,NULL,NULL,NULL,'Birmingham',1,1000,NULL,'35293',NULL,1228,33.544622,-86.929208,0,NULL,NULL,NULL), + (16,140,1,1,0,'196J Caulder Blvd NW',196,'J',NULL,'Caulder','Blvd','NW',NULL,NULL,NULL,NULL,'Durham',1,1032,NULL,'27722',NULL,1228,36.051155,-78.857651,0,NULL,NULL,NULL), + (17,188,1,1,0,'538J Beech Dr E',538,'J',NULL,'Beech','Dr','E',NULL,NULL,NULL,NULL,'Tie Siding',1,1049,NULL,'82084',NULL,1228,41.024827,-105.46188,0,NULL,NULL,NULL), + (18,7,1,1,0,'605Y Martin Luther King Ln SE',605,'Y',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Montgomery',1,1000,NULL,'36133',NULL,1228,32.233377,-86.208528,0,NULL,NULL,NULL), + (19,76,1,1,0,'685Y Lincoln St N',685,'Y',NULL,'Lincoln','St','N',NULL,NULL,NULL,NULL,'Drury',1,1020,NULL,'01343',NULL,1228,42.642666,-72.986231,0,NULL,NULL,NULL), + (20,145,1,1,0,'945K Pine Dr S',945,'K',NULL,'Pine','Dr','S',NULL,NULL,NULL,NULL,'Batesville',1,1045,NULL,'22924',NULL,1228,38.000289,-78.72662,0,NULL,NULL,NULL), + (21,32,1,1,0,'631L College Path E',631,'L',NULL,'College','Path','E',NULL,NULL,NULL,NULL,'Sherman',1,1042,NULL,'75090',NULL,1228,33.632806,-96.59106,0,NULL,NULL,NULL), + (22,18,1,1,0,'990X Second Rd NW',990,'X',NULL,'Second','Rd','NW',NULL,NULL,NULL,NULL,'Danville',1,1045,NULL,'24543',NULL,1228,36.592679,-79.410983,0,NULL,NULL,NULL), + (23,89,1,1,0,'38C Van Ness Path SW',38,'C',NULL,'Van Ness','Path','SW',NULL,NULL,NULL,NULL,'Des Plaines',1,1012,NULL,'60019',NULL,1228,42.024278,-87.907066,0,NULL,NULL,NULL), + (24,31,1,1,0,'57U Martin Luther King Dr E',57,'U',NULL,'Martin Luther King','Dr','E',NULL,NULL,NULL,NULL,'Norwalk',1,1004,NULL,'90659',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL), + (25,181,1,1,0,'12I Pine Ln S',12,'I',NULL,'Pine','Ln','S',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10035',NULL,1228,40.802395,-73.93359,0,NULL,NULL,NULL), + (26,58,1,1,0,'347E Pine Ln N',347,'E',NULL,'Pine','Ln','N',NULL,NULL,NULL,NULL,'Encinitas',1,1004,NULL,'92023',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), + (27,65,1,1,0,'571H Martin Luther King Path E',571,'H',NULL,'Martin Luther King','Path','E',NULL,NULL,NULL,NULL,'Menlo Park',1,1004,NULL,'94026',NULL,1228,37.381144,-122.334825,0,NULL,NULL,NULL), + (28,88,1,1,0,'636C Green Dr SE',636,'C',NULL,'Green','Dr','SE',NULL,NULL,NULL,NULL,'Annville',1,1037,NULL,'17003',NULL,1228,40.347757,-76.53498,0,NULL,NULL,NULL), + (29,170,1,1,0,'934T Lincoln Pl N',934,'T',NULL,'Lincoln','Pl','N',NULL,NULL,NULL,NULL,'Grover Beach',1,1004,NULL,'93483',NULL,1228,35.347065,-120.455345,0,NULL,NULL,NULL), + (30,180,1,1,0,'216H Martin Luther King Ln SW',216,'H',NULL,'Martin Luther King','Ln','SW',NULL,NULL,NULL,NULL,'Cloverdale',1,1036,NULL,'97112',NULL,1228,45.257176,-123.89141,0,NULL,NULL,NULL), + (31,150,1,1,0,'843L El Camino St S',843,'L',NULL,'El Camino','St','S',NULL,NULL,NULL,NULL,'Berkeley',1,1004,NULL,'94703',NULL,1228,37.862526,-122.27582,0,NULL,NULL,NULL), + (32,129,1,1,0,'344S Maple St NW',344,'S',NULL,'Maple','St','NW',NULL,NULL,NULL,NULL,'Detroit',1,1021,NULL,'48223',NULL,1228,42.394586,-83.24422,0,NULL,NULL,NULL), + (33,199,1,1,0,'718A Green Blvd W',718,'A',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Goshen',1,1031,NULL,'10924',NULL,1228,41.38928,-74.3337,0,NULL,NULL,NULL), + (34,112,1,1,0,'141T Martin Luther King Rd W',141,'T',NULL,'Martin Luther King','Rd','W',NULL,NULL,NULL,NULL,'Rye',1,1005,NULL,'81069',NULL,1228,37.909758,-104.89892,0,NULL,NULL,NULL), + (35,200,1,1,0,'689E Martin Luther King Ave W',689,'E',NULL,'Martin Luther King','Ave','W',NULL,NULL,NULL,NULL,'Dresser',1,1048,NULL,'54009',NULL,1228,45.351585,-92.60246,0,NULL,NULL,NULL), + (36,53,1,1,0,'498K Maple Ln S',498,'K',NULL,'Maple','Ln','S',NULL,NULL,NULL,NULL,'Salitpa',1,1000,NULL,'36570',NULL,1228,31.613745,-88.01381,0,NULL,NULL,NULL), + (37,27,1,1,0,'567C Cadell Dr E',567,'C',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Caney',1,1035,NULL,'74533',NULL,1228,34.217672,-96.19634,0,NULL,NULL,NULL), + (38,66,1,1,0,'589Y Main St N',589,'Y',NULL,'Main','St','N',NULL,NULL,NULL,NULL,'Buffalo',1,1031,NULL,'14227',NULL,1228,42.881372,-78.74466,0,NULL,NULL,NULL), + (39,60,1,1,0,'91H Bay Path W',91,'H',NULL,'Bay','Path','W',NULL,NULL,NULL,NULL,'Glendale Springs',1,1032,NULL,'28629',NULL,1228,36.343002,-81.37502,0,NULL,NULL,NULL), + (40,54,1,1,0,'636W Beech Ln W',636,'W',NULL,'Beech','Ln','W',NULL,NULL,NULL,NULL,'Wilcox',1,1026,NULL,'68982',NULL,1228,40.338567,-99.18638,0,NULL,NULL,NULL), + (41,143,1,1,0,'282D Lincoln Pl N',282,'D',NULL,'Lincoln','Pl','N',NULL,NULL,NULL,NULL,'Hammett',1,1011,NULL,'83627',NULL,1228,42.939818,-115.49697,0,NULL,NULL,NULL), + (42,36,1,1,0,'86Z Van Ness Blvd N',86,'Z',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Saint George',1,1009,NULL,'31646',NULL,1228,30.518903,-82.08063,0,NULL,NULL,NULL), + (43,78,1,1,0,'76N Green Way SE',76,'N',NULL,'Green','Way','SE',NULL,NULL,NULL,NULL,'Hendersonville',1,1041,NULL,'37075',NULL,1228,36.311047,-86.61173,0,NULL,NULL,NULL), + (44,121,1,1,0,'788L Northpoint Dr S',788,'L',NULL,'Northpoint','Dr','S',NULL,NULL,NULL,NULL,'Rock View',1,1047,NULL,'24880',NULL,1228,37.641027,-81.53625,0,NULL,NULL,NULL), + (45,59,1,1,0,'830R Woodbridge Ln SE',830,'R',NULL,'Woodbridge','Ln','SE',NULL,NULL,NULL,NULL,'North Adams',1,1020,NULL,'01247',NULL,1228,42.696064,-73.10145,0,NULL,NULL,NULL), + (46,5,1,1,0,'839W States Ave N',839,'W',NULL,'States','Ave','N',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28223',NULL,1228,35.305552,-80.73303,0,NULL,NULL,NULL), + (47,43,1,1,0,'254Z Cadell Blvd NE',254,'Z',NULL,'Cadell','Blvd','NE',NULL,NULL,NULL,NULL,'Limestone',1,1031,NULL,'14753',NULL,1228,42.035792,-78.61789,0,NULL,NULL,NULL), + (48,71,1,1,0,'879X Martin Luther King Ave N',879,'X',NULL,'Martin Luther King','Ave','N',NULL,NULL,NULL,NULL,'Eddyville',1,1014,NULL,'52553',NULL,1228,41.151537,-92.64227,0,NULL,NULL,NULL), + (49,2,1,1,0,'11C Bay Blvd SW',11,'C',NULL,'Bay','Blvd','SW',NULL,NULL,NULL,NULL,'Grand Rapids',1,1021,NULL,'49550',NULL,1228,43.031413,-85.550267,0,NULL,NULL,NULL), + (50,117,1,1,0,'858I Caulder Dr S',858,'I',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Dammeron Valley',1,1043,NULL,'84783',NULL,1228,37.287005,-113.66144,0,NULL,NULL,NULL), + (51,173,1,1,0,'259G Jackson Pl SW',259,'G',NULL,'Jackson','Pl','SW',NULL,NULL,NULL,NULL,'Friendship',1,1034,NULL,'45630',NULL,1228,38.793335,-82.96046,0,NULL,NULL,NULL), + (52,6,1,1,0,'525B Pine Path S',525,'B',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Richland',1,1021,NULL,'49083',NULL,1228,42.379689,-85.45022,0,NULL,NULL,NULL), + (53,128,1,1,0,'791O Green Blvd W',791,'O',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,NULL), + (54,22,1,1,0,'614B Caulder Path SE',614,'B',NULL,'Caulder','Path','SE',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28222',NULL,1228,35.26002,-80.804151,0,NULL,NULL,NULL), + (55,99,1,1,0,'907K Jackson Pl NW',907,'K',NULL,'Jackson','Pl','NW',NULL,NULL,NULL,NULL,'East Bethany',1,1031,NULL,'14054',NULL,1228,42.903676,-78.13481,0,NULL,NULL,NULL), + (56,98,1,1,0,'151Y Van Ness Blvd S',151,'Y',NULL,'Van Ness','Blvd','S',NULL,NULL,NULL,NULL,'Pittsburgh',1,1037,NULL,'15224',NULL,1228,40.463463,-79.94612,0,NULL,NULL,NULL), + (57,20,1,1,0,'15Q Pine St N',15,'Q',NULL,'Pine','St','N',NULL,NULL,NULL,NULL,'Springfield',1,1020,NULL,'01108',NULL,1228,42.084094,-72.55523,0,NULL,NULL,NULL), + (58,52,1,1,0,'974D Van Ness Blvd SW',974,'D',NULL,'Van Ness','Blvd','SW',NULL,NULL,NULL,NULL,'Alief',1,1042,NULL,'77411',NULL,1228,29.83399,-95.434241,0,NULL,NULL,NULL), + (59,48,1,1,0,'882W Northpoint Ln SW',882,'W',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Knickerbocker',1,1042,NULL,'76939',NULL,1228,31.250101,-100.592015,0,NULL,NULL,NULL), + (60,184,1,1,0,'521D States Rd W',521,'D',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Bad Axe',1,1021,NULL,'48413',NULL,1228,43.803691,-83.00181,0,NULL,NULL,NULL), + (61,42,1,1,0,'420I Pine Blvd SE',420,'I',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,NULL), + (62,29,1,1,0,'801G Second Ln E',801,'G',NULL,'Second','Ln','E',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80241',NULL,1228,39.929566,-104.94931,0,NULL,NULL,NULL), + (63,50,1,1,0,'657M El Camino Ave E',657,'M',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Cordova',1,1019,NULL,'21625',NULL,1228,38.882856,-75.98842,0,NULL,NULL,NULL), + (64,13,1,1,0,'392L Van Ness Path S',392,'L',NULL,'Van Ness','Path','S',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36201',NULL,1228,33.658803,-85.85178,0,NULL,NULL,NULL), + (65,135,1,1,0,'122Q Green St E',122,'Q',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Gray',1,1014,NULL,'50110',NULL,1228,41.84115,-94.9812,0,NULL,NULL,NULL), + (66,37,1,1,0,'95K Maple Ln NE',95,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Richmond',1,1045,NULL,'23292',NULL,1228,37.524246,-77.493157,0,NULL,NULL,NULL), + (67,14,1,1,0,'142R Bay Blvd NW',142,'R',NULL,'Bay','Blvd','NW',NULL,NULL,NULL,NULL,'Graysville',1,1037,NULL,'15337',NULL,1228,39.943552,-80.37399,0,NULL,NULL,NULL), + (68,62,1,1,0,'667P El Camino Pl NE',667,'P',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Valley Center',1,1015,NULL,'67147',NULL,1228,37.853935,-97.33059,0,NULL,NULL,NULL), + (69,10,1,1,0,'9B El Camino Blvd NW',9,'B',NULL,'El Camino','Blvd','NW',NULL,NULL,NULL,NULL,'Sheffield',1,1000,NULL,'35660',NULL,1228,34.759738,-87.69317,0,NULL,NULL,NULL), + (70,91,3,1,0,'163L Martin Luther King Rd NW',163,'L',NULL,'Martin Luther King','Rd','NW',NULL,'Attn: Development',NULL,NULL,'Pittsburgh',1,1037,NULL,'15227',NULL,1228,40.377869,-79.97516,0,NULL,NULL,NULL), + (71,97,2,1,0,'163L Martin Luther King Rd NW',163,'L',NULL,'Martin Luther King','Rd','NW',NULL,'Attn: Development',NULL,NULL,'Pittsburgh',1,1037,NULL,'15227',NULL,1228,40.377869,-79.97516,0,NULL,NULL,70), + (72,109,3,1,0,'461V Dowlen Path N',461,'V',NULL,'Dowlen','Path','N',NULL,'Attn: Accounting',NULL,NULL,'Tampa',1,1008,NULL,'33608',NULL,1228,27.84343,-82.488413,0,NULL,NULL,NULL), + (73,170,2,0,0,'461V Dowlen Path N',461,'V',NULL,'Dowlen','Path','N',NULL,'Attn: Accounting',NULL,NULL,'Tampa',1,1008,NULL,'33608',NULL,1228,27.84343,-82.488413,0,NULL,NULL,72), + (74,136,3,1,0,'978I States Way N',978,'I',NULL,'States','Way','N',NULL,'Urgent',NULL,NULL,'Gibbon',1,1022,NULL,'55335',NULL,1228,44.527707,-94.53092,0,NULL,NULL,NULL), + (75,65,2,0,0,'978I States Way N',978,'I',NULL,'States','Way','N',NULL,'Urgent',NULL,NULL,'Gibbon',1,1022,NULL,'55335',NULL,1228,44.527707,-94.53092,0,NULL,NULL,74), + (76,72,3,1,0,'659Z Jackson Ln SW',659,'Z',NULL,'Jackson','Ln','SW',NULL,'Mailstop 101',NULL,NULL,'Forrest',1,1012,NULL,'61741',NULL,1228,40.756972,-88.40479,0,NULL,NULL,NULL), + (77,68,2,1,0,'659Z Jackson Ln SW',659,'Z',NULL,'Jackson','Ln','SW',NULL,'Mailstop 101',NULL,NULL,'Forrest',1,1012,NULL,'61741',NULL,1228,40.756972,-88.40479,0,NULL,NULL,76), + (78,198,3,1,0,'996X Main Ln SE',996,'X',NULL,'Main','Ln','SE',NULL,'Churchgate',NULL,NULL,'Hampden',1,1047,NULL,'25623',NULL,1228,37.743063,-82.10801,0,NULL,NULL,NULL), + (79,93,2,1,0,'996X Main Ln SE',996,'X',NULL,'Main','Ln','SE',NULL,'Churchgate',NULL,NULL,'Hampden',1,1047,NULL,'25623',NULL,1228,37.743063,-82.10801,0,NULL,NULL,78), + (80,49,3,1,0,'673W Second Rd E',673,'W',NULL,'Second','Rd','E',NULL,'Mailstop 101',NULL,NULL,'Maxwell',1,1030,NULL,'87728',NULL,1228,36.565525,-104.52049,0,NULL,NULL,NULL), + (81,61,3,1,0,'983E Lincoln Blvd NE',983,'E',NULL,'Lincoln','Blvd','NE',NULL,'Attn: Development',NULL,NULL,'Kila',1,1025,NULL,'59920',NULL,1228,48.034766,-114.49865,0,NULL,NULL,NULL), + (82,11,2,1,0,'983E Lincoln Blvd NE',983,'E',NULL,'Lincoln','Blvd','NE',NULL,'Attn: Development',NULL,NULL,'Kila',1,1025,NULL,'59920',NULL,1228,48.034766,-114.49865,0,NULL,NULL,81), + (83,201,3,1,0,'136X Maple Ave N',136,'X',NULL,'Maple','Ave','N',NULL,'Churchgate',NULL,NULL,'East Jewett',1,1031,NULL,'12424',NULL,1228,42.240343,-74.15932,0,NULL,NULL,NULL), + (84,116,2,1,0,'136X Maple Ave N',136,'X',NULL,'Maple','Ave','N',NULL,'Churchgate',NULL,NULL,'East Jewett',1,1031,NULL,'12424',NULL,1228,42.240343,-74.15932,0,NULL,NULL,83), + (85,25,3,1,0,'438Q Green Way S',438,'Q',NULL,'Green','Way','S',NULL,'Attn: Accounting',NULL,NULL,'Scio',1,1036,NULL,'97374',NULL,1228,44.702164,-122.81401,0,NULL,NULL,NULL), + (86,113,2,1,0,'438Q Green Way S',438,'Q',NULL,'Green','Way','S',NULL,'Attn: Accounting',NULL,NULL,'Scio',1,1036,NULL,'97374',NULL,1228,44.702164,-122.81401,0,NULL,NULL,85), + (87,106,3,1,0,'798D Van Ness Blvd NE',798,'D',NULL,'Van Ness','Blvd','NE',NULL,'Cuffe Parade',NULL,NULL,'Sour Lake',1,1042,NULL,'77659',NULL,1228,30.150405,-94.41515,0,NULL,NULL,NULL), + (88,126,2,1,0,'798D Van Ness Blvd NE',798,'D',NULL,'Van Ness','Blvd','NE',NULL,'Cuffe Parade',NULL,NULL,'Sour Lake',1,1042,NULL,'77659',NULL,1228,30.150405,-94.41515,0,NULL,NULL,87), + (89,70,3,1,0,'316A Caulder Path E',316,'A',NULL,'Caulder','Path','E',NULL,'Mailstop 101',NULL,NULL,'Waunakee',1,1048,NULL,'53597',NULL,1228,43.182873,-89.45408,0,NULL,NULL,NULL), + (90,171,2,1,0,'316A Caulder Path E',316,'A',NULL,'Caulder','Path','E',NULL,'Mailstop 101',NULL,NULL,'Waunakee',1,1048,NULL,'53597',NULL,1228,43.182873,-89.45408,0,NULL,NULL,89), + (91,90,3,1,0,'72Q Pine Path NW',72,'Q',NULL,'Pine','Path','NW',NULL,'c/o PO Plus',NULL,NULL,'Gunnison',1,1005,NULL,'81231',NULL,1228,38.702309,-106.940201,0,NULL,NULL,NULL), + (92,175,2,1,0,'72Q Pine Path NW',72,'Q',NULL,'Pine','Path','NW',NULL,'c/o PO Plus',NULL,NULL,'Gunnison',1,1005,NULL,'81231',NULL,1228,38.702309,-106.940201,0,NULL,NULL,91), + (93,137,3,1,0,'397S Green St NE',397,'S',NULL,'Green','St','NE',NULL,'Disbursements',NULL,NULL,'Lake Oswego',1,1036,NULL,'97034',NULL,1228,45.40765,-122.6811,0,NULL,NULL,NULL), + (94,85,2,1,0,'397S Green St NE',397,'S',NULL,'Green','St','NE',NULL,'Disbursements',NULL,NULL,'Lake Oswego',1,1036,NULL,'97034',NULL,1228,45.40765,-122.6811,0,NULL,NULL,93), + (95,186,3,1,0,'481E Bay Rd N',481,'E',NULL,'Bay','Rd','N',NULL,'Disbursements',NULL,NULL,'Bronx',1,1031,NULL,'10455',NULL,1228,40.815559,-73.90771,0,NULL,NULL,NULL), + (96,59,2,0,0,'481E Bay Rd N',481,'E',NULL,'Bay','Rd','N',NULL,'Disbursements',NULL,NULL,'Bronx',1,1031,NULL,'10455',NULL,1228,40.815559,-73.90771,0,NULL,NULL,95), + (97,41,3,1,0,'160Z Northpoint St S',160,'Z',NULL,'Northpoint','St','S',NULL,'Mailstop 101',NULL,NULL,'Brownsville',1,1042,NULL,'78522',NULL,1228,26.188911,-97.764271,0,NULL,NULL,NULL), + (98,60,2,0,0,'160Z Northpoint St S',160,'Z',NULL,'Northpoint','St','S',NULL,'Mailstop 101',NULL,NULL,'Brownsville',1,1042,NULL,'78522',NULL,1228,26.188911,-97.764271,0,NULL,NULL,97), + (99,194,3,1,0,'937P Dowlen Way SW',937,'P',NULL,'Dowlen','Way','SW',NULL,'Donor Relations',NULL,NULL,'Nashville',1,1041,NULL,'37246',NULL,1228,36.158606,-86.789998,0,NULL,NULL,NULL), + (100,139,2,1,0,'937P Dowlen Way SW',937,'P',NULL,'Dowlen','Way','SW',NULL,'Donor Relations',NULL,NULL,'Nashville',1,1041,NULL,'37246',NULL,1228,36.158606,-86.789998,0,NULL,NULL,99), + (101,40,3,1,0,'927B Pine Ln W',927,'B',NULL,'Pine','Ln','W',NULL,'Payables Dept.',NULL,NULL,'Perdue Hill',1,1000,NULL,'36470',NULL,1228,31.514262,-87.50401,0,NULL,NULL,NULL), + (102,163,2,1,0,'927B Pine Ln W',927,'B',NULL,'Pine','Ln','W',NULL,'Payables Dept.',NULL,NULL,'Perdue Hill',1,1000,NULL,'36470',NULL,1228,31.514262,-87.50401,0,NULL,NULL,101), + (103,80,3,1,0,'755R College Way NE',755,'R',NULL,'College','Way','NE',NULL,'Cuffe Parade',NULL,NULL,'Colorado Springs',1,1005,NULL,'80937',NULL,1228,38.82469,-104.562027,0,NULL,NULL,NULL), + (104,125,3,1,0,'891I Lincoln Pl NW',891,'I',NULL,'Lincoln','Pl','NW',NULL,'Editorial Dept',NULL,NULL,'Loda',1,1012,NULL,'60948',NULL,1228,40.526477,-88.0821,0,NULL,NULL,NULL), + (105,188,2,0,0,'891I Lincoln Pl NW',891,'I',NULL,'Lincoln','Pl','NW',NULL,'Editorial Dept',NULL,NULL,'Loda',1,1012,NULL,'60948',NULL,1228,40.526477,-88.0821,0,NULL,NULL,104), + (106,165,3,1,0,'330B Jackson Rd SE',330,'B',NULL,'Jackson','Rd','SE',NULL,'Subscriptions Dept',NULL,NULL,'Cedar Grove',1,1048,NULL,'53013',NULL,1228,43.575272,-87.84597,0,NULL,NULL,NULL), + (107,12,1,1,0,'858I Caulder Dr S',858,'I',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Dammeron Valley',1,1043,NULL,'84783',NULL,1228,37.287005,-113.66144,0,NULL,NULL,50), + (108,159,1,1,0,'858I Caulder Dr S',858,'I',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Dammeron Valley',1,1043,NULL,'84783',NULL,1228,37.287005,-113.66144,0,NULL,NULL,50), + (109,93,1,0,0,'858I Caulder Dr S',858,'I',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Dammeron Valley',1,1043,NULL,'84783',NULL,1228,37.287005,-113.66144,0,NULL,NULL,50), + (110,34,1,1,0,'858I Caulder Dr S',858,'I',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Dammeron Valley',1,1043,NULL,'84783',NULL,1228,37.287005,-113.66144,0,NULL,NULL,50), + (111,138,1,1,0,'259G Jackson Pl SW',259,'G',NULL,'Jackson','Pl','SW',NULL,NULL,NULL,NULL,'Friendship',1,1034,NULL,'45630',NULL,1228,38.793335,-82.96046,0,NULL,NULL,51), + (112,28,1,1,0,'259G Jackson Pl SW',259,'G',NULL,'Jackson','Pl','SW',NULL,NULL,NULL,NULL,'Friendship',1,1034,NULL,'45630',NULL,1228,38.793335,-82.96046,0,NULL,NULL,51), + (113,124,1,1,0,'259G Jackson Pl SW',259,'G',NULL,'Jackson','Pl','SW',NULL,NULL,NULL,NULL,'Friendship',1,1034,NULL,'45630',NULL,1228,38.793335,-82.96046,0,NULL,NULL,51), + (114,127,1,1,0,'143T Caulder Pl S',143,'T',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Jefferson City',1,1024,NULL,'65103',NULL,1228,38.530921,-92.249342,0,NULL,NULL,NULL), + (115,103,1,1,0,'525B Pine Path S',525,'B',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Richland',1,1021,NULL,'49083',NULL,1228,42.379689,-85.45022,0,NULL,NULL,52), + (116,151,1,1,0,'525B Pine Path S',525,'B',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Richland',1,1021,NULL,'49083',NULL,1228,42.379689,-85.45022,0,NULL,NULL,52), + (117,46,1,1,0,'525B Pine Path S',525,'B',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Richland',1,1021,NULL,'49083',NULL,1228,42.379689,-85.45022,0,NULL,NULL,52), + (118,193,1,1,0,'496R College Dr N',496,'R',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Dover',1,1028,NULL,'03821',NULL,1228,43.326734,-71.028427,0,NULL,NULL,NULL), + (119,147,1,1,0,'791O Green Blvd W',791,'O',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,53), + (120,183,1,1,0,'791O Green Blvd W',791,'O',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,53), + (121,97,1,0,0,'791O Green Blvd W',791,'O',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,53), + (122,119,1,1,0,'791O Green Blvd W',791,'O',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,53), + (123,67,1,1,0,'614B Caulder Path SE',614,'B',NULL,'Caulder','Path','SE',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28222',NULL,1228,35.26002,-80.804151,0,NULL,NULL,54), + (124,166,1,1,0,'614B Caulder Path SE',614,'B',NULL,'Caulder','Path','SE',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28222',NULL,1228,35.26002,-80.804151,0,NULL,NULL,54), + (125,169,1,1,0,'614B Caulder Path SE',614,'B',NULL,'Caulder','Path','SE',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28222',NULL,1228,35.26002,-80.804151,0,NULL,NULL,54), + (126,19,1,1,0,'614B Caulder Path SE',614,'B',NULL,'Caulder','Path','SE',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28222',NULL,1228,35.26002,-80.804151,0,NULL,NULL,54), + (127,111,1,1,0,'907K Jackson Pl NW',907,'K',NULL,'Jackson','Pl','NW',NULL,NULL,NULL,NULL,'East Bethany',1,1031,NULL,'14054',NULL,1228,42.903676,-78.13481,0,NULL,NULL,55), + (128,113,1,0,0,'907K Jackson Pl NW',907,'K',NULL,'Jackson','Pl','NW',NULL,NULL,NULL,NULL,'East Bethany',1,1031,NULL,'14054',NULL,1228,42.903676,-78.13481,0,NULL,NULL,55), + (129,192,1,1,0,'907K Jackson Pl NW',907,'K',NULL,'Jackson','Pl','NW',NULL,NULL,NULL,NULL,'East Bethany',1,1031,NULL,'14054',NULL,1228,42.903676,-78.13481,0,NULL,NULL,55), + (130,167,1,1,0,'304B Caulder Path E',304,'B',NULL,'Caulder','Path','E',NULL,NULL,NULL,NULL,'Muskegon',1,1021,NULL,'49443',NULL,1228,43.295493,-86.468853,0,NULL,NULL,NULL), + (131,130,1,1,0,'151Y Van Ness Blvd S',151,'Y',NULL,'Van Ness','Blvd','S',NULL,NULL,NULL,NULL,'Pittsburgh',1,1037,NULL,'15224',NULL,1228,40.463463,-79.94612,0,NULL,NULL,56), + (132,92,1,1,0,'151Y Van Ness Blvd S',151,'Y',NULL,'Van Ness','Blvd','S',NULL,NULL,NULL,NULL,'Pittsburgh',1,1037,NULL,'15224',NULL,1228,40.463463,-79.94612,0,NULL,NULL,56), + (133,114,1,1,0,'151Y Van Ness Blvd S',151,'Y',NULL,'Van Ness','Blvd','S',NULL,NULL,NULL,NULL,'Pittsburgh',1,1037,NULL,'15224',NULL,1228,40.463463,-79.94612,0,NULL,NULL,56), + (134,122,1,1,0,'151Y Van Ness Blvd S',151,'Y',NULL,'Van Ness','Blvd','S',NULL,NULL,NULL,NULL,'Pittsburgh',1,1037,NULL,'15224',NULL,1228,40.463463,-79.94612,0,NULL,NULL,56), + (135,74,1,1,0,'15Q Pine St N',15,'Q',NULL,'Pine','St','N',NULL,NULL,NULL,NULL,'Springfield',1,1020,NULL,'01108',NULL,1228,42.084094,-72.55523,0,NULL,NULL,57), + (136,68,1,0,0,'15Q Pine St N',15,'Q',NULL,'Pine','St','N',NULL,NULL,NULL,NULL,'Springfield',1,1020,NULL,'01108',NULL,1228,42.084094,-72.55523,0,NULL,NULL,57), + (137,15,1,1,0,'15Q Pine St N',15,'Q',NULL,'Pine','St','N',NULL,NULL,NULL,NULL,'Springfield',1,1020,NULL,'01108',NULL,1228,42.084094,-72.55523,0,NULL,NULL,57), + (138,189,1,1,0,'287U Pine Rd NE',287,'U',NULL,'Pine','Rd','NE',NULL,NULL,NULL,NULL,'Fairfield',1,1008,NULL,'32634',NULL,1228,29.35089,-82.27648,0,NULL,NULL,NULL), + (139,110,1,1,0,'974D Van Ness Blvd SW',974,'D',NULL,'Van Ness','Blvd','SW',NULL,NULL,NULL,NULL,'Alief',1,1042,NULL,'77411',NULL,1228,29.83399,-95.434241,0,NULL,NULL,58), + (140,95,1,1,0,'974D Van Ness Blvd SW',974,'D',NULL,'Van Ness','Blvd','SW',NULL,NULL,NULL,NULL,'Alief',1,1042,NULL,'77411',NULL,1228,29.83399,-95.434241,0,NULL,NULL,58), + (141,154,1,1,0,'974D Van Ness Blvd SW',974,'D',NULL,'Van Ness','Blvd','SW',NULL,NULL,NULL,NULL,'Alief',1,1042,NULL,'77411',NULL,1228,29.83399,-95.434241,0,NULL,NULL,58), + (142,161,1,1,0,'974D Van Ness Blvd SW',974,'D',NULL,'Van Ness','Blvd','SW',NULL,NULL,NULL,NULL,'Alief',1,1042,NULL,'77411',NULL,1228,29.83399,-95.434241,0,NULL,NULL,58), + (143,157,1,1,0,'882W Northpoint Ln SW',882,'W',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Knickerbocker',1,1042,NULL,'76939',NULL,1228,31.250101,-100.592015,0,NULL,NULL,59), + (144,8,1,1,0,'882W Northpoint Ln SW',882,'W',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Knickerbocker',1,1042,NULL,'76939',NULL,1228,31.250101,-100.592015,0,NULL,NULL,59), + (145,175,1,0,0,'882W Northpoint Ln SW',882,'W',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Knickerbocker',1,1042,NULL,'76939',NULL,1228,31.250101,-100.592015,0,NULL,NULL,59), + (146,108,1,1,0,'882W Northpoint Ln SW',882,'W',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Knickerbocker',1,1042,NULL,'76939',NULL,1228,31.250101,-100.592015,0,NULL,NULL,59), + (147,102,1,1,0,'521D States Rd W',521,'D',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Bad Axe',1,1021,NULL,'48413',NULL,1228,43.803691,-83.00181,0,NULL,NULL,60), + (148,75,1,1,0,'521D States Rd W',521,'D',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Bad Axe',1,1021,NULL,'48413',NULL,1228,43.803691,-83.00181,0,NULL,NULL,60), + (149,133,1,1,0,'521D States Rd W',521,'D',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Bad Axe',1,1021,NULL,'48413',NULL,1228,43.803691,-83.00181,0,NULL,NULL,60), + (150,148,1,1,0,'521D States Rd W',521,'D',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Bad Axe',1,1021,NULL,'48413',NULL,1228,43.803691,-83.00181,0,NULL,NULL,60), + (151,9,1,1,0,'420I Pine Blvd SE',420,'I',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,61), + (152,38,1,1,0,'420I Pine Blvd SE',420,'I',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,61), + (153,155,1,1,0,'420I Pine Blvd SE',420,'I',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,61), + (154,168,1,1,0,'420I Pine Blvd SE',420,'I',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,61), + (155,21,1,1,0,'801G Second Ln E',801,'G',NULL,'Second','Ln','E',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80241',NULL,1228,39.929566,-104.94931,0,NULL,NULL,62), + (156,64,1,1,0,'801G Second Ln E',801,'G',NULL,'Second','Ln','E',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80241',NULL,1228,39.929566,-104.94931,0,NULL,NULL,62), + (157,115,1,1,0,'801G Second Ln E',801,'G',NULL,'Second','Ln','E',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80241',NULL,1228,39.929566,-104.94931,0,NULL,NULL,62), + (158,156,1,1,0,'801G Second Ln E',801,'G',NULL,'Second','Ln','E',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80241',NULL,1228,39.929566,-104.94931,0,NULL,NULL,62), + (159,69,1,1,0,'657M El Camino Ave E',657,'M',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Cordova',1,1019,NULL,'21625',NULL,1228,38.882856,-75.98842,0,NULL,NULL,63), + (160,118,1,1,0,'657M El Camino Ave E',657,'M',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Cordova',1,1019,NULL,'21625',NULL,1228,38.882856,-75.98842,0,NULL,NULL,63), + (161,87,1,1,0,'657M El Camino Ave E',657,'M',NULL,'El Camino','Ave','E',NULL,NULL,NULL,NULL,'Cordova',1,1019,NULL,'21625',NULL,1228,38.882856,-75.98842,0,NULL,NULL,63), + (162,190,1,1,0,'793A Martin Luther King St NE',793,'A',NULL,'Martin Luther King','St','NE',NULL,NULL,NULL,NULL,'Wheat Ridge',1,1005,NULL,'80033',NULL,1228,39.774341,-105.10036,0,NULL,NULL,NULL), + (163,160,1,1,0,'392L Van Ness Path S',392,'L',NULL,'Van Ness','Path','S',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36201',NULL,1228,33.658803,-85.85178,0,NULL,NULL,64), + (164,83,1,1,0,'392L Van Ness Path S',392,'L',NULL,'Van Ness','Path','S',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36201',NULL,1228,33.658803,-85.85178,0,NULL,NULL,64), + (165,26,1,1,0,'392L Van Ness Path S',392,'L',NULL,'Van Ness','Path','S',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36201',NULL,1228,33.658803,-85.85178,0,NULL,NULL,64), + (166,123,1,1,0,'392L Van Ness Path S',392,'L',NULL,'Van Ness','Path','S',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36201',NULL,1228,33.658803,-85.85178,0,NULL,NULL,64), + (167,63,1,1,0,'122Q Green St E',122,'Q',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Gray',1,1014,NULL,'50110',NULL,1228,41.84115,-94.9812,0,NULL,NULL,65), + (168,196,1,1,0,'122Q Green St E',122,'Q',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Gray',1,1014,NULL,'50110',NULL,1228,41.84115,-94.9812,0,NULL,NULL,65), + (169,191,1,1,0,'122Q Green St E',122,'Q',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Gray',1,1014,NULL,'50110',NULL,1228,41.84115,-94.9812,0,NULL,NULL,65), + (170,57,1,1,0,'122Q Green St E',122,'Q',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Gray',1,1014,NULL,'50110',NULL,1228,41.84115,-94.9812,0,NULL,NULL,65), + (171,126,1,0,0,'95K Maple Ln NE',95,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Richmond',1,1045,NULL,'23292',NULL,1228,37.524246,-77.493157,0,NULL,NULL,66), + (172,116,1,0,0,'95K Maple Ln NE',95,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Richmond',1,1045,NULL,'23292',NULL,1228,37.524246,-77.493157,0,NULL,NULL,66), + (173,51,1,1,0,'95K Maple Ln NE',95,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Richmond',1,1045,NULL,'23292',NULL,1228,37.524246,-77.493157,0,NULL,NULL,66), + (174,195,1,1,0,'95K Maple Ln NE',95,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Richmond',1,1045,NULL,'23292',NULL,1228,37.524246,-77.493157,0,NULL,NULL,66), + (175,11,1,0,0,'142R Bay Blvd NW',142,'R',NULL,'Bay','Blvd','NW',NULL,NULL,NULL,NULL,'Graysville',1,1037,NULL,'15337',NULL,1228,39.943552,-80.37399,0,NULL,NULL,67), + (176,171,1,0,0,'142R Bay Blvd NW',142,'R',NULL,'Bay','Blvd','NW',NULL,NULL,NULL,NULL,'Graysville',1,1037,NULL,'15337',NULL,1228,39.943552,-80.37399,0,NULL,NULL,67), + (177,182,1,1,0,'142R Bay Blvd NW',142,'R',NULL,'Bay','Blvd','NW',NULL,NULL,NULL,NULL,'Graysville',1,1037,NULL,'15337',NULL,1228,39.943552,-80.37399,0,NULL,NULL,67), + (178,100,1,1,0,'765S El Camino Pl W',765,'S',NULL,'El Camino','Pl','W',NULL,NULL,NULL,NULL,'Gann Valley',1,1040,NULL,'57341',NULL,1228,44.070421,-99.01332,0,NULL,NULL,NULL), + (179,132,1,1,0,'667P El Camino Pl NE',667,'P',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Valley Center',1,1015,NULL,'67147',NULL,1228,37.853935,-97.33059,0,NULL,NULL,68), + (180,47,1,1,0,'667P El Camino Pl NE',667,'P',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Valley Center',1,1015,NULL,'67147',NULL,1228,37.853935,-97.33059,0,NULL,NULL,68), + (181,16,1,1,0,'667P El Camino Pl NE',667,'P',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Valley Center',1,1015,NULL,'67147',NULL,1228,37.853935,-97.33059,0,NULL,NULL,68), + (182,149,1,1,0,'667P El Camino Pl NE',667,'P',NULL,'El Camino','Pl','NE',NULL,NULL,NULL,NULL,'Valley Center',1,1015,NULL,'67147',NULL,1228,37.853935,-97.33059,0,NULL,NULL,68), + (183,107,1,1,0,'9B El Camino Blvd NW',9,'B',NULL,'El Camino','Blvd','NW',NULL,NULL,NULL,NULL,'Sheffield',1,1000,NULL,'35660',NULL,1228,34.759738,-87.69317,0,NULL,NULL,69), + (184,174,1,1,0,'9B El Camino Blvd NW',9,'B',NULL,'El Camino','Blvd','NW',NULL,NULL,NULL,NULL,'Sheffield',1,1000,NULL,'35660',NULL,1228,34.759738,-87.69317,0,NULL,NULL,69), + (185,141,1,1,0,'9B El Camino Blvd NW',9,'B',NULL,'El Camino','Blvd','NW',NULL,NULL,NULL,NULL,'Sheffield',1,1000,NULL,'35660',NULL,1228,34.759738,-87.69317,0,NULL,NULL,69), + (186,82,1,1,0,'9B El Camino Blvd NW',9,'B',NULL,'El Camino','Blvd','NW',NULL,NULL,NULL,NULL,'Sheffield',1,1000,NULL,'35660',NULL,1228,34.759738,-87.69317,0,NULL,NULL,69), + (187,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), + (188,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), + (189,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; @@ -1901,207 +1923,207 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact` WRITE; /*!40000 ALTER TABLE `civicrm_contact` DISABLE KEYS */; INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES - (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-11-03 22:14:17'), - (2,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Grant, Kacey','Dr. Kacey Grant',NULL,NULL,NULL,NULL,NULL,'Both','3274986963',NULL,'Sample Data','Kacey','J','Grant',4,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Dr. Kacey Grant',NULL,1,'1995-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kandace','Dr. Kandace Barkley',NULL,NULL,NULL,'1',NULL,'Both','3931171378',NULL,'Sample Data','Kandace','','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Dr. Kandace Barkley',NULL,1,'1999-06-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (4,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jensen, Beula','Beula Jensen',NULL,NULL,NULL,NULL,NULL,'Both','1956895432',NULL,'Sample Data','Beula','L','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Jensen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (5,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Angelika','Angelika Deforest',NULL,NULL,NULL,NULL,NULL,'Both','262591803',NULL,'Sample Data','Angelika','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (6,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Kandace','Mrs. Kandace Lee',NULL,NULL,NULL,NULL,NULL,'Both','3904733713',NULL,'Sample Data','Kandace','','Lee',1,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Mrs. Kandace Lee',NULL,1,'1981-10-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (7,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Wellness Network','Creative Wellness Network',NULL,NULL,NULL,NULL,NULL,'Both','2085338171',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Wellness Network',NULL,NULL,NULL,0,NULL,NULL,NULL,'Creative Wellness Network',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (8,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,NULL,NULL,'Both','1714131215',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman family',5,NULL,'Dear Bachman family',2,NULL,'Bachman family',NULL,NULL,NULL,0,NULL,'Bachman family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Jacob','Mr. Jacob Barkley',NULL,NULL,NULL,'4',NULL,'Both','3801967052',NULL,'Sample Data','Jacob','R','Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Mr. Jacob Barkley',NULL,2,'1995-12-25',0,NULL,NULL,NULL,'Iowa Poetry Solutions',NULL,NULL,33,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Andrew','Dr. Andrew Samson',NULL,NULL,NULL,NULL,NULL,'Both','2323395058',NULL,'Sample Data','Andrew','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Dr. Andrew Samson',NULL,2,'1989-07-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (11,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'parkerm50@infomail.info','parkerm50@infomail.info',NULL,NULL,NULL,NULL,NULL,'Both','2583999476',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear parkerm50@infomail.info',1,NULL,'Dear parkerm50@infomail.info',1,NULL,'parkerm50@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (12,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'heidicooper@mymail.com','heidicooper@mymail.com',NULL,NULL,NULL,NULL,NULL,'Both','668476661',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear heidicooper@mymail.com',1,NULL,'Dear heidicooper@mymail.com',1,NULL,'heidicooper@mymail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (13,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'DÃaz, Jina','Jina DÃaz',NULL,NULL,NULL,'1',NULL,'Both','484938112',NULL,'Sample Data','Jina','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (14,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Zope, Delana','Delana Zope',NULL,NULL,NULL,'2',NULL,'Both','3545847558',NULL,'Sample Data','Delana','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Zope',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (15,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Eleonor','Dr. Eleonor DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','1743595556',NULL,'Sample Data','Eleonor','W','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Dr. Eleonor DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (16,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Deforest, Carylon','Carylon Deforest',NULL,NULL,NULL,'2',NULL,'Both','1534099246',NULL,'Sample Data','Carylon','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Deforest',NULL,NULL,'1943-03-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Sanford','Dr. Sanford Jensen',NULL,NULL,NULL,'1',NULL,'Both','1526792308',NULL,'Sample Data','Sanford','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Dr. Sanford Jensen',NULL,2,NULL,0,NULL,NULL,NULL,'Creative Development Alliance',NULL,NULL,40,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (18,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Jay','Jay Jensen',NULL,NULL,NULL,'1',NULL,'Both','3113289933',NULL,'Sample Data','Jay','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Jensen',NULL,2,'1946-05-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Elbert','Elbert Cruz Sr.',NULL,NULL,NULL,NULL,NULL,'Both','418027726',NULL,'Sample Data','Elbert','','Cruz',NULL,2,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Cruz Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Eleonor','Eleonor Wagner',NULL,NULL,NULL,'1',NULL,'Both','1782813307',NULL,'Sample Data','Eleonor','Y','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Wagner',NULL,NULL,'1955-04-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Scott','Dr. Scott Jacobs II',NULL,NULL,NULL,'4',NULL,'Both','2229288735',NULL,'Sample Data','Scott','K','Jacobs',4,3,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Jacobs II',NULL,2,'1966-04-20',0,NULL,NULL,NULL,'Friends Agriculture Fund',NULL,NULL,65,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (22,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Elizabeth','Mrs. Elizabeth Wattson',NULL,NULL,NULL,NULL,NULL,'Both','144172133',NULL,'Sample Data','Elizabeth','','Wattson',1,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Mrs. Elizabeth Wattson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (23,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Megan','Mrs. Megan Bachman',NULL,NULL,NULL,'3',NULL,'Both','2246848096',NULL,'Sample Data','Megan','','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (24,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'gonzlez.alida@infomail.co.in','gonzlez.alida@infomail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3376340430',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear gonzlez.alida@infomail.co.in',1,NULL,'Dear gonzlez.alida@infomail.co.in',1,NULL,'gonzlez.alida@infomail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (25,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Barry','Barry Müller II',NULL,NULL,NULL,NULL,NULL,'Both','1377313598',NULL,'Sample Data','Barry','F','Müller',NULL,3,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Müller II',NULL,2,'1980-06-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (26,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Terrell, Justina','Ms. Justina Terrell',NULL,NULL,NULL,'1',NULL,'Both','2346884824',NULL,'Sample Data','Justina','M','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Ms. Justina Terrell',NULL,1,'1989-06-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Maxwell','Maxwell Bachman Sr.',NULL,NULL,NULL,'3',NULL,'Both','1975016772',NULL,'Sample Data','Maxwell','V','Bachman',NULL,2,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Bachman Sr.',NULL,NULL,'1996-01-24',0,NULL,NULL,NULL,'Steptoe Technology Center',NULL,NULL,181,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav-Robertson, Jacob','Jacob Yadav-Robertson',NULL,NULL,NULL,'2',NULL,'Both','3502897388',NULL,'Sample Data','Jacob','','Yadav-Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Yadav-Robertson',NULL,2,'2004-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Errol','Mr. Errol Lee',NULL,NULL,NULL,NULL,NULL,'Both','1182001849',NULL,'Sample Data','Errol','A','Lee',3,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Lee',NULL,2,'1938-04-18',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (30,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Felisha','Dr. Felisha Bachman',NULL,NULL,NULL,'4',NULL,'Both','3422436413',NULL,'Sample Data','Felisha','Y','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Dr. Felisha Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (31,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Müller, Alida','Mrs. Alida Müller',NULL,NULL,NULL,'1',NULL,'Both','4166377507',NULL,'Sample Data','Alida','L','Müller',1,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Mrs. Alida Müller',NULL,1,'1995-08-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (32,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wattson, Allen','Allen Wattson Jr.',NULL,NULL,NULL,'4',NULL,'Both','2599799993',NULL,'Sample Data','Allen','','Wattson',NULL,1,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Wattson Jr.',NULL,NULL,'1985-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (33,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Iowa Poetry Solutions','Iowa Poetry Solutions',NULL,NULL,NULL,NULL,NULL,'Both','2288733290',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Iowa Poetry Solutions',NULL,NULL,NULL,0,NULL,NULL,9,'Iowa Poetry Solutions',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (34,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'zope.alida2@testmail.co.uk','zope.alida2@testmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2778917998',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear zope.alida2@testmail.co.uk',1,NULL,'Dear zope.alida2@testmail.co.uk',1,NULL,'zope.alida2@testmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (35,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'González, Bernadette','Mrs. Bernadette González',NULL,NULL,NULL,NULL,NULL,'Both','3507551861',NULL,'Sample Data','Bernadette','','González',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette González',NULL,1,'1992-11-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (36,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Terrell family','Cruz-Terrell family',NULL,NULL,NULL,NULL,NULL,'Both','2783859707',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz-Terrell family',5,NULL,'Dear Cruz-Terrell family',2,NULL,'Cruz-Terrell family',NULL,NULL,NULL,0,NULL,'Cruz-Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'barkley.craig@mymail.co.nz','barkley.craig@mymail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','4037447275',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear barkley.craig@mymail.co.nz',1,NULL,'Dear barkley.craig@mymail.co.nz',1,NULL,'barkley.craig@mymail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (38,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Megan','Megan Bachman',NULL,NULL,NULL,'1',NULL,'Both','2246848096',NULL,'Sample Data','Megan','X','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Bachman',NULL,1,'2008-09-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (39,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Allan','Mr. Allan Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1133423819',NULL,'Sample Data','Allan','','Wilson',3,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Wilson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (40,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Development Alliance','Creative Development Alliance',NULL,NULL,NULL,NULL,NULL,'Both','180829944',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Development Alliance',NULL,NULL,NULL,0,NULL,NULL,17,'Creative Development Alliance',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (41,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Müller, Herminia','Herminia Müller',NULL,NULL,NULL,NULL,NULL,'Both','1737815792',NULL,'Sample Data','Herminia','B','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Müller',NULL,1,'1995-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (42,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bryonbarkley@notmail.net','bryonbarkley@notmail.net',NULL,NULL,NULL,NULL,NULL,'Both','81994535',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear bryonbarkley@notmail.net',1,NULL,'Dear bryonbarkley@notmail.net',1,NULL,'bryonbarkley@notmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Angelika','Ms. Angelika Wattson',NULL,NULL,NULL,'2',NULL,'Both','868071594',NULL,'Sample Data','Angelika','I','Wattson',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika Wattson',NULL,NULL,NULL,0,NULL,NULL,NULL,'Community Food Services',NULL,NULL,190,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (44,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'cooper.f.toby60@fakemail.info','cooper.f.toby60@fakemail.info',NULL,NULL,NULL,'4',NULL,'Both','2144370267',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear cooper.f.toby60@fakemail.info',1,NULL,'Dear cooper.f.toby60@fakemail.info',1,NULL,'cooper.f.toby60@fakemail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Maxwell','Dr. Maxwell Yadav',NULL,NULL,NULL,NULL,NULL,'Both','1292324110',NULL,'Sample Data','Maxwell','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Dr. Maxwell Yadav',NULL,2,'1979-10-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'blackwell-cooperv22@lol.org','blackwell-cooperv22@lol.org',NULL,NULL,NULL,NULL,NULL,'Both','3435042709',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear blackwell-cooperv22@lol.org',1,NULL,'Dear blackwell-cooperv22@lol.org',1,NULL,'blackwell-cooperv22@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (47,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Magan','Magan Müller',NULL,NULL,NULL,NULL,NULL,'Both','681120033',NULL,'Sample Data','Magan','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Müller',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (48,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Ashlie','Dr. Ashlie McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','3165583766',NULL,'Sample Data','Ashlie','N','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Dr. Ashlie McReynolds',NULL,NULL,'1998-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jameson-wagnerm@sample.co.uk','jameson-wagnerm@sample.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2765248297',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear jameson-wagnerm@sample.co.uk',1,NULL,'Dear jameson-wagnerm@sample.co.uk',1,NULL,'jameson-wagnerm@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (50,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Iris','Iris Prentice',NULL,NULL,NULL,'4',NULL,'Both','1798748700',NULL,'Sample Data','Iris','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Prentice',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (51,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Cruz, Roland','Mr. Roland Cruz',NULL,NULL,NULL,'4',NULL,'Both','1569669867',NULL,'Sample Data','Roland','','Cruz',3,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Mr. Roland Cruz',NULL,2,'1986-03-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (52,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Nicole','Dr. Nicole Jones',NULL,NULL,NULL,'1',NULL,'Both','1891539525',NULL,'Sample Data','Nicole','I','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Dr. Nicole Jones',NULL,NULL,'1973-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Russell','Dr. Russell Wattson',NULL,NULL,NULL,NULL,NULL,'Both','2184718409',NULL,'Sample Data','Russell','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Wattson',NULL,NULL,'1955-09-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Terrell, Heidi','Heidi Cruz-Terrell',NULL,NULL,NULL,NULL,NULL,'Both','1732521736',NULL,'Sample Data','Heidi','L','Cruz-Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Cruz-Terrell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (55,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Herminia','Ms. Herminia DÃaz',NULL,NULL,NULL,'1',NULL,'Both','2340298735',NULL,'Sample Data','Herminia','','DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Ms. Herminia DÃaz',NULL,1,'1958-11-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (56,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Bob','Bob Patel Jr.',NULL,NULL,NULL,NULL,NULL,'Both','165677913',NULL,'Sample Data','Bob','H','Patel',NULL,1,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Patel Jr.',NULL,NULL,'1953-06-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Bob','Dr. Bob Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','533638173',NULL,'Sample Data','Bob','','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Dr. Bob Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (58,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Blackwell family','Blackwell family',NULL,NULL,NULL,NULL,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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (59,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Nielsen, Rebekah','Rebekah Nielsen',NULL,NULL,NULL,'1',NULL,'Both','310511379',NULL,'Sample Data','Rebekah','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Nielsen',NULL,1,'1991-12-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Scarlet','Scarlet Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','2143443543',NULL,'Sample Data','Scarlet','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Dimitrov',NULL,1,'1965-10-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Terrell, Shad','Mr. Shad Cruz-Terrell',NULL,NULL,NULL,'1',NULL,'Both','3507911953',NULL,'Sample Data','Shad','','Cruz-Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Mr. Shad Cruz-Terrell',NULL,2,'1976-01-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (62,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Sierra Software Systems','Sierra Software Systems',NULL,NULL,NULL,'1',NULL,'Both','1002347611',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sierra Software Systems',NULL,NULL,NULL,0,NULL,NULL,143,'Sierra Software Systems',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (63,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Terry, Esta','Esta Terry',NULL,NULL,NULL,'2',NULL,'Both','3888791883',NULL,'Sample Data','Esta','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Eleonor','Ms. Eleonor Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2837539268',NULL,'Sample Data','Eleonor','W','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Ms. Eleonor Terrell',NULL,1,'1946-09-14',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (65,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Friends Agriculture Fund','Friends Agriculture Fund',NULL,NULL,NULL,'1',NULL,'Both','1396077823',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Agriculture Fund',NULL,NULL,NULL,0,NULL,NULL,21,'Friends Agriculture Fund',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (66,'Household',NULL,0,1,0,0,1,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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Jina','Jina Wattson',NULL,NULL,NULL,NULL,NULL,'Both','2709822648',NULL,'Sample Data','Jina','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Wattson',NULL,1,'1942-06-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (68,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner, Sanford','Sanford Wagner III',NULL,NULL,NULL,NULL,NULL,'Both','3530679728',NULL,'Sample Data','Sanford','','Wagner',NULL,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Wagner III',NULL,2,'1980-12-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (69,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Kiara','Kiara Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2419573895',NULL,'Sample Data','Kiara','T','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Terrell',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (70,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell family','Terrell family',NULL,NULL,NULL,'3',NULL,'Both','1136333121',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terrell family',5,NULL,'Dear Terrell family',2,NULL,'Terrell family',NULL,NULL,NULL,0,NULL,'Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (71,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'DÃaz-Barkley, Angelika','Ms. Angelika DÃaz-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3538831629',NULL,'Sample Data','Angelika','','DÃaz-Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika DÃaz-Barkley',NULL,1,'1970-05-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (72,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'brzczysawterrell@sample.com','brzczysawterrell@sample.com',NULL,NULL,NULL,'1',NULL,'Both','394499639',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear brzczysawterrell@sample.com',1,NULL,'Dear brzczysawterrell@sample.com',1,NULL,'brzczysawterrell@sample.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (73,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Terry, Allan','Allan Terry Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1982784074',NULL,'Sample Data','Allan','','Terry',NULL,1,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Terry Jr.',NULL,2,'1972-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (74,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-McReynolds-Parker family','Cruz-McReynolds-Parker family',NULL,NULL,NULL,'2',NULL,'Both','3493409444',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz-McReynolds-Parker family',5,NULL,'Dear Cruz-McReynolds-Parker family',2,NULL,'Cruz-McReynolds-Parker family',NULL,NULL,NULL,0,NULL,'Cruz-McReynolds-Parker family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (75,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'pateld61@fishmail.info','pateld61@fishmail.info',NULL,NULL,NULL,'2',NULL,'Both','4231150114',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear pateld61@fishmail.info',1,NULL,'Dear pateld61@fishmail.info',1,NULL,'pateld61@fishmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (76,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Sharyn','Dr. Sharyn Deforest',NULL,NULL,NULL,'3',NULL,'Both','2704728591',NULL,'Sample Data','Sharyn','','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Dr. Sharyn Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Lincoln','Lincoln Jones Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2291386215',NULL,'Sample Data','Lincoln','','Jones',NULL,1,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Jones Jr.',NULL,2,'1942-06-09',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (78,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'nc.lee@notmail.co.uk','nc.lee@notmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','376219211',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear nc.lee@notmail.co.uk',1,NULL,'Dear nc.lee@notmail.co.uk',1,NULL,'nc.lee@notmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (79,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Culture Partners','Creative Culture Partners',NULL,NULL,NULL,NULL,NULL,'Both','3348094767',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Culture Partners',NULL,NULL,NULL,0,NULL,NULL,166,'Creative Culture Partners',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (80,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Heidi','Heidi Terry',NULL,NULL,NULL,NULL,NULL,'Both','3824053436',NULL,'Sample Data','Heidi','F','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Terry',NULL,1,'1998-03-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov-Bachman, Kandace','Dr. Kandace Dimitrov-Bachman',NULL,NULL,NULL,'2',NULL,'Both','281952004',NULL,'Sample Data','Kandace','U','Dimitrov-Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Dr. Kandace Dimitrov-Bachman',NULL,1,'1989-08-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Heidi','Heidi DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','1139170520',NULL,'Sample Data','Heidi','K','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi DÃaz',NULL,NULL,'1935-02-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (83,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Terrell, Bryon','Bryon Terrell',NULL,NULL,NULL,NULL,NULL,'Both','1742337325',NULL,'Sample Data','Bryon','W','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (84,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'McReynolds, Princess','Princess McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2818218342',NULL,'Sample Data','Princess','E','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess McReynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Princess','Princess Terrell',NULL,NULL,NULL,'3',NULL,'Both','676378006',NULL,'Sample Data','Princess','Z','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Terrell',NULL,NULL,'1978-12-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (86,'Household',NULL,1,1,0,0,1,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Maria','Maria Terry Jr.',NULL,NULL,NULL,NULL,NULL,'Both','258657909',NULL,'Sample Data','Maria','','Terry',NULL,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Terry Jr.',NULL,2,'1982-01-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (88,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Prentice family','Prentice family',NULL,NULL,NULL,'1',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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Brigette','Ms. Brigette Smith',NULL,NULL,NULL,NULL,NULL,'Both','3717206438',NULL,'Sample Data','Brigette','X','Smith',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette Smith',NULL,1,'1957-12-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (90,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Wattson family','Wattson family',NULL,NULL,NULL,NULL,NULL,'Both','2851339192',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson family',5,NULL,'Dear Wattson family',2,NULL,'Wattson family',NULL,NULL,NULL,0,NULL,'Wattson family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Delana','Mrs. Delana Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','1631178499',NULL,'Sample Data','Delana','A','Blackwell',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Blackwell',NULL,NULL,'1991-08-06',0,NULL,NULL,NULL,'Global Legal School',NULL,NULL,160,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (92,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Dimitrov-Bachman, Rolando','Rolando Dimitrov-Bachman',NULL,NULL,NULL,'4',NULL,'Both','827595999',NULL,'Sample Data','Rolando','','Dimitrov-Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Dimitrov-Bachman',NULL,2,'2003-01-29',0,NULL,NULL,NULL,'Grabill Music Services',NULL,NULL,154,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (93,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Lincoln','Dr. Lincoln Parker II',NULL,NULL,NULL,'2',NULL,'Both','108314826',NULL,'Sample Data','Lincoln','H','Parker',4,3,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Parker II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (94,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Mango Peace School','Mango Peace School',NULL,NULL,NULL,NULL,NULL,'Both','767620672',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Mango Peace School',NULL,NULL,NULL,0,NULL,NULL,168,'Mango Peace School',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Rebekah','Rebekah Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','982789307',NULL,'Sample Data','Rebekah','G','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Blackwell',NULL,1,'2005-04-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González-Blackwell, Craig','Dr. Craig González-Blackwell Jr.',NULL,NULL,NULL,'2',NULL,'Both','3028903664',NULL,'Sample Data','Craig','W','González-Blackwell',4,1,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Dr. Craig González-Blackwell Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (97,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Alida','Dr. Alida Prentice',NULL,NULL,NULL,NULL,NULL,'Both','2045262669',NULL,'Sample Data','Alida','','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Dr. Alida Prentice',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'roberts.f.juliann@notmail.biz','roberts.f.juliann@notmail.biz',NULL,NULL,NULL,'1',NULL,'Both','2157915333',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear roberts.f.juliann@notmail.biz',1,NULL,'Dear roberts.f.juliann@notmail.biz',1,NULL,'roberts.f.juliann@notmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Ivey','Dr. Ivey Patel',NULL,NULL,NULL,NULL,NULL,'Both','1657972343',NULL,'Sample Data','Ivey','W','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Dr. Ivey Patel',NULL,1,'1951-04-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (100,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson-Prentice, Mei','Ms. Mei Robertson-Prentice',NULL,NULL,NULL,NULL,NULL,'Both','1110815960',NULL,'Sample Data','Mei','','Robertson-Prentice',2,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Ms. Mei Robertson-Prentice',NULL,NULL,'1977-01-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Esta','Ms. Esta Ivanov',NULL,NULL,NULL,'4',NULL,'Both','3595290803',NULL,'Sample Data','Esta','','Ivanov',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Ivanov',NULL,NULL,'1987-11-02',0,NULL,NULL,NULL,'California Wellness Alliance',NULL,NULL,188,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (102,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell-Reynolds, Jackson','Jackson Terrell-Reynolds II',NULL,NULL,NULL,'2',NULL,'Both','1504837912',NULL,'Sample Data','Jackson','L','Terrell-Reynolds',NULL,3,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Terrell-Reynolds II',NULL,2,'1991-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (103,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Littcarr Peace Initiative','Littcarr Peace Initiative',NULL,NULL,NULL,NULL,NULL,'Both','1667615341',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Littcarr Peace Initiative',NULL,NULL,NULL,0,NULL,NULL,199,'Littcarr Peace Initiative',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Carlos','Carlos Müller Sr.',NULL,NULL,NULL,'5',NULL,'Both','457253515',NULL,'Sample Data','Carlos','','Müller',NULL,2,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Müller Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (105,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell-Reynolds family','Terrell-Reynolds family',NULL,NULL,NULL,'1',NULL,'Both','3271077606',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terrell-Reynolds family',5,NULL,'Dear Terrell-Reynolds family',2,NULL,'Terrell-Reynolds family',NULL,NULL,NULL,0,NULL,'Terrell-Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (106,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,NULL,NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mllerb@testing.co.pl','mllerb@testing.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','1653351073',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mllerb@testing.co.pl',1,NULL,'Dear mllerb@testing.co.pl',1,NULL,'mllerb@testing.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (108,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell family','Blackwell family',NULL,NULL,NULL,NULL,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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Craig','Dr. Craig Nielsen Jr.',NULL,NULL,NULL,'4',NULL,'Both','151242060',NULL,'Sample Data','Craig','H','Nielsen',4,1,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Dr. Craig Nielsen Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Sharyn','Sharyn Zope',NULL,NULL,NULL,NULL,NULL,'Both','1278016871',NULL,'Sample Data','Sharyn','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Zope',NULL,1,'1992-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (111,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell, Landon','Dr. Landon Terrell III',NULL,NULL,NULL,NULL,NULL,'Both','4168752118',NULL,'Sample Data','Landon','J','Terrell',4,4,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Terrell III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Eleonor','Dr. Eleonor Robertson',NULL,NULL,NULL,'4',NULL,'Both','2051195654',NULL,'Sample Data','Eleonor','V','Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Dr. Eleonor Robertson',NULL,1,'1977-04-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (113,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Patel, Lashawnda','Ms. Lashawnda Patel',NULL,NULL,NULL,'4',NULL,'Both','3886858056',NULL,'Sample Data','Lashawnda','N','Patel',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Patel',NULL,1,'1971-10-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (114,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'reynolds.w.rodrigo@lol.info','reynolds.w.rodrigo@lol.info',NULL,NULL,NULL,'3',NULL,'Both','1905828739',NULL,'Sample Data',NULL,NULL,NULL,4,3,NULL,NULL,1,NULL,'Dear reynolds.w.rodrigo@lol.info',1,NULL,'Dear reynolds.w.rodrigo@lol.info',1,NULL,'reynolds.w.rodrigo@lol.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Magan','Magan Cooper',NULL,NULL,NULL,NULL,NULL,'Both','791506082',NULL,'Sample Data','Magan','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Beula','Dr. Beula Reynolds',NULL,NULL,NULL,'5',NULL,'Both','2930391993',NULL,'Sample Data','Beula','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Dr. Beula Reynolds',NULL,1,'1960-10-15',0,NULL,NULL,NULL,'Urban Health Solutions',NULL,NULL,174,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (117,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson-Wagner family','Jameson-Wagner family',NULL,NULL,NULL,NULL,NULL,'Both','1722257301',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson-Wagner family',5,NULL,'Dear Jameson-Wagner family',2,NULL,'Jameson-Wagner family',NULL,NULL,NULL,0,NULL,'Jameson-Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (118,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Terrell-Reynolds, Laree','Mrs. Laree Terrell-Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','2054083193',NULL,'Sample Data','Laree','','Terrell-Reynolds',1,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Mrs. Laree Terrell-Reynolds',NULL,NULL,'1978-05-18',0,NULL,NULL,NULL,'Fort Wayne Peace Trust',NULL,NULL,128,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (119,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Bernadette','Ms. Bernadette ÅÄ…chowski',NULL,NULL,NULL,'3',NULL,'Both','2108681272',NULL,'Sample Data','Bernadette','','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Ms. Bernadette ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (120,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Saint Petersburg Poetry Services','Saint Petersburg Poetry Services',NULL,NULL,NULL,NULL,NULL,'Both','1406682970',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Saint Petersburg Poetry Services',NULL,NULL,NULL,0,NULL,NULL,153,'Saint Petersburg Poetry Services',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Rebekah','Rebekah Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2497753127',NULL,'Sample Data','Rebekah','P','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Terrell',NULL,1,'1950-11-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (122,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav-Robertson family','Yadav-Robertson family',NULL,NULL,NULL,'1',NULL,'Both','2658190781',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav-Robertson family',5,NULL,'Dear Yadav-Robertson family',2,NULL,'Yadav-Robertson family',NULL,NULL,NULL,0,NULL,'Yadav-Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samuels.angelika59@sample.co.uk','samuels.angelika59@sample.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','275552338',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear samuels.angelika59@sample.co.uk',1,NULL,'Dear samuels.angelika59@sample.co.uk',1,NULL,'samuels.angelika59@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (124,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Jina','Mrs. Jina Smith',NULL,NULL,NULL,'3',NULL,'Both','227187270',NULL,'Sample Data','Jina','','Smith',1,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Mrs. Jina Smith',NULL,1,'1961-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (125,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,NULL,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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (126,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,NULL,NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (127,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Virginia Empowerment Collective','Virginia Empowerment Collective',NULL,NULL,NULL,'2',NULL,'Both','1132209115',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Virginia Empowerment Collective',NULL,NULL,NULL,0,NULL,NULL,NULL,'Virginia Empowerment Collective',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (128,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Fort Wayne Peace Trust','Fort Wayne Peace Trust',NULL,NULL,NULL,NULL,NULL,'Both','3198442903',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Fort Wayne Peace Trust',NULL,NULL,NULL,0,NULL,NULL,118,'Fort Wayne Peace Trust',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (129,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cooper, Rolando','Rolando Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2570887398',NULL,'Sample Data','Rolando','L','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Eleonor','Mrs. Eleonor Barkley',NULL,NULL,NULL,'4',NULL,'Both','2182789463',NULL,'Sample Data','Eleonor','','Barkley',1,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Mrs. Eleonor Barkley',NULL,1,'1965-04-06',0,NULL,NULL,NULL,'Elizaville Advocacy Systems',NULL,NULL,141,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bernadetteblackwell34@airmail.com','bernadetteblackwell34@airmail.com',NULL,NULL,NULL,NULL,NULL,'Both','1147131843',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear bernadetteblackwell34@airmail.com',1,NULL,'Dear bernadetteblackwell34@airmail.com',1,NULL,'bernadetteblackwell34@airmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Toby','Toby Prentice',NULL,NULL,NULL,'1',NULL,'Both','3734648232',NULL,'Sample Data','Toby','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Prentice',NULL,2,'1978-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (133,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Scott','Dr. Scott Bachman II',NULL,NULL,NULL,NULL,NULL,'Both','3146978953',NULL,'Sample Data','Scott','','Bachman',4,3,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Bachman II',NULL,2,'1961-11-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Brittney','Brittney Samuels',NULL,NULL,NULL,'2',NULL,'Both','3183617598',NULL,'Sample Data','Brittney','J','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Samuels',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (135,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Cadell Family Network','Cadell Family Network',NULL,NULL,NULL,NULL,NULL,'Both','1586776218',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cadell Family Network',NULL,NULL,NULL,0,NULL,NULL,177,'Cadell Family Network',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (136,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov, Princess','Princess Ivanov',NULL,NULL,NULL,'4',NULL,'Both','3366449477',NULL,'Sample Data','Princess','','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Ivanov',NULL,1,'1938-12-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Reynolds, Bryon','Bryon Wagner-Reynolds III',NULL,NULL,NULL,'3',NULL,'Both','3371760092',NULL,'Sample Data','Bryon','','Wagner-Reynolds',NULL,4,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Wagner-Reynolds III',NULL,NULL,'2015-02-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (138,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Iris','Iris Parker',NULL,NULL,NULL,'4',NULL,'Both','1685537074',NULL,'Sample Data','Iris','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Parker',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Irvin','Irvin Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2976688032',NULL,'Sample Data','Irvin','J','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Kacey','Kacey ÅÄ…chowski',NULL,NULL,NULL,'4',NULL,'Both','2351570944',NULL,'Sample Data','Kacey','R','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey ÅÄ…chowski',NULL,1,'1961-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (141,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Elizaville Advocacy Systems','Elizaville Advocacy Systems',NULL,NULL,NULL,'1',NULL,'Both','975899037',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Elizaville Advocacy Systems',NULL,NULL,NULL,0,NULL,NULL,130,'Elizaville Advocacy Systems',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (142,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Omar','Omar Barkley II',NULL,NULL,NULL,'3',NULL,'Both','1166913408',NULL,'Sample Data','Omar','','Barkley',NULL,3,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Barkley II',NULL,2,'1973-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Toby','Mr. Toby Samson III',NULL,NULL,NULL,NULL,NULL,'Both','1447480328',NULL,'Sample Data','Toby','','Samson',3,4,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Mr. Toby Samson III',NULL,2,'1937-02-20',0,NULL,NULL,NULL,'Sierra Software Systems',NULL,NULL,62,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (144,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Adams, Damaris','Damaris Adams',NULL,NULL,NULL,NULL,NULL,'Both','3501190131',NULL,'Sample Data','Damaris','F','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Adams',NULL,1,'1986-03-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Erik','Erik Zope',NULL,NULL,NULL,NULL,NULL,'Both','2683786262',NULL,'Sample Data','Erik','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Zope',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'deforest.kathlyn@testmail.net','deforest.kathlyn@testmail.net',NULL,NULL,NULL,NULL,NULL,'Both','3092870432',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear deforest.kathlyn@testmail.net',1,NULL,'Dear deforest.kathlyn@testmail.net',1,NULL,'deforest.kathlyn@testmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (147,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Kiara','Ms. Kiara Samson',NULL,NULL,NULL,NULL,NULL,'Both','3226683552',NULL,'Sample Data','Kiara','','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Ms. Kiara Samson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (148,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'New Jersey Development Initiative','New Jersey Development Initiative',NULL,NULL,NULL,'2',NULL,'Both','2809595350',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New Jersey Development Initiative',NULL,NULL,NULL,0,NULL,NULL,NULL,'New Jersey Development Initiative',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (149,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav-Robertson, Santina','Santina Yadav-Robertson',NULL,NULL,NULL,NULL,NULL,'Both','1076113868',NULL,'Sample Data','Santina','','Yadav-Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Yadav-Robertson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (150,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Sanford','Sanford Cooper Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1759422355',NULL,'Sample Data','Sanford','H','Cooper',NULL,1,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Cooper Jr.',NULL,2,'1992-06-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (151,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Kiara','Kiara Jameson',NULL,NULL,NULL,'5',NULL,'Both','1442754095',NULL,'Sample Data','Kiara','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Jameson',NULL,NULL,'1965-10-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Arlyne','Ms. Arlyne Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3871657084',NULL,'Sample Data','Arlyne','L','Robertson',2,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Ms. Arlyne Robertson',NULL,1,'1942-01-14',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (153,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'kaceycooper30@testing.info','kaceycooper30@testing.info',NULL,NULL,NULL,NULL,NULL,'Both','696878870',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear kaceycooper30@testing.info',1,NULL,'Dear kaceycooper30@testing.info',1,NULL,'kaceycooper30@testing.info',NULL,NULL,NULL,0,NULL,NULL,NULL,'Saint Petersburg Poetry Services',NULL,NULL,120,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (154,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Grabill Music Services','Grabill Music Services',NULL,NULL,NULL,'3',NULL,'Both','267246968',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Grabill Music Services',NULL,NULL,NULL,0,NULL,NULL,92,'Grabill Music Services',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (155,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Barry','Barry Blackwell',NULL,NULL,NULL,'4',NULL,'Both','2851899457',NULL,'Sample Data','Barry','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (156,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Heidi','Heidi Wilson',NULL,NULL,NULL,'1',NULL,'Both','3595444797',NULL,'Sample Data','Heidi','X','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Wilson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (157,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'jinaprentice@mymail.info','jinaprentice@mymail.info',NULL,NULL,NULL,'3',NULL,'Both','1385008440',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jinaprentice@mymail.info',1,NULL,'Dear jinaprentice@mymail.info',1,NULL,'jinaprentice@mymail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (158,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'ivanovt70@lol.info','ivanovt70@lol.info',NULL,NULL,NULL,NULL,NULL,'Both','3265520465',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear ivanovt70@lol.info',1,NULL,'Dear ivanovt70@lol.info',1,NULL,'ivanovt70@lol.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (159,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cruz, Jina','Jina Cruz',NULL,NULL,NULL,'2',NULL,'Both','657562191',NULL,'Sample Data','Jina','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Cruz',NULL,NULL,'1974-08-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (160,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Global Legal School','Global Legal School',NULL,NULL,NULL,NULL,NULL,'Both','2832834608',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Legal School',NULL,NULL,NULL,0,NULL,NULL,91,'Global Legal School',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (161,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'3',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,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (162,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Ashlie','Ashlie Samuels',NULL,NULL,NULL,'3',NULL,'Both','2718903137',NULL,'Sample Data','Ashlie','O','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Mei','Mei Grant',NULL,NULL,NULL,NULL,NULL,'Both','3865539072',NULL,'Sample Data','Mei','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Grant',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson-Wagner, Scarlet','Scarlet Jameson-Wagner',NULL,NULL,NULL,NULL,NULL,'Both','3915471346',NULL,'Sample Data','Scarlet','','Jameson-Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Jameson-Wagner',NULL,1,'1973-05-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Rolando','Rolando Terrell II',NULL,NULL,NULL,'4',NULL,'Both','3773897082',NULL,'Sample Data','Rolando','J','Terrell',NULL,3,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Terrell II',NULL,2,'2006-05-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (166,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Heidi','Dr. Heidi Wattson',NULL,NULL,NULL,'1',NULL,'Both','1801029451',NULL,'Sample Data','Heidi','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Wattson',NULL,1,'1959-12-29',0,NULL,NULL,NULL,'Creative Culture Partners',NULL,NULL,79,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (167,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jacobs, Delana','Delana Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','1289592996',NULL,'Sample Data','Delana','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Jacobs',NULL,1,'1986-12-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (168,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González, Brigette','Ms. Brigette González',NULL,NULL,NULL,NULL,NULL,'Both','1091567512',NULL,'Sample Data','Brigette','','González',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette González',NULL,NULL,'1977-09-20',0,NULL,NULL,NULL,'Mango Peace School',NULL,NULL,94,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Scarlet','Mrs. Scarlet Parker',NULL,NULL,NULL,'5',NULL,'Both','1919571146',NULL,'Sample Data','Scarlet','','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Mrs. Scarlet Parker',NULL,1,'1957-08-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (170,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz-McReynolds-Parker, Kiara','Kiara Cruz-McReynolds-Parker',NULL,NULL,NULL,'2',NULL,'Both','62252898',NULL,'Sample Data','Kiara','V','Cruz-McReynolds-Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Cruz-McReynolds-Parker',NULL,1,'1987-04-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (171,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Sharyn','Ms. Sharyn Terry',NULL,NULL,NULL,NULL,NULL,'Both','3160433036',NULL,'Sample Data','Sharyn','W','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Ms. Sharyn Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (172,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Nielsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3387173587',NULL,'Sample Data','BrzÄ™czysÅ‚aw','B','Nielsen',NULL,1,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Nielsen Jr.',NULL,2,'2000-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (173,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Samuels, Elizabeth','Ms. Elizabeth Samuels',NULL,NULL,NULL,NULL,NULL,'Both','815083469',NULL,'Sample Data','Elizabeth','','Samuels',2,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Ms. Elizabeth Samuels',NULL,1,'1954-05-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:28'), - (174,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Urban Health Solutions','Urban Health Solutions',NULL,NULL,NULL,'5',NULL,'Both','2161119418',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Health Solutions',NULL,NULL,NULL,0,NULL,NULL,116,'Urban Health Solutions',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Jina','Jina Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','1863509251',NULL,'Sample Data','Jina','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Bryon','Mr. Bryon Blackwell Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2612688394',NULL,'Sample Data','Bryon','W','Blackwell',3,2,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon Blackwell Sr.',NULL,2,'1988-01-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'tblackwell@sample.co.uk','tblackwell@sample.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','3179525882',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear tblackwell@sample.co.uk',1,NULL,'Dear tblackwell@sample.co.uk',1,NULL,'tblackwell@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,'Cadell Family Network',NULL,NULL,135,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (178,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Margaret','Margaret Terry',NULL,NULL,NULL,'4',NULL,'Both','4072810936',NULL,'Sample Data','Margaret','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Terry',NULL,1,'1964-03-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:31'), - (179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Kandace','Kandace Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3821467563',NULL,'Sample Data','Kandace','E','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Ivanov',NULL,NULL,'1992-04-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Reynolds, Rodrigo','Rodrigo Wagner-Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3093224570',NULL,'Sample Data','Rodrigo','R','Wagner-Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Wagner-Reynolds',NULL,NULL,'1983-05-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:32'), - (181,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Steptoe Technology Center','Steptoe Technology Center',NULL,NULL,NULL,'5',NULL,'Both','398020228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Steptoe Technology Center',NULL,NULL,NULL,0,NULL,NULL,27,'Steptoe Technology Center',NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (182,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Dimitrov-Bachman family','Dimitrov-Bachman family',NULL,NULL,NULL,NULL,NULL,'Both','538828243',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Dimitrov-Bachman family',5,NULL,'Dear Dimitrov-Bachman family',2,NULL,'Dimitrov-Bachman family',NULL,NULL,NULL,0,NULL,'Dimitrov-Bachman family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:30'), - (183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Errol','Errol Patel',NULL,NULL,NULL,'5',NULL,'Both','392597171',NULL,'Sample Data','Errol','U','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Patel',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:27','2021-11-03 22:14:29'), - (184,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'bettyp37@spamalot.co.in','bettyp37@spamalot.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3565799379',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear bettyp37@spamalot.co.in',1,NULL,'Dear bettyp37@spamalot.co.in',1,NULL,'bettyp37@spamalot.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:28'), - (185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Ashlie','Ashlie Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','297953864',NULL,'Sample Data','Ashlie','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Blackwell',NULL,1,'2007-08-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'), - (186,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Dimitrov, Ashley','Ashley Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','665882362',NULL,'Sample Data','Ashley','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Dimitrov',NULL,1,'1957-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'), - (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Carlos','Carlos Bachman',NULL,NULL,NULL,'2',NULL,'Both','4021780594',NULL,'Sample Data','Carlos','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Bachman',NULL,2,'1985-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'), - (188,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'California Wellness Alliance','California Wellness Alliance',NULL,NULL,NULL,'2',NULL,'Both','3070597166',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Wellness Alliance',NULL,NULL,NULL,0,NULL,NULL,101,'California Wellness Alliance',NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:30'), - (189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Mei','Ms. Mei DÃaz',NULL,NULL,NULL,'4',NULL,'Both','3003407932',NULL,'Sample Data','Mei','','DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Ms. Mei DÃaz',NULL,1,'1988-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'), - (190,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Community Food Services','Community Food Services',NULL,NULL,NULL,'5',NULL,'Both','3768350666',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Food Services',NULL,NULL,NULL,0,NULL,NULL,43,'Community Food Services',NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:30'), - (191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Ashley','Ashley Barkley',NULL,NULL,NULL,'1',NULL,'Both','2198515289',NULL,'Sample Data','Ashley','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'), - (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Kathleen','Dr. Kathleen Smith',NULL,NULL,NULL,'4',NULL,'Both','219575839',NULL,'Sample Data','Kathleen','T','Smith',4,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Dr. Kathleen Smith',NULL,1,'1943-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:28'), - (193,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Elbert','Dr. Elbert McReynolds II',NULL,NULL,NULL,'5',NULL,'Both','1717930832',NULL,'Sample Data','Elbert','','McReynolds',4,3,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Dr. Elbert McReynolds II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:32'), - (194,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Reynolds family','Wagner-Reynolds family',NULL,NULL,NULL,'1',NULL,'Both','3969523120',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner-Reynolds family',5,NULL,'Dear Wagner-Reynolds family',2,NULL,'Wagner-Reynolds family',NULL,NULL,NULL,0,NULL,'Wagner-Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:30'), - (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Kathleen','Kathleen Lee',NULL,NULL,NULL,'5',NULL,'Both','2198492721',NULL,'Sample Data','Kathleen','W','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Lee',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:28'), - (196,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Zope family','Zope family',NULL,NULL,NULL,NULL,NULL,'Both','1649131487',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Zope family',5,NULL,'Dear Zope family',2,NULL,'Zope family',NULL,NULL,NULL,0,NULL,'Zope family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:30'), - (197,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'cruz-mcreynolds-parker.ivey@testmail.co.in','cruz-mcreynolds-parker.ivey@testmail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2064169731',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear cruz-mcreynolds-parker.ivey@testmail.co.in',1,NULL,'Dear cruz-mcreynolds-parker.ivey@testmail.co.in',1,NULL,'cruz-mcreynolds-parker.ivey@testmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:32'), - (198,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Cooper, Jed','Jed Cooper Jr.',NULL,NULL,NULL,'3',NULL,'Both','1064623644',NULL,'Sample Data','Jed','','Cooper',NULL,1,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Cooper Jr.',NULL,2,'1967-05-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:28'), - (199,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Errol','Errol Müller III',NULL,NULL,NULL,'1',NULL,'Both','807767976',NULL,'Sample Data','Errol','B','Müller',NULL,4,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Müller III',NULL,2,'1977-02-25',0,NULL,NULL,NULL,'Littcarr Peace Initiative',NULL,NULL,103,0,'2021-11-03 22:14:28','2021-11-03 22:14:30'), - (200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Brittney','Mrs. Brittney Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2965404429',NULL,'Sample Data','Brittney','X','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Mrs. Brittney Bachman',NULL,NULL,'1946-03-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:28'), - (201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Brigette','Brigette Blackwell',NULL,NULL,NULL,'5',NULL,'Both','1641283407',NULL,'Sample Data','Brigette','Z','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Blackwell',NULL,1,'2016-09-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-03 22:14:28','2021-11-03 22:14:31'); + (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-11-08 01:45:12'), + (2,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Nicole','Mrs. Nicole Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','1660197539',NULL,'Sample Data','Nicole','','Blackwell',1,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Mrs. Nicole Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Brent','Brent Adams',NULL,NULL,NULL,NULL,NULL,'Both','2406910115',NULL,'Sample Data','Brent','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Adams',NULL,2,'1993-04-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (4,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Alida','Mrs. Alida Patel',NULL,NULL,NULL,'3',NULL,'Both','3742818616',NULL,'Sample Data','Alida','','Patel',1,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Mrs. Alida Patel',NULL,NULL,'1932-06-16',1,'2021-06-18',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Kandace','Ms. Kandace Samson',NULL,NULL,NULL,'3',NULL,'Both','4288681899',NULL,'Sample Data','Kandace','V','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Ms. Kandace Samson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (6,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,'2',NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Scarlet','Scarlet Patel',NULL,NULL,NULL,NULL,NULL,'Both','2187618008',NULL,'Sample Data','Scarlet','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Patel',NULL,1,'1939-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (8,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'iriswattson31@spamalot.co.nz','iriswattson31@spamalot.co.nz',NULL,NULL,NULL,'2',NULL,'Both','1937421790',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear iriswattson31@spamalot.co.nz',1,NULL,'Dear iriswattson31@spamalot.co.nz',1,NULL,'iriswattson31@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'chowski.laree43@lol.info','chowski.laree43@lol.info',NULL,NULL,NULL,NULL,NULL,'Both','866293519',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear chowski.laree43@lol.info',1,NULL,'Dear chowski.laree43@lol.info',1,NULL,'chowski.laree43@lol.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (10,'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,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González-Terry, Ivey','Ivey González-Terry',NULL,NULL,NULL,'1',NULL,'Both','1931106998',NULL,'Sample Data','Ivey','','González-Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey González-Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,'Montana Wellness Fund',NULL,NULL,61,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (12,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'tadams@notmail.info','tadams@notmail.info',NULL,NULL,NULL,'4',NULL,'Both','4175741154',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear tadams@notmail.info',1,NULL,'Dear tadams@notmail.info',1,NULL,'tadams@notmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (13,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,NULL,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,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (14,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'1',NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (15,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen-McReynolds, Ivey','Mrs. Ivey Jensen-McReynolds',NULL,NULL,NULL,'1',NULL,'Both','3957639264',NULL,'Sample Data','Ivey','K','Jensen-McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey Jensen-McReynolds',NULL,1,'1996-03-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (16,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Ivanov-Terry, Winford','Winford Ivanov-Terry Jr.',NULL,NULL,NULL,'5',NULL,'Both','2060404775',NULL,'Sample Data','Winford','A','Ivanov-Terry',NULL,1,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Ivanov-Terry Jr.',NULL,2,'2002-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (17,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Maria','Dr. Maria Samson',NULL,NULL,NULL,'2',NULL,'Both','1039221596',NULL,'Sample Data','Maria','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Samson',NULL,2,'1986-05-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (18,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Nielsen, Jacob','Jacob Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','1661720619',NULL,'Sample Data','Jacob','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Nielsen',NULL,2,'1936-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (19,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Allen','Mr. Allen Nielsen Jr.',NULL,NULL,NULL,'1',NULL,'Both','515166843',NULL,'Sample Data','Allen','S','Nielsen',3,1,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Nielsen Jr.',NULL,2,'1951-04-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (20,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen-McReynolds family','Jensen-McReynolds family',NULL,NULL,NULL,NULL,NULL,'Both','3760556971',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen-McReynolds family',5,NULL,'Dear Jensen-McReynolds family',2,NULL,'Jensen-McReynolds family',NULL,NULL,NULL,0,NULL,'Jensen-McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds-Jacobs, Shauna','Ms. Shauna Reynolds-Jacobs',NULL,NULL,NULL,'5',NULL,'Both','4110819282',NULL,'Sample Data','Shauna','','Reynolds-Jacobs',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Reynolds-Jacobs',NULL,NULL,'1964-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (22,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,'2',NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (23,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'sharynchowski25@example.net','sharynchowski25@example.net',NULL,NULL,NULL,'1',NULL,'Both','3526995091',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear sharynchowski25@example.net',1,NULL,'Dear sharynchowski25@example.net',1,NULL,'sharynchowski25@example.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (24,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Troy','Mr. Troy Jones II',NULL,NULL,NULL,'2',NULL,'Both','3350192471',NULL,'Sample Data','Troy','P','Jones',3,3,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Mr. Troy Jones II',NULL,2,'1945-09-30',1,'2021-08-24',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (25,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Green Legal Partnership','Green Legal Partnership',NULL,NULL,NULL,'4',NULL,'Both','675759569',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Green Legal Partnership',NULL,NULL,NULL,0,NULL,NULL,113,'Green Legal Partnership',NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (26,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley, Betty','Ms. Betty Barkley',NULL,NULL,NULL,'1',NULL,'Both','1739915993',NULL,'Sample Data','Betty','V','Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Ms. Betty Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (27,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Clint','Dr. Clint Jones III',NULL,NULL,NULL,'1',NULL,'Both','329949700',NULL,'Sample Data','Clint','','Jones',4,4,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Dr. Clint Jones III',NULL,NULL,'1981-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Beula','Beula Zope',NULL,NULL,NULL,NULL,NULL,'Both','963609507',NULL,'Sample Data','Beula','K','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Zope',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (29,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jacobs family','Jacobs family',NULL,NULL,NULL,'2',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,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (30,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Alexia','Ms. Alexia Jensen',NULL,NULL,NULL,NULL,NULL,'Both','1964478975',NULL,'Sample Data','Alexia','','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia Jensen',NULL,1,'1933-03-05',1,'2021-09-03',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (31,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Herminia','Mrs. Herminia Yadav',NULL,NULL,NULL,NULL,NULL,'Both','201559464',NULL,'Sample Data','Herminia','','Yadav',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Yadav',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Sonny','Sonny ÅÄ…chowski II',NULL,NULL,NULL,NULL,NULL,'Both','3611935208',NULL,'Sample Data','Sonny','I','ÅÄ…chowski',NULL,3,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny ÅÄ…chowski II',NULL,2,'1943-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (33,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Josefa','Mrs. Josefa Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3267028471',NULL,'Sample Data','Josefa','','Nielsen',1,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Mrs. Josefa Nielsen',NULL,1,'1951-07-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (34,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Olsen, Claudio','Mr. Claudio Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2795468404',NULL,'Sample Data','Claudio','','Olsen',3,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Mr. Claudio Olsen',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Omar','Omar Samson Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1847935667',NULL,'Sample Data','Omar','','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Samson Sr.',NULL,2,'1994-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (36,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Rolando','Mr. Rolando Bachman',NULL,NULL,NULL,NULL,NULL,'Both','1672731969',NULL,'Sample Data','Rolando','','Bachman',3,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Bachman',NULL,2,'1991-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (37,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Cooper family','Roberts-Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','3486201289',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts-Cooper family',5,NULL,'Dear Roberts-Cooper family',2,NULL,'Roberts-Cooper family',NULL,NULL,NULL,0,NULL,'Roberts-Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (38,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'sw.chowski12@mymail.co.in','sw.chowski12@mymail.co.in',NULL,NULL,NULL,'2',NULL,'Both','1520759043',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear sw.chowski12@mymail.co.in',1,NULL,'Dear sw.chowski12@mymail.co.in',1,NULL,'sw.chowski12@mymail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:26'), + (39,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'irvinw9@testing.co.nz','irvinw9@testing.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1552090549',NULL,'Sample Data',NULL,NULL,NULL,3,2,NULL,NULL,1,NULL,'Dear irvinw9@testing.co.nz',1,NULL,'Dear irvinw9@testing.co.nz',1,NULL,'irvinw9@testing.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:22'), + (40,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Pine Sustainability Partners','Pine Sustainability Partners',NULL,NULL,NULL,'2',NULL,'Both','2485636112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Sustainability Partners',NULL,NULL,NULL,0,NULL,NULL,163,'Pine Sustainability Partners',NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (41,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Texas Arts Trust','Texas Arts Trust',NULL,NULL,NULL,'2',NULL,'Both','244294965',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Texas Arts Trust',NULL,NULL,NULL,0,NULL,NULL,60,'Texas Arts Trust',NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:25'), + (42,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,'1',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,'2021-11-08 01:45:21','2021-11-08 01:45:24'), + (43,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Lincoln','Lincoln Jameson II',NULL,NULL,NULL,'5',NULL,'Both','2753899992',NULL,'Sample Data','Lincoln','','Jameson',NULL,3,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Jameson II',NULL,2,'1950-08-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:21','2021-11-08 01:45:23'), + (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Teresa','Mrs. Teresa Blackwell',NULL,NULL,NULL,'5',NULL,'Both','709634548',NULL,'Sample Data','Teresa','','Blackwell',1,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Mrs. Teresa Blackwell',NULL,1,'1990-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kiara','Kiara Barkley',NULL,NULL,NULL,'4',NULL,'Both','2141749595',NULL,'Sample Data','Kiara','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Felisha','Ms. Felisha Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3817317933',NULL,'Sample Data','Felisha','G','Reynolds',2,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Ms. Felisha Reynolds',NULL,NULL,'1984-05-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (47,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov-Terry, Scarlet','Dr. Scarlet Ivanov-Terry',NULL,NULL,NULL,'1',NULL,'Both','1749168864',NULL,'Sample Data','Scarlet','Q','Ivanov-Terry',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet Ivanov-Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (48,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson family','Wattson family',NULL,NULL,NULL,NULL,NULL,'Both','2851339192',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson family',5,NULL,'Dear Wattson family',2,NULL,'Wattson family',NULL,NULL,NULL,0,NULL,'Wattson family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (49,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'New Mexico Peace Association','New Mexico Peace Association',NULL,NULL,NULL,NULL,NULL,'Both','2587918858',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New Mexico Peace Association',NULL,NULL,NULL,0,NULL,NULL,172,'New Mexico Peace Association',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (50,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson family','Wattson family',NULL,NULL,NULL,NULL,NULL,'Both','2851339192',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson family',5,NULL,'Dear Wattson family',2,NULL,'Wattson family',NULL,NULL,NULL,0,NULL,'Wattson family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (51,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts-Cooper, Kacey','Kacey Roberts-Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3432513614',NULL,'Sample Data','Kacey','R','Roberts-Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Roberts-Cooper',NULL,NULL,'1982-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (52,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell family','Blackwell family',NULL,NULL,NULL,NULL,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,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Juliann','Ms. Juliann Müller',NULL,NULL,NULL,NULL,NULL,'Both','307897793',NULL,'Sample Data','Juliann','','Müller',2,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Ms. Juliann Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Russell','Mr. Russell Cruz',NULL,NULL,NULL,'4',NULL,'Both','3756174623',NULL,'Sample Data','Russell','A','Cruz',3,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Mr. Russell Cruz',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (55,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Landon','Dr. Landon Wilson Sr.',NULL,NULL,NULL,'5',NULL,'Both','2234178056',NULL,'Sample Data','Landon','N','Wilson',4,2,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Wilson Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (56,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Heidi','Mrs. Heidi Zope',NULL,NULL,NULL,NULL,NULL,'Both','2699150124',NULL,'Sample Data','Heidi','N','Zope',1,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Mrs. Heidi Zope',NULL,NULL,'1933-03-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (57,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Teddy','Mr. Teddy Yadav',NULL,NULL,NULL,'1',NULL,'Both','456817363',NULL,'Sample Data','Teddy','E','Yadav',3,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Mr. Teddy Yadav',NULL,NULL,'1978-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Tanya','Ms. Tanya Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2047603331',NULL,'Sample Data','Tanya','Y','Bachman',2,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Ms. Tanya Bachman',NULL,1,'1989-03-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (59,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Elizabeth','Elizabeth Smith',NULL,NULL,NULL,NULL,NULL,'Both','3537144682',NULL,'Sample Data','Elizabeth','G','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Smith',NULL,1,'1970-01-02',0,NULL,NULL,NULL,'Bay Health Association',NULL,NULL,186,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (60,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'terrell.s.shad6@spamalot.com','terrell.s.shad6@spamalot.com',NULL,NULL,NULL,'1',NULL,'Both','2704554545',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear terrell.s.shad6@spamalot.com',1,NULL,'Dear terrell.s.shad6@spamalot.com',1,NULL,'terrell.s.shad6@spamalot.com',NULL,NULL,NULL,0,NULL,NULL,NULL,'Texas Arts Trust',NULL,NULL,41,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (61,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Montana Wellness Fund','Montana Wellness Fund',NULL,NULL,NULL,NULL,NULL,'Both','1025221237',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Montana Wellness Fund',NULL,NULL,NULL,0,NULL,NULL,11,'Montana Wellness Fund',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (62,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Terry family','Ivanov-Terry family',NULL,NULL,NULL,NULL,NULL,'Both','3373265936',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov-Terry family',5,NULL,'Dear Ivanov-Terry family',2,NULL,'Ivanov-Terry family',NULL,NULL,NULL,0,NULL,'Ivanov-Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Magan','Ms. Magan Yadav',NULL,NULL,NULL,'5',NULL,'Both','88790956',NULL,'Sample Data','Magan','Y','Yadav',2,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Ms. Magan Yadav',NULL,1,'1961-02-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (64,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Ashley','Ashley Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2224166572',NULL,'Sample Data','Ashley','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (65,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Tanya','Tanya Roberts',NULL,NULL,NULL,'4',NULL,'Both','1629633174',NULL,'Sample Data','Tanya','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Roberts',NULL,1,'1985-02-22',0,NULL,NULL,NULL,'Minnesota Sports Partnership',NULL,NULL,136,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Alexia','Ms. Alexia ÅÄ…chowski',NULL,NULL,NULL,'2',NULL,'Both','3395751450',NULL,'Sample Data','Alexia','Z','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia ÅÄ…chowski',NULL,1,'1953-12-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Tanya','Tanya Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','831686390',NULL,'Sample Data','Tanya','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Nielsen',NULL,NULL,'1964-05-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (68,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen-McReynolds, Maria','Mr. Maria Jensen-McReynolds Sr.',NULL,NULL,NULL,'1',NULL,'Both','3456849297',NULL,'Sample Data','Maria','O','Jensen-McReynolds',3,2,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Mr. Maria Jensen-McReynolds Sr.',NULL,NULL,'1986-12-15',0,NULL,NULL,NULL,'Rural Literacy Alliance',NULL,NULL,72,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Ashlie','Ashlie Wattson',NULL,NULL,NULL,NULL,NULL,'Both','1891614450',NULL,'Sample Data','Ashlie','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Wattson',NULL,NULL,'1982-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (70,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Caulder Food Systems','Caulder Food Systems',NULL,NULL,NULL,NULL,NULL,'Both','824705805',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Caulder Food Systems',NULL,NULL,NULL,0,NULL,NULL,171,'Caulder Food Systems',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (71,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Lou','Lou ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','4023887052',NULL,'Sample Data','Lou','B','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (72,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Rural Literacy Alliance','Rural Literacy Alliance',NULL,NULL,NULL,NULL,NULL,'Both','458811083',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Literacy Alliance',NULL,NULL,NULL,0,NULL,NULL,68,'Rural Literacy Alliance',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Elina','Dr. Elina Müller',NULL,NULL,NULL,NULL,NULL,'Both','4147818089',NULL,'Sample Data','Elina','','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Dr. Elina Müller',NULL,NULL,'1998-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (74,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Angelika','Mrs. Angelika McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','3667136043',NULL,'Sample Data','Angelika','E','McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Mrs. Angelika McReynolds',NULL,1,'1957-05-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (75,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Josefa','Josefa Terrell',NULL,NULL,NULL,'5',NULL,'Both','1943995687',NULL,'Sample Data','Josefa','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Terrell',NULL,1,'2009-08-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (76,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Nicole','Mrs. Nicole Grant',NULL,NULL,NULL,'1',NULL,'Both','2858185937',NULL,'Sample Data','Nicole','P','Grant',1,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Mrs. Nicole Grant',NULL,1,'1987-05-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Ray','Ray Jacobs Jr.',NULL,NULL,NULL,'3',NULL,'Both','50050695',NULL,'Sample Data','Ray','X','Jacobs',NULL,1,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Jacobs Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Beula','Beula Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3375880084',NULL,'Sample Data','Beula','J','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Errol','Errol Adams',NULL,NULL,NULL,'5',NULL,'Both','776489041',NULL,'Sample Data','Errol','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Adams',NULL,2,'1954-02-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (80,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Friends Environmental School','Friends Environmental School',NULL,NULL,NULL,NULL,NULL,'Both','1418277748',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Environmental School',NULL,NULL,NULL,0,NULL,NULL,185,'Friends Environmental School',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (81,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'lincolnt@airmail.net','lincolnt@airmail.net',NULL,NULL,NULL,'3',NULL,'Both','521426220',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear lincolnt@airmail.net',1,NULL,'Dear lincolnt@airmail.net',1,NULL,'lincolnt@airmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (82,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Norris','Mr. Norris ÅÄ…chowski Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1332829607',NULL,'Sample Data','Norris','G','ÅÄ…chowski',3,1,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Mr. Norris ÅÄ…chowski Jr.',NULL,NULL,'1960-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (83,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Barkley, Ashlie','Ms. Ashlie Barkley',NULL,NULL,NULL,'3',NULL,'Both','1002355994',NULL,'Sample Data','Ashlie','','Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ms. Ashlie Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (84,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Grant, Russell','Dr. Russell Grant',NULL,NULL,NULL,NULL,NULL,'Both','388937713',NULL,'Sample Data','Russell','','Grant',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Grant',NULL,2,'1933-03-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Winford','Dr. Winford Cooper',NULL,NULL,NULL,'5',NULL,'Both','1891762669',NULL,'Sample Data','Winford','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Dr. Winford Cooper',NULL,2,NULL,0,NULL,NULL,NULL,'Urban Advocacy Association',NULL,NULL,137,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Herminia','Herminia Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3243130524',NULL,'Sample Data','Herminia','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Roberts',NULL,1,'1947-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (87,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson, Betty','Betty Wattson',NULL,NULL,NULL,'4',NULL,'Both','1650634236',NULL,'Sample Data','Betty','C','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Teresa','Teresa Deforest',NULL,NULL,NULL,'2',NULL,'Both','1966517913',NULL,'Sample Data','Teresa','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Erik','Erik Lee Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3144007526',NULL,'Sample Data','Erik','G','Lee',NULL,2,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Lee Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (90,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Legal Partnership','Urban Legal Partnership',NULL,NULL,NULL,'3',NULL,'Both','3819535733',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Legal Partnership',NULL,NULL,NULL,0,NULL,NULL,175,'Urban Legal Partnership',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (91,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Pittsburgh Culture Initiative','Pittsburgh Culture Initiative',NULL,NULL,NULL,'4',NULL,'Both','4202767107',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pittsburgh Culture Initiative',NULL,NULL,NULL,0,NULL,NULL,97,'Pittsburgh Culture Initiative',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (92,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wagner, Damaris','Damaris Wagner',NULL,NULL,NULL,'2',NULL,'Both','2489613287',NULL,'Sample Data','Damaris','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (93,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Adams, Lincoln','Lincoln Adams',NULL,NULL,NULL,NULL,NULL,'Both','3895803165',NULL,'Sample Data','Lincoln','O','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Adams',NULL,2,NULL,0,NULL,NULL,NULL,'Hampden Technology Systems',NULL,NULL,198,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (94,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Wagner, Allan','Allan Wagner',NULL,NULL,NULL,NULL,NULL,'Both','181008851',NULL,'Sample Data','Allan','L','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Wagner',NULL,2,'1946-08-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Maria','Maria Blackwell',NULL,NULL,NULL,'5',NULL,'Both','2448837724',NULL,'Sample Data','Maria','E','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Iris','Iris Jameson',NULL,NULL,NULL,NULL,NULL,'Both','4047916660',NULL,'Sample Data','Iris','Y','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Jameson',NULL,1,'1958-02-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (97,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman-Terrell, Ashley','Ashley Bachman-Terrell II',NULL,NULL,NULL,NULL,NULL,'Both','3325344054',NULL,'Sample Data','Ashley','G','Bachman-Terrell',NULL,3,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Bachman-Terrell II',NULL,2,NULL,0,NULL,NULL,NULL,'Pittsburgh Culture Initiative',NULL,NULL,91,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (98,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner family','Wagner family',NULL,NULL,NULL,'1',NULL,'Both','1570966486',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner family',5,NULL,'Dear Wagner family',2,NULL,'Wagner family',NULL,NULL,NULL,0,NULL,'Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (99,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Parker family','ÅÄ…chowski-Parker family',NULL,NULL,NULL,NULL,NULL,'Both','3253931273',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski-Parker family',5,NULL,'Dear ÅÄ…chowski-Parker family',2,NULL,'ÅÄ…chowski-Parker family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski-Parker family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (100,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, BrzÄ™czysÅ‚aw','Dr. BrzÄ™czysÅ‚aw Terry',NULL,NULL,NULL,NULL,NULL,'Both','884241841',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Terry',4,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dr. BrzÄ™czysÅ‚aw Terry',NULL,NULL,'1969-04-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Carlos','Carlos Terry',NULL,NULL,NULL,'4',NULL,'Both','2569842275',NULL,'Sample Data','Carlos','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (102,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Esta','Esta Terrell',NULL,NULL,NULL,'5',NULL,'Both','3319173143',NULL,'Sample Data','Esta','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Terrell',NULL,1,'1991-12-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Rebekah','Rebekah Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','1071377932',NULL,'Sample Data','Rebekah','B','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Brigette','Dr. Brigette Cooper',NULL,NULL,NULL,'3',NULL,'Both','1627670122',NULL,'Sample Data','Brigette','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Dr. Brigette Cooper',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (105,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Grant, Ray','Mr. Ray Grant III',NULL,NULL,NULL,'5',NULL,'Both','2294694701',NULL,'Sample Data','Ray','T','Grant',3,4,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Grant III',NULL,2,'1969-03-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (106,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Texas Literacy Network','Texas Literacy Network',NULL,NULL,NULL,'2',NULL,'Both','869725599',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Texas Literacy Network',NULL,NULL,NULL,0,NULL,NULL,126,'Texas Literacy Network',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Juliann','Juliann ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','3477087731',NULL,'Sample Data','Juliann','L','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann ÅÄ…chowski',NULL,1,'1971-01-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wattsonr19@testing.com','wattsonr19@testing.com',NULL,NULL,NULL,NULL,NULL,'Both','699649653',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear wattsonr19@testing.com',1,NULL,'Dear wattsonr19@testing.com',1,NULL,'wattsonr19@testing.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (109,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Food Alliance','Rural Food Alliance',NULL,NULL,NULL,NULL,NULL,'Both','519776054',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Food Alliance',NULL,NULL,NULL,0,NULL,NULL,170,'Rural Food Alliance',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Santina','Santina Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','3622291687',NULL,'Sample Data','Santina','Y','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Blackwell',NULL,1,'1964-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (111,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Beula','Beula Parker',NULL,NULL,NULL,'1',NULL,'Both','1115460159',NULL,'Sample Data','Beula','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Parker',NULL,1,'1969-03-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'nielsen.carlos78@sample.co.nz','nielsen.carlos78@sample.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1014307113',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear nielsen.carlos78@sample.co.nz',1,NULL,'Dear nielsen.carlos78@sample.co.nz',1,NULL,'nielsen.carlos78@sample.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (113,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Parker, Brittney','Brittney ÅÄ…chowski-Parker',NULL,NULL,NULL,NULL,NULL,'Both','3786512616',NULL,'Sample Data','Brittney','','ÅÄ…chowski-Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney ÅÄ…chowski-Parker',NULL,1,'2016-04-26',0,NULL,NULL,NULL,'Green Legal Partnership',NULL,NULL,25,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (114,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wagner, Lou','Lou Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2041146413',NULL,'Sample Data','Lou','I','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Wagner',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (115,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Arlyne','Arlyne Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','3683142740',NULL,'Sample Data','Arlyne','J','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Jacobs',NULL,1,'2007-04-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Cooper, Russell','Mr. Russell Roberts-Cooper III',NULL,NULL,NULL,'3',NULL,'Both','3368085873',NULL,'Sample Data','Russell','','Roberts-Cooper',3,4,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Mr. Russell Roberts-Cooper III',NULL,NULL,'1999-11-27',0,NULL,NULL,NULL,'New York Wellness Network',NULL,NULL,201,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (117,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Adams family','Adams family',NULL,NULL,NULL,NULL,NULL,'Both','1515323104',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams family',5,NULL,'Dear Adams family',2,NULL,'Adams family',NULL,NULL,NULL,0,NULL,'Adams family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (118,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wattson, Lincoln','Dr. Lincoln Wattson',NULL,NULL,NULL,NULL,NULL,'Both','3929927020',NULL,'Sample Data','Lincoln','L','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Wattson',NULL,NULL,'1999-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Ray','Ray Bachman Sr.',NULL,NULL,NULL,'3',NULL,'Both','560571069',NULL,'Sample Data','Ray','S','Bachman',NULL,2,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Bachman Sr.',NULL,2,'1987-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'princessterry10@example.co.uk','princessterry10@example.co.uk',NULL,NULL,NULL,'5',NULL,'Both','1754169812',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear princessterry10@example.co.uk',1,NULL,'Dear princessterry10@example.co.uk',1,NULL,'princessterry10@example.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (121,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper, Elbert','Dr. Elbert Cooper',NULL,NULL,NULL,'2',NULL,'Both','2147415663',NULL,'Sample Data','Elbert','G','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Dr. Elbert Cooper',NULL,NULL,'1972-02-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (122,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Lawerence','Lawerence Wagner Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1509313186',NULL,'Sample Data','Lawerence','U','Wagner',NULL,1,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Wagner Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Errol','Mr. Errol Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3627934252',NULL,'Sample Data','Errol','','Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Barkley',NULL,2,'1961-12-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (124,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'zopea@testing.biz','zopea@testing.biz',NULL,NULL,NULL,'4',NULL,'Both','1433028632',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear zopea@testing.biz',1,NULL,'Dear zopea@testing.biz',1,NULL,'zopea@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (125,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Lincoln Family Fund','Lincoln Family Fund',NULL,NULL,NULL,'4',NULL,'Both','2294127667',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Family Fund',NULL,NULL,NULL,0,NULL,NULL,188,'Lincoln Family Fund',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Delana','Mrs. Delana Cooper',NULL,NULL,NULL,'1',NULL,'Both','3587056098',NULL,'Sample Data','Delana','','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Cooper',NULL,1,'1973-04-29',0,NULL,NULL,NULL,'Texas Literacy Network',NULL,NULL,106,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (127,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Teddy','Teddy Zope',NULL,NULL,NULL,'2',NULL,'Both','278805144',NULL,'Sample Data','Teddy','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Zope',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (128,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Terrell family','Bachman-Terrell family',NULL,NULL,NULL,NULL,NULL,'Both','1299140272',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman-Terrell family',5,NULL,'Dear Bachman-Terrell family',2,NULL,'Bachman-Terrell family',NULL,NULL,NULL,0,NULL,'Bachman-Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (129,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Kenny','Mr. Kenny Samson II',NULL,NULL,NULL,NULL,NULL,'Both','1958901038',NULL,'Sample Data','Kenny','J','Samson',3,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Samson II',NULL,2,'1986-12-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope-Wagner, Brittney','Brittney Zope-Wagner',NULL,NULL,NULL,'3',NULL,'Both','2644565142',NULL,'Sample Data','Brittney','F','Zope-Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Zope-Wagner',NULL,1,'1997-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (131,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'blackwell.ray24@sample.co.pl','blackwell.ray24@sample.co.pl',NULL,NULL,NULL,'1',NULL,'Both','112298700',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear blackwell.ray24@sample.co.pl',1,NULL,'Dear blackwell.ray24@sample.co.pl',1,NULL,'blackwell.ray24@sample.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (132,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Angelika','Angelika Terry',NULL,NULL,NULL,'1',NULL,'Both','1807339903',NULL,'Sample Data','Angelika','L','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Terry',NULL,NULL,'1967-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Jerome','Jerome Terrell II',NULL,NULL,NULL,'2',NULL,'Both','1759372007',NULL,'Sample Data','Jerome','R','Terrell',NULL,3,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Jerome Terrell II',NULL,NULL,'2012-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (134,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Delana','Ms. Delana Roberts',NULL,NULL,NULL,NULL,NULL,'Both','944253151',NULL,'Sample Data','Delana','B','Roberts',2,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Ms. Delana Roberts',NULL,1,'1990-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (135,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav family','Yadav family',NULL,NULL,NULL,'2',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,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (136,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Minnesota Sports Partnership','Minnesota Sports Partnership',NULL,NULL,NULL,NULL,NULL,'Both','872903292',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Minnesota Sports Partnership',NULL,NULL,NULL,0,NULL,NULL,65,'Minnesota Sports Partnership',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (137,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Advocacy Association','Urban Advocacy Association',NULL,NULL,NULL,'4',NULL,'Both','3262072481',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Advocacy Association',NULL,NULL,NULL,0,NULL,NULL,85,'Urban Advocacy Association',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (138,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Zope, Merrie','Merrie Samson-Zope',NULL,NULL,NULL,NULL,NULL,'Both','1960037636',NULL,'Sample Data','Merrie','V','Samson-Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Samson-Zope',NULL,NULL,'1971-12-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Allan','Dr. Allan Blackwell Sr.',NULL,NULL,NULL,'2',NULL,'Both','3904004195',NULL,'Sample Data','Allan','G','Blackwell',4,2,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Dr. Allan Blackwell Sr.',NULL,2,'1995-05-15',0,NULL,NULL,NULL,'Friends Music Solutions',NULL,NULL,194,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'deforest.heidi66@lol.co.in','deforest.heidi66@lol.co.in',NULL,NULL,NULL,'1',NULL,'Both','341501366',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear deforest.heidi66@lol.co.in',1,NULL,'Dear deforest.heidi66@lol.co.in',1,NULL,'deforest.heidi66@lol.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (141,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Allen','Allen ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','3162448518',NULL,'Sample Data','Allen','Q','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen ÅÄ…chowski',NULL,NULL,'1993-08-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (142,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'yadavl18@testmail.org','yadavl18@testmail.org',NULL,NULL,NULL,'4',NULL,'Both','1880301695',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear yadavl18@testmail.org',1,NULL,'Dear yadavl18@testmail.org',1,NULL,'yadavl18@testmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Teddy','Dr. Teddy Prentice Sr.',NULL,NULL,NULL,'4',NULL,'Both','3075761968',NULL,'Sample Data','Teddy','C','Prentice',4,2,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Prentice Sr.',NULL,NULL,'1971-06-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (144,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'jensenp@testing.info','jensenp@testing.info',NULL,NULL,NULL,NULL,NULL,'Both','1940085944',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jensenp@testing.info',1,NULL,'Dear jensenp@testing.info',1,NULL,'jensenp@testing.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (145,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Eleonor','Eleonor Terry',NULL,NULL,NULL,NULL,NULL,'Both','1084560931',NULL,'Sample Data','Eleonor','X','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Rebekah','Rebekah Müller',NULL,NULL,NULL,NULL,NULL,'Both','3543648262',NULL,'Sample Data','Rebekah','I','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Herminia','Herminia Terrell',NULL,NULL,NULL,NULL,NULL,'Both','733622742',NULL,'Sample Data','Herminia','H','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Terrell',NULL,NULL,'1956-02-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Kenny','Dr. Kenny Terrell Jr.',NULL,NULL,NULL,NULL,NULL,'Both','614922505',NULL,'Sample Data','Kenny','Q','Terrell',4,1,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Terrell Jr.',NULL,2,'1981-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (149,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Sonny','Sonny Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3391307655',NULL,'Sample Data','Sonny','S','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Ivanov',NULL,2,'1956-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (150,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Margaret','Dr. Margaret Patel',NULL,NULL,NULL,'1',NULL,'Both','1725329639',NULL,'Sample Data','Margaret','V','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Dr. Margaret Patel',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (151,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Jed','Mr. Jed Reynolds III',NULL,NULL,NULL,'1',NULL,'Both','3784848515',NULL,'Sample Data','Jed','E','Reynolds',3,4,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Mr. Jed Reynolds III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Rosario','Mr. Rosario Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2731752816',NULL,'Sample Data','Rosario','','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Terrell',NULL,2,'1970-07-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (153,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'sanfordsamuels53@sample.info','sanfordsamuels53@sample.info',NULL,NULL,NULL,NULL,NULL,'Both','651214491',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear sanfordsamuels53@sample.info',1,NULL,'Dear sanfordsamuels53@sample.info',1,NULL,'sanfordsamuels53@sample.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (154,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Blackwell, Damaris','Damaris Blackwell',NULL,NULL,NULL,'4',NULL,'Both','4185005252',NULL,'Sample Data','Damaris','X','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Blackwell',NULL,1,'2012-09-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (155,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Jina','Mrs. Jina ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','4065988488',NULL,'Sample Data','Jina','E','ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Mrs. Jina ÅÄ…chowski',NULL,1,'1990-10-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Omar','Omar Jacobs',NULL,NULL,NULL,'5',NULL,'Both','916847831',NULL,'Sample Data','Omar','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Jacobs',NULL,2,'1983-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (157,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Wattson, Beula','Dr. Beula Wattson',NULL,NULL,NULL,NULL,NULL,'Both','4074227652',NULL,'Sample Data','Beula','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Dr. Beula Wattson',NULL,1,'1984-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (158,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Bryon','Dr. Bryon Wattson Sr.',NULL,NULL,NULL,'4',NULL,'Both','2375098324',NULL,'Sample Data','Bryon','','Wattson',4,2,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Dr. Bryon Wattson Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Erik','Erik Adams Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1567928244',NULL,'Sample Data','Erik','','Adams',NULL,1,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Adams Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (160,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Grant-Barkley, Princess','Princess Grant-Barkley',NULL,NULL,NULL,'3',NULL,'Both','3111363032',NULL,'Sample Data','Princess','Q','Grant-Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Grant-Barkley',NULL,NULL,'1959-05-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'blackwell.billy@spamalot.co.uk','blackwell.billy@spamalot.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2751681838',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear blackwell.billy@spamalot.co.uk',1,NULL,'Dear blackwell.billy@spamalot.co.uk',1,NULL,'blackwell.billy@spamalot.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (162,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Grant, Allen','Mr. Allen Grant',NULL,NULL,NULL,NULL,NULL,'Both','4083242837',NULL,'Sample Data','Allen','J','Grant',3,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Grant',NULL,2,'1957-02-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Alida','Dr. Alida Adams',NULL,NULL,NULL,NULL,NULL,'Both','3862439898',NULL,'Sample Data','Alida','','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Dr. Alida Adams',NULL,1,NULL,0,NULL,NULL,NULL,'Pine Sustainability Partners',NULL,NULL,40,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Ashley','Ms. Ashley Jacobs',NULL,NULL,NULL,'2',NULL,'Both','2224166572',NULL,'Sample Data','Ashley','J','Jacobs',2,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ms. Ashley Jacobs',NULL,NULL,'1974-01-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (165,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Sustainability Systems','Creative Sustainability Systems',NULL,NULL,NULL,'5',NULL,'Both','3851780151',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Sustainability Systems',NULL,NULL,NULL,0,NULL,NULL,NULL,'Creative Sustainability Systems',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Norris','Dr. Norris Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','2363431158',NULL,'Sample Data','Norris','','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Nielsen',NULL,NULL,'1978-06-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (167,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Bryon','Mr. Bryon ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','2870735339',NULL,'Sample Data','Bryon','','ÅÄ…chowski',3,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon ÅÄ…chowski',NULL,NULL,'1978-09-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (168,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Scott','Scott ÅÄ…chowski',NULL,NULL,NULL,'2',NULL,'Both','1388417537',NULL,'Sample Data','Scott','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Alexia','Alexia Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','164186955',NULL,'Sample Data','Alexia','K','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (170,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cruz, Billy','Dr. Billy Cruz',NULL,NULL,NULL,NULL,NULL,'Both','2613422700',NULL,'Sample Data','Billy','P','Cruz',4,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Cruz',NULL,2,'1992-12-26',0,NULL,NULL,NULL,'Rural Food Alliance',NULL,NULL,109,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Lincoln','Dr. Lincoln Terry Sr.',NULL,NULL,NULL,'3',NULL,'Both','2249730385',NULL,'Sample Data','Lincoln','L','Terry',4,2,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Terry Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,'Caulder Food Systems',NULL,NULL,70,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (172,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Wattson Sr.',NULL,NULL,NULL,'5',NULL,'Both','1189364369',NULL,'Sample Data','BrzÄ™czysÅ‚aw','K','Wattson',NULL,2,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Wattson Sr.',NULL,2,'1975-04-18',0,NULL,NULL,NULL,'New Mexico Peace Association',NULL,NULL,49,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (173,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Zope family','Zope family',NULL,NULL,NULL,'5',NULL,'Both','1649131487',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Zope family',5,NULL,'Dear Zope family',2,NULL,'Zope family',NULL,NULL,NULL,0,NULL,'Zope family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Elizabeth','Elizabeth ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','281150468',NULL,'Sample Data','Elizabeth','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Elbert','Elbert Wattson',NULL,NULL,NULL,'3',NULL,'Both','2859781172',NULL,'Sample Data','Elbert','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Wattson',NULL,2,'1989-02-12',0,NULL,NULL,NULL,'Urban Legal Partnership',NULL,NULL,90,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Russell','Russell Zope Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3644168984',NULL,'Sample Data','Russell','F','Zope',NULL,1,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Zope Jr.',NULL,NULL,'1958-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Kandace','Mrs. Kandace Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1547944287',NULL,'Sample Data','Kandace','','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Mrs. Kandace Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (178,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'eo.olsen@fakemail.com','eo.olsen@fakemail.com',NULL,NULL,NULL,NULL,NULL,'Both','1664312511',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear eo.olsen@fakemail.com',1,NULL,'Dear eo.olsen@fakemail.com',1,NULL,'eo.olsen@fakemail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (179,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Terrell, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Terrell II',NULL,NULL,NULL,NULL,NULL,'Both','2155865046',NULL,'Sample Data','BrzÄ™czysÅ‚aw','R','Terrell',NULL,3,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Terrell II',NULL,2,'1961-12-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (180,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Jay','Jay Zope III',NULL,NULL,NULL,'1',NULL,'Both','819910080',NULL,'Sample Data','Jay','V','Zope',NULL,4,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Zope III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Shauna','Mrs. Shauna Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3670541313',NULL,'Sample Data','Shauna','','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Mrs. Shauna Cooper',NULL,1,'1948-05-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (182,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Shauna','Shauna Terry',NULL,NULL,NULL,'4',NULL,'Both','739503630',NULL,'Sample Data','Shauna','U','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Terry',NULL,1,'2013-04-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (183,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman-Terrell, Lincoln','Dr. Lincoln Bachman-Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2582627579',NULL,'Sample Data','Lincoln','I','Bachman-Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Bachman-Terrell',NULL,2,'1978-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (184,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell family','Terrell family',NULL,NULL,NULL,NULL,NULL,'Both','1136333121',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terrell family',5,NULL,'Dear Terrell family',2,NULL,'Terrell family',NULL,NULL,NULL,0,NULL,'Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:24'), + (185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Herminia','Dr. Herminia Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','176728020',NULL,'Sample Data','Herminia','','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Dr. Herminia Nielsen',NULL,1,'1983-09-23',0,NULL,NULL,NULL,'Friends Environmental School',NULL,NULL,80,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (186,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bay Health Association','Bay Health Association',NULL,NULL,NULL,'5',NULL,'Both','3033994325',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bay Health Association',NULL,NULL,NULL,0,NULL,NULL,59,'Bay Health Association',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'lp.bachman@testing.biz','lp.bachman@testing.biz',NULL,NULL,NULL,NULL,NULL,'Both','2723798316',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear lp.bachman@testing.biz',1,NULL,'Dear lp.bachman@testing.biz',1,NULL,'lp.bachman@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Teddy','Dr. Teddy Wagner III',NULL,NULL,NULL,NULL,NULL,'Both','796298897',NULL,'Sample Data','Teddy','','Wagner',4,4,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Wagner III',NULL,2,'1956-05-28',0,NULL,NULL,NULL,'Lincoln Family Fund',NULL,NULL,125,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (189,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Jacob','Jacob Jensen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1631509477',NULL,'Sample Data','Jacob','','Jensen',NULL,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Jensen Sr.',NULL,2,'1973-03-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (190,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Billy','Billy Wattson II',NULL,NULL,NULL,NULL,NULL,'Both','3097131221',NULL,'Sample Data','Billy','','Wattson',NULL,3,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Wattson II',NULL,2,'1990-03-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (191,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Kenny','Kenny Yadav',NULL,NULL,NULL,'5',NULL,'Both','250746844',NULL,'Sample Data','Kenny','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Yadav',NULL,2,'2006-04-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (192,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'ÅÄ…chowski-Parker, Clint','Clint ÅÄ…chowski-Parker',NULL,NULL,NULL,'2',NULL,'Both','2422770482',NULL,'Sample Data','Clint','H','ÅÄ…chowski-Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint ÅÄ…chowski-Parker',NULL,2,'2005-06-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (193,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'darenr92@testmail.com','darenr92@testmail.com',NULL,NULL,NULL,NULL,NULL,'Both','719925107',NULL,'Sample Data',NULL,NULL,NULL,4,1,NULL,NULL,1,NULL,'Dear darenr92@testmail.com',1,NULL,'Dear darenr92@testmail.com',1,NULL,'darenr92@testmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (194,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Friends Music Solutions','Friends Music Solutions',NULL,NULL,NULL,'2',NULL,'Both','3005596270',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Music Solutions',NULL,NULL,NULL,0,NULL,NULL,139,'Friends Music Solutions',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (195,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'roberts.winford@example.co.in','roberts.winford@example.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2690217593',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear roberts.winford@example.co.in',1,NULL,'Dear roberts.winford@example.co.in',1,NULL,'roberts.winford@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (196,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Yadav, Merrie','Merrie Yadav',NULL,NULL,NULL,'3',NULL,'Both','4091106765',NULL,'Sample Data','Merrie','W','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Yadav',NULL,1,'2007-12-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:26'), + (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Juliann','Juliann Terry',NULL,NULL,NULL,NULL,NULL,'Both','3154715143',NULL,'Sample Data','Juliann','G','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Terry',NULL,NULL,'1983-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:22'), + (198,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Hampden Technology Systems','Hampden Technology Systems',NULL,NULL,NULL,NULL,NULL,'Both','882880980',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hampden Technology Systems',NULL,NULL,NULL,0,NULL,NULL,93,'Hampden Technology Systems',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'), + (199,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Allen','Mr. Allen Blackwell III',NULL,NULL,NULL,'3',NULL,'Both','2363401575',NULL,'Sample Data','Allen','','Blackwell',3,4,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Blackwell III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Jackson','Jackson Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3356611835',NULL,'Sample Data','Jackson','N','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Barkley',NULL,2,'1950-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:23'), + (201,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'New York Wellness Network','New York Wellness Network',NULL,NULL,NULL,'3',NULL,'Both','989365924',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New York Wellness Network',NULL,NULL,NULL,0,NULL,NULL,116,'New York Wellness Network',NULL,NULL,NULL,0,'2021-11-08 01:45:22','2021-11-08 01:45:25'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -2143,86 +2165,86 @@ INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `co (11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), (12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), (13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (14,151,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'9249cb7cadfbcedf',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (15,100,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'5d62e290f28b6214',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (16,195,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'d7e7271b978072ec',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (17,41,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'cc8dfe766eec15c5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (18,134,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'4cd27d30c4988e79',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (19,2,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'0837ee63e0eea0bb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (20,192,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'4736a665de15b09e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (21,17,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'b7cb04328d929929',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (22,47,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'6b25541fbc9d5e1d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (23,75,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'0a0da521542739e7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (24,38,2,NULL,1,'2021-11-04 09:14:36',0.00,1200.00,NULL,NULL,'60b3e5c560c34fac',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (25,78,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'a12fd824f7201256',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (26,25,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'d1425db1d47c94ce',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (27,149,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'b0608498bb70e91e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (28,129,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'f5bd594372b40fe7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (29,93,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'be561cf630c20df8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (30,24,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'d0695216b217f937',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (31,173,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'1b90d55cc836b0f0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (32,107,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'0f9e32053715711b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (33,96,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'bf5b7a6ad37f72da',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (34,157,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'669ef73d6e7c5ad2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (35,82,2,NULL,1,'2021-11-04 09:14:36',0.00,1200.00,NULL,NULL,'96975bbb7f854512',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (36,32,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'794ea7f55e165e30',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (37,30,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'5940b1f6ba2aebba',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (38,12,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'476c4d57693181f7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (39,31,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'9c726373af8122e0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (40,114,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'21c8e675aa6df27e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (41,152,2,NULL,1,'2021-11-04 09:14:36',0.00,50.00,NULL,NULL,'439a5449d49edd9c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (42,92,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'9f4f885a8e009610',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (43,13,2,NULL,1,'2021-11-04 09:14:36',0.00,100.00,NULL,NULL,'ed1bc0cb5033abc9',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (45,124,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'ba6973b0284de4bd',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (46,163,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'9c4fc64b88cb5f98',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (47,150,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'095be97b05d700bf',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (48,111,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'a946ef185d632076',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (49,125,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'8dad83c7c624c8a7',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (50,18,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'c13f3e80ff3b5460',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (51,91,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'19196cd5c560b8be',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (52,60,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'4e7e821acfcc7726',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (53,198,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'433500b46409e20c',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (54,23,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'243bc1dd86679069',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (55,2,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'ee6786c403beeb99',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (56,66,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'2d46770e69249558',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (57,122,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'331dab468bdcb805',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (58,72,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'d747872c4854b5ba',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (59,51,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'fe06ccce9cb55d4c',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (60,112,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'d1959dd2b0153f93',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (61,68,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'0a3c5d73895170b2',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (62,77,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'22126116979211ac',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (63,100,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'d578e92e091cbb68',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (64,168,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'894b60fd94740677',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (65,3,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'0db3650885f05bfc',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (66,143,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'48a204e069f3d8d7',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (67,190,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'615303fe33609e20',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (68,99,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'eaf31bf40981aaa6',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (69,15,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'7bdb2cd1f0ebb255',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (70,26,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'856ed0e61af9ca3e',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (71,120,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'0a79bb6cc96db466',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (72,101,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'7632a8af96e6f24b',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (73,53,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'b65d93a72a76104c',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (74,83,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'6cfa90408ffaabfa',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (75,159,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'c1a74e4052ba5de9',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (76,126,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'ff9297ef685e5252',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (77,11,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'1535eb1cde8271e7',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (78,139,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'7e75a83735fecd55',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (79,184,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'a1c45a9e2933306c',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (80,185,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'d1b69f8d3d48a730',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (81,94,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'b476fad644d4f3f5',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (82,35,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'c02c67aa0055e0fe',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (83,138,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'ad919996527d9f93',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (84,65,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'e99ca4f738b292d3',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (85,104,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'f5daed1109b0a9ce',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (86,183,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'2e341c09093c3b2e',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (87,93,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'28547c36249abca1',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (88,5,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'2756fa9248eaf2d6',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (89,109,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'fbcb8b02bd1ba2a3',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (90,98,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'5eab6dbf3b12b368',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (91,34,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'05ad375cf25cda1a',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (92,89,4,NULL,1,'2021-11-04 09:14:37',0.00,50.00,NULL,NULL,'70652880df4033dd',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (93,21,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'c17f58602ae554cc',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (94,31,4,NULL,1,'2021-11-04 09:14:37',0.00,800.00,NULL,NULL,'963e55d7cc705ed0',NULL,NULL,'USD',NULL,NULL,'2021-11-04 09:14:37',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); + (14,154,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'734cd5f8b63827b4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,147,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'b937a07dff526392',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,32,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'0206be028c015c43',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,64,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'631f3fe0615fdb26',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,188,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'4923a106fe2efa8f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,131,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'93b08f908941a2b8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,2,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'4fda4d861542f0c7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,159,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'a9c9fcc2d0022842',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,21,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'25209c90fcce8f4d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,5,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'76f5d2b5ecf6a057',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,114,2,NULL,1,'2021-11-08 12:45:31',0.00,1200.00,NULL,NULL,'c4ea34baf2f07b65',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,100,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'67a378a01f3acd4a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,167,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'a3859f5e5b9d3509',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,110,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'3458d47f612d4dd1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,164,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'78c913a93a673539',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,138,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'e8f3f84ccf34ebca',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,45,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'4098a241ca942e78',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,63,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'0cc9e622885e15cd',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,82,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'5a9af2e3a08f87f6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,8,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'c59191f088f51a67',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,149,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'517baabfe0210630',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,93,2,NULL,1,'2021-11-08 12:45:31',0.00,1200.00,NULL,NULL,'764a745c81937fef',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,77,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'9f8c08e8a12416da',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,126,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'d0fb785a015b15d0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (38,187,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'6c9a30e1831e6c50',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (39,161,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'b871336c1222e8af',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (40,89,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'0ce85fe365867007',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (41,115,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'7024147ffffa3303',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (42,174,2,NULL,1,'2021-11-08 12:45:31',0.00,100.00,NULL,NULL,'ba1314b46b188739',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (43,30,2,NULL,1,'2021-11-08 12:45:31',0.00,50.00,NULL,NULL,'c67ec591d24054b7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (45,37,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'f532451267bc538e',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (46,108,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'c9f6e3185bb6e94f',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (47,90,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'337b161694b929d5',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (48,50,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'9f4ef0db69cde58a',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (49,118,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'c515ae68d6957e8d',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (50,63,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'f007972ccce04f5b',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (51,120,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'fe0022c95d0d2bed',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (52,97,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'3a25dac1c730b0f3',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (53,26,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'f02cdfb25cc9efb8',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (54,128,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'cc562fa3319f8747',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (55,158,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'7899bdaeb06e34a3',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (56,134,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'3e1e195c329a9a2b',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (57,113,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'d3623bc9a7a6ef86',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (58,30,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'93ecce4a9280fc82',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (59,161,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'542b8b6f852822c0',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (60,195,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'39722a9c6339472d',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (61,76,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'94482f0de63c6add',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (62,138,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'3e6b139ed522f0c9',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (63,170,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'ec6ffedbfcdf0413',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (64,139,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'021f81f87ec9e3d0',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (65,192,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'c64837d39c4128d9',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (66,121,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'83357f98033ee2ee',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (67,9,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'cbbcbb2ddcf39a87',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (68,185,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'a8dd0206475b0e32',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (69,41,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'42d9f8cd5b1224be',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (70,16,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'84cb9390d37934a0',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (71,71,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'a005b75c0706ba23',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (72,100,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'2fd036c8539e0bee',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (73,10,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'c44dee23c06c3c1f',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (74,62,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'7984ed96762df330',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (75,129,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'d86139d5277e1e15',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (76,25,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'9295d2b81d4cc8cc',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (77,29,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'1bb1d59634b6f89a',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (78,32,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'bcc697c83eaccd99',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (79,151,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'02d8318c37fd792e',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (80,47,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'09ef5cb7ce46311e',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (81,196,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'29a7df7302056b9f',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (82,55,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'add0d442e34f6603',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (83,5,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'e7a00445b4c39db2',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (84,21,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'a3066da230c71982',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (85,61,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'c04b76647072cde7',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (86,155,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'d8ddc2769fc79601',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (87,156,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'55d37a2ecb664470',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (88,159,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'769ac96f0ffcfdc6',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (89,179,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'a7a37e2b50459931',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (90,201,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'56e313e72686e972',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (91,79,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'2e58802d1956b024',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (92,107,4,NULL,1,'2021-11-08 12:45:32',0.00,50.00,NULL,NULL,'c5ef6dd94e8502a8',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (93,92,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'068336af99de18e7',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (94,4,4,NULL,1,'2021-11-08 12:45:32',0.00,800.00,NULL,NULL,'05cb89587d33b389',NULL,NULL,'USD',NULL,NULL,'2021-11-08 12:45:32',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; @@ -2264,8 +2286,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_soft` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_soft` DISABLE KEYS */; INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES - (1,8,29,10.00,'USD',1,1,'Jones Family','Helping Hands',10), - (2,9,29,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); + (1,8,185,10.00,'USD',1,1,'Jones Family','Helping Hands',10), + (2,9,185,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -2601,7 +2623,7 @@ INSERT INTO `civicrm_currency` (`id`, `name`, `symbol`, `numeric_code`, `full_na (37,'BSD','$','044','Bahamian Dollar'), (38,'BTN',NULL,'064','Bhutan Ngultrum'), (39,'BWP','P','072','Botswana Pula'), - (40,'BYR','p.','974','Belarussian Rouble'), + (40,'BYN','p.','974','Belarussian Rouble'), (41,'BZD','BZ$','084','Belize Dollar'), (42,'CDF',NULL,'976','Franc Congolais'), (43,'CHE',NULL,'947','WIR Euro'), @@ -2628,7 +2650,7 @@ INSERT INTO `civicrm_currency` (`id`, `name`, `symbol`, `numeric_code`, `full_na (65,'FJD','$','242','Fiji Dollar'), (66,'FKP','£','238','Falkland Islands Pound'), (67,'GEL',NULL,'981','Georgian Lari'), - (68,'GHC','¢','288','Ghanaian Cedi'), + (68,'GHS','¢','288','Ghanaian Cedi'), (69,'GIP','£','292','Gibraltar Pound'), (70,'GMD',NULL,'270','Gambian Dalasi'), (71,'GNF',NULL,'324','Guinea Franc'), @@ -2874,7 +2896,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES - (1,'Default Domain Name',NULL,'5.44.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); + (1,'Default Domain Name',NULL,'5.45.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -2886,195 +2908,203 @@ LOCK TABLES `civicrm_email` WRITE; /*!40000 ALTER TABLE `civicrm_email` DISABLE KEYS */; INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (2,19,1,'cruz.elbert27@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (3,162,1,'samuelsa@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (4,162,1,'samuels.ashlie@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (5,29,1,'errollee@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (6,84,1,'mcreynolds.princess94@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (7,67,1,'wattson.jina8@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (8,67,1,'wattsonj13@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (9,123,1,'samuels.angelika59@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (10,153,1,'kaceycooper30@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), - (11,124,1,'jsmith53@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (12,184,1,'bettyp37@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (13,78,1,'nc.lee@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (14,10,1,'andrewsamson@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (15,121,1,'terrell.p.rebekah41@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (16,121,1,'rp.terrell31@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (17,80,1,'hf.terry15@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (18,80,1,'terry.heidi@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (19,156,1,'heidiwilson@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (20,156,1,'heidiw@spamalot.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (21,77,1,'ljones@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (22,77,1,'lincolnj@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (23,147,1,'kiaras@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (24,159,1,'jcruz3@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (25,5,1,'adeforest@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (26,5,1,'adeforest@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (27,56,1,'patelb@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (28,31,1,'mllera@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (29,31,1,'mllera@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (30,192,1,'kathleens@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (31,136,1,'pivanov@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (32,136,1,'ivanov.princess@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (33,167,1,'delanaj@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (34,200,1,'brittneybachman63@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (35,200,1,'brittneyb@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (36,139,1,'ij.blackwell@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (37,114,1,'reynolds.rodrigo@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (38,114,1,'reynolds.w.rodrigo@lol.info',0,0,0,0,NULL,NULL,NULL,NULL), - (39,50,1,'prentice.iris@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (40,104,1,'mllerc33@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (41,44,1,'tf.cooper27@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (42,44,1,'cooper.f.toby60@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (43,75,1,'pateld97@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (44,75,1,'pateld61@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (45,155,1,'blackwell.barry87@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), - (46,42,1,'bryonbarkley@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (47,98,1,'roberts.f.juliann@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (48,146,1,'deforest.e.kathlyn88@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (49,146,1,'deforest.kathlyn@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (50,158,1,'ivanovt83@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (51,158,1,'ivanovt70@lol.info',0,0,0,0,NULL,NULL,NULL,NULL), - (52,6,1,'kandacel@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (53,134,1,'brittneys5@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (54,134,1,'samuels.j.brittney@example.info',0,0,0,0,NULL,NULL,NULL,NULL), - (55,2,1,'kaceyg@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (56,113,1,'patel.n.lashawnda63@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (57,69,1,'kt.terrell62@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (58,119,1,'bernadettechowski@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (59,179,1,'ivanov.e.kandace98@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (60,76,1,'sharynd@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (61,24,1,'ac.gonzlez58@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (62,24,1,'gonzlez.alida@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (63,129,1,'cooper.rolando@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (64,129,1,'cooper.rolando@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (65,27,1,'bachmanm@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (66,27,1,'maxwellb@example.com',0,0,0,0,NULL,NULL,NULL,NULL), - (67,143,1,'tsamson@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (68,89,1,'brigettes@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (69,48,1,'mcreynoldsa@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (70,138,1,'parker.iris65@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (71,138,1,'parkeri@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (72,82,1,'daz.k.heidi24@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (73,168,1,'gonzlez.brigette16@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (74,168,1,'bgonzlez@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (75,131,1,'bernadetteblackwell34@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (76,169,1,'parker.scarlet62@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (77,169,1,'parker.scarlet47@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), - (78,35,1,'bernadettegonzlez@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (79,183,1,'patel.errol47@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (80,93,1,'lincolnp73@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (81,186,1,'ashleydimitrov20@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (82,59,1,'rebekahnielsen@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (83,109,1,'craignielsen23@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (84,37,1,'barkley.craig@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (85,3,1,'kandacebarkley@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (86,3,1,'kandacebarkley51@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (87,191,1,'ashleybarkley@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (88,151,1,'kiaraj@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (89,20,1,'wagner.eleonor@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (90,49,1,'jameson-wagnerm@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (91,164,1,'scarletjameson-wagner@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), - (92,176,1,'blackwell.w.bryon@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (93,96,1,'craigg26@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (94,201,1,'blackwellb@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (95,201,1,'brigetteblackwell60@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (96,185,1,'ashlieblackwell@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), - (97,83,1,'terrell.bryon@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (98,102,1,'terrell-reynoldsj48@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (99,102,1,'jacksonterrell-reynolds@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (100,145,1,'ezope@example.com',1,0,0,0,NULL,NULL,NULL,NULL), - (101,34,1,'zope.alida@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (102,34,1,'zope.alida2@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (103,107,1,'bobmller67@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (104,107,1,'mllerb@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (105,47,1,'mller.magan45@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (106,47,1,'mllerm@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (107,73,1,'terrya@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (108,73,1,'allant@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (109,178,1,'margarett22@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (110,87,1,'terrym@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (111,87,1,'mariat@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (112,15,1,'daz.eleonor52@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (113,15,1,'ew.daz34@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (114,55,1,'herminiadaz@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (115,55,1,'daz.herminia@fishmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (116,13,1,'jinad@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (117,189,1,'daz.mei@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (118,189,1,'meid@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (119,133,1,'bachmans@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (120,133,1,'scottb40@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (121,30,1,'felishab87@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (122,187,1,'bachmanc@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (123,150,1,'sh.cooper@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (124,46,1,'blackwell-cooperv22@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), - (125,12,1,'heidicooper@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (126,177,1,'tblackwell@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (127,91,1,'blackwelld@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (128,91,1,'delanablackwell@fishmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (129,95,1,'rg.blackwell98@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (130,22,1,'wattson.elizabeth62@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), - (131,43,1,'wattson.i.angelika@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (132,43,1,'angelikawattson@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (133,111,1,'terrelll30@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (134,85,1,'princessterrell14@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (135,85,1,'princesst9@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (136,72,1,'brzczysawterrell@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (137,60,1,'dimitrovs@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (138,60,1,'dimitrovs72@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (139,81,1,'dimitrov-bachman.kandace@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (140,81,1,'dimitrov-bachmank36@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (141,92,1,'dimitrov-bachman.rolando18@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (142,92,1,'dimitrov-bachman.rolando20@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (143,132,1,'tobyprentice@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (144,157,1,'jinaprentice@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (145,45,1,'yadav.maxwell@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (146,45,1,'yadavm@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (147,54,1,'cruz-terrellh41@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (148,54,1,'hl.cruz-terrell@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (149,61,1,'shadc@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (150,61,1,'cruz-terrells@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (151,116,1,'beular39@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (152,116,1,'reynoldsb@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (153,180,1,'rodrigowagner-reynolds@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (154,180,1,'wagner-reynolds.r.rodrigo@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL), - (155,137,1,'bryonwagner-reynolds@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (156,193,1,'elbertm@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (157,193,1,'elbertm@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (158,11,1,'parkerm50@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (159,197,1,'iveycruz-mcreynolds-parker5@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (160,197,1,'cruz-mcreynolds-parker.ivey@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (161,154,3,'service@grabillmusic.org',1,0,0,0,NULL,NULL,NULL,NULL), - (162,92,2,'dimitrov-bachman.rolando@grabillmusic.org',0,0,0,0,NULL,NULL,NULL,NULL), - (163,190,3,'service@communityservices.org',1,0,0,0,NULL,NULL,NULL,NULL), - (164,43,2,'wattson.i.angelika@communityservices.org',0,0,0,0,NULL,NULL,NULL,NULL), - (165,65,3,'service@friendsagriculturefund.org',1,0,0,0,NULL,NULL,NULL,NULL), - (166,21,2,'jacobs.k.scott96@friendsagriculturefund.org',1,0,0,0,NULL,NULL,NULL,NULL), - (167,120,3,'service@sppoetryservices.org',1,0,0,0,NULL,NULL,NULL,NULL), - (168,153,2,'@sppoetryservices.org',0,0,0,0,NULL,NULL,NULL,NULL), - (169,79,3,'sales@creativeculturepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), - (170,166,2,'heidiw@creativeculturepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), - (171,62,3,'contact@sierrasoftware.org',1,0,0,0,NULL,NULL,NULL,NULL), - (172,143,2,'samsont@sierrasoftware.org',0,0,0,0,NULL,NULL,NULL,NULL), - (173,33,3,'service@iowapoetrysolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), - (174,9,2,'jacobb@iowapoetrysolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), - (175,127,3,'contact@virginiacollective.org',1,0,0,0,NULL,NULL,NULL,NULL), - (176,181,3,'sales@steptoecenter.org',1,0,0,0,NULL,NULL,NULL,NULL), - (177,27,2,'bachman.v.maxwell84@steptoecenter.org',0,0,0,0,NULL,NULL,NULL,NULL), - (178,103,3,'info@littcarrpeace.org',1,0,0,0,NULL,NULL,NULL,NULL), - (179,199,2,'errolmller@littcarrpeace.org',1,0,0,0,NULL,NULL,NULL,NULL), - (180,174,3,'info@urbanhealthsolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), - (181,116,2,'beular@urbanhealthsolutions.org',0,0,0,0,NULL,NULL,NULL,NULL), - (182,160,3,'feedback@globallegalschool.org',1,0,0,0,NULL,NULL,NULL,NULL), - (183,91,2,'delanablackwell57@globallegalschool.org',0,0,0,0,NULL,NULL,NULL,NULL), - (184,94,3,'info@mangopeaceschool.org',1,0,0,0,NULL,NULL,NULL,NULL), - (185,168,2,'gonzlez.brigette@mangopeaceschool.org',0,0,0,0,NULL,NULL,NULL,NULL), - (186,128,3,'service@fwpeacetrust.org',1,0,0,0,NULL,NULL,NULL,NULL), - (187,118,2,'lareet37@fwpeacetrust.org',1,0,0,0,NULL,NULL,NULL,NULL), - (188,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (189,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (190,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); + (2,23,1,'sharynchowski25@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (3,142,1,'yadavl18@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (4,81,1,'lincolnterry97@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (5,81,1,'lincolnt@airmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (6,4,1,'patel.alida@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (7,197,1,'terry.juliann@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (8,131,1,'rblackwell@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (9,131,1,'blackwell.ray24@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (10,33,1,'jnielsen@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (11,33,1,'josefan@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (12,139,1,'blackwell.allan96@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (13,139,1,'allanb21@testing.info',0,0,0,0,NULL,NULL,NULL,NULL), + (14,73,1,'mller.elina@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (15,73,1,'elinamller96@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (16,39,1,'irvinw9@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (17,164,1,'ashleyjacobs@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (18,101,1,'terry.carlos@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (19,35,1,'osamson@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (20,134,1,'delanar@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (21,104,1,'cooper.brigette@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (22,104,1,'cooperb77@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (23,105,1,'grantr@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (24,105,1,'rt.grant@example.net',0,0,0,0,NULL,NULL,NULL,NULL), + (25,187,1,'bachmanl16@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (26,187,1,'lp.bachman@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (27,120,1,'princesst84@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (28,120,1,'princessterry10@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (29,3,1,'adams.brent3@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (30,172,1,'brzczysawwattson@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (31,172,1,'wattsonb@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (32,55,1,'wilsonl68@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (33,55,1,'wilson.n.landon@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), + (34,56,1,'zope.n.heidi65@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), + (35,146,1,'rebekahm@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (36,140,1,'deforest.heidi66@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (37,188,1,'twagner47@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (38,188,1,'wagnert@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (39,7,1,'patels33@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (40,7,1,'patels@sample.com',0,0,0,0,NULL,NULL,NULL,NULL), + (41,145,1,'ex.terry61@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (42,145,1,'terry.x.eleonor@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (43,178,1,'olsen.o.esta@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (44,178,1,'eo.olsen@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (45,89,1,'lee.g.erik@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (46,179,1,'terrellb@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (47,179,1,'brzczysawt@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (48,31,1,'yadav.herminia@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (49,181,1,'cooper.shauna55@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (50,181,1,'scooper86@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (51,144,1,'jensenp@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), + (52,58,1,'ty.bachman@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (53,58,1,'ty.bachman43@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (54,177,1,'kandacedeforest55@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (55,180,1,'zopej73@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (56,96,1,'jameson.y.iris@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (57,96,1,'iy.jameson@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), + (58,17,1,'mariasamson80@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (59,17,1,'samsonm@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (60,112,1,'nielsen.carlos78@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (61,86,1,'herminiaroberts31@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (62,86,1,'herminiaroberts32@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (63,200,1,'barkleyj98@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (64,53,1,'juliannmller@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (65,53,1,'juliannmller@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (66,27,1,'clintj@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), + (67,27,1,'cjones32@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (68,66,1,'alexia98@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (69,60,1,'ss.terrell@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (70,60,1,'terrell.s.shad6@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL), + (71,54,1,'russellcruz85@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (72,143,1,'prentice.c.teddy@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (73,158,1,'bryonwattson@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (74,36,1,'rolandobachman@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (75,36,1,'bachman.rolando@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL), + (76,78,1,'ivanov.j.beula31@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (77,78,1,'beulaivanov1@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (78,121,1,'elbertcooper@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (79,121,1,'elbertcooper@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (80,59,1,'elizabeths@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (81,85,1,'wcooper@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (82,85,1,'winfordc49@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (83,5,1,'samson.v.kandace@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (84,5,1,'samson.kandace77@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (85,153,1,'sanfordsamuels53@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), + (86,152,1,'rosarioterrell@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (87,71,1,'louchowski13@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (88,71,1,'chowski.b.lou57@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (89,176,1,'russellzope@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (90,2,1,'nblackwell@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (91,2,1,'blackwell.nicole45@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (92,12,1,'tadams@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (93,159,1,'adams.erik41@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (94,127,1,'zope.teddy65@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (95,127,1,'teddyz@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (96,138,1,'mv.samson-zope@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (97,138,1,'samson-zope.merrie@testmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (98,28,1,'zopeb58@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (99,28,1,'beulaz@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (100,124,1,'azope@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (101,124,1,'zopea@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (102,193,1,'reynoldsd3@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (103,193,1,'darenr92@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (104,103,1,'reynolds.b.rebekah40@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (105,151,1,'reynolds.jed@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), + (106,151,1,'reynolds.e.jed@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (107,119,1,'rs.bachman@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (108,119,1,'raybachman65@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), + (109,147,1,'terrellh@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (110,183,1,'bachman-terrell.i.lincoln34@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (111,183,1,'bachman-terrell.i.lincoln49@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (112,19,1,'as.nielsen@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (113,67,1,'nielsent31@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (114,67,1,'tnielsen@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (115,169,1,'nielsena@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (116,169,1,'alexianielsen@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (117,111,1,'beulap@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (118,113,1,'chowski-parker.brittney@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (119,192,1,'clintchowski-parker@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (120,74,1,'mcreynolds.e.angelika@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (121,15,1,'iveyjensen-mcreynolds@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (122,161,1,'billyb@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (123,161,1,'blackwell.billy@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (124,110,1,'sy.blackwell@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (125,110,1,'sy.blackwell90@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (126,95,1,'me.blackwell@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (127,95,1,'blackwell.e.maria@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (128,108,1,'wattsonr19@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), + (129,157,1,'beulawattson52@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (130,8,1,'wattson.v.iris@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (131,8,1,'iriswattson31@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (132,175,1,'ewattson57@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (133,175,1,'elbertw84@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (134,9,1,'chowski.laree43@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (135,38,1,'sw.chowski12@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (136,156,1,'jacobs.omar@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (137,156,1,'jacobs.omar@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (138,190,1,'bwattson@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), + (139,190,1,'billyw@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (140,118,1,'wattson.l.lincoln@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), + (141,118,1,'wattsonl79@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (142,87,1,'wattson.c.betty@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (143,87,1,'bettyw86@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (144,160,1,'princessg@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), + (145,160,1,'grant-barkley.q.princess@testing.com',0,0,0,0,NULL,NULL,NULL,NULL), + (146,63,1,'maganyadav@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (147,196,1,'merrieyadav@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (148,191,1,'yadavk67@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (149,195,1,'roberts.winford@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (150,51,1,'kaceyr96@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (151,100,1,'terry.brzczysaw@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (152,11,1,'gonzlez-terry.ivey19@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (153,11,1,'gonzlez-terryi77@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (154,171,1,'terry.lincoln@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (155,171,1,'terry.lincoln54@testing.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (156,149,1,'sonnyivanov84@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), + (157,174,1,'echowski@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (158,174,1,'chowski.elizabeth83@testing.info',0,0,0,0,NULL,NULL,NULL,NULL), + (159,91,3,'service@pittsburghcultureinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), + (160,97,2,'ashleyb@pittsburghcultureinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), + (161,109,3,'info@ruralfood.org',1,0,0,0,NULL,NULL,NULL,NULL), + (162,170,2,'billyc@ruralfood.org',1,0,0,0,NULL,NULL,NULL,NULL), + (163,136,3,'feedback@minnesotapartnership.org',1,0,0,0,NULL,NULL,NULL,NULL), + (164,65,2,'troberts42@minnesotapartnership.org',1,0,0,0,NULL,NULL,NULL,NULL), + (165,72,3,'sales@ruralliteracy.org',1,0,0,0,NULL,NULL,NULL,NULL), + (166,68,2,'jensen-mcreynolds.maria@ruralliteracy.org',1,0,0,0,NULL,NULL,NULL,NULL), + (167,198,3,'service@hampdensystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (168,93,2,'adamsl@hampdensystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (169,49,3,'service@nmpeaceassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (170,172,2,'wattsonb50@nmpeaceassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), + (171,201,3,'info@nywellnessnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (172,116,2,'russellr@nywellnessnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (173,25,3,'service@greenlegal.org',1,0,0,0,NULL,NULL,NULL,NULL), + (174,113,2,'brittney@greenlegal.org',0,0,0,0,NULL,NULL,NULL,NULL), + (175,106,3,'contact@texasliteracynetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (176,126,2,'cooper.delana@texasliteracynetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (177,70,3,'sales@caulderfoodsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (178,171,2,'terryl@caulderfoodsystems.org',0,0,0,0,NULL,NULL,NULL,NULL), + (179,90,3,'contact@urbanpartnership.org',1,0,0,0,NULL,NULL,NULL,NULL), + (180,175,2,'ewattson45@urbanpartnership.org',0,0,0,0,NULL,NULL,NULL,NULL), + (181,137,3,'service@urbanadvocacyassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (182,85,2,'cooperw@urbanadvocacyassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), + (183,186,3,'feedback@bayassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (184,59,2,'elizabeths75@bayassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), + (185,41,3,'feedback@texasarts.org',1,0,0,0,NULL,NULL,NULL,NULL), + (186,60,2,'.@texasarts.org',0,0,0,0,NULL,NULL,NULL,NULL), + (187,194,3,'service@friendsmusicsolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), + (188,139,2,'blackwella@friendsmusicsolutions.org',0,0,0,0,NULL,NULL,NULL,NULL), + (189,40,3,'service@pinesustainability.org',1,0,0,0,NULL,NULL,NULL,NULL), + (190,163,2,'adamsa@pinesustainability.org',1,0,0,0,NULL,NULL,NULL,NULL), + (191,80,3,'feedback@friendsenvironmental.org',1,0,0,0,NULL,NULL,NULL,NULL), + (192,185,2,'herminian@friendsenvironmental.org',1,0,0,0,NULL,NULL,NULL,NULL), + (193,125,3,'feedback@lincolnfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (194,188,2,'teddywagner83@lincolnfund.org',0,0,0,0,NULL,NULL,NULL,NULL), + (195,165,3,'info@creativesustainabilitysystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (196,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (197,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (198,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -3166,57 +3196,57 @@ INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, (28,'civicrm_financial_item',14,14,100.00), (29,'civicrm_contribution',16,15,100.00), (30,'civicrm_financial_item',15,15,100.00), - (31,'civicrm_contribution',20,16,100.00), + (31,'civicrm_contribution',18,16,100.00), (32,'civicrm_financial_item',16,16,100.00), - (33,'civicrm_contribution',22,17,100.00), + (33,'civicrm_contribution',20,17,100.00), (34,'civicrm_financial_item',17,17,100.00), - (35,'civicrm_contribution',26,18,100.00), + (35,'civicrm_contribution',22,18,100.00), (36,'civicrm_financial_item',18,18,100.00), - (37,'civicrm_contribution',28,19,100.00), + (37,'civicrm_contribution',23,19,100.00), (38,'civicrm_financial_item',19,19,100.00), - (39,'civicrm_contribution',30,20,100.00), + (39,'civicrm_contribution',26,20,100.00), (40,'civicrm_financial_item',20,20,100.00), - (41,'civicrm_contribution',32,21,100.00), + (41,'civicrm_contribution',30,21,100.00), (42,'civicrm_financial_item',21,21,100.00), - (43,'civicrm_contribution',34,22,100.00), + (43,'civicrm_contribution',32,22,100.00), (44,'civicrm_financial_item',22,22,100.00), - (45,'civicrm_contribution',36,23,100.00), + (45,'civicrm_contribution',33,23,100.00), (46,'civicrm_financial_item',23,23,100.00), - (47,'civicrm_contribution',38,24,100.00), + (47,'civicrm_contribution',34,24,100.00), (48,'civicrm_financial_item',24,24,100.00), - (49,'civicrm_contribution',40,25,100.00), + (49,'civicrm_contribution',36,25,100.00), (50,'civicrm_financial_item',25,25,100.00), - (51,'civicrm_contribution',42,26,100.00), + (51,'civicrm_contribution',38,26,100.00), (52,'civicrm_financial_item',26,26,100.00), - (53,'civicrm_contribution',43,27,100.00), + (53,'civicrm_contribution',40,27,100.00), (54,'civicrm_financial_item',27,27,100.00), - (55,'civicrm_contribution',15,28,50.00), - (56,'civicrm_financial_item',28,28,50.00), - (57,'civicrm_contribution',17,29,50.00), + (55,'civicrm_contribution',42,28,100.00), + (56,'civicrm_financial_item',28,28,100.00), + (57,'civicrm_contribution',15,29,50.00), (58,'civicrm_financial_item',29,29,50.00), - (59,'civicrm_contribution',18,30,50.00), + (59,'civicrm_contribution',17,30,50.00), (60,'civicrm_financial_item',30,30,50.00), (61,'civicrm_contribution',19,31,50.00), (62,'civicrm_financial_item',31,31,50.00), (63,'civicrm_contribution',21,32,50.00), (64,'civicrm_financial_item',32,32,50.00), - (65,'civicrm_contribution',23,33,50.00), + (65,'civicrm_contribution',25,33,50.00), (66,'civicrm_financial_item',33,33,50.00), - (67,'civicrm_contribution',25,34,50.00), + (67,'civicrm_contribution',27,34,50.00), (68,'civicrm_financial_item',34,34,50.00), - (69,'civicrm_contribution',27,35,50.00), + (69,'civicrm_contribution',28,35,50.00), (70,'civicrm_financial_item',35,35,50.00), (71,'civicrm_contribution',29,36,50.00), (72,'civicrm_financial_item',36,36,50.00), (73,'civicrm_contribution',31,37,50.00), (74,'civicrm_financial_item',37,37,50.00), - (75,'civicrm_contribution',33,38,50.00), + (75,'civicrm_contribution',37,38,50.00), (76,'civicrm_financial_item',38,38,50.00), - (77,'civicrm_contribution',37,39,50.00), + (77,'civicrm_contribution',39,39,50.00), (78,'civicrm_financial_item',39,39,50.00), - (79,'civicrm_contribution',39,40,50.00), + (79,'civicrm_contribution',41,40,50.00), (80,'civicrm_financial_item',40,40,50.00), - (81,'civicrm_contribution',41,41,50.00), + (81,'civicrm_contribution',43,41,50.00), (82,'civicrm_financial_item',41,41,50.00), (83,'civicrm_contribution',24,42,1200.00), (84,'civicrm_financial_item',42,42,1200.00), @@ -3332,130 +3362,123 @@ 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 - (49,'civicrm_contact',2,4), - (71,'civicrm_contact',3,4), - (72,'civicrm_contact',3,5), - (29,'civicrm_contact',4,4), - (28,'civicrm_contact',5,4), - (46,'civicrm_contact',6,4), - (47,'civicrm_contact',6,5), - (94,'civicrm_contact',12,4), - (95,'civicrm_contact',12,5), - (89,'civicrm_contact',13,4), - (81,'civicrm_contact',14,4), - (87,'civicrm_contact',15,4), - (88,'civicrm_contact',15,5), - (54,'civicrm_contact',17,5), - (11,'civicrm_contact',19,5), - (39,'civicrm_contact',21,4), - (40,'civicrm_contact',21,5), - (100,'civicrm_contact',22,5), - (83,'civicrm_contact',25,4), - (57,'civicrm_contact',27,4), - (58,'civicrm_contact',27,5), - (115,'civicrm_contact',28,5), - (70,'civicrm_contact',37,5), - (91,'civicrm_contact',38,4), - (101,'civicrm_contact',43,4), - (42,'civicrm_contact',44,5), - (113,'civicrm_contact',45,4), - (114,'civicrm_contact',45,5), - (74,'civicrm_contact',49,4), - (41,'civicrm_contact',50,4), - (116,'civicrm_contact',51,4), - (117,'civicrm_contact',51,5), - (22,'civicrm_contact',53,4), - (118,'civicrm_contact',54,4), - (119,'civicrm_contact',54,5), - (30,'civicrm_contact',56,4), - (98,'civicrm_contact',57,4), - (99,'civicrm_contact',57,5), - (106,'civicrm_contact',60,4), - (107,'civicrm_contact',60,5), - (4,'civicrm_contact',62,3), - (85,'civicrm_contact',63,4), - (86,'civicrm_contact',63,5), - (120,'civicrm_contact',68,4), - (50,'civicrm_contact',69,4), - (51,'civicrm_contact',69,5), - (84,'civicrm_contact',73,4), - (53,'civicrm_contact',76,4), - (18,'civicrm_contact',78,4), - (19,'civicrm_contact',78,5), - (108,'civicrm_contact',81,4), - (109,'civicrm_contact',81,5), - (78,'civicrm_contact',83,4), - (13,'civicrm_contact',84,4), - (14,'civicrm_contact',84,5), - (59,'civicrm_contact',89,5), - (8,'civicrm_contact',94,3), - (112,'civicrm_contact',97,5), - (44,'civicrm_contact',98,4), - (20,'civicrm_contact',101,5), - (6,'civicrm_contact',103,2), - (82,'civicrm_contact',107,5), - (69,'civicrm_contact',109,5), - (102,'civicrm_contact',111,4), - (103,'civicrm_contact',111,5), - (79,'civicrm_contact',118,4), - (3,'civicrm_contact',120,2), - (15,'civicrm_contact',123,4), - (16,'civicrm_contact',123,5), - (17,'civicrm_contact',124,4), - (5,'civicrm_contact',127,3), - (55,'civicrm_contact',129,4), - (56,'civicrm_contact',129,5), - (110,'civicrm_contact',132,4), - (111,'civicrm_contact',132,5), - (90,'civicrm_contact',133,5), - (48,'civicrm_contact',134,4), - (33,'civicrm_contact',136,5), - (60,'civicrm_contact',138,4), - (61,'civicrm_contact',138,5), - (12,'civicrm_contact',140,5), - (10,'civicrm_contact',141,2), - (80,'civicrm_contact',145,4), - (25,'civicrm_contact',147,4), - (26,'civicrm_contact',147,5), - (2,'civicrm_contact',148,3), - (92,'civicrm_contact',150,4), - (93,'civicrm_contact',150,5), - (73,'civicrm_contact',151,4), - (27,'civicrm_contact',152,5), - (1,'civicrm_contact',154,3), - (43,'civicrm_contact',155,5), - (23,'civicrm_contact',156,4), - (24,'civicrm_contact',156,5), - (7,'civicrm_contact',160,2), - (45,'civicrm_contact',163,5), - (104,'civicrm_contact',165,4), - (105,'civicrm_contact',165,5), - (62,'civicrm_contact',168,4), - (63,'civicrm_contact',168,5), - (64,'civicrm_contact',169,5), - (124,'civicrm_contact',170,4), - (21,'civicrm_contact',173,4), - (75,'civicrm_contact',176,5), - (96,'civicrm_contact',177,4), - (97,'civicrm_contact',177,5), - (121,'civicrm_contact',180,4), - (122,'civicrm_contact',180,5), - (65,'civicrm_contact',183,4), - (66,'civicrm_contact',183,5), - (67,'civicrm_contact',186,4), - (68,'civicrm_contact',186,5), - (9,'civicrm_contact',188,3), - (31,'civicrm_contact',192,4), - (32,'civicrm_contact',192,5), - (123,'civicrm_contact',193,5), - (37,'civicrm_contact',195,4), - (38,'civicrm_contact',195,5), - (35,'civicrm_contact',198,4), - (36,'civicrm_contact',198,5), - (52,'civicrm_contact',199,4), - (34,'civicrm_contact',200,4), - (76,'civicrm_contact',201,4), - (77,'civicrm_contact',201,5); + (61,'civicrm_contact',5,4), + (89,'civicrm_contact',8,4), + (76,'civicrm_contact',19,5), + (11,'civicrm_contact',23,4), + (27,'civicrm_contact',24,4), + (28,'civicrm_contact',24,5), + (5,'civicrm_contact',25,1), + (51,'civicrm_contact',27,4), + (52,'civicrm_contact',27,5), + (70,'civicrm_contact',28,5), + (23,'civicrm_contact',30,4), + (24,'civicrm_contact',30,5), + (34,'civicrm_contact',32,5), + (17,'civicrm_contact',33,4), + (18,'civicrm_contact',33,5), + (66,'civicrm_contact',34,4), + (95,'civicrm_contact',38,4), + (20,'civicrm_contact',39,4), + (21,'civicrm_contact',39,5), + (9,'civicrm_contact',40,1), + (8,'civicrm_contact',41,1), + (37,'civicrm_contact',45,4), + (38,'civicrm_contact',45,5), + (114,'civicrm_contact',47,4), + (55,'civicrm_contact',54,4), + (56,'civicrm_contact',54,5), + (30,'civicrm_contact',55,5), + (104,'civicrm_contact',57,4), + (105,'civicrm_contact',57,5), + (60,'civicrm_contact',59,5), + (4,'civicrm_contact',61,3), + (98,'civicrm_contact',64,4), + (41,'civicrm_contact',65,5), + (53,'civicrm_contact',66,4), + (54,'civicrm_contact',66,5), + (84,'civicrm_contact',68,5), + (6,'civicrm_contact',70,1), + (91,'civicrm_contact',75,4), + (92,'civicrm_contact',75,5), + (33,'civicrm_contact',76,4), + (14,'civicrm_contact',77,4), + (58,'civicrm_contact',78,4), + (59,'civicrm_contact',78,5), + (12,'civicrm_contact',81,4), + (13,'civicrm_contact',81,5), + (115,'civicrm_contact',82,4), + (103,'civicrm_contact',83,5), + (62,'civicrm_contact',84,4), + (63,'civicrm_contact',84,5), + (1,'civicrm_contact',91,3), + (81,'civicrm_contact',92,4), + (86,'civicrm_contact',95,4), + (46,'civicrm_contact',96,4), + (47,'civicrm_contact',96,5), + (110,'civicrm_contact',100,5), + (22,'civicrm_contact',101,4), + (25,'civicrm_contact',104,4), + (87,'civicrm_contact',108,4), + (88,'civicrm_contact',108,5), + (49,'civicrm_contact',112,4), + (79,'civicrm_contact',113,5), + (109,'civicrm_contact',116,5), + (100,'civicrm_contact',118,5), + (73,'civicrm_contact',119,5), + (80,'civicrm_contact',122,4), + (101,'civicrm_contact',123,4), + (102,'civicrm_contact',123,5), + (10,'civicrm_contact',125,1), + (69,'civicrm_contact',127,5), + (2,'civicrm_contact',136,2), + (7,'civicrm_contact',137,1), + (19,'civicrm_contact',139,4), + (39,'civicrm_contact',144,4), + (40,'civicrm_contact',144,5), + (31,'civicrm_contact',146,5), + (90,'civicrm_contact',148,5), + (113,'civicrm_contact',149,5), + (72,'civicrm_contact',151,4), + (64,'civicrm_contact',152,4), + (96,'civicrm_contact',156,4), + (97,'civicrm_contact',156,5), + (57,'civicrm_contact',158,5), + (67,'civicrm_contact',159,4), + (68,'civicrm_contact',159,5), + (85,'civicrm_contact',161,4), + (15,'civicrm_contact',163,4), + (77,'civicrm_contact',166,4), + (78,'civicrm_contact',167,4), + (93,'civicrm_contact',168,4), + (94,'civicrm_contact',168,5), + (111,'civicrm_contact',171,4), + (112,'civicrm_contact',171,5), + (29,'civicrm_contact',172,5), + (116,'civicrm_contact',174,4), + (117,'civicrm_contact',174,5), + (65,'civicrm_contact',176,5), + (42,'civicrm_contact',177,4), + (43,'civicrm_contact',177,5), + (35,'civicrm_contact',178,4), + (36,'civicrm_contact',179,5), + (44,'civicrm_contact',180,4), + (45,'civicrm_contact',180,5), + (74,'civicrm_contact',183,4), + (75,'civicrm_contact',183,5), + (26,'civicrm_contact',187,5), + (32,'civicrm_contact',188,5), + (82,'civicrm_contact',189,4), + (83,'civicrm_contact',189,5), + (99,'civicrm_contact',190,4), + (71,'civicrm_contact',193,5), + (107,'civicrm_contact',195,4), + (108,'civicrm_contact',195,5), + (106,'civicrm_contact',196,4), + (16,'civicrm_contact',197,4), + (3,'civicrm_contact',198,3), + (48,'civicrm_contact',199,4), + (50,'civicrm_contact',200,4); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -3466,9 +3489,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_event` WRITE; /*!40000 ALTER TABLE `civicrm_event` DISABLE KEYS */; INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES - (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2022-05-04 17:00:00','2022-05-06 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), - (2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-11-03 12:00:00','2021-11-03 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), - (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-06-04 07:00:00','2022-06-07 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2022-05-08 17:00:00','2022-05-10 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-11-07 12:00:00','2021-11-07 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-06-08 07:00:00','2022-06-11 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); @@ -3552,99 +3575,99 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_item` WRITE; /*!40000 ALTER TABLE `civicrm_financial_item` DISABLE KEYS */; INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES - (1,'2021-11-03 22:14:37','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), - (2,'2021-11-03 22:14:37','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), - (3,'2021-11-03 22:14:37','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3), - (4,'2021-11-03 22:14:37','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), - (5,'2021-11-03 22:14:37','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5), - (6,'2021-11-03 22:14:37','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6), - (7,'2021-11-03 22:14:37','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7), - (8,'2021-11-03 22:14:37','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8), - (9,'2021-11-03 22:14:37','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9), - (10,'2021-11-03 22:14:37','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10), - (11,'2021-11-03 22:14:37','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11), - (12,'2021-11-03 22:14:37','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12), - (13,'2021-11-03 22:14:37','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13), - (14,'2021-11-03 22:14:37','2021-11-04 09:14:36',151,'General',100.00,'USD',2,1,'civicrm_line_item',16), - (15,'2021-11-03 22:14:37','2021-11-04 09:14:36',195,'General',100.00,'USD',2,1,'civicrm_line_item',17), - (16,'2021-11-03 22:14:37','2021-11-04 09:14:36',192,'General',100.00,'USD',2,1,'civicrm_line_item',18), - (17,'2021-11-03 22:14:37','2021-11-04 09:14:36',47,'General',100.00,'USD',2,1,'civicrm_line_item',19), - (18,'2021-11-03 22:14:37','2021-11-04 09:14:36',25,'General',100.00,'USD',2,1,'civicrm_line_item',20), - (19,'2021-11-03 22:14:37','2021-11-04 09:14:36',129,'General',100.00,'USD',2,1,'civicrm_line_item',21), - (20,'2021-11-03 22:14:37','2021-11-04 09:14:36',24,'General',100.00,'USD',2,1,'civicrm_line_item',22), - (21,'2021-11-03 22:14:37','2021-11-04 09:14:36',107,'General',100.00,'USD',2,1,'civicrm_line_item',23), - (22,'2021-11-03 22:14:37','2021-11-04 09:14:36',157,'General',100.00,'USD',2,1,'civicrm_line_item',24), - (23,'2021-11-03 22:14:37','2021-11-04 09:14:36',32,'General',100.00,'USD',2,1,'civicrm_line_item',25), - (24,'2021-11-03 22:14:37','2021-11-04 09:14:36',12,'General',100.00,'USD',2,1,'civicrm_line_item',26), - (25,'2021-11-03 22:14:37','2021-11-04 09:14:36',114,'General',100.00,'USD',2,1,'civicrm_line_item',27), - (26,'2021-11-03 22:14:37','2021-11-04 09:14:36',92,'General',100.00,'USD',2,1,'civicrm_line_item',28), - (27,'2021-11-03 22:14:37','2021-11-04 09:14:36',13,'General',100.00,'USD',2,1,'civicrm_line_item',29), - (28,'2021-11-03 22:14:37','2021-11-04 09:14:36',100,'Student',50.00,'USD',2,1,'civicrm_line_item',30), - (29,'2021-11-03 22:14:37','2021-11-04 09:14:36',41,'Student',50.00,'USD',2,1,'civicrm_line_item',31), - (30,'2021-11-03 22:14:37','2021-11-04 09:14:36',134,'Student',50.00,'USD',2,1,'civicrm_line_item',32), - (31,'2021-11-03 22:14:37','2021-11-04 09:14:36',2,'Student',50.00,'USD',2,1,'civicrm_line_item',33), - (32,'2021-11-03 22:14:37','2021-11-04 09:14:36',17,'Student',50.00,'USD',2,1,'civicrm_line_item',34), - (33,'2021-11-03 22:14:37','2021-11-04 09:14:36',75,'Student',50.00,'USD',2,1,'civicrm_line_item',35), - (34,'2021-11-03 22:14:37','2021-11-04 09:14:36',78,'Student',50.00,'USD',2,1,'civicrm_line_item',36), - (35,'2021-11-03 22:14:37','2021-11-04 09:14:36',149,'Student',50.00,'USD',2,1,'civicrm_line_item',37), - (36,'2021-11-03 22:14:37','2021-11-04 09:14:36',93,'Student',50.00,'USD',2,1,'civicrm_line_item',38), - (37,'2021-11-03 22:14:37','2021-11-04 09:14:36',173,'Student',50.00,'USD',2,1,'civicrm_line_item',39), - (38,'2021-11-03 22:14:37','2021-11-04 09:14:36',96,'Student',50.00,'USD',2,1,'civicrm_line_item',40), - (39,'2021-11-03 22:14:37','2021-11-04 09:14:36',30,'Student',50.00,'USD',2,1,'civicrm_line_item',41), - (40,'2021-11-03 22:14:37','2021-11-04 09:14:36',31,'Student',50.00,'USD',2,1,'civicrm_line_item',42), - (41,'2021-11-03 22:14:37','2021-11-04 09:14:36',152,'Student',50.00,'USD',2,1,'civicrm_line_item',43), - (42,'2021-11-03 22:14:37','2021-11-04 09:14:36',38,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44), - (43,'2021-11-03 22:14:37','2021-11-04 09:14:36',82,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45), - (44,'2021-11-03 22:14:37','2021-11-04 09:14:37',163,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81), - (45,'2021-11-03 22:14:37','2021-11-04 09:14:37',125,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82), - (46,'2021-11-03 22:14:37','2021-11-04 09:14:37',60,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83), - (47,'2021-11-03 22:14:37','2021-11-04 09:14:37',2,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84), - (48,'2021-11-03 22:14:37','2021-11-04 09:14:37',72,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85), - (49,'2021-11-03 22:14:37','2021-11-04 09:14:37',68,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86), - (50,'2021-11-03 22:14:38','2021-11-04 09:14:37',168,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87), - (51,'2021-11-03 22:14:38','2021-11-04 09:14:37',190,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88), - (52,'2021-11-03 22:14:38','2021-11-04 09:14:37',120,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89), - (53,'2021-11-03 22:14:38','2021-11-04 09:14:37',83,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90), - (54,'2021-11-03 22:14:38','2021-11-04 09:14:37',11,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91), - (55,'2021-11-03 22:14:38','2021-11-04 09:14:37',185,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92), - (56,'2021-11-03 22:14:38','2021-11-04 09:14:37',138,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93), - (57,'2021-11-03 22:14:38','2021-11-04 09:14:37',183,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94), - (58,'2021-11-03 22:14:38','2021-11-04 09:14:37',109,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95), - (59,'2021-11-03 22:14:38','2021-11-04 09:14:37',89,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96), - (60,'2021-11-03 22:14:38','2021-11-04 09:14:37',150,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47), - (61,'2021-11-03 22:14:38','2021-11-04 09:14:37',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48), - (62,'2021-11-03 22:14:38','2021-11-04 09:14:37',198,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49), - (63,'2021-11-03 22:14:38','2021-11-04 09:14:37',66,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50), - (64,'2021-11-03 22:14:38','2021-11-04 09:14:37',51,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51), - (65,'2021-11-03 22:14:38','2021-11-04 09:14:37',77,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52), - (66,'2021-11-03 22:14:38','2021-11-04 09:14:37',3,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53), - (67,'2021-11-03 22:14:38','2021-11-04 09:14:37',99,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54), - (68,'2021-11-03 22:14:38','2021-11-04 09:14:37',15,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55), - (69,'2021-11-03 22:14:38','2021-11-04 09:14:37',101,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56), - (70,'2021-11-03 22:14:38','2021-11-04 09:14:37',159,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57), - (71,'2021-11-03 22:14:38','2021-11-04 09:14:37',139,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58), - (72,'2021-11-03 22:14:38','2021-11-04 09:14:37',94,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59), - (73,'2021-11-03 22:14:38','2021-11-04 09:14:37',65,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60), - (74,'2021-11-03 22:14:38','2021-11-04 09:14:37',93,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61), - (75,'2021-11-03 22:14:38','2021-11-04 09:14:37',98,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62), - (76,'2021-11-03 22:14:38','2021-11-04 09:14:37',21,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), - (77,'2021-11-03 22:14:38','2021-11-04 09:14:37',31,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), - (78,'2021-11-03 22:14:38','2021-11-04 09:14:37',124,'Single',50.00,'USD',4,1,'civicrm_line_item',65), - (79,'2021-11-03 22:14:38','2021-11-04 09:14:37',111,'Single',50.00,'USD',4,1,'civicrm_line_item',66), - (80,'2021-11-03 22:14:38','2021-11-04 09:14:37',91,'Single',50.00,'USD',4,1,'civicrm_line_item',67), - (81,'2021-11-03 22:14:38','2021-11-04 09:14:37',23,'Single',50.00,'USD',4,1,'civicrm_line_item',68), - (82,'2021-11-03 22:14:38','2021-11-04 09:14:37',122,'Single',50.00,'USD',4,1,'civicrm_line_item',69), - (83,'2021-11-03 22:14:38','2021-11-04 09:14:37',112,'Single',50.00,'USD',4,1,'civicrm_line_item',70), - (84,'2021-11-03 22:14:38','2021-11-04 09:14:37',100,'Single',50.00,'USD',4,1,'civicrm_line_item',71), - (85,'2021-11-03 22:14:38','2021-11-04 09:14:37',143,'Single',50.00,'USD',4,1,'civicrm_line_item',72), - (86,'2021-11-03 22:14:38','2021-11-04 09:14:37',26,'Single',50.00,'USD',4,1,'civicrm_line_item',73), - (87,'2021-11-03 22:14:38','2021-11-04 09:14:37',53,'Single',50.00,'USD',4,1,'civicrm_line_item',74), - (88,'2021-11-03 22:14:38','2021-11-04 09:14:37',126,'Single',50.00,'USD',4,1,'civicrm_line_item',75), - (89,'2021-11-03 22:14:38','2021-11-04 09:14:37',184,'Single',50.00,'USD',4,1,'civicrm_line_item',76), - (90,'2021-11-03 22:14:38','2021-11-04 09:14:37',35,'Single',50.00,'USD',4,1,'civicrm_line_item',77), - (91,'2021-11-03 22:14:38','2021-11-04 09:14:37',104,'Single',50.00,'USD',4,1,'civicrm_line_item',78), - (92,'2021-11-03 22:14:38','2021-11-04 09:14:37',5,'Single',50.00,'USD',4,1,'civicrm_line_item',79), - (93,'2021-11-03 22:14:38','2021-11-04 09:14:37',34,'Single',50.00,'USD',4,1,'civicrm_line_item',80); + (1,'2021-11-08 01:45:32','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), + (2,'2021-11-08 01:45:32','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), + (3,'2021-11-08 01:45:32','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3), + (4,'2021-11-08 01:45:32','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), + (5,'2021-11-08 01:45:32','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5), + (6,'2021-11-08 01:45:32','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6), + (7,'2021-11-08 01:45:32','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7), + (8,'2021-11-08 01:45:32','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8), + (9,'2021-11-08 01:45:32','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9), + (10,'2021-11-08 01:45:32','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10), + (11,'2021-11-08 01:45:32','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11), + (12,'2021-11-08 01:45:32','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12), + (13,'2021-11-08 01:45:32','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13), + (14,'2021-11-08 01:45:32','2021-11-08 12:45:31',154,'General',100.00,'USD',2,1,'civicrm_line_item',16), + (15,'2021-11-08 01:45:32','2021-11-08 12:45:31',32,'General',100.00,'USD',2,1,'civicrm_line_item',17), + (16,'2021-11-08 01:45:32','2021-11-08 12:45:31',188,'General',100.00,'USD',2,1,'civicrm_line_item',18), + (17,'2021-11-08 01:45:32','2021-11-08 12:45:31',2,'General',100.00,'USD',2,1,'civicrm_line_item',19), + (18,'2021-11-08 01:45:32','2021-11-08 12:45:31',21,'General',100.00,'USD',2,1,'civicrm_line_item',20), + (19,'2021-11-08 01:45:32','2021-11-08 12:45:31',5,'General',100.00,'USD',2,1,'civicrm_line_item',21), + (20,'2021-11-08 01:45:32','2021-11-08 12:45:31',167,'General',100.00,'USD',2,1,'civicrm_line_item',22), + (21,'2021-11-08 01:45:32','2021-11-08 12:45:31',45,'General',100.00,'USD',2,1,'civicrm_line_item',23), + (22,'2021-11-08 01:45:32','2021-11-08 12:45:31',82,'General',100.00,'USD',2,1,'civicrm_line_item',24), + (23,'2021-11-08 01:45:32','2021-11-08 12:45:31',8,'General',100.00,'USD',2,1,'civicrm_line_item',25), + (24,'2021-11-08 01:45:32','2021-11-08 12:45:31',149,'General',100.00,'USD',2,1,'civicrm_line_item',26), + (25,'2021-11-08 01:45:32','2021-11-08 12:45:31',77,'General',100.00,'USD',2,1,'civicrm_line_item',27), + (26,'2021-11-08 01:45:32','2021-11-08 12:45:31',187,'General',100.00,'USD',2,1,'civicrm_line_item',28), + (27,'2021-11-08 01:45:32','2021-11-08 12:45:31',89,'General',100.00,'USD',2,1,'civicrm_line_item',29), + (28,'2021-11-08 01:45:32','2021-11-08 12:45:31',174,'General',100.00,'USD',2,1,'civicrm_line_item',30), + (29,'2021-11-08 01:45:32','2021-11-08 12:45:31',147,'Student',50.00,'USD',2,1,'civicrm_line_item',31), + (30,'2021-11-08 01:45:32','2021-11-08 12:45:31',64,'Student',50.00,'USD',2,1,'civicrm_line_item',32), + (31,'2021-11-08 01:45:32','2021-11-08 12:45:31',131,'Student',50.00,'USD',2,1,'civicrm_line_item',33), + (32,'2021-11-08 01:45:32','2021-11-08 12:45:31',159,'Student',50.00,'USD',2,1,'civicrm_line_item',34), + (33,'2021-11-08 01:45:32','2021-11-08 12:45:31',100,'Student',50.00,'USD',2,1,'civicrm_line_item',35), + (34,'2021-11-08 01:45:32','2021-11-08 12:45:31',110,'Student',50.00,'USD',2,1,'civicrm_line_item',36), + (35,'2021-11-08 01:45:32','2021-11-08 12:45:31',164,'Student',50.00,'USD',2,1,'civicrm_line_item',37), + (36,'2021-11-08 01:45:32','2021-11-08 12:45:31',138,'Student',50.00,'USD',2,1,'civicrm_line_item',38), + (37,'2021-11-08 01:45:32','2021-11-08 12:45:31',63,'Student',50.00,'USD',2,1,'civicrm_line_item',39), + (38,'2021-11-08 01:45:32','2021-11-08 12:45:31',126,'Student',50.00,'USD',2,1,'civicrm_line_item',40), + (39,'2021-11-08 01:45:32','2021-11-08 12:45:31',161,'Student',50.00,'USD',2,1,'civicrm_line_item',41), + (40,'2021-11-08 01:45:32','2021-11-08 12:45:31',115,'Student',50.00,'USD',2,1,'civicrm_line_item',42), + (41,'2021-11-08 01:45:32','2021-11-08 12:45:31',30,'Student',50.00,'USD',2,1,'civicrm_line_item',43), + (42,'2021-11-08 01:45:32','2021-11-08 12:45:31',114,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44), + (43,'2021-11-08 01:45:32','2021-11-08 12:45:31',93,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45), + (44,'2021-11-08 01:45:32','2021-11-08 12:45:32',108,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81), + (45,'2021-11-08 01:45:32','2021-11-08 12:45:32',118,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82), + (46,'2021-11-08 01:45:32','2021-11-08 12:45:32',97,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83), + (47,'2021-11-08 01:45:32','2021-11-08 12:45:32',158,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84), + (48,'2021-11-08 01:45:32','2021-11-08 12:45:32',30,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85), + (49,'2021-11-08 01:45:32','2021-11-08 12:45:32',76,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86), + (50,'2021-11-08 01:45:32','2021-11-08 12:45:32',139,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87), + (51,'2021-11-08 01:45:32','2021-11-08 12:45:32',9,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88), + (52,'2021-11-08 01:45:32','2021-11-08 12:45:32',71,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89), + (53,'2021-11-08 01:45:32','2021-11-08 12:45:32',62,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90), + (54,'2021-11-08 01:45:32','2021-11-08 12:45:32',29,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91), + (55,'2021-11-08 01:45:32','2021-11-08 12:45:32',47,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92), + (56,'2021-11-08 01:45:32','2021-11-08 12:45:32',5,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93), + (57,'2021-11-08 01:45:32','2021-11-08 12:45:32',155,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94), + (58,'2021-11-08 01:45:32','2021-11-08 12:45:32',179,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95), + (59,'2021-11-08 01:45:32','2021-11-08 12:45:32',107,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96), + (60,'2021-11-08 01:45:33','2021-11-08 12:45:32',90,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47), + (61,'2021-11-08 01:45:33','2021-11-08 12:45:32',63,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48), + (62,'2021-11-08 01:45:33','2021-11-08 12:45:32',26,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49), + (63,'2021-11-08 01:45:33','2021-11-08 12:45:32',134,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50), + (64,'2021-11-08 01:45:33','2021-11-08 12:45:32',161,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51), + (65,'2021-11-08 01:45:33','2021-11-08 12:45:32',138,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52), + (66,'2021-11-08 01:45:33','2021-11-08 12:45:32',192,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53), + (67,'2021-11-08 01:45:33','2021-11-08 12:45:32',185,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54), + (68,'2021-11-08 01:45:33','2021-11-08 12:45:32',41,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55), + (69,'2021-11-08 01:45:33','2021-11-08 12:45:32',100,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56), + (70,'2021-11-08 01:45:33','2021-11-08 12:45:32',129,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57), + (71,'2021-11-08 01:45:33','2021-11-08 12:45:32',32,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58), + (72,'2021-11-08 01:45:33','2021-11-08 12:45:32',196,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59), + (73,'2021-11-08 01:45:33','2021-11-08 12:45:32',21,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60), + (74,'2021-11-08 01:45:33','2021-11-08 12:45:32',156,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61), + (75,'2021-11-08 01:45:33','2021-11-08 12:45:32',201,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62), + (76,'2021-11-08 01:45:33','2021-11-08 12:45:32',92,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), + (77,'2021-11-08 01:45:33','2021-11-08 12:45:32',4,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), + (78,'2021-11-08 01:45:33','2021-11-08 12:45:32',37,'Single',50.00,'USD',4,1,'civicrm_line_item',65), + (79,'2021-11-08 01:45:33','2021-11-08 12:45:32',50,'Single',50.00,'USD',4,1,'civicrm_line_item',66), + (80,'2021-11-08 01:45:33','2021-11-08 12:45:32',120,'Single',50.00,'USD',4,1,'civicrm_line_item',67), + (81,'2021-11-08 01:45:33','2021-11-08 12:45:32',128,'Single',50.00,'USD',4,1,'civicrm_line_item',68), + (82,'2021-11-08 01:45:33','2021-11-08 12:45:32',113,'Single',50.00,'USD',4,1,'civicrm_line_item',69), + (83,'2021-11-08 01:45:33','2021-11-08 12:45:32',195,'Single',50.00,'USD',4,1,'civicrm_line_item',70), + (84,'2021-11-08 01:45:33','2021-11-08 12:45:32',170,'Single',50.00,'USD',4,1,'civicrm_line_item',71), + (85,'2021-11-08 01:45:33','2021-11-08 12:45:32',121,'Single',50.00,'USD',4,1,'civicrm_line_item',72), + (86,'2021-11-08 01:45:33','2021-11-08 12:45:32',16,'Single',50.00,'USD',4,1,'civicrm_line_item',73), + (87,'2021-11-08 01:45:33','2021-11-08 12:45:32',10,'Single',50.00,'USD',4,1,'civicrm_line_item',74), + (88,'2021-11-08 01:45:33','2021-11-08 12:45:32',25,'Single',50.00,'USD',4,1,'civicrm_line_item',75), + (89,'2021-11-08 01:45:33','2021-11-08 12:45:32',151,'Single',50.00,'USD',4,1,'civicrm_line_item',76), + (90,'2021-11-08 01:45:33','2021-11-08 12:45:32',55,'Single',50.00,'USD',4,1,'civicrm_line_item',77), + (91,'2021-11-08 01:45:33','2021-11-08 12:45:32',61,'Single',50.00,'USD',4,1,'civicrm_line_item',78), + (92,'2021-11-08 01:45:33','2021-11-08 12:45:32',159,'Single',50.00,'USD',4,1,'civicrm_line_item',79), + (93,'2021-11-08 01:45:33','2021-11-08 12:45:32',79,'Single',50.00,'USD',4,1,'civicrm_line_item',80); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -3668,86 +3691,86 @@ INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_fin (11,NULL,6,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), (12,NULL,6,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), (13,NULL,6,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (14,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'9249cb7cadfbcedf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (15,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'d7e7271b978072ec',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (16,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'4736a665de15b09e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (17,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'6b25541fbc9d5e1d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (18,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'d1425db1d47c94ce',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (19,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'f5bd594372b40fe7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (20,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'d0695216b217f937',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (21,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'0f9e32053715711b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (22,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'669ef73d6e7c5ad2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (23,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'794ea7f55e165e30',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (24,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'476c4d57693181f7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (25,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'21c8e675aa6df27e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (26,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'9f4f885a8e009610',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (27,NULL,6,'2021-11-04 09:14:36',100.00,NULL,NULL,'USD',1,'ed1bc0cb5033abc9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (28,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'5d62e290f28b6214',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (29,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'cc8dfe766eec15c5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (30,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'4cd27d30c4988e79',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (31,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'0837ee63e0eea0bb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (32,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'b7cb04328d929929',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (33,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'0a0da521542739e7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (34,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'a12fd824f7201256',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (35,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'b0608498bb70e91e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (36,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'be561cf630c20df8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (37,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'1b90d55cc836b0f0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (38,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'bf5b7a6ad37f72da',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (39,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'5940b1f6ba2aebba',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (40,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'9c726373af8122e0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (41,NULL,6,'2021-11-04 09:14:36',50.00,NULL,NULL,'USD',1,'439a5449d49edd9c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (42,NULL,6,'2021-11-04 09:14:36',1200.00,NULL,NULL,'USD',1,'60b3e5c560c34fac',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (43,NULL,6,'2021-11-04 09:14:36',1200.00,NULL,NULL,'USD',1,'96975bbb7f854512',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (44,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'9c4fc64b88cb5f98',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (45,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'8dad83c7c624c8a7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (46,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'4e7e821acfcc7726',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (47,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'ee6786c403beeb99',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (48,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'d747872c4854b5ba',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (49,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'0a3c5d73895170b2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (50,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'894b60fd94740677',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (51,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'615303fe33609e20',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (52,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'0a79bb6cc96db466',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (53,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'6cfa90408ffaabfa',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (54,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'1535eb1cde8271e7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (55,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'d1b69f8d3d48a730',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (56,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'ad919996527d9f93',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (57,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'2e341c09093c3b2e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (58,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'fbcb8b02bd1ba2a3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (59,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'70652880df4033dd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (60,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'095be97b05d700bf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (61,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'c13f3e80ff3b5460',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (62,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'433500b46409e20c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (63,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'2d46770e69249558',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (64,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'fe06ccce9cb55d4c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (65,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'22126116979211ac',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (66,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'0db3650885f05bfc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (67,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'eaf31bf40981aaa6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (68,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'7bdb2cd1f0ebb255',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (69,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'7632a8af96e6f24b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (70,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'c1a74e4052ba5de9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (71,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'7e75a83735fecd55',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (72,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'b476fad644d4f3f5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (73,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'e99ca4f738b292d3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (74,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'28547c36249abca1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (75,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'5eab6dbf3b12b368',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (76,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'c17f58602ae554cc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (77,NULL,6,'2021-11-04 09:14:37',800.00,NULL,NULL,'USD',1,'963e55d7cc705ed0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (78,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'ba6973b0284de4bd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (79,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'a946ef185d632076',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (80,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'19196cd5c560b8be',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (81,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'243bc1dd86679069',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (82,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'331dab468bdcb805',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (83,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'d1959dd2b0153f93',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (84,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'d578e92e091cbb68',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (85,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'48a204e069f3d8d7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (86,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'856ed0e61af9ca3e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (87,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'b65d93a72a76104c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (88,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'ff9297ef685e5252',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (89,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'a1c45a9e2933306c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (90,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'c02c67aa0055e0fe',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (91,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'f5daed1109b0a9ce',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (92,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'2756fa9248eaf2d6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (93,NULL,6,'2021-11-04 09:14:37',50.00,NULL,NULL,'USD',1,'05ad375cf25cda1a',NULL,1,NULL,1,NULL,NULL,NULL,NULL); + (14,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'734cd5f8b63827b4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (15,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'0206be028c015c43',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (16,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'4923a106fe2efa8f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (17,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'4fda4d861542f0c7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (18,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'25209c90fcce8f4d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (19,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'76f5d2b5ecf6a057',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (20,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'a3859f5e5b9d3509',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (21,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'4098a241ca942e78',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (22,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'5a9af2e3a08f87f6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (23,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'c59191f088f51a67',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (24,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'517baabfe0210630',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (25,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'9f8c08e8a12416da',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (26,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'6c9a30e1831e6c50',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (27,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'0ce85fe365867007',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (28,NULL,6,'2021-11-08 12:45:31',100.00,NULL,NULL,'USD',1,'ba1314b46b188739',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (29,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'b937a07dff526392',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (30,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'631f3fe0615fdb26',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (31,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'93b08f908941a2b8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (32,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'a9c9fcc2d0022842',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (33,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'67a378a01f3acd4a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (34,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'3458d47f612d4dd1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (35,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'78c913a93a673539',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (36,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'e8f3f84ccf34ebca',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (37,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'0cc9e622885e15cd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (38,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'d0fb785a015b15d0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (39,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'b871336c1222e8af',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (40,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'7024147ffffa3303',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (41,NULL,6,'2021-11-08 12:45:31',50.00,NULL,NULL,'USD',1,'c67ec591d24054b7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (42,NULL,6,'2021-11-08 12:45:31',1200.00,NULL,NULL,'USD',1,'c4ea34baf2f07b65',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (43,NULL,6,'2021-11-08 12:45:31',1200.00,NULL,NULL,'USD',1,'764a745c81937fef',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (44,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'c9f6e3185bb6e94f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (45,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'c515ae68d6957e8d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (46,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'3a25dac1c730b0f3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (47,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'7899bdaeb06e34a3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (48,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'93ecce4a9280fc82',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (49,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'94482f0de63c6add',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (50,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'021f81f87ec9e3d0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (51,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'cbbcbb2ddcf39a87',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (52,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'a005b75c0706ba23',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (53,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'7984ed96762df330',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (54,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'1bb1d59634b6f89a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (55,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'09ef5cb7ce46311e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (56,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'e7a00445b4c39db2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (57,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'d8ddc2769fc79601',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (58,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'a7a37e2b50459931',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (59,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'c5ef6dd94e8502a8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (60,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'337b161694b929d5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (61,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'f007972ccce04f5b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (62,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'f02cdfb25cc9efb8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (63,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'3e1e195c329a9a2b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (64,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'542b8b6f852822c0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (65,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'3e6b139ed522f0c9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (66,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'c64837d39c4128d9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (67,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'a8dd0206475b0e32',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (68,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'42d9f8cd5b1224be',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (69,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'2fd036c8539e0bee',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (70,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'d86139d5277e1e15',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (71,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'bcc697c83eaccd99',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (72,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'29a7df7302056b9f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (73,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'a3066da230c71982',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (74,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'55d37a2ecb664470',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (75,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'56e313e72686e972',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (76,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'068336af99de18e7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (77,NULL,6,'2021-11-08 12:45:32',800.00,NULL,NULL,'USD',1,'05cb89587d33b389',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (78,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'f532451267bc538e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (79,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'9f4ef0db69cde58a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (80,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'fe0022c95d0d2bed',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (81,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'cc562fa3319f8747',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (82,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'d3623bc9a7a6ef86',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (83,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'39722a9c6339472d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (84,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'ec6ffedbfcdf0413',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (85,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'83357f98033ee2ee',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (86,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'84cb9390d37934a0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (87,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'c44dee23c06c3c1f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (88,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'9295d2b81d4cc8cc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (89,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'02d8318c37fd792e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (90,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'add0d442e34f6603',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (91,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'c04b76647072cde7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (92,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'769ac96f0ffcfdc6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (93,NULL,6,'2021-11-08 12:45:32',50.00,NULL,NULL,'USD',1,'2e58802d1956b024',NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3795,89 +3818,89 @@ UNLOCK TABLES; LOCK TABLES `civicrm_group_contact` WRITE; /*!40000 ALTER TABLE `civicrm_group_contact` DISABLE KEYS */; INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES - (1,2,19,'Added',NULL,NULL), - (2,2,162,'Added',NULL,NULL), - (3,2,140,'Added',NULL,NULL), - (4,2,29,'Added',NULL,NULL), - (5,2,84,'Added',NULL,NULL), - (6,2,67,'Added',NULL,NULL), - (7,2,123,'Added',NULL,NULL), - (8,2,153,'Added',NULL,NULL), - (9,2,124,'Added',NULL,NULL), - (10,2,184,'Added',NULL,NULL), - (11,2,78,'Added',NULL,NULL), - (12,2,64,'Added',NULL,NULL), - (13,2,101,'Added',NULL,NULL), - (14,2,10,'Added',NULL,NULL), - (15,2,173,'Added',NULL,NULL), - (16,2,121,'Added',NULL,NULL), - (17,2,53,'Added',NULL,NULL), - (18,2,80,'Added',NULL,NULL), - (19,2,156,'Added',NULL,NULL), - (20,2,77,'Added',NULL,NULL), - (21,2,147,'Added',NULL,NULL), - (22,2,159,'Added',NULL,NULL), - (23,2,152,'Added',NULL,NULL), - (24,2,130,'Added',NULL,NULL), - (25,2,5,'Added',NULL,NULL), - (26,2,52,'Added',NULL,NULL), - (27,2,4,'Added',NULL,NULL), - (28,2,99,'Added',NULL,NULL), - (29,2,56,'Added',NULL,NULL), - (30,2,31,'Added',NULL,NULL), - (31,2,192,'Added',NULL,NULL), - (32,2,171,'Added',NULL,NULL), - (33,2,136,'Added',NULL,NULL), - (34,2,167,'Added',NULL,NULL), - (35,2,200,'Added',NULL,NULL), - (36,2,139,'Added',NULL,NULL), - (37,2,198,'Added',NULL,NULL), - (38,2,9,'Added',NULL,NULL), - (39,2,195,'Added',NULL,NULL), - (40,2,144,'Added',NULL,NULL), - (41,2,21,'Added',NULL,NULL), - (42,2,114,'Added',NULL,NULL), - (43,2,50,'Added',NULL,NULL), - (44,2,104,'Added',NULL,NULL), - (45,2,44,'Added',NULL,NULL), - (46,2,75,'Added',NULL,NULL), - (47,2,155,'Added',NULL,NULL), - (48,2,42,'Added',NULL,NULL), - (49,2,98,'Added',NULL,NULL), - (50,2,146,'Added',NULL,NULL), - (51,2,163,'Added',NULL,NULL), - (52,2,158,'Added',NULL,NULL), - (53,2,6,'Added',NULL,NULL), - (54,2,18,'Added',NULL,NULL), - (55,2,134,'Added',NULL,NULL), - (56,2,39,'Added',NULL,NULL), - (57,2,2,'Added',NULL,NULL), - (58,2,113,'Added',NULL,NULL), - (59,2,69,'Added',NULL,NULL), - (60,2,119,'Added',NULL,NULL), - (61,3,199,'Added',NULL,NULL), - (62,3,179,'Added',NULL,NULL), - (63,3,76,'Added',NULL,NULL), - (64,3,142,'Added',NULL,NULL), - (65,3,17,'Added',NULL,NULL), - (66,3,24,'Added',NULL,NULL), - (67,3,129,'Added',NULL,NULL), - (68,3,16,'Added',NULL,NULL), - (69,3,27,'Added',NULL,NULL), - (70,3,143,'Added',NULL,NULL), - (71,3,89,'Added',NULL,NULL), - (72,3,48,'Added',NULL,NULL), - (73,3,138,'Added',NULL,NULL), - (74,3,82,'Added',NULL,NULL), - (75,3,168,'Added',NULL,NULL), - (76,4,19,'Added',NULL,NULL), - (77,4,153,'Added',NULL,NULL), - (78,4,173,'Added',NULL,NULL), - (79,4,159,'Added',NULL,NULL), - (80,4,56,'Added',NULL,NULL), - (81,4,139,'Added',NULL,NULL), - (82,4,50,'Added',NULL,NULL), - (83,4,146,'Added',NULL,NULL); + (1,2,23,'Added',NULL,NULL), + (2,2,142,'Added',NULL,NULL), + (3,2,81,'Added',NULL,NULL), + (4,2,185,'Added',NULL,NULL), + (5,2,77,'Added',NULL,NULL), + (6,2,4,'Added',NULL,NULL), + (7,2,163,'Added',NULL,NULL), + (8,2,44,'Added',NULL,NULL), + (9,2,197,'Added',NULL,NULL), + (10,2,131,'Added',NULL,NULL), + (11,2,33,'Added',NULL,NULL), + (12,2,79,'Added',NULL,NULL), + (13,2,139,'Added',NULL,NULL), + (14,2,73,'Added',NULL,NULL), + (15,2,39,'Added',NULL,NULL), + (16,2,164,'Added',NULL,NULL), + (17,2,101,'Added',NULL,NULL), + (18,2,35,'Added',NULL,NULL), + (19,2,30,'Added',NULL,NULL), + (20,2,134,'Added',NULL,NULL), + (21,2,104,'Added',NULL,NULL), + (22,2,105,'Added',NULL,NULL), + (23,2,187,'Added',NULL,NULL), + (24,2,120,'Added',NULL,NULL), + (25,2,24,'Added',NULL,NULL), + (26,2,3,'Added',NULL,NULL), + (27,2,172,'Added',NULL,NULL), + (28,2,162,'Added',NULL,NULL), + (29,2,55,'Added',NULL,NULL), + (30,2,56,'Added',NULL,NULL), + (31,2,146,'Added',NULL,NULL), + (32,2,140,'Added',NULL,NULL), + (33,2,188,'Added',NULL,NULL), + (34,2,7,'Added',NULL,NULL), + (35,2,76,'Added',NULL,NULL), + (36,2,145,'Added',NULL,NULL), + (37,2,32,'Added',NULL,NULL), + (38,2,18,'Added',NULL,NULL), + (39,2,178,'Added',NULL,NULL), + (40,2,89,'Added',NULL,NULL), + (41,2,179,'Added',NULL,NULL), + (42,2,31,'Added',NULL,NULL), + (43,2,45,'Added',NULL,NULL), + (44,2,181,'Added',NULL,NULL), + (45,2,144,'Added',NULL,NULL), + (46,2,58,'Added',NULL,NULL), + (47,2,65,'Added',NULL,NULL), + (48,2,88,'Added',NULL,NULL), + (49,2,177,'Added',NULL,NULL), + (50,2,170,'Added',NULL,NULL), + (51,2,180,'Added',NULL,NULL), + (52,2,150,'Added',NULL,NULL), + (53,2,96,'Added',NULL,NULL), + (54,2,129,'Added',NULL,NULL), + (55,2,199,'Added',NULL,NULL), + (56,2,17,'Added',NULL,NULL), + (57,2,112,'Added',NULL,NULL), + (58,2,86,'Added',NULL,NULL), + (59,2,200,'Added',NULL,NULL), + (60,2,53,'Added',NULL,NULL), + (61,3,27,'Added',NULL,NULL), + (62,3,94,'Added',NULL,NULL), + (63,3,66,'Added',NULL,NULL), + (64,3,60,'Added',NULL,NULL), + (65,3,54,'Added',NULL,NULL), + (66,3,143,'Added',NULL,NULL), + (67,3,158,'Added',NULL,NULL), + (68,3,36,'Added',NULL,NULL), + (69,3,78,'Added',NULL,NULL), + (70,3,121,'Added',NULL,NULL), + (71,3,59,'Added',NULL,NULL), + (72,3,85,'Added',NULL,NULL), + (73,3,5,'Added',NULL,NULL), + (74,3,153,'Added',NULL,NULL), + (75,3,84,'Added',NULL,NULL), + (76,4,23,'Added',NULL,NULL), + (77,4,44,'Added',NULL,NULL), + (78,4,39,'Added',NULL,NULL), + (79,4,105,'Added',NULL,NULL), + (80,4,55,'Added',NULL,NULL), + (81,4,145,'Added',NULL,NULL), + (82,4,45,'Added',NULL,NULL), + (83,4,170,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -3932,7 +3955,7 @@ INSERT INTO `civicrm_job` (`id`, `domain_id`, `run_frequency`, `last_run`, `sche (6,1,'Daily',NULL,NULL,'Geocode and Parse Addresses','Retrieves geocodes (lat and long) and / or parses street addresses (populates street number, street name, etc.)','job','geocode','geocoding=[1 or 0] required\nparse=[1 or 0] required\nstart=[contact ID] optional-begin with this contact ID\nend=[contact ID] optional-process contacts with IDs less than this\nthrottle=[1 or 0] optional-1 adds five second sleep',0), (7,1,'Daily',NULL,NULL,'Update Greetings and Addressees','Goes through contact records and updates email and postal greetings, or addressee value','job','update_greeting','ct=[Individual or Household or Organization] required\ngt=[email_greeting or postal_greeting or addressee] required\nforce=[0 or 1] optional-0 update contacts with null value, 1 update all\nlimit=Number optional-Limit the number of contacts to update',0), (8,1,'Daily',NULL,NULL,'Mail Reports','Generates and sends out reports via email','job','mail_report','instanceId=[ID of report instance] required\nformat=[csv or print] optional-output CSV or print-friendly HTML, else PDF',0), - (9,1,'Daily',NULL,NULL,'Send Scheduled Reminders','Sends out scheduled reminders via email','job','send_reminder',NULL,0), + (9,1,'Hourly',NULL,NULL,'Send Scheduled Reminders','Sends out scheduled reminders via email','job','send_reminder',NULL,0), (10,1,'Always',NULL,NULL,'Update Participant Statuses','Updates pending event participant statuses based on time','job','process_participant',NULL,0), (11,1,'Daily',NULL,NULL,'Update Membership Statuses','Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.','job','process_membership',NULL,0), (12,1,'Always',NULL,NULL,'Process Survey Respondents','Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.','job','process_respondent',NULL,0), @@ -3975,32 +3998,32 @@ INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contributio (13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL,NULL), (16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), (17,'civicrm_membership',3,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (18,'civicrm_membership',7,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (19,'civicrm_membership',9,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (20,'civicrm_membership',13,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (21,'civicrm_membership',15,28,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (22,'civicrm_membership',17,30,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (23,'civicrm_membership',19,32,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (24,'civicrm_membership',21,34,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (25,'civicrm_membership',23,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (26,'civicrm_membership',25,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (27,'civicrm_membership',27,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (28,'civicrm_membership',29,42,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (29,'civicrm_membership',30,43,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (30,'civicrm_membership',2,15,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (31,'civicrm_membership',4,17,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (32,'civicrm_membership',5,18,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (18,'civicrm_membership',5,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (19,'civicrm_membership',7,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (20,'civicrm_membership',9,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (21,'civicrm_membership',10,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (22,'civicrm_membership',13,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (23,'civicrm_membership',17,30,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (24,'civicrm_membership',19,32,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (25,'civicrm_membership',20,33,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (26,'civicrm_membership',21,34,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (27,'civicrm_membership',23,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (28,'civicrm_membership',25,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (29,'civicrm_membership',27,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (30,'civicrm_membership',29,42,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (31,'civicrm_membership',2,15,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (32,'civicrm_membership',4,17,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (33,'civicrm_membership',6,19,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (34,'civicrm_membership',8,21,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (35,'civicrm_membership',10,23,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (36,'civicrm_membership',12,25,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (37,'civicrm_membership',14,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (35,'civicrm_membership',12,25,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (36,'civicrm_membership',14,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (37,'civicrm_membership',15,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (38,'civicrm_membership',16,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (39,'civicrm_membership',18,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (40,'civicrm_membership',20,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (41,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (42,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (43,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (40,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (41,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (42,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (43,'civicrm_membership',30,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (44,'civicrm_membership',11,24,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), (45,'civicrm_membership',22,35,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), (47,'civicrm_participant',3,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), @@ -4063,9 +4086,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_loc_block` WRITE; /*!40000 ALTER TABLE `civicrm_loc_block` DISABLE KEYS */; INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES - (1,192,188,153,NULL,NULL,NULL,NULL,NULL), - (2,193,189,154,NULL,NULL,NULL,NULL,NULL), - (3,194,190,155,NULL,NULL,NULL,NULL,NULL); + (1,187,196,160,NULL,NULL,NULL,NULL,NULL), + (2,188,197,161,NULL,NULL,NULL,NULL,NULL), + (3,189,198,162,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -4505,36 +4528,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership` WRITE; /*!40000 ALTER TABLE `civicrm_membership` DISABLE KEYS */; INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES - (1,151,1,'2021-11-04','2021-11-04','2023-11-03','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (2,100,2,'2021-11-03','2021-11-03','2022-11-02','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (3,195,1,'2021-11-02','2021-11-02','2023-11-01','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (4,41,2,'2021-11-01','2021-11-01','2022-10-31','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (5,134,2,'2020-10-31','2020-10-31','2021-10-30','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (6,2,2,'2021-10-30','2021-10-30','2022-10-29','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (7,192,1,'2021-10-29','2021-10-29','2023-10-28','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (8,17,2,'2021-10-28','2021-10-28','2022-10-27','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (9,47,1,'2021-10-27','2021-10-27','2023-10-26','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (10,75,2,'2020-10-26','2020-10-26','2021-10-25','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (11,38,3,'2021-10-25','2021-10-25',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (12,78,2,'2021-10-24','2021-10-24','2022-10-23','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (13,25,1,'2021-10-23','2021-10-23','2023-10-22','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (14,149,2,'2021-10-22','2021-10-22','2022-10-21','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (15,129,1,'2019-07-15','2019-07-15','2021-07-14','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (16,93,2,'2021-10-20','2021-10-20','2022-10-19','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (17,24,1,'2021-10-19','2021-10-19','2023-10-18','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (18,173,2,'2021-10-18','2021-10-18','2022-10-17','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (19,107,1,'2021-10-17','2021-10-17','2023-10-16','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (20,96,2,'2020-10-16','2020-10-16','2021-10-15','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (21,157,1,'2021-10-15','2021-10-15','2023-10-14','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (22,82,3,'2021-10-14','2021-10-14',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (23,32,1,'2021-10-13','2021-10-13','2023-10-12','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (24,30,2,'2021-10-12','2021-10-12','2022-10-11','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (25,12,1,'2019-04-26','2019-04-26','2021-04-25','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (26,31,2,'2021-10-10','2021-10-10','2022-10-09','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (27,114,1,'2021-10-09','2021-10-09','2023-10-08','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (28,152,2,'2021-10-08','2021-10-08','2022-10-07','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (29,92,1,'2021-10-07','2021-10-07','2023-10-06','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (30,13,1,'2019-03-17','2019-03-17','2021-03-16','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL); + (1,154,1,'2021-11-08','2021-11-08','2023-11-07','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (2,147,2,'2021-11-07','2021-11-07','2022-11-06','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (3,32,1,'2021-11-06','2021-11-06','2023-11-05','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (4,64,2,'2021-11-05','2021-11-05','2022-11-04','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (5,188,1,'2019-10-07','2019-10-07','2021-10-06','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (6,131,2,'2021-11-03','2021-11-03','2022-11-02','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (7,2,1,'2021-11-02','2021-11-02','2023-11-01','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (8,159,2,'2021-11-01','2021-11-01','2022-10-31','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (9,21,1,'2021-10-31','2021-10-31','2023-10-30','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (10,5,1,'2019-08-28','2019-08-28','2021-08-27','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (11,114,3,'2021-10-29','2021-10-29',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (12,100,2,'2021-10-28','2021-10-28','2022-10-27','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (13,167,1,'2021-10-27','2021-10-27','2023-10-26','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (14,110,2,'2021-10-26','2021-10-26','2022-10-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (15,164,2,'2020-10-25','2020-10-25','2021-10-24','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (16,138,2,'2021-10-24','2021-10-24','2022-10-23','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (17,45,1,'2021-10-23','2021-10-23','2023-10-22','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (18,63,2,'2021-10-22','2021-10-22','2022-10-21','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (19,82,1,'2021-10-21','2021-10-21','2023-10-20','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (20,8,1,'2019-06-09','2019-06-09','2021-06-08','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (21,149,1,'2021-10-19','2021-10-19','2023-10-18','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (22,93,3,'2021-10-18','2021-10-18',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (23,77,1,'2021-10-17','2021-10-17','2023-10-16','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (24,126,2,'2021-10-16','2021-10-16','2022-10-15','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (25,187,1,'2019-04-30','2019-04-30','2021-04-29','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (26,161,2,'2021-10-14','2021-10-14','2022-10-13','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (27,89,1,'2021-10-13','2021-10-13','2023-10-12','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (28,115,2,'2021-10-12','2021-10-12','2022-10-11','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (29,174,1,'2021-10-11','2021-10-11','2023-10-10','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (30,30,2,'2020-10-10','2020-10-10','2021-10-09','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -4556,36 +4579,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_log` WRITE; /*!40000 ALTER TABLE `civicrm_membership_log` DISABLE KEYS */; INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES - (1,6,1,'2021-10-30','2022-10-29',2,'2021-11-04',2,NULL), - (2,25,3,'2019-04-26','2021-04-25',12,'2021-11-04',1,NULL), - (3,30,3,'2019-03-17','2021-03-16',13,'2021-11-04',1,NULL), - (4,8,1,'2021-10-28','2022-10-27',17,'2021-11-04',2,NULL), - (5,17,1,'2021-10-19','2023-10-18',24,'2021-11-04',1,NULL), - (6,13,1,'2021-10-23','2023-10-22',25,'2021-11-04',1,NULL), - (7,24,1,'2021-10-12','2022-10-11',30,'2021-11-04',2,NULL), - (8,26,1,'2021-10-10','2022-10-09',31,'2021-11-04',2,NULL), - (9,23,1,'2021-10-13','2023-10-12',32,'2021-11-04',1,NULL), - (10,11,1,'2021-10-25',NULL,38,'2021-11-04',3,NULL), - (11,4,1,'2021-11-01','2022-10-31',41,'2021-11-04',2,NULL), - (12,9,1,'2021-10-27','2023-10-26',47,'2021-11-04',1,NULL), - (13,10,4,'2020-10-26','2021-10-25',75,'2021-11-04',2,NULL), - (14,12,1,'2021-10-24','2022-10-23',78,'2021-11-04',2,NULL), - (15,22,1,'2021-10-14',NULL,82,'2021-11-04',3,NULL), - (16,29,1,'2021-10-07','2023-10-06',92,'2021-11-04',1,NULL), - (17,16,1,'2021-10-20','2022-10-19',93,'2021-11-04',2,NULL), - (18,20,4,'2020-10-16','2021-10-15',96,'2021-11-04',2,NULL), - (19,2,1,'2021-11-03','2022-11-02',100,'2021-11-04',2,NULL), - (20,19,1,'2021-10-17','2023-10-16',107,'2021-11-04',1,NULL), - (21,27,1,'2021-10-09','2023-10-08',114,'2021-11-04',1,NULL), - (22,15,3,'2019-07-15','2021-07-14',129,'2021-11-04',1,NULL), - (23,5,4,'2020-10-31','2021-10-30',134,'2021-11-04',2,NULL), - (24,14,1,'2021-10-22','2022-10-21',149,'2021-11-04',2,NULL), - (25,1,1,'2021-11-04','2023-11-03',151,'2021-11-04',1,NULL), - (26,28,1,'2021-10-08','2022-10-07',152,'2021-11-04',2,NULL), - (27,21,1,'2021-10-15','2023-10-14',157,'2021-11-04',1,NULL), - (28,18,1,'2021-10-18','2022-10-17',173,'2021-11-04',2,NULL), - (29,7,1,'2021-10-29','2023-10-28',192,'2021-11-04',1,NULL), - (30,3,1,'2021-11-02','2023-11-01',195,'2021-11-04',1,NULL); + (1,7,1,'2021-11-02','2023-11-01',2,'2021-11-08',1,NULL), + (2,10,3,'2019-08-28','2021-08-27',5,'2021-11-08',1,NULL), + (3,20,3,'2019-06-09','2021-06-08',8,'2021-11-08',1,NULL), + (4,9,1,'2021-10-31','2023-10-30',21,'2021-11-08',1,NULL), + (5,30,4,'2020-10-10','2021-10-09',30,'2021-11-08',2,NULL), + (6,3,1,'2021-11-06','2023-11-05',32,'2021-11-08',1,NULL), + (7,17,1,'2021-10-23','2023-10-22',45,'2021-11-08',1,NULL), + (8,18,1,'2021-10-22','2022-10-21',63,'2021-11-08',2,NULL), + (9,4,1,'2021-11-05','2022-11-04',64,'2021-11-08',2,NULL), + (10,23,1,'2021-10-17','2023-10-16',77,'2021-11-08',1,NULL), + (11,19,1,'2021-10-21','2023-10-20',82,'2021-11-08',1,NULL), + (12,27,1,'2021-10-13','2023-10-12',89,'2021-11-08',1,NULL), + (13,22,1,'2021-10-18',NULL,93,'2021-11-08',3,NULL), + (14,12,1,'2021-10-28','2022-10-27',100,'2021-11-08',2,NULL), + (15,14,1,'2021-10-26','2022-10-25',110,'2021-11-08',2,NULL), + (16,11,1,'2021-10-29',NULL,114,'2021-11-08',3,NULL), + (17,28,1,'2021-10-12','2022-10-11',115,'2021-11-08',2,NULL), + (18,24,1,'2021-10-16','2022-10-15',126,'2021-11-08',2,NULL), + (19,6,1,'2021-11-03','2022-11-02',131,'2021-11-08',2,NULL), + (20,16,1,'2021-10-24','2022-10-23',138,'2021-11-08',2,NULL), + (21,2,1,'2021-11-07','2022-11-06',147,'2021-11-08',2,NULL), + (22,21,1,'2021-10-19','2023-10-18',149,'2021-11-08',1,NULL), + (23,1,1,'2021-11-08','2023-11-07',154,'2021-11-08',1,NULL), + (24,8,1,'2021-11-01','2022-10-31',159,'2021-11-08',2,NULL), + (25,26,1,'2021-10-14','2022-10-13',161,'2021-11-08',2,NULL), + (26,15,4,'2020-10-25','2021-10-24',164,'2021-11-08',2,NULL), + (27,13,1,'2021-10-27','2023-10-26',167,'2021-11-08',1,NULL), + (28,29,1,'2021-10-11','2023-10-10',174,'2021-11-08',1,NULL), + (29,25,3,'2019-04-30','2021-04-29',187,'2021-11-08',1,NULL), + (30,5,3,'2019-10-07','2021-10-06',188,'2021-11-08',1,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -5472,26 +5495,26 @@ UNLOCK TABLES; LOCK TABLES `civicrm_note` WRITE; /*!40000 ALTER TABLE `civicrm_note` DISABLE KEYS */; INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `note_date`, `created_date`, `modified_date`, `subject`, `privacy`) VALUES - (1,'civicrm_contact',82,'Chart out route map for next 10k run',1,'2021-11-03 22:14:32','2021-11-03 22:14:32','2021-09-13 04:46:44',NULL,'0'), - (2,'civicrm_contact',80,'Contact the Commissioner of Charities',1,'2021-11-03 22:14:32','2021-11-03 22:14:32','2021-03-08 19:44:24',NULL,'0'), - (3,'civicrm_contact',188,'Contact the Commissioner of Charities',1,'2021-11-03 22:14:32','2021-11-03 22:14:32','2020-11-28 16:06:08',NULL,'0'), - (4,'civicrm_contact',113,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-11-10 13:42:25',NULL,'0'), - (5,'civicrm_contact',193,'Organize the Terry Fox run',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-10-05 14:47:42',NULL,'0'), - (6,'civicrm_contact',131,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-08-10 18:33:30',NULL,'0'), - (7,'civicrm_contact',111,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-02-11 06:09:18',NULL,'0'), - (8,'civicrm_contact',70,'Send reminder for annual dinner',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-03-12 20:11:20',NULL,'0'), - (9,'civicrm_contact',41,'Arrange collection of funds from members',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-11-10 13:10:15',NULL,'0'), - (10,'civicrm_contact',58,'Contact the Commissioner of Charities',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-01-17 18:47:58',NULL,'0'), - (11,'civicrm_contact',47,'Organize the Terry Fox run',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-11-29 04:19:34',NULL,'0'), - (12,'civicrm_contact',59,'Arrange collection of funds from members',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-12-28 04:13:54',NULL,'0'), - (13,'civicrm_contact',128,'Reminder screening of \"Black\" on next Friday',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-04-03 09:14:39',NULL,'0'), - (14,'civicrm_contact',159,'Arrange collection of funds from members',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-10-09 06:41:09',NULL,'0'), - (15,'civicrm_contact',197,'Contact the Commissioner of Charities',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-09-12 16:19:30',NULL,'0'), - (16,'civicrm_contact',56,'Send reminder for annual dinner',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-04-23 12:52:17',NULL,'0'), - (17,'civicrm_contact',141,'Arrange collection of funds from members',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-06-29 07:30:07',NULL,'0'), - (18,'civicrm_contact',7,'Send reminder for annual dinner',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2021-03-22 14:51:20',NULL,'0'), - (19,'civicrm_contact',66,'Contact the Commissioner of Charities',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-11-28 02:59:45',NULL,'0'), - (20,'civicrm_contact',83,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-03 22:14:33','2021-11-03 22:14:33','2020-11-12 00:51:00',NULL,'0'); + (1,'civicrm_contact',135,'Send newsletter for April 2005',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-04-12 10:55:50',NULL,'0'), + (2,'civicrm_contact',122,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-03-07 01:55:44',NULL,'0'), + (3,'civicrm_contact',99,'Arrange collection of funds from members',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-07-05 22:39:10',NULL,'0'), + (4,'civicrm_contact',98,'Arrange collection of funds from members',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2020-12-19 23:58:01',NULL,'0'), + (5,'civicrm_contact',200,'Arrange collection of funds from members',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-06-13 13:58:12',NULL,'0'), + (6,'civicrm_contact',43,'Chart out route map for next 10k run',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-07-07 10:56:38',NULL,'0'), + (7,'civicrm_contact',43,'Get the registration done for NGO status',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-04-12 13:46:00',NULL,'0'), + (8,'civicrm_contact',38,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2020-11-14 07:53:30',NULL,'0'), + (9,'civicrm_contact',29,'Connect for presentation',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-08-28 05:52:36',NULL,'0'), + (10,'civicrm_contact',64,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2020-12-25 14:55:59',NULL,'0'), + (11,'civicrm_contact',114,'Send newsletter for April 2005',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-03-20 11:33:57',NULL,'0'), + (12,'civicrm_contact',68,'Contact the Commissioner of Charities',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-03-03 13:18:54',NULL,'0'), + (13,'civicrm_contact',164,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-05-29 23:43:52',NULL,'0'), + (14,'civicrm_contact',149,'Send reminder for annual dinner',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-06-03 09:32:11',NULL,'0'), + (15,'civicrm_contact',188,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-09-03 16:39:14',NULL,'0'), + (16,'civicrm_contact',177,'Arrange for cricket match with Sunil Gavaskar',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-10-02 12:47:26',NULL,'0'), + (17,'civicrm_contact',191,'Connect for presentation',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-04-09 17:22:14',NULL,'0'), + (18,'civicrm_contact',39,'Reminder screening of \"Black\" on next Friday',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2020-12-17 01:52:19',NULL,'0'), + (19,'civicrm_contact',99,'Contact the Commissioner of Charities',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-02-14 15:01:39',NULL,'0'), + (20,'civicrm_contact',187,'Reminder screening of \"Black\" on next Friday',1,'2021-11-08 01:45:27','2021-11-08 01:45:27','2021-04-02 22:33:18',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -6495,56 +6518,56 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant` WRITE; /*!40000 ALTER TABLE `civicrm_participant` DISABLE KEYS */; INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES - (1,124,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (2,163,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,150,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,111,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,125,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (6,18,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,91,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,60,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,198,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,23,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (11,2,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,66,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,122,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,72,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,51,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,112,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,68,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,77,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,100,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,168,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,3,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,143,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,190,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,99,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,15,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,26,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (27,120,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,101,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,53,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,83,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,159,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,126,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (33,11,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,139,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,184,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,185,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,94,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,35,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,138,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,65,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,104,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,183,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,93,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,5,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,109,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,98,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,34,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,89,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,21,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,31,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); + (1,37,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (2,108,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,90,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,50,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,118,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (6,63,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,120,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,97,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,26,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,128,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (11,158,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,134,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,113,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,30,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,161,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,195,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,76,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,138,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,170,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,139,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,192,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,121,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,9,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,185,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,41,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,16,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (27,71,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,100,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,10,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,62,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,129,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,25,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (33,29,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,32,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,151,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,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), + (37,196,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,55,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,5,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,21,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,61,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,155,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,156,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,159,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,179,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,201,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,79,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,107,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,92,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,4,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; @@ -6678,7 +6701,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,29,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); + (1,185,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; @@ -6700,161 +6723,168 @@ 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,19,1,1,0,NULL,'(305) 362-2627',NULL,'3053622627',2), - (2,19,1,0,0,NULL,'366-7596',NULL,'3667596',1), - (3,162,1,1,0,NULL,'568-9343',NULL,'5689343',1), - (4,162,1,0,0,NULL,'(861) 822-3368',NULL,'8618223368',1), - (5,140,1,1,0,NULL,'(411) 273-2688',NULL,'4112732688',2), - (6,29,1,1,0,NULL,'(337) 530-8253',NULL,'3375308253',2), - (7,124,1,1,0,NULL,'(835) 278-5904',NULL,'8352785904',1), - (8,124,1,0,0,NULL,'274-8351',NULL,'2748351',2), - (9,64,1,1,0,NULL,'811-6792',NULL,'8116792',1), - (10,64,1,0,0,NULL,'293-4046',NULL,'2934046',2), - (11,10,1,1,0,NULL,'(862) 575-1723',NULL,'8625751723',1), - (12,53,1,1,0,NULL,'823-9608',NULL,'8239608',2), - (13,53,1,0,0,NULL,'(626) 592-4308',NULL,'6265924308',2), - (14,77,1,1,0,NULL,'252-7775',NULL,'2527775',1), - (15,77,1,0,0,NULL,'643-2779',NULL,'6432779',2), - (16,147,1,1,0,NULL,'743-4483',NULL,'7434483',1), - (17,159,1,1,0,NULL,'(609) 708-4852',NULL,'6097084852',1), - (18,159,1,0,0,NULL,'(874) 263-8800',NULL,'8742638800',2), - (19,152,1,1,0,NULL,'769-4088',NULL,'7694088',1), - (20,130,1,1,0,NULL,'707-9828',NULL,'7079828',1), - (21,52,1,1,0,NULL,'246-6696',NULL,'2466696',2), - (22,52,1,0,0,NULL,'583-8484',NULL,'5838484',1), - (23,99,1,1,0,NULL,'(376) 817-5552',NULL,'3768175552',2), - (24,99,1,0,0,NULL,'521-2355',NULL,'5212355',2), - (25,56,1,1,0,NULL,'(378) 520-6766',NULL,'3785206766',2), - (26,31,1,1,0,NULL,'(364) 400-2447',NULL,'3644002447',2), - (27,192,1,1,0,NULL,'(321) 712-4185',NULL,'3217124185',2), - (28,192,1,0,0,NULL,'(238) 793-6377',NULL,'2387936377',1), - (29,136,1,1,0,NULL,'(293) 642-5263',NULL,'2936425263',2), - (30,167,1,1,0,NULL,'(427) 712-7133',NULL,'4277127133',2), - (31,167,1,0,0,NULL,'775-6909',NULL,'7756909',1), - (32,200,1,1,0,NULL,'(649) 298-9702',NULL,'6492989702',1), - (33,139,1,1,0,NULL,'(298) 256-1961',NULL,'2982561961',2), - (34,139,1,0,0,NULL,'(549) 789-5847',NULL,'5497895847',1), - (35,198,1,1,0,NULL,'(528) 850-7970',NULL,'5288507970',1), - (36,195,1,1,0,NULL,'(865) 755-7306',NULL,'8657557306',2), - (37,144,1,1,0,NULL,'(798) 404-6687',NULL,'7984046687',2), - (38,144,1,0,0,NULL,'(756) 864-5389',NULL,'7568645389',2), - (39,50,1,1,0,NULL,'723-6957',NULL,'7236957',1), - (40,50,1,0,0,NULL,'(824) 786-3066',NULL,'8247863066',2), - (41,75,1,1,0,NULL,'595-1559',NULL,'5951559',1), - (42,75,1,0,0,NULL,'471-2294',NULL,'4712294',2), - (43,155,1,1,0,NULL,'(589) 660-1691',NULL,'5896601691',1), - (44,155,1,0,0,NULL,'(291) 520-1778',NULL,'2915201778',2), - (45,42,1,1,0,NULL,'891-6479',NULL,'8916479',2), - (46,42,1,0,0,NULL,'480-5229',NULL,'4805229',2), - (47,98,1,1,0,NULL,'267-9168',NULL,'2679168',2), - (48,146,1,1,0,NULL,'271-3845',NULL,'2713845',1), - (49,158,1,1,0,NULL,'309-9050',NULL,'3099050',2), - (50,158,1,0,0,NULL,'596-6796',NULL,'5966796',1), - (51,18,1,1,0,NULL,'429-9479',NULL,'4299479',1), - (52,18,1,0,0,NULL,'835-1595',NULL,'8351595',1), - (53,2,1,1,0,NULL,'(272) 750-7903',NULL,'2727507903',1), - (54,2,1,0,0,NULL,'676-6891',NULL,'6766891',1), - (55,113,1,1,0,NULL,'713-1791',NULL,'7131791',2), - (56,119,1,1,0,NULL,'699-9363',NULL,'6999363',1), - (57,199,1,1,0,NULL,'(508) 358-8945',NULL,'5083588945',2), - (58,199,1,0,0,NULL,'(763) 306-4174',NULL,'7633064174',1), - (59,179,1,1,0,NULL,'281-9770',NULL,'2819770',1), - (60,76,1,1,0,NULL,'814-6061',NULL,'8146061',2), - (61,142,1,1,0,NULL,'(519) 208-2206',NULL,'5192082206',2), - (62,24,1,1,0,NULL,'(582) 420-5227',NULL,'5824205227',1), - (63,143,1,1,0,NULL,'692-4110',NULL,'6924110',1), - (64,48,1,1,0,NULL,'532-5138',NULL,'5325138',1), - (65,48,1,0,0,NULL,'(238) 224-8423',NULL,'2382248423',2), - (66,138,1,1,0,NULL,'(762) 720-1147',NULL,'7627201147',2), - (67,138,1,0,0,NULL,'(659) 355-4889',NULL,'6593554889',2), - (68,168,1,1,0,NULL,'381-6404',NULL,'3816404',2), - (69,131,1,1,0,NULL,'236-5900',NULL,'2365900',2), - (70,131,1,0,0,NULL,'795-5171',NULL,'7955171',1), - (71,35,1,1,0,NULL,'(889) 419-5153',NULL,'8894195153',2), - (72,183,1,1,0,NULL,'(596) 834-3612',NULL,'5968343612',2), - (73,183,1,0,0,NULL,'533-2543',NULL,'5332543',2), - (74,186,1,1,0,NULL,'(856) 603-3755',NULL,'8566033755',1), - (75,186,1,0,0,NULL,'278-6708',NULL,'2786708',1), - (76,59,1,1,0,NULL,'408-2847',NULL,'4082847',1), - (77,172,1,1,0,NULL,'(763) 475-9528',NULL,'7634759528',2), - (78,3,1,1,0,NULL,'(463) 602-4822',NULL,'4636024822',1), - (79,3,1,0,0,NULL,'801-8466',NULL,'8018466',1), - (80,20,1,1,0,NULL,'772-6571',NULL,'7726571',1), - (81,201,1,1,0,NULL,'(273) 344-6218',NULL,'2733446218',1), - (82,201,1,0,0,NULL,'899-1477',NULL,'8991477',1), - (83,185,1,1,0,NULL,'(208) 740-2045',NULL,'2087402045',1), - (84,83,1,1,0,NULL,'(374) 529-4713',NULL,'3745294713',2), - (85,83,1,0,0,NULL,'(379) 581-7547',NULL,'3795817547',2), - (86,175,1,1,0,NULL,'755-1487',NULL,'7551487',1), - (87,175,1,0,0,NULL,'384-2518',NULL,'3842518',2), - (88,118,1,1,0,NULL,'571-4677',NULL,'5714677',2), - (89,118,1,0,0,NULL,'(847) 722-8615',NULL,'8477228615',1), - (90,102,1,1,0,NULL,'(415) 435-9307',NULL,'4154359307',1), - (91,102,1,0,0,NULL,'(617) 822-8517',NULL,'6178228517',2), - (92,145,1,1,0,NULL,'473-2052',NULL,'4732052',2), - (93,145,1,0,0,NULL,'521-6701',NULL,'5216701',2), - (94,110,1,1,0,NULL,'(480) 709-7350',NULL,'4807097350',1), - (95,107,1,1,0,NULL,'237-7275',NULL,'2377275',1), - (96,25,1,1,0,NULL,'(828) 431-1812',NULL,'8284311812',2), - (97,25,1,0,0,NULL,'(288) 327-7023',NULL,'2883277023',2), - (98,73,1,1,0,NULL,'(426) 744-3239',NULL,'4267443239',1), - (99,178,1,1,0,NULL,'(735) 357-5815',NULL,'7353575815',1), - (100,178,1,0,0,NULL,'724-4475',NULL,'7244475',1), - (101,87,1,1,0,NULL,'(657) 481-4877',NULL,'6574814877',2), - (102,13,1,1,0,NULL,'264-5999',NULL,'2645999',1), - (103,189,1,1,0,NULL,'(622) 513-6444',NULL,'6225136444',1), - (104,30,1,1,0,NULL,'800-8355',NULL,'8008355',2), - (105,38,1,1,0,NULL,'248-4280',NULL,'2484280',1), - (106,38,1,0,0,NULL,'494-6172',NULL,'4946172',1), - (107,187,1,1,0,NULL,'(894) 557-3701',NULL,'8945573701',1), - (108,150,1,1,0,NULL,'568-9454',NULL,'5689454',2), - (109,150,1,0,0,NULL,'829-7091',NULL,'8297091',1), - (110,46,1,1,0,NULL,'(736) 510-7074',NULL,'7365107074',2), - (111,12,1,1,0,NULL,'383-4530',NULL,'3834530',2), - (112,12,1,0,0,NULL,'(663) 737-7171',NULL,'6637377171',2), - (113,115,1,1,0,NULL,'341-5400',NULL,'3415400',2), - (114,57,1,1,0,NULL,'684-3270',NULL,'6843270',1), - (115,95,1,1,0,NULL,'(491) 615-7953',NULL,'4916157953',1), - (116,22,1,1,0,NULL,'702-3099',NULL,'7023099',1), - (117,22,1,0,0,NULL,'(294) 697-1264',NULL,'2946971264',2), - (118,166,1,1,0,NULL,'457-5437',NULL,'4575437',2), - (119,43,1,1,0,NULL,'(732) 791-9566',NULL,'7327919566',1), - (120,32,1,1,0,NULL,'(874) 716-7158',NULL,'8747167158',2), - (121,32,1,0,0,NULL,'246-7976',NULL,'2467976',1), - (122,111,1,1,0,NULL,'598-5311',NULL,'5985311',2), - (123,111,1,0,0,NULL,'(202) 348-2710',NULL,'2023482710',2), - (124,85,1,1,0,NULL,'(692) 459-5224',NULL,'6924595224',1), - (125,85,1,0,0,NULL,'(830) 443-3011',NULL,'8304433011',1), - (126,165,1,1,0,NULL,'579-4156',NULL,'5794156',1), - (127,72,1,1,0,NULL,'451-2316',NULL,'4512316',2), - (128,72,1,0,0,NULL,'(651) 305-8044',NULL,'6513058044',1), - (129,23,1,1,0,NULL,'(683) 430-6646',NULL,'6834306646',2), - (130,23,1,0,0,NULL,'(209) 314-7644',NULL,'2093147644',2), - (131,81,1,1,0,NULL,'883-1683',NULL,'8831683',2), - (132,81,1,0,0,NULL,'336-4353',NULL,'3364353',1), - (133,92,1,1,0,NULL,'238-6809',NULL,'2386809',1), - (134,92,1,0,0,NULL,'405-3318',NULL,'4053318',1), - (135,132,1,1,0,NULL,'(280) 436-2380',NULL,'2804362380',1), - (136,100,1,1,0,NULL,'(322) 372-6506',NULL,'3223726506',1), - (137,45,1,1,0,NULL,'(469) 819-7258',NULL,'4698197258',2), - (138,112,1,1,0,NULL,'890-6903',NULL,'8906903',2), - (139,112,1,0,0,NULL,'337-9469',NULL,'3379469',2), - (140,149,1,1,0,NULL,'304-8553',NULL,'3048553',2), - (141,149,1,0,0,NULL,'404-3306',NULL,'4043306',2), - (142,51,1,1,0,NULL,'776-1231',NULL,'7761231',1), - (143,26,1,1,0,NULL,'(321) 348-9616',NULL,'3213489616',1), - (144,54,1,1,0,NULL,'(603) 678-9220',NULL,'6036789220',1), - (145,61,1,1,0,NULL,'810-5912',NULL,'8105912',2), - (146,68,1,1,0,NULL,'334-6690',NULL,'3346690',2), - (147,137,1,1,0,NULL,'295-6364',NULL,'2956364',1), - (148,193,1,1,0,NULL,'(533) 735-5675',NULL,'5337355675',1), - (149,193,1,0,0,NULL,'360-3554',NULL,'3603554',2), - (150,11,1,1,0,NULL,'(664) 349-1513',NULL,'6643491513',1), - (151,11,1,0,0,NULL,'519-3160',NULL,'5193160',2), - (152,170,1,1,0,NULL,'(876) 416-2098',NULL,'8764162098',2), - (153,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), - (154,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), - (155,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); + (1,23,1,1,0,NULL,'387-3648',NULL,'3873648',2), + (2,23,1,0,0,NULL,'(351) 379-5494',NULL,'3513795494',1), + (3,142,1,1,0,NULL,'689-3577',NULL,'6893577',2), + (4,142,1,0,0,NULL,'(479) 511-2935',NULL,'4795112935',2), + (5,81,1,1,0,NULL,'(227) 698-6092',NULL,'2276986092',2), + (6,81,1,0,0,NULL,'(648) 430-8401',NULL,'6484308401',2), + (7,77,1,1,0,NULL,'312-3068',NULL,'3123068',2), + (8,77,1,0,0,NULL,'(869) 614-5423',NULL,'8696145423',1), + (9,4,1,1,0,NULL,'(631) 397-1262',NULL,'6313971262',2), + (10,131,1,1,0,NULL,'(490) 308-6584',NULL,'4903086584',2), + (11,131,1,0,0,NULL,'(711) 277-9383',NULL,'7112779383',1), + (12,79,1,1,0,NULL,'225-3004',NULL,'2253004',1), + (13,79,1,0,0,NULL,'476-1633',NULL,'4761633',1), + (14,139,1,1,0,NULL,'(369) 504-1590',NULL,'3695041590',1), + (15,139,1,0,0,NULL,'817-8467',NULL,'8178467',1), + (16,39,1,1,0,NULL,'(714) 263-9191',NULL,'7142639191',1), + (17,164,1,1,0,NULL,'795-5777',NULL,'7955777',1), + (18,164,1,0,0,NULL,'(709) 533-3323',NULL,'7095333323',2), + (19,134,1,1,0,NULL,'(575) 832-2909',NULL,'5758322909',2), + (20,134,1,0,0,NULL,'714-4388',NULL,'7144388',1), + (21,104,1,1,0,NULL,'574-1896',NULL,'5741896',1), + (22,104,1,0,0,NULL,'542-9576',NULL,'5429576',1), + (23,120,1,1,0,NULL,'(851) 808-6861',NULL,'8518086861',1), + (24,120,1,0,0,NULL,'(699) 371-2374',NULL,'6993712374',2), + (25,24,1,1,0,NULL,'(837) 592-5209',NULL,'8375925209',2), + (26,24,1,0,0,NULL,'(244) 791-1891',NULL,'2447911891',1), + (27,172,1,1,0,NULL,'(326) 475-4621',NULL,'3264754621',2), + (28,162,1,1,0,NULL,'(473) 872-9756',NULL,'4738729756',2), + (29,162,1,0,0,NULL,'(317) 383-7774',NULL,'3173837774',1), + (30,56,1,1,0,NULL,'778-6017',NULL,'7786017',1), + (31,56,1,0,0,NULL,'(566) 286-9200',NULL,'5662869200',2), + (32,140,1,1,0,NULL,'(348) 594-4099',NULL,'3485944099',2), + (33,188,1,1,0,NULL,'753-2277',NULL,'7532277',2), + (34,7,1,1,0,NULL,'(466) 382-5886',NULL,'4663825886',2), + (35,7,1,0,0,NULL,'398-4468',NULL,'3984468',1), + (36,32,1,1,0,NULL,'(679) 737-4954',NULL,'6797374954',2), + (37,32,1,0,0,NULL,'420-6415',NULL,'4206415',1), + (38,18,1,1,0,NULL,'386-2619',NULL,'3862619',2), + (39,178,1,1,0,NULL,'256-6816',NULL,'2566816',1), + (40,178,1,0,0,NULL,'(495) 304-9211',NULL,'4953049211',1), + (41,179,1,1,0,NULL,'691-9924',NULL,'6919924',1), + (42,179,1,0,0,NULL,'(540) 282-1597',NULL,'5402821597',2), + (43,31,1,1,0,NULL,'(299) 667-1251',NULL,'2996671251',1), + (44,45,1,1,0,NULL,'(374) 373-2511',NULL,'3743732511',1), + (45,45,1,0,0,NULL,'745-7114',NULL,'7457114',1), + (46,144,1,1,0,NULL,'254-5043',NULL,'2545043',1), + (47,144,1,0,0,NULL,'(850) 379-2232',NULL,'8503792232',1), + (48,65,1,1,0,NULL,'337-3913',NULL,'3373913',2), + (49,150,1,1,0,NULL,'(750) 590-5724',NULL,'7505905724',1), + (50,112,1,1,0,NULL,'439-7562',NULL,'4397562',2), + (51,86,1,1,0,NULL,'(503) 436-2160',NULL,'5034362160',1), + (52,200,1,1,0,NULL,'678-9114',NULL,'6789114',1), + (53,53,1,1,0,NULL,'(331) 568-6042',NULL,'3315686042',1), + (54,53,1,0,0,NULL,'664-7896',NULL,'6647896',1), + (55,27,1,1,0,NULL,'835-4558',NULL,'8354558',2), + (56,27,1,0,0,NULL,'(809) 841-1856',NULL,'8098411856',2), + (57,94,1,1,0,NULL,'(717) 582-8057',NULL,'7175828057',1), + (58,94,1,0,0,NULL,'(766) 589-8158',NULL,'7665898158',2), + (59,66,1,1,0,NULL,'(543) 885-1648',NULL,'5438851648',2), + (60,66,1,0,0,NULL,'(302) 471-3276',NULL,'3024713276',2), + (61,60,1,1,0,NULL,'250-1554',NULL,'2501554',1), + (62,60,1,0,0,NULL,'793-4714',NULL,'7934714',2), + (63,54,1,1,0,NULL,'384-1264',NULL,'3841264',1), + (64,54,1,0,0,NULL,'297-2235',NULL,'2972235',2), + (65,143,1,1,0,NULL,'649-7296',NULL,'6497296',2), + (66,158,1,1,0,NULL,'524-9104',NULL,'5249104',2), + (67,36,1,1,0,NULL,'387-1979',NULL,'3871979',1), + (68,36,1,0,0,NULL,'(836) 700-5543',NULL,'8367005543',2), + (69,78,1,1,0,NULL,'(419) 497-4823',NULL,'4194974823',1), + (70,78,1,0,0,NULL,'(630) 740-4445',NULL,'6307404445',1), + (71,59,1,1,0,NULL,'(686) 335-4257',NULL,'6863354257',2), + (72,59,1,0,0,NULL,'647-7599',NULL,'6477599',1), + (73,85,1,1,0,NULL,'(397) 576-2338',NULL,'3975762338',2), + (74,5,1,1,0,NULL,'(282) 480-3520',NULL,'2824803520',2), + (75,5,1,0,0,NULL,'(756) 243-5971',NULL,'7562435971',1), + (76,153,1,1,0,NULL,'(573) 798-6883',NULL,'5737986883',2), + (77,84,1,1,0,NULL,'(771) 633-6841',NULL,'7716336841',2), + (78,84,1,0,0,NULL,'(518) 637-3019',NULL,'5186373019',1), + (79,71,1,1,0,NULL,'880-4069',NULL,'8804069',1), + (80,176,1,1,0,NULL,'404-1724',NULL,'4041724',2), + (81,12,1,1,0,NULL,'524-7390',NULL,'5247390',1), + (82,12,1,0,0,NULL,'(697) 801-1130',NULL,'6978011130',1), + (83,93,1,1,0,NULL,'480-7748',NULL,'4807748',1), + (84,127,1,1,0,NULL,'717-3253',NULL,'7173253',2), + (85,127,1,0,0,NULL,'677-7023',NULL,'6777023',2), + (86,28,1,1,0,NULL,'852-8047',NULL,'8528047',1), + (87,28,1,0,0,NULL,'(616) 605-3868',NULL,'6166053868',2), + (88,124,1,1,0,NULL,'584-1385',NULL,'5841385',1), + (89,103,1,1,0,NULL,'(207) 742-1998',NULL,'2077421998',2), + (90,103,1,0,0,NULL,'(536) 401-1444',NULL,'5364011444',1), + (91,151,1,1,0,NULL,'(823) 899-3526',NULL,'8238993526',2), + (92,151,1,0,0,NULL,'858-2281',NULL,'8582281',2), + (93,46,1,1,0,NULL,'607-6688',NULL,'6076688',1), + (94,46,1,0,0,NULL,'(535) 489-8018',NULL,'5354898018',2), + (95,119,1,1,0,NULL,'623-3422',NULL,'6233422',1), + (96,97,1,1,0,NULL,'(597) 831-2559',NULL,'5978312559',2), + (97,97,1,0,0,NULL,'(775) 495-2914',NULL,'7754952914',2), + (98,19,1,1,0,NULL,'623-9395',NULL,'6239395',1), + (99,19,1,0,0,NULL,'(679) 614-2786',NULL,'6796142786',2), + (100,166,1,1,0,NULL,'564-4772',NULL,'5644772',1), + (101,166,1,0,0,NULL,'391-7505',NULL,'3917505',1), + (102,169,1,1,0,NULL,'(670) 375-7341',NULL,'6703757341',1), + (103,167,1,1,0,NULL,'(659) 522-4827',NULL,'6595224827',2), + (104,167,1,0,0,NULL,'632-2842',NULL,'6322842',1), + (105,111,1,1,0,NULL,'581-5831',NULL,'5815831',2), + (106,192,1,1,0,NULL,'(431) 249-1790',NULL,'4312491790',1), + (107,192,1,0,0,NULL,'479-4701',NULL,'4794701',1), + (108,130,1,1,0,NULL,'402-2714',NULL,'4022714',2), + (109,130,1,0,0,NULL,'607-2824',NULL,'6072824',2), + (110,189,1,1,0,NULL,'(899) 655-5104',NULL,'8996555104',1), + (111,74,1,1,0,NULL,'441-6400',NULL,'4416400',1), + (112,15,1,1,0,NULL,'607-7802',NULL,'6077802',2), + (113,154,1,1,0,NULL,'228-1653',NULL,'2281653',2), + (114,154,1,0,0,NULL,'(267) 572-8987',NULL,'2675728987',1), + (115,8,1,1,0,NULL,'537-1955',NULL,'5371955',1), + (116,8,1,0,0,NULL,'(402) 569-5272',NULL,'4025695272',2), + (117,175,1,1,0,NULL,'(308) 419-2607',NULL,'3084192607',2), + (118,148,1,1,0,NULL,'(439) 516-8121',NULL,'4395168121',2), + (119,148,1,0,0,NULL,'(321) 766-2278',NULL,'3217662278',2), + (120,102,1,1,0,NULL,'273-6930',NULL,'2736930',1), + (121,75,1,1,0,NULL,'534-9393',NULL,'5349393',1), + (122,168,1,1,0,NULL,'(773) 251-2764',NULL,'7732512764',2), + (123,168,1,0,0,NULL,'(640) 209-1546',NULL,'6402091546',1), + (124,9,1,1,0,NULL,'(771) 362-1343',NULL,'7713621343',2), + (125,9,1,0,0,NULL,'343-2904',NULL,'3432904',2), + (126,155,1,1,0,NULL,'250-5235',NULL,'2505235',2), + (127,156,1,1,0,NULL,'517-1158',NULL,'5171158',1), + (128,64,1,1,0,NULL,'(514) 339-7031',NULL,'5143397031',1), + (129,64,1,0,0,NULL,'227-6524',NULL,'2276524',2), + (130,115,1,1,0,NULL,'353-4030',NULL,'3534030',2), + (131,115,1,0,0,NULL,'688-5764',NULL,'6885764',1), + (132,190,1,1,0,NULL,'540-4386',NULL,'5404386',2), + (133,69,1,1,0,NULL,'(851) 636-9926',NULL,'8516369926',1), + (134,118,1,1,0,NULL,'(717) 557-2162',NULL,'7175572162',1), + (135,118,1,0,0,NULL,'689-3891',NULL,'6893891',2), + (136,87,1,1,0,NULL,'(531) 877-4516',NULL,'5318774516',2), + (137,87,1,0,0,NULL,'(661) 759-2262',NULL,'6617592262',2), + (138,26,1,1,0,NULL,'835-2913',NULL,'8352913',1), + (139,57,1,1,0,NULL,'(484) 794-4160',NULL,'4847944160',2), + (140,195,1,1,0,NULL,'(801) 338-7654',NULL,'8013387654',1), + (141,195,1,0,0,NULL,'(490) 465-8146',NULL,'4904658146',2), + (142,126,1,1,0,NULL,'320-9323',NULL,'3209323',2), + (143,126,1,0,0,NULL,'222-7520',NULL,'2227520',2), + (144,51,1,1,0,NULL,'713-8671',NULL,'7138671',2), + (145,51,1,0,0,NULL,'(649) 632-3183',NULL,'6496323183',1), + (146,100,1,1,0,NULL,'354-7382',NULL,'3547382',1), + (147,100,1,0,0,NULL,'646-4676',NULL,'6464676',2), + (148,182,1,1,0,NULL,'(785) 374-6864',NULL,'7853746864',2), + (149,149,1,1,0,NULL,'849-4746',NULL,'8494746',2), + (150,149,1,0,0,NULL,'(412) 217-9890',NULL,'4122179890',2), + (151,132,1,1,0,NULL,'510-1525',NULL,'5101525',1), + (152,16,1,1,0,NULL,'(694) 328-2409',NULL,'6943282409',1), + (153,82,1,1,0,NULL,'(636) 503-3294',NULL,'6365033294',1), + (154,82,1,0,0,NULL,'(349) 665-9206',NULL,'3496659206',2), + (155,107,1,1,0,NULL,'(655) 233-5000',NULL,'6552335000',1), + (156,174,1,1,0,NULL,'(570) 742-7110',NULL,'5707427110',2), + (157,174,1,0,0,NULL,'583-2538',NULL,'5832538',2), + (158,141,1,1,0,NULL,'765-2566',NULL,'7652566',1), + (159,141,1,0,0,NULL,'(507) 385-7968',NULL,'5073857968',2), + (160,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), + (161,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), + (162,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -7080,223 +7110,225 @@ 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,109,186,1,NULL,NULL,1,NULL,0,0,NULL), - (2,172,186,1,NULL,NULL,1,NULL,0,0,NULL), - (3,109,59,1,NULL,NULL,1,NULL,0,0,NULL), - (4,172,59,1,NULL,NULL,1,NULL,0,0,NULL), - (5,172,109,4,NULL,NULL,1,NULL,0,0,NULL), - (6,59,126,8,NULL,NULL,1,NULL,0,0,NULL), - (7,109,126,8,NULL,NULL,1,NULL,0,0,NULL), - (8,172,126,8,NULL,NULL,1,NULL,0,0,NULL), - (9,186,126,7,NULL,NULL,0,NULL,0,0,NULL), - (10,59,186,2,NULL,NULL,0,NULL,0,0,NULL), - (11,3,37,1,NULL,NULL,1,NULL,0,0,NULL), - (12,191,37,1,NULL,NULL,1,NULL,0,0,NULL), - (13,3,71,1,NULL,NULL,1,NULL,0,0,NULL), - (14,191,71,1,NULL,NULL,1,NULL,0,0,NULL), - (15,191,3,4,NULL,NULL,1,NULL,0,0,NULL), - (16,71,161,8,NULL,NULL,1,NULL,0,0,NULL), - (17,3,161,8,NULL,NULL,1,NULL,0,0,NULL), - (18,191,161,8,NULL,NULL,1,NULL,0,0,NULL), - (19,37,161,7,NULL,NULL,0,NULL,0,0,NULL), - (20,71,37,2,NULL,NULL,0,NULL,0,0,NULL), - (21,49,151,1,NULL,NULL,1,NULL,0,0,NULL), - (22,164,151,1,NULL,NULL,1,NULL,0,0,NULL), - (23,49,20,1,NULL,NULL,1,NULL,0,0,NULL), - (24,164,20,1,NULL,NULL,1,NULL,0,0,NULL), - (25,164,49,4,NULL,NULL,1,NULL,0,0,NULL), - (26,20,117,8,NULL,NULL,1,NULL,0,0,NULL), - (27,49,117,8,NULL,NULL,1,NULL,0,0,NULL), - (28,164,117,8,NULL,NULL,1,NULL,0,0,NULL), - (29,151,117,7,NULL,NULL,1,NULL,0,0,NULL), - (30,20,151,2,NULL,NULL,1,NULL,0,0,NULL), - (31,201,176,1,NULL,NULL,1,NULL,0,0,NULL), - (32,185,176,1,NULL,NULL,1,NULL,0,0,NULL), - (33,201,96,1,NULL,NULL,1,NULL,0,0,NULL), - (34,185,96,1,NULL,NULL,1,NULL,0,0,NULL), - (35,185,201,4,NULL,NULL,1,NULL,0,0,NULL), - (36,96,58,8,NULL,NULL,1,NULL,0,0,NULL), - (37,201,58,8,NULL,NULL,1,NULL,0,0,NULL), - (38,185,58,8,NULL,NULL,1,NULL,0,0,NULL), - (39,176,58,7,NULL,NULL,1,NULL,0,0,NULL), - (40,96,176,2,NULL,NULL,1,NULL,0,0,NULL), - (41,118,83,1,NULL,NULL,1,NULL,0,0,NULL), - (42,102,83,1,NULL,NULL,1,NULL,0,0,NULL), - (43,118,175,1,NULL,NULL,1,NULL,0,0,NULL), - (44,102,175,1,NULL,NULL,1,NULL,0,0,NULL), - (45,102,118,4,NULL,NULL,1,NULL,0,0,NULL), - (46,175,105,8,NULL,NULL,1,NULL,0,0,NULL), - (47,118,105,8,NULL,NULL,1,NULL,0,0,NULL), - (48,102,105,8,NULL,NULL,1,NULL,0,0,NULL), - (49,83,105,7,NULL,NULL,0,NULL,0,0,NULL), - (50,175,83,2,NULL,NULL,0,NULL,0,0,NULL), - (51,14,145,1,NULL,NULL,1,NULL,0,0,NULL), - (52,110,145,1,NULL,NULL,1,NULL,0,0,NULL), - (53,14,34,1,NULL,NULL,1,NULL,0,0,NULL), - (54,110,34,1,NULL,NULL,1,NULL,0,0,NULL), - (55,110,14,4,NULL,NULL,1,NULL,0,0,NULL), - (56,34,196,8,NULL,NULL,1,NULL,0,0,NULL), - (57,14,196,8,NULL,NULL,1,NULL,0,0,NULL), - (58,110,196,8,NULL,NULL,1,NULL,0,0,NULL), - (59,145,196,7,NULL,NULL,1,NULL,0,0,NULL), - (60,34,145,2,NULL,NULL,1,NULL,0,0,NULL), - (61,25,107,1,NULL,NULL,1,NULL,0,0,NULL), - (62,41,107,1,NULL,NULL,1,NULL,0,0,NULL), - (63,25,47,1,NULL,NULL,1,NULL,0,0,NULL), - (64,41,47,1,NULL,NULL,1,NULL,0,0,NULL), - (65,41,25,4,NULL,NULL,1,NULL,0,0,NULL), - (66,47,66,8,NULL,NULL,1,NULL,0,0,NULL), - (67,25,66,8,NULL,NULL,1,NULL,0,0,NULL), - (68,41,66,8,NULL,NULL,1,NULL,0,0,NULL), - (69,107,66,7,NULL,NULL,0,NULL,0,0,NULL), - (70,47,107,2,NULL,NULL,0,NULL,0,0,NULL), - (71,63,73,1,NULL,NULL,1,NULL,0,0,NULL), - (72,87,73,1,NULL,NULL,1,NULL,0,0,NULL), - (73,63,178,1,NULL,NULL,1,NULL,0,0,NULL), - (74,87,178,1,NULL,NULL,1,NULL,0,0,NULL), - (75,87,63,4,NULL,NULL,1,NULL,0,0,NULL), - (76,178,106,8,NULL,NULL,1,NULL,0,0,NULL), - (77,63,106,8,NULL,NULL,1,NULL,0,0,NULL), - (78,87,106,8,NULL,NULL,1,NULL,0,0,NULL), - (79,73,106,7,NULL,NULL,0,NULL,0,0,NULL), - (80,178,73,2,NULL,NULL,0,NULL,0,0,NULL), - (81,13,15,1,NULL,NULL,1,NULL,0,0,NULL), - (82,189,15,1,NULL,NULL,1,NULL,0,0,NULL), - (83,13,55,1,NULL,NULL,1,NULL,0,0,NULL), - (84,189,55,1,NULL,NULL,1,NULL,0,0,NULL), - (85,189,13,4,NULL,NULL,1,NULL,0,0,NULL), - (86,55,125,8,NULL,NULL,1,NULL,0,0,NULL), - (87,13,125,8,NULL,NULL,1,NULL,0,0,NULL), - (88,189,125,8,NULL,NULL,1,NULL,0,0,NULL), - (89,15,125,7,NULL,NULL,1,NULL,0,0,NULL), - (90,55,15,2,NULL,NULL,1,NULL,0,0,NULL), - (91,38,133,1,NULL,NULL,1,NULL,0,0,NULL), - (92,187,133,1,NULL,NULL,1,NULL,0,0,NULL), - (93,38,30,1,NULL,NULL,1,NULL,0,0,NULL), - (94,187,30,1,NULL,NULL,1,NULL,0,0,NULL), - (95,187,38,4,NULL,NULL,1,NULL,0,0,NULL), - (96,30,8,8,NULL,NULL,1,NULL,0,0,NULL), - (97,38,8,8,NULL,NULL,1,NULL,0,0,NULL), - (98,187,8,8,NULL,NULL,1,NULL,0,0,NULL), - (99,133,8,7,NULL,NULL,1,NULL,0,0,NULL), - (100,30,133,2,NULL,NULL,1,NULL,0,0,NULL), - (101,12,150,1,NULL,NULL,1,NULL,0,0,NULL), - (102,115,150,1,NULL,NULL,1,NULL,0,0,NULL), - (103,12,46,1,NULL,NULL,1,NULL,0,0,NULL), - (104,115,46,1,NULL,NULL,1,NULL,0,0,NULL), - (105,115,12,4,NULL,NULL,1,NULL,0,0,NULL), - (106,46,86,8,NULL,NULL,1,NULL,0,0,NULL), - (107,12,86,8,NULL,NULL,1,NULL,0,0,NULL), - (108,115,86,8,NULL,NULL,1,NULL,0,0,NULL), - (109,150,86,7,NULL,NULL,1,NULL,0,0,NULL), - (110,46,150,2,NULL,NULL,1,NULL,0,0,NULL), - (111,57,177,1,NULL,NULL,1,NULL,0,0,NULL), - (112,95,177,1,NULL,NULL,1,NULL,0,0,NULL), - (113,57,91,1,NULL,NULL,1,NULL,0,0,NULL), - (114,95,91,1,NULL,NULL,1,NULL,0,0,NULL), - (115,95,57,4,NULL,NULL,1,NULL,0,0,NULL), - (116,91,108,8,NULL,NULL,1,NULL,0,0,NULL), - (117,57,108,8,NULL,NULL,1,NULL,0,0,NULL), - (118,95,108,8,NULL,NULL,1,NULL,0,0,NULL), - (119,177,108,7,NULL,NULL,1,NULL,0,0,NULL), - (120,91,177,2,NULL,NULL,1,NULL,0,0,NULL), - (121,43,22,1,NULL,NULL,1,NULL,0,0,NULL), - (122,32,22,1,NULL,NULL,1,NULL,0,0,NULL), - (123,43,166,1,NULL,NULL,1,NULL,0,0,NULL), - (124,32,166,1,NULL,NULL,1,NULL,0,0,NULL), - (125,32,43,4,NULL,NULL,1,NULL,0,0,NULL), - (126,166,90,8,NULL,NULL,1,NULL,0,0,NULL), - (127,43,90,8,NULL,NULL,1,NULL,0,0,NULL), - (128,32,90,8,NULL,NULL,1,NULL,0,0,NULL), - (129,22,90,7,NULL,NULL,0,NULL,0,0,NULL), - (130,166,22,2,NULL,NULL,0,NULL,0,0,NULL), - (131,165,111,1,NULL,NULL,1,NULL,0,0,NULL), - (132,72,111,1,NULL,NULL,1,NULL,0,0,NULL), - (133,165,85,1,NULL,NULL,1,NULL,0,0,NULL), - (134,72,85,1,NULL,NULL,1,NULL,0,0,NULL), - (135,72,165,4,NULL,NULL,1,NULL,0,0,NULL), - (136,85,70,8,NULL,NULL,1,NULL,0,0,NULL), - (137,165,70,8,NULL,NULL,1,NULL,0,0,NULL), - (138,72,70,8,NULL,NULL,1,NULL,0,0,NULL), - (139,111,70,7,NULL,NULL,1,NULL,0,0,NULL), - (140,85,111,2,NULL,NULL,1,NULL,0,0,NULL), - (141,81,60,1,NULL,NULL,1,NULL,0,0,NULL), - (142,92,60,1,NULL,NULL,1,NULL,0,0,NULL), - (143,81,23,1,NULL,NULL,1,NULL,0,0,NULL), - (144,92,23,1,NULL,NULL,1,NULL,0,0,NULL), - (145,92,81,4,NULL,NULL,1,NULL,0,0,NULL), - (146,23,182,8,NULL,NULL,1,NULL,0,0,NULL), - (147,81,182,8,NULL,NULL,1,NULL,0,0,NULL), - (148,92,182,8,NULL,NULL,1,NULL,0,0,NULL), - (149,60,182,7,NULL,NULL,1,NULL,0,0,NULL), - (150,23,60,2,NULL,NULL,1,NULL,0,0,NULL), - (151,97,132,1,NULL,NULL,1,NULL,0,0,NULL), - (152,157,132,1,NULL,NULL,1,NULL,0,0,NULL), - (153,97,100,1,NULL,NULL,1,NULL,0,0,NULL), - (154,157,100,1,NULL,NULL,1,NULL,0,0,NULL), - (155,157,97,4,NULL,NULL,1,NULL,0,0,NULL), - (156,100,88,8,NULL,NULL,1,NULL,0,0,NULL), - (157,97,88,8,NULL,NULL,1,NULL,0,0,NULL), - (158,157,88,8,NULL,NULL,1,NULL,0,0,NULL), - (159,132,88,7,NULL,NULL,0,NULL,0,0,NULL), - (160,100,132,2,NULL,NULL,0,NULL,0,0,NULL), - (161,28,45,1,NULL,NULL,1,NULL,0,0,NULL), - (162,149,45,1,NULL,NULL,1,NULL,0,0,NULL), - (163,28,112,1,NULL,NULL,1,NULL,0,0,NULL), - (164,149,112,1,NULL,NULL,1,NULL,0,0,NULL), - (165,149,28,4,NULL,NULL,1,NULL,0,0,NULL), - (166,112,122,8,NULL,NULL,1,NULL,0,0,NULL), - (167,28,122,8,NULL,NULL,1,NULL,0,0,NULL), - (168,149,122,8,NULL,NULL,1,NULL,0,0,NULL), - (169,45,122,7,NULL,NULL,0,NULL,0,0,NULL), - (170,112,45,2,NULL,NULL,0,NULL,0,0,NULL), - (171,54,51,1,NULL,NULL,1,NULL,0,0,NULL), - (172,61,51,1,NULL,NULL,1,NULL,0,0,NULL), - (173,54,26,1,NULL,NULL,1,NULL,0,0,NULL), - (174,61,26,1,NULL,NULL,1,NULL,0,0,NULL), - (175,61,54,4,NULL,NULL,1,NULL,0,0,NULL), - (176,26,36,8,NULL,NULL,1,NULL,0,0,NULL), - (177,54,36,8,NULL,NULL,1,NULL,0,0,NULL), - (178,61,36,8,NULL,NULL,1,NULL,0,0,NULL), - (179,51,36,7,NULL,NULL,1,NULL,0,0,NULL), - (180,26,51,2,NULL,NULL,1,NULL,0,0,NULL), - (181,180,68,1,NULL,NULL,1,NULL,0,0,NULL), - (182,137,68,1,NULL,NULL,1,NULL,0,0,NULL), - (183,180,116,1,NULL,NULL,1,NULL,0,0,NULL), - (184,137,116,1,NULL,NULL,1,NULL,0,0,NULL), - (185,137,180,4,NULL,NULL,1,NULL,0,0,NULL), - (186,116,194,8,NULL,NULL,1,NULL,0,0,NULL), - (187,180,194,8,NULL,NULL,1,NULL,0,0,NULL), - (188,137,194,8,NULL,NULL,1,NULL,0,0,NULL), - (189,68,194,7,NULL,NULL,1,NULL,0,0,NULL), - (190,116,68,2,NULL,NULL,1,NULL,0,0,NULL), - (191,170,193,1,NULL,NULL,1,NULL,0,0,NULL), - (192,197,193,1,NULL,NULL,1,NULL,0,0,NULL), - (193,170,11,1,NULL,NULL,1,NULL,0,0,NULL), - (194,197,11,1,NULL,NULL,1,NULL,0,0,NULL), - (195,197,170,4,NULL,NULL,1,NULL,0,0,NULL), - (196,11,74,8,NULL,NULL,1,NULL,0,0,NULL), - (197,170,74,8,NULL,NULL,1,NULL,0,0,NULL), - (198,197,74,8,NULL,NULL,1,NULL,0,0,NULL), - (199,193,74,7,NULL,NULL,1,NULL,0,0,NULL), - (200,11,193,2,NULL,NULL,1,NULL,0,0,NULL), - (201,9,33,5,NULL,NULL,1,NULL,0,0,NULL), - (202,17,40,5,NULL,NULL,1,NULL,0,0,NULL), - (203,143,62,5,NULL,NULL,1,NULL,0,0,NULL), - (204,21,65,5,NULL,NULL,1,NULL,0,0,NULL), - (205,166,79,5,NULL,NULL,1,NULL,0,0,NULL), - (206,168,94,5,NULL,NULL,1,NULL,0,0,NULL), - (207,199,103,5,NULL,NULL,1,NULL,0,0,NULL), - (208,153,120,5,NULL,NULL,1,NULL,0,0,NULL), - (209,118,128,5,NULL,NULL,1,NULL,0,0,NULL), - (210,177,135,5,NULL,NULL,1,NULL,0,0,NULL), - (211,130,141,5,NULL,NULL,1,NULL,0,0,NULL), - (212,92,154,5,NULL,NULL,1,NULL,0,0,NULL), - (213,91,160,5,NULL,NULL,1,NULL,0,0,NULL), - (214,116,174,5,NULL,NULL,1,NULL,0,0,NULL), - (215,27,181,5,NULL,NULL,1,NULL,0,0,NULL), - (216,101,188,5,NULL,NULL,1,NULL,0,0,NULL), - (217,43,190,5,NULL,NULL,1,NULL,0,0,NULL); + (1,159,34,1,NULL,NULL,1,NULL,0,0,NULL), + (2,93,34,1,NULL,NULL,1,NULL,0,0,NULL), + (3,159,12,1,NULL,NULL,1,NULL,0,0,NULL), + (4,93,12,1,NULL,NULL,1,NULL,0,0,NULL), + (5,93,159,4,NULL,NULL,1,NULL,0,0,NULL), + (6,12,117,8,NULL,NULL,1,NULL,0,0,NULL), + (7,159,117,8,NULL,NULL,1,NULL,0,0,NULL), + (8,93,117,8,NULL,NULL,1,NULL,0,0,NULL), + (9,34,117,7,NULL,NULL,1,NULL,0,0,NULL), + (10,12,34,2,NULL,NULL,1,NULL,0,0,NULL), + (11,28,127,1,NULL,NULL,1,NULL,0,0,NULL), + (12,124,127,1,NULL,NULL,1,NULL,0,0,NULL), + (13,28,138,1,NULL,NULL,1,NULL,0,0,NULL), + (14,124,138,1,NULL,NULL,1,NULL,0,0,NULL), + (15,124,28,4,NULL,NULL,1,NULL,0,0,NULL), + (16,138,173,8,NULL,NULL,1,NULL,0,0,NULL), + (17,28,173,8,NULL,NULL,1,NULL,0,0,NULL), + (18,124,173,8,NULL,NULL,1,NULL,0,0,NULL), + (19,127,173,7,NULL,NULL,0,NULL,0,0,NULL), + (20,138,127,2,NULL,NULL,0,NULL,0,0,NULL), + (21,151,193,1,NULL,NULL,1,NULL,0,0,NULL), + (22,46,193,1,NULL,NULL,1,NULL,0,0,NULL), + (23,151,103,1,NULL,NULL,1,NULL,0,0,NULL), + (24,46,103,1,NULL,NULL,1,NULL,0,0,NULL), + (25,46,151,4,NULL,NULL,1,NULL,0,0,NULL), + (26,103,6,8,NULL,NULL,1,NULL,0,0,NULL), + (27,151,6,8,NULL,NULL,1,NULL,0,0,NULL), + (28,46,6,8,NULL,NULL,1,NULL,0,0,NULL), + (29,193,6,7,NULL,NULL,0,NULL,0,0,NULL), + (30,103,193,2,NULL,NULL,0,NULL,0,0,NULL), + (31,183,119,1,NULL,NULL,1,NULL,0,0,NULL), + (32,97,119,1,NULL,NULL,1,NULL,0,0,NULL), + (33,183,147,1,NULL,NULL,1,NULL,0,0,NULL), + (34,97,147,1,NULL,NULL,1,NULL,0,0,NULL), + (35,97,183,4,NULL,NULL,1,NULL,0,0,NULL), + (36,147,128,8,NULL,NULL,1,NULL,0,0,NULL), + (37,183,128,8,NULL,NULL,1,NULL,0,0,NULL), + (38,97,128,8,NULL,NULL,1,NULL,0,0,NULL), + (39,119,128,7,NULL,NULL,1,NULL,0,0,NULL), + (40,147,119,2,NULL,NULL,1,NULL,0,0,NULL), + (41,166,19,1,NULL,NULL,1,NULL,0,0,NULL), + (42,169,19,1,NULL,NULL,1,NULL,0,0,NULL), + (43,166,67,1,NULL,NULL,1,NULL,0,0,NULL), + (44,169,67,1,NULL,NULL,1,NULL,0,0,NULL), + (45,169,166,4,NULL,NULL,1,NULL,0,0,NULL), + (46,67,22,8,NULL,NULL,1,NULL,0,0,NULL), + (47,166,22,8,NULL,NULL,1,NULL,0,0,NULL), + (48,169,22,8,NULL,NULL,1,NULL,0,0,NULL), + (49,19,22,7,NULL,NULL,1,NULL,0,0,NULL), + (50,67,19,2,NULL,NULL,1,NULL,0,0,NULL), + (51,113,167,1,NULL,NULL,1,NULL,0,0,NULL), + (52,192,167,1,NULL,NULL,1,NULL,0,0,NULL), + (53,113,111,1,NULL,NULL,1,NULL,0,0,NULL), + (54,192,111,1,NULL,NULL,1,NULL,0,0,NULL), + (55,192,113,4,NULL,NULL,1,NULL,0,0,NULL), + (56,111,99,8,NULL,NULL,1,NULL,0,0,NULL), + (57,113,99,8,NULL,NULL,1,NULL,0,0,NULL), + (58,192,99,8,NULL,NULL,1,NULL,0,0,NULL), + (59,167,99,7,NULL,NULL,0,NULL,0,0,NULL), + (60,111,167,2,NULL,NULL,0,NULL,0,0,NULL), + (61,92,122,1,NULL,NULL,1,NULL,0,0,NULL), + (62,114,122,1,NULL,NULL,1,NULL,0,0,NULL), + (63,92,130,1,NULL,NULL,1,NULL,0,0,NULL), + (64,114,130,1,NULL,NULL,1,NULL,0,0,NULL), + (65,114,92,4,NULL,NULL,1,NULL,0,0,NULL), + (66,130,98,8,NULL,NULL,1,NULL,0,0,NULL), + (67,92,98,8,NULL,NULL,1,NULL,0,0,NULL), + (68,114,98,8,NULL,NULL,1,NULL,0,0,NULL), + (69,122,98,7,NULL,NULL,1,NULL,0,0,NULL), + (70,130,122,2,NULL,NULL,1,NULL,0,0,NULL), + (71,68,189,1,NULL,NULL,1,NULL,0,0,NULL), + (72,15,189,1,NULL,NULL,1,NULL,0,0,NULL), + (73,68,74,1,NULL,NULL,1,NULL,0,0,NULL), + (74,15,74,1,NULL,NULL,1,NULL,0,0,NULL), + (75,15,68,4,NULL,NULL,1,NULL,0,0,NULL), + (76,74,20,8,NULL,NULL,1,NULL,0,0,NULL), + (77,68,20,8,NULL,NULL,1,NULL,0,0,NULL), + (78,15,20,8,NULL,NULL,1,NULL,0,0,NULL), + (79,189,20,7,NULL,NULL,0,NULL,0,0,NULL), + (80,74,189,2,NULL,NULL,0,NULL,0,0,NULL), + (81,95,161,1,NULL,NULL,1,NULL,0,0,NULL), + (82,154,161,1,NULL,NULL,1,NULL,0,0,NULL), + (83,95,110,1,NULL,NULL,1,NULL,0,0,NULL), + (84,154,110,1,NULL,NULL,1,NULL,0,0,NULL), + (85,154,95,4,NULL,NULL,1,NULL,0,0,NULL), + (86,110,52,8,NULL,NULL,1,NULL,0,0,NULL), + (87,95,52,8,NULL,NULL,1,NULL,0,0,NULL), + (88,154,52,8,NULL,NULL,1,NULL,0,0,NULL), + (89,161,52,7,NULL,NULL,1,NULL,0,0,NULL), + (90,110,161,2,NULL,NULL,1,NULL,0,0,NULL), + (91,8,108,1,NULL,NULL,1,NULL,0,0,NULL), + (92,175,108,1,NULL,NULL,1,NULL,0,0,NULL), + (93,8,157,1,NULL,NULL,1,NULL,0,0,NULL), + (94,175,157,1,NULL,NULL,1,NULL,0,0,NULL), + (95,175,8,4,NULL,NULL,1,NULL,0,0,NULL), + (96,157,48,8,NULL,NULL,1,NULL,0,0,NULL), + (97,8,48,8,NULL,NULL,1,NULL,0,0,NULL), + (98,175,48,8,NULL,NULL,1,NULL,0,0,NULL), + (99,108,48,7,NULL,NULL,1,NULL,0,0,NULL), + (100,157,108,2,NULL,NULL,1,NULL,0,0,NULL), + (101,75,148,1,NULL,NULL,1,NULL,0,0,NULL), + (102,133,148,1,NULL,NULL,1,NULL,0,0,NULL), + (103,75,102,1,NULL,NULL,1,NULL,0,0,NULL), + (104,133,102,1,NULL,NULL,1,NULL,0,0,NULL), + (105,133,75,4,NULL,NULL,1,NULL,0,0,NULL), + (106,102,184,8,NULL,NULL,1,NULL,0,0,NULL), + (107,75,184,8,NULL,NULL,1,NULL,0,0,NULL), + (108,133,184,8,NULL,NULL,1,NULL,0,0,NULL), + (109,148,184,7,NULL,NULL,1,NULL,0,0,NULL), + (110,102,148,2,NULL,NULL,1,NULL,0,0,NULL), + (111,38,168,1,NULL,NULL,1,NULL,0,0,NULL), + (112,155,168,1,NULL,NULL,1,NULL,0,0,NULL), + (113,38,9,1,NULL,NULL,1,NULL,0,0,NULL), + (114,155,9,1,NULL,NULL,1,NULL,0,0,NULL), + (115,155,38,4,NULL,NULL,1,NULL,0,0,NULL), + (116,9,42,8,NULL,NULL,1,NULL,0,0,NULL), + (117,38,42,8,NULL,NULL,1,NULL,0,0,NULL), + (118,155,42,8,NULL,NULL,1,NULL,0,0,NULL), + (119,168,42,7,NULL,NULL,1,NULL,0,0,NULL), + (120,9,168,2,NULL,NULL,1,NULL,0,0,NULL), + (121,64,156,1,NULL,NULL,1,NULL,0,0,NULL), + (122,115,156,1,NULL,NULL,1,NULL,0,0,NULL), + (123,64,21,1,NULL,NULL,1,NULL,0,0,NULL), + (124,115,21,1,NULL,NULL,1,NULL,0,0,NULL), + (125,115,64,4,NULL,NULL,1,NULL,0,0,NULL), + (126,21,29,8,NULL,NULL,1,NULL,0,0,NULL), + (127,64,29,8,NULL,NULL,1,NULL,0,0,NULL), + (128,115,29,8,NULL,NULL,1,NULL,0,0,NULL), + (129,156,29,7,NULL,NULL,1,NULL,0,0,NULL), + (130,21,156,2,NULL,NULL,1,NULL,0,0,NULL), + (131,118,190,1,NULL,NULL,1,NULL,0,0,NULL), + (132,87,190,1,NULL,NULL,1,NULL,0,0,NULL), + (133,118,69,1,NULL,NULL,1,NULL,0,0,NULL), + (134,87,69,1,NULL,NULL,1,NULL,0,0,NULL), + (135,87,118,4,NULL,NULL,1,NULL,0,0,NULL), + (136,69,50,8,NULL,NULL,1,NULL,0,0,NULL), + (137,118,50,8,NULL,NULL,1,NULL,0,0,NULL), + (138,87,50,8,NULL,NULL,1,NULL,0,0,NULL), + (139,190,50,7,NULL,NULL,0,NULL,0,0,NULL), + (140,69,190,2,NULL,NULL,0,NULL,0,0,NULL), + (141,83,123,1,NULL,NULL,1,NULL,0,0,NULL), + (142,26,123,1,NULL,NULL,1,NULL,0,0,NULL), + (143,83,160,1,NULL,NULL,1,NULL,0,0,NULL), + (144,26,160,1,NULL,NULL,1,NULL,0,0,NULL), + (145,26,83,4,NULL,NULL,1,NULL,0,0,NULL), + (146,160,13,8,NULL,NULL,1,NULL,0,0,NULL), + (147,83,13,8,NULL,NULL,1,NULL,0,0,NULL), + (148,26,13,8,NULL,NULL,1,NULL,0,0,NULL), + (149,123,13,7,NULL,NULL,1,NULL,0,0,NULL), + (150,160,123,2,NULL,NULL,1,NULL,0,0,NULL), + (151,196,57,1,NULL,NULL,1,NULL,0,0,NULL), + (152,191,57,1,NULL,NULL,1,NULL,0,0,NULL), + (153,196,63,1,NULL,NULL,1,NULL,0,0,NULL), + (154,191,63,1,NULL,NULL,1,NULL,0,0,NULL), + (155,191,196,4,NULL,NULL,1,NULL,0,0,NULL), + (156,63,135,8,NULL,NULL,1,NULL,0,0,NULL), + (157,196,135,8,NULL,NULL,1,NULL,0,0,NULL), + (158,191,135,8,NULL,NULL,1,NULL,0,0,NULL), + (159,57,135,7,NULL,NULL,1,NULL,0,0,NULL), + (160,63,57,2,NULL,NULL,1,NULL,0,0,NULL), + (161,116,195,1,NULL,NULL,1,NULL,0,0,NULL), + (162,51,195,1,NULL,NULL,1,NULL,0,0,NULL), + (163,116,126,1,NULL,NULL,1,NULL,0,0,NULL), + (164,51,126,1,NULL,NULL,1,NULL,0,0,NULL), + (165,51,116,4,NULL,NULL,1,NULL,0,0,NULL), + (166,126,37,8,NULL,NULL,1,NULL,0,0,NULL), + (167,116,37,8,NULL,NULL,1,NULL,0,0,NULL), + (168,51,37,8,NULL,NULL,1,NULL,0,0,NULL), + (169,195,37,7,NULL,NULL,1,NULL,0,0,NULL), + (170,126,195,2,NULL,NULL,1,NULL,0,0,NULL), + (171,171,100,1,NULL,NULL,1,NULL,0,0,NULL), + (172,182,100,1,NULL,NULL,1,NULL,0,0,NULL), + (173,171,11,1,NULL,NULL,1,NULL,0,0,NULL), + (174,182,11,1,NULL,NULL,1,NULL,0,0,NULL), + (175,182,171,4,NULL,NULL,1,NULL,0,0,NULL), + (176,11,14,8,NULL,NULL,1,NULL,0,0,NULL), + (177,171,14,8,NULL,NULL,1,NULL,0,0,NULL), + (178,182,14,8,NULL,NULL,1,NULL,0,0,NULL), + (179,100,14,7,NULL,NULL,0,NULL,0,0,NULL), + (180,11,100,2,NULL,NULL,0,NULL,0,0,NULL), + (181,47,149,1,NULL,NULL,1,NULL,0,0,NULL), + (182,16,149,1,NULL,NULL,1,NULL,0,0,NULL), + (183,47,132,1,NULL,NULL,1,NULL,0,0,NULL), + (184,16,132,1,NULL,NULL,1,NULL,0,0,NULL), + (185,16,47,4,NULL,NULL,1,NULL,0,0,NULL), + (186,132,62,8,NULL,NULL,1,NULL,0,0,NULL), + (187,47,62,8,NULL,NULL,1,NULL,0,0,NULL), + (188,16,62,8,NULL,NULL,1,NULL,0,0,NULL), + (189,149,62,7,NULL,NULL,1,NULL,0,0,NULL), + (190,132,149,2,NULL,NULL,1,NULL,0,0,NULL), + (191,174,82,1,NULL,NULL,1,NULL,0,0,NULL), + (192,141,82,1,NULL,NULL,1,NULL,0,0,NULL), + (193,174,107,1,NULL,NULL,1,NULL,0,0,NULL), + (194,141,107,1,NULL,NULL,1,NULL,0,0,NULL), + (195,141,174,4,NULL,NULL,1,NULL,0,0,NULL), + (196,107,10,8,NULL,NULL,1,NULL,0,0,NULL), + (197,174,10,8,NULL,NULL,1,NULL,0,0,NULL), + (198,141,10,8,NULL,NULL,1,NULL,0,0,NULL), + (199,82,10,7,NULL,NULL,1,NULL,0,0,NULL), + (200,107,82,2,NULL,NULL,1,NULL,0,0,NULL), + (201,113,25,5,NULL,NULL,1,NULL,0,0,NULL), + (202,163,40,5,NULL,NULL,1,NULL,0,0,NULL), + (203,60,41,5,NULL,NULL,1,NULL,0,0,NULL), + (204,172,49,5,NULL,NULL,1,NULL,0,0,NULL), + (205,11,61,5,NULL,NULL,1,NULL,0,0,NULL), + (206,171,70,5,NULL,NULL,1,NULL,0,0,NULL), + (207,68,72,5,NULL,NULL,1,NULL,0,0,NULL), + (208,185,80,5,NULL,NULL,1,NULL,0,0,NULL), + (209,175,90,5,NULL,NULL,1,NULL,0,0,NULL), + (210,97,91,5,NULL,NULL,1,NULL,0,0,NULL), + (211,126,106,5,NULL,NULL,1,NULL,0,0,NULL), + (212,170,109,5,NULL,NULL,1,NULL,0,0,NULL), + (213,188,125,5,NULL,NULL,1,NULL,0,0,NULL), + (214,65,136,5,NULL,NULL,1,NULL,0,0,NULL), + (215,85,137,5,NULL,NULL,1,NULL,0,0,NULL), + (216,59,186,5,NULL,NULL,1,NULL,0,0,NULL), + (217,139,194,5,NULL,NULL,1,NULL,0,0,NULL), + (218,93,198,5,NULL,NULL,1,NULL,0,0,NULL), + (219,116,201,5,NULL,NULL,1,NULL,0,0,NULL); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -7307,440 +7339,444 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship_cache` WRITE; /*!40000 ALTER TABLE `civicrm_relationship_cache` DISABLE KEYS */; INSERT INTO `civicrm_relationship_cache` (`id`, `relationship_id`, `relationship_type_id`, `orientation`, `near_contact_id`, `near_relation`, `far_contact_id`, `far_relation`, `is_active`, `start_date`, `end_date`, `case_id`) VALUES - (1,1,1,'a_b',109,'Child of',186,'Parent of',1,NULL,NULL,NULL), - (2,1,1,'b_a',186,'Parent of',109,'Child of',1,NULL,NULL,NULL), - (3,2,1,'a_b',172,'Child of',186,'Parent of',1,NULL,NULL,NULL), - (4,2,1,'b_a',186,'Parent of',172,'Child of',1,NULL,NULL,NULL), - (5,3,1,'a_b',109,'Child of',59,'Parent of',1,NULL,NULL,NULL), - (6,3,1,'b_a',59,'Parent of',109,'Child of',1,NULL,NULL,NULL), - (7,4,1,'a_b',172,'Child of',59,'Parent of',1,NULL,NULL,NULL), - (8,4,1,'b_a',59,'Parent of',172,'Child of',1,NULL,NULL,NULL), - (9,5,4,'a_b',172,'Sibling of',109,'Sibling of',1,NULL,NULL,NULL), - (10,5,4,'b_a',109,'Sibling of',172,'Sibling of',1,NULL,NULL,NULL), - (11,6,8,'a_b',59,'Household Member of',126,'Household Member is',1,NULL,NULL,NULL), - (12,6,8,'b_a',126,'Household Member is',59,'Household Member of',1,NULL,NULL,NULL), - (13,7,8,'a_b',109,'Household Member of',126,'Household Member is',1,NULL,NULL,NULL), - (14,7,8,'b_a',126,'Household Member is',109,'Household Member of',1,NULL,NULL,NULL), - (15,8,8,'a_b',172,'Household Member of',126,'Household Member is',1,NULL,NULL,NULL), - (16,8,8,'b_a',126,'Household Member is',172,'Household Member of',1,NULL,NULL,NULL), - (17,9,7,'a_b',186,'Head of Household for',126,'Head of Household is',0,NULL,NULL,NULL), - (18,9,7,'b_a',126,'Head of Household is',186,'Head of Household for',0,NULL,NULL,NULL), - (19,10,2,'a_b',59,'Spouse of',186,'Spouse of',0,NULL,NULL,NULL), - (20,10,2,'b_a',186,'Spouse of',59,'Spouse of',0,NULL,NULL,NULL), - (21,11,1,'a_b',3,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (22,11,1,'b_a',37,'Parent of',3,'Child of',1,NULL,NULL,NULL), - (23,12,1,'a_b',191,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (24,12,1,'b_a',37,'Parent of',191,'Child of',1,NULL,NULL,NULL), - (25,13,1,'a_b',3,'Child of',71,'Parent of',1,NULL,NULL,NULL), - (26,13,1,'b_a',71,'Parent of',3,'Child of',1,NULL,NULL,NULL), - (27,14,1,'a_b',191,'Child of',71,'Parent of',1,NULL,NULL,NULL), - (28,14,1,'b_a',71,'Parent of',191,'Child of',1,NULL,NULL,NULL), - (29,15,4,'a_b',191,'Sibling of',3,'Sibling of',1,NULL,NULL,NULL), - (30,15,4,'b_a',3,'Sibling of',191,'Sibling of',1,NULL,NULL,NULL), - (31,16,8,'a_b',71,'Household Member of',161,'Household Member is',1,NULL,NULL,NULL), - (32,16,8,'b_a',161,'Household Member is',71,'Household Member of',1,NULL,NULL,NULL), - (33,17,8,'a_b',3,'Household Member of',161,'Household Member is',1,NULL,NULL,NULL), - (34,17,8,'b_a',161,'Household Member is',3,'Household Member of',1,NULL,NULL,NULL), - (35,18,8,'a_b',191,'Household Member of',161,'Household Member is',1,NULL,NULL,NULL), - (36,18,8,'b_a',161,'Household Member is',191,'Household Member of',1,NULL,NULL,NULL), - (37,19,7,'a_b',37,'Head of Household for',161,'Head of Household is',0,NULL,NULL,NULL), - (38,19,7,'b_a',161,'Head of Household is',37,'Head of Household for',0,NULL,NULL,NULL), - (39,20,2,'a_b',71,'Spouse of',37,'Spouse of',0,NULL,NULL,NULL), - (40,20,2,'b_a',37,'Spouse of',71,'Spouse of',0,NULL,NULL,NULL), - (41,21,1,'a_b',49,'Child of',151,'Parent of',1,NULL,NULL,NULL), - (42,21,1,'b_a',151,'Parent of',49,'Child of',1,NULL,NULL,NULL), - (43,22,1,'a_b',164,'Child of',151,'Parent of',1,NULL,NULL,NULL), - (44,22,1,'b_a',151,'Parent of',164,'Child of',1,NULL,NULL,NULL), - (45,23,1,'a_b',49,'Child of',20,'Parent of',1,NULL,NULL,NULL), - (46,23,1,'b_a',20,'Parent of',49,'Child of',1,NULL,NULL,NULL), - (47,24,1,'a_b',164,'Child of',20,'Parent of',1,NULL,NULL,NULL), - (48,24,1,'b_a',20,'Parent of',164,'Child of',1,NULL,NULL,NULL), - (49,25,4,'a_b',164,'Sibling of',49,'Sibling of',1,NULL,NULL,NULL), - (50,25,4,'b_a',49,'Sibling of',164,'Sibling of',1,NULL,NULL,NULL), - (51,26,8,'a_b',20,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), - (52,26,8,'b_a',117,'Household Member is',20,'Household Member of',1,NULL,NULL,NULL), - (53,27,8,'a_b',49,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), - (54,27,8,'b_a',117,'Household Member is',49,'Household Member of',1,NULL,NULL,NULL), - (55,28,8,'a_b',164,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), - (56,28,8,'b_a',117,'Household Member is',164,'Household Member of',1,NULL,NULL,NULL), - (57,29,7,'a_b',151,'Head of Household for',117,'Head of Household is',1,NULL,NULL,NULL), - (58,29,7,'b_a',117,'Head of Household is',151,'Head of Household for',1,NULL,NULL,NULL), - (59,30,2,'a_b',20,'Spouse of',151,'Spouse of',1,NULL,NULL,NULL), - (60,30,2,'b_a',151,'Spouse of',20,'Spouse of',1,NULL,NULL,NULL), - (61,31,1,'a_b',201,'Child of',176,'Parent of',1,NULL,NULL,NULL), - (62,31,1,'b_a',176,'Parent of',201,'Child of',1,NULL,NULL,NULL), - (63,32,1,'a_b',185,'Child of',176,'Parent of',1,NULL,NULL,NULL), - (64,32,1,'b_a',176,'Parent of',185,'Child of',1,NULL,NULL,NULL), - (65,33,1,'a_b',201,'Child of',96,'Parent of',1,NULL,NULL,NULL), - (66,33,1,'b_a',96,'Parent of',201,'Child of',1,NULL,NULL,NULL), - (67,34,1,'a_b',185,'Child of',96,'Parent of',1,NULL,NULL,NULL), - (68,34,1,'b_a',96,'Parent of',185,'Child of',1,NULL,NULL,NULL), - (69,35,4,'a_b',185,'Sibling of',201,'Sibling of',1,NULL,NULL,NULL), - (70,35,4,'b_a',201,'Sibling of',185,'Sibling of',1,NULL,NULL,NULL), - (71,36,8,'a_b',96,'Household Member of',58,'Household Member is',1,NULL,NULL,NULL), - (72,36,8,'b_a',58,'Household Member is',96,'Household Member of',1,NULL,NULL,NULL), - (73,37,8,'a_b',201,'Household Member of',58,'Household Member is',1,NULL,NULL,NULL), - (74,37,8,'b_a',58,'Household Member is',201,'Household Member of',1,NULL,NULL,NULL), - (75,38,8,'a_b',185,'Household Member of',58,'Household Member is',1,NULL,NULL,NULL), - (76,38,8,'b_a',58,'Household Member is',185,'Household Member of',1,NULL,NULL,NULL), - (77,39,7,'a_b',176,'Head of Household for',58,'Head of Household is',1,NULL,NULL,NULL), - (78,39,7,'b_a',58,'Head of Household is',176,'Head of Household for',1,NULL,NULL,NULL), - (79,40,2,'a_b',96,'Spouse of',176,'Spouse of',1,NULL,NULL,NULL), - (80,40,2,'b_a',176,'Spouse of',96,'Spouse of',1,NULL,NULL,NULL), - (81,41,1,'a_b',118,'Child of',83,'Parent of',1,NULL,NULL,NULL), - (82,41,1,'b_a',83,'Parent of',118,'Child of',1,NULL,NULL,NULL), - (83,42,1,'a_b',102,'Child of',83,'Parent of',1,NULL,NULL,NULL), - (84,42,1,'b_a',83,'Parent of',102,'Child of',1,NULL,NULL,NULL), - (85,43,1,'a_b',118,'Child of',175,'Parent of',1,NULL,NULL,NULL), - (86,43,1,'b_a',175,'Parent of',118,'Child of',1,NULL,NULL,NULL), - (87,44,1,'a_b',102,'Child of',175,'Parent of',1,NULL,NULL,NULL), - (88,44,1,'b_a',175,'Parent of',102,'Child of',1,NULL,NULL,NULL), - (89,45,4,'a_b',102,'Sibling of',118,'Sibling of',1,NULL,NULL,NULL), - (90,45,4,'b_a',118,'Sibling of',102,'Sibling of',1,NULL,NULL,NULL), - (91,46,8,'a_b',175,'Household Member of',105,'Household Member is',1,NULL,NULL,NULL), - (92,46,8,'b_a',105,'Household Member is',175,'Household Member of',1,NULL,NULL,NULL), - (93,47,8,'a_b',118,'Household Member of',105,'Household Member is',1,NULL,NULL,NULL), - (94,47,8,'b_a',105,'Household Member is',118,'Household Member of',1,NULL,NULL,NULL), - (95,48,8,'a_b',102,'Household Member of',105,'Household Member is',1,NULL,NULL,NULL), - (96,48,8,'b_a',105,'Household Member is',102,'Household Member of',1,NULL,NULL,NULL), - (97,49,7,'a_b',83,'Head of Household for',105,'Head of Household is',0,NULL,NULL,NULL), - (98,49,7,'b_a',105,'Head of Household is',83,'Head of Household for',0,NULL,NULL,NULL), - (99,50,2,'a_b',175,'Spouse of',83,'Spouse of',0,NULL,NULL,NULL), - (100,50,2,'b_a',83,'Spouse of',175,'Spouse of',0,NULL,NULL,NULL), - (101,51,1,'a_b',14,'Child of',145,'Parent of',1,NULL,NULL,NULL), - (102,51,1,'b_a',145,'Parent of',14,'Child of',1,NULL,NULL,NULL), - (103,52,1,'a_b',110,'Child of',145,'Parent of',1,NULL,NULL,NULL), - (104,52,1,'b_a',145,'Parent of',110,'Child of',1,NULL,NULL,NULL), - (105,53,1,'a_b',14,'Child of',34,'Parent of',1,NULL,NULL,NULL), - (106,53,1,'b_a',34,'Parent of',14,'Child of',1,NULL,NULL,NULL), - (107,54,1,'a_b',110,'Child of',34,'Parent of',1,NULL,NULL,NULL), - (108,54,1,'b_a',34,'Parent of',110,'Child of',1,NULL,NULL,NULL), - (109,55,4,'a_b',110,'Sibling of',14,'Sibling of',1,NULL,NULL,NULL), - (110,55,4,'b_a',14,'Sibling of',110,'Sibling of',1,NULL,NULL,NULL), - (111,56,8,'a_b',34,'Household Member of',196,'Household Member is',1,NULL,NULL,NULL), - (112,56,8,'b_a',196,'Household Member is',34,'Household Member of',1,NULL,NULL,NULL), - (113,57,8,'a_b',14,'Household Member of',196,'Household Member is',1,NULL,NULL,NULL), - (114,57,8,'b_a',196,'Household Member is',14,'Household Member of',1,NULL,NULL,NULL), - (115,58,8,'a_b',110,'Household Member of',196,'Household Member is',1,NULL,NULL,NULL), - (116,58,8,'b_a',196,'Household Member is',110,'Household Member of',1,NULL,NULL,NULL), - (117,59,7,'a_b',145,'Head of Household for',196,'Head of Household is',1,NULL,NULL,NULL), - (118,59,7,'b_a',196,'Head of Household is',145,'Head of Household for',1,NULL,NULL,NULL), - (119,60,2,'a_b',34,'Spouse of',145,'Spouse of',1,NULL,NULL,NULL), - (120,60,2,'b_a',145,'Spouse of',34,'Spouse of',1,NULL,NULL,NULL), - (121,61,1,'a_b',25,'Child of',107,'Parent of',1,NULL,NULL,NULL), - (122,61,1,'b_a',107,'Parent of',25,'Child of',1,NULL,NULL,NULL), - (123,62,1,'a_b',41,'Child of',107,'Parent of',1,NULL,NULL,NULL), - (124,62,1,'b_a',107,'Parent of',41,'Child of',1,NULL,NULL,NULL), - (125,63,1,'a_b',25,'Child of',47,'Parent of',1,NULL,NULL,NULL), - (126,63,1,'b_a',47,'Parent of',25,'Child of',1,NULL,NULL,NULL), - (127,64,1,'a_b',41,'Child of',47,'Parent of',1,NULL,NULL,NULL), - (128,64,1,'b_a',47,'Parent of',41,'Child of',1,NULL,NULL,NULL), - (129,65,4,'a_b',41,'Sibling of',25,'Sibling of',1,NULL,NULL,NULL), - (130,65,4,'b_a',25,'Sibling of',41,'Sibling of',1,NULL,NULL,NULL), - (131,66,8,'a_b',47,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), - (132,66,8,'b_a',66,'Household Member is',47,'Household Member of',1,NULL,NULL,NULL), - (133,67,8,'a_b',25,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), - (134,67,8,'b_a',66,'Household Member is',25,'Household Member of',1,NULL,NULL,NULL), - (135,68,8,'a_b',41,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), - (136,68,8,'b_a',66,'Household Member is',41,'Household Member of',1,NULL,NULL,NULL), - (137,69,7,'a_b',107,'Head of Household for',66,'Head of Household is',0,NULL,NULL,NULL), - (138,69,7,'b_a',66,'Head of Household is',107,'Head of Household for',0,NULL,NULL,NULL), - (139,70,2,'a_b',47,'Spouse of',107,'Spouse of',0,NULL,NULL,NULL), - (140,70,2,'b_a',107,'Spouse of',47,'Spouse of',0,NULL,NULL,NULL), - (141,71,1,'a_b',63,'Child of',73,'Parent of',1,NULL,NULL,NULL), - (142,71,1,'b_a',73,'Parent of',63,'Child of',1,NULL,NULL,NULL), - (143,72,1,'a_b',87,'Child of',73,'Parent of',1,NULL,NULL,NULL), - (144,72,1,'b_a',73,'Parent of',87,'Child of',1,NULL,NULL,NULL), - (145,73,1,'a_b',63,'Child of',178,'Parent of',1,NULL,NULL,NULL), - (146,73,1,'b_a',178,'Parent of',63,'Child of',1,NULL,NULL,NULL), - (147,74,1,'a_b',87,'Child of',178,'Parent of',1,NULL,NULL,NULL), - (148,74,1,'b_a',178,'Parent of',87,'Child of',1,NULL,NULL,NULL), - (149,75,4,'a_b',87,'Sibling of',63,'Sibling of',1,NULL,NULL,NULL), - (150,75,4,'b_a',63,'Sibling of',87,'Sibling of',1,NULL,NULL,NULL), - (151,76,8,'a_b',178,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), - (152,76,8,'b_a',106,'Household Member is',178,'Household Member of',1,NULL,NULL,NULL), - (153,77,8,'a_b',63,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), - (154,77,8,'b_a',106,'Household Member is',63,'Household Member of',1,NULL,NULL,NULL), - (155,78,8,'a_b',87,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), - (156,78,8,'b_a',106,'Household Member is',87,'Household Member of',1,NULL,NULL,NULL), - (157,79,7,'a_b',73,'Head of Household for',106,'Head of Household is',0,NULL,NULL,NULL), - (158,79,7,'b_a',106,'Head of Household is',73,'Head of Household for',0,NULL,NULL,NULL), - (159,80,2,'a_b',178,'Spouse of',73,'Spouse of',0,NULL,NULL,NULL), - (160,80,2,'b_a',73,'Spouse of',178,'Spouse of',0,NULL,NULL,NULL), - (161,81,1,'a_b',13,'Child of',15,'Parent of',1,NULL,NULL,NULL), - (162,81,1,'b_a',15,'Parent of',13,'Child of',1,NULL,NULL,NULL), - (163,82,1,'a_b',189,'Child of',15,'Parent of',1,NULL,NULL,NULL), - (164,82,1,'b_a',15,'Parent of',189,'Child of',1,NULL,NULL,NULL), - (165,83,1,'a_b',13,'Child of',55,'Parent of',1,NULL,NULL,NULL), - (166,83,1,'b_a',55,'Parent of',13,'Child of',1,NULL,NULL,NULL), - (167,84,1,'a_b',189,'Child of',55,'Parent of',1,NULL,NULL,NULL), - (168,84,1,'b_a',55,'Parent of',189,'Child of',1,NULL,NULL,NULL), - (169,85,4,'a_b',189,'Sibling of',13,'Sibling of',1,NULL,NULL,NULL), - (170,85,4,'b_a',13,'Sibling of',189,'Sibling of',1,NULL,NULL,NULL), - (171,86,8,'a_b',55,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), - (172,86,8,'b_a',125,'Household Member is',55,'Household Member of',1,NULL,NULL,NULL), - (173,87,8,'a_b',13,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), - (174,87,8,'b_a',125,'Household Member is',13,'Household Member of',1,NULL,NULL,NULL), - (175,88,8,'a_b',189,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), - (176,88,8,'b_a',125,'Household Member is',189,'Household Member of',1,NULL,NULL,NULL), - (177,89,7,'a_b',15,'Head of Household for',125,'Head of Household is',1,NULL,NULL,NULL), - (178,89,7,'b_a',125,'Head of Household is',15,'Head of Household for',1,NULL,NULL,NULL), - (179,90,2,'a_b',55,'Spouse of',15,'Spouse of',1,NULL,NULL,NULL), - (180,90,2,'b_a',15,'Spouse of',55,'Spouse of',1,NULL,NULL,NULL), - (181,91,1,'a_b',38,'Child of',133,'Parent of',1,NULL,NULL,NULL), - (182,91,1,'b_a',133,'Parent of',38,'Child of',1,NULL,NULL,NULL), - (183,92,1,'a_b',187,'Child of',133,'Parent of',1,NULL,NULL,NULL), - (184,92,1,'b_a',133,'Parent of',187,'Child of',1,NULL,NULL,NULL), - (185,93,1,'a_b',38,'Child of',30,'Parent of',1,NULL,NULL,NULL), - (186,93,1,'b_a',30,'Parent of',38,'Child of',1,NULL,NULL,NULL), - (187,94,1,'a_b',187,'Child of',30,'Parent of',1,NULL,NULL,NULL), - (188,94,1,'b_a',30,'Parent of',187,'Child of',1,NULL,NULL,NULL), - (189,95,4,'a_b',187,'Sibling of',38,'Sibling of',1,NULL,NULL,NULL), - (190,95,4,'b_a',38,'Sibling of',187,'Sibling of',1,NULL,NULL,NULL), - (191,96,8,'a_b',30,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (192,96,8,'b_a',8,'Household Member is',30,'Household Member of',1,NULL,NULL,NULL), - (193,97,8,'a_b',38,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (194,97,8,'b_a',8,'Household Member is',38,'Household Member of',1,NULL,NULL,NULL), - (195,98,8,'a_b',187,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (196,98,8,'b_a',8,'Household Member is',187,'Household Member of',1,NULL,NULL,NULL), - (197,99,7,'a_b',133,'Head of Household for',8,'Head of Household is',1,NULL,NULL,NULL), - (198,99,7,'b_a',8,'Head of Household is',133,'Head of Household for',1,NULL,NULL,NULL), - (199,100,2,'a_b',30,'Spouse of',133,'Spouse of',1,NULL,NULL,NULL), - (200,100,2,'b_a',133,'Spouse of',30,'Spouse of',1,NULL,NULL,NULL), - (201,101,1,'a_b',12,'Child of',150,'Parent of',1,NULL,NULL,NULL), - (202,101,1,'b_a',150,'Parent of',12,'Child of',1,NULL,NULL,NULL), - (203,102,1,'a_b',115,'Child of',150,'Parent of',1,NULL,NULL,NULL), - (204,102,1,'b_a',150,'Parent of',115,'Child of',1,NULL,NULL,NULL), - (205,103,1,'a_b',12,'Child of',46,'Parent of',1,NULL,NULL,NULL), - (206,103,1,'b_a',46,'Parent of',12,'Child of',1,NULL,NULL,NULL), - (207,104,1,'a_b',115,'Child of',46,'Parent of',1,NULL,NULL,NULL), - (208,104,1,'b_a',46,'Parent of',115,'Child of',1,NULL,NULL,NULL), - (209,105,4,'a_b',115,'Sibling of',12,'Sibling of',1,NULL,NULL,NULL), - (210,105,4,'b_a',12,'Sibling of',115,'Sibling of',1,NULL,NULL,NULL), - (211,106,8,'a_b',46,'Household Member of',86,'Household Member is',1,NULL,NULL,NULL), - (212,106,8,'b_a',86,'Household Member is',46,'Household Member of',1,NULL,NULL,NULL), - (213,107,8,'a_b',12,'Household Member of',86,'Household Member is',1,NULL,NULL,NULL), - (214,107,8,'b_a',86,'Household Member is',12,'Household Member of',1,NULL,NULL,NULL), - (215,108,8,'a_b',115,'Household Member of',86,'Household Member is',1,NULL,NULL,NULL), - (216,108,8,'b_a',86,'Household Member is',115,'Household Member of',1,NULL,NULL,NULL), - (217,109,7,'a_b',150,'Head of Household for',86,'Head of Household is',1,NULL,NULL,NULL), - (218,109,7,'b_a',86,'Head of Household is',150,'Head of Household for',1,NULL,NULL,NULL), - (219,110,2,'a_b',46,'Spouse of',150,'Spouse of',1,NULL,NULL,NULL), - (220,110,2,'b_a',150,'Spouse of',46,'Spouse of',1,NULL,NULL,NULL), - (221,111,1,'a_b',57,'Child of',177,'Parent of',1,NULL,NULL,NULL), - (222,111,1,'b_a',177,'Parent of',57,'Child of',1,NULL,NULL,NULL), - (223,112,1,'a_b',95,'Child of',177,'Parent of',1,NULL,NULL,NULL), - (224,112,1,'b_a',177,'Parent of',95,'Child of',1,NULL,NULL,NULL), - (225,113,1,'a_b',57,'Child of',91,'Parent of',1,NULL,NULL,NULL), - (226,113,1,'b_a',91,'Parent of',57,'Child of',1,NULL,NULL,NULL), - (227,114,1,'a_b',95,'Child of',91,'Parent of',1,NULL,NULL,NULL), - (228,114,1,'b_a',91,'Parent of',95,'Child of',1,NULL,NULL,NULL), - (229,115,4,'a_b',95,'Sibling of',57,'Sibling of',1,NULL,NULL,NULL), - (230,115,4,'b_a',57,'Sibling of',95,'Sibling of',1,NULL,NULL,NULL), - (231,116,8,'a_b',91,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (232,116,8,'b_a',108,'Household Member is',91,'Household Member of',1,NULL,NULL,NULL), - (233,117,8,'a_b',57,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (234,117,8,'b_a',108,'Household Member is',57,'Household Member of',1,NULL,NULL,NULL), - (235,118,8,'a_b',95,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (236,118,8,'b_a',108,'Household Member is',95,'Household Member of',1,NULL,NULL,NULL), - (237,119,7,'a_b',177,'Head of Household for',108,'Head of Household is',1,NULL,NULL,NULL), - (238,119,7,'b_a',108,'Head of Household is',177,'Head of Household for',1,NULL,NULL,NULL), - (239,120,2,'a_b',91,'Spouse of',177,'Spouse of',1,NULL,NULL,NULL), - (240,120,2,'b_a',177,'Spouse of',91,'Spouse of',1,NULL,NULL,NULL), - (241,121,1,'a_b',43,'Child of',22,'Parent of',1,NULL,NULL,NULL), - (242,121,1,'b_a',22,'Parent of',43,'Child of',1,NULL,NULL,NULL), - (243,122,1,'a_b',32,'Child of',22,'Parent of',1,NULL,NULL,NULL), - (244,122,1,'b_a',22,'Parent of',32,'Child of',1,NULL,NULL,NULL), - (245,123,1,'a_b',43,'Child of',166,'Parent of',1,NULL,NULL,NULL), - (246,123,1,'b_a',166,'Parent of',43,'Child of',1,NULL,NULL,NULL), - (247,124,1,'a_b',32,'Child of',166,'Parent of',1,NULL,NULL,NULL), - (248,124,1,'b_a',166,'Parent of',32,'Child of',1,NULL,NULL,NULL), - (249,125,4,'a_b',32,'Sibling of',43,'Sibling of',1,NULL,NULL,NULL), - (250,125,4,'b_a',43,'Sibling of',32,'Sibling of',1,NULL,NULL,NULL), - (251,126,8,'a_b',166,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (252,126,8,'b_a',90,'Household Member is',166,'Household Member of',1,NULL,NULL,NULL), - (253,127,8,'a_b',43,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (254,127,8,'b_a',90,'Household Member is',43,'Household Member of',1,NULL,NULL,NULL), - (255,128,8,'a_b',32,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (256,128,8,'b_a',90,'Household Member is',32,'Household Member of',1,NULL,NULL,NULL), - (257,129,7,'a_b',22,'Head of Household for',90,'Head of Household is',0,NULL,NULL,NULL), - (258,129,7,'b_a',90,'Head of Household is',22,'Head of Household for',0,NULL,NULL,NULL), - (259,130,2,'a_b',166,'Spouse of',22,'Spouse of',0,NULL,NULL,NULL), - (260,130,2,'b_a',22,'Spouse of',166,'Spouse of',0,NULL,NULL,NULL), - (261,131,1,'a_b',165,'Child of',111,'Parent of',1,NULL,NULL,NULL), - (262,131,1,'b_a',111,'Parent of',165,'Child of',1,NULL,NULL,NULL), - (263,132,1,'a_b',72,'Child of',111,'Parent of',1,NULL,NULL,NULL), - (264,132,1,'b_a',111,'Parent of',72,'Child of',1,NULL,NULL,NULL), - (265,133,1,'a_b',165,'Child of',85,'Parent of',1,NULL,NULL,NULL), - (266,133,1,'b_a',85,'Parent of',165,'Child of',1,NULL,NULL,NULL), - (267,134,1,'a_b',72,'Child of',85,'Parent of',1,NULL,NULL,NULL), - (268,134,1,'b_a',85,'Parent of',72,'Child of',1,NULL,NULL,NULL), - (269,135,4,'a_b',72,'Sibling of',165,'Sibling of',1,NULL,NULL,NULL), - (270,135,4,'b_a',165,'Sibling of',72,'Sibling of',1,NULL,NULL,NULL), - (271,136,8,'a_b',85,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (272,136,8,'b_a',70,'Household Member is',85,'Household Member of',1,NULL,NULL,NULL), - (273,137,8,'a_b',165,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (274,137,8,'b_a',70,'Household Member is',165,'Household Member of',1,NULL,NULL,NULL), - (275,138,8,'a_b',72,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (276,138,8,'b_a',70,'Household Member is',72,'Household Member of',1,NULL,NULL,NULL), - (277,139,7,'a_b',111,'Head of Household for',70,'Head of Household is',1,NULL,NULL,NULL), - (278,139,7,'b_a',70,'Head of Household is',111,'Head of Household for',1,NULL,NULL,NULL), - (279,140,2,'a_b',85,'Spouse of',111,'Spouse of',1,NULL,NULL,NULL), - (280,140,2,'b_a',111,'Spouse of',85,'Spouse of',1,NULL,NULL,NULL), - (281,141,1,'a_b',81,'Child of',60,'Parent of',1,NULL,NULL,NULL), - (282,141,1,'b_a',60,'Parent of',81,'Child of',1,NULL,NULL,NULL), - (283,142,1,'a_b',92,'Child of',60,'Parent of',1,NULL,NULL,NULL), - (284,142,1,'b_a',60,'Parent of',92,'Child of',1,NULL,NULL,NULL), - (285,143,1,'a_b',81,'Child of',23,'Parent of',1,NULL,NULL,NULL), - (286,143,1,'b_a',23,'Parent of',81,'Child of',1,NULL,NULL,NULL), - (287,144,1,'a_b',92,'Child of',23,'Parent of',1,NULL,NULL,NULL), - (288,144,1,'b_a',23,'Parent of',92,'Child of',1,NULL,NULL,NULL), - (289,145,4,'a_b',92,'Sibling of',81,'Sibling of',1,NULL,NULL,NULL), - (290,145,4,'b_a',81,'Sibling of',92,'Sibling of',1,NULL,NULL,NULL), - (291,146,8,'a_b',23,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), - (292,146,8,'b_a',182,'Household Member is',23,'Household Member of',1,NULL,NULL,NULL), - (293,147,8,'a_b',81,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), - (294,147,8,'b_a',182,'Household Member is',81,'Household Member of',1,NULL,NULL,NULL), - (295,148,8,'a_b',92,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), - (296,148,8,'b_a',182,'Household Member is',92,'Household Member of',1,NULL,NULL,NULL), - (297,149,7,'a_b',60,'Head of Household for',182,'Head of Household is',1,NULL,NULL,NULL), - (298,149,7,'b_a',182,'Head of Household is',60,'Head of Household for',1,NULL,NULL,NULL), - (299,150,2,'a_b',23,'Spouse of',60,'Spouse of',1,NULL,NULL,NULL), - (300,150,2,'b_a',60,'Spouse of',23,'Spouse of',1,NULL,NULL,NULL), - (301,151,1,'a_b',97,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (302,151,1,'b_a',132,'Parent of',97,'Child of',1,NULL,NULL,NULL), - (303,152,1,'a_b',157,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (304,152,1,'b_a',132,'Parent of',157,'Child of',1,NULL,NULL,NULL), - (305,153,1,'a_b',97,'Child of',100,'Parent of',1,NULL,NULL,NULL), - (306,153,1,'b_a',100,'Parent of',97,'Child of',1,NULL,NULL,NULL), - (307,154,1,'a_b',157,'Child of',100,'Parent of',1,NULL,NULL,NULL), - (308,154,1,'b_a',100,'Parent of',157,'Child of',1,NULL,NULL,NULL), - (309,155,4,'a_b',157,'Sibling of',97,'Sibling of',1,NULL,NULL,NULL), - (310,155,4,'b_a',97,'Sibling of',157,'Sibling of',1,NULL,NULL,NULL), - (311,156,8,'a_b',100,'Household Member of',88,'Household Member is',1,NULL,NULL,NULL), - (312,156,8,'b_a',88,'Household Member is',100,'Household Member of',1,NULL,NULL,NULL), - (313,157,8,'a_b',97,'Household Member of',88,'Household Member is',1,NULL,NULL,NULL), - (314,157,8,'b_a',88,'Household Member is',97,'Household Member of',1,NULL,NULL,NULL), - (315,158,8,'a_b',157,'Household Member of',88,'Household Member is',1,NULL,NULL,NULL), - (316,158,8,'b_a',88,'Household Member is',157,'Household Member of',1,NULL,NULL,NULL), - (317,159,7,'a_b',132,'Head of Household for',88,'Head of Household is',0,NULL,NULL,NULL), - (318,159,7,'b_a',88,'Head of Household is',132,'Head of Household for',0,NULL,NULL,NULL), - (319,160,2,'a_b',100,'Spouse of',132,'Spouse of',0,NULL,NULL,NULL), - (320,160,2,'b_a',132,'Spouse of',100,'Spouse of',0,NULL,NULL,NULL), - (321,161,1,'a_b',28,'Child of',45,'Parent of',1,NULL,NULL,NULL), - (322,161,1,'b_a',45,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (323,162,1,'a_b',149,'Child of',45,'Parent of',1,NULL,NULL,NULL), - (324,162,1,'b_a',45,'Parent of',149,'Child of',1,NULL,NULL,NULL), - (325,163,1,'a_b',28,'Child of',112,'Parent of',1,NULL,NULL,NULL), - (326,163,1,'b_a',112,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (327,164,1,'a_b',149,'Child of',112,'Parent of',1,NULL,NULL,NULL), - (328,164,1,'b_a',112,'Parent of',149,'Child of',1,NULL,NULL,NULL), - (329,165,4,'a_b',149,'Sibling of',28,'Sibling of',1,NULL,NULL,NULL), - (330,165,4,'b_a',28,'Sibling of',149,'Sibling of',1,NULL,NULL,NULL), - (331,166,8,'a_b',112,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), - (332,166,8,'b_a',122,'Household Member is',112,'Household Member of',1,NULL,NULL,NULL), - (333,167,8,'a_b',28,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), - (334,167,8,'b_a',122,'Household Member is',28,'Household Member of',1,NULL,NULL,NULL), - (335,168,8,'a_b',149,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), - (336,168,8,'b_a',122,'Household Member is',149,'Household Member of',1,NULL,NULL,NULL), - (337,169,7,'a_b',45,'Head of Household for',122,'Head of Household is',0,NULL,NULL,NULL), - (338,169,7,'b_a',122,'Head of Household is',45,'Head of Household for',0,NULL,NULL,NULL), - (339,170,2,'a_b',112,'Spouse of',45,'Spouse of',0,NULL,NULL,NULL), - (340,170,2,'b_a',45,'Spouse of',112,'Spouse of',0,NULL,NULL,NULL), - (341,171,1,'a_b',54,'Child of',51,'Parent of',1,NULL,NULL,NULL), - (342,171,1,'b_a',51,'Parent of',54,'Child of',1,NULL,NULL,NULL), - (343,172,1,'a_b',61,'Child of',51,'Parent of',1,NULL,NULL,NULL), - (344,172,1,'b_a',51,'Parent of',61,'Child of',1,NULL,NULL,NULL), - (345,173,1,'a_b',54,'Child of',26,'Parent of',1,NULL,NULL,NULL), - (346,173,1,'b_a',26,'Parent of',54,'Child of',1,NULL,NULL,NULL), - (347,174,1,'a_b',61,'Child of',26,'Parent of',1,NULL,NULL,NULL), - (348,174,1,'b_a',26,'Parent of',61,'Child of',1,NULL,NULL,NULL), - (349,175,4,'a_b',61,'Sibling of',54,'Sibling of',1,NULL,NULL,NULL), - (350,175,4,'b_a',54,'Sibling of',61,'Sibling of',1,NULL,NULL,NULL), - (351,176,8,'a_b',26,'Household Member of',36,'Household Member is',1,NULL,NULL,NULL), - (352,176,8,'b_a',36,'Household Member is',26,'Household Member of',1,NULL,NULL,NULL), - (353,177,8,'a_b',54,'Household Member of',36,'Household Member is',1,NULL,NULL,NULL), - (354,177,8,'b_a',36,'Household Member is',54,'Household Member of',1,NULL,NULL,NULL), - (355,178,8,'a_b',61,'Household Member of',36,'Household Member is',1,NULL,NULL,NULL), - (356,178,8,'b_a',36,'Household Member is',61,'Household Member of',1,NULL,NULL,NULL), - (357,179,7,'a_b',51,'Head of Household for',36,'Head of Household is',1,NULL,NULL,NULL), - (358,179,7,'b_a',36,'Head of Household is',51,'Head of Household for',1,NULL,NULL,NULL), - (359,180,2,'a_b',26,'Spouse of',51,'Spouse of',1,NULL,NULL,NULL), - (360,180,2,'b_a',51,'Spouse of',26,'Spouse of',1,NULL,NULL,NULL), - (361,181,1,'a_b',180,'Child of',68,'Parent of',1,NULL,NULL,NULL), - (362,181,1,'b_a',68,'Parent of',180,'Child of',1,NULL,NULL,NULL), - (363,182,1,'a_b',137,'Child of',68,'Parent of',1,NULL,NULL,NULL), - (364,182,1,'b_a',68,'Parent of',137,'Child of',1,NULL,NULL,NULL), - (365,183,1,'a_b',180,'Child of',116,'Parent of',1,NULL,NULL,NULL), - (366,183,1,'b_a',116,'Parent of',180,'Child of',1,NULL,NULL,NULL), - (367,184,1,'a_b',137,'Child of',116,'Parent of',1,NULL,NULL,NULL), - (368,184,1,'b_a',116,'Parent of',137,'Child of',1,NULL,NULL,NULL), - (369,185,4,'a_b',137,'Sibling of',180,'Sibling of',1,NULL,NULL,NULL), - (370,185,4,'b_a',180,'Sibling of',137,'Sibling of',1,NULL,NULL,NULL), - (371,186,8,'a_b',116,'Household Member of',194,'Household Member is',1,NULL,NULL,NULL), - (372,186,8,'b_a',194,'Household Member is',116,'Household Member of',1,NULL,NULL,NULL), - (373,187,8,'a_b',180,'Household Member of',194,'Household Member is',1,NULL,NULL,NULL), - (374,187,8,'b_a',194,'Household Member is',180,'Household Member of',1,NULL,NULL,NULL), - (375,188,8,'a_b',137,'Household Member of',194,'Household Member is',1,NULL,NULL,NULL), - (376,188,8,'b_a',194,'Household Member is',137,'Household Member of',1,NULL,NULL,NULL), - (377,189,7,'a_b',68,'Head of Household for',194,'Head of Household is',1,NULL,NULL,NULL), - (378,189,7,'b_a',194,'Head of Household is',68,'Head of Household for',1,NULL,NULL,NULL), - (379,190,2,'a_b',116,'Spouse of',68,'Spouse of',1,NULL,NULL,NULL), - (380,190,2,'b_a',68,'Spouse of',116,'Spouse of',1,NULL,NULL,NULL), - (381,191,1,'a_b',170,'Child of',193,'Parent of',1,NULL,NULL,NULL), - (382,191,1,'b_a',193,'Parent of',170,'Child of',1,NULL,NULL,NULL), - (383,192,1,'a_b',197,'Child of',193,'Parent of',1,NULL,NULL,NULL), - (384,192,1,'b_a',193,'Parent of',197,'Child of',1,NULL,NULL,NULL), - (385,193,1,'a_b',170,'Child of',11,'Parent of',1,NULL,NULL,NULL), - (386,193,1,'b_a',11,'Parent of',170,'Child of',1,NULL,NULL,NULL), - (387,194,1,'a_b',197,'Child of',11,'Parent of',1,NULL,NULL,NULL), - (388,194,1,'b_a',11,'Parent of',197,'Child of',1,NULL,NULL,NULL), - (389,195,4,'a_b',197,'Sibling of',170,'Sibling of',1,NULL,NULL,NULL), - (390,195,4,'b_a',170,'Sibling of',197,'Sibling of',1,NULL,NULL,NULL), - (391,196,8,'a_b',11,'Household Member of',74,'Household Member is',1,NULL,NULL,NULL), - (392,196,8,'b_a',74,'Household Member is',11,'Household Member of',1,NULL,NULL,NULL), - (393,197,8,'a_b',170,'Household Member of',74,'Household Member is',1,NULL,NULL,NULL), - (394,197,8,'b_a',74,'Household Member is',170,'Household Member of',1,NULL,NULL,NULL), - (395,198,8,'a_b',197,'Household Member of',74,'Household Member is',1,NULL,NULL,NULL), - (396,198,8,'b_a',74,'Household Member is',197,'Household Member of',1,NULL,NULL,NULL), - (397,199,7,'a_b',193,'Head of Household for',74,'Head of Household is',1,NULL,NULL,NULL), - (398,199,7,'b_a',74,'Head of Household is',193,'Head of Household for',1,NULL,NULL,NULL), - (399,200,2,'a_b',11,'Spouse of',193,'Spouse of',1,NULL,NULL,NULL), - (400,200,2,'b_a',193,'Spouse of',11,'Spouse of',1,NULL,NULL,NULL), - (401,201,5,'a_b',9,'Employee of',33,'Employer of',1,NULL,NULL,NULL), - (402,201,5,'b_a',33,'Employer of',9,'Employee of',1,NULL,NULL,NULL), - (403,202,5,'a_b',17,'Employee of',40,'Employer of',1,NULL,NULL,NULL), - (404,202,5,'b_a',40,'Employer of',17,'Employee of',1,NULL,NULL,NULL), - (405,203,5,'a_b',143,'Employee of',62,'Employer of',1,NULL,NULL,NULL), - (406,203,5,'b_a',62,'Employer of',143,'Employee of',1,NULL,NULL,NULL), - (407,204,5,'a_b',21,'Employee of',65,'Employer of',1,NULL,NULL,NULL), - (408,204,5,'b_a',65,'Employer of',21,'Employee of',1,NULL,NULL,NULL), - (409,205,5,'a_b',166,'Employee of',79,'Employer of',1,NULL,NULL,NULL), - (410,205,5,'b_a',79,'Employer of',166,'Employee of',1,NULL,NULL,NULL), - (411,206,5,'a_b',168,'Employee of',94,'Employer of',1,NULL,NULL,NULL), - (412,206,5,'b_a',94,'Employer of',168,'Employee of',1,NULL,NULL,NULL), - (413,207,5,'a_b',199,'Employee of',103,'Employer of',1,NULL,NULL,NULL), - (414,207,5,'b_a',103,'Employer of',199,'Employee of',1,NULL,NULL,NULL), - (415,208,5,'a_b',153,'Employee of',120,'Employer of',1,NULL,NULL,NULL), - (416,208,5,'b_a',120,'Employer of',153,'Employee of',1,NULL,NULL,NULL), - (417,209,5,'a_b',118,'Employee of',128,'Employer of',1,NULL,NULL,NULL), - (418,209,5,'b_a',128,'Employer of',118,'Employee of',1,NULL,NULL,NULL), - (419,210,5,'a_b',177,'Employee of',135,'Employer of',1,NULL,NULL,NULL), - (420,210,5,'b_a',135,'Employer of',177,'Employee of',1,NULL,NULL,NULL), - (421,211,5,'a_b',130,'Employee of',141,'Employer of',1,NULL,NULL,NULL), - (422,211,5,'b_a',141,'Employer of',130,'Employee of',1,NULL,NULL,NULL), - (423,212,5,'a_b',92,'Employee of',154,'Employer of',1,NULL,NULL,NULL), - (424,212,5,'b_a',154,'Employer of',92,'Employee of',1,NULL,NULL,NULL), - (425,213,5,'a_b',91,'Employee of',160,'Employer of',1,NULL,NULL,NULL), - (426,213,5,'b_a',160,'Employer of',91,'Employee of',1,NULL,NULL,NULL), - (427,214,5,'a_b',116,'Employee of',174,'Employer of',1,NULL,NULL,NULL), - (428,214,5,'b_a',174,'Employer of',116,'Employee of',1,NULL,NULL,NULL), - (429,215,5,'a_b',27,'Employee of',181,'Employer of',1,NULL,NULL,NULL), - (430,215,5,'b_a',181,'Employer of',27,'Employee of',1,NULL,NULL,NULL), - (431,216,5,'a_b',101,'Employee of',188,'Employer of',1,NULL,NULL,NULL), - (432,216,5,'b_a',188,'Employer of',101,'Employee of',1,NULL,NULL,NULL), - (433,217,5,'a_b',43,'Employee of',190,'Employer of',1,NULL,NULL,NULL), - (434,217,5,'b_a',190,'Employer of',43,'Employee of',1,NULL,NULL,NULL); + (1,1,1,'a_b',159,'Child of',34,'Parent of',1,NULL,NULL,NULL), + (2,1,1,'b_a',34,'Parent of',159,'Child of',1,NULL,NULL,NULL), + (3,2,1,'a_b',93,'Child of',34,'Parent of',1,NULL,NULL,NULL), + (4,2,1,'b_a',34,'Parent of',93,'Child of',1,NULL,NULL,NULL), + (5,3,1,'a_b',159,'Child of',12,'Parent of',1,NULL,NULL,NULL), + (6,3,1,'b_a',12,'Parent of',159,'Child of',1,NULL,NULL,NULL), + (7,4,1,'a_b',93,'Child of',12,'Parent of',1,NULL,NULL,NULL), + (8,4,1,'b_a',12,'Parent of',93,'Child of',1,NULL,NULL,NULL), + (9,5,4,'a_b',93,'Sibling of',159,'Sibling of',1,NULL,NULL,NULL), + (10,5,4,'b_a',159,'Sibling of',93,'Sibling of',1,NULL,NULL,NULL), + (11,6,8,'a_b',12,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), + (12,6,8,'b_a',117,'Household Member is',12,'Household Member of',1,NULL,NULL,NULL), + (13,7,8,'a_b',159,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), + (14,7,8,'b_a',117,'Household Member is',159,'Household Member of',1,NULL,NULL,NULL), + (15,8,8,'a_b',93,'Household Member of',117,'Household Member is',1,NULL,NULL,NULL), + (16,8,8,'b_a',117,'Household Member is',93,'Household Member of',1,NULL,NULL,NULL), + (17,9,7,'a_b',34,'Head of Household for',117,'Head of Household is',1,NULL,NULL,NULL), + (18,9,7,'b_a',117,'Head of Household is',34,'Head of Household for',1,NULL,NULL,NULL), + (19,10,2,'a_b',12,'Spouse of',34,'Spouse of',1,NULL,NULL,NULL), + (20,10,2,'b_a',34,'Spouse of',12,'Spouse of',1,NULL,NULL,NULL), + (21,11,1,'a_b',28,'Child of',127,'Parent of',1,NULL,NULL,NULL), + (22,11,1,'b_a',127,'Parent of',28,'Child of',1,NULL,NULL,NULL), + (23,12,1,'a_b',124,'Child of',127,'Parent of',1,NULL,NULL,NULL), + (24,12,1,'b_a',127,'Parent of',124,'Child of',1,NULL,NULL,NULL), + (25,13,1,'a_b',28,'Child of',138,'Parent of',1,NULL,NULL,NULL), + (26,13,1,'b_a',138,'Parent of',28,'Child of',1,NULL,NULL,NULL), + (27,14,1,'a_b',124,'Child of',138,'Parent of',1,NULL,NULL,NULL), + (28,14,1,'b_a',138,'Parent of',124,'Child of',1,NULL,NULL,NULL), + (29,15,4,'a_b',124,'Sibling of',28,'Sibling of',1,NULL,NULL,NULL), + (30,15,4,'b_a',28,'Sibling of',124,'Sibling of',1,NULL,NULL,NULL), + (31,16,8,'a_b',138,'Household Member of',173,'Household Member is',1,NULL,NULL,NULL), + (32,16,8,'b_a',173,'Household Member is',138,'Household Member of',1,NULL,NULL,NULL), + (33,17,8,'a_b',28,'Household Member of',173,'Household Member is',1,NULL,NULL,NULL), + (34,17,8,'b_a',173,'Household Member is',28,'Household Member of',1,NULL,NULL,NULL), + (35,18,8,'a_b',124,'Household Member of',173,'Household Member is',1,NULL,NULL,NULL), + (36,18,8,'b_a',173,'Household Member is',124,'Household Member of',1,NULL,NULL,NULL), + (37,19,7,'a_b',127,'Head of Household for',173,'Head of Household is',0,NULL,NULL,NULL), + (38,19,7,'b_a',173,'Head of Household is',127,'Head of Household for',0,NULL,NULL,NULL), + (39,20,2,'a_b',138,'Spouse of',127,'Spouse of',0,NULL,NULL,NULL), + (40,20,2,'b_a',127,'Spouse of',138,'Spouse of',0,NULL,NULL,NULL), + (41,21,1,'a_b',151,'Child of',193,'Parent of',1,NULL,NULL,NULL), + (42,21,1,'b_a',193,'Parent of',151,'Child of',1,NULL,NULL,NULL), + (43,22,1,'a_b',46,'Child of',193,'Parent of',1,NULL,NULL,NULL), + (44,22,1,'b_a',193,'Parent of',46,'Child of',1,NULL,NULL,NULL), + (45,23,1,'a_b',151,'Child of',103,'Parent of',1,NULL,NULL,NULL), + (46,23,1,'b_a',103,'Parent of',151,'Child of',1,NULL,NULL,NULL), + (47,24,1,'a_b',46,'Child of',103,'Parent of',1,NULL,NULL,NULL), + (48,24,1,'b_a',103,'Parent of',46,'Child of',1,NULL,NULL,NULL), + (49,25,4,'a_b',46,'Sibling of',151,'Sibling of',1,NULL,NULL,NULL), + (50,25,4,'b_a',151,'Sibling of',46,'Sibling of',1,NULL,NULL,NULL), + (51,26,8,'a_b',103,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (52,26,8,'b_a',6,'Household Member is',103,'Household Member of',1,NULL,NULL,NULL), + (53,27,8,'a_b',151,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (54,27,8,'b_a',6,'Household Member is',151,'Household Member of',1,NULL,NULL,NULL), + (55,28,8,'a_b',46,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (56,28,8,'b_a',6,'Household Member is',46,'Household Member of',1,NULL,NULL,NULL), + (57,29,7,'a_b',193,'Head of Household for',6,'Head of Household is',0,NULL,NULL,NULL), + (58,29,7,'b_a',6,'Head of Household is',193,'Head of Household for',0,NULL,NULL,NULL), + (59,30,2,'a_b',103,'Spouse of',193,'Spouse of',0,NULL,NULL,NULL), + (60,30,2,'b_a',193,'Spouse of',103,'Spouse of',0,NULL,NULL,NULL), + (61,31,1,'a_b',183,'Child of',119,'Parent of',1,NULL,NULL,NULL), + (62,31,1,'b_a',119,'Parent of',183,'Child of',1,NULL,NULL,NULL), + (63,32,1,'a_b',97,'Child of',119,'Parent of',1,NULL,NULL,NULL), + (64,32,1,'b_a',119,'Parent of',97,'Child of',1,NULL,NULL,NULL), + (65,33,1,'a_b',183,'Child of',147,'Parent of',1,NULL,NULL,NULL), + (66,33,1,'b_a',147,'Parent of',183,'Child of',1,NULL,NULL,NULL), + (67,34,1,'a_b',97,'Child of',147,'Parent of',1,NULL,NULL,NULL), + (68,34,1,'b_a',147,'Parent of',97,'Child of',1,NULL,NULL,NULL), + (69,35,4,'a_b',97,'Sibling of',183,'Sibling of',1,NULL,NULL,NULL), + (70,35,4,'b_a',183,'Sibling of',97,'Sibling of',1,NULL,NULL,NULL), + (71,36,8,'a_b',147,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), + (72,36,8,'b_a',128,'Household Member is',147,'Household Member of',1,NULL,NULL,NULL), + (73,37,8,'a_b',183,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), + (74,37,8,'b_a',128,'Household Member is',183,'Household Member of',1,NULL,NULL,NULL), + (75,38,8,'a_b',97,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), + (76,38,8,'b_a',128,'Household Member is',97,'Household Member of',1,NULL,NULL,NULL), + (77,39,7,'a_b',119,'Head of Household for',128,'Head of Household is',1,NULL,NULL,NULL), + (78,39,7,'b_a',128,'Head of Household is',119,'Head of Household for',1,NULL,NULL,NULL), + (79,40,2,'a_b',147,'Spouse of',119,'Spouse of',1,NULL,NULL,NULL), + (80,40,2,'b_a',119,'Spouse of',147,'Spouse of',1,NULL,NULL,NULL), + (81,41,1,'a_b',166,'Child of',19,'Parent of',1,NULL,NULL,NULL), + (82,41,1,'b_a',19,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (83,42,1,'a_b',169,'Child of',19,'Parent of',1,NULL,NULL,NULL), + (84,42,1,'b_a',19,'Parent of',169,'Child of',1,NULL,NULL,NULL), + (85,43,1,'a_b',166,'Child of',67,'Parent of',1,NULL,NULL,NULL), + (86,43,1,'b_a',67,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (87,44,1,'a_b',169,'Child of',67,'Parent of',1,NULL,NULL,NULL), + (88,44,1,'b_a',67,'Parent of',169,'Child of',1,NULL,NULL,NULL), + (89,45,4,'a_b',169,'Sibling of',166,'Sibling of',1,NULL,NULL,NULL), + (90,45,4,'b_a',166,'Sibling of',169,'Sibling of',1,NULL,NULL,NULL), + (91,46,8,'a_b',67,'Household Member of',22,'Household Member is',1,NULL,NULL,NULL), + (92,46,8,'b_a',22,'Household Member is',67,'Household Member of',1,NULL,NULL,NULL), + (93,47,8,'a_b',166,'Household Member of',22,'Household Member is',1,NULL,NULL,NULL), + (94,47,8,'b_a',22,'Household Member is',166,'Household Member of',1,NULL,NULL,NULL), + (95,48,8,'a_b',169,'Household Member of',22,'Household Member is',1,NULL,NULL,NULL), + (96,48,8,'b_a',22,'Household Member is',169,'Household Member of',1,NULL,NULL,NULL), + (97,49,7,'a_b',19,'Head of Household for',22,'Head of Household is',1,NULL,NULL,NULL), + (98,49,7,'b_a',22,'Head of Household is',19,'Head of Household for',1,NULL,NULL,NULL), + (99,50,2,'a_b',67,'Spouse of',19,'Spouse of',1,NULL,NULL,NULL), + (100,50,2,'b_a',19,'Spouse of',67,'Spouse of',1,NULL,NULL,NULL), + (101,51,1,'a_b',113,'Child of',167,'Parent of',1,NULL,NULL,NULL), + (102,51,1,'b_a',167,'Parent of',113,'Child of',1,NULL,NULL,NULL), + (103,52,1,'a_b',192,'Child of',167,'Parent of',1,NULL,NULL,NULL), + (104,52,1,'b_a',167,'Parent of',192,'Child of',1,NULL,NULL,NULL), + (105,53,1,'a_b',113,'Child of',111,'Parent of',1,NULL,NULL,NULL), + (106,53,1,'b_a',111,'Parent of',113,'Child of',1,NULL,NULL,NULL), + (107,54,1,'a_b',192,'Child of',111,'Parent of',1,NULL,NULL,NULL), + (108,54,1,'b_a',111,'Parent of',192,'Child of',1,NULL,NULL,NULL), + (109,55,4,'a_b',192,'Sibling of',113,'Sibling of',1,NULL,NULL,NULL), + (110,55,4,'b_a',113,'Sibling of',192,'Sibling of',1,NULL,NULL,NULL), + (111,56,8,'a_b',111,'Household Member of',99,'Household Member is',1,NULL,NULL,NULL), + (112,56,8,'b_a',99,'Household Member is',111,'Household Member of',1,NULL,NULL,NULL), + (113,57,8,'a_b',113,'Household Member of',99,'Household Member is',1,NULL,NULL,NULL), + (114,57,8,'b_a',99,'Household Member is',113,'Household Member of',1,NULL,NULL,NULL), + (115,58,8,'a_b',192,'Household Member of',99,'Household Member is',1,NULL,NULL,NULL), + (116,58,8,'b_a',99,'Household Member is',192,'Household Member of',1,NULL,NULL,NULL), + (117,59,7,'a_b',167,'Head of Household for',99,'Head of Household is',0,NULL,NULL,NULL), + (118,59,7,'b_a',99,'Head of Household is',167,'Head of Household for',0,NULL,NULL,NULL), + (119,60,2,'a_b',111,'Spouse of',167,'Spouse of',0,NULL,NULL,NULL), + (120,60,2,'b_a',167,'Spouse of',111,'Spouse of',0,NULL,NULL,NULL), + (121,61,1,'a_b',92,'Child of',122,'Parent of',1,NULL,NULL,NULL), + (122,61,1,'b_a',122,'Parent of',92,'Child of',1,NULL,NULL,NULL), + (123,62,1,'a_b',114,'Child of',122,'Parent of',1,NULL,NULL,NULL), + (124,62,1,'b_a',122,'Parent of',114,'Child of',1,NULL,NULL,NULL), + (125,63,1,'a_b',92,'Child of',130,'Parent of',1,NULL,NULL,NULL), + (126,63,1,'b_a',130,'Parent of',92,'Child of',1,NULL,NULL,NULL), + (127,64,1,'a_b',114,'Child of',130,'Parent of',1,NULL,NULL,NULL), + (128,64,1,'b_a',130,'Parent of',114,'Child of',1,NULL,NULL,NULL), + (129,65,4,'a_b',114,'Sibling of',92,'Sibling of',1,NULL,NULL,NULL), + (130,65,4,'b_a',92,'Sibling of',114,'Sibling of',1,NULL,NULL,NULL), + (131,66,8,'a_b',130,'Household Member of',98,'Household Member is',1,NULL,NULL,NULL), + (132,66,8,'b_a',98,'Household Member is',130,'Household Member of',1,NULL,NULL,NULL), + (133,67,8,'a_b',92,'Household Member of',98,'Household Member is',1,NULL,NULL,NULL), + (134,67,8,'b_a',98,'Household Member is',92,'Household Member of',1,NULL,NULL,NULL), + (135,68,8,'a_b',114,'Household Member of',98,'Household Member is',1,NULL,NULL,NULL), + (136,68,8,'b_a',98,'Household Member is',114,'Household Member of',1,NULL,NULL,NULL), + (137,69,7,'a_b',122,'Head of Household for',98,'Head of Household is',1,NULL,NULL,NULL), + (138,69,7,'b_a',98,'Head of Household is',122,'Head of Household for',1,NULL,NULL,NULL), + (139,70,2,'a_b',130,'Spouse of',122,'Spouse of',1,NULL,NULL,NULL), + (140,70,2,'b_a',122,'Spouse of',130,'Spouse of',1,NULL,NULL,NULL), + (141,71,1,'a_b',68,'Child of',189,'Parent of',1,NULL,NULL,NULL), + (142,71,1,'b_a',189,'Parent of',68,'Child of',1,NULL,NULL,NULL), + (143,72,1,'a_b',15,'Child of',189,'Parent of',1,NULL,NULL,NULL), + (144,72,1,'b_a',189,'Parent of',15,'Child of',1,NULL,NULL,NULL), + (145,73,1,'a_b',68,'Child of',74,'Parent of',1,NULL,NULL,NULL), + (146,73,1,'b_a',74,'Parent of',68,'Child of',1,NULL,NULL,NULL), + (147,74,1,'a_b',15,'Child of',74,'Parent of',1,NULL,NULL,NULL), + (148,74,1,'b_a',74,'Parent of',15,'Child of',1,NULL,NULL,NULL), + (149,75,4,'a_b',15,'Sibling of',68,'Sibling of',1,NULL,NULL,NULL), + (150,75,4,'b_a',68,'Sibling of',15,'Sibling of',1,NULL,NULL,NULL), + (151,76,8,'a_b',74,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), + (152,76,8,'b_a',20,'Household Member is',74,'Household Member of',1,NULL,NULL,NULL), + (153,77,8,'a_b',68,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), + (154,77,8,'b_a',20,'Household Member is',68,'Household Member of',1,NULL,NULL,NULL), + (155,78,8,'a_b',15,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), + (156,78,8,'b_a',20,'Household Member is',15,'Household Member of',1,NULL,NULL,NULL), + (157,79,7,'a_b',189,'Head of Household for',20,'Head of Household is',0,NULL,NULL,NULL), + (158,79,7,'b_a',20,'Head of Household is',189,'Head of Household for',0,NULL,NULL,NULL), + (159,80,2,'a_b',74,'Spouse of',189,'Spouse of',0,NULL,NULL,NULL), + (160,80,2,'b_a',189,'Spouse of',74,'Spouse of',0,NULL,NULL,NULL), + (161,81,1,'a_b',95,'Child of',161,'Parent of',1,NULL,NULL,NULL), + (162,81,1,'b_a',161,'Parent of',95,'Child of',1,NULL,NULL,NULL), + (163,82,1,'a_b',154,'Child of',161,'Parent of',1,NULL,NULL,NULL), + (164,82,1,'b_a',161,'Parent of',154,'Child of',1,NULL,NULL,NULL), + (165,83,1,'a_b',95,'Child of',110,'Parent of',1,NULL,NULL,NULL), + (166,83,1,'b_a',110,'Parent of',95,'Child of',1,NULL,NULL,NULL), + (167,84,1,'a_b',154,'Child of',110,'Parent of',1,NULL,NULL,NULL), + (168,84,1,'b_a',110,'Parent of',154,'Child of',1,NULL,NULL,NULL), + (169,85,4,'a_b',154,'Sibling of',95,'Sibling of',1,NULL,NULL,NULL), + (170,85,4,'b_a',95,'Sibling of',154,'Sibling of',1,NULL,NULL,NULL), + (171,86,8,'a_b',110,'Household Member of',52,'Household Member is',1,NULL,NULL,NULL), + (172,86,8,'b_a',52,'Household Member is',110,'Household Member of',1,NULL,NULL,NULL), + (173,87,8,'a_b',95,'Household Member of',52,'Household Member is',1,NULL,NULL,NULL), + (174,87,8,'b_a',52,'Household Member is',95,'Household Member of',1,NULL,NULL,NULL), + (175,88,8,'a_b',154,'Household Member of',52,'Household Member is',1,NULL,NULL,NULL), + (176,88,8,'b_a',52,'Household Member is',154,'Household Member of',1,NULL,NULL,NULL), + (177,89,7,'a_b',161,'Head of Household for',52,'Head of Household is',1,NULL,NULL,NULL), + (178,89,7,'b_a',52,'Head of Household is',161,'Head of Household for',1,NULL,NULL,NULL), + (179,90,2,'a_b',110,'Spouse of',161,'Spouse of',1,NULL,NULL,NULL), + (180,90,2,'b_a',161,'Spouse of',110,'Spouse of',1,NULL,NULL,NULL), + (181,91,1,'a_b',8,'Child of',108,'Parent of',1,NULL,NULL,NULL), + (182,91,1,'b_a',108,'Parent of',8,'Child of',1,NULL,NULL,NULL), + (183,92,1,'a_b',175,'Child of',108,'Parent of',1,NULL,NULL,NULL), + (184,92,1,'b_a',108,'Parent of',175,'Child of',1,NULL,NULL,NULL), + (185,93,1,'a_b',8,'Child of',157,'Parent of',1,NULL,NULL,NULL), + (186,93,1,'b_a',157,'Parent of',8,'Child of',1,NULL,NULL,NULL), + (187,94,1,'a_b',175,'Child of',157,'Parent of',1,NULL,NULL,NULL), + (188,94,1,'b_a',157,'Parent of',175,'Child of',1,NULL,NULL,NULL), + (189,95,4,'a_b',175,'Sibling of',8,'Sibling of',1,NULL,NULL,NULL), + (190,95,4,'b_a',8,'Sibling of',175,'Sibling of',1,NULL,NULL,NULL), + (191,96,8,'a_b',157,'Household Member of',48,'Household Member is',1,NULL,NULL,NULL), + (192,96,8,'b_a',48,'Household Member is',157,'Household Member of',1,NULL,NULL,NULL), + (193,97,8,'a_b',8,'Household Member of',48,'Household Member is',1,NULL,NULL,NULL), + (194,97,8,'b_a',48,'Household Member is',8,'Household Member of',1,NULL,NULL,NULL), + (195,98,8,'a_b',175,'Household Member of',48,'Household Member is',1,NULL,NULL,NULL), + (196,98,8,'b_a',48,'Household Member is',175,'Household Member of',1,NULL,NULL,NULL), + (197,99,7,'a_b',108,'Head of Household for',48,'Head of Household is',1,NULL,NULL,NULL), + (198,99,7,'b_a',48,'Head of Household is',108,'Head of Household for',1,NULL,NULL,NULL), + (199,100,2,'a_b',157,'Spouse of',108,'Spouse of',1,NULL,NULL,NULL), + (200,100,2,'b_a',108,'Spouse of',157,'Spouse of',1,NULL,NULL,NULL), + (201,101,1,'a_b',75,'Child of',148,'Parent of',1,NULL,NULL,NULL), + (202,101,1,'b_a',148,'Parent of',75,'Child of',1,NULL,NULL,NULL), + (203,102,1,'a_b',133,'Child of',148,'Parent of',1,NULL,NULL,NULL), + (204,102,1,'b_a',148,'Parent of',133,'Child of',1,NULL,NULL,NULL), + (205,103,1,'a_b',75,'Child of',102,'Parent of',1,NULL,NULL,NULL), + (206,103,1,'b_a',102,'Parent of',75,'Child of',1,NULL,NULL,NULL), + (207,104,1,'a_b',133,'Child of',102,'Parent of',1,NULL,NULL,NULL), + (208,104,1,'b_a',102,'Parent of',133,'Child of',1,NULL,NULL,NULL), + (209,105,4,'a_b',133,'Sibling of',75,'Sibling of',1,NULL,NULL,NULL), + (210,105,4,'b_a',75,'Sibling of',133,'Sibling of',1,NULL,NULL,NULL), + (211,106,8,'a_b',102,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), + (212,106,8,'b_a',184,'Household Member is',102,'Household Member of',1,NULL,NULL,NULL), + (213,107,8,'a_b',75,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), + (214,107,8,'b_a',184,'Household Member is',75,'Household Member of',1,NULL,NULL,NULL), + (215,108,8,'a_b',133,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), + (216,108,8,'b_a',184,'Household Member is',133,'Household Member of',1,NULL,NULL,NULL), + (217,109,7,'a_b',148,'Head of Household for',184,'Head of Household is',1,NULL,NULL,NULL), + (218,109,7,'b_a',184,'Head of Household is',148,'Head of Household for',1,NULL,NULL,NULL), + (219,110,2,'a_b',102,'Spouse of',148,'Spouse of',1,NULL,NULL,NULL), + (220,110,2,'b_a',148,'Spouse of',102,'Spouse of',1,NULL,NULL,NULL), + (221,111,1,'a_b',38,'Child of',168,'Parent of',1,NULL,NULL,NULL), + (222,111,1,'b_a',168,'Parent of',38,'Child of',1,NULL,NULL,NULL), + (223,112,1,'a_b',155,'Child of',168,'Parent of',1,NULL,NULL,NULL), + (224,112,1,'b_a',168,'Parent of',155,'Child of',1,NULL,NULL,NULL), + (225,113,1,'a_b',38,'Child of',9,'Parent of',1,NULL,NULL,NULL), + (226,113,1,'b_a',9,'Parent of',38,'Child of',1,NULL,NULL,NULL), + (227,114,1,'a_b',155,'Child of',9,'Parent of',1,NULL,NULL,NULL), + (228,114,1,'b_a',9,'Parent of',155,'Child of',1,NULL,NULL,NULL), + (229,115,4,'a_b',155,'Sibling of',38,'Sibling of',1,NULL,NULL,NULL), + (230,115,4,'b_a',38,'Sibling of',155,'Sibling of',1,NULL,NULL,NULL), + (231,116,8,'a_b',9,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), + (232,116,8,'b_a',42,'Household Member is',9,'Household Member of',1,NULL,NULL,NULL), + (233,117,8,'a_b',38,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), + (234,117,8,'b_a',42,'Household Member is',38,'Household Member of',1,NULL,NULL,NULL), + (235,118,8,'a_b',155,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), + (236,118,8,'b_a',42,'Household Member is',155,'Household Member of',1,NULL,NULL,NULL), + (237,119,7,'a_b',168,'Head of Household for',42,'Head of Household is',1,NULL,NULL,NULL), + (238,119,7,'b_a',42,'Head of Household is',168,'Head of Household for',1,NULL,NULL,NULL), + (239,120,2,'a_b',9,'Spouse of',168,'Spouse of',1,NULL,NULL,NULL), + (240,120,2,'b_a',168,'Spouse of',9,'Spouse of',1,NULL,NULL,NULL), + (241,121,1,'a_b',64,'Child of',156,'Parent of',1,NULL,NULL,NULL), + (242,121,1,'b_a',156,'Parent of',64,'Child of',1,NULL,NULL,NULL), + (243,122,1,'a_b',115,'Child of',156,'Parent of',1,NULL,NULL,NULL), + (244,122,1,'b_a',156,'Parent of',115,'Child of',1,NULL,NULL,NULL), + (245,123,1,'a_b',64,'Child of',21,'Parent of',1,NULL,NULL,NULL), + (246,123,1,'b_a',21,'Parent of',64,'Child of',1,NULL,NULL,NULL), + (247,124,1,'a_b',115,'Child of',21,'Parent of',1,NULL,NULL,NULL), + (248,124,1,'b_a',21,'Parent of',115,'Child of',1,NULL,NULL,NULL), + (249,125,4,'a_b',115,'Sibling of',64,'Sibling of',1,NULL,NULL,NULL), + (250,125,4,'b_a',64,'Sibling of',115,'Sibling of',1,NULL,NULL,NULL), + (251,126,8,'a_b',21,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (252,126,8,'b_a',29,'Household Member is',21,'Household Member of',1,NULL,NULL,NULL), + (253,127,8,'a_b',64,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (254,127,8,'b_a',29,'Household Member is',64,'Household Member of',1,NULL,NULL,NULL), + (255,128,8,'a_b',115,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (256,128,8,'b_a',29,'Household Member is',115,'Household Member of',1,NULL,NULL,NULL), + (257,129,7,'a_b',156,'Head of Household for',29,'Head of Household is',1,NULL,NULL,NULL), + (258,129,7,'b_a',29,'Head of Household is',156,'Head of Household for',1,NULL,NULL,NULL), + (259,130,2,'a_b',21,'Spouse of',156,'Spouse of',1,NULL,NULL,NULL), + (260,130,2,'b_a',156,'Spouse of',21,'Spouse of',1,NULL,NULL,NULL), + (261,131,1,'a_b',118,'Child of',190,'Parent of',1,NULL,NULL,NULL), + (262,131,1,'b_a',190,'Parent of',118,'Child of',1,NULL,NULL,NULL), + (263,132,1,'a_b',87,'Child of',190,'Parent of',1,NULL,NULL,NULL), + (264,132,1,'b_a',190,'Parent of',87,'Child of',1,NULL,NULL,NULL), + (265,133,1,'a_b',118,'Child of',69,'Parent of',1,NULL,NULL,NULL), + (266,133,1,'b_a',69,'Parent of',118,'Child of',1,NULL,NULL,NULL), + (267,134,1,'a_b',87,'Child of',69,'Parent of',1,NULL,NULL,NULL), + (268,134,1,'b_a',69,'Parent of',87,'Child of',1,NULL,NULL,NULL), + (269,135,4,'a_b',87,'Sibling of',118,'Sibling of',1,NULL,NULL,NULL), + (270,135,4,'b_a',118,'Sibling of',87,'Sibling of',1,NULL,NULL,NULL), + (271,136,8,'a_b',69,'Household Member of',50,'Household Member is',1,NULL,NULL,NULL), + (272,136,8,'b_a',50,'Household Member is',69,'Household Member of',1,NULL,NULL,NULL), + (273,137,8,'a_b',118,'Household Member of',50,'Household Member is',1,NULL,NULL,NULL), + (274,137,8,'b_a',50,'Household Member is',118,'Household Member of',1,NULL,NULL,NULL), + (275,138,8,'a_b',87,'Household Member of',50,'Household Member is',1,NULL,NULL,NULL), + (276,138,8,'b_a',50,'Household Member is',87,'Household Member of',1,NULL,NULL,NULL), + (277,139,7,'a_b',190,'Head of Household for',50,'Head of Household is',0,NULL,NULL,NULL), + (278,139,7,'b_a',50,'Head of Household is',190,'Head of Household for',0,NULL,NULL,NULL), + (279,140,2,'a_b',69,'Spouse of',190,'Spouse of',0,NULL,NULL,NULL), + (280,140,2,'b_a',190,'Spouse of',69,'Spouse of',0,NULL,NULL,NULL), + (281,141,1,'a_b',83,'Child of',123,'Parent of',1,NULL,NULL,NULL), + (282,141,1,'b_a',123,'Parent of',83,'Child of',1,NULL,NULL,NULL), + (283,142,1,'a_b',26,'Child of',123,'Parent of',1,NULL,NULL,NULL), + (284,142,1,'b_a',123,'Parent of',26,'Child of',1,NULL,NULL,NULL), + (285,143,1,'a_b',83,'Child of',160,'Parent of',1,NULL,NULL,NULL), + (286,143,1,'b_a',160,'Parent of',83,'Child of',1,NULL,NULL,NULL), + (287,144,1,'a_b',26,'Child of',160,'Parent of',1,NULL,NULL,NULL), + (288,144,1,'b_a',160,'Parent of',26,'Child of',1,NULL,NULL,NULL), + (289,145,4,'a_b',26,'Sibling of',83,'Sibling of',1,NULL,NULL,NULL), + (290,145,4,'b_a',83,'Sibling of',26,'Sibling of',1,NULL,NULL,NULL), + (291,146,8,'a_b',160,'Household Member of',13,'Household Member is',1,NULL,NULL,NULL), + (292,146,8,'b_a',13,'Household Member is',160,'Household Member of',1,NULL,NULL,NULL), + (293,147,8,'a_b',83,'Household Member of',13,'Household Member is',1,NULL,NULL,NULL), + (294,147,8,'b_a',13,'Household Member is',83,'Household Member of',1,NULL,NULL,NULL), + (295,148,8,'a_b',26,'Household Member of',13,'Household Member is',1,NULL,NULL,NULL), + (296,148,8,'b_a',13,'Household Member is',26,'Household Member of',1,NULL,NULL,NULL), + (297,149,7,'a_b',123,'Head of Household for',13,'Head of Household is',1,NULL,NULL,NULL), + (298,149,7,'b_a',13,'Head of Household is',123,'Head of Household for',1,NULL,NULL,NULL), + (299,150,2,'a_b',160,'Spouse of',123,'Spouse of',1,NULL,NULL,NULL), + (300,150,2,'b_a',123,'Spouse of',160,'Spouse of',1,NULL,NULL,NULL), + (301,151,1,'a_b',196,'Child of',57,'Parent of',1,NULL,NULL,NULL), + (302,151,1,'b_a',57,'Parent of',196,'Child of',1,NULL,NULL,NULL), + (303,152,1,'a_b',191,'Child of',57,'Parent of',1,NULL,NULL,NULL), + (304,152,1,'b_a',57,'Parent of',191,'Child of',1,NULL,NULL,NULL), + (305,153,1,'a_b',196,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (306,153,1,'b_a',63,'Parent of',196,'Child of',1,NULL,NULL,NULL), + (307,154,1,'a_b',191,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (308,154,1,'b_a',63,'Parent of',191,'Child of',1,NULL,NULL,NULL), + (309,155,4,'a_b',191,'Sibling of',196,'Sibling of',1,NULL,NULL,NULL), + (310,155,4,'b_a',196,'Sibling of',191,'Sibling of',1,NULL,NULL,NULL), + (311,156,8,'a_b',63,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), + (312,156,8,'b_a',135,'Household Member is',63,'Household Member of',1,NULL,NULL,NULL), + (313,157,8,'a_b',196,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), + (314,157,8,'b_a',135,'Household Member is',196,'Household Member of',1,NULL,NULL,NULL), + (315,158,8,'a_b',191,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), + (316,158,8,'b_a',135,'Household Member is',191,'Household Member of',1,NULL,NULL,NULL), + (317,159,7,'a_b',57,'Head of Household for',135,'Head of Household is',1,NULL,NULL,NULL), + (318,159,7,'b_a',135,'Head of Household is',57,'Head of Household for',1,NULL,NULL,NULL), + (319,160,2,'a_b',63,'Spouse of',57,'Spouse of',1,NULL,NULL,NULL), + (320,160,2,'b_a',57,'Spouse of',63,'Spouse of',1,NULL,NULL,NULL), + (321,161,1,'a_b',116,'Child of',195,'Parent of',1,NULL,NULL,NULL), + (322,161,1,'b_a',195,'Parent of',116,'Child of',1,NULL,NULL,NULL), + (323,162,1,'a_b',51,'Child of',195,'Parent of',1,NULL,NULL,NULL), + (324,162,1,'b_a',195,'Parent of',51,'Child of',1,NULL,NULL,NULL), + (325,163,1,'a_b',116,'Child of',126,'Parent of',1,NULL,NULL,NULL), + (326,163,1,'b_a',126,'Parent of',116,'Child of',1,NULL,NULL,NULL), + (327,164,1,'a_b',51,'Child of',126,'Parent of',1,NULL,NULL,NULL), + (328,164,1,'b_a',126,'Parent of',51,'Child of',1,NULL,NULL,NULL), + (329,165,4,'a_b',51,'Sibling of',116,'Sibling of',1,NULL,NULL,NULL), + (330,165,4,'b_a',116,'Sibling of',51,'Sibling of',1,NULL,NULL,NULL), + (331,166,8,'a_b',126,'Household Member of',37,'Household Member is',1,NULL,NULL,NULL), + (332,166,8,'b_a',37,'Household Member is',126,'Household Member of',1,NULL,NULL,NULL), + (333,167,8,'a_b',116,'Household Member of',37,'Household Member is',1,NULL,NULL,NULL), + (334,167,8,'b_a',37,'Household Member is',116,'Household Member of',1,NULL,NULL,NULL), + (335,168,8,'a_b',51,'Household Member of',37,'Household Member is',1,NULL,NULL,NULL), + (336,168,8,'b_a',37,'Household Member is',51,'Household Member of',1,NULL,NULL,NULL), + (337,169,7,'a_b',195,'Head of Household for',37,'Head of Household is',1,NULL,NULL,NULL), + (338,169,7,'b_a',37,'Head of Household is',195,'Head of Household for',1,NULL,NULL,NULL), + (339,170,2,'a_b',126,'Spouse of',195,'Spouse of',1,NULL,NULL,NULL), + (340,170,2,'b_a',195,'Spouse of',126,'Spouse of',1,NULL,NULL,NULL), + (341,171,1,'a_b',171,'Child of',100,'Parent of',1,NULL,NULL,NULL), + (342,171,1,'b_a',100,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (343,172,1,'a_b',182,'Child of',100,'Parent of',1,NULL,NULL,NULL), + (344,172,1,'b_a',100,'Parent of',182,'Child of',1,NULL,NULL,NULL), + (345,173,1,'a_b',171,'Child of',11,'Parent of',1,NULL,NULL,NULL), + (346,173,1,'b_a',11,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (347,174,1,'a_b',182,'Child of',11,'Parent of',1,NULL,NULL,NULL), + (348,174,1,'b_a',11,'Parent of',182,'Child of',1,NULL,NULL,NULL), + (349,175,4,'a_b',182,'Sibling of',171,'Sibling of',1,NULL,NULL,NULL), + (350,175,4,'b_a',171,'Sibling of',182,'Sibling of',1,NULL,NULL,NULL), + (351,176,8,'a_b',11,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), + (352,176,8,'b_a',14,'Household Member is',11,'Household Member of',1,NULL,NULL,NULL), + (353,177,8,'a_b',171,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), + (354,177,8,'b_a',14,'Household Member is',171,'Household Member of',1,NULL,NULL,NULL), + (355,178,8,'a_b',182,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), + (356,178,8,'b_a',14,'Household Member is',182,'Household Member of',1,NULL,NULL,NULL), + (357,179,7,'a_b',100,'Head of Household for',14,'Head of Household is',0,NULL,NULL,NULL), + (358,179,7,'b_a',14,'Head of Household is',100,'Head of Household for',0,NULL,NULL,NULL), + (359,180,2,'a_b',11,'Spouse of',100,'Spouse of',0,NULL,NULL,NULL), + (360,180,2,'b_a',100,'Spouse of',11,'Spouse of',0,NULL,NULL,NULL), + (361,181,1,'a_b',47,'Child of',149,'Parent of',1,NULL,NULL,NULL), + (362,181,1,'b_a',149,'Parent of',47,'Child of',1,NULL,NULL,NULL), + (363,182,1,'a_b',16,'Child of',149,'Parent of',1,NULL,NULL,NULL), + (364,182,1,'b_a',149,'Parent of',16,'Child of',1,NULL,NULL,NULL), + (365,183,1,'a_b',47,'Child of',132,'Parent of',1,NULL,NULL,NULL), + (366,183,1,'b_a',132,'Parent of',47,'Child of',1,NULL,NULL,NULL), + (367,184,1,'a_b',16,'Child of',132,'Parent of',1,NULL,NULL,NULL), + (368,184,1,'b_a',132,'Parent of',16,'Child of',1,NULL,NULL,NULL), + (369,185,4,'a_b',16,'Sibling of',47,'Sibling of',1,NULL,NULL,NULL), + (370,185,4,'b_a',47,'Sibling of',16,'Sibling of',1,NULL,NULL,NULL), + (371,186,8,'a_b',132,'Household Member of',62,'Household Member is',1,NULL,NULL,NULL), + (372,186,8,'b_a',62,'Household Member is',132,'Household Member of',1,NULL,NULL,NULL), + (373,187,8,'a_b',47,'Household Member of',62,'Household Member is',1,NULL,NULL,NULL), + (374,187,8,'b_a',62,'Household Member is',47,'Household Member of',1,NULL,NULL,NULL), + (375,188,8,'a_b',16,'Household Member of',62,'Household Member is',1,NULL,NULL,NULL), + (376,188,8,'b_a',62,'Household Member is',16,'Household Member of',1,NULL,NULL,NULL), + (377,189,7,'a_b',149,'Head of Household for',62,'Head of Household is',1,NULL,NULL,NULL), + (378,189,7,'b_a',62,'Head of Household is',149,'Head of Household for',1,NULL,NULL,NULL), + (379,190,2,'a_b',132,'Spouse of',149,'Spouse of',1,NULL,NULL,NULL), + (380,190,2,'b_a',149,'Spouse of',132,'Spouse of',1,NULL,NULL,NULL), + (381,191,1,'a_b',174,'Child of',82,'Parent of',1,NULL,NULL,NULL), + (382,191,1,'b_a',82,'Parent of',174,'Child of',1,NULL,NULL,NULL), + (383,192,1,'a_b',141,'Child of',82,'Parent of',1,NULL,NULL,NULL), + (384,192,1,'b_a',82,'Parent of',141,'Child of',1,NULL,NULL,NULL), + (385,193,1,'a_b',174,'Child of',107,'Parent of',1,NULL,NULL,NULL), + (386,193,1,'b_a',107,'Parent of',174,'Child of',1,NULL,NULL,NULL), + (387,194,1,'a_b',141,'Child of',107,'Parent of',1,NULL,NULL,NULL), + (388,194,1,'b_a',107,'Parent of',141,'Child of',1,NULL,NULL,NULL), + (389,195,4,'a_b',141,'Sibling of',174,'Sibling of',1,NULL,NULL,NULL), + (390,195,4,'b_a',174,'Sibling of',141,'Sibling of',1,NULL,NULL,NULL), + (391,196,8,'a_b',107,'Household Member of',10,'Household Member is',1,NULL,NULL,NULL), + (392,196,8,'b_a',10,'Household Member is',107,'Household Member of',1,NULL,NULL,NULL), + (393,197,8,'a_b',174,'Household Member of',10,'Household Member is',1,NULL,NULL,NULL), + (394,197,8,'b_a',10,'Household Member is',174,'Household Member of',1,NULL,NULL,NULL), + (395,198,8,'a_b',141,'Household Member of',10,'Household Member is',1,NULL,NULL,NULL), + (396,198,8,'b_a',10,'Household Member is',141,'Household Member of',1,NULL,NULL,NULL), + (397,199,7,'a_b',82,'Head of Household for',10,'Head of Household is',1,NULL,NULL,NULL), + (398,199,7,'b_a',10,'Head of Household is',82,'Head of Household for',1,NULL,NULL,NULL), + (399,200,2,'a_b',107,'Spouse of',82,'Spouse of',1,NULL,NULL,NULL), + (400,200,2,'b_a',82,'Spouse of',107,'Spouse of',1,NULL,NULL,NULL), + (401,201,5,'a_b',113,'Employee of',25,'Employer of',1,NULL,NULL,NULL), + (402,201,5,'b_a',25,'Employer of',113,'Employee of',1,NULL,NULL,NULL), + (403,202,5,'a_b',163,'Employee of',40,'Employer of',1,NULL,NULL,NULL), + (404,202,5,'b_a',40,'Employer of',163,'Employee of',1,NULL,NULL,NULL), + (405,203,5,'a_b',60,'Employee of',41,'Employer of',1,NULL,NULL,NULL), + (406,203,5,'b_a',41,'Employer of',60,'Employee of',1,NULL,NULL,NULL), + (407,204,5,'a_b',172,'Employee of',49,'Employer of',1,NULL,NULL,NULL), + (408,204,5,'b_a',49,'Employer of',172,'Employee of',1,NULL,NULL,NULL), + (409,205,5,'a_b',11,'Employee of',61,'Employer of',1,NULL,NULL,NULL), + (410,205,5,'b_a',61,'Employer of',11,'Employee of',1,NULL,NULL,NULL), + (411,206,5,'a_b',171,'Employee of',70,'Employer of',1,NULL,NULL,NULL), + (412,206,5,'b_a',70,'Employer of',171,'Employee of',1,NULL,NULL,NULL), + (413,207,5,'a_b',68,'Employee of',72,'Employer of',1,NULL,NULL,NULL), + (414,207,5,'b_a',72,'Employer of',68,'Employee of',1,NULL,NULL,NULL), + (415,208,5,'a_b',185,'Employee of',80,'Employer of',1,NULL,NULL,NULL), + (416,208,5,'b_a',80,'Employer of',185,'Employee of',1,NULL,NULL,NULL), + (417,209,5,'a_b',175,'Employee of',90,'Employer of',1,NULL,NULL,NULL), + (418,209,5,'b_a',90,'Employer of',175,'Employee of',1,NULL,NULL,NULL), + (419,210,5,'a_b',97,'Employee of',91,'Employer of',1,NULL,NULL,NULL), + (420,210,5,'b_a',91,'Employer of',97,'Employee of',1,NULL,NULL,NULL), + (421,211,5,'a_b',126,'Employee of',106,'Employer of',1,NULL,NULL,NULL), + (422,211,5,'b_a',106,'Employer of',126,'Employee of',1,NULL,NULL,NULL), + (423,212,5,'a_b',170,'Employee of',109,'Employer of',1,NULL,NULL,NULL), + (424,212,5,'b_a',109,'Employer of',170,'Employee of',1,NULL,NULL,NULL), + (425,213,5,'a_b',188,'Employee of',125,'Employer of',1,NULL,NULL,NULL), + (426,213,5,'b_a',125,'Employer of',188,'Employee of',1,NULL,NULL,NULL), + (427,214,5,'a_b',65,'Employee of',136,'Employer of',1,NULL,NULL,NULL), + (428,214,5,'b_a',136,'Employer of',65,'Employee of',1,NULL,NULL,NULL), + (429,215,5,'a_b',85,'Employee of',137,'Employer of',1,NULL,NULL,NULL), + (430,215,5,'b_a',137,'Employer of',85,'Employee of',1,NULL,NULL,NULL), + (431,216,5,'a_b',59,'Employee of',186,'Employer of',1,NULL,NULL,NULL), + (432,216,5,'b_a',186,'Employer of',59,'Employee of',1,NULL,NULL,NULL), + (433,217,5,'a_b',139,'Employee of',194,'Employer of',1,NULL,NULL,NULL), + (434,217,5,'b_a',194,'Employer of',139,'Employee of',1,NULL,NULL,NULL), + (435,218,5,'a_b',93,'Employee of',198,'Employer of',1,NULL,NULL,NULL), + (436,218,5,'b_a',198,'Employer of',93,'Employee of',1,NULL,NULL,NULL), + (437,219,5,'a_b',116,'Employee of',201,'Employer of',1,NULL,NULL,NULL), + (438,219,5,'b_a',201,'Employer of',116,'Employee of',1,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_relationship_cache` ENABLE KEYS */; UNLOCK TABLES; @@ -10326,8 +10362,8 @@ INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id` (4062,'Catanduanes','CAT',1170,1), (4063,'Cavite','CAV',1170,1), (4064,'Cebu','CEB',1170,1), - (4065,'Compostela Valley','COM',1170,1), - (4066,'Davao','DAV',1170,1), + (4065,'Davao de Oro','COM',1170,1), + (4066,'Davao del Norte','DAV',1170,1), (4067,'Davao del Sur','DAS',1170,1), (4068,'Davao Oriental','DAO',1170,1), (4069,'Eastern Samar','EAS',1170,1), @@ -10337,7 +10373,7 @@ INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id` (4073,'Ilocos Sur','ILS',1170,1), (4074,'Iloilo','ILI',1170,1), (4075,'Isabela','ISA',1170,1), - (4076,'Kalinga-Apayso','KAL',1170,1), + (4076,'Kalinga','KAL',1170,1), (4077,'Laguna','LAG',1170,1), (4078,'Lanao del Norte','LAN',1170,1), (4079,'Lanao del Sur','LAS',1170,1), @@ -10353,7 +10389,7 @@ INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id` (4089,'Mountain Province','MOU',1170,1), (4090,'Negroe Occidental','NEC',1170,1), (4091,'Negros Oriental','NER',1170,1), - (4092,'North Cotabato','NCO',1170,1), + (4092,'Cotabato','NCO',1170,1), (4093,'Northern Samar','NSA',1170,1), (4094,'Nueva Ecija','NUE',1170,1), (4095,'Nueva Vizcaya','NUV',1170,1), @@ -11877,7 +11913,9 @@ INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id` (10390,'Swansea','SWA',1226,1), (10391,'Torfaen','TOF',1226,1), (10392,'Wrexham','WRX',1226,1), - (10393,'Sejong','50',1115,1); + (10393,'Sejong','50',1115,1), + (10394,'Dinagat Islands','DIN',1170,1), + (10395,'Huila','HUI',1048,1); /*!40000 ALTER TABLE `civicrm_state_province` ENABLE KEYS */; UNLOCK TABLES; @@ -11897,89 +11935,89 @@ UNLOCK TABLES; LOCK TABLES `civicrm_subscription_history` WRITE; /*!40000 ALTER TABLE `civicrm_subscription_history` DISABLE KEYS */; INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES - (1,19,2,'2021-01-11 11:19:07','Admin','Added',NULL), - (2,162,2,'2021-03-04 13:24:50','Admin','Added',NULL), - (3,140,2,'2021-05-02 18:57:05','Admin','Added',NULL), - (4,29,2,'2021-09-18 19:03:21','Admin','Added',NULL), - (5,84,2,'2021-05-12 03:24:49','Email','Added',NULL), - (6,67,2,'2021-04-04 02:36:07','Admin','Added',NULL), - (7,123,2,'2021-05-03 11:14:14','Admin','Added',NULL), - (8,153,2,'2020-12-23 07:36:51','Admin','Added',NULL), - (9,124,2,'2021-04-27 22:22:29','Email','Added',NULL), - (10,184,2,'2021-05-18 14:16:12','Email','Added',NULL), - (11,78,2,'2021-01-18 15:33:00','Admin','Added',NULL), - (12,64,2,'2021-10-18 00:33:26','Email','Added',NULL), - (13,101,2,'2020-11-15 04:48:45','Admin','Added',NULL), - (14,10,2,'2021-03-01 16:06:13','Admin','Added',NULL), - (15,173,2,'2021-10-23 15:25:43','Email','Added',NULL), - (16,121,2,'2021-03-08 17:21:13','Email','Added',NULL), - (17,53,2,'2021-08-20 20:15:09','Email','Added',NULL), - (18,80,2,'2021-03-08 02:45:44','Admin','Added',NULL), - (19,156,2,'2021-03-08 18:56:27','Email','Added',NULL), - (20,77,2,'2021-08-25 06:22:32','Admin','Added',NULL), - (21,147,2,'2021-02-27 09:51:46','Email','Added',NULL), - (22,159,2,'2021-10-13 06:04:15','Admin','Added',NULL), - (23,152,2,'2021-08-30 22:25:45','Email','Added',NULL), - (24,130,2,'2020-11-30 11:25:38','Email','Added',NULL), - (25,5,2,'2021-01-24 14:19:08','Email','Added',NULL), - (26,52,2,'2021-08-02 16:58:59','Email','Added',NULL), - (27,4,2,'2021-01-23 08:28:19','Email','Added',NULL), - (28,99,2,'2021-07-21 22:01:05','Email','Added',NULL), - (29,56,2,'2020-12-10 22:34:11','Admin','Added',NULL), - (30,31,2,'2021-03-06 09:40:37','Admin','Added',NULL), - (31,192,2,'2021-02-16 23:16:18','Email','Added',NULL), - (32,171,2,'2021-02-20 22:02:22','Email','Added',NULL), - (33,136,2,'2021-05-05 05:24:57','Email','Added',NULL), - (34,167,2,'2021-03-19 21:23:29','Admin','Added',NULL), - (35,200,2,'2021-04-13 08:11:48','Email','Added',NULL), - (36,139,2,'2021-02-08 01:44:29','Email','Added',NULL), - (37,198,2,'2021-03-22 11:26:31','Email','Added',NULL), - (38,9,2,'2020-11-26 20:18:17','Email','Added',NULL), - (39,195,2,'2021-09-08 18:13:41','Admin','Added',NULL), - (40,144,2,'2021-09-13 05:38:43','Email','Added',NULL), - (41,21,2,'2021-01-12 10:52:25','Admin','Added',NULL), - (42,114,2,'2021-05-01 11:29:11','Admin','Added',NULL), - (43,50,2,'2021-01-19 06:41:20','Admin','Added',NULL), - (44,104,2,'2021-09-30 10:27:35','Email','Added',NULL), - (45,44,2,'2021-02-03 18:18:08','Admin','Added',NULL), - (46,75,2,'2021-05-25 21:23:44','Admin','Added',NULL), - (47,155,2,'2021-07-01 21:02:21','Email','Added',NULL), - (48,42,2,'2020-12-24 09:35:17','Admin','Added',NULL), - (49,98,2,'2021-02-22 11:38:48','Admin','Added',NULL), - (50,146,2,'2021-10-28 21:08:44','Admin','Added',NULL), - (51,163,2,'2021-08-11 08:02:00','Admin','Added',NULL), - (52,158,2,'2021-06-09 04:01:13','Admin','Added',NULL), - (53,6,2,'2021-08-05 06:00:45','Email','Added',NULL), - (54,18,2,'2021-01-11 12:11:01','Admin','Added',NULL), - (55,134,2,'2021-03-12 01:23:38','Email','Added',NULL), - (56,39,2,'2021-10-26 14:49:35','Email','Added',NULL), - (57,2,2,'2021-10-14 19:41:02','Email','Added',NULL), - (58,113,2,'2021-10-07 13:25:19','Admin','Added',NULL), - (59,69,2,'2021-06-15 18:28:20','Admin','Added',NULL), - (60,119,2,'2021-05-24 20:09:59','Admin','Added',NULL), - (61,199,3,'2021-07-27 22:58:44','Admin','Added',NULL), - (62,179,3,'2021-05-22 17:37:51','Admin','Added',NULL), - (63,76,3,'2021-08-02 13:29:59','Admin','Added',NULL), - (64,142,3,'2021-04-29 20:34:12','Email','Added',NULL), - (65,17,3,'2021-04-15 16:41:11','Email','Added',NULL), - (66,24,3,'2020-11-30 07:20:22','Email','Added',NULL), - (67,129,3,'2021-10-06 09:07:17','Admin','Added',NULL), - (68,16,3,'2021-04-23 12:32:56','Admin','Added',NULL), - (69,27,3,'2021-02-01 15:11:54','Admin','Added',NULL), - (70,143,3,'2021-05-03 00:06:42','Email','Added',NULL), - (71,89,3,'2021-03-21 16:58:34','Email','Added',NULL), - (72,48,3,'2021-06-14 19:38:08','Admin','Added',NULL), - (73,138,3,'2021-08-02 15:35:18','Email','Added',NULL), - (74,82,3,'2020-12-18 16:02:12','Email','Added',NULL), - (75,168,3,'2021-05-10 08:33:39','Email','Added',NULL), - (76,19,4,'2021-09-17 23:39:21','Email','Added',NULL), - (77,153,4,'2020-12-16 20:05:04','Email','Added',NULL), - (78,173,4,'2021-08-15 00:30:13','Email','Added',NULL), - (79,159,4,'2020-12-07 13:36:00','Email','Added',NULL), - (80,56,4,'2021-01-15 07:02:25','Email','Added',NULL), - (81,139,4,'2021-08-03 17:04:07','Email','Added',NULL), - (82,50,4,'2021-05-04 22:14:21','Email','Added',NULL), - (83,146,4,'2021-06-04 18:15:46','Email','Added',NULL); + (1,23,2,'2020-12-09 10:32:49','Email','Added',NULL), + (2,142,2,'2021-05-01 18:35:48','Email','Added',NULL), + (3,81,2,'2021-05-05 02:29:46','Admin','Added',NULL), + (4,185,2,'2020-11-26 00:08:26','Admin','Added',NULL), + (5,77,2,'2021-08-25 16:58:44','Admin','Added',NULL), + (6,4,2,'2021-09-12 02:39:45','Admin','Added',NULL), + (7,163,2,'2021-10-12 20:47:51','Email','Added',NULL), + (8,44,2,'2021-05-30 17:10:41','Email','Added',NULL), + (9,197,2,'2021-07-13 10:08:09','Email','Added',NULL), + (10,131,2,'2020-12-23 22:02:11','Email','Added',NULL), + (11,33,2,'2020-12-14 09:54:39','Admin','Added',NULL), + (12,79,2,'2020-11-08 22:52:20','Admin','Added',NULL), + (13,139,2,'2021-04-30 19:35:56','Email','Added',NULL), + (14,73,2,'2021-01-08 05:36:44','Admin','Added',NULL), + (15,39,2,'2021-10-06 04:39:31','Email','Added',NULL), + (16,164,2,'2021-09-19 17:18:50','Email','Added',NULL), + (17,101,2,'2021-08-28 02:16:57','Email','Added',NULL), + (18,35,2,'2021-08-17 15:30:12','Admin','Added',NULL), + (19,30,2,'2021-10-04 09:40:58','Admin','Added',NULL), + (20,134,2,'2021-08-23 15:00:12','Email','Added',NULL), + (21,104,2,'2020-11-10 16:11:31','Admin','Added',NULL), + (22,105,2,'2021-03-10 12:58:16','Admin','Added',NULL), + (23,187,2,'2021-04-11 18:13:42','Admin','Added',NULL), + (24,120,2,'2021-08-05 21:22:11','Email','Added',NULL), + (25,24,2,'2021-05-12 00:45:53','Email','Added',NULL), + (26,3,2,'2021-11-07 04:38:05','Email','Added',NULL), + (27,172,2,'2021-02-10 08:55:58','Email','Added',NULL), + (28,162,2,'2021-04-14 06:36:22','Email','Added',NULL), + (29,55,2,'2021-03-08 00:36:01','Admin','Added',NULL), + (30,56,2,'2021-01-07 04:43:52','Email','Added',NULL), + (31,146,2,'2021-02-18 05:54:07','Admin','Added',NULL), + (32,140,2,'2020-12-07 22:05:12','Admin','Added',NULL), + (33,188,2,'2021-02-09 01:52:15','Email','Added',NULL), + (34,7,2,'2021-02-01 07:56:58','Admin','Added',NULL), + (35,76,2,'2021-08-17 09:50:49','Email','Added',NULL), + (36,145,2,'2021-11-05 14:55:34','Email','Added',NULL), + (37,32,2,'2021-01-13 07:35:53','Email','Added',NULL), + (38,18,2,'2021-03-30 03:40:13','Email','Added',NULL), + (39,178,2,'2021-04-21 12:05:03','Email','Added',NULL), + (40,89,2,'2021-07-16 02:11:58','Email','Added',NULL), + (41,179,2,'2021-06-16 10:20:44','Email','Added',NULL), + (42,31,2,'2021-09-03 02:29:24','Admin','Added',NULL), + (43,45,2,'2021-05-15 07:40:46','Email','Added',NULL), + (44,181,2,'2021-05-21 14:38:53','Admin','Added',NULL), + (45,144,2,'2021-10-25 19:43:38','Admin','Added',NULL), + (46,58,2,'2021-09-15 03:14:06','Email','Added',NULL), + (47,65,2,'2021-09-29 05:32:37','Email','Added',NULL), + (48,88,2,'2021-06-16 14:13:19','Admin','Added',NULL), + (49,177,2,'2021-09-22 20:20:35','Admin','Added',NULL), + (50,170,2,'2021-05-03 04:29:42','Admin','Added',NULL), + (51,180,2,'2021-01-30 06:35:00','Email','Added',NULL), + (52,150,2,'2021-08-01 11:08:07','Admin','Added',NULL), + (53,96,2,'2021-10-14 11:53:44','Email','Added',NULL), + (54,129,2,'2021-11-02 07:14:11','Email','Added',NULL), + (55,199,2,'2020-12-09 00:28:41','Email','Added',NULL), + (56,17,2,'2021-02-20 12:02:20','Email','Added',NULL), + (57,112,2,'2021-03-31 11:24:28','Email','Added',NULL), + (58,86,2,'2021-07-04 01:11:15','Admin','Added',NULL), + (59,200,2,'2021-06-11 05:10:11','Email','Added',NULL), + (60,53,2,'2020-11-28 18:32:26','Email','Added',NULL), + (61,27,3,'2021-04-04 16:15:43','Admin','Added',NULL), + (62,94,3,'2021-09-20 19:13:16','Email','Added',NULL), + (63,66,3,'2020-12-23 14:57:23','Email','Added',NULL), + (64,60,3,'2021-05-21 21:08:00','Admin','Added',NULL), + (65,54,3,'2021-04-19 14:18:12','Email','Added',NULL), + (66,143,3,'2021-05-07 07:44:46','Admin','Added',NULL), + (67,158,3,'2021-10-03 15:04:57','Email','Added',NULL), + (68,36,3,'2021-01-07 17:08:04','Admin','Added',NULL), + (69,78,3,'2021-04-27 18:01:10','Email','Added',NULL), + (70,121,3,'2021-09-24 22:27:36','Admin','Added',NULL), + (71,59,3,'2021-05-30 18:43:41','Admin','Added',NULL), + (72,85,3,'2021-09-09 00:31:05','Email','Added',NULL), + (73,5,3,'2021-09-09 14:26:17','Admin','Added',NULL), + (74,153,3,'2021-07-14 15:45:34','Admin','Added',NULL), + (75,84,3,'2021-05-13 08:08:20','Email','Added',NULL), + (76,23,4,'2021-05-17 03:56:41','Admin','Added',NULL), + (77,44,4,'2021-04-23 11:56:15','Admin','Added',NULL), + (78,39,4,'2021-01-28 23:14:00','Email','Added',NULL), + (79,105,4,'2021-05-22 10:29:49','Admin','Added',NULL), + (80,55,4,'2021-03-17 03:42:08','Email','Added',NULL), + (81,145,4,'2021-05-14 17:28:10','Admin','Added',NULL), + (82,45,4,'2021-01-03 07:04:48','Admin','Added',NULL), + (83,170,4,'2021-05-25 18:15:00','Email','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -12196,20 +12234,25 @@ 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,154,'http://grabillmusic.org',1), - (2,190,'http://communityservices.org',1), - (3,65,'http://friendsagriculturefund.org',1), - (4,120,'http://sppoetryservices.org',1), - (5,79,'http://creativeculturepartners.org',1), - (6,62,'http://sierrasoftware.org',1), - (7,33,'http://iowapoetrysolutions.org',1), - (8,127,'http://virginiacollective.org',1), - (9,181,'http://steptoecenter.org',1), - (10,103,'http://littcarrpeace.org',1), - (11,174,'http://urbanhealthsolutions.org',1), - (12,160,'http://globallegalschool.org',1), - (13,94,'http://mangopeaceschool.org',1), - (14,128,'http://fwpeacetrust.org',1); + (1,91,'http://pittsburghcultureinitiative.org',1), + (2,109,'http://ruralfood.org',1), + (3,136,'http://minnesotapartnership.org',1), + (4,72,'http://ruralliteracy.org',1), + (5,198,'http://hampdensystems.org',1), + (6,49,'http://nmpeaceassociation.org',1), + (7,201,'http://nywellnessnetwork.org',1), + (8,25,'http://greenlegal.org',1), + (9,106,'http://texasliteracynetwork.org',1), + (10,70,'http://caulderfoodsystems.org',1), + (11,90,'http://urbanpartnership.org',1), + (12,137,'http://urbanadvocacyassociation.org',1), + (13,186,'http://bayassociation.org',1), + (14,41,'http://texasarts.org',1), + (15,194,'http://friendsmusicsolutions.org',1), + (16,40,'http://pinesustainability.org',1), + (17,80,'http://friendsenvironmental.org',1), + (18,125,'http://lincolnfund.org',1), + (19,165,'http://creativesustainabilitysystems.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -12247,7 +12290,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2021-11-04 9:14:41 +-- Dump completed on 2021-11-08 12:45:35 -- +--------------------------------------------------------------------+ -- | 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 6be2f9672c42b1f16ad9f249cab16cd4c49db52c..04a1c0bf7c0c5be484961b04e029c05ff9305e7f 100644 --- a/civicrm/templates/CRM/Activity/Form/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Form/Activity.tpl @@ -63,7 +63,7 @@ </td> </tr> - {if !empty($form.separation)} + {if $form.separation} <tr class="crm-activity-form-block-separation crm-is-multi-activity-wrapper"> <td class="label">{$form.separation.label}</td> <td>{$form.separation.html} {help id="separation"}</td> @@ -91,8 +91,8 @@ </td> </tr> - {if !empty($activityTypeFile)} - {include file="CRM/$crmDir/Form/Activity/$activityTypeFile.tpl"} + {if $activityTypeFile} + {include file="CRM/$crmDir/Form/Activity/$activityTypeFile.tpl"} {/if} <tr class="crm-activity-form-block-subject"> @@ -156,7 +156,7 @@ <td class="label">{$form.result.label}</td><td class="view-value">{$form.result.html}</td> </tr> {/if} - {if !empty($form.tag.html)} + {if $form.tag} <tr class="crm-activity-form-block-tag"> <td class="label">{$form.tag.label}</td> <td class="view-value"> @@ -165,7 +165,7 @@ </tr> {/if} - {if !empty($tagsetInfo.activity)} + {if $isTagset} <tr class="crm-activity-form-block-tag_set"> {include file="CRM/common/Tagset.tpl" tagsetType='activity' tableLayout=true} </tr> @@ -282,4 +282,4 @@ {/if} </div>{* end of form block*} -{include file="CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl" entityID=$activityId entityTable="civicrm_activity"} +{include file="CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl" entityID=$activityId entityTable="civicrm_activity" isRepeatingEntity=false} diff --git a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl index b8eeb9dda58125e48664494d450f8ddfaf8678b9..0759d8e2bb14b10bfe793d709ffc03b2e980e815 100644 --- a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl @@ -114,8 +114,8 @@ {/if} {* campaign in activity search *} -{include file="CRM/Campaign/Form/addCampaignToComponent.tpl" -campaignContext="componentSearch" campaignTrClass='' campaignTdClass=''} +{include file="CRM/Campaign/Form/addCampaignToSearch.tpl" +campaignTrClass='' campaignTdClass=''} {if !empty($activityGroupTree)} <tr id="activityCustom"> diff --git a/civicrm/templates/CRM/Activity/Form/Selector.tpl b/civicrm/templates/CRM/Activity/Form/Selector.tpl index cdd6fb7a1f8ea34e8250788ddf1b9859beb05113..23989568317e9139269eff41494491d0e0571358 100644 --- a/civicrm/templates/CRM/Activity/Form/Selector.tpl +++ b/civicrm/templates/CRM/Activity/Form/Selector.tpl @@ -17,16 +17,16 @@ <thead class="sticky"> <tr> {if !$single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> - {if isset($header.sort)} + {if $header.sort} {assign var='key' value=$header.sort} {if !empty($sort)} {$sort->_response.$key.link} {/if} - {elseif isset($header.name)} + {elseif $header.name} {$header.name} {/if} </th> @@ -54,7 +54,7 @@ {/if} </td> - <td>{if isset($row.activity_subject)}{$row.activity_subject|purify}{/if}</td> + <td>{$row.activity_subject|purify}</td> <td> {if !$row.source_contact_id} @@ -67,7 +67,7 @@ <td> {if $row.mailingId} <a href="{$row.mailingId}" title="{ts}View Mailing Report{/ts}">{$row.recipients}</a> - {elseif isset($row.recipients)} + {elseif $row.recipients} {$row.recipients} {elseif !$row.target_contact_name} <em>n/a</em> diff --git a/civicrm/templates/CRM/Activity/Selector/Activity.tpl b/civicrm/templates/CRM/Activity/Selector/Activity.tpl index ce706a7c7a210f41ebc90a6dad86c820ad63748e..6366cd59c941fad903c6ae58948f7cf5618e58af 100644 --- a/civicrm/templates/CRM/Activity/Selector/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Selector/Activity.tpl @@ -14,7 +14,7 @@ <h3 class="crm-table-title">{ts}Activities{/ts}</h3> {/if} {if $rows} - <form title="activity_pager" action="{crmURL}" method="post"> + <form action="{crmURL}" method="post"> {include file="CRM/common/pager.tpl" location="top"} {strip} @@ -97,9 +97,7 @@ {else} <div class="messages status no-popup"> - {if isset($caseview) and $caseview} - {ts}There are no Activities attached to this case record.{/ts}{if $permission EQ 'edit'} {ts}You can go to the Activities tab to create or attach activity records.{/ts}{/if} - {elseif $context eq 'home'} + {if $context eq 'home'} {ts}There are no Activities to display.{/ts} {else} {ts}There are no Activities to display.{/ts}{if $permission EQ 'edit'} {ts}You can use the links above to schedule or record an activity.{/ts}{/if} diff --git a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl index d00fb30478bc989f0d82dfcc00bf62a3875267da..cb42f4139d12d8f57529bc8bd930094783ab00e0 100644 --- a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl @@ -8,9 +8,6 @@ +--------------------------------------------------------------------+ *} {* this template is used for adding/editing/deleting Message Templates *} -{if !isset($isAdmin)} - {assign var="isAdmin" value="0"} -{/if} {if $action neq 8} <div class="help"> {ts}Use this form to add or edit re-usable message templates.{/ts} {help id="id-intro" file="CRM/Admin/Page/MessageTemplates.hlp"} diff --git a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl index db6e95ca7151e7b01996d471d7ef6d0e83074ccb..95d5cefe17874cc59cf9041425bafa8f7ae93bd7 100644 --- a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl +++ b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl @@ -7,9 +7,6 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if !isset($isAdmin)} - {assign var="isAdmin" value="0"} -{/if} {* This template is used for adding/scheduling reminders. *} <div class="crm-block crm-form-block crm-scheduleReminder-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> @@ -31,7 +28,7 @@ <tr class="crm-scheduleReminder-form-block-when"> <td class="right">{$form.start_action_offset.label}</td> - <td colspan="3">{$form.absolute_date.html} <strong id='OR'>OR</strong><br /></td> + <td colspan="3">{$form.absolute_date.html} <strong id='OR'>{ts}OR{/ts}</strong><br /></td> </tr> <tr id="relativeDate" class="crm-scheduleReminder-form-block-description"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl b/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl index 0182f99bf8ebda81d5bb28873f8b09d2556891ca..0ebecbbe7c31a96fb77cac7b93e090ab63f5b057 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl @@ -3,7 +3,7 @@ <td class="label">{$form.$setting_name.label}</td> <td> {if !empty($fieldSpec.wrapper_element)} - {$fieldSpec.wrapper_element.0}{$form.$setting_name.html}{$fieldSpec.wrapper_element.1} + {$fieldSpec.wrapper_element.0|smarty:nodefaults}{$form.$setting_name.html}{$fieldSpec.wrapper_element.1|smarty:nodefaults} {else} {$form.$setting_name.html} {/if} diff --git a/civicrm/templates/CRM/Admin/Page/Job.tpl b/civicrm/templates/CRM/Admin/Page/Job.tpl index 3a999252cb624485220a522bbf6aa9870cd9ca18..2738a86b94f33031bdb68587b7a753853cd605f6 100644 --- a/civicrm/templates/CRM/Admin/Page/Job.tpl +++ b/civicrm/templates/CRM/Admin/Page/Job.tpl @@ -39,14 +39,14 @@ <th ></th> </tr> {foreach from=$rows item=row} - <tr id="job-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"} {if !empty($row.class)}{$row.class}{/if}{if NOT $row.is_active} disabled{/if}"> + <tr id="job-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"} {$row.class}{if NOT $row.is_active} disabled{/if}"> <td class="crm-job-name"><strong><span data-field="name">{$row.name}</span></strong> ({$row.run_frequency})<br/> {$row.description}<br /> {ts}API Entity:{/ts} {$row.api_entity}<br/> {ts}API Action:{/ts} <strong>{$row.api_action}</strong><br/> </td> - <td class="crm-job-name">{if isset($row.parameters)}{if $row.parameters eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.parameters}</pre>{/if}{/if}</td> - <td class="crm-job-name">{if isset($row.last_run)}{if $row.last_run eq null}never{else}{$row.last_run|crmDate:$config->dateformatDatetime}{/if}{/if}</td> + <td class="crm-job-name">{if $row.parameters eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.parameters}</pre>{/if}</td> + <td class="crm-job-name">{if $row.last_run eq null}never{else}{$row.last_run|crmDate:$config->dateformatDatetime}{/if}</td> <td id="row_{$row.id}_status" class="crm-job-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/LocationType.tpl b/civicrm/templates/CRM/Admin/Page/LocationType.tpl index 80e8b716aa2f7a1deb69b714ad24370f476907a9..3ce80083fb610fbd36cc30273189bd03ff395ad1 100644 --- a/civicrm/templates/CRM/Admin/Page/LocationType.tpl +++ b/civicrm/templates/CRM/Admin/Page/LocationType.tpl @@ -34,13 +34,13 @@ </tr> </thead> {foreach from=$rows item=row} - <tr id="location_type-{$row.id}" data-action="setvalue" class="{cycle values="odd-row,even-row"}{if !empty($row.class)} {$row.class}{/if} crm-entity {if NOT $row.is_active} disabled{/if}"> + <tr id="location_type-{$row.id}" data-action="setvalue" class="{cycle values="odd-row,even-row"} {$row.class} crm-entity {if NOT $row.is_active} disabled{/if}"> <td class="crmf-name">{$row.name}</td> <td class="crmf-display_name crm-editable">{$row.display_name}</td> - <td class="crmf-vcard_name crm-editable">{if !empty($row.vcard_name)}{$row.vcard_name}{/if}</td> + <td class="crmf-vcard_name crm-editable">{$row.vcard_name}</td> <td class="crmf-description crm-editable">{$row.description}</td> <td id="row_{$row.id}_status" class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td class="crmf-is_default">{if isset($row.is_default)}{icon condition=$row.is_default}{ts}Default{/ts}{/icon} {/if}</td> + <td class="crmf-is_default">{if $row.is_default}{icon condition=$row.is_default}{ts}Default{/ts}{/icon} {/if}</td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl index c2ef4b9983c93cddbf4bcbdd972f4ec7d8e4d6c8..fa655f76362de0da4086b05fdeff7abbad34f8da 100644 --- a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl +++ b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl @@ -34,15 +34,15 @@ {foreach from=$rows item=row} <tr id='rowid{$row.id}' class="crm-mailSettings {cycle values="odd-row,even-row"}"> <td class="crm-mailSettings-name">{$row.name}</td> - <td class="crm-mailSettings-server">{if !empty($row.server)}{$row.server}{/if}</td> - <td class="crm-mailSettings-username">{if !empty($row.username)}{$row.username}{/if}</td> - <td class="crm-mailSettings-localpart">{if !empty($row.localpart)}{$row.localpart}{/if}</td> - <td class="crm-mailSettings-domain">{if !empty($row.domain)}{$row.domain}{/if}</td> - <td class="crm-mailSettings-return_path">{if !empty($row.return_path)}{$row.return_path}{/if}</td> - <td class="crm-mailSettings-protocol">{if !empty($row.protocol)}{$row.protocol}{/if}</td> - <td class="crm-mailSettings-source">{if !empty($row.source)}{$row.source}{/if}</td> - <!--<td>{if !empty($row.port)}{$row.port}{/if}</td>--> - <td class="crm-mailSettings-is_ssl">{if isset($row.is_ssl) and $row.is_ssl eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> + <td class="crm-mailSettings-server">{$row.server}</td> + <td class="crm-mailSettings-username">{$row.username}</td> + <td class="crm-mailSettings-localpart">{$row.localpart}</td> + <td class="crm-mailSettings-domain">{$row.domain}</td> + <td class="crm-mailSettings-return_path">{$row.return_path}</td> + <td class="crm-mailSettings-protocol">{$row.protocol}</td> + <td class="crm-mailSettings-source">{$row.source}</td> + <!--<td>{$row.port}</td>--> + <td class="crm-mailSettings-is_ssl">{if $row.is_ssl eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-mailSettings-is_default">{if $row.is_default eq 1}{ts}Bounce Processing <strong>(Default)</strong>{/ts}{else}{ts}Email-to-Activity{/ts}{/if} </td> <td>{$row.action|replace:'xx':$row.id}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl index 37b587d765c36cf3718da8bab27168ef821d6c1a..96d38de5b1ce822ce9daba3d1009c16db2ebf4bc 100644 --- a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl @@ -34,25 +34,25 @@ </div> </div> - <div class="crm-section msg_txt-section"> - <h3 class="header-dark">{$form.msg_text.label}</h3> - <div class="text"> - <textarea class="huge" name='msg_text' id='msg_text'>{$form.msg_text.value|htmlentities}</textarea> + <div class="crm-section msg_html-section"> + <h3 class="header-dark">{$form.msg_html.label}</h3> + <div class='text'> + <textarea class="huge" name='msg_html' id='msg_html'>{$form.msg_html.value|htmlentities}</textarea> <div class='spacer'></div> <div class="section"> - <a href='#' onclick='MessageTemplates.msg_text.select(); return false;' class='button'><span>{ts}Select Text Message{/ts}</span></a> + <a href='#' onclick='MessageTemplates.msg_html.select(); return false;' class='button'><span>{ts}Select HTML Message{/ts}</span></a> <div class='spacer'></div> </div> </div> </div> - <div class="crm-section msg_html-section"> - <h3 class="header-dark">{$form.msg_html.label}</h3> - <div class='text'> - <textarea class="huge" name='msg_html' id='msg_html'>{$form.msg_html.value|htmlentities}</textarea> + <div class="crm-section msg_txt-section"> + <h3 class="header-dark">{$form.msg_text.label}</h3> + <div class="text"> + <textarea class="huge" name='msg_text' id='msg_text'>{$form.msg_text.value|htmlentities}</textarea> <div class='spacer'></div> <div class="section"> - <a href='#' onclick='MessageTemplates.msg_html.select(); return false;' class='button'><span>{ts}Select HTML Message{/ts}</span></a> + <a href='#' onclick='MessageTemplates.msg_text.select(); return false;' class='button'><span>{ts}Select Text Message{/ts}</span></a> <div class='spacer'></div> </div> </div> @@ -125,7 +125,7 @@ </thead> <tbody> {foreach from=$template_row item=row} - <tr id="message_template-{$row.id}" class="crm-entity {if !empty($row.class)}{$row.class}{/if}{if NOT $row.is_active} disabled{/if}"> + <tr id="message_template-{$row.id}" class="crm-entity {$row.class}{if NOT $row.is_active} disabled{/if}"> <td>{$row.msg_title}</td> {if $type eq 'userTemplates'} <td>{$row.msg_subject}</td> diff --git a/civicrm/templates/CRM/Admin/Page/Options.tpl b/civicrm/templates/CRM/Admin/Page/Options.tpl index 136c97ca0baa4999cd0194efa96cb26b2f5443ce..93d6d476842268844cebb1711aab95bbb7031492 100644 --- a/civicrm/templates/CRM/Admin/Page/Options.tpl +++ b/civicrm/templates/CRM/Admin/Page/Options.tpl @@ -8,7 +8,7 @@ +--------------------------------------------------------------------+ *} -{if empty($gName)} +{if !$gName} {include file="CRM/Admin/Page/OptionGroup.tpl"} {elseif $action eq 1 or $action eq 2 or $action eq 8} @@ -48,7 +48,7 @@ {else} {ts}You can use this page to define one or more general Email Addresses that can be selected as the From Address. EXAMPLE: <em>"Client Services" <clientservices@example.org></em>{/ts} {/if} - {elseif !empty($isLocked)} + {elseif $isLocked} {ts}This option group is reserved for system use. You cannot add or delete options in this list.{/ts} {else} {ts 1=$gLabel}The existing option choices for %1 group are listed below. You can add, edit or delete them from this screen.{/ts} @@ -58,11 +58,11 @@ <div class="crm-content-block crm-block"> {if $rows} -{if !isset($isLocked) || $isLocked ne 1} + {if $isLocked ne 1} <div class="action-link"> - {crmButton p="civicrm/admin/options/$gName" q='action=add&reset=1' class="new-option" icon="plus-circle"}{if !isset($gLabel)}{ts}Add Option{/ts}{else}{ts 1=$gLabel}Add %1{/ts}{/if}{/crmButton} + {crmButton p="civicrm/admin/options/$gName" q='action=add&reset=1' class="new-option" icon="plus-circle"}{if !$gLabel}{ts}Add Option{/ts}{else}{ts 1=$gLabel}Add %1{/ts}{/if}{/crmButton} </div> -{/if} + {/if} {foreach from=$rows item=row} {if !empty($row.icon)}{assign var='hasIcons' value=TRUE}{/if} {/foreach} @@ -73,10 +73,10 @@ <table id="options" class="row-highlight"> <thead> <tr> - {if !empty($hasIcons)} + {if $hasIcons} <th></th> {/if} - {if !empty($showComponent)} + {if $showComponent} <th>{ts}Component{/ts}</th> {/if} <th> @@ -100,12 +100,11 @@ {ts}Value{/ts} {/if} </th> - {if $gName eq "payment_instrument"}<th>Account</th>{/if} - {if !empty($showCounted)}<th>{ts}Counted?{/ts}</th>{/if} - {if !empty($showVisibility)}<th>{ts}Visibility{/ts}</th>{/if} + {if $gName eq "payment_instrument"}<th>{ts}Account{/ts}</th>{/if} + {if $showCounted}<th>{ts}Counted?{/ts}</th>{/if} <th id="nosort">{ts}Description{/ts}</th> <th>{ts}Order{/ts}</th> - {if !empty($showIsDefault)}<th>{ts}Default{/ts}</th>{/if} + {if $showIsDefault}<th>{ts}Default{/ts}</th>{/if} <th>{ts}Reserved{/ts}</th> <th>{ts}Enabled?{/ts}</th> <th></th> @@ -114,30 +113,29 @@ <tbody> {foreach from=$rows item=row} <tr id="option_value-{$row.id}" class="crm-admin-options crm-admin-options_{$row.id} crm-entity {cycle values="odd-row,even-row"}{if NOT $row.is_active} disabled{/if}"> - {if !empty($hasIcons)} + {if $hasIcons} <td class="crm-admin-options-icon"><i class="crm-i {$row.icon}" aria-hidden="true"></i></td> {/if} - {if !empty($showComponent)} + {if $showComponent} <td class="crm-admin-options-component_name">{$row.component_name}</td> {/if} - <td class="crm-admin-options-label crm-editable" data-field="label" {if !empty($row.color)}style="background-color: {$row.color}; color: {$row.color|colorContrast};"{/if}> - {if !empty($row.label)}{$row.label}{/if} + <td class="crm-admin-options-label crm-editable" data-field="label" {if $row.color}style="background-color: {$row.color}; color: {$row.color|colorContrast};"{/if}> + {$row.label} </td> {if $gName eq "case_status"} <td class="crm-admin-options-grouping">{$row.grouping}</td> {/if} - <td class="crm-admin-options-value">{if isset($row.value)}{$row.value}{/if}</td> + <td class="crm-admin-options-value">{$row.value}</td> {if $gName eq "payment_instrument"} <td>{$row.financial_account}</td> {/if} - {if !empty($showCounted)} + {if $showCounted} <td class="center crm-admin-options-filter">{icon condition=$row.filter}{ts}Counted{/ts}{/icon}</td> {/if} - {if !empty($showVisibility)}<td class="crm-admin-visibility_label">{$row.visibility_label}</td>{/if} - <td class="crm-admin-options-description crm-editable" data-field="description" data-type="textarea">{if isset($row.description)}{$row.description}{/if}</td> - <td class="nowrap crm-admin-options-order">{if isset($row.weight)}{$row.weight}{/if}</td> - {if !empty($showIsDefault)} - <td class="crm-admin-options-is_default" align="center">{if !empty($row.is_default)}{icon}{ts}Default{/ts}{/icon}{/if} </td> + <td class="crm-admin-options-description crm-editable" data-field="description" data-type="textarea">{$row.description}</td> + <td class="nowrap crm-admin-options-order">{if $row.weight}{$row.weight}{/if}</td> + {if $showIsDefault} + <td class="crm-admin-options-is_default" align="center">{if $row.is_default}{icon}{ts}Default{/ts}{/icon}{/if} </td> {/if} <td class="crm-admin-options-is_reserved">{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-admin-options-is_active" id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> @@ -156,8 +154,8 @@ </div> {/if} <div class="action-link"> - {if !isset($isLocked) || $isLocked ne 1} - {crmButton p="civicrm/admin/options/$gName" q='action=add&reset=1' class="new-option" icon="plus-circle"}{if !isset($gLabel)}{ts}Add Option{/ts}{else}{ts 1=$gLabel}Add %1{/ts}{/if}{/crmButton} + {if $isLocked ne 1} + {crmButton p="civicrm/admin/options/$gName" q='action=add&reset=1' class="new-option" icon="plus-circle"}{if !$gLabel}{ts}Add Option{/ts}{else}{ts 1=$gLabel}Add %1{/ts}{/if}{/crmButton} {/if} {crmButton p="civicrm/admin/options" q="action=browse&reset=1" class="cancel" icon="check"}{ts}Done{/ts}{/crmButton} </div> diff --git a/civicrm/templates/CRM/Campaign/Form/Selector.tpl b/civicrm/templates/CRM/Campaign/Form/Selector.tpl index 42469fac2707f873c24e679b011e82503d8e2910..0bafc8eef640e75f6903fe7ba7c9e0f6a45ffd3c 100644 --- a/civicrm/templates/CRM/Campaign/Form/Selector.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Selector.tpl @@ -16,7 +16,7 @@ <thead class="sticky"> <tr> {if !$single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} <th scope="col"></th> {foreach from=$columnHeaders item=header} diff --git a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl index d92963147b47caf52a08298902005a96a5dc5254..07e0e368037657dd0dcab9e18632df7ef64292ff 100644 --- a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl +++ b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl @@ -1,23 +1,11 @@ {* add campaigns to various components CRM-7362 *} -{if isset($campaignContext) and $campaignContext eq 'componentSearch'} - - {* add campaign in component search *} - <tr class="{$campaignTrClass}"> - {assign var=elementName value=$campaignInfo.elementName} - <td class="{$campaignTdClass}"> - {if isset($form.$elementName)} - {$form.$elementName.label} {$form.$elementName.html} - {/if} - </td> - </tr> - -{elseif $campaignInfo.showAddCampaign} +{if $campaignInfo.showAddCampaign} <tr class="{$campaignTrClass}"> <td class="label">{$form.campaign_id.label} {help id="id-campaign_id" file="CRM/Campaign/Form/addCampaignToComponent.hlp"}</td> <td class="view-value">{$form.campaign_id.html}</td> </tr> -{/if}{* add campaign to component search if closed. *} +{/if} diff --git a/civicrm/templates/CRM/Campaign/Form/addCampaignToSearch.tpl b/civicrm/templates/CRM/Campaign/Form/addCampaignToSearch.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2a183ef34372337070b85ce911015c45d6f12404 --- /dev/null +++ b/civicrm/templates/CRM/Campaign/Form/addCampaignToSearch.tpl @@ -0,0 +1,8 @@ +{if $campaignElementName} + {* add campaign in component search *} + <tr class="{$campaignTrClass}"> + <td class="{$campaignTdClass}"> + {$form.$campaignElementName.label} {$form.$campaignElementName.html} + </td> + </tr> +{/if} diff --git a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl index 36c5aa293b180eb13ac969caeec054a8d17808e2..2b778bbcc49471472994854a483a37a8f3a3de96 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl @@ -9,7 +9,7 @@ *} {*this template is used for activity accordion*} {assign var=caseid value=$caseID} -{if isset($isForm) and $isForm} +{if $isForm} <div class="crm-accordion-wrapper crm-case_activities-accordion crm-case-activities-block"> <div class="crm-accordion-header"> {ts}Activities{/ts} @@ -104,7 +104,7 @@ {/foreach} </style> -{if isset($isForm) and $isForm} +{if $isForm} </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> {/if} diff --git a/civicrm/templates/CRM/Case/Form/CaseFilter.tpl b/civicrm/templates/CRM/Case/Form/CaseFilter.tpl index 4b425c00e10e8bb768a088eeba706bf4184f41f1..c078bcee54e136c1dff29454dca56adb98a5a968 100644 --- a/civicrm/templates/CRM/Case/Form/CaseFilter.tpl +++ b/civicrm/templates/CRM/Case/Form/CaseFilter.tpl @@ -21,7 +21,7 @@ <td class="crm-contact-form-block-case_status_id crm-inline-edit-field"> {$form.case_status_id.label}<br /> {$form.case_status_id.html} </td> - {if $accessAllCases && isset($form.upcoming)} + {if $accessAllCases && $form.upcoming} <td class="crm-case-dashboard-switch-view-buttons"> <br/> {$form.upcoming.html} {$form.upcoming.label} diff --git a/civicrm/templates/CRM/Case/Form/Selector.tpl b/civicrm/templates/CRM/Case/Form/Selector.tpl index e84e64afbbfc1cc8b844cc0a0844f08a5ed62d5f..aabc90a7db602e46143792d4cf14d227e0697e97 100644 --- a/civicrm/templates/CRM/Case/Form/Selector.tpl +++ b/civicrm/templates/CRM/Case/Form/Selector.tpl @@ -13,7 +13,7 @@ <tr class="columnheader"> {if ! $single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} <th></th> diff --git a/civicrm/templates/CRM/Case/Page/DashBoard.tpl b/civicrm/templates/CRM/Case/Page/DashBoard.tpl index 08797ceb7d574dc651cf745e0c42068ab4e09f8a..5ce2cca18e6fff09b027f63ec9864f27447a51f9 100644 --- a/civicrm/templates/CRM/Case/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Case/Page/DashBoard.tpl @@ -56,7 +56,7 @@ {foreach from=$casesSummary.headers item=header} {assign var="caseStatus" value=$header.status} <td class="label"> - {if isset($row.$caseStatus)} + {if is_array($row.$caseStatus)} <a class="crm-case-summary-drilldown" href="{$row.$caseStatus.url}">{$row.$caseStatus.count}</a> {else} 0 diff --git a/civicrm/templates/CRM/Contact/Form/Contact.tpl b/civicrm/templates/CRM/Contact/Form/Contact.tpl index 336eb5190e258b5f272731a7f3d0c11597bccaef..fe56d71bb914e52245a90c7bc195f2de04838b45 100644 --- a/civicrm/templates/CRM/Contact/Form/Contact.tpl +++ b/civicrm/templates/CRM/Contact/Form/Contact.tpl @@ -185,7 +185,7 @@ subTypeValues = null; } else if (!subTypeValues) { - subTypeValues = {/literal}{if isset($paramSubType)}"{$paramSubType}"{else}""{/if}{literal}; + subTypeValues = {/literal}"{$paramSubType}"{literal}; } function loadNextRecord(i, groupValue, groupCount) { if (i < groupCount) { diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl index 3c4fc4df1c5d222b48a0773d90228a2cd0eb8975..ebb535da76fc61c324b6b998c1d7cea3cedc4c34 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl @@ -22,7 +22,7 @@ <div id="Address_Block_{$blockId}" {if $className eq 'CRM_Contact_Form_Contact'} class="boxBlock crm-edit-address-block crm-address_{$blockId}"{/if}> {if $blockId gt 1}<fieldset><legend>{ts}Supplemental Address{/ts}</legend>{/if} <table class="form-layout-compressed crm-edit-address-form"> - {if isset($masterAddress) && $masterAddress.$blockId gt 0 } + {if $masterAddress && $masterAddress.$blockId gt 0 } <tr><td><div class="message status">{icon icon="fa-info-circle"}{/icon} {ts 1=$masterAddress.$blockId}This address is shared with %1 contact record(s). Modifying this address will automatically update the shared address for these contacts.{/ts}</div></td></tr> {/if} diff --git a/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl b/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl index 7c8beed8ebccdb9fae9de9faebc712d6d132858a..98c49144d49ff5db8217837d769749ba5f6e191a 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl @@ -23,7 +23,8 @@ {$cd_edit.title} </div> <div id="customData{$group_id}" class="crm-accordion-body"> - {include file="CRM/Custom/Form/CustomData.tpl" formEdit=true} + {include file="CRM/Custom/Form/Edit/CustomData.tpl" customDataEntity=''} + {include file="CRM/Form/attachmentjs.tpl"} </div> <!-- crm-accordion-body--> </div> diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl index 4c4988f17effb22d9c6da9723670ae603104f743..b84017515550839f1eae372bc942593aa90fd42e 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl @@ -26,7 +26,7 @@ <tr id="Email_Block_{$blockId}"> <td>{$form.email.$blockId.email.html|crmAddClass:email} {$form.email.$blockId.location_type_id.html} - {if $className eq 'CRM_Contact_Form_Contact' and !empty($form.email.$blockId.signature_html.html)} + {if $isAddSignatureFields} <div class="clear"></div> <div class="email-signature crm-collapsible collapsed"> <div class="collapsible-title"> diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl index ed18ebcd9e628cf0c8203258f2e4ae0cb2714dea..24f529edb39bc07cf6ba83b8a213f327e5138399 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl @@ -16,7 +16,7 @@ {$form.prefix_id.html} </td> {/if} - {if !empty($form.formal_title)} + {if $form.formal_title} <td> {$form.formal_title.label}<br/> {$form.formal_title.html} diff --git a/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl b/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl index deb5e374c5ee3584d8b1e7417651cf91d9ae3ccd..211a07897150e208adf380ea18e4e616ebca0af7 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl @@ -12,37 +12,35 @@ <div class="crm-accordion-header">{$title}</div> <div class="crm-accordion-body" id="tagGroup"> {/if} - <table class="form-layout-compressed{if isset($context) && $context EQ 'profile'} crm-profile-tagsandgroups{/if}"> + <table class="form-layout-compressed{if $context EQ 'profile'} crm-profile-tagsandgroups{/if}"> <tr> - {if empty($type) || $type eq 'tag'} + {if $form.tag} <td> <div class="crm-section tag-section"> {if !empty($title)}{$form.tag.label}<br>{/if} {$form.tag.html} </div> - {if !isset($context) || $context NEQ 'profile'} + {if $context NEQ 'profile'} {include file="CRM/common/Tagset.tpl"} {/if} </td> {/if} - {if empty($type) || $type eq 'group'} + {if $form.group} <td> - {if isset($groupElementType) && $groupElementType eq 'select'} + {if $groupElementType eq 'select'} <div class="crm-section group-section"> - {if !empty($title)}{$form.group.label}<br>{/if} + {if $title}{$form.group.label}<br>{/if} {$form.group.html} </div> {else} - {if isset($form.group)} - {foreach key=key item=item from=$tagGroup.group} - <div class="group-wrapper"> - {$form.group.$key.html} - {if $item.description} - <div class="description">{$item.description}</div> - {/if} - </div> - {/foreach} - {/if} + {foreach key=key item=item from=$tagGroup.group} + <div class="group-wrapper"> + {$form.group.$key.html} + {if $item.description} + <div class="description">{$item.description}</div> + {/if} + </div> + {/foreach} {/if} </td> {/if} diff --git a/civicrm/templates/CRM/Contact/Form/Selector.tpl b/civicrm/templates/CRM/Contact/Form/Selector.tpl index 68b9fcd39d5ed35f956316ff7e49805f15e3d133..697af67f615f0cb9d843db01227fddf5374a4bd3 100644 --- a/civicrm/templates/CRM/Contact/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contact/Form/Selector.tpl @@ -15,7 +15,7 @@ <table summary="{ts}Search results listings.{/ts}" class="selector row-highlight"> <thead class="sticky"> <tr> - <th scope="col" title="Select All Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {if $context eq 'smog'} <th scope="col"> {ts}Status{/ts} diff --git a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl index 9ec25937a32130fddcdfb8e69ef579ac89596828..5009af8a195864f0a7d63f91d6995ab94a5a49a0 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl @@ -83,7 +83,7 @@ </tr> { /if} - {if isset($form.disableUSPS)} + {if $form.disableUSPS} <tr class="crm-import-datasource-form-block-disableUSPS"> <td class="label"></td> <td>{$form.disableUSPS.html} <label for="disableUSPS">{$form.disableUSPS.label}</label></td> diff --git a/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl b/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl index c7f0ea7804a15ee728e56a338a7b1acd25378a08..4175b3fd05cd271791423ee5725846dccfd30ec0 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl @@ -55,7 +55,7 @@ </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> <div> - Show / Hide columns: + {ts}Show / Hide columns:{/ts} <input type='checkbox' id='steet-address' class='toggle-vis' data-column-main="7" data-column-dupe="8" > <label for="steet-address">{ts}Street Address{/ts} </label> <input type='checkbox' id='post-code' class='toggle-vis' data-column-main="9" data-column-dupe="10" > diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl index 8861f0ba0f3c5c593d5a2ec838e38fd62d7820d5..453d330884f9e6ef5908d0965707670ee8c7507c 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl @@ -38,7 +38,7 @@ {if !empty($sharedAddresses.$locationIndex.shared_address_display.name)} <strong>{ts 1=$sharedAddresses.$locationIndex.shared_address_display.name}Address belongs to %1{/ts}</strong><br /> {/if} - {$add.display|nl2br} + {$add.display|smarty:nodefaults|purify|nl2br} </div> </div> diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Basic.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Basic.tpl index 3b0bca9ee8cfbb728f3b59aaec6d9b9bf836f212..41e5f309f616a9cf59ad8004c70be1ab10c5b25c 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Basic.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Basic.tpl @@ -5,30 +5,28 @@ title="{ts}Edit Tags{/ts}">{ts}Tags{/ts}</a> </div> <div class="crm-content" id="tags"> - {if !empty($contactTag)} {foreach from=$contactTag item=tagName key=tagId} <span class="crm-tag-item" {if !empty($allTags.$tagId.color)}style="background-color: {$allTags.$tagId.color}; color: {$allTags.$tagId.color|colorContrast};"{/if} title="{$allTags.$tagId.description|escape}"> {$tagName} </span> {/foreach} - {/if} </div> </div> <div class="crm-summary-row"> <div class="crm-label">{ts}Contact Type{/ts}</div> <div class="crm-content crm-contact_type_label"> - {if isset($contact_type_label)}{$contact_type_label}{/if} + {$contact_type_label} </div> </div> <div class="crm-summary-row"> <div class="crm-label"> - {ts}Contact ID{/ts}{if !empty($userRecordUrl)} / {ts}User ID{/ts}{/if} + {ts}Contact ID{/ts}{if $userRecordUrl} / {ts}User ID{/ts}{/if} </div> <div class="crm-content"> <span class="crm-contact-contact_id">{$contactId}</span> - {if !empty($userRecordUrl)} + {if $userRecordUrl} <span class="crm-contact-user_record_id"> - / <a title="View user record" class="user-record-link" + / <a title="{ts}View user record{/ts}" class="user-record-link" href="{$userRecordUrl}">{$userRecordId}</a> </span> {/if} @@ -37,7 +35,7 @@ <div class="crm-summary-row"> <div class="crm-label">{ts}External ID{/ts}</div> <div class="crm-content crm-contact_external_identifier_label"> - {if isset($external_identifier)}{$external_identifier}{/if} + {$external_identifier} </div> </div> </div> diff --git a/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl b/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl index 22fa7db8100358e66ded023345de320bc2b22e3a..62585ae567a9ca3c6550a72c354d90bfa6186337 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl @@ -44,7 +44,7 @@ {$preferred_mail_format} </div> </div> - {if isset($communication_style_display)} + {if $communication_style_display} <div class="crm-summary-row"> <div class="crm-label">{ts}Communication Style{/ts}</div> <div class="crm-content crm-contact-communication_style_display"> diff --git a/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl b/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl index 92ca7fe9fe0356e018d5c36a608dda6c49caf51d..e6f23db3399b1ae5a0ce84121095041785d9b9b0 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl @@ -27,27 +27,27 @@ </div> <div class="crm-summary-row"> <div class="crm-label">{ts}Job Title{/ts}</div> - <div class="crm-content crm-contact-job_title">{if isset($job_title)}{$job_title}{/if}</div> + <div class="crm-content crm-contact-job_title">{$job_title}</div> </div> {/if} <div class="crm-summary-row"> <div class="crm-label">{ts}Nickname{/ts}</div> - <div class="crm-content crm-contact-nick_name">{if isset($nick_name)}{$nick_name}{/if}</div> + <div class="crm-content crm-contact-nick_name">{$nick_name}</div> </div> {if $contact_type eq 'Organization'} <div class="crm-summary-row"> <div class="crm-label">{ts}Legal Name{/ts}</div> - <div class="crm-content crm-contact-legal_name">{if isset($legal_name)}{$legal_name}{/if}</div> + <div class="crm-content crm-contact-legal_name">{$legal_name}</div> </div> <div class="crm-summary-row"> <div class="crm-label">{ts}SIC Code{/ts}</div> - <div class="crm-content crm-contact-sic_code">{if isset($sic_code)}{$sic_code}{/if}</div> + <div class="crm-content crm-contact-sic_code">{$sic_code}</div> </div> {/if} <div class="crm-summary-row"> <div class="crm-label">{ts}Source{/ts}</div> - <div class="crm-content crm-contact_source">{if isset($source)}{$source}{/if}</div> + <div class="crm-content crm-contact_source">{$source}</div> </div> </div> diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl index e7e2ce5526b39eaf5c12a0fb88f46b021f6edb3c..323d91fea82e426992f5199486d674255b0727c9 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl @@ -16,14 +16,14 @@ {/if} <div class="crm-summary-row"> <div class="crm-label">{ts}Gender{/ts}</div> - <div class="crm-content crm-contact-gender_display">{if !empty($gender_display)}{$gender_display}{/if}</div> + <div class="crm-content crm-contact-gender_display">{$gender_display}</div> </div> <div class="crm-summary-row"> <div class="crm-label">{ts}Date of Birth{/ts}</div> <div class="crm-content crm-contact-birth_date_display"> {assign var="date_format" value=$fields.birth_date.smarty_view_format} - {if !empty($birth_date)} + {if $birth_date} {$birth_date|crmDate:$date_format} {/if} </div> @@ -35,7 +35,7 @@ <div class="crm-content crm-contact-deceased_date_display"> {assign var="date_format" value = $fields.birth_date.smarty_view_format} {$deceased_date|crmDate:$date_format} - {if !empty($birth_date)}({ts}Age{/ts} {if !empty($age.y)}{ts count=$age.y plural='%count years'}%count year{/ts}{elseif !empty($age.m)}{ts count=$age.m plural='%count months'}%count month{/ts}{/if}){/if} + {if $birth_date}({ts}Age{/ts} {if $age.y}{ts count=$age.y plural='%count years'}%count year{/ts}{elseif $age.m}{ts count=$age.m plural='%count months'}%count month{/ts}{/if}){/if} </div> </div> {else} @@ -47,7 +47,7 @@ {else} <div class="crm-summary-row"> <div class="crm-label">{ts}Age{/ts}</div> - <div class="crm-content crm-contact-age_display">{if !empty($age.y)}{ts count=$age.y plural='%count years'}%count year{/ts}{elseif !empty($age.m)}{ts count=$age.m plural='%count months'}%count month{/ts}{/if}</div> + <div class="crm-content crm-contact-age_display">{if $age.y}{ts count=$age.y plural='%count years'}%count year{/ts}{elseif $age.m}{ts count=$age.m plural='%count months'}%count month{/ts}{/if}</div> </div> {/if} </div> diff --git a/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl b/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl index 663b4aa7e0bf724d68857e8479bb4d5e56ff674e..390ad5b45b78deb804e7b001f98214fafb1cdb25 100644 --- a/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl @@ -8,11 +8,7 @@ +--------------------------------------------------------------------+ *} {* entity selector *} -{crmRegion name="crm-contact-relationshipselector-pre"} -{/crmRegion} -{if !isset($entityInClassFormat)} - {assign var="entityInClassFormat" value="relationship"} -{/if} +{crmRegion name="crm-contact-relationshipselector-pre"}{/crmRegion} <div class="crm-contact-{$entityInClassFormat}-{$context}"> <table class="crm-contact-{$entityInClassFormat}-selector-{$context} crm-ajax-table" diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl index 67cf851f3eb7546cb228f43e8e0f78624c7c009b..74410b2534667997dfcc37ee6429be476e275eaf 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl @@ -9,9 +9,9 @@ *} {* Summary tab from Contact Summary screen *} -{if (isset($hookContentPlacement) and ($hookContentPlacement neq 3)) or empty($hookContentPlacement)} +{if $hookContentPlacement !== 3} - {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 2} + {if $hookContent && $hookContentPlacement eq 2} {include file="CRM/Contact/Page/View/SummaryHook.tpl"} {/if} @@ -27,12 +27,12 @@ </div> <div class="contactCardRight"> {crmRegion name="contact-basic-info-right"} - {if !empty($imageURL)} + {if $imageURL} <div id="crm-contact-thumbnail"> {include file="CRM/Contact/Page/ContactImage.tpl"} </div> {/if} - <div class="{if !empty($imageURL)} float-left{/if}"> + <div class="{if $imageURL} float-left{/if}"> <div class="crm-summary-basic-block crm-summary-block"> {include file="CRM/Contact/Page/Inline/Basic.tpl"} </div> @@ -148,7 +148,7 @@ </div> {/if} - {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 1} + {if $hookContent && $hookContentPlacement eq 1} {include file="CRM/Contact/Page/View/SummaryHook.tpl"} {/if} {else} diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl index 992ef9e2dbc03289103217e05f94b923ab139fc3..f6eb81a871cca0f3d254e4abede61f8afa8e5b65 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl @@ -26,7 +26,7 @@ {if !empty($searchKey)} {assign var='urlParams' value=$urlParams|cat:"&key=$searchKey"} {/if} - {if !empty($context)} + {if $context} {assign var='urlParams' value=$urlParams|cat:"&context=$context"} {/if} @@ -93,7 +93,7 @@ {/if} {/if} - {if !empty($groupOrganizationUrl)} + {if $groupOrganizationUrl} <li class="crm-contact-associated-groups"> {crmButton href=$groupOrganizationUrl class="associated-groups" icon="cubes"} {ts}Associated Multi-Org Group{/ts} @@ -110,11 +110,11 @@ <div id="mainTabContainer"> <ul class="crm-contact-tabs-list"> {foreach from=$allTabs item=tabValue} - <li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all{if isset($tabValue.count)} crm-count-{$tabValue.count}{/if}{if isset($tabValue.class)} {$tabValue.class}{/if}"> - <a href="{if !empty($tabValue.template)}#contact-{$tabValue.id}{else}{$tabValue.url}{/if}" title="{$tabValue.title|escape}"> + <li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all{if is_numeric($tabValue.count)} crm-count-{$tabValue.count}{/if}{if $tabValue.class} {$tabValue.class}{/if}"> + <a href="{if $tabValue.template}#contact-{$tabValue.id}{else}{$tabValue.url}{/if}" title="{$tabValue.title|escape}"> <i class="{if !empty($tabValue.icon)}{$tabValue.icon}{else}crm-i fa-puzzle-piece{/if}" aria-hidden="true"></i> <span>{$tabValue.title}</span> - {if empty($tabValue.hideCount)}<em>{if isset($tabValue.count)}{$tabValue.count}{/if}</em>{/if} + {if empty($tabValue.hideCount)}<em>{if is_numeric($tabValue.count)}{$tabValue.count}{/if}</em>{/if} </a> </li> {/foreach} diff --git a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl index 5192a1b2be89186b1518ce64071d2ec9aec64db3..de06ea2039a4370f7e8f2f8f5c816a99f2b7a9f3 100644 --- a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl @@ -21,7 +21,7 @@ {/if} {foreach from=$dashboardElements item=element} - <tr{if isset($element.class)} class="{$element.class}"{/if}> + <tr{if $element.class} class="{$element.class}"{/if}> <td> <div class="header-dark">{$element.sectionTitle}</div> {include file=$element.templatePath context="user"} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl index 78b154da7e5cfe9caa5934e73a5c0397ef997cb4..970eb4d6cd52762bd2c4eaba88cd3ef54fd37273 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl @@ -7,7 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if isset($subscriptionType) && $subscriptionType eq 'cancel'} +{if $subscriptionType eq 'cancel'} <?xml version="1.0" encoding="utf-8"?> <ARBCancelSubscriptionRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> <merchantAuthentication> @@ -16,7 +16,7 @@ </merchantAuthentication> <subscriptionId>{$subscriptionId}</subscriptionId> </ARBCancelSubscriptionRequest> -{elseif isset($subscriptionType) && $subscriptionType eq 'updateBilling'} +{elseif $subscriptionType eq 'updateBilling'} <?xml version="1.0" encoding="utf-8"?> <ARBUpdateSubscriptionRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> <merchantAuthentication> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl index 38cc30f0aea9cd0d6a66fd17757e67c9bafd5d8f..7e0bfbe6bae5e653e7056beb15887feaa2ae7002 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl @@ -123,11 +123,11 @@ {if $frequency_unit eq 'day'} <p><strong>{ts}I want to contribute this amount every day.{/ts}</strong></p> {elseif $frequency_unit eq 'week'} - <p><strong>{ts}I want to contribute this amount processed every week.{/ts}</strong></p> + <p><strong>{ts}I want to contribute this amount every week.{/ts}</strong></p> {elseif $frequency_unit eq 'month'} - <p><strong>{ts}I want to contribute this amount processed every month.{/ts}</strong></p> + <p><strong>{ts}I want to contribute this amount every month.{/ts}</strong></p> {elseif $frequency_unit eq 'year'} - <p><strong>{ts}I want to contribute this amount processed every year.{/ts}</strong></p> + <p><strong>{ts}I want to contribute this amount every year.{/ts}</strong></p> {/if} {/if} {/if} diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl index 9c2cbfa2413b23c8b5b0886584991c0ae442a74d..bb43d307fe47a7791493754ae83d7143ebda4ded 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl @@ -291,7 +291,7 @@ if ( !priceSetID ) { cj('#priceSet').hide(); if (CRM.memberPriceset) { - cj(".crm-contribution-contributionpage-amount-form-block-amount_block_is_active td").html('<span class="description">{/literal}{ts}You cannot enable the Contribution Amounts section when a Membership Price Set is in use. (See the Memberships tab above.) Membership Price Sets may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription) or an additional voluntary contribution.</span>{/ts}{literal}'); + cj(".crm-contribution-contributionpage-amount-form-block-amount_block_is_active td").html('<span class="description">{/literal}{ts escape="js"}You cannot enable the Contribution Amounts section when a Membership Price Set is in use. (See the Memberships tab above.) Membership Price Sets may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription) or an additional voluntary contribution.{/ts}{literal}</span>'); } } cj('#amountFields').hide(); diff --git a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl index 99aa39bee9395474497ea0244ee61adb7ece4bce..c585ac38dea73d59792d56a97c6b73b40759d1f2 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl @@ -172,7 +172,7 @@ </tr> {* campaign in contribution search *} -{include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignContext="componentSearch" +{include file="CRM/Campaign/Form/addCampaignToSearch.tpl" campaignTrClass='' campaignTdClass=''} {* contribution recurring search *} diff --git a/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl b/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl index 1a13c64abb52b06a90a18235e4562898db3ce782..ae2d9650acfc5e3c99caf0d4d8e3edadd740ea0a 100644 --- a/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl @@ -30,8 +30,8 @@ </tr> {* campaign in contribution page search *} - {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" - campaignContext="componentSearch" campaignTrClass='' campaignTdClass=''} + {include file="CRM/Campaign/Form/addCampaignToSearch.tpl" + campaignTrClass='' campaignTdClass=''} </table> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl"}</div> diff --git a/civicrm/templates/CRM/Contribute/Form/Selector.tpl b/civicrm/templates/CRM/Contribute/Form/Selector.tpl index 5443e1f7408708d3cbe2bbd577f94438e43e3213..d5d39808d54df31b5982e66462c89a727767189a 100644 --- a/civicrm/templates/CRM/Contribute/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Selector.tpl @@ -15,14 +15,14 @@ <thead class="sticky"> <tr> {if !$single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {if !$single} <th scope="col"></th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> - {if isset($header.sort)} + {if $header.sort} {assign var='key' value=$header.sort} {$sort->_response.$key.link} {elseif (!empty($header.name))} @@ -57,12 +57,12 @@ </td> {foreach from=$columnHeaders item=column} {assign var='columnName' value=''} - {if isset($column.field_name)} + {if $column.field_name} {assign var='columnName' value=$column.field_name} {/if} {if !$columnName}{* if field_name has not been set skip, this helps with not changing anything not specifically edited *} {elseif $columnName === 'total_amount'}{* rendered above as soft credit columns = confusing *} - {elseif isset($column.type) && $column.type === 'actions'}{* rendered below as soft credit column handling = not fixed *} + {elseif $column.type === 'actions'}{* rendered below as soft credit column handling = not fixed *} {elseif $columnName == 'contribution_status'} <td class="crm-contribution-status"> {$row.contribution_status}<br/> @@ -71,13 +71,13 @@ {/if} </td> {else} - {if isset($column.type) && $column.type == 'date'} + {if $column.type == 'date'} <td class="crm-contribution-{$columnName}"> {$row.$columnName|crmDate} </td> {else} - <td class="crm-{$columnName} crm-{$columnName}_{if isset($row.columnName)}{$row.columnName}{/if}"> - {if isset($row.$columnName)}{$row.$columnName}{/if} + <td class="crm-{$columnName} crm-{$columnName}_{if $row.columnName}{$row.columnName}{/if}"> + {$row.$columnName} </td> {/if} {/if} diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl index 0a105df7774bfc20ad0aee34c2c11f0e1d275adc..f95aa06c10b38da7b8e2b705b22975f0a3b1eeaa 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl @@ -29,11 +29,11 @@ <th class="right"> {ts}# Completed{/ts} – {$contributionSummary.total.count}</th> <th class="right contriTotalRight"> {ts}Avg{/ts} – {$contributionSummary.total.avg}</th> {/if} - {if isset($contributionSummary.cancel.amount)} + {if $contributionSummary.cancel.amount} <th class="disabled right contriTotalRight"> {ts}Cancelled/Refunded{/ts} – {$contributionSummary.cancel.amount}</th> {/if} </tr> - {if isset($contributionSummary.soft_credit.count)} + {if $contributionSummary.soft_credit.count} {include file="CRM/Contribute/Page/ContributionSoftTotals.tpl" softCreditTotals=$contributionSummary.soft_credit} {/if} {/if} diff --git a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl index 5dfc47df28424403b45860002225461021c2a4a4..b89564b9b2cf2b5668c21b815240fb3b1580ed64 100644 --- a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl @@ -13,24 +13,24 @@ <tr class="columnheader-dark"> <th scope="col">{ts}Period{/ts}</th> <th scope="col">{ts}Total Amount{/ts}</th> - <th scope="col" title="Contribution Count"><strong>#</strong></th><th></th></tr> + <th scope="col" title="{ts}Contribution Count{/ts}"><strong>#</strong></th><th></th></tr> <tr> <td><strong>{ts}Current Month-To-Date{/ts}</strong></td> <td class="label">{if NOT $monthToDate.Valid.amount}{ts}(n/a){/ts}{else}{$monthToDate.Valid.amount}{/if}</td> <td class="label">{$monthToDate.Valid.count}</td> - <td><a href="{$monthToDate.Valid.url}">{ts}view details{/ts}...</a></td> + <td><a href="{$monthToDate.Valid.url}">{ts}View details{/ts}...</a></td> </tr> <tr> <td><strong>{ts}Current Fiscal Year-To-Date{/ts}</strong></td> <td class="label">{if NOT $yearToDate.Valid.amount}{ts}(n/a){/ts}{else}{$yearToDate.Valid.amount}{/if}</td> <td class="label">{$yearToDate.Valid.count}</td> - <td><a href="{$yearToDate.Valid.url}">{ts}view details{/ts}...</a></td> + <td><a href="{$yearToDate.Valid.url}">{ts}View details{/ts}...</a></td> </tr> <tr> <td><strong>{ts}Cumulative{/ts}</strong><br />{ts}(since inception){/ts}</td> <td class="label">{if NOT $startToDate.Valid.amount}{ts}(n/a){/ts}{else}{$startToDate.Valid.amount}{/if}</td> <td class="label">{$startToDate.Valid.count}</td> - <td><a href="{$startToDate.Valid.url}">{ts}view details{/ts}...</a></td> + <td><a href="{$startToDate.Valid.url}">{ts}View details{/ts}...</a></td> </tr> </table> {elseif $buildChart} diff --git a/civicrm/templates/CRM/Custom/Form/CustomData.tpl b/civicrm/templates/CRM/Custom/Form/CustomData.tpl index 1464225f445956e74823260e186e70e03a40a6fd..9a89e00fe8f0482c4ed079455ead6b840914f841 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Custom/Form/CustomData.tpl @@ -8,10 +8,7 @@ +--------------------------------------------------------------------+ *} {* Custom Data form*} -{if !empty($formEdit)} - {include file="CRM/Custom/Form/Edit/CustomData.tpl" customDataEntity=''} -{else} - {foreach from=$groupTree item=cd_edit key=group_id name=custom_sets} +{foreach from=$groupTree item=cd_edit key=group_id name=custom_sets} {if $cd_edit.is_multiple and $multiRecordDisplay eq 'single'} {assign var="isSingleRecordEdit" value=TRUE} {else} @@ -34,13 +31,11 @@ </div> </div> {/if} - {if isset($cgCount)} + {if $cgCount} <div id="custom_group_{$group_id}_{$cgCount}"></div> {else} <div id="custom_group_{$group_id}"></div> {/if} {/foreach} -{/if} - {include file="CRM/Form/attachmentjs.tpl"} diff --git a/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl b/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl index 7acd1de052d269998920def6a4f3dc28d0559827..119e8bbdabd8dcbc2e37ea045bf5bd47ae7fc220 100644 --- a/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl +++ b/civicrm/templates/CRM/Custom/Form/Edit/CustomField.tpl @@ -8,16 +8,16 @@ +--------------------------------------------------------------------+ *} -{if !empty($element.help_pre)} +{if $element.help_pre} <tr class="custom_field-help-pre-row {$element.element_name}-row-help-pre"> <td> </td> <td class="html-adjust description">{$element.help_pre}</td> </tr> {/if} -{if isset($element.options_per_line) and $element.options_per_line != 0 } +{if $element.options_per_line} <tr class="custom_field-row {$element.element_name}-row"> <td - class="label">{$formElement.label}{if !empty($element.help_post)}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if}</td> + class="label">{$formElement.label}{if $element.help_post}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if}</td> <td class="html-adjust"> {assign var="count" value="1"} <table class="form-layout-compressed" style="margin-top: -0.5em;"> @@ -45,7 +45,7 @@ {else} <tr class="custom_field-row {$element.element_name}-row"> <td class="label">{$formElement.label} - {if !empty($element.help_post)}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if} + {if $element.help_post}{help id=$element.id file="CRM/Custom/Form/CustomField.hlp" title=$element.label}{/if} </td> <td class="html-adjust"> {$formElement.html} diff --git a/civicrm/templates/CRM/Custom/Form/Field.tpl b/civicrm/templates/CRM/Custom/Form/Field.tpl index df8cd053a58807f78a2d81afbc776df441b59826..2045c371ba249456b8739c2071313745526cac75 100644 --- a/civicrm/templates/CRM/Custom/Form/Field.tpl +++ b/civicrm/templates/CRM/Custom/Form/Field.tpl @@ -105,12 +105,12 @@ </td> </tr> <tr class="crm-custom-field-form-block-default_value" id="hideDefault" {if $action eq 2 && ($form.data_type.value.0.0 < 4 && $form.data_type.value.1.0 NEQ 'Text')}class="hiddenElement"{/if}> - <td title="hideDefaultValTxt" class="label">{$form.default_value.label}</td> - <td title="hideDefaultValDef" class="html-adjust">{$form.default_value.html}</td> + <td class="label">{$form.default_value.label}</td> + <td class="html-adjust">{$form.default_value.html}</td> </tr> <tr class="crm-custom-field-form-block-description" id="hideDesc" {if $action neq 4 && $action eq 2 && ($form.data_type.value.0.0 < 4 && $form.data_type.value.1.0 NEQ 'Text')}class="hiddenElement"{/if}> - <td title="hideDescTxt" class="label"> </td> - <td title="hideDescDef" class="html-adjust"><span class="description">{ts}If you want to provide a default value for this field, enter it here. For date fields, format is YYYY-MM-DD.{/ts}</span></td> + <td class="label"> </td> + <td class="html-adjust"><span class="description">{ts}If you want to provide a default value for this field, enter it here. For date fields, format is YYYY-MM-DD.{/ts}</span></td> </tr> <tr class="crm-custom-field-form-block-help_pre"> <td class="label">{$form.help_pre.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_custom_field' field='help_pre' id=$id}{/if}</td> diff --git a/civicrm/templates/CRM/Dashlet/Page/Blog.tpl b/civicrm/templates/CRM/Dashlet/Page/Blog.tpl index be40890a773f602767492aa060b32652fd824901..00d6ce4633547f92cf70ec057f5cade368c2b5d7 100644 --- a/civicrm/templates/CRM/Dashlet/Page/Blog.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/Blog.tpl @@ -47,12 +47,12 @@ {foreach from=$channel.items item=article} <div class="crm-accordion-wrapper collapsed"> <div class="crm-accordion-header"> - <span class="crm-news-feed-item-title">{$article.title}</span> - <span class="crm-news-feed-item-preview"> - {if function_exists('mb_substr')}{$article.description|strip_tags|mb_substr:0:150}{else}{$article.description|strip_tags}{/if}</span> + <span class="crm-news-feed-item-title">{$article.title|smarty:nodefaults|purify}</span> + <span class="crm-news-feed-item-preview"> - {if function_exists('mb_substr')}{$article.description|smarty:nodefaults|strip_tags|mb_substr:0:150}{else}{$article.description|smarty:nodefaults|strip_tags}{/if}</span> </div> <div class="crm-accordion-body"> - <div>{$article.description}</div> - <p class="crm-news-feed-item-link"><a target="_blank" href="{$article.link}" title="{$article.title|escape}"><i class="crm-i fa-external-link" aria-hidden="true"></i> {ts}read more{/ts}…</a></p> + <div>{$article.description|smarty:nodefaults|purify}</div> + <p class="crm-news-feed-item-link"><a target="_blank" href="{$article.link|smarty:nodefaults|purify}" title="{$article.title|smarty:nodefaults|escape}"><i class="crm-i fa-external-link" aria-hidden="true"></i> {ts}read more{/ts}…</a></p> </div> </div> {/foreach} diff --git a/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl b/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl index ce458b61937a0f5f5b1158496d649587055d8475..3d02fb860200769353d6defd7ec6cab5de281117 100644 --- a/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl @@ -8,4 +8,4 @@ +--------------------------------------------------------------------+ *} -<div id="civicrm-getting-started">{$gettingStarted}</div> +<div id="civicrm-getting-started">{$gettingStarted|smarty:nodefaults}</div> diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl index bbaf1a0fc64af1d339080a37fdde96181dec15dc..fc7f2087b109a67bb12ee4d24772ecd42a75d195 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl @@ -78,15 +78,6 @@ CRM.$(function($) { return false; }); - // Update title dynamically - $('h1').each(function() { - var title = {/literal}{$title|json_encode}{literal}; - $(this).html($(this).html().replace(title, '<span id="crm-event-name-page-title">' + title + '</span>')); - }); - $('#crm-main-content-wrapper').on('keyup change', 'input#title', function() { - $('#crm-event-name-page-title').text($(this).val()); - }); - }); </script> {/literal} diff --git a/civicrm/templates/CRM/Event/Form/Search/Common.tpl b/civicrm/templates/CRM/Event/Form/Search/Common.tpl index 6e3c9845fea2a7d59ae4f0de033d6e8dfd97bf03..b3b7e87b95aa94da6dc839352cc0bf33e34584f4 100644 --- a/civicrm/templates/CRM/Event/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Event/Form/Search/Common.tpl @@ -52,7 +52,7 @@ </tr> {* campaign in contribution search *} -{include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignContext="componentSearch" +{include file="CRM/Campaign/Form/addCampaignToSearch.tpl" campaignTrClass='' campaignTdClass='crm-event-form-block-participant_campaign_id'} {if $participantGroupTree } diff --git a/civicrm/templates/CRM/Event/Form/SearchEvent.tpl b/civicrm/templates/CRM/Event/Form/SearchEvent.tpl index fb34c0b94f297bf734d6b5f6117ec66f0a59c245..fb278a55bebad20ae1fdf6259e430ee792f92a01 100644 --- a/civicrm/templates/CRM/Event/Form/SearchEvent.tpl +++ b/civicrm/templates/CRM/Event/Form/SearchEvent.tpl @@ -45,7 +45,7 @@ </td></tr> {* campaign in event search *} - {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignContext="componentSearch" + {include file="CRM/Campaign/Form/addCampaignToSearch.tpl" campaignTrClass='crm-event-searchevent-form-block-campaign_id' campaignTdClass=''} <td class="right">{include file="CRM/common/formButtons.tpl"}</td> </table> diff --git a/civicrm/templates/CRM/Event/Form/Selector.tpl b/civicrm/templates/CRM/Event/Form/Selector.tpl index 3505dc446ce1b708b781f111f06a68d9a6cb377e..a09a6d3567c6c9dc0f9d51d732644105bf1c40bf 100644 --- a/civicrm/templates/CRM/Event/Form/Selector.tpl +++ b/civicrm/templates/CRM/Event/Form/Selector.tpl @@ -16,7 +16,7 @@ <thead class="sticky"> <tr> {if ! $single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> diff --git a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl index 099221a5af288465bd88a18be0a10b031fb85c18..f0dbdea85c52fb52103ce8a64b9a6c312d0ecad2 100644 --- a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl +++ b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl @@ -94,14 +94,14 @@ <ul class="panel" id="panel_participants_{$row.id}"> {if $findParticipants.statusCounted} <li> - <a title="Counted" class="action-item crm-hover-button" href="{crmURL p='civicrm/event/search' + <a class="action-item crm-hover-button" href="{crmURL p='civicrm/event/search' q="reset=1&force=1&status=true&event=`$row.id`"}">{$findParticipants.statusCounted} </a> </li> {/if} {if $findParticipants.statusNotCounted} <li> - <a title="Not Counted" class="action-item crm-hover-button" + <a class="action-item crm-hover-button" href="{crmURL p='civicrm/event/search' q="reset=1&force=1&status=false&event=`$row.id`"}">{$findParticipants.statusNotCounted} </a> @@ -109,7 +109,7 @@ {/if} {if $row.participant_listing_id} <li> - <a title="Public Participant Listing" class="action-item crm-hover-button" + <a class="action-item crm-hover-button" href="{crmURL p='civicrm/event/participant' q="reset=1&id=`$row.id`" fe='true'}">{ts}Public Participant Listing{/ts} </a> diff --git a/civicrm/templates/CRM/Financial/Form/Search.tpl b/civicrm/templates/CRM/Financial/Form/Search.tpl index 7933d35978425454c012ecdf6a3bdd67adb8c3e0..5eb3c91a629977abd16ffbd88d31a1f0ccc55b3c 100644 --- a/civicrm/templates/CRM/Financial/Form/Search.tpl +++ b/civicrm/templates/CRM/Financial/Form/Search.tpl @@ -233,7 +233,7 @@ CRM.$(function($) { CRM.alert({/literal}'{ts escape="js"}An error occurred while processing your request.{/ts}', $("#batch_update option[value=" + op + "]").text() + ' {ts escape="js"}Error{/ts}'{literal}, 'error'); } }, - 'json').error(serverError); + 'json').fail(serverError); } function validateOp(records, op) { diff --git a/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl b/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl index 343659e76d94873e4693fc026736eda0c53ae8bd..9c7f8254fc5fda3f0f36c8b44b0b078b4dca8892 100644 --- a/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl +++ b/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl @@ -141,7 +141,7 @@ function saveRecord(recordID, op, recordBAO, entityID) { CRM.alert(html.status); } }, - 'json').error(noServerResponse); + 'json').fail(noServerResponse); } function batchSummary(entityID) { diff --git a/civicrm/templates/CRM/Form/attachmentjs.tpl b/civicrm/templates/CRM/Form/attachmentjs.tpl index 1734fff151fb88577067e0289bafc000313e380a..378aaf1919f49f8a04e65125176bedbc89d2bea4 100644 --- a/civicrm/templates/CRM/Form/attachmentjs.tpl +++ b/civicrm/templates/CRM/Form/attachmentjs.tpl @@ -15,7 +15,7 @@ request.done(function() { $el.trigger('crmPopupFormSuccess'); $row.remove(); - {/literal}{if isset($context) and $context EQ 'MessageTemplate'}{literal} + {/literal}{if $context EQ 'MessageTemplate'}{literal} $('#file_id').show(); {/literal}{/if}{literal} }); diff --git a/civicrm/templates/CRM/Form/body.tpl b/civicrm/templates/CRM/Form/body.tpl index a34e7a835cdadf645b078130b8c92cae01e94789..4f8e4667bf6de4a0a2496b29a5edef35fe160982 100644 --- a/civicrm/templates/CRM/Form/body.tpl +++ b/civicrm/templates/CRM/Form/body.tpl @@ -15,7 +15,7 @@ <div>{$form.hidden}</div> {/if} -{if ($snippet !== 'json') and empty($suppressForm) and count($form.errors) gt 0} +{if ($snippet !== 'json') and !$suppressForm and count($form.errors) gt 0} <div class="messages crm-error"> <i class="crm-i fa-exclamation-triangle crm-i-red" aria-hidden="true"></i> {ts}Please correct the following errors in the form fields below:{/ts} @@ -32,7 +32,7 @@ {/if} {* Add all the form elements sent in by the hook - used by civiDiscount and a few other extensions *} -{if !empty($beginHookFormElements)} +{if $beginHookFormElements} <table class="form-layout-compressed"> {foreach from=$beginHookFormElements key=dontCare item=hookFormElement} <tr><td class="label nowrap">{$form.$hookFormElement.label}</td><td>{$form.$hookFormElement.html}</td></tr> diff --git a/civicrm/templates/CRM/Form/default.tpl b/civicrm/templates/CRM/Form/default.tpl index e9068d974ffdcc9c76d9210ee9e2aab67ed2e978..ee947e9a354ede7e6ef961d1ca5dd2b645fad660 100644 --- a/civicrm/templates/CRM/Form/default.tpl +++ b/civicrm/templates/CRM/Form/default.tpl @@ -7,7 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if empty($suppressForm)} +{if !$suppressForm} <form {$form.attributes} > {crmRegion name='form-top'}{/crmRegion} {/if} @@ -18,7 +18,7 @@ {include file=$tplFile} {/crmRegion} -{if empty($suppressForm)} +{if !$suppressForm} {crmRegion name='form-bottom'}{/crmRegion} </form> {/if} diff --git a/civicrm/templates/CRM/Form/validate.tpl b/civicrm/templates/CRM/Form/validate.tpl index e1b4a39a209add079c3fd0fb3ff530bfca8ccb99..297364a9d6ec05a1fa59fab5ab51ad25c90eb8ba 100644 --- a/civicrm/templates/CRM/Form/validate.tpl +++ b/civicrm/templates/CRM/Form/validate.tpl @@ -9,7 +9,7 @@ *} {* Initialize jQuery validate on a form *} {* Extra params and functions may be added to the CRM.validate object before this template is loaded *} -{if empty($crm_form_validate_included) and ((isset($smarty.get.snippet) and $smarty.get.snippet neq 'json') or !isset($smarty.get.snippet)) and !empty($form) and !empty($form.formClass)} +{if empty($crm_form_validate_included) && ((isset($smarty.get.snippet|smarty:nodefaults) && $smarty.get.snippet neq 'json') || !isset($smarty.get.snippet|smarty:nodefaults)) && !empty($form) && !empty($form.formClass)} {assign var=crm_form_validate_included value=1} {literal} <script type="text/javascript"> diff --git a/civicrm/templates/CRM/Grant/Form/Selector.tpl b/civicrm/templates/CRM/Grant/Form/Selector.tpl index 9a3c9fc9f0a171ac2ed56ac2d62cfdfee3e8508d..c4911193eda839cd84adf9f02dba89194378aca4 100644 --- a/civicrm/templates/CRM/Grant/Form/Selector.tpl +++ b/civicrm/templates/CRM/Grant/Form/Selector.tpl @@ -16,7 +16,7 @@ <thead class="sticky"> <tr> {if ! $single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> diff --git a/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl b/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl index 2be8d82ccdab14c6e2bf62d39b28c292bce9740f..0a78e42db5e5587ce9bbe48f4605d93766c94807 100644 --- a/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl +++ b/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl @@ -8,9 +8,9 @@ +--------------------------------------------------------------------+ *} {*CRM-14190*} -{if (isset($parent_groups) and $parent_groups|@count > 0) or !empty($form.parents.html)} +{if $parent_groups|@count > 0 || !empty($form.parents.html)} <h3>{ts}Parent Groups{/ts} {help id="id-group-parent" file="CRM/Group/Page/Group.hlp"}</h3> - {if isset($parent_groups) and $parent_groups|@count > 0} + {if $parent_groups|@count > 0} <table class="form-layout-compressed"> <tr> <td><label>{ts}Remove Parent?{/ts}</label></td> diff --git a/civicrm/templates/CRM/Group/Form/Search.tpl b/civicrm/templates/CRM/Group/Form/Search.tpl index 6f24d0f67ae3cd537d0ac05083dfaccb3a575000..d87e0261f4db4089ce3a7b8598b3cf00717a36c8 100644 --- a/civicrm/templates/CRM/Group/Form/Search.tpl +++ b/civicrm/templates/CRM/Group/Form/Search.tpl @@ -136,7 +136,7 @@ d.status = groupStatus, d.savedSearch = $('.crm-group-search-form-block select#saved_search').val(), d.component_mode = $(".crm-group-search-form-block select#component_mode").val(), - d.showOrgInfo = {/literal}{if isset($showOrgInfo)}"{$showOrgInfo}"{else}"0"{/if}{literal}, + d.showOrgInfo = {/literal}{if $showOrgInfo}"{$showOrgInfo}"{else}"0"{/if}{literal}, d.parentsOnly = parentsOnly } }, @@ -186,7 +186,7 @@ // show hide children var context = $('#crm-main-content-wrapper'); $('table.crm-group-selector', context).on( 'click', 'span.show-children', function(){ - var showOrgInfo = {/literal}{if isset($showOrgInfo)}"{$showOrgInfo}"{else}"0"{/if}{literal}; + var showOrgInfo = {/literal}{if $showOrgInfo}"{$showOrgInfo}"{else}"0"{/if}{literal}; var rowID = $(this).parents('tr').prop('id'); var parentRow = rowID.split('_'); var parent_id = parentRow[1]; diff --git a/civicrm/templates/CRM/Mailing/Form/Count.tpl b/civicrm/templates/CRM/Mailing/Form/Count.tpl index 83bb7cf8789587802350aeaaa1fb3aa75e7b8000..fd2ba82f047f274c185b00f721fbedafdf77ea27 100644 --- a/civicrm/templates/CRM/Mailing/Form/Count.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Count.tpl @@ -29,7 +29,7 @@ </tbody> </table> </div> - <a href="#" id="button"title="Contacts selected in the Find Contacts page"> {ts}View Selected Contacts{/ts}</a> + <a href="#" id="button" title="{ts}Contacts selected in the Find Contacts page{/ts}"> {ts}View Selected Contacts{/ts}</a> </div> {literal} <script type="text/javascript"> diff --git a/civicrm/templates/CRM/Mailing/Form/Search.tpl b/civicrm/templates/CRM/Mailing/Form/Search.tpl index b8dd9a4cf66edec5874fb0f75b00f67794b2d222..a355ca7ed776a6dd075d7084221d73a53f6477a7 100644 --- a/civicrm/templates/CRM/Mailing/Form/Search.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Search.tpl @@ -52,8 +52,8 @@ {/if} {* campaign in mailing search *} - {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" - campaignContext="componentSearch" campaignTrClass='' campaignTdClass=''} + {include file="CRM/Campaign/Form/addCampaignToSearch.tpl" + campaignTrClass='' campaignTdClass=''} <tr> <td>{$form.buttons.html}</td><td colspan="2"></td> diff --git a/civicrm/templates/CRM/Mailing/Form/Search/Common.tpl b/civicrm/templates/CRM/Mailing/Form/Search/Common.tpl index a5de3c8f4460335b576aa5402149697d4beed2a0..8392543a39214a82d4860780373f2db93adeb9ac 100644 --- a/civicrm/templates/CRM/Mailing/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Search/Common.tpl @@ -66,7 +66,7 @@ </tr> <tr> <td>{* campaign in Advance search *} - {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignContext="componentSearch" + {include file="CRM/Campaign/Form/addCampaignToSearch.tpl" campaignTrClass='crmCampaign' campaignTdClass='crmCampaignContainer'} </td> </tr> diff --git a/civicrm/templates/CRM/Mailing/Form/Selector.tpl b/civicrm/templates/CRM/Mailing/Form/Selector.tpl index 0b148535df1dd0c10be86fc98d69afe6f9653040..a481e3f5d93e9e637ff3f48f4e2dc9b78092632c 100644 --- a/civicrm/templates/CRM/Mailing/Form/Selector.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Selector.tpl @@ -16,7 +16,7 @@ <thead class="sticky"> <tr> {if $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> diff --git a/civicrm/templates/CRM/Member/Form/Search/Common.tpl b/civicrm/templates/CRM/Member/Form/Search/Common.tpl index 87876b61ac136e0efaa0a8b7119fb10b3407b39c..f816ea63bce86c218772f3302e589509f841c4b4 100644 --- a/civicrm/templates/CRM/Member/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Member/Form/Search/Common.tpl @@ -57,7 +57,7 @@ </tr> {* campaign in membership search *} -{include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignContext="componentSearch" +{include file="CRM/Campaign/Form/addCampaignToSearch.tpl" campaignTrClass='' campaignTdClass=''} {if !empty($membershipGroupTree)} diff --git a/civicrm/templates/CRM/Member/Form/Selector.tpl b/civicrm/templates/CRM/Member/Form/Selector.tpl index 7ddcfc02a6f57ebfc55c0f3d9fd02bf7a7ba6dfb..77aa139dfa7bb51a50a9416d020ff47ab2ed0b8c 100644 --- a/civicrm/templates/CRM/Member/Form/Selector.tpl +++ b/civicrm/templates/CRM/Member/Form/Selector.tpl @@ -15,7 +15,7 @@ <table class="selector row-highlight"> <thead class="sticky"> {if ! $single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} {foreach from=$columnHeaders item=header} <th scope="col"> diff --git a/civicrm/templates/CRM/Member/Page/DashBoard.tpl b/civicrm/templates/CRM/Member/Page/DashBoard.tpl index fbdea804f7042ac5ca06afb43915c25b4df837b7..89bbe618d20693ea6fc7101fd0dbb0ae0758b78a 100644 --- a/civicrm/templates/CRM/Member/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Member/Page/DashBoard.tpl @@ -46,21 +46,21 @@ <td><strong>{$row.month.total.name}</strong></td> {if $preMonth} <td class="label crm-grid-cell"> - {if $row.premonth.new.url}<a href="{$row.premonth.new.url}" title="view details">{$row.premonth.new.count}</a> + {if $row.premonth.new.url}<a href="{$row.premonth.new.url}" title="{ts}View details{/ts}">{$row.premonth.new.count}</a> {else}{$row.premonth.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $row.premonth.renew.url}<a href="{$row.premonth.renew.url}" title="view details">{$row.premonth.renew.count}</a> + {if $row.premonth.renew.url}<a href="{$row.premonth.renew.url}" title="{ts}View details{/ts}">{$row.premonth.renew.count}</a> {else}{$row.premonth.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $row.premonth.total.url} - <a href="{$row.premonth.total.url}" title="view details">{$row.premonth.total.count}</a> + <a href="{$row.premonth.total.url}" title="{ts}View details{/ts}">{$row.premonth.total.count}</a> {else} {$row.premonth.total.count} {/if} [ {if $row.premonth_owner.premonth_owner.url} - <a href="{$row.premonth_owner.premonth_owner.url}" title="view details">{$row.premonth_owner.premonth_owner.count}</a> + <a href="{$row.premonth_owner.premonth_owner.url}" title="{ts}View details{/ts}">{$row.premonth_owner.premonth_owner.count}</a> {else} {$row.premonth_owner.premonth_owner.count} {/if}] @@ -68,42 +68,42 @@ {/if} <td class="label crm-grid-cell"> - {if $row.month.new.url}<a href="{$row.month.new.url}" title="view details">{$row.month.new.count}</a> + {if $row.month.new.url}<a href="{$row.month.new.url}" title="{ts}View details{/ts}">{$row.month.new.count}</a> {else}{$row.month.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $row.month.renew.url}<a href="{$row.month.renew.url}" title="view details">{$row.month.renew.count}</a> + {if $row.month.renew.url}<a href="{$row.month.renew.url}" title="{ts}View details{/ts}">{$row.month.renew.count}</a> {else}{$row.month.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $row.month.total.url} - <a href="{$row.month.total.url}" title="view details">{$row.month.total.count}</a> + <a href="{$row.month.total.url}" title="{ts}View details{/ts}">{$row.month.total.count}</a> {else} {$row.month.total.count} {/if} [ {if $row.month_owner.month_owner.url} - <a href="{$row.month_owner.month_owner.url}" title="view details">{$row.month_owner.month_owner.count}</a> + <a href="{$row.month_owner.month_owner.url}" title="{ts}View details{/ts}">{$row.month_owner.month_owner.count}</a> {else} {$row.month_owner.month_owner.count} {/if}] </td> <td class="label crm-grid-cell"> - {if $row.year.new.url}<a href="{$row.year.new.url}" title="view details">{$row.year.new.count}</a> + {if $row.year.new.url}<a href="{$row.year.new.url}" title="{ts}View details{/ts}">{$row.year.new.count}</a> {else}{$row.year.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $row.year.renew.url}<a href="{$row.year.renew.url}" title="view details">{$row.year.renew.count}</a> + {if $row.year.renew.url}<a href="{$row.year.renew.url}" title="{ts}View details{/ts}">{$row.year.renew.count}</a> {else}{$row.year.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $row.year.total.url} - <a href="{$row.year.total.url}" title="view details">{$row.year.total.count}</a> + <a href="{$row.year.total.url}" title="{ts}View details{/ts}">{$row.year.total.count}</a> {else} {$row.year.total.count} {/if} [ {if $row.year_owner.year_owner.url} - <a href="{$row.year_owner.year_owner.url}" title="view details">{$row.year_owner.year_owner.count}</a> + <a href="{$row.year_owner.year_owner.url}" title="{ts}View details{/ts}">{$row.year_owner.year_owner.count}</a> {else} {$row.year_owner.year_owner.count} {/if}] @@ -112,23 +112,23 @@ <td class="label crm-grid-cell"> {if $isCurrent} {if $row.current.total.url} - <a href="{$row.current.total.url}" title="view details">{$row.current.total.count}</a> + <a href="{$row.current.total.url}" title="{ts}View details{/ts}">{$row.current.total.count}</a> {else} {$row.current.total.count} {/if} [ {if $row.current_owner.current_owner.url} - <a href="{$row.current_owner.current_owner.url}" title="view details">{$row.current_owner.current_owner.count}</a> + <a href="{$row.current_owner.current_owner.url}" title="{ts}View details{/ts}">{$row.current_owner.current_owner.count}</a> {else} {$row.current_owner.current_owner.count} {/if} ] {else} {if $row.total.total.url} - <a href="{$row.total.total.url}" title="view details">{$row.total.total.count}</a> + <a href="{$row.total.total.url}" title="{ts}View details{/ts}">{$row.total.total.count}</a> {else} {$row.total.total.count} {/if} [ {if $row.total_owner.total_owner.url} - <a href="{$row.total_owner.total_owner.url}" title="view details">{$row.total_owner.total_owner.count}</a> + <a href="{$row.total_owner.total_owner.url}" title="{ts}View details{/ts}">{$row.total_owner.total_owner.count}</a> {else} {$row.total_owner.total_owner.count} {/if} ] @@ -141,21 +141,21 @@ <td><strong>{ts}Totals (all types){/ts}</strong></td> {if $preMonth} <td class="label crm-grid-cell"> - {if $totalCount.premonth.new.url}<a href="{$totalCount.premonth.new.url}" title="view details">{$totalCount.premonth.new.count}</a> + {if $totalCount.premonth.new.url}<a href="{$totalCount.premonth.new.url}" title="{ts}View details{/ts}">{$totalCount.premonth.new.count}</a> {else}{$totalCount.premonth.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $totalCount.premonth.renew.url}<a href="{$totalCount.premonth.renew.url}" title="view details">{$totalCount.premonth.renew.count}</a> + {if $totalCount.premonth.renew.url}<a href="{$totalCount.premonth.renew.url}" title="{ts}View details{/ts}">{$totalCount.premonth.renew.count}</a> {else}{$totalCount.premonth.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $totalCount.premonth.total.url} - <a href="{$totalCount.premonth.total.url}" title="view details">{$totalCount.premonth.total.count}</a> + <a href="{$totalCount.premonth.total.url}" title="{ts}View details{/ts}">{$totalCount.premonth.total.count}</a> {else} {$totalCount.premonth.total.count} {/if} [ {if $totalCount.premonth_owner.premonth_owner.url} - <a href="{$totalCount.premonth_owner.premonth_owner.url}" title="view details">{$totalCount.premonth_owner.premonth_owner.count}</a> + <a href="{$totalCount.premonth_owner.premonth_owner.url}" title="{ts}View details{/ts}">{$totalCount.premonth_owner.premonth_owner.count}</a> {else} {$totalCount.premonth_owner.premonth_owner.count} {/if}] @@ -163,42 +163,42 @@ {/if} <td class="label crm-grid-cell"> - {if $totalCount.month.new.url}<a href="{$totalCount.month.new.url}" title="view details">{$totalCount.month.new.count}</a> + {if $totalCount.month.new.url}<a href="{$totalCount.month.new.url}" title="{ts}View details{/ts}">{$totalCount.month.new.count}</a> {else}{$totalCount.month.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $totalCount.month.renew.url}<a href="{$totalCount.month.renew.url}" title="view details">{$totalCount.month.renew.count}</a> + {if $totalCount.month.renew.url}<a href="{$totalCount.month.renew.url}" title="{ts}View details{/ts}">{$totalCount.month.renew.count}</a> {else}{$totalCount.month.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $totalCount.month.total.url} - <a href="{$totalCount.month.total.url}" title="view details">{$totalCount.month.total.count}</a> + <a href="{$totalCount.month.total.url}" title="{ts}View details{/ts}">{$totalCount.month.total.count}</a> {else} {$totalCount.month.total.count} {/if} [ {if $totalCount.month_owner.month_owner.url} - <a href="{$totalCount.month_owner.month_owner.url}" title="view details">{$totalCount.month_owner.month_owner.count}</a> + <a href="{$totalCount.month_owner.month_owner.url}" title="{ts}View details{/ts}">{$totalCount.month_owner.month_owner.count}</a> {else} {$totalCount.month_owner.month_owner.count} {/if}] </td> <td class="label crm-grid-cell"> - {if $totalCount.year.new.url}<a href="{$totalCount.year.new.url}" title="view details">{$totalCount.year.new.count}</a> + {if $totalCount.year.new.url}<a href="{$totalCount.year.new.url}" title="{ts}View details{/ts}">{$totalCount.year.new.count}</a> {else}{$totalCount.year.new.count}{/if} </td> <td class="label crm-grid-cell"> - {if $totalCount.year.renew.url}<a href="{$totalCount.year.renew.url}" title="view details">{$totalCount.year.renew.count}</a> + {if $totalCount.year.renew.url}<a href="{$totalCount.year.renew.url}" title="{ts}View details{/ts}">{$totalCount.year.renew.count}</a> {else}{$totalCount.year.renew.count}{/if} </td> <td class="label crm-grid-cell"> {if $totalCount.year.total.url} - <a href="{$totalCount.year.total.url}" title="view details">{$totalCount.year.total.count}</a> + <a href="{$totalCount.year.total.url}" title="{ts}View details{/ts}">{$totalCount.year.total.count}</a> {else} {$totalCount.year.total.count} {/if} [ {if $totalCount.year_owner.year_owner.url} - <a href="{$totalCount.year_owner.year_owner.url}" title="view details">{$totalCount.year_owner.year_owner.count}</a> + <a href="{$totalCount.year_owner.year_owner.url}" title="{ts}View details{/ts}">{$totalCount.year_owner.year_owner.count}</a> {else} {$totalCount.year_owner.year_owner.count} {/if}] @@ -207,23 +207,23 @@ <td class="label crm-grid-cell"> {if $isCurrent} {if $row.total.total.url} - <a href="{$row.total.total.url}" title="view details">{$totalCount.current.total.count}</a> + <a href="{$row.total.total.url}" title="{ts}View details{/ts}">{$totalCount.current.total.count}</a> {else} {$totalCount.current.total.count} {/if} [ {if $row.total_owner.total_owner.url} - <a href="{$row.total_owner.total_owner.url}" title="view details">{$totalCount.current_owner.current_owner.count}</a> + <a href="{$row.total_owner.total_owner.url}" title="{ts}View details{/ts}">{$totalCount.current_owner.current_owner.count}</a> {else} {$totalCount.current_owner.current_owner.count} {/if} ] {else} {if $totalCount.total.url} - <a href="{$totalCount.total.url}" title="view details">{$totalCount.total.total.count}</a> + <a href="{$totalCount.total.url}" title="{ts}View details{/ts}">{$totalCount.total.total.count}</a> {else} {$totalCount.total.total.count} {/if} [ {if $totalCount.total_owner.total_owner.url} - <a href="{$totalCount.total_owner.total_owner.url}" title="view details">{$totalCount.total_owner.total_owner.count}</a> + <a href="{$totalCount.total_owner.total_owner.url}" title="{ts}View details{/ts}">{$totalCount.total_owner.total_owner.count}</a> {else} {$totalCount.total_owner.total_owner.count} {/if} ] diff --git a/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl b/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl index c4b73645a52e15e346dc876434eaff78cbf888bb..f97c284cd06727f01cacc352f43bf7a12c44d836 100644 --- a/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl +++ b/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl @@ -77,7 +77,7 @@ </marquee> </div> <div class="description"> - [<a href="#" onclick="roll_start_stop(); return false;" id="roll" title="Stop scrolling">{ts}Stop{/ts}</a>] + [<a href="#" onclick="roll_start_stop(); return false;" id="roll" title="{ts}Stop scrolling{/ts}">{ts}Stop{/ts}</a>] </div> </div> {/if} diff --git a/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl b/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl index 1f5c53e96694042f970d42e9d6705499aa9ca61f..a073fa0c5b25901e7598951eb67c3d6c4c05ee03 100644 --- a/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl @@ -77,8 +77,8 @@ </tr> {* campaign in pledge search *} -{include file="CRM/Campaign/Form/addCampaignToComponent.tpl" -campaignContext="componentSearch" campaignTrClass='' campaignTdClass=''} +{include file="CRM/Campaign/Form/addCampaignToSearch.tpl" +campaignTrClass='' campaignTdClass=''} {if !empty($pledgeGroupTree)} <tr> diff --git a/civicrm/templates/CRM/Pledge/Form/Selector.tpl b/civicrm/templates/CRM/Pledge/Form/Selector.tpl index 4df4985e81a1a6199bcf7defc8f2c8afa4816182..e3ee37f961583bdd50d98530f8704ff73316c43e 100644 --- a/civicrm/templates/CRM/Pledge/Form/Selector.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Selector.tpl @@ -16,7 +16,7 @@ <table class="selector row-highlight"> <thead class="sticky"> {if ! $single and $context eq 'Search' } - <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> + <th scope="col" title="{ts}Select rows{/ts}">{$form.toggleSelect.html}</th> {/if} <th></th> {foreach from=$columnHeaders item=header} diff --git a/civicrm/templates/CRM/Report/Form.tpl b/civicrm/templates/CRM/Report/Form.tpl index db27dbab83acb3aec2a1deb08b53809f55f9d0fa..5f34d26e1f85d097e01f8454bb3e969db4348913 100644 --- a/civicrm/templates/CRM/Report/Form.tpl +++ b/civicrm/templates/CRM/Report/Form.tpl @@ -16,7 +16,7 @@ {elseif $section eq 2} <div class="crm-block crm-content-block crm-report-layoutTable-form-block"> {*include the table layout*} - {if empty($chartEnabled) || empty($chartSupported)} + {if !$chartEnabled || empty($chartSupported)} {include file="CRM/Report/Form/Layout/Table.tpl"} {/if} </div> @@ -32,19 +32,19 @@ {include file="CRM/Report/Form/Actions.tpl"} {*Statistics at the Top of the page*} - {include file="CRM/Report/Form/Statistics.tpl" top=true} + {include file="CRM/Report/Form/Statistics.tpl" top=true bottom=false} {*include the graph*} {include file="CRM/Report/Form/Layout/Graph.tpl"} {*include the table layout*} - {if empty($chartEnabled) || empty($chartSupported)} + {if !$chartEnabled || empty($chartSupported)} {include file="CRM/Report/Form/Layout/Table.tpl"} {/if} <br /> {*Statistics at the bottom of the page*} - {include file="CRM/Report/Form/Statistics.tpl" bottom=true} + {include file="CRM/Report/Form/Statistics.tpl" top="false" bottom=true} {include file="CRM/Report/Form/ErrorMessage.tpl"} </div> diff --git a/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl b/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl index 7dfdeb2eb797fee69ef0c8e93e2353bd6f7fa382..80ec862f577dfbc63f98406265cd830125e5de78 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl @@ -17,7 +17,7 @@ <div class="crm-block crm-content-block crm-report-form-block"> {include file="CRM/Report/Form/Actions.tpl"} {if !$section } -{include file="CRM/Report/Form/Statistics.tpl" top=true} +{include file="CRM/Report/Form/Statistics.tpl" top=true bottom=false} {/if} {if $rows} <div class="report-pager"> @@ -180,7 +180,7 @@ {if !$section } {*Statistics at the bottom of the page*} - {include file="CRM/Report/Form/Statistics.tpl" bottom=true} + {include file="CRM/Report/Form/Statistics.tpl" top="false" bottom=true} {/if} {/if} {include file="CRM/Report/Form/ErrorMessage.tpl"} diff --git a/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl b/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl index 6707b4020032444fa78920f6d43435bc16155dc8..e519abfd460c3cdc409cf6a9965dc27a7cb63804 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl @@ -18,12 +18,12 @@ {include file="CRM/Report/Form/Actions.tpl"} {*Statistics at the Top of the page*} - {include file="CRM/Report/Form/Statistics.tpl" top=true} - + {include file="CRM/Report/Form/Statistics.tpl" top=true bottom=false} + <table class="report-layout display"> {foreach from=$rows item=row} <thead><th colspan=16><font color="black" size="3">{$row.label}</font></th></thead> - + <thead class="sticky"> <tr> {foreach from=$columnHeaders item=label key=header} @@ -43,7 +43,7 @@ <br /> {*Statistics at the bottom of the page*} - {include file="CRM/Report/Form/Statistics.tpl" bottom=true} + {include file="CRM/Report/Form/Statistics.tpl" top="false" bottom=true} {include file="CRM/Report/Form/ErrorMessage.tpl"} </div> diff --git a/civicrm/templates/CRM/Report/Form/Event/Income.tpl b/civicrm/templates/CRM/Report/Form/Event/Income.tpl index 0030909b90478da4acd119fdc63be1115baa7892..2ce5a713c6af91943922dc890f2785c139886902 100644 --- a/civicrm/templates/CRM/Report/Form/Event/Income.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/Income.tpl @@ -18,7 +18,7 @@ {include file="CRM/Report/Form/Actions.tpl"} {*Statistics at the Top of the page*} {if !$section } - {include file="CRM/Report/Form/Statistics.tpl" top=true} + {include file="CRM/Report/Form/Statistics.tpl" top=true bottom=false} {/if} {if $events} @@ -70,7 +70,7 @@ </div> {if !$section } {*Statistics at the bottom of the page*} - {include file="CRM/Report/Form/Statistics.tpl" bottom=true} + {include file="CRM/Report/Form/Statistics.tpl" top="false" bottom=true} {/if} {/if} {include file="CRM/Report/Form/ErrorMessage.tpl"} diff --git a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl index d3de9439ed3db73f492a85f72c4ef68813440308..176c36ad7c01e59ee59375fe9ffe12580e011509 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl @@ -9,7 +9,7 @@ *} {assign var=uploadURL value=$config->imageUploadURL|replace:'/persist/contribute/':'/persist/'} {* Display weekly,Quarterly,monthly and yearly contributions using pChart (Bar and Pie) *} -{if !empty($chartEnabled) and !empty($chartSupported)} +{if $chartEnabled and !empty($chartSupported)} <div class='crm-chart'> {if $outputMode eq 'print' OR $outputMode eq 'pdf'} <img src="{$uploadURL|cat:$chartId}.png" /> @@ -20,7 +20,7 @@ {/if} {if empty($printOnly)} {* NO print section starts *} - {if !empty($section)} + {if empty($section)} {include file="CRM/common/chart.tpl" divId="chart_$uniqueId"} {/if} {if !empty($chartData)} diff --git a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl index 1d567a6fb6af054f324f6c51bf844f48116a1cb8..0f3e6ef22a2594aefa3b538ef91e18ea92caa6ab 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl @@ -7,10 +7,10 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if empty($rows)} +{if !$rows} <p>{ts}None found.{/ts}</p> {else} - {if !empty($pager) and $pager->_response and $pager->_response.numPages > 1} + {if $pager and $pager->_response and $pager->_response.numPages > 1} <div class="report-pager"> {include file="CRM/common/pager.tpl" location="top"} </div> @@ -24,8 +24,8 @@ {else} {assign var=class value="class='reports-header'"} {/if} - {if empty($skip)} - {if !empty($header.colspan)} + {if !$skip} + {if $header.colspan} <th colspan={$header.colspan}>{$header.title|escape}</th> {assign var=skip value=true} {assign var=skipCount value=`$header.colspan`} @@ -41,7 +41,7 @@ {/foreach} {/capture} - {if empty($sections)} {* section headers and sticky headers aren't playing nice yet *} + {if !$sections} {* section headers and sticky headers aren't playing nice yet *} <thead class="sticky"> <tr> {$tableHeader} @@ -92,14 +92,14 @@ {foreach from=$rows item=row key=rowid} {eval var=$sectionHeaderTemplate} - <tr class="{cycle values="odd-row,even-row"} {if !empty($row.class)}{$row.class}{/if} crm-report" id="crm-report_{$rowid}"> + <tr class="{cycle values="odd-row,even-row"} {if $row.class}{$row.class}{/if} crm-report" id="crm-report_{$rowid}"> {foreach from=$columnHeaders item=header key=field} {assign var=fieldLink value=$field|cat:"_link"} {assign var=fieldHover value=$field|cat:"_hover"} {assign var=fieldClass value=$field|cat:"_class"} <td class="crm-report-{$field}{if $header.type eq 1024 OR $header.type eq 1 OR $header.type eq 512} report-contents-right{elseif $row.$field eq 'Subtotal'} report-label{/if}"> {if !empty($row.$fieldLink)} - <a title="{$row.$fieldHover|escape}" href="{$row.$fieldLink}" {if !empty($row.$fieldClass)} class="{$row.$fieldClass}"{/if}> + <a title="{$row.$fieldHover|escape}" href="{$row.$fieldLink}" {if array_key_exists($fieldClass, $row)} class="{$row.$fieldClass}"{/if}> {/if} {if is_array($row.$field)} @@ -136,7 +136,7 @@ </tr> {/foreach} - {if !empty($grandStat)} + {if $grandStat} {* foreach from=$grandStat item=row*} <tr class="total-row"> {foreach from=$columnHeaders item=header key=field} @@ -156,7 +156,7 @@ {* /foreach*} {/if} </table> - {if !empty($pager) and $pager->_response and $pager->_response.numPages > 1} + {if $pager and $pager->_response and $pager->_response.numPages > 1} <div class="report-pager"> {include file="CRM/common/pager.tpl" location="bottom"} </div> diff --git a/civicrm/templates/CRM/Report/Form/Statistics.tpl b/civicrm/templates/CRM/Report/Form/Statistics.tpl index f94e32db417d38e09dd1741536b94941121bf45d..104f95466aeb4a0c82068a031015f4553aef9ca2 100644 --- a/civicrm/templates/CRM/Report/Form/Statistics.tpl +++ b/civicrm/templates/CRM/Report/Form/Statistics.tpl @@ -7,43 +7,39 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if !empty($top)} +{if $top} {if !empty($printOnly)} <h1>{$reportTitle}</h1> <div id="report-date">{if !empty($reportDate)}{$reportDate}{/if}</div> {/if} {if !empty($statistics)} <table class="report-layout statistics-table"> - {if !empty($statistics.groups)} - {foreach from=$statistics.groups item=row} - <tr> - <th class="statistics" scope="row">{$row.title}</th> - <td>{$row.value|escape}</td> - </tr> - {/foreach} - {/if} - {if !empty($statistics.filters)} - {foreach from=$statistics.filters item=row} - <tr> - <th class="statistics" scope="row">{$row.title}</th> - <td>{$row.value|escape}</td> - </tr> - {/foreach} - {/if} + {foreach from=$statistics.groups item=row} + <tr> + <th class="statistics" scope="row">{$row.title}</th> + <td>{$row.value|escape}</td> + </tr> + {/foreach} + {foreach from=$statistics.filters item=row} + <tr> + <th class="statistics" scope="row">{$row.title}</th> + <td>{$row.value|escape}</td> + </tr> + {/foreach} </table> {/if} {/if} -{if !empty($bottom) and !empty($rows) and !empty($statistics)} +{if $bottom and !empty($rows) and !empty($statistics)} <table class="report-layout"> - {if !empty($statistics.counts)} + {if $statistics.counts} {foreach from=$statistics.counts item=row} <tr> <th class="statistics" scope="row">{$row.title}</th> <td> - {if !empty($row.type) and $row.type eq 1024} + {if $row.type eq 1024} {$row.value|crmMoney|escape} - {elseif !empty($row.type) and $row.type eq 2} + {elseif $row.type eq 2} {$row.value|escape} {else} {$row.value|crmNumberFormat|escape} diff --git a/civicrm/templates/CRM/Report/Page/InstanceList.tpl b/civicrm/templates/CRM/Report/Page/InstanceList.tpl index 95d0be22edf402b54df79cb130d028dcf1482b6d..d12f9e31a78350a7eb7dee2de98277b98bd8e354 100644 --- a/civicrm/templates/CRM/Report/Page/InstanceList.tpl +++ b/civicrm/templates/CRM/Report/Page/InstanceList.tpl @@ -9,10 +9,10 @@ *} {strip} <div class="action-link"> - {if !empty($templateUrl)} + {if $templateUrl} <a href="{$templateUrl}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {$newButton}</span></a> {/if} - {if !empty($reportUrl)} + {if $reportUrl} <a href="{$reportUrl}" class="button"><span>{ts}View All Reports{/ts}</span></a> {/if} </div> @@ -22,7 +22,7 @@ {foreach from=$list item=rows key=report} <div class="crm-accordion-wrapper crm-accordion_{$report}-accordion "> <div class="crm-accordion-header"> - {if isset($title)}{$title}{elseif $report EQ 'Contribute'}{ts}Contribution Reports{/ts}{else}{ts 1=$report}%1 Reports{/ts}{/if}</a> + {if $title}{$title}{elseif $report EQ 'Contribute'}{ts}Contribution Reports{/ts}{else}{ts 1=$report}%1 Reports{/ts}{/if}</a> </div><!-- /.crm-accordion-header --> <div class="crm-accordion-body"> <div id="{$report}" class="boxBlock"> @@ -37,7 +37,7 @@ <ul class="panel"> {foreach from=$row.actions item=action key=action_name} <li><a href="{$action.url}" class="{$action_name} action-item crm-hover-button small-popup" - {if !empty($action.confirm_message)}onclick="return window.confirm({$action.confirm_message|json_encode|htmlspecialchars})"{/if} + {if $action.confirm_message}onclick="return window.confirm({$action.confirm_message|json_encode|htmlspecialchars})"{/if} title="{$action.label|escape}">{$action.label}</a></li> {/foreach} </ul> @@ -53,10 +53,10 @@ </div> <div class="action-link"> - {if !empty($templateUrl)} + {if $templateUrl} <a href="{$templateUrl}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {$newButton}</span></a> {/if} - {if !empty($reportUrl)} + {if $reportUrl} <a href="{$reportUrl}" class="button"><span>{ts}View All Reports{/ts}</span></a> {/if} </div> @@ -65,11 +65,15 @@ <div class="crm-content-block"> <div class="messages status no-popup"> {icon icon="fa-info-circle"}{/icon} - {if !empty($myReports)} + {if !$myReports} {ts}You do not have any private reports. To add a report to this section, edit the Report Settings for a report and set 'Add to My Reports' to Yes.{/ts} {else} - {ts 1=$compName}No %1 reports have been created.{/ts} - {if !empty($templateUrl)} + {if $compName} + {ts 1=$compName}No %1 reports have been created.{/ts} + {else} + {ts}No reports have been created.{/ts} + {/if} + {if $templateUrl} {ts 1=$templateUrl}You can create reports by selecting from the <a href="%1">list of report templates here.</a>{/ts} {else} {ts}Contact your site administrator for help creating reports.{/ts} diff --git a/civicrm/templates/CRM/Tag/Form/Edit.tpl b/civicrm/templates/CRM/Tag/Form/Edit.tpl index ed86047290267a6ad2d3288eb32af713cfc01cc7..f7cbada056f8ddd80cbcb807df2497da8bf0fc92 100644 --- a/civicrm/templates/CRM/Tag/Form/Edit.tpl +++ b/civicrm/templates/CRM/Tag/Form/Edit.tpl @@ -31,10 +31,7 @@ <td class="label">{$form.used_for.label}</td> <td>{$form.used_for.html} <br /> <span class="description"> - {* @TODO: I don't think is_parent is ever true because this form is never used for editing a tag itself, and you can't nest tagsets. And when used to add a new child tag, the used_for element doesn't exist. *} - {if !empty($is_parent)}{ts}You can change the types of records which this tag can be used for by editing the 'Parent' tag.{/ts} - {else}{ts}What types of record(s) can this tag be used for?{/ts} - {/if} + {ts}What types of record(s) can this tag be used for?{/ts} </span> </td> </tr> diff --git a/civicrm/templates/CRM/UF/Form/Fields.tpl b/civicrm/templates/CRM/UF/Form/Fields.tpl index 1370f593c5359f9194e831c0e7bacc60bc6d0140..3492371194fed1924ab07a14fedc2cc5cadd7dd6 100644 --- a/civicrm/templates/CRM/UF/Form/Fields.tpl +++ b/civicrm/templates/CRM/UF/Form/Fields.tpl @@ -6,8 +6,10 @@ {assign var=profileFieldName value=$field.name} {if $prefix} {assign var="formElement" value=$form.$prefix.$profileFieldName} + {assign var="rowIdentifier" value=$form.$prefix.$profileFieldName.id} {else} {assign var="formElement" value=$form.$profileFieldName} + {assign var="rowIdentifier" value=$field.name} {/if} {if $field.groupTitle != $fieldset} @@ -41,12 +43,12 @@ {elseif $profileFieldName} {* Show explanatory text for field if not in 'view' or 'preview' modes *} {if $field.help_pre && $action neq 4 && $action neq 1028} - <div class="crm-section helprow-{$profileFieldName}-section helprow-pre" id="helprow-{$profileFieldName}"> + <div class="crm-section helprow-{$profileFieldName}-section helprow-pre" id="helprow-{$rowIdentifier}"> <div class="content description">{$field.help_pre}</div> </div> {/if} {if $field.options_per_line != 0} - <div class="crm-section editrow_{$profileFieldName}-section form-item" id="editrow-{$profileFieldName}"> + <div class="crm-section editrow_{$profileFieldName}-section form-item" id="editrow-{$rowIdentifier}"> <div class="label option-label">{$formElement.label}</div> <div class="content 3"> @@ -77,7 +79,7 @@ <div class="clear"></div> </div> {else} - <div class="crm-section editrow_{$profileFieldName}-section form-item" id="editrow-{$profileFieldName}"> + <div class="crm-section editrow_{$profileFieldName}-section form-item" id="editrow-{$rowIdentifier}"> <div class="label"> {$formElement.label} </div> @@ -134,7 +136,7 @@ {/if} {* Show explanatory text for field if not in 'view' or 'preview' modes *} {if $field.help_post && $action neq 4 && $action neq 1028} - <div class="crm-section helprow-{$profileFieldName}-section helprow-post" id="helprow-{$profileFieldName}"> + <div class="crm-section helprow-{$profileFieldName}-section helprow-post" id="helprow-{$rowIdentifier}"> <div class="content description">{$field.help_post}</div> </div> {/if} diff --git a/civicrm/templates/CRM/common/CMSPrint.tpl b/civicrm/templates/CRM/common/CMSPrint.tpl index 919869faf336f04a30e028d1ec05f0a4b57152ce..c0579b38aa665cca10aea202782f885c9039f51a 100644 --- a/civicrm/templates/CRM/common/CMSPrint.tpl +++ b/civicrm/templates/CRM/common/CMSPrint.tpl @@ -11,9 +11,9 @@ {include file="CRM/common/debug.tpl"} {/if} -<div id="crm-container" class="crm-container{if !empty($urlIsPublic)} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> +<div id="crm-container" class="crm-container{if $urlIsPublic} crm-public{/if}" lang="{$config->lcMessages|truncate:2:"":true}" xml:lang="{$config->lcMessages|truncate:2:"":true}"> -{if !empty($breadcrumb)} +{if $breadcrumb} <div class="breadcrumb"> {foreach from=$breadcrumb item=crumb key=key} {if $key != 0} @@ -24,9 +24,9 @@ </div> {/if} -{if !empty($pageTitle)} +{if $pageTitle} <div class="crm-title"> - <h1 class="title">{if !empty($isDeleted)}<del>{/if}{$pageTitle}{if !empty($isDeleted)}</del>{/if}</h1> + <h1 class="title">{if $isDeleted}<del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1> </div> {/if} @@ -34,13 +34,10 @@ {/crmRegion} <div class="clear"></div> -{if isset($localTasks) and $localTasks} - {include file="CRM/common/localNav.tpl"} -{/if} <div id="crm-main-content-wrapper"> {include file="CRM/common/status.tpl"} {crmRegion name='page-body'} - {if isset($isForm) and $isForm and isset($formTpl)} + {if $isForm and $formTpl} {include file="CRM/Form/$formTpl.tpl"} {else} {include file=$tplFile} @@ -49,7 +46,7 @@ </div> {crmRegion name='page-footer'} -{if !empty($urlIsPublic)} +{if $urlIsPublic} {include file="CRM/common/publicFooter.tpl"} {else} {include file="CRM/common/footer.tpl"} diff --git a/civicrm/templates/CRM/common/TabHeader.tpl b/civicrm/templates/CRM/common/TabHeader.tpl index 1e9179975abc8cd2e31baea4437fa653bb9a6da3..7d8ae7ad0d308b147dc9cb61688cfbfd115719c5 100644 --- a/civicrm/templates/CRM/common/TabHeader.tpl +++ b/civicrm/templates/CRM/common/TabHeader.tpl @@ -9,16 +9,16 @@ *} {* enclose all tabs and its content in a block *} <div class="crm-block crm-content-block"> - {if !empty($tabHeader) and count($tabHeader)} + {if $tabHeader} <div id="mainTabContainer"> <ul> {foreach from=$tabHeader key=tabName item=tabValue} - <li id="tab_{$tabName}" class="crm-tab-button ui-corner-all{if !$tabValue.valid} disabled{/if}{if isset($tabValue.class)} {$tabValue.class}{/if}" {if isset($tabValue.extra)}{$tabValue.extra}{/if}> + <li id="tab_{$tabName}" class="crm-tab-button ui-corner-all{if !$tabValue.valid} disabled{/if} {$tabValue.class}" {$tabValue.extra}> {if $tabValue.active} - <a href="{if !empty($tabValue.template)}#panel_{$tabName}{else}{$tabValue.link}{/if}" title="{$tabValue.title|escape}{if !$tabValue.valid} ({ts}disabled{/ts}){/if}"> - {if !empty($tabValue.icon)}<i class="{$tabValue.icon}"></i>{/if} + <a href="{if $tabValue.template}#panel_{$tabName}{else}{$tabValue.link}{/if}" title="{$tabValue.title|escape}{if !$tabValue.valid} ({ts}disabled{/ts}){/if}"> + {if $tabValue.icon}<i class="{$tabValue.icon}"></i>{/if} <span>{$tabValue.title}</span> - {if isset($tabValue.count)}<em>{$tabValue.count}</em>{/if} + {if is_numeric($tabValue.count)}<em>{$tabValue.count}</em>{/if} </a> {else} <span {if !$tabValue.valid} title="{ts}disabled{/ts}"{/if}>{$tabValue.title}</span> @@ -27,7 +27,7 @@ {/foreach} </ul> {foreach from=$tabHeader key=tabName item=tabValue} - {if !empty($tabValue.template)} + {if $tabValue.template} <div id="panel_{$tabName}"> {include file=$tabValue.template} </div> diff --git a/civicrm/templates/CRM/common/chart.tpl b/civicrm/templates/CRM/common/chart.tpl index 5d2f2cc5bf543160063f7b12119b52567059dc5c..730dc273430d8c599722efc83e5b81f3200246a4 100644 --- a/civicrm/templates/CRM/common/chart.tpl +++ b/civicrm/templates/CRM/common/chart.tpl @@ -46,7 +46,7 @@ function createChart( chartID, divName, xSize, ySize, data ) { links.style.marginBottom = '1rem'; var linkSVG = document.createElement('a'); linkSVG.href = '#'; - linkSVG.textContent = 'Download chart (SVG)'; + linkSVG.textContent = '{/literal}{ts escape="js"}Download chart (SVG){/ts}{literal}'; linkSVG.addEventListener('click', e => { e.preventDefault(); e.stopPropagation(); @@ -68,7 +68,7 @@ function createChart( chartID, divName, xSize, ySize, data ) { } var linkPNG = document.createElement('a'); linkPNG.href = '#'; - linkPNG.textContent = 'Download chart (PNG)'; + linkPNG.textContent = '{/literal}{ts escape="js"}Download chart (PNG){/ts}{literal}'; linkPNG.addEventListener('click', e => { e.preventDefault(); e.stopPropagation(); diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index 1747c0e72d5204fd54ecc4923c846697ab98ce7e..2ee27829d9b493b033ceb5e4d680534e4ff7d9b6 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -193,7 +193,19 @@ if (!defined('CIVICRM_TEMPLATE_COMPILEDIR')) { * */ //if (!defined('CIVICRM_TEMPLATE_COMPILE_CHECK')) { -// define( 'CIVICRM_TEMPLATE_COMPILE_CHECK', FALSE); +// define('CIVICRM_TEMPLATE_COMPILE_CHECK', FALSE); +//} + +/** + * Smarty escape on output. + * + * This tells smarty to pass all variables through the escape function + * unless they are piped to smarty:nodefaults (eg. {$myScript|smarty:nodefaults} + * At this stage it should only be enabled on development sites. + * @see https://github.com/civicrm/civicrm-core/pull/21935 + */ +//if (!defined('CIVICRM_SMARTY_DEFAULT_ESCAPE')) { +// define('CIVICRM_SMARTY_DEFAULT_ESCAPE', TRUE); //} /** diff --git a/civicrm/templates/CRM/common/contactFooter.tpl b/civicrm/templates/CRM/common/contactFooter.tpl index 76cc62b511e308d4af3fed120c9d4f00177bcbac..d87f279f9707f1a4bc3d2ccc02f198f213b8b610 100644 --- a/civicrm/templates/CRM/common/contactFooter.tpl +++ b/civicrm/templates/CRM/common/contactFooter.tpl @@ -12,7 +12,7 @@ <div class="crm-footer" id="crm-record-log"> <span class="col1"> {if !empty($external_identifier)}{ts}External ID{/ts}: {$external_identifier}{/if} - {if !isset($action) || (isset($action) && $action NEQ 2)} {ts}Contact ID{/ts}: {$contactId}{/if} + {if $action !== 2} {ts}Contact ID{/ts}: {$contactId}{/if} </span> {if !empty($lastModified)} {ts}Last Change by{/ts}: <a href="{crmURL p='civicrm/contact/view' q="action=view&reset=1&cid=`$lastModified.id`"}">{$lastModified.name}</a> ({$lastModified.date|crmDate}) diff --git a/civicrm/templates/CRM/common/debug.tpl b/civicrm/templates/CRM/common/debug.tpl index 9000418de9a7006b625625963127697f9835a863..32d69257e487ea7535281bb7b46430af66613e1e 100644 --- a/civicrm/templates/CRM/common/debug.tpl +++ b/civicrm/templates/CRM/common/debug.tpl @@ -8,26 +8,26 @@ +--------------------------------------------------------------------+ *} <!-- .tpl file invoked: {$tplFile}. Call via form.tpl if we have a form in the page. --> -{if !empty($smarty.get.smartyDebug)} +{if isset($smarty.get.smartyDebug|smarty:nodefaults)} {debug} {/if} -{if !empty($smarty.get.sessionReset)} +{if isset($smarty.get.sessionReset|smarty:nodefaults)} {$session->reset($smarty.get.sessionReset)} {/if} -{if !empty($smarty.get.sessionDebug)} +{if isset($smarty.get.sessionDebug|smarty:nodefaults)} {$session->debug($smarty.get.sessionDebug)} {/if} -{if !empty($smarty.get.directoryCleanup)} +{if isset($smarty.get.directoryCleanup|smarty:nodefaults)} {$config->cleanup($smarty.get.directoryCleanup)} {/if} -{if !empty($smarty.get.cacheCleanup)} +{if isset($smarty.get.cacheCleanup|smarty:nodefaults)} {$config->clearDBCache()} {/if} -{if !empty($smarty.get.configReset)} +{if isset($smarty.get.configReset|smarty:nodefaults)} {$config->reset()} {/if} diff --git a/civicrm/templates/CRM/common/fatal.tpl b/civicrm/templates/CRM/common/fatal.tpl index 4ee6936607a5bb5f422470997da86dec5251f31d..7e5a353656bd4a52a44f0481b2863751e6a55d6a 100644 --- a/civicrm/templates/CRM/common/fatal.tpl +++ b/civicrm/templates/CRM/common/fatal.tpl @@ -13,7 +13,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> - <title>{if !empty($pageTitle)}{$pageTitle|escape}{/if}</title> + <title>{$pageTitle|escape}</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <base href="{$config->resourceBase}" /> <style type="text/css" media="screen"> diff --git a/civicrm/templates/CRM/common/footer.tpl b/civicrm/templates/CRM/common/footer.tpl index c781062d364dbec15b54420abd91654614adbdc1..fbb95e2cef2c596755fc1e17a86ad0019176dc08 100644 --- a/civicrm/templates/CRM/common/footer.tpl +++ b/civicrm/templates/CRM/common/footer.tpl @@ -9,7 +9,7 @@ *} {if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')} {include file="CRM/common/accesskeys.tpl"} - {if !empty($contactId)} + {if $contactId} {include file="CRM/common/contactFooter.tpl"} {/if} diff --git a/civicrm/templates/CRM/common/formButtons.tpl b/civicrm/templates/CRM/common/formButtons.tpl index f00a9747839e6c324744a8c25eb8f387c7e1573a..0ef85e9845fe05ffba38045362d69b00dc8778e3 100644 --- a/civicrm/templates/CRM/common/formButtons.tpl +++ b/civicrm/templates/CRM/common/formButtons.tpl @@ -10,7 +10,7 @@ {crmRegion name='form-buttons'} {* Loops through $linkButtons and assigns html "a" (link) buttons to the template. Used for additional entity functions such as "Move to Case" or "Renew Membership" *} -{if !empty($linkButtons)} +{if $linkButtons} {foreach from=$linkButtons item=linkButton} {if $linkButton.accessKey} {capture assign=accessKey}accesskey="{$linkButton.accessKey}"{/capture} diff --git a/civicrm/templates/CRM/common/info.tpl b/civicrm/templates/CRM/common/info.tpl index 410e20aebb3d765cccc68ec73d1f27987bc6cd1b..1584b0002ef05df0a9a2f0a89d9741cb777fcef9 100644 --- a/civicrm/templates/CRM/common/info.tpl +++ b/civicrm/templates/CRM/common/info.tpl @@ -8,10 +8,10 @@ +--------------------------------------------------------------------+ *} {* Handles display of passed $infoMessage. *} -{if isset($infoMessage) or isset($infoTitle)} - <div class="messages status {$infoType|default:''}"{if !empty($infoOptions)} data-options='{$infoOptions}'{/if}> +{if $infoMessage || $infoTitle} + <div class="messages status {$infoType}"{if $infoOptions} data-options='{$infoOptions}'{/if}> {icon icon="fa-info-circle"}{/icon} - <span class="msg-title">{$infoTitle|default:''}</span> - <span class="msg-text">{$infoMessage|default:''}</span> + <span class="msg-title">{$infoTitle}</span> + <span class="msg-text">{$infoMessage}</span> </div> {/if} diff --git a/civicrm/templates/CRM/common/joomla.tpl b/civicrm/templates/CRM/common/joomla.tpl index ec33072425e794531ba8ee00978f748f13944afe..32e5859ecc14b426f0e25a85ea52ec1218ab1da7 100644 --- a/civicrm/templates/CRM/common/joomla.tpl +++ b/civicrm/templates/CRM/common/joomla.tpl @@ -53,7 +53,7 @@ <div id="crm-main-content-wrapper"> {include file="CRM/common/status.tpl"} {crmRegion name='page-body'} - {if isset($isForm) and $isForm and isset($formTpl)} + {if $isForm and $formTpl} {include file="CRM/Form/$formTpl.tpl"} {else} {include file=$tplFile} diff --git a/civicrm/templates/CRM/common/jsortable.tpl b/civicrm/templates/CRM/common/jsortable.tpl index efd1d1d13dd88c74d1d25a0c43e5c215bfbb6dbb..c0adbc0156015c9a4330637d75fd0f3da0de9099 100644 --- a/civicrm/templates/CRM/common/jsortable.tpl +++ b/civicrm/templates/CRM/common/jsortable.tpl @@ -27,14 +27,14 @@ } // for date sorting see http://wiki.civicrm.org/confluence/display/CRMDOC/Sorting+Date+Fields+in+dataTables+Widget - var useAjax = {/literal}{if !empty($useAjax)}1{else}0{/if}{literal}, + var useAjax = {/literal}{$useAjax}{literal}, sourceUrl = '', useClass = 'display', tcount = 1, tableId = []; if ( useAjax ) { - {/literal}{if isset($sourceUrl)}sourceUrl = "{$sourceUrl}";{/if}{literal} + {/literal}{if $sourceUrl}sourceUrl = "{$sourceUrl}";{/if}{literal} useClass = 'pagerDisplay'; tcount = 5; } diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index 2b0f76073a64eee2a2bddb32b6ca6023f035321a..7e804f5568b938db00a2e406537aa8ccdf88d146 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -37,7 +37,7 @@ $.fn.select2.defaults.formatLoadMore = "{ts escape='js'}Loading...{/ts}"; $.fn.select2.defaults.formatSearching = "{ts escape='js'}Searching...{/ts}"; $.fn.select2.defaults.formatInputTooShort = function() {ldelim} - return ($(this).data('api-entity') === 'contact' || $(this).data('api-entity') === 'Contact') ? {$contactSearch} : {$otherSearch}; + return ($(this).data('api-entity') === 'contact' || $(this).data('api-entity') === 'Contact') ? {$contactSearch|smarty:nodefaults} : {$otherSearch|smarty:nodefaults}; {rdelim}; // Localize jQuery UI diff --git a/civicrm/templates/CRM/common/print.tpl b/civicrm/templates/CRM/common/print.tpl index e144095c464ff976ae22984ce76476089eb917a7..9ee4858ec613f1bc65c76ca23a9f34e427efe48d 100644 --- a/civicrm/templates/CRM/common/print.tpl +++ b/civicrm/templates/CRM/common/print.tpl @@ -29,7 +29,7 @@ {include file="CRM/common/status.tpl"} {crmRegion name='page-body' allowCmsOverride=0} - {if $isForm and isset($formTpl)} + {if $isForm and $formTpl} {include file="CRM/Form/$formTpl.tpl"} {else} {include file=$tplFile} diff --git a/civicrm/templates/CRM/common/printBody.tpl b/civicrm/templates/CRM/common/printBody.tpl index 81ac3afef86e3cd1bc6d8cfc1255daaeb51d8756..d1c09134318dee7456c6b1855154d219ac926508 100644 --- a/civicrm/templates/CRM/common/printBody.tpl +++ b/civicrm/templates/CRM/common/printBody.tpl @@ -9,7 +9,7 @@ *} {* printBody.tpl: wrapper for Print views without HTML surrounds. *} -{if $isForm and isset($formTpl)} +{if $isForm and $formTpl} {include file="CRM/Form/$formTpl.tpl"} {else} {include file=$tplFile} diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 20f62953c688b38d7c5170dca8cfe01e0d3b4452..4c28c1726891d350f694d4370ce5cdbc97673132 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60::getLoader(); +return ComposerAutoloaderInit8c0c2450fe13922c4d62dbca767e0e63::getLoader(); diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index e676f7f42c3c9af5a9b2cb2566bc7e83b6994126..713a8e0805b73d0acb0e0713cf4555dd344833af 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 ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60 +class ComposerAutoloaderInit8c0c2450fe13922c4d62dbca767e0e63 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit8c0c2450fe13922c4d62dbca767e0e63', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit8c0c2450fe13922c4d62dbca767e0e63', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60 if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit87cd30a33af2b0a35307ac2492f36d60 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire87cd30a33af2b0a35307ac2492f36d60($fileIdentifier, $file); + composerRequire8c0c2450fe13922c4d62dbca767e0e63($fileIdentifier, $file); } return $loader; } } -function composerRequire87cd30a33af2b0a35307ac2492f36d60($fileIdentifier, $file) +function composerRequire8c0c2450fe13922c4d62dbca767e0e63($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 2ddc4a369ad349adb3add9ee743480a8d5a34f9f..9e65325cd0be387fc9d0995f25d89f87e41b6c6e 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60 +class ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -672,11 +672,11 @@ class ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit87cd30a33af2b0a35307ac2492f36d60::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit8c0c2450fe13922c4d62dbca767e0e63::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml index 59ee1a7cbdbfa124a6b68db1a9485af7fd4ce76e..4030373fc27fdd767f921e1b2243658918b44497 100644 --- a/civicrm/xml/schema/Contact/Contact.xml +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -850,7 +850,6 @@ <html> <type>CheckBox</type> </html> - <permission>access deleted contacts</permission> </field> <index> <name>index_is_deleted_sort_name</name> diff --git a/civicrm/xml/schema/Core/CustomGroup.xml b/civicrm/xml/schema/Core/CustomGroup.xml index 5fec9603395afbb096dfd5a10cc71a88e06f0e92..c3f52a844172743f1d0fdbd98ef653b15dcb1e24 100644 --- a/civicrm/xml/schema/Core/CustomGroup.xml +++ b/civicrm/xml/schema/Core/CustomGroup.xml @@ -8,6 +8,7 @@ </comment> <add>1.1</add> <log>true</log> + <title>Custom Field Group</title> <labelField>title</labelField> <field> <name>id</name> diff --git a/civicrm/xml/schema/Core/Dashboard.xml b/civicrm/xml/schema/Core/Dashboard.xml index 63fc5b1599b4bc3837f0aac4a958a625e59748cd..b68fe09b897e5d69838738203eed516dad167036 100644 --- a/civicrm/xml/schema/Core/Dashboard.xml +++ b/civicrm/xml/schema/Core/Dashboard.xml @@ -82,6 +82,9 @@ <type>varchar</type> <title>Dashlet Permission Operator</title> <length>3</length> + <pseudoconstant> + <callback>CRM_Core_SelectValues::andOr</callback> + </pseudoconstant> <comment>Permission Operator</comment> <add>3.1</add> </field> diff --git a/civicrm/xml/schema/Core/Managed.xml b/civicrm/xml/schema/Core/Managed.xml index b00d1aa042ad1b830dce1eb10b8d5b8b1cad4f03..ee884dfee695315cdfac1b5d6422358f0d3ca9a5 100644 --- a/civicrm/xml/schema/Core/Managed.xml +++ b/civicrm/xml/schema/Core/Managed.xml @@ -76,6 +76,14 @@ </html> <add>4.5</add> </field> + <field> + <name>entity_modified_date</name> + <type>timestamp</type> + <comment>When the managed entity was changed from its original settings.</comment> + <required>false</required> + <default>NULL</default> + <add>5.45</add> + </field> <index> <name>UI_managed_entity</name> <fieldName>entity_type</fieldName> diff --git a/civicrm/xml/schema/Core/Navigation.xml b/civicrm/xml/schema/Core/Navigation.xml index 3b7d80f4d1bdff32b4103fab4bcd8ecb38d0100b..dd489e66e00cfe70c68f54bb28e9361af4a46532 100644 --- a/civicrm/xml/schema/Core/Navigation.xml +++ b/civicrm/xml/schema/Core/Navigation.xml @@ -82,7 +82,8 @@ <title>Required Permission</title> <type>varchar</type> <length>255</length> - <comment>Permission for menu item</comment> + <comment>Permission(s) needed to access menu item</comment> + <serialize>COMMA</serialize> <add>3.0</add> </field> <field> @@ -90,7 +91,10 @@ <title>Permission Operator</title> <type>varchar</type> <length>3</length> - <comment>Permission Operator</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::andOr</callback> + </pseudoconstant> + <comment>Operator to use if item has more than one permission</comment> <add>3.0</add> </field> <field> diff --git a/civicrm/xml/schema/Core/OptionValue.xml b/civicrm/xml/schema/Core/OptionValue.xml index 275a40361663edbdbfb0791786b7b97a68dfa5a9..6498b64275b4a5288b0a470076e7bd3fd1ce3465 100644 --- a/civicrm/xml/schema/Core/OptionValue.xml +++ b/civicrm/xml/schema/Core/OptionValue.xml @@ -6,6 +6,10 @@ <name>civicrm_option_value</name> <add>1.5</add> <log>true</log> + <paths> + <update>civicrm/admin/options/[option_group_id:name]?reset=1&action=update&id=[id]</update> + <delete>civicrm/admin/options/[option_group_id:name]?reset=1&action=delete&id=[id]</delete> + </paths> <field> <name>id</name> <title>Option Value ID</title> diff --git a/civicrm/xml/templates/civicrm_currency.tpl b/civicrm/xml/templates/civicrm_currency.tpl index a2f44d33570ea284e8b21f05cf39a31911424904..f2244ddbfa37c1e4f421a4a9b54f9c808ea180e8 100644 --- a/civicrm/xml/templates/civicrm_currency.tpl +++ b/civicrm/xml/templates/civicrm_currency.tpl @@ -50,7 +50,7 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 37, "BSD", "$", "044", "Bahamian Dollar"), ( 38, "BTN", NULL, "064", "Bhutan Ngultrum"), ( 39, "BWP", "P", "072", "Botswana Pula"), -( 40, "BYR", "p.", "974", "Belarussian Rouble"), +( 40, "BYN", "p.", "974", "Belarussian Rouble"), ( 41, "BZD","BZ$", "084", "Belize Dollar"), ( 42, "CDF", NULL, "976", "Franc Congolais"), ( 43, "CHE", NULL, "947", "WIR Euro"), @@ -77,7 +77,7 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 65, "FJD", "$", "242", "Fiji Dollar"), ( 66, "FKP", "£", "238", "Falkland Islands Pound"), ( 67, "GEL", NULL, "981", "Georgian Lari"), -( 68, "GHC", "¢", "288", "Ghanaian Cedi"), +( 68, "GHS", "¢", "288", "Ghanaian Cedi"), ( 69, "GIP", "£", "292", "Gibraltar Pound"), ( 70, "GMD", NULL, "270", "Gambian Dalasi"), ( 71, "GNF", NULL, "324", "Guinea Franc"), diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl index bff5c01a705f7a2e39863f26cf0da5dd532b27fd..25f8e578205a21196ff572a9ca65b8fbdc373905 100644 --- a/civicrm/xml/templates/civicrm_data.tpl +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -1680,7 +1680,7 @@ force=[0 or 1] optional-0 update contacts with null value, 1 update all limit=Number optional-Limit the number of contacts to update{/ts}', 0), ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Mail Reports{/ts}', '{ts escape="sql" skip="true"}Generates and sends out reports via email{/ts}', 'job', 'mail_report','{ts escape="sql" skip="true"}instanceId=[ID of report instance] required format=[csv or print] optional-output CSV or print-friendly HTML, else PDF{/ts}', 0), - ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Send Scheduled Reminders{/ts}', '{ts escape="sql" skip="true"}Sends out scheduled reminders via email{/ts}', 'job', 'send_reminder', NULL, 0), + ( @domainID, 'Hourly' , NULL, '{ts escape="sql" skip="true"}Send Scheduled Reminders{/ts}', '{ts escape="sql" skip="true"}Sends out scheduled reminders via email{/ts}', 'job', 'send_reminder', NULL, 0), ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Update Participant Statuses{/ts}', '{ts escape="sql" skip="true"}Updates pending event participant statuses based on time{/ts}', 'job', 'process_participant', NULL, 0), ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Update Membership Statuses{/ts}', '{ts escape="sql" skip="true"}Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.{/ts}', 'job', 'process_membership', NULL, 0), ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Process Survey Respondents{/ts}', '{ts escape="sql" skip="true"}Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.{/ts}', 'job', 'process_respondent',NULL, 0), diff --git a/civicrm/xml/templates/civicrm_state_province.tpl b/civicrm/xml/templates/civicrm_state_province.tpl index 4ba9fd530f126c14f9ad9a4c62cce9b3062ae067..b4329945d657594fe95dad0e4e14bb198f78b225 100644 --- a/civicrm/xml/templates/civicrm_state_province.tpl +++ b/civicrm/xml/templates/civicrm_state_province.tpl @@ -2503,8 +2503,8 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4062, 1170, "CAT", "Catanduanes"), (4063, 1170, "CAV", "Cavite"), (4064, 1170, "CEB", "Cebu"), -(4065, 1170, "COM", "Compostela Valley"), -(4066, 1170, "DAV", "Davao"), +(4065, 1170, "COM", "Davao de Oro"), +(4066, 1170, "DAV", "Davao del Norte"), (4067, 1170, "DAS", "Davao del Sur"), (4068, 1170, "DAO", "Davao Oriental"), (4069, 1170, "EAS", "Eastern Samar"), @@ -2514,7 +2514,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4073, 1170, "ILS", "Ilocos Sur"), (4074, 1170, "ILI", "Iloilo"), (4075, 1170, "ISA", "Isabela"), -(4076, 1170, "KAL", "Kalinga-Apayso"), +(4076, 1170, "KAL", "Kalinga"), (4077, 1170, "LAG", "Laguna"), (4078, 1170, "LAN", "Lanao del Norte"), (4079, 1170, "LAS", "Lanao del Sur"), @@ -2530,7 +2530,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (4089, 1170, "MOU", "Mountain Province"), (4090, 1170, "NEC", "Negroe Occidental"), (4091, 1170, "NER", "Negros Oriental"), -(4092, 1170, "NCO", "North Cotabato"), +(4092, 1170, "NCO", "Cotabato"), (4093, 1170, "NSA", "Northern Samar"), (4094, 1170, "NUE", "Nueva Ecija"), (4095, 1170, "NUV", "Nueva Vizcaya"), @@ -4141,4 +4141,10 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1226, "WRX", "Wrexham"), -- Add missing state for South Korea -(NULL, 1115, "50", "Sejong"); +(NULL, 1115, "50", "Sejong"), + +-- Add missing province for Philippines +(NULL, 1170, "DIN", "Dinagat Islands"), + +-- Add missing state for Colombia +(NULL, 1048, "HUI", "Huila"); diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 14b4a35b13a380a023576eda0ffc0ea06eadc0d8..a4ccc80d295ad15d7101909a27fc9b9a42938274 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.44.0</version_no> + <version_no>5.45.0</version_no> </version> diff --git a/includes/civicrm.compat.php b/includes/civicrm.compat.php index 8acae0cee2eb616dac874917c6de25ff0ae27529..cc8280c07e2f8b230c68370eebf17a9444f11f90 100644 --- a/includes/civicrm.compat.php +++ b/includes/civicrm.compat.php @@ -71,6 +71,9 @@ class CiviCRM_For_WordPress_Compat { // Support Clean URLs when Polylang is active. add_action('civicrm_after_rewrite_rules', [$this, 'rewrite_rules_polylang'], 10, 2); + // Prevent AIOSEO from stomping on CiviCRM Shortcodes. + add_filter('aioseo_conflicting_shortcodes', [$this, 'aioseo_resolve_conflict']); + } /** @@ -147,4 +150,19 @@ class CiviCRM_For_WordPress_Compat { } + /** + * Fixes AIOSEO's attempt to modify Shortcodes. + * + * @see https://civicrm.stackexchange.com/questions/40765/wp-all-in-one-seo-plugin-conflict + * + * @since 5.45 + * + * @param array $conflicting_shortcodes The existing AIOSEO Conflicting Shortcodes array. + * @return array $conflicting_shortcodes The modified AIOSEO Conflicting Shortcodes array. + */ + public function aioseo_resolve_conflict($conflicting_shortcodes) { + $conflicting_shortcodes['CiviCRM'] = 'civicrm'; + return $conflicting_shortcodes; + } + } diff --git a/includes/civicrm.shortcodes.php b/includes/civicrm.shortcodes.php index c7fd2b558251715f3a482b13b3062890e1c8bbed..81828e5ba01b588a1bade0f67d26ec6909dfadf2 100644 --- a/includes/civicrm.shortcodes.php +++ b/includes/civicrm.shortcodes.php @@ -402,7 +402,7 @@ class CiviCRM_For_WordPress_Shortcodes { // Get pathless markup from filter callback. if (empty($args['q'])) { - $markup = '<p>' . __('The Shortcode could not be handled. It could be malformed or used incorrectly.', 'civicrm') . '</p>'; + $markup = ''; /** This filter is documented in includes/civicrm-shortcodes.php */ return apply_filters('civicrm_shortcode_get_markup', $markup, $atts, $args, 'multiple'); } @@ -628,7 +628,12 @@ class CiviCRM_For_WordPress_Shortcodes { * @param int $post_id The numeric ID of the WordPress post. * @return string $title The overridden title. */ - public function get_title($title, $post_id) { + public function get_title($title, $post_id = 0) { + + // Bail if there is no Post ID. + if (empty($post_id)) { + return $title; + } // Is this the post? if (!array_key_exists($post_id, $this->shortcode_markup)) { diff --git a/tests/phpunit/CiviWP/HookTest.php b/tests/phpunit/CiviWP/HookTest.php index bffafe50ed55da8fecc7aecba491d03316cdd7fc..ad778438b8068b196531c91bdf5ca67e362669f2 100644 --- a/tests/phpunit/CiviWP/HookTest.php +++ b/tests/phpunit/CiviWP/HookTest.php @@ -19,7 +19,7 @@ namespace CiviWP { 'foo' => 123, ); $this->assertNotEquals($arg2['foo'], 456); - $this->assertNotEquals($arg2['hook_was_called'], 1); + $this->assertFalse(isset($arg2['hook_was_called'])); \CRM_Utils_Hook::singleton() ->invoke( 2,