diff --git a/assets/js/civicrm.options.js b/assets/js/civicrm.options.js index d9bc6d5e1d3c99b90ca861434836541a041ebb6c..ca930d1c5636f2f1189c894ce815bf7cf26fef08 100644 --- a/assets/js/civicrm.options.js +++ b/assets/js/civicrm.options.js @@ -167,10 +167,12 @@ me.basepage_submit = $('#civicrm_basepage_submit'); me.shortcode_submit = $('#civicrm_shortcode_submit'); me.email_submit = $('#civicrm_email_submit'); + me.permissions_submit = $('#civicrm_permissions_submit'); me.cache_submit = $('#civicrm_cache_submit'); me.basepage_select = $('#page_id'); me.shortcode_select = $('#shortcode_mode'); me.email_select = $('#sync_email'); + me.permissions_select = $('#permissions_role'); me.basepage_selected = me.basepage_select.val(); me.shortcode_selected = me.shortcode_select.val(); me.email_selected = me.email_select.val(); @@ -358,6 +360,34 @@ }); + /** + * Add a click event listener to the "Permissions and Capabilities" section submit button. + * + * @param {Object} event The event object. + */ + me.permissions_submit.on('click', function(event) { + + // Define vars. + var value = me.permissions_select.val(), + ajax_nonce = me.permissions_submit.data('security'), + refreshing = CiviCRM_Options_Settings.get_localisation('refreshing'); + + // Prevent form submission. + if (event.preventDefault) { + event.preventDefault(); + } + + // Modify button and select, then show spinner. + me.permissions_submit.val(refreshing); + me.permissions_submit.prop('disabled', true); + me.permissions_select.prop('disabled', true); + $(this).next('.spinner').css('visibility', 'visible'); + + // Submit request to server. + me.send('civicrm_refresh_permissions', value, ajax_nonce); + + }); + /** * Add a click event listener to the "Clear Caches" section submit button. * @@ -453,6 +483,7 @@ var saved = CiviCRM_Options_Settings.get_localisation('saved'), update = CiviCRM_Options_Settings.get_localisation('update'), clearing = CiviCRM_Options_Settings.get_localisation('clearing'), + refresh = CiviCRM_Options_Settings.get_localisation('refresh'), cache = CiviCRM_Options_Settings.get_localisation('cache'); if (data.saved) { @@ -489,6 +520,17 @@ me.email_selected = data.result; me.email_select.prop('disabled', false); + } else if (data.section == 'refresh_permissions') { + + // Permissions and Capabilities section. + me.permissions_submit.val(refresh); + $('.permissions_error').hide(); + $('.permissions_success').show(); + $('.permissions_success p').html(data.notice); + me.permissions_select.prop('disabled', false); + me.permissions_submit.prop('disabled', false); + me.permissions_submit.next('.spinner').css('visibility', 'hidden'); + } else if (data.section == 'clear_caches') { // Clear Caches section. @@ -540,6 +582,16 @@ $('.email_feedback').html(data.message); me.email_selected = data.result; + } else if (data.section == 'refresh_permissions') { + + // Permissions and Capabilities section. + me.permissions_submit.val(refresh); + me.permissions_submit.next('.spinner').css('visibility', 'hidden'); + me.permissions_submit.prop('disabled', false); + $('.permissions_success').hide(); + $('.permissions_error').show(); + $('.permissions_error p').html(data.notice); + } else if (data.section == 'clear_caches') { // Clear Caches section. diff --git a/assets/templates/metaboxes/metabox.options.permissions.php b/assets/templates/metaboxes/metabox.options.permissions.php new file mode 100644 index 0000000000000000000000000000000000000000..0a8b01cf4ecad93b5ce79ae8825267e90c9fad0a --- /dev/null +++ b/assets/templates/metaboxes/metabox.options.permissions.php @@ -0,0 +1,58 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + */ + +?><!-- assets/templates/metaboxes/metabox.options.permissions.php --> +<?php + +/** + * Before Permissions section. + * + * @since 5.52 + */ +do_action('civicrm/metabox/permissions/pre'); + +?> +<div class="permissions_error notice notice-error inline" style="background-color: #f7f7f7; display: none;"> + <p></p> +</div> +<div class="permissions_success notice notice-success inline" style="background-color: #f7f7f7; display: none;"> + <p></p> +</div> + +<p><?php esc_html_e('You may need all CiviCRM permissions to be exposed as capabilities in WordPress, e.g. when you want them to be discoverable by other plugins. CiviCRM can do this by creating a role called "CiviCRM Admin" that has the complete set of CiviCRM capabilities. If you choose not to create the "CiviCRM Admin" role, then refreshing will just rebuild the existing set of capabilities.', 'civicrm'); ?></p> + +<label for="permissions_role" class="screen-reader-text"><?php esc_html_e('CiviCRM Admin Role', 'civicrm'); ?></label> +<select name="permissions_role" id="permissions_role"> + <option value="enable"<?php echo $selected_enable; ?>><?php esc_html_e('Enable the CiviCRM Admin role', 'civicrm'); ?></option> + <option value="disable"<?php echo $selected_disable; ?>><?php esc_html_e('Do not enable the CiviCRM Admin role', 'civicrm'); ?></option> +</select> + +<p class="submit"> + <?php submit_button(esc_html__('Refresh Permissions', 'civicrm'), 'primary', 'civicrm_permissions_submit', FALSE, $options); ?> + <span class="spinner"></span> +</p> +<br class="clear"> +<?php + +/** + * After Permissions section. + * + * @since 5.52 + */ +do_action('civicrm/metabox/permissions/post'); diff --git a/civicrm.php b/civicrm.php index 6be9d3212aaf7ca2534562ce5f7e54454dfa695e..ec56baedf68c2f0d199b7fade0075263ab9bae87 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.51.3 + * Version: 5.52.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -36,7 +36,7 @@ if (!defined('ABSPATH')) { } // Set version here: changing it forces Javascript and CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.51.3'); +define('CIVICRM_PLUGIN_VERSION', '5.52.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index b2febd9bca55d0c8542db333a55251dd6681e1a7..965e91d2912e2b1767fbe399c6d8f30a9c73c8f0 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -523,7 +523,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { // if the subject contains a ‘[case #…]’ string, file that activity on the related case (CRM-5916) $matches = []; - $subjectToMatch = $params['subject'] ?? NULL; + $subjectToMatch = $params['subject'] ?? ''; if (preg_match('/\[case #([0-9a-h]{7})\]/', $subjectToMatch, $matches)) { $key = CRM_Core_DAO::escapeString(CIVICRM_SITE_KEY); $hash = $matches[1]; diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php index 4be0a386ce5ddc7fe4ffa73ee88301c0c64f4337..834755f6089967890618477feab1ac7d76841402 100644 --- a/civicrm/CRM/Activity/DAO/Activity.php +++ b/civicrm/CRM/Activity/DAO/Activity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/Activity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:84bf6ac4a394e07666a4b2fb1456a794) + * (GenCodeChecksum:60c03ca565bfcb0379d4fe11bd8f7c10) */ /** @@ -66,7 +66,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { public $id; /** - * Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry. + * Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Entity table is discovered by filtering by the appropriate activity_type_id. * * @var int|string|null * (SQL type: int unsigned) @@ -165,7 +165,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { public $priority_id; /** - * Parent meeting ID (if this is a follow-up item). This is not currently implemented + * Parent meeting ID (if this is a follow-up item). * * @var int|string|null * (SQL type: int unsigned) @@ -366,7 +366,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'name' => 'source_record_id', 'type' => CRM_Utils_Type::T_INT, 'title' => ts('Source Record'), - 'description' => ts('Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry.'), + 'description' => ts('Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Entity table is discovered by filtering by the appropriate activity_type_id.'), 'where' => 'civicrm_activity.source_record_id', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', @@ -578,7 +578,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'name' => 'parent_id', 'type' => CRM_Utils_Type::T_INT, 'title' => ts('Parent Activity ID'), - 'description' => ts('Parent meeting ID (if this is a follow-up item). This is not currently implemented'), + 'description' => ts('Parent meeting ID (if this is a follow-up item).'), 'where' => 'civicrm_activity.parent_id', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', diff --git a/civicrm/CRM/Admin/Page/Mapping.php b/civicrm/CRM/Admin/Page/Mapping.php index a5d2737cf05c49a685b0787870a14c2321b84a29..eb3e596e36a31aadb4e5cefe89879f52f9a96b5a 100644 --- a/civicrm/CRM/Admin/Page/Mapping.php +++ b/civicrm/CRM/Admin/Page/Mapping.php @@ -123,8 +123,17 @@ class CRM_Admin_Page_Mapping extends CRM_Core_Page_Basic { * Run the basic page. */ public function run() { - $sort = 'mapping_type asc'; - return parent::run($sort); + $sort = 'mapping_type_id ASC, name ASC'; + return parent::run(NULL, NULL, $sort); + } + + /** + * Get any properties that should always be present in each row (null if no value). + * + * @return array + */ + protected function getExpectedRowProperties(): array { + return ['description']; } } diff --git a/civicrm/CRM/Case/Form/CaseView.php b/civicrm/CRM/Case/Form/CaseView.php index 2123f2f7ee281deeb68865dc63dad436f005c6ef..75b35d48c8e1a436de6029d14cd2706d1c916f99 100644 --- a/civicrm/CRM/Case/Form/CaseView.php +++ b/civicrm/CRM/Case/Form/CaseView.php @@ -294,7 +294,8 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { $this->buildMergeCaseForm(); //call activity form - self::activityForm($this, $aTypes); + // @todo seems a little odd to call "self" but pass $this in a form function? The only other place this is called from is one place in civihr. + self::activityForm($this); //get case related relationships (Case Role) $caseRelationships = CRM_Case_BAO_Case::getCaseRoles($this->_contactID, $this->_caseID, NULL, FALSE); @@ -468,10 +469,8 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { /** * Build the activity selector/datatable * @param CRM_Core_Form $form - * @param array $aTypes - * To include acivities related to current case id $form->_caseID. */ - public static function activityForm($form, $aTypes = []) { + public static function activityForm($form) { $caseRelationships = CRM_Case_BAO_Case::getCaseRoles($form->_contactID, $form->_caseID); //build reporter select $reporters = ["" => ts(' - any reporter - ')]; @@ -480,16 +479,22 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { } $form->add('select', 'reporter_id', ts('Reporter/Role'), $reporters, FALSE, ['id' => 'reporter_id_' . $form->_caseID]); - // take all case activity types for search filter, CRM-7187 + // List all the activity types that have been used on this case $aTypesFilter = []; - $allCaseActTypes = CRM_Case_PseudoConstant::caseActivityType(); - foreach ($allCaseActTypes as $typeDetails) { - if (!in_array($typeDetails['name'], ['Open Case'])) { - $aTypesFilter[$typeDetails['id']] = $typeDetails['label'] ?? NULL; - } + $activity_types_on_case = \Civi\Api4\CaseActivity::get() + ->addWhere('case_id', '=', $form->_caseID) + // we want to include deleted too since the filter can search for deleted + ->addWhere('activity_id.is_deleted', 'IN', [0, 1]) + // technically correct, but this might end up excluding some deleted ones depending on how they got deleted + // ->addWhere('activity_id.is_current_revision', '=', 1) + ->addSelect('activity_id.activity_type_id', 'activity_id.activity_type_id:label') + ->addGroupBy('activity_id.activity_type_id') + // this creates strange SQL - if it is too slow could sort in php instead + ->addOrderBy('activity_id.activity_type_id:label', 'ASC') + ->execute(); + foreach ($activity_types_on_case as $typeDetails) { + $aTypesFilter[$typeDetails['activity_id.activity_type_id']] = $typeDetails['activity_id.activity_type_id:label']; } - $aTypesFilter = $aTypesFilter + $aTypes; - asort($aTypesFilter); $form->add('select', 'activity_type_filter_id', ts('Activity Type'), ['' => ts('- select activity type -')] + $aTypesFilter, FALSE, ['id' => 'activity_type_filter_id_' . $form->_caseID]); $activityStatus = CRM_Core_PseudoConstant::activityStatus(); diff --git a/civicrm/CRM/Case/Form/Task/Batch.php b/civicrm/CRM/Case/Form/Task/Batch.php index ed0d9e050cdd2abb37bee23207a297adda3511d0..2425a1eaa703c636539cf7cec010a0d2e89e723b 100644 --- a/civicrm/CRM/Case/Form/Task/Batch.php +++ b/civicrm/CRM/Case/Form/Task/Batch.php @@ -30,6 +30,33 @@ class CRM_Case_Form_Task_Batch extends CRM_Core_Form_Task_Batch { */ public static $entityShortname = 'case'; + /** + * Get the name of the table for the relevant entity. + * + * @return string + */ + public function getTableName() { + return $this::$tableName; + } + + /** + * Get the query mode (eg. CRM_Core_BAO_Query::MODE_CASE) + * + * @return int + */ + public function getQueryMode() { + return CRM_Contact_BAO_Query::MODE_CASE; + } + + /** + * Get the group by clause for the component. + * + * @return string + */ + public function getEntityAliasField() { + return $this::$entityShortname . '_id'; + } + /** * Process the form after the input has been submitted and validated. * diff --git a/civicrm/CRM/Case/Form/Task/PickProfile.php b/civicrm/CRM/Case/Form/Task/PickProfile.php index 4c9acd0650bc4a37ec4ad2c448053ffa96078a8a..e69efc7804f7b268ff81e8028baf4efea9294272 100644 --- a/civicrm/CRM/Case/Form/Task/PickProfile.php +++ b/civicrm/CRM/Case/Form/Task/PickProfile.php @@ -33,4 +33,31 @@ class CRM_Case_Form_Task_PickProfile extends CRM_Core_Form_Task_PickProfile { */ public static $entityShortname = 'case'; + /** + * Get the name of the table for the relevant entity. + * + * @return string + */ + public function getTableName() { + return $this::$tableName; + } + + /** + * Get the query mode (eg. CRM_Core_BAO_Query::MODE_CASE) + * + * @return int + */ + public function getQueryMode() { + return CRM_Contact_BAO_Query::MODE_CASE; + } + + /** + * Get the group by clause for the component. + * + * @return string + */ + public function getEntityAliasField() { + return $this::$entityShortname . '_id'; + } + } diff --git a/civicrm/CRM/Case/Page/AJAX.php b/civicrm/CRM/Case/Page/AJAX.php index ce0d51b0879007735560a3db437996d07ef15851..dcb75c10ff8874d59ec2c0c18c12cc36775d0379 100644 --- a/civicrm/CRM/Case/Page/AJAX.php +++ b/civicrm/CRM/Case/Page/AJAX.php @@ -83,7 +83,7 @@ class CRM_Case_Page_AJAX { /** * @throws \CiviCRM_API3_Exception */ - public function caseDetails() { + public static function caseDetails() { $caseId = CRM_Utils_Type::escape($_GET['caseId'], 'Positive'); $case = civicrm_api3('Case', 'getsingle', [ @@ -98,7 +98,7 @@ class CRM_Case_Page_AJAX { <tr><td>" . ts('Case Type') . "</td><td>{$caseTypes[$case['case_type_id']]}</td></tr> <tr><td>" . ts('Case Status') . "</td><td>{$caseStatuses[$case['status_id']]}</td></tr> <tr><td>" . ts('Case Start Date') . "</td><td>" . CRM_Utils_Date::customFormat($case['start_date']) . "</td></tr> - <tr><td>" . ts('Case End Date') . "</td><td></td></tr>" . CRM_Utils_Date::customFormat($case['end_date']) . "</table>"; + <tr><td>" . ts('Case End Date') . "</td><td>" . (isset($case['end_date']) ? CRM_Utils_Date::customFormat($case['end_date']) : '') . "</td></tr></table>"; if (CRM_Utils_Array::value('snippet', $_GET) == 'json') { CRM_Core_Page_AJAX::returnJsonResponse($caseDetails); diff --git a/civicrm/CRM/Case/XMLRepository.php b/civicrm/CRM/Case/XMLRepository.php index 9317db9b23ff39b9716dd18ad5951349e165d4a4..000ccdb52f651844ecb82136d7ad5a668c077e47 100644 --- a/civicrm/CRM/Case/XMLRepository.php +++ b/civicrm/CRM/Case/XMLRepository.php @@ -148,7 +148,7 @@ class CRM_Case_XMLRepository { */ public function findXmlFile($caseType) { // first check custom templates directory - $fileName = NULL; + $fileName = ''; if (!$fileName || !file_exists($fileName)) { $caseTypesViaHook = $this->getCaseTypesViaHook(); diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index c0928f3e6637b074bc2378358d1ec29aac414ab9..afb00ab123bc339fbe918975f14b82b6cfcc0e9e 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -163,10 +163,10 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact implements Civi\Co // Note also orgs will get ellipsified, but if we do that here then // some existing tests on individual fail. // Also api v3 will enforce org naming length by failing, v4 will truncate. - if (mb_strlen($contact->display_name, 'UTF-8') > 128) { + if (mb_strlen(($contact->display_name ?? ''), 'UTF-8') > 128) { $contact->display_name = mb_substr($contact->display_name, 0, 128, 'UTF-8'); } - if (mb_strlen($contact->sort_name, 'UTF-8') > 128) { + if (mb_strlen(($contact->sort_name ?? ''), 'UTF-8') > 128) { $contact->sort_name = mb_substr($contact->sort_name, 0, 128, 'UTF-8'); } diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index ce5ca8eebec0d7910325a0b87b863a4b5342122e..20a918c3b8e2be1a370ef97e625c983c7f8f9bcc 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -6309,15 +6309,13 @@ AND displayRelType.is_active = 1 public static function getWildCardedValue($wildcard, $op, $value) { if ($wildcard && $op === 'LIKE') { if (CRM_Core_Config::singleton()->includeWildCardInName && (substr($value, 0, 1) != '%')) { - return "%$value%"; + $value = "%$value"; } - else { - return "$value%"; + if (substr($value, -1, 1) != '%') { + $value = "$value%"; } } - else { - return "$value"; - } + return "$value"; } /** diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 800c28ac9437b644f500c9fbc3b9e89729ace6e1..0ad9215b24429ce6d653b9b94e3d9cad8805289d 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -16,7 +16,6 @@ use Civi\Api4\ContributionRecur; use Civi\Api4\LineItem; use Civi\Api4\ContributionSoft; use Civi\Api4\PaymentProcessor; -use Civi\Api4\PledgePayment; /** * @@ -506,11 +505,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution im CRM_Contribute_BAO_ContributionSoft::processSoftContribution($params, $contribution); - if (!empty($params['id']) && !empty($params['contribution_status_id']) - && CRM_Core_Component::isEnabled('CiviPledge') - ) { - self::disconnectPledgePaymentsIfCancelled((int) $params['id'], CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution_status_id'])); - } $transaction->commit(); if (empty($contribution->contact_id)) { @@ -1107,44 +1101,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution im return TRUE; } - /** - * Disconnect pledge payments from cancelled or failed contributions. - * - * If the contribution has been cancelled or has failed check to - * see if it is linked to a pledge and unlink it. - * - * @param int $pledgePaymentID - * @param string $contributionStatus - * - * @throws \API_Exception - * @throws \Civi\API\Exception\UnauthorizedException - */ - protected static function disconnectPledgePaymentsIfCancelled(int $pledgePaymentID, $contributionStatus): void { - if (!in_array($contributionStatus, ['Failed', 'Cancelled'], TRUE)) { - return; - } - // Check first since just doing an update could be locking under load. - $pledgePayment = PledgePayment::get(FALSE) - ->addWhere('contribution_id', '=', $pledgePaymentID) - ->setSelect(['id', 'pledge_id', 'scheduled_date', 'scheduled_amount']) - ->execute() - ->first(); - if (!empty($pledgePayment)) { - PledgePayment::update(FALSE)->setValues([ - 'contribution_id' => NULL, - 'actual_amount' => NULL, - 'status_id:name' => 'Pending', - // We need to set these fields for now because the PledgePayment::create - // function doesn't handled updates well at the moment. Test cover - // in testCancelOrderWithPledge. - 'scheduled_date' => $pledgePayment['scheduled_date'], - 'installment_amount' => $pledgePayment['scheduled_amount'], - 'installments' => 1, - 'pledge_id' => $pledgePayment['pledge_id'], - ])->addWhere('id', '=', $pledgePayment['id'])->execute(); - } - } - /** * @param string $status * @param null $startDate @@ -2184,6 +2140,12 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ * Gaps in the above ( * * @param array $input + * Keys are all optional, if not supplied the template contribution's values are used. + * The template contribution is either the actual template or the latest added contribution + * for the ContributionRecur specified in $contributionParams['contribution_recur_id']. + * - total_amount + * - financial_type_id + * - campaign_id * * @param array $contributionParams * @@ -2200,12 +2162,11 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ protected static function repeatTransaction(array $input, array $contributionParams) { $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution( (int) $contributionParams['contribution_recur_id'], - array_filter([ + [ 'total_amount' => $input['total_amount'] ?? NULL, 'financial_type_id' => $input['financial_type_id'] ?? NULL, 'campaign_id' => $input['campaign_id'] ?? NULL, - // array_filter with strlen filters out NULL, '' and FALSE but not 0. - ], 'strlen') + ] ); $contributionParams['line_item'] = $templateContribution['line_item']; $contributionParams['status_id'] = 'Pending'; @@ -2223,6 +2184,9 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $temporaryObject->copyCustomFields($templateContribution['id'], $createContribution['id']); // Add new soft credit against current $contribution. CRM_Contribute_BAO_ContributionRecur::addrecurSoftCredit($contributionParams['contribution_recur_id'], $createContribution['id']); + CRM_Contribute_BAO_ContributionRecur::updateRecurLinkedPledge($createContribution['id'], $contributionParams['contribution_recur_id'], + $contributionParams['status_id'], $contributionParams['total_amount']); + return $createContribution; } @@ -3821,7 +3785,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac 'contribution_status_id', 'card_type_id', 'pan_truncation', - 'financial_type_id', ]; $paymentProcessorId = $input['payment_processor_id'] ?? NULL; @@ -3846,6 +3809,11 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac if (!$contributionID) { $contributionResult = self::repeatTransaction($input, $contributionParams); $contributionID = $contributionResult['id']; + if ($contributionParams['contribution_status_id'] === $completedContributionStatusID) { + // Ideally add deprecation notice here & only accept pending for repeattransaction. + return self::completeOrder($input, NULL, $contributionID); + } + return $contributionResult; } if ($contributionParams['contribution_status_id'] === $completedContributionStatusID) { @@ -3882,9 +3850,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac if (!empty($contributionSoft)) { CRM_Contribute_BAO_ContributionSoft::pcpNotifyOwner($contributionID, $contributionSoft); } - // @todo - check if Contribution::create does this, test, remove. - CRM_Contribute_BAO_ContributionRecur::updateRecurLinkedPledge($contributionID, $recurringContributionID, - $contributionParams['contribution_status_id'], $input['amount']); if (self::isEmailReceipt($input, $contributionID, $recurringContributionID)) { civicrm_api3('Contribution', 'sendconfirmation', [ @@ -4346,6 +4311,9 @@ LIMIT 1;"; 'extra' => '', ]; } + + CRM_Utils_Hook::links('contribution.edit.action', 'Contribution', $id, $actionLinks); + return $actionLinks; } diff --git a/civicrm/CRM/Contribute/BAO/ContributionRecur.php b/civicrm/CRM/Contribute/BAO/ContributionRecur.php index 5928599940e9db7b9a19533446ca13e2a37fcd55..e54cd915faed91f88ad048ed57ff861b46008628 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/BAO/ContributionRecur.php @@ -9,15 +9,17 @@ +--------------------------------------------------------------------+ */ +use Brick\Money\Money; use Civi\Api4\Contribution; use Civi\Api4\ContributionRecur; +use Civi\Api4\LineItem; /** * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_ContributionRecur { +class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_ContributionRecur implements Civi\Test\HookInterface { /** * Create recurring contribution. @@ -94,6 +96,40 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi return $recurring; } + /** + * Event fired after modifying a recurring contribution. + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'edit') { + if (is_numeric($event->object->amount)) { + $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($event->object->id); + if (empty($templateContribution['id'])) { + return; + } + $lines = LineItem::get(FALSE) + ->addWhere('contribution_id', '=', $templateContribution['id']) + ->addWhere('contribution_id.is_template', '=', TRUE) + ->addSelect('contribution_id.total_amount') + ->execute(); + if (count($lines) === 1) { + $contributionAmount = $lines->first()['contribution_id.total_amount']; + // USD here is just ensuring both are in the same format. + if (Money::of($contributionAmount, 'USD')->compareTo(Money::of($event->object->amount, 'USD'))) { + // If different then we need to update + // the contribution. Note that if this is being called + // as a result of the contribution having been updated then there will + // be no difference. + Contribution::update(FALSE) + ->addWhere('id', '=', $templateContribution['id']) + ->setValues(['total_amount' => $event->object->amount]) + ->execute(); + } + } + } + } + } + /** * Check if there is a recurring contribution with the same trxn_id or invoice_id. * @@ -488,30 +524,29 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) * Later we might merge in data stored against the contribution recur record rather than just return the contribution. * * @param int $id - * @param array $overrides + * @param array $inputOverrides * Parameters that should be overridden. Add unit tests if using parameters other than total_amount & financial_type_id. * * @return array * * @throws \API_Exception */ - public static function getTemplateContribution(int $id, $overrides = []): array { - $recurFields = ['is_test', 'financial_type_id', 'total_amount', 'campaign_id']; + public static function getTemplateContribution(int $id, array $inputOverrides = []): array { $recurringContribution = ContributionRecur::get(FALSE) ->addWhere('id', '=', $id) - ->setSelect($recurFields) + ->setSelect(['is_test', 'financial_type_id', 'amount', 'campaign_id']) ->execute() ->first(); - // If financial_type_id or total_amount are set on the - // recurring they are overrides, but of lower precedence - // than input parameters. + + // Parameters passed into the function take precedences, falling back to those loaded from + // the recurring contribution. // we filter out null, '' and FALSE but not zero - I'm on the fence about zero. - $overrides = array_filter(array_merge( - // We filter recurringContribution as we only want the fields we asked for - // and specifically don't want 'id' added to overrides. - array_intersect_key($recurringContribution, array_fill_keys($recurFields, 1)), - $overrides - ), 'strlen'); + $overrides = array_filter([ + 'is_test' => $inputOverrides['is_test'] ?? $recurringContribution['is_test'], + 'financial_type_id' => $inputOverrides['financial_type_id'] ?? $recurringContribution['financial_type_id'], + 'campaign_id' => $inputOverrides['campaign_id'] ?? ($recurringContribution['campaign_id'] ?? NULL), + 'total_amount' => $inputOverrides['total_amount'] ?? $recurringContribution['amount'], + ], 'strlen'); // First look for new-style template contribution with is_template=1 $templateContributions = Contribution::get(FALSE) @@ -546,8 +581,8 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) // The handling of the line items is managed in BAO_Order so this // is whether we should override on the contribution. Arguably the 2 should // be decoupled. - if (count($lineItems) > 1 && isset($overrides['financial_type_id'])) { - unset($overrides['financial_type_id']); + if (count($lineItems) > 1) { + unset($overrides['financial_type_id'], $overrides['total_amount']); } $result = array_merge($templateContribution, $overrides); // Line items aren't always written to a contribution, for mystery reasons. @@ -766,63 +801,40 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) */ public static function updateRecurLinkedPledge($contributionID, $contributionRecurID, $contributionStatusID, $contributionAmount) { $returnProperties = ['id', 'pledge_id']; - $paymentDetails = $paymentIDs = []; + $paymentDetails = []; - if (CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'contribution_id', $contributionID, - $paymentDetails, $returnProperties - ) - ) { - foreach ($paymentDetails as $key => $value) { - $paymentIDs[] = $value['id']; - $pledgeId = $value['pledge_id']; - } - } - else { - //payment is not already linked - if it is linked with a pledge we need to create a link. - // return if it is not recurring contribution - if (!$contributionRecurID) { - return; - } + $relatedContributions = new CRM_Contribute_DAO_Contribution(); + $relatedContributions->contribution_recur_id = $contributionRecurID; + $relatedContributions->find(); - $relatedContributions = new CRM_Contribute_DAO_Contribution(); - $relatedContributions->contribution_recur_id = $contributionRecurID; - $relatedContributions->find(); - - while ($relatedContributions->fetch()) { - CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'contribution_id', $relatedContributions->id, - $paymentDetails, $returnProperties - ); - } - - if (empty($paymentDetails)) { - // payment is not linked with a pledge and neither are any other contributions on this - return; - } + while ($relatedContributions->fetch()) { + CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'contribution_id', $relatedContributions->id, + $paymentDetails, $returnProperties + ); + } - foreach ($paymentDetails as $key => $value) { - $pledgeId = $value['pledge_id']; - } + if (empty($paymentDetails)) { + // payment is not linked with a pledge and neither are any other contributions on this + return; + } - // we have a pledge now we need to get the oldest unpaid payment - $paymentDetails = CRM_Pledge_BAO_PledgePayment::getOldestPledgePayment($pledgeId); - if (empty($paymentDetails['id'])) { - // we can assume this pledge is now completed - // return now so we don't create a core error & roll back - return; - } - $paymentDetails['contribution_id'] = $contributionID; - $paymentDetails['status_id'] = $contributionStatusID; - $paymentDetails['actual_amount'] = $contributionAmount; + foreach ($paymentDetails as $value) { + $pledgeId = $value['pledge_id']; + } - // put contribution against it - $payment = civicrm_api3('PledgePayment', 'create', $paymentDetails); - $paymentIDs[] = $payment['id']; + // we have a pledge now we need to get the oldest unpaid payment + $paymentDetails = CRM_Pledge_BAO_PledgePayment::getOldestPledgePayment($pledgeId); + if (empty($paymentDetails['id'])) { + // we can assume this pledge is now completed + // return now so we don't create a core error & roll back + return; } + $paymentDetails['contribution_id'] = $contributionID; + $paymentDetails['status_id'] = $contributionStatusID; + $paymentDetails['actual_amount'] = $contributionAmount; - // update pledge and corresponding payment statuses - CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeId, $paymentIDs, $contributionStatusID, - NULL, $contributionAmount - ); + // put contribution against it + civicrm_api3('PledgePayment', 'create', $paymentDetails); } /** diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index 020feb4512fde6bb1f59b4f9a68c34353126542f..e0c6f0522f57334da01fb3b2e346aefe634e34ec 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -280,7 +280,10 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->setFormAmountFields($this->_params['priceSetId']); } - $this->_params['tax_amount'] = $this->get('tax_amount'); + if (!empty($this->get('tax_amount'))) { + CRM_Core_Error::deprecatedWarning('tax_amount should be not passed in'); + $this->_params['tax_amount'] = $this->get('tax_amount'); + } $this->_useForMember = $this->get('useForMember'); CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($this->_params); @@ -492,15 +495,18 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // Make a copy of line items array to use for display only $tplLineItems = $this->_lineItem; if (CRM_Invoicing_Utils::isInvoicingEnabled()) { - // @todo $params seems like exactly the wrong place to get totalTaxAmount from - // this is a calculated variable so we it should be transparent how we - // calculated it rather than coming from 'params' - $this->assign('totalTaxAmount', $params['tax_amount']); + $taxAmount = 0; + foreach ($tplLineItems ?? [] as $lineItems) { + foreach ($lineItems as $lineItem) { + $taxAmount += (float) ($lineItem['tax_amount'] ?? 0); + } + } + + $this->assign('totalTaxAmount', $taxAmount); + $this->assign('taxTerm', CRM_Invoicing_Utils::getTaxTerm()); } - $this->assignLineItemsToTemplate($tplLineItems); $isDisplayLineItems = $this->_priceSetId && !CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config'); - $this->assign('isDisplayLineItems', $isDisplayLineItems); if (!$isDisplayLineItems) { @@ -509,6 +515,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->assign('is_quick_config', 1); $this->_params['is_quick_config'] = 1; } + else { + $this->assignLineItemsToTemplate($tplLineItems); + } if (!empty($params['selectProduct']) && $params['selectProduct'] !== 'no_thanks') { $option = $params['options_' . $params['selectProduct']] ?? NULL; @@ -565,8 +574,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->assign('priceSetID', $this->_priceSetId); // The concept of contributeMode is deprecated. - // the is_monetary concept probably should be too as it can be calculated from - // the existence of 'amount' & seems fragile. if ($this->_contributeMode === 'notify' || $this->_amount <= 0.0 || $this->_params['is_pay_later'] ) { @@ -1124,6 +1131,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // lets store it in the form variable so postProcess hook can get to this and use it $form->_contributionID = $contribution->id; } + // @fixme: This is assigned to the smarty template for the receipt. It's value should be calculated and not taken from $params. $form->assign('totalTaxAmount', $params['tax_amount'] ?? NULL); // process soft credit / pcp params first @@ -1418,12 +1426,11 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * @param array $membershipParams * @param int $contactID * @param array $customFieldsFormatted - * @param array $fieldTypes * @param array $premiumParams * @param array $membershipLineItems * Line items specifically relating to memberships. */ - protected function processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, + protected function processMembership($membershipParams, $contactID, $customFieldsFormatted, $premiumParams, $membershipLineItems): void { $membershipTypeIDs = (array) $membershipParams['selectMembership']; @@ -1454,7 +1461,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $membershipParams['contribution_source'] = $this->_params['membership_source']; } - $this->postProcessMembership($membershipParams, $contactID, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeIDs, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $financialTypeID, + $this->postProcessMembership($membershipParams, $contactID, $premiumParams, $customFieldsFormatted, $membershipType, $membershipTypeIDs, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $financialTypeID, $membershipLineItems); $this->assign('membership_assign', TRUE); @@ -1471,7 +1478,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * * @param array $premiumParams * @param null $customFieldsFormatted - * @param null $includeFieldTypes * * @param array $membershipDetails * @@ -1492,7 +1498,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ protected function postProcessMembership( $membershipParams, $contactID, $premiumParams, - $customFieldsFormatted, $includeFieldTypes, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID, + $customFieldsFormatted, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID, $isProcessSeparateMembershipTransaction, $financialTypeID, $unprocessedLineItems) { // Assign $this to $form while we eliminate it. $form = $this; @@ -1781,7 +1787,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr CRM_Contribute_BAO_ContributionPage::sendMail($contactID, $emailValues, $isTest, FALSE, - $includeFieldTypes + ['Contact', 'Organization', 'Membership'] ); } @@ -2523,7 +2529,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->_params['campaign_id'] = $membershipParams['onbehalf']['member_campaign_id']; } - $customFieldsFormatted = $fieldTypes = []; + $customFieldsFormatted = []; if (!empty($membershipParams['onbehalf']) && is_array($membershipParams['onbehalf']) ) { @@ -2540,7 +2546,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr ); } } - $fieldTypes = ['Contact', 'Organization', 'Membership']; } $membershipParams = $this->getMembershipParamsFromPriceSet($membershipParams); @@ -2559,7 +2564,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } try { - $this->processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems); + $this->processMembership($membershipParams, $contactID, $customFieldsFormatted, $premiumParams, $membershipLineItems); } catch (\Civi\Payment\Exception\PaymentProcessorException $e) { CRM_Core_Session::singleton()->setStatus($e->getMessage()); diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index 3d8c6abafb031245ebe87f10aad58ab3080d6db2..9e82c1f81b03885468fa9dfa3a840c60afe03f81 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -1363,10 +1363,6 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $priceSetId); } - if ($params['tax_amount']) { - $this->set('tax_amount', $params['tax_amount']); - } - if ($proceFieldAmount) { $lineItem[$params['priceSetId']][$fieldOption]['unit_price'] = $proceFieldAmount; $lineItem[$params['priceSetId']][$fieldOption]['line_total'] = $proceFieldAmount; diff --git a/civicrm/CRM/Contribute/Form/Task/Invoice.php b/civicrm/CRM/Contribute/Form/Task/Invoice.php index 9cc366f0507a9cf3fd316142d98e499431c325f3..d50f2b571f2e1346eb9f17e991ceb8531a33dc31 100644 --- a/civicrm/CRM/Contribute/Form/Task/Invoice.php +++ b/civicrm/CRM/Contribute/Form/Task/Invoice.php @@ -239,6 +239,9 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { $contribution = new CRM_Contribute_BAO_Contribution(); $contribution->id = $contribID; $contribution->fetch(); + // @todo this is only used now to load the event title, it causes an enotice + // and calls deprecated code. If we decide a contribution title is a + // 'real thing' then we should create a token. $contribution->loadRelatedObjects($input, $ids, TRUE); $input['amount'] = $contribution->total_amount; @@ -357,13 +360,21 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { // parameters to be assign for template $tplParams = [ + // @todo is a 'title' a real thing - is so, it should be token. 'title' => $title, + // @todo used in the subject but analysis of ^^ would remove 'component' => $input['component'], + // @todo not used in shipped template for a very long time, if ever, remove + // token is available. 'id' => $contribution->id, + // @todo not used in shipped template from 5.52 'source' => $source, + // @todo not used in shipped template from 5.52 'invoice_number' => $contribution->invoice_number, + // @todo not used in shipped template from 5.52 'invoice_id' => $contribution->invoice_id, 'resourceBase' => $config->userFrameworkResourceURL, + // @todo not used in shipped template for a long time 'defaultCurrency' => $config->defaultCurrency, 'amount' => $contribution->total_amount, 'amountDue' => $amountDue, @@ -373,11 +384,17 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { 'notes' => $invoiceNotes, 'lineItem' => $lineItem, 'dataArray' => $dataArray, + // @todo not used in shipped template from 5.52 'refundedStatusId' => $refundedStatusId, + // @todo not used in shipped template from 5.52 'pendingStatusId' => $pendingStatusId, + // @todo not used in shipped template from 5.52 'cancelledStatusId' => $cancelledStatusId, + // @todo not used in shipped template from 5.52 'contribution_status_id' => $contribution->contribution_status_id, + // @todo not used in shipped template for a long time 'contributionStatusName' => CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contribution->contribution_status_id), + // @todo appears to be the same as {contribution.tax_amount} 'subTotal' => $subTotal, 'street_address' => $billingAddress['street_address'] ?? NULL, 'supplemental_address_1' => $billingAddress['supplemental_address_1'] ?? NULL, @@ -390,7 +407,9 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { // Kept for backwards compatibility 'stateProvinceAbbreviation' => $billingAddress['state_province_abbreviation'] ?? NULL, 'country' => $billingAddress['country'] ?? NULL, + // @todo not used in shipped template from 5.52 'is_pay_later' => $contribution->is_pay_later, + // @todo not used in shipped template from 5.52 - from here down 'organization_name' => $contribution->_relatedObjects['contact']->organization_name, 'domain_organization' => $domain->name, 'domain_street_address' => CRM_Utils_Array::value('street_address', CRM_Utils_Array::value('1', $locationDefaults['address'])), @@ -411,8 +430,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { $pdfFileName = $contribution->invoice_number . ".pdf"; $sendTemplateParams = [ - 'groupName' => 'msg_tpl_workflow_contribution', - 'valueName' => 'contribution_invoice_receipt', + 'workflow' => 'contribution_invoice_receipt', 'tplParams' => $tplParams, 'PDFFilename' => $pdfFileName, 'tokenContext' => ['contributionId' => $contribution->id, 'contactId' => $contribution->contact_id], @@ -451,7 +469,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { // condition to check for download PDF Invoice or email Invoice if ($invoiceElements['createPdf']) { - list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); + [$sent, $subject, $message, $html] = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); if (isset($params['forPage'])) { return $html; } @@ -478,7 +496,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { $sendTemplateParams['cc'] = $values['cc_receipt'] ?? NULL; $sendTemplateParams['bcc'] = $values['bcc_receipt'] ?? NULL; - list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); + [$sent, $subject, $message, $html] = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); // functions call for adding activity with attachment // make sure page layout is same for email and download invoices. $fileName = self::putFile($html, $pdfFileName, [ @@ -497,7 +515,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { $sendTemplateParams['cc'] = $values['cc_confirm'] ?? NULL; $sendTemplateParams['bcc'] = $values['bcc_confirm'] ?? NULL; - list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); + [$sent, $subject, $message, $html] = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); // functions call for adding activity with attachment $fileName = self::putFile($html, $pdfFileName); self::addActivities($subject, $contribution->contact_id, $fileName, $params, $contribution->id); diff --git a/civicrm/CRM/Contribute/Page/Tab.php b/civicrm/CRM/Contribute/Page/Tab.php index f8ab5c536e1c52402169fde3b970876f5f65f7bb..3cb0cb85bdc54ab61d0d0181bd5d70ff59e4c155 100644 --- a/civicrm/CRM/Contribute/Page/Tab.php +++ b/civicrm/CRM/Contribute/Page/Tab.php @@ -326,6 +326,8 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { private function buildRecurringContributionsArray($recurContributions) { $liveRecurringContributionCount = 0; foreach ($recurContributions as $recurId => $recurDetail) { + // API3 does not return "installments" if it is not set. But we need it set to avoid PHP notices on ContributionRecurSelector.tpl + $recurContributions[$recurId]['installments'] = $recurDetail['installments'] ?? NULL; // Is recurring contribution active? $recurContributions[$recurId]['is_active'] = !in_array(CRM_Contribute_PseudoConstant::contributionStatus($recurDetail['contribution_status_id'], 'name'), CRM_Contribute_BAO_ContributionRecur::getInactiveStatuses()); if ($recurContributions[$recurId]['is_active']) { diff --git a/civicrm/CRM/Contribute/WorkflowMessage/Contribution/BasicContribution.php b/civicrm/CRM/Contribute/WorkflowMessage/Contribution/BasicContribution.php index 954385ac82e7b848b461c24511303598de345352..002426f7b2c2faa6b27207f9d1415c6c85144c77 100644 --- a/civicrm/CRM/Contribute/WorkflowMessage/Contribution/BasicContribution.php +++ b/civicrm/CRM/Contribute/WorkflowMessage/Contribution/BasicContribution.php @@ -19,11 +19,18 @@ class CRM_Contribute_WorkflowMessage_Contribution_BasicContribution extends Work $workflows = ['contribution_online_receipt', 'contribution_offline_receipt', 'contribution_invoice_receipt']; foreach ($workflows as $workflow) { yield [ - 'name' => 'workflow/' . $workflow . '/' . $this->getExampleName(), - 'title' => ts('Completed Contribution'), + 'name' => 'workflow/' . $workflow . '/basic_eur', + 'title' => ts('Completed Contribution') . ' : ' . 'EUR', 'tags' => ['preview'], 'workflow' => $workflow, ]; + yield [ + 'name' => 'workflow/' . $workflow . '/' . 'basic_cad', + 'title' => ts('Completed Contribution') . ' : ' . 'CAD', + 'tags' => ['preview'], + 'workflow' => 'contribution_offline_receipt', + 'currency' => 'CAD', + ]; } } @@ -33,14 +40,12 @@ class CRM_Contribute_WorkflowMessage_Contribution_BasicContribution extends Work * @param array $example * * @throws \API_Exception - * @throws \CRM_Core_Exception - * @throws \Civi\API\Exception\UnauthorizedException */ public function build(array &$example): void { $workFlow = WorkflowMessage::get(TRUE)->addWhere('name', '=', $example['workflow'])->execute()->first(); $this->setWorkflowName($workFlow['name']); $messageTemplate = new $workFlow['class'](); - $this->addExampleData($messageTemplate); + $this->addExampleData($messageTemplate, $example); $example['data'] = $this->toArray($messageTemplate); } @@ -48,16 +53,24 @@ class CRM_Contribute_WorkflowMessage_Contribution_BasicContribution extends Work * Add relevant example data. * * @param \CRM_Contribute_WorkflowMessage_ContributionOfflineReceipt|\CRM_Contribute_WorkflowMessage_ContributionOnlineReceipt|\CRM_Contribute_WorkflowMessage_ContributionInvoiceReceipt $messageTemplate + * @param array $example * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ - private function addExampleData(GenericWorkflowMessage $messageTemplate): void { + private function addExampleData(GenericWorkflowMessage $messageTemplate, $example): void { $messageTemplate->setContact(\Civi\Test::example('entity/Contact/Barb')); - $messageTemplate->setContribution(\Civi\Test::example('entity/Contribution/Euro5990/completed')); + $contribution = \Civi\Test::example('entity/Contribution/Euro5990/completed'); + if (isset($example['currency'])) { + $contribution['currency'] = $example['currency']; + } $mockOrder = new CRM_Financial_BAO_Order(); $mockOrder->setTemplateContributionID(50); $mockOrder->setPriceSetToDefault('contribution'); $messageTemplate->setOrder($mockOrder); + $messageTemplate->setContribution($contribution); } } diff --git a/civicrm/CRM/Core/Action.php b/civicrm/CRM/Core/Action.php index fc1dcd7c4a85c53fdbe738318a1c70aa8b21d78d..1267425c59da885d432660ab184fda96e354c053 100644 --- a/civicrm/CRM/Core/Action.php +++ b/civicrm/CRM/Core/Action.php @@ -373,7 +373,7 @@ class CRM_Core_Action { */ public static function &replace(&$str, &$values) { foreach ($values as $n => $v) { - $str = str_replace("%%$n%%", $v, $str); + $str = str_replace("%%$n%%", ($v ?? ''), ($str ?? '')); } return $str; } diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index d79d68cde91165fcdc49e0fb5132fb620a345120..33b564e682523938bf52cbb6d329c6e2490cbadd 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -585,22 +585,20 @@ FROM civicrm_action_schedule cas } /** + * Send the reminder email. + * * @param \Civi\Token\TokenRow $tokenRow * @param CRM_Core_DAO_ActionSchedule $schedule * @param int $toContactID + * * @return array * List of error messages. + * @throws \CRM_Core_Exception */ protected static function sendReminderEmail($tokenRow, $schedule, $toContactID): array { $toEmail = CRM_Contact_BAO_Contact::getPrimaryEmail($toContactID, TRUE); if (!$toEmail) { - return ["email_missing" => "Couldn't find recipient's email address."]; - } - - $body_text = $tokenRow->render('body_text'); - $body_html = $tokenRow->render('body_html'); - if (!$schedule->body_text) { - $body_text = CRM_Utils_String::htmlToText($body_html); + return ['email_missing' => "Couldn't find recipient's email address."]; } // set up the parameters for CRM_Utils_Mail::send @@ -613,19 +611,16 @@ FROM civicrm_action_schedule cas 'entity' => 'action_schedule', 'entity_id' => $schedule->id, ]; - - $preferredMailFormat = $tokenRow->render('preferred_mail_format'); - if (!$body_html || $preferredMailFormat === 'Text' || $preferredMailFormat === 'Both' - ) { - // render the & entities in text mode, so that the links work - $mailParams['text'] = str_replace('&', '&', $body_text); - } - if ($body_html && ($tokenRow->context['contact']['preferred_mail_format'] === 'HTML' || - $tokenRow->context['contact']['preferred_mail_format'] === 'Both' - ) - ) { - $mailParams['html'] = $body_html; + $body_text = $tokenRow->render('body_text'); + $mailParams['html'] = $tokenRow->render('body_html'); + // todo - remove these lines for body_text as there is similar handling in + // CRM_Utils_Mail::send() + if (!$schedule->body_text) { + $body_text = CRM_Utils_String::htmlToText($mailParams['html']); } + // render the & entities in text mode, so that the links work + $mailParams['text'] = str_replace('&', '&', $body_text); + $result = CRM_Utils_Mail::send($mailParams); if (!$result) { return ['email_fail' => 'Failed to send message']; diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index fab2821bfe493c8941eb130989d91ac284ced921..bfde273fb1af21cd3c066c6f2f5befe926468dbb 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -555,7 +555,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $fields = []; while (($dao->fetch()) != NULL) { - $regexp = preg_replace('/[.,;:!?]/', '', NULL); + $regexp = preg_replace('/[.,;:!?]/', '', ''); $fields[$dao->id]['id'] = $dao->id; $fields[$dao->id]['label'] = $dao->label; // This seems broken, but not in a new way. @@ -2112,7 +2112,7 @@ WHERE id IN ( %1, %2 ) //don't insert only value separator as default value, CRM-4579 $defaultValue = self::getOptionGroupDefault($params['option_group_id'], !empty($params['serialize'])); - if (!CRM_Utils_System::isNull(explode(CRM_Core_DAO::VALUE_SEPARATOR, $defaultValue))) { + if ($defaultValue !== NULL && !CRM_Utils_System::isNull(explode(CRM_Core_DAO::VALUE_SEPARATOR, $defaultValue))) { $params['default_value'] = $defaultValue; } } diff --git a/civicrm/CRM/Core/BAO/CustomOption.php b/civicrm/CRM/Core/BAO/CustomOption.php index 26d64936496ef9a652d2a361d75af8771d0e83ff..509849c665db0e3c22cac853600e4423448d26b8 100644 --- a/civicrm/CRM/Core/BAO/CustomOption.php +++ b/civicrm/CRM/Core/BAO/CustomOption.php @@ -194,12 +194,7 @@ AND g.id = v.option_group_id"; self::updateValue($optionId, $value); // also delete this option value - $query = " -DELETE -FROM civicrm_option_value -WHERE id = %1"; - $params = [1 => [$optionId, 'Integer']]; - CRM_Core_DAO::executeQuery($query, $params); + CRM_Core_BAO_OptionValue::deleteRecord(['id' => $optionId]); } } diff --git a/civicrm/CRM/Core/BAO/MessageTemplate.php b/civicrm/CRM/Core/BAO/MessageTemplate.php index 08491c2dbaf17d84046e4486848ea9a596b1f5fc..39228848c76741209b3e7fb200486ab95d21006e 100644 --- a/civicrm/CRM/Core/BAO/MessageTemplate.php +++ b/civicrm/CRM/Core/BAO/MessageTemplate.php @@ -330,20 +330,7 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate implemen 'PDFFilename' => NULL, ]; - // Some params have been deprecated/renamed. Synchronize old<=>new params. We periodically resync after exchanging data with other parties. - $sync = function () use (&$params, $modelDefaults, $viewDefaults) { - CRM_Utils_Array::pathSync($params, ['workflow'], ['valueName']); - CRM_Utils_Array::pathSync($params, ['tokenContext', 'contactId'], ['contactId']); - CRM_Utils_Array::pathSync($params, ['tokenContext', 'smarty'], ['disableSmarty'], function ($v, bool $isCanon) { - return !$v; - }); - - // Core#644 - handle Email ID passed as "From". - if (isset($params['from'])) { - $params['from'] = \CRM_Utils_Mail::formatFromAddress($params['from']); - } - }; - $sync(); + self::synchronizeLegacyParameters($params); // Allow WorkflowMessage to run any filters/mappings/cleanups. $model = $params['model'] ?? WorkflowMessage::create($params['workflow'] ?? 'UNKNOWN'); @@ -352,13 +339,13 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate implemen // Subsequent hooks use $params. Retaining the $params['model'] might be nice - but don't do it unless you figure out how to ensure data-consistency (eg $params['tplParams'] <=> $params['model']). // If you want to expose the model via hook, consider interjecting a new Hook::alterWorkflowMessage($model) between `importAll()` and `exportAll()`. - $sync(); + self::synchronizeLegacyParameters($params); $params = array_merge($modelDefaults, $viewDefaults, $envelopeDefaults, $params); CRM_Utils_Hook::alterMailParams($params, 'messageTemplate'); $mailContent = self::loadTemplate((string) $params['valueName'], $params['isTest'], $params['messageTemplateID'] ?? NULL, $params['groupName'] ?? '', $params['messageTemplate'], $params['subject'] ?? NULL); - $sync(); + self::synchronizeLegacyParameters($params); $rendered = CRM_Core_TokenSmarty::render(CRM_Utils_Array::subset($mailContent, ['text', 'html', 'subject']), $params['tokenContext'], $params['tplParams']); if (isset($rendered['subject'])) { $rendered['subject'] = trim(preg_replace('/[\r\n]+/', ' ', $rendered['subject'])); @@ -368,6 +355,26 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate implemen return [$mailContent, $params]; } + /** + * Some params have been deprecated/renamed. Synchronize old<=>new params. + * + * We periodically resync after exchanging data with other parties. + * + * @param array $params + */ + private static function synchronizeLegacyParameters(&$params) { + CRM_Utils_Array::pathSync($params, ['workflow'], ['valueName']); + CRM_Utils_Array::pathSync($params, ['tokenContext', 'contactId'], ['contactId']); + CRM_Utils_Array::pathSync($params, ['tokenContext', 'smarty'], ['disableSmarty'], function ($v, bool $isCanon) { + return !$v; + }); + + // Core#644 - handle Email ID passed as "From". + if (isset($params['from'])) { + $params['from'] = \CRM_Utils_Mail::formatFromAddress($params['from']); + } + } + /** * Send an email from the specified template based on an array of params. * diff --git a/civicrm/CRM/Core/BAO/SchemaHandler.php b/civicrm/CRM/Core/BAO/SchemaHandler.php index bda6dc09fa60d0936602e0327544ee3d1b4db7fe..0ee0b27c4cab5f0aa4ba3d251b348469fc6ce157 100644 --- a/civicrm/CRM/Core/BAO/SchemaHandler.php +++ b/civicrm/CRM/Core/BAO/SchemaHandler.php @@ -171,14 +171,14 @@ class CRM_Core_BAO_SchemaHandler { // Add index if field is searchable if it does not reference a foreign key // (skip indexing FK fields because it would be redundant to have 2 indexes) - if (!empty($params['searchable']) && empty($params['fk_table_name']) && substr($existingIndex, 0, 5) !== 'INDEX') { + if (!empty($params['searchable']) && empty($params['fk_table_name']) && substr($existingIndex ?? '', 0, 5) !== 'INDEX') { $sql .= $separator; $sql .= str_repeat(' ', 8); $sql .= $prefix; $sql .= "INDEX_{$params['name']} ( {$params['name']} )"; } // Drop search index if field is no longer searchable - elseif (empty($params['searchable']) && substr($existingIndex, 0, 5) === 'INDEX') { + elseif (empty($params['searchable']) && substr($existingIndex ?? '', 0, 5) === 'INDEX') { $sql .= $separator; $sql .= str_repeat(' ', 8); $sql .= "DROP INDEX $existingIndex"; @@ -737,7 +737,7 @@ MODIFY {$columnName} varchar( $length ) $existingIndex = $dao->Key_name; } $fkSql = self::buildForeignKeySQL($params, ",\n", "ADD ", $params['table_name']); - if (substr($existingIndex, 0, 2) === 'FK' && !$fkSql) { + if (substr(($existingIndex ?? ''), 0, 2) === 'FK' && !$fkSql) { $sql .= "$separator DROP FOREIGN KEY {$existingIndex},\nDROP INDEX {$existingIndex}"; $separator = ",\n"; } diff --git a/civicrm/CRM/Core/BAO/UFField.php b/civicrm/CRM/Core/BAO/UFField.php index 0bc9d2c2e237d45f8384b522bf03eeb6ad9875ba..9818e7b231862a5377b13998a832f3dd57b1dbbe 100644 --- a/civicrm/CRM/Core/BAO/UFField.php +++ b/civicrm/CRM/Core/BAO/UFField.php @@ -1040,6 +1040,33 @@ SELECT id return CRM_Utils_Array::collect('title', $fields); } + /** + * Get pseudoconstant list for `field_name` + * + * Includes APIv4-style names for custom fields for portability. + * + * @return array + */ + public static function getAvailableFieldOptions() { + $fields = self::getAvailableFieldsFlat(); + $fields['formatting'] = ['title' => ts('Formatting')]; + $options = []; + foreach ($fields as $fieldName => $field) { + $option = [ + 'id' => $fieldName, + 'name' => $fieldName, + 'label' => $field['title'], + ]; + if (!empty($field['custom_group_id']) && !empty($field['id'])) { + $groupName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $field['custom_group_id']); + $fieldName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $field['id']); + $option['name'] = "$groupName.$fieldName"; + } + $options[] = $option; + } + return $options; + } + /** * Determine whether the given field_name is valid. * diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index 3a8ba271beeeb00a6e4b19e8995a0faaeb60b0c2..be52f2b24a219d1ad6988e8b70496f383822262c 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -780,7 +780,7 @@ class CRM_Core_DAO extends DB_DataObject { } else { $maxLength = $field['maxlength'] ?? NULL; - if (!is_array($value) && $maxLength && mb_strlen($value) > $maxLength && empty($field['pseudoconstant'])) { + if (!is_array($value) && $maxLength && mb_strlen($value ?? '') > $maxLength && empty($field['pseudoconstant'])) { // No ts() since this is a sysadmin-y string not seen by general users. Civi::log()->warning('A string for field {dbName} has been truncated. The original string was {value}.', ['dbName' => $dbName, 'value' => $value]); // The string is too long - what to do what to do? Well losing data is generally bad so let's truncate diff --git a/civicrm/CRM/Core/DAO/UFField.php b/civicrm/CRM/Core/DAO/UFField.php index 8f4b833061c5b692a6892de16bdde909026c41e4..ac2ddc2252cc2ead81c1c3153a324c8736bfc681 100644 --- a/civicrm/CRM/Core/DAO/UFField.php +++ b/civicrm/CRM/Core/DAO/UFField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4d8ac7c59b6f2301cc22fe7966e8fc91) + * (GenCodeChecksum:350622e76d9fc3367d201bb3a9c91f18) */ /** @@ -297,7 +297,7 @@ class CRM_Core_DAO_UFField extends CRM_Core_DAO { 'bao' => 'CRM_Core_BAO_UFField', 'localizable' => 0, 'pseudoconstant' => [ - 'callback' => 'CRM_Core_BAO_UFField::getAvailableFieldTitles', + 'callback' => 'CRM_Core_BAO_UFField::getAvailableFieldOptions', ], 'add' => '1.1', ], diff --git a/civicrm/CRM/Core/DAO/UFMatch.php b/civicrm/CRM/Core/DAO/UFMatch.php index 9ef7bd540a44f2a78cb78bd6219498946d486787..71de7d0c94e563fa93ca64d8aa8e39af1e9529b7 100644 --- a/civicrm/CRM/Core/DAO/UFMatch.php +++ b/civicrm/CRM/Core/DAO/UFMatch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFMatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:bb9d91c913ff3b1088ca8fa03cd23740) + * (GenCodeChecksum:fe0a85773ffa8532fab26a7036d904cf) */ /** @@ -99,7 +99,7 @@ class CRM_Core_DAO_UFMatch extends CRM_Core_DAO { * Whether to return the plural version of the title. */ public static function getEntityTitle($plural = FALSE) { - return $plural ? ts('UFMatches') : ts('UFMatch'); + return $plural ? ts('User Accounts') : ts('User Account'); } /** diff --git a/civicrm/CRM/Core/DomainTokens.php b/civicrm/CRM/Core/DomainTokens.php index ca8372146f299639bcc60dd54df428a30c085a85..d28f1862c73a5e2759e0c33931f3283bcbf36667 100644 --- a/civicrm/CRM/Core/DomainTokens.php +++ b/civicrm/CRM/Core/DomainTokens.php @@ -41,13 +41,22 @@ class CRM_Core_DomainTokens extends AbstractTokenSubscriber { public function getDomainTokens(): array { return [ - 'name' => ts('Domain name'), - 'address' => ts('Domain (organization) address'), - 'phone' => ts('Domain (organization) phone'), - 'email' => ts('Domain (organization) email'), + 'name' => ts('Domain Name'), + 'address' => ts('Domain (Organization) Full Address'), + 'street_address' => ts('Domain (Organization) Street Address'), + 'supplemental_address_1' => ts('Domain (Organization) Supplemental Address'), + 'supplemental_address_2' => ts('Domain (Organization) Supplemental Address 2'), + 'supplemental_address_3' => ts('Domain (Organization) Supplemental Address 3'), + 'city' => ts('Domain (Organization) City'), + 'postal_code' => ts('Domain (Organization) Postal Code'), + 'state_province_id:label' => ts('Domain (Organization) State'), + 'country_id:label' => ts('Domain (Organization) Country'), + 'phone' => ts('Domain (Organization) Phone'), + 'email' => ts('Domain (Organization) Email'), 'id' => ts('Domain ID'), 'description' => ts('Domain Description'), 'now' => ts('Current time/date'), + 'base_url' => ts('Domain absolute base url'), 'tax_term' => ts('Sales tax term (e.g VAT)'), ]; } @@ -98,16 +107,26 @@ class CRM_Core_DomainTokens extends AbstractTokenSubscriber { 'description' => $domain->description ?? '', ]; $loc = $domain->getLocationValues(); + if ($html) { $tokens['address'] = str_replace("\n", '<br />', ($loc['address'][1]['display'] ?? '')); } else { $tokens['address'] = $loc['address'][1]['display_text'] ?? ''; } + $tokens['street_address'] = $loc['address'][1]['street_address'] ?? ''; + $tokens['supplemental_address_1'] = $loc['address'][1]['supplemental_address_1'] ?? ''; + $tokens['supplemental_address_2'] = $loc['address'][1]['supplemental_address_2'] ?? ''; + $tokens['supplemental_address_3'] = $loc['address'][1]['supplemental_address_3'] ?? ''; + $tokens['city'] = $loc['address'][1]['city'] ?? ''; + $tokens['postal_code'] = $loc['address'][1]['postal_code'] ?? ''; + $tokens['state_province_id:label'] = $loc['address'][1]['state_province'] ?? ''; + $tokens['country_id:label'] = $loc['address'][1]['country'] ?? ''; $phone = reset($loc['phone']); $email = reset($loc['email']); $tokens['phone'] = $phone['phone'] ?? ''; $tokens['email'] = $email['email'] ?? ''; + $tokens['base_url'] = Civi::paths()->getVariable('cms.root', 'url'); $tokens['tax_term'] = (string) Civi::settings()->get('tax_term'); Civi::cache('metadata')->set($cacheKey, $tokens); } diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index accc3f0e76e64bd0d2ffe26a2daabd7d454b4e2c..1a5ffa1c87d9ee90d21f7d4e1c1935f851b105cf 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -660,7 +660,7 @@ class CRM_Core_Error extends PEAR_ErrorStack { // Use multiple (but stable) inputs for hash information. $md5inputs = [ defined('CIVICRM_SITE_KEY') ? CIVICRM_SITE_KEY : 'NO_SITE_KEY', - $config->userFrameworkBaseURL, + CRM_Utils_System::languageNegotiationURL($config->userFrameworkBaseURL, FALSE, TRUE), md5($config->dsn), $config->dsn, ]; diff --git a/civicrm/CRM/Core/Exception.php b/civicrm/CRM/Core/Exception.php index b099c0a07ab3137aa19bd226ea5231f568b2a80b..5591885acc773445eac29a28ca026b731138bc50 100644 --- a/civicrm/CRM/Core/Exception.php +++ b/civicrm/CRM/Core/Exception.php @@ -13,27 +13,42 @@ * Base class for exceptions generated by CiviCRM. * This Exception returns more information than the default one. We are using it from the * form layer to allow redirects to occur without having redirects in the BAO - * @param string $message - * The human friendly error message. - * @param string $error_code - * A computer friendly error code. By convention, no space (but underscore allowed). - * ex: mandatory_missing, duplicate, invalid_format * @param array $data * Extra params to return. eg an extra array of ids. It is not mandatory, but can help the computer using the api. Keep in mind the api consumer isn't to be trusted. eg. the database password is NOT a good extra data. */ class CRM_Core_Exception extends PEAR_Exception { + + const UNAUTHORIZED = 'unauthorized'; + const NOT_IMPLEMENTED = 'not-found'; + private $errorData = []; /** * Class constructor. * * @param string $message - * @param int $error_code + * The human friendly error message. + * @param int|string $error_code + * A computer friendly error code. By convention, no space (but underscore + * allowed) (ex: mandatory_missing, duplicate, invalid_format). * @param array $errorData - * @param null $previous + * Extra params to return. eg an extra array of ids. It is not mandatory, + * but can help the computer using the api. Keep in mind the api consumer + * isn't to be trusted. eg. the database password is NOT a good extra data. + * @param Throwable|NULL $previous + * A previous exception which caused this new exception. */ public function __construct($message, $error_code = 0, $errorData = [], $previous = NULL) { - parent::__construct($message); + // Using int for error code "old way") ? + if (is_numeric($error_code)) { + $code = $error_code; + } + else { + $code = 0; + } + // DIVERGENCE: CRM_Core_Exception used `$message`. API_Exception and CiviCRM_API3_Exception used `ts($message)`. + // IMHO, this seems like a terrible place to put `ts()` - civistrings won't detect, and it's hard dependency on l10n services. + parent::__construct($message, $code, $previous); $this->errorData = $errorData + ['error_code' => $error_code]; } @@ -49,7 +64,7 @@ class CRM_Core_Exception extends PEAR_Exception { /** * Get error code. * - * @return mixed + * @return int|string */ public function getErrorCode() { return $this->errorData['error_code']; @@ -74,4 +89,31 @@ class CRM_Core_Exception extends PEAR_Exception { return $this->errorData; } + /** + * Get extra parameters. + * + * @return array + * @deprecated Remove in v6.0. Compatibility with older API_Exception/CiviCRM_API3_Exception contracts. + */ + public function getExtraParams() { + return $this->errorData; + } + + /** + * Get error codes. + * + * DIVERGENCE: API_Exception defined a discoverable list of error-codes. CRM_Core_Exception and CiviCRM_API3_Exception did not. + * + * @return array + */ + public function getErrorCodes() { + return [ + 2000 => '$params was not an array', + 2001 => 'Invalid Value for Date field', + 2100 => 'String value is longer than permitted length', + self::UNAUTHORIZED => 'Unauthorized', + self::NOT_IMPLEMENTED => 'Entity or method is not implemented', + ]; + } + } diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php index 480986ba662a86d9c0918959515547cd24c49d07..2af67614c9dc752d9a06c96f6711014d9c2a19b3 100644 --- a/civicrm/CRM/Core/Form/Search.php +++ b/civicrm/CRM/Core/Form/Search.php @@ -332,7 +332,11 @@ class CRM_Core_Form_Search extends CRM_Core_Form { foreach ($fields as $fieldName => $field) { if (!empty($this->_formValues[$fieldName]) && empty($field['options']) && empty($field['pseudoconstant'])) { if (in_array($field['type'], [CRM_Utils_Type::T_STRING, CRM_Utils_Type::T_TEXT])) { - $this->_formValues[$fieldName] = ['LIKE' => CRM_Contact_BAO_Query::getWildCardedValue(TRUE, 'LIKE', trim($this->_formValues[$fieldName]))]; + $val = $this->_formValues[$fieldName]; + if (is_array($val)) { + $val = $val['LIKE']; + } + $this->_formValues[$fieldName] = ['LIKE' => CRM_Contact_BAO_Query::getWildCardedValue(TRUE, 'LIKE', trim($val))]; } } } diff --git a/civicrm/CRM/Core/I18n.php b/civicrm/CRM/Core/I18n.php index bcb214d66e5e50f6846c9fb922ee001e75bf652b..383af493142c5ac0fa75b03b7a0deeca21e5bf39 100644 --- a/civicrm/CRM/Core/I18n.php +++ b/civicrm/CRM/Core/I18n.php @@ -755,7 +755,7 @@ class CRM_Core_I18n { * Ex: $stringTable['enabled']['wildcardMatch']['foo'] = 'bar'; */ private function getWordReplacements() { - if (isset(Civi::$statics['testPreInstall'])) { + if (isset(Civi\Test::$statics['testPreInstall'])) { return []; } diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index bbf874b2c864d5ad9f28a41a7cbc80c37121383a..fc0b5f7bc1af9f13261ac42a8b9a06dbdf5a9410 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -181,14 +181,14 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { } if (!$recur) { - if ($contribution->total_amount != $input['amount']) { + if ($contribution->total_amount != $input['total_amount']) { Civi::log()->debug('PayPalIPN: Amount values dont match between database and IPN request. (ID: ' . $contribution->id . ').'); echo "Failure: Amount values dont match between database and IPN request<p>"; return; } } else { - $contribution->total_amount = $input['amount']; + $contribution->total_amount = $input['total_amount']; } // check if contribution is already completed, if so we ignore this ipn @@ -291,7 +291,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { $billingID = CRM_Core_BAO_LocationType::getBilling(); $input['paymentStatus'] = $this->retrieve('payment_status', 'String', FALSE); $input['invoice'] = $this->retrieve('invoice', 'String', TRUE); - $input['amount'] = $this->retrieve('mc_gross', 'Money', FALSE); + $input['total_amount'] = $this->retrieve('mc_gross', 'Money', FALSE); $input['reasonCode'] = $this->retrieve('ReasonCode', 'String', FALSE); $lookup = [ diff --git a/civicrm/CRM/Core/Resources.php b/civicrm/CRM/Core/Resources.php index bd54a0507ceb2d9c913ba7acb308a12f9b02e6a9..f485d6bc56ceabc9e72543f1c98000ca0b3ecd4f 100644 --- a/civicrm/CRM/Core/Resources.php +++ b/civicrm/CRM/Core/Resources.php @@ -167,7 +167,7 @@ class CRM_Core_Resources implements CRM_Core_Resources_CollectionAdderInterface * @see CRM_Core_Resources_CollectionTrait::findCreateSettingSnippet() */ public function &findCreateSettingSnippet($options = []): array { - $options = CRM_Core_Resources_CollectionAdderTrait::mergeSettingOptions($options, [ + $options = self::mergeSettingOptions($options, [ 'region' => NULL, ]); return $this->getSettingRegion($options['region'])->findCreateSettingSnippet($options); diff --git a/civicrm/CRM/Core/Resources/CollectionTrait.php b/civicrm/CRM/Core/Resources/CollectionTrait.php index 71fe17ece0ccfb8c93df4ab5950e843e27e743ac..dfda8e4518bed15d50fd040407bd36f6db6049a1 100644 --- a/civicrm/CRM/Core/Resources/CollectionTrait.php +++ b/civicrm/CRM/Core/Resources/CollectionTrait.php @@ -386,7 +386,7 @@ trait CRM_Core_Resources_CollectionTrait { $s = &$this->findCreateSettingSnippet(); $result = $s['settings']; foreach ($s['settingsFactories'] as $callable) { - $result = CRM_Core_Resources_CollectionAdderTrait::mergeSettings($result, $callable()); + $result = self::mergeSettings($result, $callable()); } CRM_Utils_Hook::alterResourceSettings($result); return $result; diff --git a/civicrm/CRM/Core/Smarty.php b/civicrm/CRM/Core/Smarty.php index c7476e9b94f425b50df82749d35b01f8582cfdf2..483ef374baea205eac63e6b072809ea1c10630c4 100644 --- a/civicrm/CRM/Core/Smarty.php +++ b/civicrm/CRM/Core/Smarty.php @@ -176,15 +176,22 @@ class CRM_Core_Smarty extends Smarty { * @param bool $display * * @return bool|mixed|string + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection */ public function fetch($resource_name, $cache_id = NULL, $compile_id = NULL, $display = FALSE) { if (preg_match('/^(\s+)?string:/', $resource_name)) { $old_security = $this->security; $this->security = TRUE; } - $output = parent::fetch($resource_name, $cache_id, $compile_id, $display); - if (isset($old_security)) { - $this->security = $old_security; + try { + $output = parent::fetch($resource_name, $cache_id, $compile_id, $display); + } + finally { + if (isset($old_security)) { + $this->security = $old_security; + } } return $output; } diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php index 2a175bcfc0132a7c3ad1a6b53d690143fc019a5d..b81855ae948fb82319d6a559e7534b27acb386df 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php @@ -60,7 +60,9 @@ function smarty_modifier_crmDate($dateString, ?string $dateFormat = NULL, bool $ $config = CRM_Core_Config::singleton(); $dateFormat = $config->dateformatTime; } - + if (is_int($dateString)) { + return CRM_Utils_Date::customFormatTs($dateString, $dateFormat); + } return CRM_Utils_Date::customFormat($dateString, $dateFormat); } return ''; diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php index 29cd892bd10c2a11a1d54cb42f8081e349d91c02..db3e3e906d273ea1c764a78e2567bebad0640b1c 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php @@ -25,6 +25,6 @@ * @return string * formatted text */ -function smarty_modifier_crmICalText($str) { - return CRM_Utils_ICalendar::formatText($str); +function smarty_modifier_crmICalText($str, $keep_html = FALSE, $position = 0) { + return CRM_Utils_ICalendar::formatText($str, $keep_html, $position); } diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmRSSPubDate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmRSSPubDate.php new file mode 100644 index 0000000000000000000000000000000000000000..39bc9ea26429eba7b7c337db3fc7e9ca965e3191 --- /dev/null +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmRSSPubDate.php @@ -0,0 +1,36 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Format the given date to RSS pubDate RFC822 format, + * http://www.w3.org/Protocols/rfc822/#z28 + * + * @param string $dateString + * Date which needs to converted to RFC822 format. + * + * @return string + * formatted text + */ +function smarty_modifier_crmRSSPubDate($dateString): string { + // Use CRM_Utils_Time to avoid rollover problems in unit testing + $now = new DateTime(CRM_Utils_Time::date('Y-m-d H:i:s')); + + if ($dateString) { + try { + $date = new DateTime($dateString); + return $date->format($date::RSS); + } + catch (Exception $e) { + // fall through + } + } + return $now->format($now::RSS); +} diff --git a/civicrm/CRM/Event/ActionMapping.php b/civicrm/CRM/Event/ActionMapping.php index 6a7f1ecda1aeec5a2853cc5c26e1431f8c207527..ae76bf3df2c7d6adb850559be16539b6d665654c 100644 --- a/civicrm/CRM/Event/ActionMapping.php +++ b/civicrm/CRM/Event/ActionMapping.php @@ -149,8 +149,9 @@ class CRM_Event_ActionMapping extends \Civi\ActionSchedule\Mapping { if ($schedule->recipient_listing && $schedule->limit_to) { switch ($schedule->recipient) { case 'participant_role': - $query->where("e.role_id IN (#recipList)") - ->param('recipList', \CRM_Utils_Array::explodePadded($schedule->recipient_listing)); + $regex = "([[:cntrl:]]|^)" . implode('([[:cntrl:]]|$)|([[:cntrl:]]|^)', \CRM_Utils_Array::explodePadded($schedule->recipient_listing)) . "([[:cntrl:]]|$)"; + $query->where("e.role_id REGEXP (@regex)") + ->param('regex', $regex); break; default: diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index b25413edbab8a7edfea82033c462c110f4c52b46..5f0f604cd7b77dc523f502ff51b9c4d016507094 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -2416,18 +2416,7 @@ WHERE ce.loc_block_id = $locBlockId"; * All of the icons to show. */ public static function getICalLinks($eventId = NULL) { - $return = $eventId ? [] : [ - [ - 'url' => CRM_Utils_System::url('civicrm/event/ical', 'reset=1&list=1&html=1', TRUE, NULL, TRUE), - 'text' => ts('HTML listing of current and future public events.'), - 'icon' => 'fa-th-list', - ], - [ - 'url' => CRM_Utils_System::url('civicrm/event/ical', 'reset=1&list=1&rss=1', TRUE, NULL, TRUE), - 'text' => ts('Get RSS 2.0 feed for current and future public events.'), - 'icon' => 'fa-rss', - ], - ]; + $return = []; $query = [ 'reset' => 1, ]; @@ -2439,12 +2428,20 @@ WHERE ce.loc_block_id = $locBlockId"; 'text' => $eventId ? ts('Download iCalendar entry for this event.') : ts('Download iCalendar entry for current and future public events.'), 'icon' => 'fa-download', ]; - $query['list'] = 1; - $return[] = [ - 'url' => CRM_Utils_System::url('civicrm/event/ical', $query, TRUE, NULL, TRUE), - 'text' => $eventId ? ts('iCalendar feed for this event.') : ts('iCalendar feed for current and future public events.'), - 'icon' => 'fa-link', - ]; + if ($eventId) { + $return[] = [ + 'url' => CRM_Utils_System::url('civicrm/event/ical', ['gCalendar' => 1] + $query, TRUE, NULL, TRUE), + 'text' => ts('Add event to Google Calendar'), + 'icon' => 'fa-share', + ]; + } + else { + $return[] = [ + 'url' => CRM_Utils_System::url('civicrm/event/ical', $query, TRUE, NULL, TRUE), + 'text' => ts('iCalendar feed for current and future public events'), + 'icon' => 'fa-link', + ]; + } return $return; } diff --git a/civicrm/CRM/Event/ICalendar.php b/civicrm/CRM/Event/ICalendar.php index a4cc998fd7b8f59890f48b4aeb6bc98323a8071a..faf2889b1797c0a78381697e7f6129c24da7f6bb 100644 --- a/civicrm/CRM/Event/ICalendar.php +++ b/civicrm/CRM/Event/ICalendar.php @@ -42,14 +42,22 @@ class CRM_Event_ICalendar { $iCalPage = CRM_Utils_Request::retrieveValue('list', 'Positive', 0); $gData = CRM_Utils_Request::retrieveValue('gData', 'Positive', 0); $rss = CRM_Utils_Request::retrieveValue('rss', 'Positive', 0); + $gCalendar = CRM_Utils_Request::retrieveValue('gCalendar', 'Positive', 0); + + $info = CRM_Event_BAO_Event::getCompleteInfo($start, $type, $id, $end); + + if ($gCalendar) { + return self::gCalRedirect($info); + } $template = CRM_Core_Smarty::singleton(); $config = CRM_Core_Config::singleton(); - $info = CRM_Event_BAO_Event::getCompleteInfo($start, $type, $id, $end); - $template->assign('events', $info); - $template->assign('timezone', @date_default_timezone_get()); + + $timezones = [@date_default_timezone_get()]; + + $template->assign('timezone', $timezones[0]); // Send data to the correct template for formatting (iCal vs. gData) if ($rss) { @@ -61,6 +69,17 @@ class CRM_Event_ICalendar { $calendar = $template->fetch('CRM/Core/Calendar/GData.tpl'); } else { + $date_min = min( + array_map(function ($event) { + return strtotime($event['start_date']); + }, $info) + ); + $date_max = max( + array_map(function ($event) { + return strtotime($event['end_date'] ?? $event['start_date']); + }, $info) + ); + $template->assign('timezones', CRM_Utils_ICalendar::generate_timezones($timezones, $date_min, $date_max)); $calendar = $template->fetch('CRM/Core/Calendar/ICal.tpl'); $calendar = preg_replace('/(?<!\r)\n/', "\r\n", $calendar); } @@ -80,4 +99,55 @@ class CRM_Event_ICalendar { CRM_Utils_System::civiExit(); } + protected static function gCalRedirect(array $events) { + if (count($events) != 1) { + throw new CRM_Core_Exception(ts('Expected one %1, found %2', [1 => ts('Event'), 2 => count($events)])); + } + + $event = reset($events); + + // Fetch the required Date TimeStamps + $start_date = date_create($event['start_date']); + + // Google Requires that a Full Day event end day happens on the next Day + $end_date = ($event['end_date'] + ? date_create($event['end_date']) + : date_create($event['start_date']) + ->add(DateInterval::createFromDateString('1 day')) + ->setTime(0, 0, 0) + ); + + $dates = $start_date->format('Ymd\THis') . '/' . $end_date->format('Ymd\THis'); + + $event_details = $event['description']; + + // Add space after paragraph + $event_details = str_replace('</p>', '</p> ', $event_details); + $event_details = strip_tags($event_details); + + // Truncate Event Description and add permalink if greater than 996 characters + if (strlen($event_details) > 996) { + if (preg_match('/^.{0,996}(?=\s|$_)/', $event_details, $m)) { + $event_details = $m[0] . '...'; + } + } + + $event_details .= "\n\n<a href=\"{$event['url']}\">" . ts('View %1 Details', [1 => $event['event_type']]) . '</a>'; + + $params = [ + 'action' => 'TEMPLATE', + 'text' => strip_tags($event['title']), + 'dates' => $dates, + 'details' => $event_details, + 'location' => str_replace("\n", "\t", $event['location']), + 'trp' => 'false', + 'sprop' => 'website:' . CRM_Utils_System::baseCMSURL(), + 'ctz' => @date_default_timezone_get(), + ]; + + $url = 'https://www.google.com/calendar/event?' . CRM_Utils_System::makeQueryString($params); + + CRM_Utils_System::redirect($url); + } + } diff --git a/civicrm/CRM/Extension/Browser.php b/civicrm/CRM/Extension/Browser.php index 4fe82f18e518efa33afd0b3ddb68c0277f9e6a93..af1a0e84de649d6fa15cf1145f58d9fedafc5f34 100644 --- a/civicrm/CRM/Extension/Browser.php +++ b/civicrm/CRM/Extension/Browser.php @@ -35,11 +35,8 @@ class CRM_Extension_Browser { const SINGLE_FILE_PATH = '/single'; /** - * The name of the single JSON extension cache file. + * Timeout for when the connection or the server is slow */ - const CACHE_JSON_FILE = 'extensions.json'; - - // timeout for when the connection or the server is slow const CHECK_TIMEOUT = 5; /** @@ -66,16 +63,10 @@ class CRM_Extension_Browser { * URL of the remote repository. * @param string $indexPath * Relative path of the 'index' file within the repository. - * @param string $cacheDir - * Local path in which to cache files. */ - public function __construct($repoUrl, $indexPath, $cacheDir) { + public function __construct($repoUrl, $indexPath) { $this->repoUrl = $repoUrl; - $this->cacheDir = $cacheDir; $this->indexPath = empty($indexPath) ? self::SINGLE_FILE_PATH : $indexPath; - if ($cacheDir && !file_exists($cacheDir) && is_dir(dirname($cacheDir)) && is_writable(dirname($cacheDir))) { - CRM_Utils_File::createDir($cacheDir, FALSE); - } } /** @@ -101,10 +92,7 @@ class CRM_Extension_Browser { * Refresh the cache of remotely-available extensions. */ public function refresh() { - $file = $this->getTsPath(); - if (file_exists($file)) { - unlink($file); - } + \Civi::cache('extension_browser')->flush(); } /** @@ -118,22 +106,10 @@ class CRM_Extension_Browser { return []; } + // We used to check for the cache filesystem permissions, but it is now stored in DB + // If no new requirements have come up, consider removing this function after CiviCRM 5.60. + // The tests may need to be updated as well (tests/phpunit/CRM/Extension/BrowserTest.php). $errors = []; - - if (!$this->cacheDir || !is_dir($this->cacheDir) || !is_writable($this->cacheDir)) { - $civicrmDestination = urlencode(CRM_Utils_System::url('civicrm/admin/extensions', 'reset=1')); - $url = CRM_Utils_System::url('civicrm/admin/setting/path', "reset=1&civicrmDestination=${civicrmDestination}"); - $errors[] = array( - 'title' => ts('Directory Unwritable'), - 'message' => ts('Your extensions cache directory (%1) is not web server writable. Please go to the <a href="%2">path setting page</a> and correct it.<br/>', - array( - 1 => $this->cacheDir, - 2 => $url, - ) - ), - ); - } - return $errors; } @@ -149,8 +125,8 @@ class CRM_Extension_Browser { } $exts = []; - $remote = $this->_discoverRemote(); + if (is_array($remote)) { foreach ($remote as $dc => $e) { $exts[$e->key] = $e; @@ -184,33 +160,14 @@ class CRM_Extension_Browser { * @throws CRM_Extension_Exception_ParseException */ private function _discoverRemote() { - $tsPath = $this->getTsPath(); - $timestamp = FALSE; - - if (file_exists($tsPath)) { - $timestamp = file_get_contents($tsPath); - } - - // 3 minutes ago for now - $outdated = (int) $timestamp < (time() - 180) ? TRUE : FALSE; - - if (!$timestamp || $outdated) { - $remotes = json_decode($this->grabRemoteJson(), TRUE); - } - else { - $remotes = json_decode($this->grabCachedJson(), TRUE); - } - + $remotes = json_decode($this->grabCachedJson(), TRUE); $this->_remotesDiscovered = []; + foreach ((array) $remotes as $id => $xml) { $ext = CRM_Extension_Info::loadFromString($xml); $this->_remotesDiscovered[] = $ext; } - if (file_exists(dirname($tsPath))) { - file_put_contents($tsPath, (string) time()); - } - return $this->_remotesDiscovered; } @@ -221,12 +178,9 @@ class CRM_Extension_Browser { * @return string */ private function grabCachedJson() { - $filename = $this->cacheDir . DIRECTORY_SEPARATOR . self::CACHE_JSON_FILE . '.' . md5($this->getRepositoryUrl()); - $json = NULL; - if (file_exists($filename)) { - $json = file_get_contents($filename); - } - if (empty($json)) { + $cacheKey = $this->getCacheKey(); + $json = \Civi::cache('extension_browser')->get($cacheKey); + if ($json === NULL) { $json = $this->grabRemoteJson(); } return $json; @@ -248,13 +202,10 @@ class CRM_Extension_Browser { return ''; } - $filename = $this->cacheDir . DIRECTORY_SEPARATOR . self::CACHE_JSON_FILE . '.' . md5($this->getRepositoryUrl()); $url = $this->getRepositoryUrl() . $this->indexPath; - $client = $this->getGuzzleClient(); try { $response = $client->request('GET', $url, [ - 'sink' => $filename, 'timeout' => \Civi::settings()->get('http_timeout'), ]); } @@ -267,15 +218,18 @@ class CRM_Extension_Browser { throw new CRM_Extension_Exception(ts('The CiviCRM public extensions directory at %1 could not be contacted - please check your webserver can make external HTTP requests', [1 => $this->getRepositoryUrl()]), 'connection_error'); } - // Don't call grabCachedJson here, that would risk infinite recursion - return file_get_contents($filename); + $json = $response->getBody()->getContents(); + $cacheKey = $this->getCacheKey(); + \Civi::cache('extension_browser')->set($cacheKey, $json); + return $json; } /** - * @return string + * Returns a cache key based on the repository URL, which can be updated + * by admins in civicrm.settings.php or passed as a command-line option to cv. */ - private function getTsPath() { - return $this->cacheDir . DIRECTORY_SEPARATOR . 'timestamp.txt'; + private function getCacheKey() { + return 'extdir_' . md5($this->getRepositoryUrl()); } /** diff --git a/civicrm/CRM/Extension/System.php b/civicrm/CRM/Extension/System.php index e27d93fe1dc5b80762e3b0af5c1450d406b53243..99a920de37e25a3165be28b0781c9c0214af433e 100644 --- a/civicrm/CRM/Extension/System.php +++ b/civicrm/CRM/Extension/System.php @@ -217,11 +217,7 @@ class CRM_Extension_System { */ public function getBrowser() { if ($this->browser === NULL) { - $cacheDir = NULL; - if (!empty($this->parameters['uploadDir'])) { - $cacheDir = CRM_Utils_File::addTrailingSlash($this->parameters['uploadDir']) . 'cache'; - } - $this->browser = new CRM_Extension_Browser($this->getRepositoryUrl(), '', $cacheDir); + $this->browser = new CRM_Extension_Browser($this->getRepositoryUrl(), ''); } return $this->browser; } diff --git a/civicrm/CRM/Extension/Upgrader/Base.php b/civicrm/CRM/Extension/Upgrader/Base.php index 3dbd1eb06914c11a7f293cd4f4f5f89fa2ee0d22..1478af7540e1b9a26451ae31e283dca41ebfbe34 100644 --- a/civicrm/CRM/Extension/Upgrader/Base.php +++ b/civicrm/CRM/Extension/Upgrader/Base.php @@ -36,6 +36,16 @@ class CRM_Extension_Upgrader_Base implements CRM_Extension_Upgrader_Interface { // ******** Hook delegates ******** /** + * Run early installation steps. Ex: Create new MySQL table. + * + * This dispatches directly to each new extension. You will only receive notices for your own installation. + * + * If multiple extensions are installed simultaneously, they will all run + * `hook_install`/`hook_enable` back-to-back (in order of dependency). + * + * This runs BEFORE refreshing major caches and services (such as + * `ManagedEntities` and `CRM_Logging_Schema`). + * * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install */ public function onInstall() { @@ -63,6 +73,16 @@ class CRM_Extension_Upgrader_Base implements CRM_Extension_Upgrader_Interface { } /** + * Run later installation steps. Ex: Call a bespoke API-job for the first time. + * + * This dispatches directly to each new extension. You will only receive notices for your own installation. + * + * If multiple extensions are installed simultaneously, they will all run + * `hook_postInstall` back-to-back (in order of dependency). + * + * This runs AFTER refreshing major caches and services (such as + * `ManagedEntities` and `CRM_Logging_Schema`). + * * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall */ public function onPostInstall() { diff --git a/civicrm/CRM/Pledge/BAO/Pledge.php b/civicrm/CRM/Pledge/BAO/Pledge.php index 7af5004ce58f9c20a80b542d089727242945dc41..112a3eefe50b638f5b6ed6a81dd474ae09408c69 100644 --- a/civicrm/CRM/Pledge/BAO/Pledge.php +++ b/civicrm/CRM/Pledge/BAO/Pledge.php @@ -780,14 +780,15 @@ GROUP BY currency $returnMessages = []; - $sendReminders = CRM_Utils_Array::value('send_reminders', $params, FALSE); + $sendReminders = $params['send_reminders'] ?? FALSE; - $allStatus = array_flip(CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name')); - $allPledgeStatus = CRM_Core_OptionGroup::values('pledge_status', - TRUE, FALSE, FALSE, NULL, 'name', TRUE - ); + $allStatus = array_flip(CRM_Pledge_BAO_PledgePayment::buildOptions('status_id', 'validate')); + // We are left with 'Pending' & 'Overdue' - ie. payment required - should we just filter in the ones we want? + unset($allStatus['Completed'], $allStatus['Cancelled']); + + $allPledgeStatus = array_flip(CRM_Pledge_BAO_Pledge::buildOptions('status_id', 'validate')); + // We are left with 'Pending' & 'Overdue', 'In Progress' unset($allPledgeStatus['Completed'], $allPledgeStatus['Cancelled']); - unset($allStatus['Completed'], $allStatus['Cancelled'], $allStatus['Failed']); $statusIds = implode(',', $allStatus); $pledgeStatusIds = implode(',', $allPledgeStatus); diff --git a/civicrm/CRM/Pledge/BAO/PledgePayment.php b/civicrm/CRM/Pledge/BAO/PledgePayment.php index b5097073653592836c9a9503a9a80defd7282b2d..73fd3a35462ebdaba07249c2cd69dbb7d7d0d74a 100644 --- a/civicrm/CRM/Pledge/BAO/PledgePayment.php +++ b/civicrm/CRM/Pledge/BAO/PledgePayment.php @@ -9,12 +9,18 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Contribution; +use Civi\Api4\Pledge; +use Civi\Api4\PledgePayment; +use Civi\Core\HookInterface; +use Civi\Core\Event\GenericHookEvent; + /** * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Pledge_BAO_PledgePayment extends CRM_Pledge_DAO_PledgePayment { +class CRM_Pledge_BAO_PledgePayment extends CRM_Pledge_DAO_PledgePayment implements HookInterface { /** * Get pledge payment details. @@ -552,43 +558,28 @@ WHERE civicrm_pledge.id = %2 * * @return int * $statusId calculated status id of pledge + * @throws \API_Exception */ - public static function calculatePledgeStatus($pledgeId) { - $paymentStatusTypes = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); - $pledgeStatusTypes = CRM_Pledge_BAO_Pledge::buildOptions('status_id', 'validate'); - - //return if the pledge is cancelled. - $currentPledgeStatusId = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_Pledge', $pledgeId, 'status_id', 'id', TRUE); - if ($currentPledgeStatusId == array_search('Cancelled', $pledgeStatusTypes)) { - return $currentPledgeStatusId; + public static function calculatePledgeStatus(int $pledgeId): int { + if (count(Pledge::get(FALSE) + ->addWhere('id', '=', $pledgeId) + ->addWhere('status_id:name', '=', 'Cancelled')->execute())) { + // Return Canceled if the pledge is cancelled. + return (int) CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Cancelled'); } - // retrieve all pledge payments for this particular pledge - $allPledgePayments = $allStatus = []; - $returnProperties = ['status_id']; - CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'pledge_id', $pledgeId, $allPledgePayments, $returnProperties); - - // build pledge payment statuses - foreach ($allPledgePayments as $key => $value) { - $allStatus[$value['id']] = $paymentStatusTypes[$value['status_id']]; + $pledgePaymentStatuses = (array) PledgePayment::get(FALSE)->addWhere('pledge_id', '=', $pledgeId)->setSelect(['status_id', 'status_id:name'])->execute()->indexBy('status_id:name'); + if (!empty($pledgePaymentStatuses['Overdue'])) { + return (int) CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Overdue'); } - - if (array_search('Overdue', $allStatus)) { - $statusId = array_search('Overdue', $pledgeStatusTypes); - } - elseif (array_search('Completed', $allStatus)) { - if (count(array_count_values($allStatus)) == 1) { - $statusId = array_search('Completed', $pledgeStatusTypes); - } - else { - $statusId = array_search('In Progress', $pledgeStatusTypes); - } + if (count($pledgePaymentStatuses) === 1 && !empty($pledgePaymentStatuses['Completed'])) { + return (int) CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Completed'); } - else { - $statusId = array_search('Pending', $pledgeStatusTypes); + if (!empty($pledgePaymentStatuses['Completed'])) { + // In this case some are completed but not all (or it would have returned just above). + return (int) CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'In Progress'); } - - return $statusId; + return (int) CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Pending'); } /** @@ -852,4 +843,67 @@ WHERE civicrm_pledge_payment.contribution_id = {$paymentContributionId} return $result; } + /** + * Update pledge payments based on contribution updates. + * + * - Disconnect pledge payments from cancelled or failed contributions. + * - Complete Completed payments + * + * Test cover in testCancelOrderWithPledge, testCompleteTransactionUpdatePledgePayment. + * + * @param \Civi\Core\Event\GenericHookEvent $event + * + * @throws \API_Exception + */ + public static function on_hook_civicrm_post(GenericHookEvent $event): void { + if (!CRM_Core_Component::isEnabled('CiviPledge')) { + return; + } + if ($event->entity === 'Contribution' && $event->action === 'edit' && !empty($event->object->contribution_status_id)) { + $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $event->object->contribution_status_id); + + if (!in_array($contributionStatus, ['Failed', 'Cancelled', 'Completed'], TRUE)) { + return; + } + $contributionID = $event->object->id; + if ($contributionStatus === 'Completed' && empty($event->object->total_amount)) { + // This is precautionary as it is likely it is always loaded in the BAO. + $event->object->total_amount = Contribution::get(FALSE)->addWhere('id', '=', $contributionID)->addSelect('total_amount')->execute()->first()['total_amount']; + } + + // Check first since just doing an update could be locking under load. + $pledgePayment = PledgePayment::get(FALSE) + ->addWhere('contribution_id', '=', $contributionID) + ->setSelect(['id', 'pledge_id', 'scheduled_date', 'scheduled_amount', 'status_id:name', 'pledge_id.status_id']) + ->execute() + ->first(); + if (!empty($pledgePayment)) { + if ($pledgePayment['status_id:name'] === 'Completed' && $contributionStatus === 'Completed') { + return; + } + PledgePayment::update(FALSE)->setValues([ + 'contribution_id' => $contributionStatus === 'Completed' ? $contributionID : NULL, + 'actual_amount' => $contributionStatus === 'Completed' ? $event->object->total_amount : NULL, + 'status_id:name' => $contributionStatus === 'Completed' ? 'Completed' : 'Pending', + // We need to set these fields for now because the PledgePayment::create + // function doesn't handled updates well at the moment. Test cover + // in testCancelOrderWithPledge. + 'scheduled_date' => $pledgePayment['scheduled_date'], + 'installment_amount' => $pledgePayment['scheduled_amount'], + 'installments' => 1, + 'pledge_id' => $pledgePayment['pledge_id'], + ])->addWhere('id', '=', $pledgePayment['id'])->execute(); + if ($contributionStatus === 'Completed') { + // Check if this completes the pledge. + // Ideally we would listen to PledgePayment update for this. + // The risk could be a code loop? For now just do for completed. + $pledgeExpectedStatus = self::calculatePledgeStatus($pledgePayment['pledge_id']); + if ($pledgeExpectedStatus !== $pledgePayment['pledge_id.status_id']) { + Pledge::update(FALSE)->addWhere('id', '=', $pledgePayment['pledge_id'])->setValues(['status_id', '=', $pledgeExpectedStatus])->execute(); + } + } + } + } + } + } diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index a06ce0ca74644a9227bfe1cd547ce59375a2b7f1..35eee9eb3dadd2721267edf32bfaf59ee656d8e7 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -265,14 +265,16 @@ class CRM_Report_Form extends CRM_Core_Form { protected $_aliases = []; /** + * SQL where clause. May be altered by hook_civicrm_alterReportVar. * @var string */ - protected $_where; + public $_where; /** + * SQL from clause. May be altered by hook_civicrm_alterReportVar. * @var string */ - protected $_from; + public $_from; /** * SQL Limit clause diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index db888ece653cd00fc90be8d2dcd7941598259bf4..4d950c66ac37eecafa10c53399f039c3ce5415a1 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -442,7 +442,7 @@ SET version = '$version' [ 1 => CRM_Upgrade_Incremental_General::MIN_INSTALL_MYSQL_VER, 2 => CRM_Utils_SQL::getDatabaseVersion(), - 3 => '10.1', + 3 => CRM_Upgrade_Incremental_General::MIN_INSTALL_MARIADB_VER, 4 => $latestVer, ]); } diff --git a/civicrm/CRM/Upgrade/Incremental/General.php b/civicrm/CRM/Upgrade/Incremental/General.php index 0f54db34bcd0db566c42c94e9d924ab29148c4e7..899dfc784c7b603d3532e44eaed205439484f743 100644 --- a/civicrm/CRM/Upgrade/Incremental/General.php +++ b/civicrm/CRM/Upgrade/Incremental/General.php @@ -43,18 +43,30 @@ class CRM_Upgrade_Incremental_General { const MIN_INSTALL_PHP_VER = '7.2.0'; /** - * The minimum recommended MySQL/MariaDB version. + * The minimum recommended MySQL version. * - * A site running an earlier version will be told to upgrade. + * A site running an earlier version will be encouraged to upgrade. */ const MIN_RECOMMENDED_MYSQL_VER = '5.7'; /** - * The minimum MySQL/MariaDB version required to install Civi. + * The minimum MySQL version required to install Civi. * * @see install/index.php */ - const MIN_INSTALL_MYSQL_VER = '5.6.5'; + const MIN_INSTALL_MYSQL_VER = '5.7'; + + /** + * The minimum recommended MariaDB version. + * + * A site running an earlier version will be encouraged to upgrade. + */ + const MIN_RECOMMENDED_MARIADB_VER = '10.4'; + + /** + * The minimum MariaDB version required to install Civi. + */ + const MIN_INSTALL_MARIADB_VER = '10.2'; /** * Compute any messages which should be displayed before upgrade. @@ -82,7 +94,7 @@ class CRM_Upgrade_Incremental_General { $preUpgradeMessage .= ts('This system uses MySQL/MariaDB v%5. You may proceed with the upgrade, and CiviCRM v%1 will continue working normally. However, CiviCRM v%4 will require MySQL v%2 or MariaDB v%3.', [ 1 => $latestVer, 2 => self::MIN_RECOMMENDED_MYSQL_VER . '+', - 3 => '10.1' . '+', + 3 => self::MIN_RECOMMENDED_MARIADB_VER . '+', 4 => '5.34' . '+', 5 => CRM_Utils_SQL::getDatabaseVersion(), ]); diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveFiftyTwo.php b/civicrm/CRM/Upgrade/Incremental/php/FiveFiftyTwo.php new file mode 100644 index 0000000000000000000000000000000000000000..c1ff0badc35fd87461d20b30e485d8ee7d1d726b --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveFiftyTwo.php @@ -0,0 +1,42 @@ +<?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 the 5.52.x series. + * + * Each minor version in the series is handled by either a `5.52.x.mysql.tpl` file, + * or a function in this class named `upgrade_5_52_x`. + * If only a .tpl file exists for a version, it will be run automatically. + * If the function exists, it must explicitly add the 'runSql' task if there is a corresponding .mysql.tpl. + * + * This class may also implement `setPreUpgradeMessage()` and `setPostUpgradeMessage()` functions. + */ +class CRM_Upgrade_Incremental_php_FiveFiftyTwo extends CRM_Upgrade_Incremental_Base { + + /** + * Upgrade step; adds tasks including 'runSql'. + * + * @param string $rev + * The version number matching this function name + */ + public function upgrade_5_52_alpha1($rev): void { + $this->addSnapshotTask('contribution', CRM_Utils_SQL_Select::from('civicrm_contribution') + ->where('(contribution_recur_id IS NOT NULL) or (is_template = 1)') + ->select(['id', 'contribution_recur_id', 'is_template', 'total_amount']) + ); + $this->addSnapshotTask('contribution_recur', CRM_Utils_SQL_Select::from('civicrm_contribution_recur') + ->select(['id', 'amount', 'modified_date']) + ); + + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.52.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.52.alpha1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6c918dce1422a4f9fc4decebb9f261c74b91fa2c --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.52.alpha1.mysql.tpl @@ -0,0 +1,9 @@ +{* file to handle db changes in 5.52.alpha1 during upgrade *} +-- Update any recurring contributions to have the same amount +-- as the recurring template contribution if it exists. +-- Some of these got out of sync over recent changes. +UPDATE civicrm_contribution_recur r +INNER JOIN civicrm_contribution c ON contribution_recur_id = r.id +AND c.is_template = 1 +SET amount = total_amount +WHERE total_amount IS NOT NULL; diff --git a/civicrm/CRM/Utils/API/HTMLInputCoder.php b/civicrm/CRM/Utils/API/HTMLInputCoder.php index 928a4ec7d6cd333512658ee0c088073eddada550..55dfffdd8e5ecc08a93a2983aa69d61846371c80 100644 --- a/civicrm/CRM/Utils/API/HTMLInputCoder.php +++ b/civicrm/CRM/Utils/API/HTMLInputCoder.php @@ -145,7 +145,7 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { } public function encodeValue($value) { - return str_replace(['<', '>'], ['<', '>'], $value); + return str_replace(['<', '>'], ['<', '>'], ($value ?? '')); } /** @@ -192,7 +192,7 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { } public function decodeValue($value) { - return str_replace(['<', '>'], ['<', '>'], $value); + return str_replace(['<', '>'], ['<', '>'], ($value ?? '')); } /** diff --git a/civicrm/CRM/Utils/Array.php b/civicrm/CRM/Utils/Array.php index 627e27d0c1c4041383bb3dad7a6c3f175ad66b54..12822ae35769bda160e6902831b74e1f96793b29 100644 --- a/civicrm/CRM/Utils/Array.php +++ b/civicrm/CRM/Utils/Array.php @@ -1077,6 +1077,9 @@ class CRM_Utils_Array { * @return bool */ public static function pathIsset($values, $path) { + if ($path === []) { + return ($values !== NULL); + } foreach ($path as $key) { if (!is_array($values) || !isset($values[$key])) { return FALSE; @@ -1100,6 +1103,11 @@ class CRM_Utils_Array { * TRUE if anything has been removed. FALSE if no changes were required. */ public static function pathUnset(&$values, $path, $cleanup = FALSE) { + if (count($path) === 0) { + $values = NULL; + return TRUE; + } + if (count($path) === 1) { if (isset($values[$path[0]])) { unset($values[$path[0]]); @@ -1131,6 +1139,10 @@ class CRM_Utils_Array { * Ex: 456. */ public static function pathSet(&$values, $pathParts, $value) { + if ($pathParts === []) { + $values = $value; + return; + } $r = &$values; $last = array_pop($pathParts); foreach ($pathParts as $part) { diff --git a/civicrm/CRM/Utils/Check/Component/Env.php b/civicrm/CRM/Utils/Check/Component/Env.php index 3476dba691cd5e1fae81c333d5dbe3097e94c925..43eea9c43190830e1002e5c30131eb8134e10b1b 100644 --- a/civicrm/CRM/Utils/Check/Component/Env.php +++ b/civicrm/CRM/Utils/Check/Component/Env.php @@ -1009,7 +1009,7 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { $messages = []; $version = CRM_Utils_SQL::getDatabaseVersion(); $minRecommendedVersion = CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_MYSQL_VER; - $mariaDbRecommendedVersion = '10.1'; + $mariaDbRecommendedVersion = CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_MARIADB_VER; $upcomingCiviChangeVersion = '5.34'; if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), $minRecommendedVersion, '<')) { $messages[] = new CRM_Utils_Check_Message( diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index 1d88eb6f7cfde7de8d686ae1b4a12b2af29bce15..f38274517d5d166e748f46356c00979bd0a1a5fb 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -433,6 +433,7 @@ class CRM_Utils_Date { '%A' => $type, '%Y' => $year, '%s' => str_pad($second, 2, 0, STR_PAD_LEFT), + '%S' => str_pad($second, 2, 0, STR_PAD_LEFT), ]; return strtr($format, $date); @@ -1935,7 +1936,7 @@ class CRM_Utils_Date { $mysqlDate = 'null'; } - if (trim($date)) { + if (trim($date ?? '')) { $mysqlDate = date($format, strtotime($date . ' ' . $time)); } diff --git a/civicrm/CRM/Utils/GeocodeProvider.php b/civicrm/CRM/Utils/GeocodeProvider.php index 8a0acc4badfb571665733c90d3895bb2f179ce0b..1089cdfa7e8164867f5c8645dd42d3f9f857ca86 100644 --- a/civicrm/CRM/Utils/GeocodeProvider.php +++ b/civicrm/CRM/Utils/GeocodeProvider.php @@ -50,7 +50,7 @@ class CRM_Utils_GeocodeProvider { */ public static function getUsableClassName() { if (self::$providerClassName === NULL) { - $provider = Civi::settings()->get('geoProvider'); + $provider = Civi::settings()->get('geoProvider') ?? ''; if (!class_exists($provider)) { if (class_exists('CRM_Utils_Geocode_' . $provider)) { $provider = 'CRM_Utils_Geocode_' . $provider; diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index b3a20a312f90bb264818f128502db5f2df4924f6..c697851787d8ad3eafce484fe25accd10a148696 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -1881,15 +1881,41 @@ abstract class CRM_Utils_Hook { } /** - * This hook is called when a module-extension is installed. - * Each module will receive hook_civicrm_install during its own installation (but not during the - * installation of unrelated modules). + * Run early installation steps for an extension. Ex: Create new MySQL table. + * + * This dispatches directly to each new extension. You will only receive notices for your own installation. + * + * If multiple extensions are installed simultaneously, they will all run + * `hook_install`/`hook_enable` back-to-back (in order of dependency). + * + * This runs BEFORE refreshing major caches and services (such as + * `ManagedEntities` and `CRM_Logging_Schema`). + * + * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install */ public static function install() { // Actually invoke via CRM_Extension_Manager_Module::callHook throw new \RuntimeException(sprintf("The method %s::%s is just a documentation stub and should not be invoked directly.", __CLASS__, __FUNCTION__)); } + /** + * Run later installation steps. Ex: Call a bespoke API-job for the first time. + * + * This dispatches directly to each new extension. You will only receive notices for your own installation. + * + * If multiple extensions are installed simultaneously, they will all run + * `hook_postInstall` back-to-back (in order of dependency). + * + * This runs AFTER refreshing major caches and services (such as + * `ManagedEntities` and `CRM_Logging_Schema`). + * + * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ + public static function postInstall() { + // Actually invoke via CRM_Extension_Manager_Module::callHook + throw new \RuntimeException(sprintf("The method %s::%s is just a documentation stub and should not be invoked directly.", __CLASS__, __FUNCTION__)); + } + /** * This hook is called when a module-extension is uninstalled. * Each module will receive hook_civicrm_uninstall during its own uninstallation (but not during the diff --git a/civicrm/CRM/Utils/ICalendar.php b/civicrm/CRM/Utils/ICalendar.php index 7eee09c9ebc777a001860a5c3061e281c6aece5a..40707d98c0e3ed6e315193df87604138f2a2215a 100644 --- a/civicrm/CRM/Utils/ICalendar.php +++ b/civicrm/CRM/Utils/ICalendar.php @@ -28,16 +28,58 @@ class CRM_Utils_ICalendar { * * @param string $text * Text to escape. + * @param bool $keep_html + * Flag to retain HTML formatting + * @param int $position + * Column number of the start of the string in the ICal output - used to + * determine allowable length of the first line * * @return string */ - public static function formatText($text) { - $text = strip_tags($text); + public static function formatText($text, $keep_html = FALSE, int $position = 0) { + if (!$keep_html) { + $text = preg_replace( + '{ <a [^>]+ \\b href=(?: "( [^"]+ )" | \'( [^\']+ )\' ) [^>]* > ( [^<]* ) </a> }xi', + '$3 ($1$2)', + $text + ); + $text = preg_replace( + '{ < / [^>]+ > \s* }', + "\$0 ", + $text + ); + $text = preg_replace( + '{ <(br|/tr|/div|/h[1-6]) (\s [^>]*)? > (\s* \n)? }xi', + "\$0\n", + $text + ); + $text = preg_replace( + '{ </p> (\s* \n)? }xi', + "\$0\n\n", + $text + ); + $text = strip_tags($text); + $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML401, 'UTF-8'); + } + $text = str_replace("\\", "\\\\", $text); $text = str_replace(',', '\,', $text); $text = str_replace(';', '\;', $text); $text = str_replace(["\r\n", "\n", "\r"], "\\n ", $text); - $text = implode("\n ", str_split($text, 50)); + + // Remove this check after PHP 7.4 becomes a minimum requirement + $str_split = function_exists('mb_str_split') ? 'mb_str_split' : 'str_split'; + + if ($keep_html) { + $text = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><html><body>' . $text . '</body></html>'; + } + $prefix = ''; + if ($position) { + $prefixlen = max(50 - $position, 0); + $prefix = mb_substr($text, 0, $prefixlen) . "\n "; + $text = mb_substr($text, $prefixlen); + } + $text = $prefix . implode("\n ", $str_split($text, 50)); return $text; } @@ -50,6 +92,7 @@ class CRM_Utils_ICalendar { * @return string */ public static function unformatText($text) { + $text = str_replace("\n ", "", $text); $text = str_replace('\n ', "\n", $text); $text = str_replace('\;', ';', $text); $text = str_replace('\,', ',', $text); @@ -116,4 +159,60 @@ class CRM_Utils_ICalendar { echo $calendar; } + /** + * @param array $timezones - Timezone strings + * @param $date_min + * @param $date_max + * + * @return array + */ + public static function generate_timezones(array $timezones, $date_min, $date_max) { + if (empty($timezones)) { + return []; + } + + $tz_items = []; + + foreach ($timezones as $tzstr) { + $timezone = new DateTimeZone($tzstr); + + $transitions = $timezone->getTransitions($date_min, $date_max); + + if (count($transitions) === 1) { + $transitions[] = array_values($transitions)[0]; + } + + $item = [ + 'id' => $timezone->getName(), + 'transitions' => [], + ]; + + $last_transition = array_shift($transitions); + + foreach ($transitions as $transition) { + $item['transitions'][] = [ + 'type' => $transition['isdst'] ? 'DAYLIGHT' : 'STANDARD', + 'offset_from' => self::format_tz_offset($last_transition['offset']), + 'offset_to' => self::format_tz_offset($transition['offset']), + 'abbr' => $transition['abbr'], + 'dtstart' => date_create($transition['time'], $timezone)->format("Ymd\THis"), + ]; + + $last_transition = $transition; + } + + $tz_items[] = $item; + } + + return $tz_items; + } + + protected static function format_tz_offset($offset) { + $offset /= 60; + $hours = intval($offset / 60); + $minutes = abs(intval($offset % 60)); + + return sprintf('%+03d%02d', $hours, $minutes); + } + } diff --git a/civicrm/CRM/Utils/LazyArray.php b/civicrm/CRM/Utils/LazyArray.php index 4ea6ab165995fee43417bda46505da6f1cf313e1..72f8089711f862891dfbc5a069172e29c9044b3d 100644 --- a/civicrm/CRM/Utils/LazyArray.php +++ b/civicrm/CRM/Utils/LazyArray.php @@ -56,15 +56,16 @@ class CRM_Utils_LazyArray implements ArrayAccess, IteratorAggregate, Countable { return $this; } - public function offsetExists($offset) { + public function offsetExists($offset): bool { return isset($this->load()->cache[$offset]); } + #[\ReturnTypeWillChange] public function &offsetGet($offset) { return $this->load()->cache[$offset]; } - public function offsetSet($offset, $value) { + public function offsetSet($offset, $value): void { if ($offset === NULL) { $this->load()->cache[] = $value; } @@ -73,10 +74,11 @@ class CRM_Utils_LazyArray implements ArrayAccess, IteratorAggregate, Countable { } } - public function offsetUnset($offset) { + public function offsetUnset($offset): void { unset($this->load()->cache[$offset]); } + #[\ReturnTypeWillChange] public function getIterator() { return new ArrayIterator($this->load()->cache); } @@ -88,7 +90,7 @@ class CRM_Utils_LazyArray implements ArrayAccess, IteratorAggregate, Countable { return $this->load()->cache; } - public function count() { + public function count(): int { return count($this->load()->cache); } diff --git a/civicrm/CRM/Utils/String.php b/civicrm/CRM/Utils/String.php index 82d36093ad77683e2b27848e6987e0789ed30dc8..93e96d05e05fd0cdf95d6440acf6136f5067c9ae 100644 --- a/civicrm/CRM/Utils/String.php +++ b/civicrm/CRM/Utils/String.php @@ -437,10 +437,9 @@ class CRM_Utils_String { * the converted string */ public static function htmlToText($html) { - require_once 'html2text/rcube_html2text.php'; $token_html = preg_replace('!\{([a-z_.]+)\}!i', 'token:{$1}', $html); - $converter = new rcube_html2text($token_html); - $token_text = $converter->get_text(); + $converter = new \Html2Text\Html2Text($token_html, ['do_links' => 'table', 'width' => 75]); + $token_text = $converter->getText(); $text = preg_replace('!token\:\{([a-z_.]+)\}!i', '{$1}', $token_text); return $text; } @@ -878,7 +877,7 @@ class CRM_Utils_String { if ($fragment === '') { return TRUE; } - $len = strlen($fragment); + $len = strlen($fragment ?? ''); return substr($string, 0, $len) === $fragment; } @@ -895,7 +894,7 @@ class CRM_Utils_String { if ($fragment === '') { return TRUE; } - $len = strlen($fragment); + $len = strlen($fragment ?? ''); return substr($string, -1 * $len) === $fragment; } diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index d92b359d7e031a44d7325c2175d2a69239cd7233..1d8a67cb678897c5eb99a246cb8ba1166a2b1b53 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -207,7 +207,7 @@ class CRM_Utils_System { * * @param array|string $query * - * @return string + * @return string|null */ public static function makeQueryString($query) { if (is_array($query)) { @@ -255,12 +255,12 @@ class CRM_Utils_System { $query = self::makeQueryString($query); // Legacy handling for when the system passes around html escaped strings - if (strstr($query, '&')) { + if (strstr(($query ?? ''), '&')) { $query = html_entity_decode($query); } // Extract fragment from path or query if munged together - if ($query && strstr($query, '#')) { + if ($query && strstr(($query ?? ''), '#')) { list($path, $fragment) = explode('#', $query); } if ($path && strstr($path, '#')) { diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index 336d07568abf71d5c323eb4b6d8b37cd487f2b81..d2e5fa93bbe66fa9d5e0306cf99e829529a8558c 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -729,7 +729,7 @@ abstract class CRM_Utils_System_Base { } } else { - $userFrameworkResourceURL = NULL; + $userFrameworkResourceURL = ''; } return [ diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index d5e4e5dabf9e3e4b619dd998329fc3dd2e6021b5..928814f6d6d2900f59728dbb9eef1216a5462da4 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -881,6 +881,12 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { 'role' => get_option('default_role'), ]; + // The notify parameter was ignored on WordPress and default behaviour was to always notify. + // Preserve that behaviour but allow the "notify" parameter to be used. + if (!isset($params['notify'])) { + $params['notify'] = TRUE; + } + // If there's a password add it, otherwise generate one. if (!empty($params['cms_pass'])) { $user_data['user_pass'] = $params['cms_pass']; @@ -939,8 +945,10 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { wp_signon($creds, FALSE); } - // Fire the new user action. Sends notification email by default. - do_action('register_new_user', $uid); + if ($params['notify']) { + // Fire the new user action. Sends notification email by default. + do_action('register_new_user', $uid); + } // Restore the CiviCRM-WordPress listeners. $this->hooks_core_add(); diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php index 70395abd76810e223b4c514092ce4e969889e23d..96cc6120fc5f025bd31ba85dc70a032e61eff04d 100644 --- a/civicrm/Civi/API/Kernel.php +++ b/civicrm/Civi/API/Kernel.php @@ -86,12 +86,12 @@ class Kernel { $this->dispatcher->dispatch('civi.api.exception', new ExceptionEvent($e, NULL, $apiRequest, $this)); } - if ($e instanceof \PEAR_Exception) { - $err = $this->formatPearException($e, $apiRequest); - } - elseif ($e instanceof \API_Exception) { + if ($e instanceof \API_Exception) { $err = $this->formatApiException($e, $apiRequest); } + elseif ($e instanceof \PEAR_Exception) { + $err = $this->formatPearException($e, $apiRequest); + } else { $err = $this->formatException($e, $apiRequest); } diff --git a/civicrm/Civi/Angular/AngularLoader.php b/civicrm/Civi/Angular/AngularLoader.php index a6b5f80a42e8f3c40237a69ba3fc994f755be7cc..086756a3b407eac39d65cf8f646309c0c7f942fa 100644 --- a/civicrm/Civi/Angular/AngularLoader.php +++ b/civicrm/Civi/Angular/AngularLoader.php @@ -47,6 +47,13 @@ class AngularLoader { */ protected $region; + /** + * @var array + * When adding supplimental modules via snippet, + * these modules are already loaded. + */ + protected $modulesAlreadyLoaded = []; + /** * @var string * Ex: 'civicrm/a'. @@ -73,6 +80,12 @@ class AngularLoader { $this->region = \CRM_Utils_Request::retrieve('snippet', 'String') ? 'ajax-snippet' : 'html-header'; $this->pageName = \CRM_Utils_System::currentPath(); $this->modules = []; + // List of already-present modules may be provided by crmSnippet (see crm.ajax.js) + if ($this->region === 'ajax-snippet' && !empty($_GET['crmAngularModules'])) { + $this->modulesAlreadyLoaded = explode(',', $_GET['crmAngularModules']); + } + // Ensure region exists + \CRM_Core_Region::instance($this->region); } /** @@ -85,13 +98,13 @@ class AngularLoader { */ public function load() { \CRM_Core_Error::deprecatedFunctionWarning('angularjs.loader service'); - return $this->loadAngularResources(); + $this->loadAngularResources(); + return $this; } /** * Load scripts, styles & settings for the active modules. * - * @return $this * @throws \CRM_Core_Exception */ private function loadAngularResources() { @@ -115,7 +128,13 @@ class AngularLoader { ]); } - $moduleNames = $this->findActiveModules(); + $allModules = $this->findActiveModules(); + $moduleNames = array_values(array_diff($allModules, $this->modulesAlreadyLoaded)); + + if (!$moduleNames && $this->modulesAlreadyLoaded) { + // No modules to load + return; + } if (!$this->isAllModules($moduleNames)) { $assetParams = ['modules' => implode(',', $moduleNames)]; } @@ -124,7 +143,7 @@ class AngularLoader { $assetParams = ['nonce' => md5(implode(',', $moduleNames))]; } - $res->addSettingsFactory(function () use (&$moduleNames, $angular, $res, $assetParams) { + $res->addSettingsFactory(function () use (&$moduleNames, $angular, $res, $assetParams, $allModules) { // Merge static settings with the results of settingsFactory functions $settingsByModule = $angular->getResources($moduleNames, 'settings', 'settings'); foreach ($angular->getResources($moduleNames, 'settingsFactory', 'settingsFactory') as $moduleName => $factory) { @@ -144,7 +163,7 @@ class AngularLoader { return array_merge($settingsByModule, ['permissions' => $permissions], [ 'resourceUrls' => \CRM_Extension_System::singleton()->getMapper()->getActiveModuleUrls(), 'angular' => [ - 'modules' => $moduleNames, + 'modules' => $allModules, 'requires' => $angular->getResources($moduleNames, 'requires', 'requires'), 'cacheCode' => $res->getCacheCode(), 'bundleUrl' => \Civi::service('asset_builder')->getUrl('angular-modules.json', $assetParams), @@ -152,13 +171,17 @@ class AngularLoader { ]); }); - $res->addScriptFile('civicrm', 'bower_components/angular/angular.min.js', 100, $this->getRegion(), FALSE); + if (!$this->modulesAlreadyLoaded) { + $res->addScriptFile('civicrm', 'bower_components/angular/angular.min.js', 100, $this->getRegion(), FALSE); + } $headOffset = 0; $config = \CRM_Core_Config::singleton(); - if ($config->debug) { - // FIXME: The `resetLocationProviderHashPrefix.js` has to stay in sync with `\Civi\Angular\Page\Modules::buildAngularModules()`. - $res->addScriptFile('civicrm', 'ang/resetLocationProviderHashPrefix.js', 101, $this->getRegion(), FALSE); + if ($config->debug || $this->modulesAlreadyLoaded) { + if (!$this->modulesAlreadyLoaded) { + // FIXME: The `resetLocationProviderHashPrefix.js` has to stay in sync with `\Civi\Angular\Page\Modules::buildAngularModules()`. + $res->addScriptFile('civicrm', 'ang/resetLocationProviderHashPrefix.js', 101, $this->getRegion(), FALSE); + } foreach ($moduleNames as $moduleName) { foreach ($this->angular->getResources($moduleName, 'css', 'cacheUrl') as $url) { $res->addStyleUrl($url, self::DEFAULT_MODULE_WEIGHT + (++$headOffset), $this->getRegion()); @@ -187,11 +210,11 @@ class AngularLoader { } } // Add bundles - foreach ($this->angular->getResources($moduleNames, 'bundles', 'bundles') as $bundles) { - $res->addBundle($bundles); + if (!$this->modulesAlreadyLoaded) { + foreach ($this->angular->getResources($moduleNames, 'bundles', 'bundles') as $bundles) { + $res->addBundle($bundles); + } } - - return $this; } /** @@ -366,7 +389,9 @@ class AngularLoader { public function onRegionRender($e) { if ($e->region->_name === $this->region && ($this->modules || $this->crmApp)) { $this->loadAngularResources(); - $this->res->addScriptFile('civicrm', 'js/crm-angularjs-loader.js', 200, $this->getRegion(), FALSE); + if (!$this->modulesAlreadyLoaded) { + $this->res->addScriptFile('civicrm', 'js/crm-angularjs-loader.js', 200, $this->getRegion(), FALSE); + } } } diff --git a/civicrm/Civi/Angular/Manager.php b/civicrm/Civi/Angular/Manager.php index 79883b8552f2b860e537b6115c8f857f6e9640f1..5be75c18aa81d2dd2cb3bc51307d6046606a4175 100644 --- a/civicrm/Civi/Angular/Manager.php +++ b/civicrm/Civi/Angular/Manager.php @@ -117,7 +117,6 @@ class Manager { $angularModules['jsonFormatter'] = include "$civicrm_root/ang/jsonFormatter.ang.php"; $angularModules['ngRoute'] = include "$civicrm_root/ang/ngRoute.ang.php"; $angularModules['ngSanitize'] = include "$civicrm_root/ang/ngSanitize.ang.php"; - $angularModules['ui.utils'] = include "$civicrm_root/ang/ui.utils.ang.php"; $angularModules['ui.bootstrap'] = include "$civicrm_root/ang/ui.bootstrap.ang.php"; $angularModules['ui.sortable'] = include "$civicrm_root/ang/ui.sortable.ang.php"; $angularModules['unsavedChanges'] = include "$civicrm_root/ang/unsavedChanges.ang.php"; diff --git a/civicrm/Civi/Api4/Generic/AbstractAction.php b/civicrm/Civi/Api4/Generic/AbstractAction.php index 0abc53a3fd52cf803f56652946b9b7d330319b6f..0aa5e8be4bc8ffbe70ebc4b68d27efced94e5085 100644 --- a/civicrm/Civi/Api4/Generic/AbstractAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractAction.php @@ -327,13 +327,14 @@ abstract class AbstractAction implements \ArrayAccess { /** * @inheritDoc */ - public function offsetExists($offset) { + public function offsetExists($offset): bool { return in_array($offset, ['entity', 'action', 'params', 'version', 'check_permissions', 'id']) || isset($this->_arrayStorage[$offset]); } /** * @inheritDoc */ + #[\ReturnTypeWillChange] public function &offsetGet($offset) { $val = NULL; if (in_array($offset, ['entity', 'action'])) { @@ -359,7 +360,7 @@ abstract class AbstractAction implements \ArrayAccess { /** * @inheritDoc */ - public function offsetSet($offset, $value) { + public function offsetSet($offset, $value): void { if (in_array($offset, ['entity', 'action', 'entityName', 'actionName', 'params', 'version', 'id'])) { throw new \API_Exception('Cannot modify api4 state via array access'); } @@ -374,7 +375,7 @@ abstract class AbstractAction implements \ArrayAccess { /** * @inheritDoc */ - public function offsetUnset($offset) { + public function offsetUnset($offset): void { if (in_array($offset, ['entity', 'action', 'entityName', 'actionName', 'params', 'check_permissions', 'version', 'id'])) { throw new \API_Exception('Cannot modify api4 state via array access'); } diff --git a/civicrm/Civi/Api4/Generic/ExportAction.php b/civicrm/Civi/Api4/Generic/ExportAction.php index aed9e322a42bb27b9dbb1278bb35078612c82fbc..87cd3c5048e96befd289d59d892a091852a7bb7f 100644 --- a/civicrm/Civi/Api4/Generic/ExportAction.php +++ b/civicrm/Civi/Api4/Generic/ExportAction.php @@ -81,21 +81,19 @@ class ExportAction extends AbstractAction { 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']; $select[] = $field['name'] . '.name'; $pseudofields[$field['name'] . '.name'] = $field['name']; } // Use pseudoconstant syntax if appropriate elseif ($this->shouldUsePseudoconstant($entityType, $field)) { + $select[] = $field['name']; $select[] = $field['name'] . ':name'; $pseudofields[$field['name'] . ':name'] = $field['name']; } elseif (empty($field['fk_entity'])) { $select[] = $field['name']; } - // Needed for exporting the option group for a custom field - if ($entityType === 'CustomField' && ($field['fk_entity'] ?? NULL) === 'OptionGroup') { - $select[] = $field['name']; - } } $record = civicrm_api4($entityType, 'get', [ 'checkPermissions' => $this->checkPermissions, @@ -107,13 +105,6 @@ class ExportAction extends AbstractAction { } // 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) { @@ -144,7 +135,15 @@ class ExportAction extends AbstractAction { ) { $this->exportRecord('OptionGroup', $record['option_group_id'], $result); } - unset($record['option_group_id']); + } + // Don't use joins/pseudoconstants if null or if it has the same value as the original + foreach ($pseudofields as $alias => $fieldName) { + if (!isset($record[$alias]) || $record[$alias] == ($record[$fieldName] ?? NULL)) { + unset($record[$alias]); + } + else { + unset($record[$fieldName]); + } } $result[] = [ 'name' => $name, @@ -221,6 +220,10 @@ class ExportAction extends AbstractAction { return FALSE; } $daoName = CoreUtil::getInfoItem($entityType, 'dao'); + // Exception for Profile.field_name + if ($entityType === 'UFField' && $field['name'] === 'field_name') { + return TRUE; + } // 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'])) { diff --git a/civicrm/Civi/Api4/Generic/Result.php b/civicrm/Civi/Api4/Generic/Result.php index 3689bee31153b12bdfcf5b9644ca410c9532356a..c1896890bf32b20edc7f542588ef89bea52db5b4 100644 --- a/civicrm/Civi/Api4/Generic/Result.php +++ b/civicrm/Civi/Api4/Generic/Result.php @@ -157,7 +157,7 @@ class Result extends \ArrayObject implements \JsonSerializable { * * @return int */ - public function count() { + public function count(): int { return $this->rowCount ?? parent::count(); } @@ -211,6 +211,7 @@ class Result extends \ArrayObject implements \JsonSerializable { /** * @return array */ + #[\ReturnTypeWillChange] public function jsonSerialize() { return $this->getArrayCopy(); } diff --git a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php index 7899ebe46ef65e5a33bcc1e3b7ff61e95fd91ffb..c18381c1ebb1a4288e9e95e9c57b140df6fca722 100644 --- a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php @@ -176,23 +176,26 @@ class RequestSpec implements \Iterator { return $this->action; } + #[\ReturnTypeWillChange] public function rewind() { return reset($this->fields); } + #[\ReturnTypeWillChange] public function current() { return current($this->fields); } + #[\ReturnTypeWillChange] public function key() { return key($this->fields); } - public function next() { - return next($this->fields); + public function next(): void { + next($this->fields); } - public function valid() { + public function valid(): bool { return key($this->fields) !== NULL; } diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index ad7a79b3c739a4c5ecc36eb17e4ba1c9d1b47f0c..b8bd38fc13ec2c2e72151a38a70d2a054b056990 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -257,7 +257,7 @@ class SpecFormatter { if (property_exists($query, $ret)) { // Note: our schema is inconsistent about whether `description` fields allow html, // but it's usually assumed to be plain text, so we strip_tags() to standardize it. - $options[$optionIndex[$query->id]][$ret] = $ret === 'description' ? strip_tags($query->$ret) : $query->$ret; + $options[$optionIndex[$query->id]][$ret] = $ret === 'description' ? strip_tags($query->$ret ?? '') : $query->$ret; } } } diff --git a/civicrm/Civi/Api4/UFMatch.php b/civicrm/Civi/Api4/UFMatch.php index cb4df4ec43cf6be20a97a9ceaf21b7ac35109c51..5854f4413024fc49957e64f609f49f53d562d945 100644 --- a/civicrm/Civi/Api4/UFMatch.php +++ b/civicrm/Civi/Api4/UFMatch.php @@ -13,7 +13,7 @@ namespace Civi\Api4; /** * UFMatch entity - links civicrm contacts with users created externally * - * @searchable none + * @searchable secondary * @since 5.19 * @package Civi\Api4 */ diff --git a/civicrm/Civi/Api4/Utils/FormattingUtil.php b/civicrm/Civi/Api4/Utils/FormattingUtil.php index 5d6991622ec196c2d37f246fc80d0d85d7c9e88c..da1129ad4fa606350e9c0c14d836729cc9f607ec 100644 --- a/civicrm/Civi/Api4/Utils/FormattingUtil.php +++ b/civicrm/Civi/Api4/Utils/FormattingUtil.php @@ -89,7 +89,7 @@ class FormattingUtil { */ public static function formatInputValue(&$value, ?string $fieldName, array $fieldSpec, &$operator = NULL, $index = NULL) { // Evaluate pseudoconstant suffix - $suffix = strpos($fieldName, ':'); + $suffix = strpos(($fieldName ?? ''), ':'); if ($suffix) { $options = self::getPseudoconstantList($fieldSpec, $fieldName, [], $operator ? 'get' : 'create'); $value = self::replacePseudoconstant($options, $value, TRUE); @@ -145,7 +145,7 @@ class FormattingUtil { public static function formatDateValue($format, $value, &$operator = NULL, $index = NULL) { // Non-relative dates (or if no search operator) if (!$operator || !array_key_exists($value, \CRM_Core_OptionGroup::values('relative_date_filters'))) { - return date($format, strtotime($value)); + return date($format, strtotime($value ?? '')); } if (isset($index) && !strstr($operator, 'BETWEEN')) { throw new \API_Exception("Relative dates cannot be in an array using the $operator operator."); @@ -196,7 +196,7 @@ class FormattingUtil { $contactTypePaths = []; foreach ($result as $key => $value) { $fieldExpr = SqlExpression::convert($selectAliases[$key] ?? $key); - $fieldName = \CRM_Utils_Array::first($fieldExpr->getFields()); + $fieldName = \CRM_Utils_Array::first($fieldExpr->getFields() ?? ''); $baseName = $fieldName ? \CRM_Utils_Array::first(explode(':', $fieldName)) : NULL; $field = $fields[$fieldName] ?? $fields[$baseName] ?? NULL; $dataType = $field['data_type'] ?? ($fieldName == 'id' ? 'Integer' : NULL); @@ -209,7 +209,7 @@ class FormattingUtil { $dataType = NULL; } // Evaluate pseudoconstant suffixes - $suffix = strrpos($fieldName, ':'); + $suffix = strrpos(($fieldName ?? ''), ':'); $fieldOptions = NULL; if ($suffix) { $fieldOptions = self::getPseudoconstantList($field, $fieldName, $result, $action); diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index 6da903c0d55170a3e88b299392eee44ff5ad1bbb..dc48b4926357e5160c0f8c42e8e17ac1f9830492 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -200,6 +200,18 @@ class Container { ] ))->setFactory('CRM_Utils_Cache::create')->setPublic(TRUE); + // Memcache is limited to 1 MB by default, and since this is not read often + // it does not make much sense in Redis either. + $container->setDefinition('cache.extension_browser', new Definition( + 'CRM_Utils_Cache_Interface', + [ + [ + 'name' => 'extension_browser', + 'type' => ['SqlGroup', 'ArrayCache'], + ], + ] + ))->setFactory('CRM_Utils_Cache::create')->setPublic(TRUE); + $container->setDefinition('sql_triggers', new Definition( 'Civi\Core\SqlTriggers', [] diff --git a/civicrm/Civi/Core/Resolver.php b/civicrm/Civi/Core/Resolver.php index a3950c74e9f0f4cf6f9d95a3219f3cd81d6fe5ed..67d4689117d4a1fb60373d3b1eb36bc01670d94f 100644 --- a/civicrm/Civi/Core/Resolver.php +++ b/civicrm/Civi/Core/Resolver.php @@ -251,7 +251,8 @@ class ResolverApi { class ResolverGlobalCallback { private $mode; - private $path; + private $basePath; + private $subPath; /** * Class constructor. @@ -259,10 +260,13 @@ class ResolverGlobalCallback { * @param string $mode * 'getter' or 'setter'. * @param string $path + * Ex: 'dbLocale' <=> $GLOBALS['dbLocale'] + * Ex: 'civicrm_setting/domain/debug_enabled' <=> $GLOBALS['civicrm_setting']['domain']['debug_enabled'] */ public function __construct($mode, $path) { $this->mode = $mode; - $this->path = $path; + $this->subPath = explode('/', $path); + $this->basePath = array_shift($this->subPath); } /** @@ -273,11 +277,12 @@ class ResolverGlobalCallback { * @return mixed */ public function __invoke($arg1 = NULL) { + // For PHP 8.1+ compatibility, we resolve the first path-item before doing any array operations. if ($this->mode === 'getter') { - return \CRM_Utils_Array::pathGet($GLOBALS, explode('/', $this->path)); + return \CRM_Utils_Array::pathGet($GLOBALS[$this->basePath], $this->subPath); } elseif ($this->mode === 'setter') { - \CRM_Utils_Array::pathSet($GLOBALS, explode('/', $this->path), $arg1); + \CRM_Utils_Array::pathSet($GLOBALS[$this->basePath], $this->subPath, $arg1); return NULL; } else { diff --git a/civicrm/Civi/Core/SqlTriggers.php b/civicrm/Civi/Core/SqlTriggers.php index b1ac987d532fe8bcc811ebe444dd6cd88d4d058c..91b5cb943894cf42d199c5a345e2b1856cae474c 100644 --- a/civicrm/Civi/Core/SqlTriggers.php +++ b/civicrm/Civi/Core/SqlTriggers.php @@ -118,9 +118,10 @@ class SqlTriggers { $template_values, $value['sql'] ); + // @todo See https://github.com/civicrm/civicrm-core/pull/23926#discussion_r912298758. It's not clear 'variables' is used anywhere, and isn't documented or unit tested. $variables = str_replace($template_params, $template_values, - \CRM_Utils_Array::value('variables', $value) + $value['variables'] ?? '' ); if (!isset($triggers[$tableName][$eventName])) { diff --git a/civicrm/Civi/Test.php b/civicrm/Civi/Test.php index 53c3df5ed1271fae59ebbeb397e678c44fe18dfe..dfa4d31c307c5d0bd08359c54502cd070275909f 100644 --- a/civicrm/Civi/Test.php +++ b/civicrm/Civi/Test.php @@ -32,7 +32,7 @@ class Test { $conn = \Civi\Test::pdo(); $oldEscaper = \CRM_Core_I18n::$SQL_ESCAPER; - \Civi::$statics['testPreInstall'] = (\Civi::$statics['testPreInstall'] ?? 0) + 1; + \Civi\Test::$statics['testPreInstall'] = (\Civi\Test::$statics['testPreInstall'] ?? 0) + 1; try { \CRM_Core_I18n::$SQL_ESCAPER = function ($text) use ($conn) { return substr($conn->quote($text), 1, -1); @@ -40,9 +40,9 @@ class Test { return $callback(); } finally { \CRM_Core_I18n::$SQL_ESCAPER = $oldEscaper; - \Civi::$statics['testPreInstall']--; - if (\Civi::$statics['testPreInstall'] <= 0) { - unset(\Civi::$statics['testPreInstall']); + \Civi\Test::$statics['testPreInstall']--; + if (\Civi\Test::$statics['testPreInstall'] <= 0) { + unset(\Civi\Test::$statics['testPreInstall']); } } } diff --git a/civicrm/Civi/Test/Data.php b/civicrm/Civi/Test/Data.php index d2007f9e82a4065a597961de4e16dea3facd7037..87116adfeb67ac3a24b35415c8735669cd9a8983 100644 --- a/civicrm/Civi/Test/Data.php +++ b/civicrm/Civi/Test/Data.php @@ -42,6 +42,7 @@ class Data { unset($query, $query2, $query3); \Civi\Test::schema()->setStrict(TRUE); + \Civi::reset(); }); civicrm_api('setting', 'create', ['installed' => 1, 'domain_id' => 'all', 'version' => 3]); diff --git a/civicrm/Civi/Token/TokenProcessor.php b/civicrm/Civi/Token/TokenProcessor.php index eabab5296f5fcea959c80ac6a535de3b93d6c641..87290e4aec6b56aedc2fb6231d23e35c7c3187fd 100644 --- a/civicrm/Civi/Token/TokenProcessor.php +++ b/civicrm/Civi/Token/TokenProcessor.php @@ -480,7 +480,7 @@ class TokenProcessor { return $value->getAmount(); default: - throw new \CRM_Core_Exception("Invalid token filter: $filter"); + throw new \CRM_Core_Exception("Invalid token filter: " . json_encode($filter, JSON_UNESCAPED_SLASHES)); } } @@ -505,7 +505,7 @@ class TokenProcessor { } default: - throw new \CRM_Core_Exception("Invalid token filter: $filter"); + throw new \CRM_Core_Exception("Invalid token filter: " . json_encode($filter, JSON_UNESCAPED_SLASHES)); } } @@ -528,6 +528,7 @@ class TokenRowIterator extends \IteratorIterator { $this->tokenProcessor = $tokenProcessor; } + #[\ReturnTypeWillChange] public function current() { return new TokenRow($this->tokenProcessor, parent::key()); } diff --git a/civicrm/Civi/Token/TokenRow.php b/civicrm/Civi/Token/TokenRow.php index 67010083918f5b7b22c1aed21a6889149f1a7199..0ef5b067e36a0dcf3e0b950a9fe28f1eb3705b05 100644 --- a/civicrm/Civi/Token/TokenRow.php +++ b/civicrm/Civi/Token/TokenRow.php @@ -355,7 +355,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * * @return bool */ - public function offsetExists($offset) { + public function offsetExists($offset): bool { return isset($this->tokenProcessor->rowContexts[$this->tokenRow][$offset]) || isset($this->tokenProcessor->context[$offset]); } @@ -367,6 +367,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * * @return string */ + #[\ReturnTypeWillChange] public function &offsetGet($offset) { if (isset($this->tokenProcessor->rowContexts[$this->tokenRow][$offset])) { return $this->tokenProcessor->rowContexts[$this->tokenRow][$offset]; @@ -384,7 +385,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * @param string $offset * @param mixed $value */ - public function offsetSet($offset, $value) { + public function offsetSet($offset, $value): void { $this->tokenProcessor->rowContexts[$this->tokenRow][$offset] = $value; } @@ -393,7 +394,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * * @param mixed $offset */ - public function offsetUnset($offset) { + public function offsetUnset($offset): void { unset($this->tokenProcessor->rowContexts[$this->tokenRow][$offset]); } @@ -402,6 +403,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * * @return \ArrayIterator */ + #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->createMergedArray()); } @@ -411,7 +413,7 @@ class TokenRowContext implements \ArrayAccess, \IteratorAggregate, \Countable { * * @return int */ - public function count() { + public function count(): int { return count($this->createMergedArray()); } diff --git a/civicrm/ang/crmCaseType.ang.php b/civicrm/ang/crmCaseType.ang.php index f035068cde8e2f9a97aaf300331983b323468bc6..62ba2a55c378a15d85091cff40fb3f73b3c52640 100644 --- a/civicrm/ang/crmCaseType.ang.php +++ b/civicrm/ang/crmCaseType.ang.php @@ -7,5 +7,5 @@ return [ 'js' => ['ang/crmCaseType.js'], 'css' => ['ang/crmCaseType.css'], 'partials' => ['ang/crmCaseType'], - 'requires' => ['ngRoute', 'ui.utils', 'crmUi', 'unsavedChanges', 'crmUtil', 'crmResource'], + 'requires' => ['ngRoute', 'crmUi', 'unsavedChanges', 'crmUtil', 'crmResource'], ]; diff --git a/civicrm/ang/crmCaseType.js b/civicrm/ang/crmCaseType.js index c8b836b385d464b823c76723144669920dc8dce8..5e8d49d7a802eae07c3b004b5078dab74c1a0064 100644 --- a/civicrm/ang/crmCaseType.js +++ b/civicrm/ang/crmCaseType.js @@ -239,7 +239,7 @@ }; }); - crmCaseType.controller('CaseTypeCtrl', function($scope, crmApi, apiCalls, crmUiHelp) { + crmCaseType.controller('CaseTypeCtrl', function($scope, $timeout, crmApi, apiCalls, crmUiHelp) { var defaultAssigneeDefaultValue, ts; (function init () { @@ -254,6 +254,10 @@ initCaseType(); initCaseTypeDefinition(); initSelectedStatuses(); + + $timeout(function() { + $('form[name=editCaseTypeForm] .crmCaseType-acttab').tabs({show: true, hide: true}); + }); })(); /// Stores the api calls results in the $scope object diff --git a/civicrm/ang/crmCaseType/edit.html b/civicrm/ang/crmCaseType/edit.html index 034093b2707596665d06ad3b75d0d14e48ed6698..47e3f3c13f3acfcbe1adcd8be7e2c654122b9759 100644 --- a/civicrm/ang/crmCaseType/edit.html +++ b/civicrm/ang/crmCaseType/edit.html @@ -13,7 +13,7 @@ Required vars: caseType <div ng-include="'~/crmCaseType/caseTypeDetails.html'"></div> - <div ng-show="isForkable()" class="crmCaseType-acttab" ui-jq="tabs" ui-options="{show: true, hide: true}"> + <div ng-show="isForkable()" class="crmCaseType-acttab"> <ul> <li><a href="#acttab-roles">{{:: ts('Case Roles') }}</a></li> <li><a href="#acttab-statuses">{{:: ts('Case Statuses') }}</a></li> diff --git a/civicrm/ang/crmCaseType/timelineTable.html b/civicrm/ang/crmCaseType/timelineTable.html index e25351d782812116ca64813b214c1e42894909e7..7703d57e21051ee9149f6b7631246a374e643757 100644 --- a/civicrm/ang/crmCaseType/timelineTable.html +++ b/civicrm/ang/crmCaseType/timelineTable.html @@ -27,8 +27,7 @@ Required vars: activitySet </td> <td> <select - ui-jq="select2" - ui-options="{dropdownAutoWidth: true}" + crm-ui-select="{dropdownAutoWidth: true}" ng-model="activity.status" ng-options="actStatus.name as actStatus.label for actStatus in activityStatuses|orderBy:'label'" > @@ -37,8 +36,7 @@ Required vars: activitySet </td> <td> <select - ui-jq="select2" - ui-options="{dropdownAutoWidth: true}" + crm-ui-select="{dropdownAutoWidth: true}" ng-model="activity.reference_activity" ng-options="activityType.name as activityType.label for activityType in caseType.definition.timelineActivityTypes" > @@ -55,8 +53,7 @@ Required vars: activitySet </td> <td> <select - ui-jq="select2" - ui-options="{dropdownAutoWidth: true}" + crm-ui-select="{dropdownAutoWidth: true}" ng-model="activity.reference_select" ng-options="key as value for (key,value) in {newest: ts('Newest'), oldest: ts('Oldest')}" > @@ -64,8 +61,7 @@ Required vars: activitySet </td> <td> <select - ui-jq="select2" - ui-options="{dropdownAutoWidth: true}" + crm-ui-select="{dropdownAutoWidth: true}" ng-model="activity.default_assignee_type" ng-options="option.value as option.label for option in defaultAssigneeTypes" ng-change="clearActivityDefaultAssigneeValues(activity)" @@ -73,8 +69,7 @@ Required vars: activitySet <p ng-if="activity.default_assignee_type === defaultAssigneeTypeValues.BY_RELATIONSHIP"> <select - ui-jq="select2" - ui-options="{dropdownAutoWidth: true}" + crm-ui-select="{dropdownAutoWidth: true}" ng-model="activity.default_assignee_relationship" ng-options="option.id as option.text for option in relationshipTypeOptions" required diff --git a/civicrm/ang/crmCxn.ang.php b/civicrm/ang/crmCxn.ang.php index f78e6b104432372d9fee3274e7542351014c3a6c..752a7bf7cbee524d0d1de6a983a4e51f9aa432d6 100644 --- a/civicrm/ang/crmCxn.ang.php +++ b/civicrm/ang/crmCxn.ang.php @@ -5,5 +5,5 @@ return [ 'js' => ['ang/crmCxn.js', 'ang/crmCxn/*.js'], 'css' => ['ang/crmCxn.css'], 'partials' => ['ang/crmCxn'], - 'requires' => ['crmUtil', 'ngRoute', 'ngSanitize', 'ui.utils', 'crmUi', 'dialogService', 'crmResource'], + 'requires' => ['crmUtil', 'ngRoute', 'ngSanitize', 'crmUi', 'dialogService', 'crmResource'], ]; diff --git a/civicrm/ang/crmMailing.ang.php b/civicrm/ang/crmMailing.ang.php index 1499250fc03b91775a06561c607d3d2f1c9ada09..e93dca1272074d07c8c9c317cd599b437190739f 100644 --- a/civicrm/ang/crmMailing.ang.php +++ b/civicrm/ang/crmMailing.ang.php @@ -11,7 +11,7 @@ return [ 'css' => ['ang/crmMailing.css'], 'partials' => ['ang/crmMailing'], 'settingsFactory' => ['CRM_Mailing_Info', 'createAngularSettings'], - 'requires' => ['crmUtil', 'crmAttachment', 'crmAutosave', 'ngRoute', 'ui.utils', 'crmUi', 'dialogService', 'crmResource'], + 'requires' => ['crmUtil', 'crmAttachment', 'crmAutosave', 'ngRoute', 'crmUi', 'dialogService', 'crmResource'], 'permissions' => [ 'view all contacts', 'edit all contacts', diff --git a/civicrm/ang/crmMailing/BlockHeaderFooter.html b/civicrm/ang/crmMailing/BlockHeaderFooter.html index 249560d7856e92bb3b2ce566fda165d6303ae179..ea27d2ac00a848eed9936fd921eb10f766469046 100644 --- a/civicrm/ang/crmMailing/BlockHeaderFooter.html +++ b/civicrm/ang/crmMailing/BlockHeaderFooter.html @@ -8,8 +8,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.header_id" name="header_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true, allowClear: true}" + crm-ui-select="{dropdownAutoWidth : true, allowClear: true}" ng-change="checkTokens(mailing, '*')" ng-model="mailing.header_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'Header'} | orderBy:'name'"> @@ -20,8 +19,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.footer_id" name="footer_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true, allowClear: true}" + crm-ui-select="{dropdownAutoWidth : true, allowClear: true}" ng-change="checkTokens(mailing, '*')" ng-model="mailing.footer_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'Footer'} | orderBy:'name'"> diff --git a/civicrm/ang/crmMailing/BlockPublication.html b/civicrm/ang/crmMailing/BlockPublication.html index 6e82b9fa39cb3b8f6aa1915a7eecb8c1c0db6073..de8e5788ef627c74784f57b1c14f5c28862d01e5 100644 --- a/civicrm/ang/crmMailing/BlockPublication.html +++ b/civicrm/ang/crmMailing/BlockPublication.html @@ -4,8 +4,7 @@ <select crm-ui-id="subform.visibility" name="visibility" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true}" + crm-ui-select="{dropdownAutoWidth : true}" ng-model="mailing.visibility" ng-options="v.key as v.value for v in crmMailingConst.visibility" required diff --git a/civicrm/ang/crmMailing/BlockResponses.html b/civicrm/ang/crmMailing/BlockResponses.html index cf56f00796c57d34b80963bc6b2db6538ae79ea9..5c467ffd0af53c912404158c074acf8da4c08ae2 100644 --- a/civicrm/ang/crmMailing/BlockResponses.html +++ b/civicrm/ang/crmMailing/BlockResponses.html @@ -34,8 +34,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.reply_id" name="reply_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true}" + crm-ui-select="{dropdownAutoWidth : true}" ng-model="mailing.reply_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'Reply'}" required> @@ -46,8 +45,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.optout_id" name="optout_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true}" + crm-ui-select="{dropdownAutoWidth : true}" ng-model="mailing.optout_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'OptOut'}" required> @@ -58,8 +56,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.resubscribe_id" name="resubscribe_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true}" + crm-ui-select="{dropdownAutoWidth : true}" ng-model="mailing.resubscribe_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'Resubscribe'}" required> @@ -70,8 +67,7 @@ Required vars: mailing, crmMailingConst <select crm-ui-id="subform.unsubscribe_id" name="unsubscribe_id" - ui-jq="select2" - ui-options="{dropdownAutoWidth : true}" + crm-ui-select="{dropdownAutoWidth : true}" ng-model="mailing.unsubscribe_id" ng-options="mc.id as mc.name for mc in crmMailingConst.headerfooterList | filter:{component_type: 'Unsubscribe'}" required> diff --git a/civicrm/ang/crmMailingAB.ang.php b/civicrm/ang/crmMailingAB.ang.php index c1f82a5a4640e7eda07fd8ee3217fd869e52914e..38fd42d2c5e2191f8a2d51e0037b08e69f9ad63d 100644 --- a/civicrm/ang/crmMailingAB.ang.php +++ b/civicrm/ang/crmMailingAB.ang.php @@ -11,5 +11,5 @@ return [ ], 'css' => ['ang/crmMailingAB.css'], 'partials' => ['ang/crmMailingAB'], - 'requires' => ['ngRoute', 'ui.utils', 'crmUi', 'crmAttachment', 'crmMailing', 'crmD3', 'crmResource'], + 'requires' => ['ngRoute', 'crmUi', 'crmAttachment', 'crmMailing', 'crmD3', 'crmResource'], ]; diff --git a/civicrm/ang/crmUi.ang.php b/civicrm/ang/crmUi.ang.php index 3351c8748527916ca9843ea67f7c212b71d152fa..0cdb8d9f5ad920b7f3eeb017d367552f49e114d1 100644 --- a/civicrm/ang/crmUi.ang.php +++ b/civicrm/ang/crmUi.ang.php @@ -10,7 +10,6 @@ return [ 'requires' => array_merge( [ 'crmResource', - 'ui.utils', ], // Only require the +10kb if we're likely to need it. $isPretty ? ['jsonFormatter'] : [] diff --git a/civicrm/ang/crmUi.js b/civicrm/ang/crmUi.js index c4559514175025e194d73f7d3a8d79767b0c751a..075e29b0d07382cab65ae380129fa575548a96a2 100644 --- a/civicrm/ang/crmUi.js +++ b/civicrm/ang/crmUi.js @@ -628,7 +628,12 @@ } } - init(); + // If using ngOptions, wait for them to load + if (attrs.ngOptions) { + $timeout(init); + } else { + init(); + } } }; }) @@ -759,14 +764,22 @@ templateUrl: '~/crmUi/tabset.html', transclude: true, controllerAs: 'crmUiTabSetCtrl', - controller: function($scope, $parse) { - var tabs = $scope.tabs = []; // array<$scope> + controller: function($scope, $element, $timeout) { + var init; + $scope.tabs = []; this.add = function(tab) { if (!tab.id) throw "Tab is missing 'id'"; - tabs.push(tab); + $scope.tabs.push(tab); + + // Init jQuery.tabs() once all tabs have been added + if (init) { + $timeout.cancel(init); + } + init = $timeout(function() { + $element.find('.crm-tabset').tabs($scope.tabSetOptions); + }); }; - }, - link: function (scope, element, attrs) {} + } }; }) @@ -1084,21 +1097,27 @@ $timeout(function() { var newPageTitle = _.trim($el.html()), newDocumentTitle = scope.crmDocumentTitle || $el.text(), - h1Count = 0; - document.title = $('title').text().replace(documentTitle, newDocumentTitle); - // If the CMS has already added title markup to the page, use it - $('h1').not('.crm-container h1').each(function() { - if ($(this).hasClass('crm-page-title') || _.trim($(this).html()) === pageTitle) { - $(this).addClass('crm-page-title').html(newPageTitle); - $el.hide(); - ++h1Count; + h1Count = 0, + dialog = $el.closest('.ui-dialog-content'); + if (dialog.length) { + dialog.dialog('option', 'title', newDocumentTitle); + $el.hide(); + } else { + document.title = $('title').text().replace(documentTitle, newDocumentTitle); + // If the CMS has already added title markup to the page, use it + $('h1').not('.crm-container h1').each(function () { + if ($(this).hasClass('crm-page-title') || _.trim($(this).html()) === pageTitle) { + $(this).addClass('crm-page-title').html(newPageTitle); + $el.hide(); + ++h1Count; + } + }); + if (!h1Count) { + $el.show(); } - }); - if (!h1Count) { - $el.show(); + pageTitle = newPageTitle; + documentTitle = newDocumentTitle; } - pageTitle = newPageTitle; - documentTitle = newDocumentTitle; }); } @@ -1157,6 +1176,21 @@ }; }) + // Adds an icon picker widget + // Example: `<input crm-ui-icon-picker ng-model="model.icon">` + .directive('crmUiIconPicker', function($timeout) { + return { + restrict: 'A', + controller: function($element) { + CRM.loadScript(CRM.config.resourceBase + 'js/jquery/jquery.crmIconPicker.js').then(function() { + $timeout(function() { + $element.crmIconPicker(); + }); + }); + } + }; + }) + .run(function($rootScope, $location) { /// Example: <button ng-click="goto('home')">Go home!</button> $rootScope.goto = function(path) { diff --git a/civicrm/ang/crmUi/tabset.html b/civicrm/ang/crmUi/tabset.html index 9a17d97e1bb7085d5f692d611d81ac4d36dc9057..d348197e106c1d6c6a2aaa40f35a5d02b3942b73 100644 --- a/civicrm/ang/crmUi/tabset.html +++ b/civicrm/ang/crmUi/tabset.html @@ -1,4 +1,4 @@ -<div ui-jq="tabs" ui-options="{{tabSetOptions}}" class="crm-tabset"> +<div class="crm-tabset"> <ul> <li ng-repeat="tab in tabs" class="ui-corner-all crm-tab-button crm-count-{{tab.count}}"> <a href="#{{tab.id}}"> @@ -9,4 +9,4 @@ </li> </ul> <div ng-transclude></div> -</div> \ No newline at end of file +</div> diff --git a/civicrm/ang/ui.utils.ang.php b/civicrm/ang/ui.utils.ang.php deleted file mode 100644 index b7eedaee799a522e64e2c98b871417e693fd9d00..0000000000000000000000000000000000000000 --- a/civicrm/ang/ui.utils.ang.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -// This file declares an Angular module which can be autoloaded -return [ - 'ext' => 'civicrm', - 'js' => ['bower_components/angular-ui-utils/ui-utils.min.js'], -]; diff --git a/civicrm/api/Exception.php b/civicrm/api/Exception.php index b32a20a3e1c57c253425315128facda0a6404117..78498fb90170f7a51f9e2c2ba3ab33fcdd5ce355 100644 --- a/civicrm/api/Exception.php +++ b/civicrm/api/Exception.php @@ -8,134 +8,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ -/** - * This api exception returns more information than the default one. The aim - * it let the api consumer know better what is exactly the error without - * having to parse the error message. - * - * If you consume an api that doesn't return an error_code or the extra data - * you need, consider improving the api and contribute. - */ -class API_Exception extends Exception { - const UNAUTHORIZED = 'unauthorized'; - const NOT_IMPLEMENTED = 'not-found'; - - private $extraParams = []; - - /** - * Class constructor. - * - * @param string $message - * The human friendly error message. - * @param mixed $error_code - * A computer friendly error code. By convention, no space (but underscore - * allowed) (ex: mandatory_missing, duplicate, invalid_format). - * @param array $extraParams - * Extra params to return. eg an extra array of ids. It is not mandatory, - * but can help the computer using the api. Keep in mind the api consumer - * isn't to be trusted. eg. the database password is NOT a good extra data. - * @param Exception|NULL $previous - * A previous exception which caused this new exception. - */ - public function __construct($message, $error_code = 0, $extraParams = [], Exception $previous = NULL) { - // Using int for error code "old way") ? - if (is_numeric($error_code)) { - $code = $error_code; - } - else { - $code = 0; - } - parent::__construct(ts($message), $code, $previous); - $this->extraParams = $extraParams + ['error_code' => $error_code]; - } - - /** - * Custom string representation of object. - * - * @return string - */ - public function __toString() { - return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; - } - - /** - * Get extra parameters. - * - * @return array - */ - public function getExtraParams() { - return $this->extraParams; - } - - /** - * Get error codes. - * - * @return array - */ - public function getErrorCodes() { - return [ - 2000 => '$params was not an array', - 2001 => 'Invalid Value for Date field', - 2100 => 'String value is longer than permitted length', - self::UNAUTHORIZED => 'Unauthorized', - self::NOT_IMPLEMENTED => 'Entity or method is not implemented', - ]; - } - -} - -/** - * This api exception returns more information than the default one. We are using it rather than - * API_Exception from the api wrapper as the namespace is more generic - */ -class CiviCRM_API3_Exception extends Exception { - private $extraParams = []; - - /** - * Class constructor. - * - * @param string $message - * The human friendly error message. - * @param mixed $error_code - * A computer friendly error code. By convention, no space (but underscore - * allowed) (ex: mandatory_missing, duplicate, invalid_format). - * @param array $extraParams - * Extra params to return. eg an extra array of ids. It is not mandatory, - * but can help the computer using the api. Keep in mind the api consumer - * isn't to be trusted. eg. the database password is NOT a good extra data. - * @param Exception|NULL $previous - * A previous exception which caused this new exception. - */ - public function __construct($message, $error_code = 0, $extraParams = [], Exception $previous = NULL) { - parent::__construct(ts($message)); - $this->extraParams = $extraParams + ['error_code' => $error_code]; - } - - /** - * Custom string representation of object. - * - * @return string - */ - public function __toString() { - return __CLASS__ . ": [{$this->extraParams['error_code']}: {$this->message}\n"; - } - - /** - * Get error code. - * - * @return mixed - */ - public function getErrorCode() { - return $this->extraParams['error_code']; - } - - /** - * Get extra parameters. - * - * @return array - */ - public function getExtraParams() { - return $this->extraParams; - } +// These two classes were basically equivalent -} +class_alias('CRM_Core_Exception', 'API_Exception'); +class_alias('CRM_Core_Exception', 'CiviCRM_API3_Exception'); diff --git a/civicrm/api/v3/Activity.php b/civicrm/api/v3/Activity.php index d6dc51b7ffabcd6aab626668cdb9395a152c4bf2..275105a5038f3ab451c9a40e06f1603528df8ad7 100644 --- a/civicrm/api/v3/Activity.php +++ b/civicrm/api/v3/Activity.php @@ -694,7 +694,7 @@ function _civicrm_api3_activity_check_params(&$params) { // needs testing $activityTypes = CRM_Activity_BAO_Activity::buildOptions('activity_type_id', 'validate'); $activityName = $params['activity_name'] ?? NULL; - $activityName = ucfirst($activityName); + $activityName = ucfirst($activityName ?? ''); $activityLabel = $params['activity_label'] ?? NULL; if ($activityLabel) { $activityTypes = CRM_Activity_BAO_Activity::buildOptions('activity_type_id', 'create'); diff --git a/civicrm/api/v3/Contact.php b/civicrm/api/v3/Contact.php index 237d170cfac78e54757e87f9513c32256af94e98..eb54fc665cf6c62c23982c5913e1f7f22139558b 100644 --- a/civicrm/api/v3/Contact.php +++ b/civicrm/api/v3/Contact.php @@ -493,7 +493,7 @@ function civicrm_api3_contact_delete($params) { */ function _civicrm_api3_contact_check_params(&$params) { - switch (strtolower(CRM_Utils_Array::value('contact_type', $params))) { + switch (strtolower($params['contact_type'] ?? '')) { case 'household': civicrm_api3_verify_mandatory($params, NULL, ['household_name']); break; diff --git a/civicrm/api/v3/Contribution.php b/civicrm/api/v3/Contribution.php index 6000cd96aec7ac27f728133193ab249832234eac..6154d6343b0762527d86d3b46a53c971fd3f03a8 100644 --- a/civicrm/api/v3/Contribution.php +++ b/civicrm/api/v3/Contribution.php @@ -517,13 +517,11 @@ function civicrm_api3_contribution_completetransaction($params) { $input['receive_date'] = $params['receive_date']; } if (empty($contribution->contribution_page_id)) { - static $domainFromName; - static $domainFromEmail; - if (empty($domainFromEmail) && (empty($params['receipt_from_name']) || empty($params['receipt_from_email']))) { + if (empty($params['receipt_from_name']) || empty($params['receipt_from_email'])) { [$domainFromName, $domainFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); } - $input['receipt_from_name'] = CRM_Utils_Array::value('receipt_from_name', $params, $domainFromName); - $input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail); + $input['receipt_from_name'] = ($input['receipt_from_name'] ?? FALSE) ?: $domainFromName; + $input['receipt_from_email'] = ($input['receipt_from_email'] ?? FALSE) ?: $domainFromEmail; } $input['card_type_id'] = $params['card_type_id'] ?? NULL; $input['pan_truncation'] = $params['pan_truncation'] ?? NULL; @@ -608,6 +606,11 @@ function _civicrm_api3_contribution_completetransaction_spec(&$params) { * @todo - most of this should live in the BAO layer but as we want it to be an addition * to 4.3 which is already stable we should add it to the api layer & re-factor into the BAO layer later * + * @todo this needs a big refactor to use the + * CRM_Contribute_BAO_Contribution::repeatTransaction and Payment.create where + * currently it uses CRM_Contribute_BAO_Contribution::completeOrder and repeats + * a lot of work. See comments in https://github.com/civicrm/civicrm-core/pull/23928 + * * @param array $params * Input parameters. * @@ -616,84 +619,72 @@ function _civicrm_api3_contribution_completetransaction_spec(&$params) { * @throws API_Exception */ function civicrm_api3_contribution_repeattransaction($params) { + civicrm_api3_verify_one_mandatory($params, NULL, ['contribution_recur_id', 'original_contribution_id']); + + // We need a contribution to copy. if (empty($params['original_contribution_id'])) { + // Find one from the given recur. A template contribution is preferred, otherwise use the latest one added. + // @todo this duplicates work done by CRM_Contribute_BAO_Contribution::repeatTransaction & should be removed. $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($params['contribution_recur_id']); if (empty($templateContribution)) { throw new CiviCRM_API3_Exception('Contribution.repeattransaction failed to get original_contribution_id for recur with ID: ' . $params['contribution_recur_id']); } - $params['original_contribution_id'] = $templateContribution['id']; - } - $contribution = new CRM_Contribute_BAO_Contribution(); - $contribution->id = $params['original_contribution_id']; - if (!$contribution->find(TRUE)) { - throw new API_Exception( - 'A valid original contribution ID is required', 'invalid_data'); } - // We don't support repeattransaction without a related recurring contribution. - if (empty($contribution->contribution_recur_id)) { - throw new API_Exception( - 'Repeattransaction API can only be used in the context of contributions that have a contribution_recur_id.', - 'invalid_data' - ); + else { + // A template/original contribution was specified by the params. Load it. + // @todo this duplicates work done by CRM_Contribute_BAO_Contribution::repeatTransaction & should be removed. + $templateContribution = Contribution::get(FALSE) + ->addWhere('id', '=', $params['original_contribution_id']) + ->addWhere('is_test', 'IN', [0, 1]) + ->addWhere('contribution_recur_id', 'IS NOT EMPTY') + ->execute()->first(); + if (empty($templateContribution)) { + throw new CiviCRM_API3_Exception("Contribution.repeattransaction failed to load the given original_contribution_id ($params[original_contribution_id]) because it does not exist, or because it does not belong to a recurring contribution"); + } } - $params['payment_processor_id'] = civicrm_api3('contributionRecur', 'getvalue', [ - 'return' => 'payment_processor_id', - 'id' => $contribution->contribution_recur_id, - ]); - - $passThroughParams = [ + // Collect inputs for CRM_Contribute_BAO_Contribution::completeOrder in $input. + $paramsToCopy = [ 'trxn_id', - 'total_amount', 'campaign_id', 'fee_amount', 'financial_type_id', 'contribution_status_id', 'payment_processor_id', + 'is_email_receipt', + 'trxn_date', + 'receive_date', + 'card_type_id', + 'pan_truncation', + 'payment_instrument_id', + 'total_amount', ]; - $input = array_intersect_key($params, array_fill_keys($passThroughParams, NULL)); - - $ids = []; - if (!$contribution->loadRelatedObjects(['payment_processor_id' => $input['payment_processor_id']], $ids, TRUE)) { - throw new API_Exception('failed to load related objects'); - } - unset($contribution->id, $contribution->receive_date, $contribution->invoice_id); - $contribution->receive_date = $params['receive_date']; + $input = array_intersect_key($params, array_fill_keys($paramsToCopy, NULL)); + // Ensure certain keys exist with NULL values if they don't already (not sure if this is ACTUALLY necessary?) + $input += array_fill_keys(['card_type_id', 'pan_truncation'], NULL); - // @todo Copied from _ipn_process_transaction - needs cleanup/refactor - $objects = $contribution->_relatedObjects; - $objects['contribution'] = &$contribution; - $input['component'] = $contribution->_component; - $input['is_test'] = $contribution->is_test; - $input['amount'] = empty($input['total_amount']) ? $contribution->total_amount : $input['total_amount']; + $input['payment_processor_id'] = civicrm_api3('contributionRecur', 'getvalue', [ + 'return' => 'payment_processor_id', + 'id' => $templateContribution['contribution_recur_id'], + ]); + // @todo this duplicates work done by CRM_Contribute_BAO_Contribution::repeatTransaction & should be removed. + $input['is_test'] = $templateContribution['is_test']; - if (isset($params['is_email_receipt'])) { - $input['is_email_receipt'] = $params['is_email_receipt']; - } - if (!empty($params['trxn_date'])) { - $input['trxn_date'] = $params['trxn_date']; - } - if (!empty($params['receive_date'])) { - $input['receive_date'] = $params['receive_date']; - } - if (empty($contribution->contribution_page_id)) { - static $domainFromName; - static $domainFromEmail; + // @todo this duplicates work done by CRM_Contribute_BAO_Contribution::repeatTransaction & should be removed. + if (empty($templateContribution['contribution_page_id'])) { if (empty($domainFromEmail) && (empty($params['receipt_from_name']) || empty($params['receipt_from_email']))) { [$domainFromName, $domainFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); } - $input['receipt_from_name'] = CRM_Utils_Array::value('receipt_from_name', $params, $domainFromName); - $input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail); - } - $input['card_type_id'] = $params['card_type_id'] ?? NULL; - $input['pan_truncation'] = $params['pan_truncation'] ?? NULL; - if (!empty($params['payment_instrument_id'])) { - $input['payment_instrument_id'] = $params['payment_instrument_id']; + $input['receipt_from_name'] = ($params['receipt_from_name'] ?? NULL) ?: $domainFromName; + $input['receipt_from_email'] = ($params['receipt_from_email'] ?? NULL) ?: $domainFromEmail; } + + // @todo this should call CRM_Contribute_BAO_Contribution::repeatTransaction - some minor cleanup needed to separate + // from completeOrder return CRM_Contribute_BAO_Contribution::completeOrder($input, - !empty($objects['contributionRecur']) ? $objects['contributionRecur']->id : NULL, - $objects['contribution']->id ?? NULL, + $templateContribution['contribution_recur_id'], + NULL, $params['is_post_payment_create'] ?? NULL); } @@ -822,6 +813,14 @@ function _civicrm_api3_contribution_repeattransaction_spec(&$params) { 'name' => 'payment_processor_id', 'type' => CRM_Utils_Type::T_INT, ]; + $params['total_amount'] = [ + 'description' => ts('Optional override amount, will be ignored if more than one line item exists'), + 'title' => ts('Total amount of the contribution'), + 'name' => 'total_amount', + 'type' => CRM_Utils_Type::T_MONEY, + // Map 'amount' to total_amount - historically both have been used at times. + 'api.aliases' => ['amount'], + ]; } /** diff --git a/civicrm/api/v3/Generic.php b/civicrm/api/v3/Generic.php index 9188bcff50eca4afd536cc6d7c678b009b4c8d43..ce0740035a977ab9c791bfe873ba31dcec4c2279 100644 --- a/civicrm/api/v3/Generic.php +++ b/civicrm/api/v3/Generic.php @@ -167,11 +167,11 @@ function civicrm_api3_generic_getfields($apiRequest, $unique = TRUE) { } else { // not implemented MagicFunctionProvider - $helper = NULL; + $helper = ''; } } catch (\Civi\API\Exception\NotImplementedException $e) { - $helper = NULL; + $helper = ''; } if (function_exists($helper)) { // alter diff --git a/civicrm/api/v3/Order.php b/civicrm/api/v3/Order.php index 400bef6f1274c6d0cca95acf039026117b6d7f85..3b495b93a2376318e256a9bb2f4e5ccfe3b8e3b2 100644 --- a/civicrm/api/v3/Order.php +++ b/civicrm/api/v3/Order.php @@ -94,6 +94,10 @@ function civicrm_api3_order_create(array $params): array { $order->setEntityParameters($lineItems['params'], $index); } foreach ($lineItems['line_item'] as $innerIndex => $lineItem) { + // For historical reasons it might be name. + if (!empty($lineItem['membership_type_id']) && !is_numeric($lineItem['membership_type_id'])) { + $lineItem['membership_type_id'] = CRM_Core_PseudoConstant::getKey('CRM_Member_BAO_Membership', 'membership_type_id', $lineItems['params']['membership_type_id']); + } $lineIndex = $index . '+' . $innerIndex; $order->setLineItem($lineItem, $lineIndex); $order->addLineItemToEntityParameters($lineIndex, $index); diff --git a/civicrm/api/v3/examples/Mailing/GetTokens.ex.php b/civicrm/api/v3/examples/Mailing/GetTokens.ex.php index d5f75dea9ed53c2579d97f3a28fbd60262dd3938..e14c23409be0b5341024cbb083411442d3733d8f 100644 --- a/civicrm/api/v3/examples/Mailing/GetTokens.ex.php +++ b/civicrm/api/v3/examples/Mailing/GetTokens.ex.php @@ -73,6 +73,7 @@ function mailing_gettokens_expectedresult() { '{domain.id}' => 'Domain ID', '{domain.description}' => 'Domain Description', '{domain.now}' => 'Current time/date', + '{domain.base_url}' => 'Domain absolute base url', '{domain.tax_term}' => 'Sales tax term (e.g VAT)', '{contact.checksum}' => 'Checksum', '{contact.current_employer}' => 'Current Employer', diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index 516f98c0860a7fc8269d577cb6a1730da92f3d02..10f96ffaad66a857b2be83769b1379f558d7d7f9 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -563,7 +563,7 @@ function _civicrm_api3_get_using_query_object($entity, $params, $additional_opti $returnProperties = NULL; } - if (substr($sort, 0, 2) == 'id') { + if (substr(($sort ?? ''), 0, 2) == 'id') { $sort = $lowercase_entity . "_" . $sort; } @@ -1677,7 +1677,7 @@ function _civicrm_api3_validate_foreign_keys($entity, $action, &$params, $fields */ function _civicrm_api3_validate_date(&$params, &$fieldName, &$fieldInfo) { [$fieldValue, $op] = _civicrm_api3_field_value_check($params, $fieldName); - if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE) { + if (strpos(($op ?? ''), 'NULL') !== FALSE || strpos(($op ?? ''), 'EMPTY') !== FALSE) { return; } @@ -2061,7 +2061,7 @@ function _civicrm_api3_validate_integer(&$params, $fieldName, &$fieldInfo, $enti // https://lab.civicrm.org/dev/rc/-/issues/14 $fieldValue = 1; } - if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE) { + if (strpos(($op ?? ''), 'NULL') !== FALSE || strpos(($op ?? ''), 'EMPTY') !== FALSE) { return; } @@ -2230,7 +2230,7 @@ function _civicrm_api3_validate_html(&$params, &$fieldName, $fieldInfo) { function _civicrm_api3_validate_string(&$params, &$fieldName, &$fieldInfo, $entity, $action) { $isGet = substr($action, 0, 3) === 'get'; [$fieldValue, $op] = _civicrm_api3_field_value_check($params, $fieldName, 'String'); - if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE || CRM_Utils_System::isNull($fieldValue)) { + if (strpos(($op ?? ''), 'NULL') !== FALSE || strpos(($op ?? ''), 'EMPTY') !== FALSE || CRM_Utils_System::isNull($fieldValue)) { return; } diff --git a/civicrm/bower_components/angular-ui-utils/.composer-downloads/angular-ui-utils-74b1ad1150f4c22741f9e1e45a4f92cd.json b/civicrm/bower_components/angular-ui-utils/.composer-downloads/angular-ui-utils-74b1ad1150f4c22741f9e1e45a4f92cd.json deleted file mode 100644 index dbf864a3afc6103f35409484036dcfb5b71e5eaa..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/.composer-downloads/angular-ui-utils-74b1ad1150f4c22741f9e1e45a4f92cd.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "civicrm/civicrm-core:angular-ui-utils", - "url": "https://github.com/angular-ui/ui-utils/archive/v0.1.1.zip", - "checksum": "b072c219c8caf6022dac9e35ba95b5e462630312bebb9ff9d420d7fb8e2a1cf2", - "ignore": null -} \ No newline at end of file diff --git a/civicrm/bower_components/angular-ui-utils/.travis.yml b/civicrm/bower_components/angular-ui-utils/.travis.yml deleted file mode 100644 index 8c4c2c4a072f5bdd10254ed1ecd697a8a6f92855..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -# blacklist the bower branch -branches: - only: - - master diff --git a/civicrm/bower_components/angular-ui-utils/CHANGELOG.md b/civicrm/bower_components/angular-ui-utils/CHANGELOG.md deleted file mode 100644 index abbeec2e1d481a7fccccd98f92b1e857b0386dc3..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -<a name="v0.1.0"></a> -## v0.1.0 (2013-12-29) - - -#### Bug Fixes - -* **mark:** TypeError: input is undefined ([5440d6fa](http://github.com/angular-ui/ui-utils/commit/5440d6fa8514ee86efc480b0abbf66cf244889ad)) -* **publisher:** - * don't throw error when 'dist/sub' don't exist ([bd319236](http://github.com/angular-ui/ui-utils/commit/bd31923668c0ea80311b9dbe7d72bfbe55956325)) - * rename sub componenet stuff ([5dcdc379](http://github.com/angular-ui/ui-utils/commit/5dcdc3794efe66112522415aafe9ebe965a274f6)) -* **ui-scroll:** - * 'newitems' is not defined. ([796e310a](http://github.com/angular-ui/ui-utils/commit/796e310a26ac43a248c0c732877242890fdda2be)) - * 'isArray' is not defined. ([3fd7fc47](http://github.com/angular-ui/ui-utils/commit/3fd7fc47de7d05460a55ca42e4afec60d8e8cc4d)) - * 'setOffset' is not defined. ([32140e04](http://github.com/angular-ui/ui-utils/commit/32140e04be176c4b2a5954d2cf8e9ec3c48a6f5c)) - - -#### Features - -* **alias:** Created a new ui-alias module for renaming/combining directives ([1582d54e](http://github.com/angular-ui/ui-utils/commit/1582d54ecaf81cb516a28368c0d409b5d5fe7da9)) -* **grunt:** - * add 'changelog' task ([b7fed5a6](http://github.com/angular-ui/ui-utils/commit/b7fed5a6026121d0098f892aa0a221c0d9c14d56), closes [#145](http://github.com/angular-ui/ui-utils/issues/145)) - * use Angular UI Publisher ([3c209713](http://github.com/angular-ui/ui-utils/commit/3c20971307e50741f88da21cb638077237e56da2), closes [#153](http://github.com/angular-ui/ui-utils/issues/153)) - * new 'serve' task ([a18ed32c](http://github.com/angular-ui/ui-utils/commit/a18ed32ce134acabe7adc79b41e82ed6c52109ed)) - * quality code more strict ([332ebff1](http://github.com/angular-ui/ui-utils/commit/332ebff1fdc7edf4d44d64f4796ec2f70e90947f)) - * use ngmin in the 'dist' task ([93ba905f](http://github.com/angular-ui/ui-utils/commit/93ba905fadfd4d0970d384f7978e19a3561cea65)) - * add ngmin build all subcomponents in dist/sub ([783140ab](http://github.com/angular-ui/ui-utils/commit/783140abe1b8d6c0f842eceb7fc24a0f16d73ca5)) -* **publisher:** - * change travis scripts to work with the component-publisher system ([12d97d3b](http://github.com/angular-ui/ui-utils/commit/12d97d3bf88da86875141093fc164f1537d0dfe2)) - * add and config component-publisher system ([4cea7ea5](http://github.com/angular-ui/ui-utils/commit/4cea7ea5bb4c47ad74c4f5123121a2896bf6f717)) -* **travis:** add sub component auto publishing :) ([0d64db00](http://github.com/angular-ui/ui-utils/commit/0d64db00a5c50816cbf0b022aa5607fee29d5e2a)) - diff --git a/civicrm/bower_components/angular-ui-utils/bower.json b/civicrm/bower_components/angular-ui-utils/bower.json deleted file mode 100644 index afaad2c0e7d34a056f90556465f8242c0f8bd14b..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular-ui-utils", - "version": "0.1.1", - "main": "./ui-utils.js", - "dependencies": { - "angular": ">= 1.0.2" - } -} diff --git a/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.js b/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.js deleted file mode 100644 index a62222c11ff9366bcecd204d5ec35f196d8d32c3..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * angular-ui-utils - Swiss-Army-Knife of AngularJS tools (with no external dependencies!) - * @version v0.1.1 - 2014-02-05 - * @link http://angular-ui.github.com - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -// READ: http://docs-next.angularjs.org/guide/ie -// element tags are statically defined in order to accommodate lazy-loading whereby directives are also unknown - -// The ieshiv takes care of our ui.directives and AngularJS's ng-view, ng-include, ng-pluralize, ng-switch. -// However, IF you have custom directives that can be used as html tags (yours or someone else's) then -// add list of directives into <code>window.myCustomTags</code> - -// <!--[if lte IE 8]> -// <script> -// window.myCustomTags = [ 'yourCustomDirective', 'somebodyElsesDirective' ]; // optional -// </script> -// <script src="build/angular-ui-ieshiv.js"></script> -// <![endif]--> - -(function (window, document) { - "use strict"; - - var tags = [ "ngInclude", "ngPluralize", "ngView", "ngSwitch", "uiCurrency", "uiCodemirror", "uiDate", "uiEvent", - "uiKeypress", "uiKeyup", "uiKeydown", "uiMask", "uiMapInfoWindow", "uiMapMarker", "uiMapPolyline", - "uiMapPolygon", "uiMapRectangle", "uiMapCircle", "uiMapGroundOverlay", "uiModal", "uiReset", - "uiScrollfix", "uiSelect2", "uiShow", "uiHide", "uiToggle", "uiSortable", "uiTinymce" - ]; - - window.myCustomTags = window.myCustomTags || []; // externally defined by developer using angular-ui directives - tags.push.apply(tags, window.myCustomTags); - - var toCustomElements = function (str) { - var result = []; - var dashed = str.replace(/([A-Z])/g, function ($1) { - return " " + $1.toLowerCase(); - }); - var tokens = dashed.split(" "); - - // If a token is just a single name (i.e. no namespace) then we juse define the elements the name given - if (tokens.length === 1) { - var name = tokens[0]; - - result.push(name); - result.push("x-" + name); - result.push("data-" + name); - } else { - var ns = tokens[0]; - var dirname = tokens.slice(1).join("-"); - - // this is finite list and it seemed senseless to create a custom method - result.push(ns + ":" + dirname); - result.push(ns + "-" + dirname); - result.push("x-" + ns + "-" + dirname); - result.push("data-" + ns + "-" + dirname); - } - return result; - }; - - for (var i = 0, tlen = tags.length; i < tlen; i++) { - var customElements = toCustomElements(tags[i]); - for (var j = 0, clen = customElements.length; j < clen; j++) { - var customElement = customElements[j]; - document.createElement(customElement); - } - } - -})(window, document); diff --git a/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.min.js b/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.min.js deleted file mode 100644 index 4290ac32e180f010856342669450340f89e12770..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/ui-utils-ieshiv.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * angular-ui-utils - Swiss-Army-Knife of AngularJS tools (with no external dependencies!) - * @version v0.1.1 - 2014-02-05 - * @link http://angular-ui.github.com - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -!function(a,b){"use strict";var c=["ngInclude","ngPluralize","ngView","ngSwitch","uiCurrency","uiCodemirror","uiDate","uiEvent","uiKeypress","uiKeyup","uiKeydown","uiMask","uiMapInfoWindow","uiMapMarker","uiMapPolyline","uiMapPolygon","uiMapRectangle","uiMapCircle","uiMapGroundOverlay","uiModal","uiReset","uiScrollfix","uiSelect2","uiShow","uiHide","uiToggle","uiSortable","uiTinymce"];a.myCustomTags=a.myCustomTags||[],c.push.apply(c,a.myCustomTags);for(var d=function(a){var b=[],c=a.replace(/([A-Z])/g,function(a){return" "+a.toLowerCase()}),d=c.split(" ");if(1===d.length){var e=d[0];b.push(e),b.push("x-"+e),b.push("data-"+e)}else{var f=d[0],g=d.slice(1).join("-");b.push(f+":"+g),b.push(f+"-"+g),b.push("x-"+f+"-"+g),b.push("data-"+f+"-"+g)}return b},e=0,f=c.length;f>e;e++)for(var g=d(c[e]),h=0,i=g.length;i>h;h++){var j=g[h];b.createElement(j)}}(window,document); \ No newline at end of file diff --git a/civicrm/bower_components/angular-ui-utils/ui-utils.js b/civicrm/bower_components/angular-ui-utils/ui-utils.js deleted file mode 100644 index 6e1c26c81515dfc1d0161f50faf24c83f1958455..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/ui-utils.js +++ /dev/null @@ -1,2055 +0,0 @@ -/** - * angular-ui-utils - Swiss-Army-Knife of AngularJS tools (with no external dependencies!) - * @version v0.1.1 - 2014-02-05 - * @link http://angular-ui.github.com - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -'use strict'; - -angular.module('ui.alias', []).config(['$compileProvider', 'uiAliasConfig', function($compileProvider, uiAliasConfig){ - uiAliasConfig = uiAliasConfig || {}; - angular.forEach(uiAliasConfig, function(config, alias){ - if (angular.isString(config)) { - config = { - replace: true, - template: config - }; - } - $compileProvider.directive(alias, function(){ - return config; - }); - }); -}]); - -'use strict'; - -/** - * General-purpose Event binding. Bind any event not natively supported by Angular - * Pass an object with keynames for events to ui-event - * Allows $event object and $params object to be passed - * - * @example <input ui-event="{ focus : 'counter++', blur : 'someCallback()' }"> - * @example <input ui-event="{ myCustomEvent : 'myEventHandler($event, $params)'}"> - * - * @param ui-event {string|object literal} The event to bind to as a string or a hash of events with their callbacks - */ -angular.module('ui.event',[]).directive('uiEvent', ['$parse', - function ($parse) { - return function ($scope, elm, attrs) { - var events = $scope.$eval(attrs.uiEvent); - angular.forEach(events, function (uiEvent, eventName) { - var fn = $parse(uiEvent); - elm.bind(eventName, function (evt) { - var params = Array.prototype.slice.call(arguments); - //Take out first paramater (event object); - params = params.splice(1); - fn($scope, {$event: evt, $params: params}); - if (!$scope.$$phase) { - $scope.$apply(); - } - }); - }); - }; - }]); - -'use strict'; - -/** - * A replacement utility for internationalization very similar to sprintf. - * - * @param replace {mixed} The tokens to replace depends on type - * string: all instances of $0 will be replaced - * array: each instance of $0, $1, $2 etc. will be placed with each array item in corresponding order - * object: all attributes will be iterated through, with :key being replaced with its corresponding value - * @return string - * - * @example: 'Hello :name, how are you :day'.format({ name:'John', day:'Today' }) - * @example: 'Records $0 to $1 out of $2 total'.format(['10', '20', '3000']) - * @example: '$0 agrees to all mentions $0 makes in the event that $0 hits a tree while $0 is driving drunk'.format('Bob') - */ -angular.module('ui.format',[]).filter('format', function(){ - return function(value, replace) { - var target = value; - if (angular.isString(target) && replace !== undefined) { - if (!angular.isArray(replace) && !angular.isObject(replace)) { - replace = [replace]; - } - if (angular.isArray(replace)) { - var rlen = replace.length; - var rfx = function (str, i) { - i = parseInt(i, 10); - return (i>=0 && i<rlen) ? replace[i] : str; - }; - target = target.replace(/\$([0-9]+)/g, rfx); - } - else { - angular.forEach(replace, function(value, key){ - target = target.split(':'+key).join(value); - }); - } - } - return target; - }; -}); - -'use strict'; - -/** - * Wraps the - * @param text {string} haystack to search through - * @param search {string} needle to search for - * @param [caseSensitive] {boolean} optional boolean to use case-sensitive searching - */ -angular.module('ui.highlight',[]).filter('highlight', function () { - return function (text, search, caseSensitive) { - if (search || angular.isNumber(search)) { - text = text.toString(); - search = search.toString(); - if (caseSensitive) { - return text.split(search).join('<span class="ui-match">' + search + '</span>'); - } else { - return text.replace(new RegExp(search, 'gi'), '<span class="ui-match">$&</span>'); - } - } else { - return text; - } - }; -}); - -'use strict'; - -// modeled after: angular-1.0.7/src/ng/directive/ngInclude.js -angular.module('ui.include',[]) -.directive('uiInclude', ['$http', '$templateCache', '$anchorScroll', '$compile', - function($http, $templateCache, $anchorScroll, $compile) { - return { - restrict: 'ECA', - terminal: true, - compile: function(element, attr) { - var srcExp = attr.uiInclude || attr.src, - fragExp = attr.fragment || '', - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, element) { - var changeCounter = 0, - childScope; - - var clearContent = function() { - if (childScope) { - childScope.$destroy(); - childScope = null; - } - - element.html(''); - }; - - function ngIncludeWatchAction() { - var thisChangeId = ++changeCounter; - var src = scope.$eval(srcExp); - var fragment = scope.$eval(fragExp); - - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - if (thisChangeId !== changeCounter) { return; } - - if (childScope) { childScope.$destroy(); } - childScope = scope.$new(); - - var contents; - if (fragment) { - contents = angular.element('<div/>').html(response).find(fragment); - } - else { - contents = angular.element('<div/>').html(response).contents(); - } - element.html(contents); - $compile(contents)(childScope); - - if (angular.isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - - childScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); - }).error(function() { - if (thisChangeId === changeCounter) { clearContent(); } - }); - } else { clearContent(); } - } - - scope.$watch(fragExp, ngIncludeWatchAction); - scope.$watch(srcExp, ngIncludeWatchAction); - }; - } - }; -}]); - -'use strict'; - -/** - * Provides an easy way to toggle a checkboxes indeterminate property - * - * @example <input type="checkbox" ui-indeterminate="isUnkown"> - */ -angular.module('ui.indeterminate',[]).directive('uiIndeterminate', [ - function () { - return { - compile: function(tElm, tAttrs) { - if (!tAttrs.type || tAttrs.type.toLowerCase() !== 'checkbox') { - return angular.noop; - } - - return function ($scope, elm, attrs) { - $scope.$watch(attrs.uiIndeterminate, function(newVal) { - elm[0].indeterminate = !!newVal; - }); - }; - } - }; - }]); - -'use strict'; - -/** - * Converts variable-esque naming conventions to something presentational, capitalized words separated by space. - * @param {String} value The value to be parsed and prettified. - * @param {String} [inflector] The inflector to use. Default: humanize. - * @return {String} - * @example {{ 'Here Is my_phoneNumber' | inflector:'humanize' }} => Here Is My Phone Number - * {{ 'Here Is my_phoneNumber' | inflector:'underscore' }} => here_is_my_phone_number - * {{ 'Here Is my_phoneNumber' | inflector:'variable' }} => hereIsMyPhoneNumber - */ -angular.module('ui.inflector',[]).filter('inflector', function () { - function ucwords(text) { - return text.replace(/^([a-z])|\s+([a-z])/g, function ($1) { - return $1.toUpperCase(); - }); - } - - function breakup(text, separator) { - return text.replace(/[A-Z]/g, function (match) { - return separator + match; - }); - } - - var inflectors = { - humanize: function (value) { - return ucwords(breakup(value, ' ').split('_').join(' ')); - }, - underscore: function (value) { - return value.substr(0, 1).toLowerCase() + breakup(value.substr(1), '_').toLowerCase().split(' ').join('_'); - }, - variable: function (value) { - value = value.substr(0, 1).toLowerCase() + ucwords(value.split('_').join(' ')).substr(1).split(' ').join(''); - return value; - } - }; - - return function (text, inflector) { - if (inflector !== false && angular.isString(text)) { - inflector = inflector || 'humanize'; - return inflectors[inflector](text); - } else { - return text; - } - }; -}); - -'use strict'; - -/** - * General-purpose jQuery wrapper. Simply pass the plugin name as the expression. - * - * It is possible to specify a default set of parameters for each jQuery plugin. - * Under the jq key, namespace each plugin by that which will be passed to ui-jq. - * Unfortunately, at this time you can only pre-define the first parameter. - * @example { jq : { datepicker : { showOn:'click' } } } - * - * @param ui-jq {string} The $elm.[pluginName]() to call. - * @param [ui-options] {mixed} Expression to be evaluated and passed as options to the function - * Multiple parameters can be separated by commas - * @param [ui-refresh] {expression} Watch expression and refire plugin on changes - * - * @example <input ui-jq="datepicker" ui-options="{showOn:'click'},secondParameter,thirdParameter" ui-refresh="iChange"> - */ -angular.module('ui.jq',[]). - value('uiJqConfig',{}). - directive('uiJq', ['uiJqConfig', '$timeout', function uiJqInjectingFunction(uiJqConfig, $timeout) { - - return { - restrict: 'A', - compile: function uiJqCompilingFunction(tElm, tAttrs) { - - if (!angular.isFunction(tElm[tAttrs.uiJq])) { - throw new Error('ui-jq: The "' + tAttrs.uiJq + '" function does not exist'); - } - var options = uiJqConfig && uiJqConfig[tAttrs.uiJq]; - - return function uiJqLinkingFunction(scope, elm, attrs) { - - var linkOptions = []; - - // If ui-options are passed, merge (or override) them onto global defaults and pass to the jQuery method - if (attrs.uiOptions) { - linkOptions = scope.$eval('[' + attrs.uiOptions + ']'); - if (angular.isObject(options) && angular.isObject(linkOptions[0])) { - linkOptions[0] = angular.extend({}, options, linkOptions[0]); - } - } else if (options) { - linkOptions = [options]; - } - // If change compatibility is enabled, the form input's "change" event will trigger an "input" event - if (attrs.ngModel && elm.is('select,input,textarea')) { - elm.bind('change', function() { - elm.trigger('input'); - }); - } - - // Call jQuery method and pass relevant options - function callPlugin() { - $timeout(function() { - elm[attrs.uiJq].apply(elm, linkOptions); - }, 0, false); - } - - // If ui-refresh is used, re-fire the the method upon every change - if (attrs.uiRefresh) { - scope.$watch(attrs.uiRefresh, function() { - callPlugin(); - }); - } - callPlugin(); - }; - } - }; -}]); - -'use strict'; - -angular.module('ui.keypress',[]). -factory('keypressHelper', ['$parse', function keypress($parse){ - var keysByCode = { - 8: 'backspace', - 9: 'tab', - 13: 'enter', - 27: 'esc', - 32: 'space', - 33: 'pageup', - 34: 'pagedown', - 35: 'end', - 36: 'home', - 37: 'left', - 38: 'up', - 39: 'right', - 40: 'down', - 45: 'insert', - 46: 'delete' - }; - - var capitaliseFirstLetter = function (string) { - return string.charAt(0).toUpperCase() + string.slice(1); - }; - - return function(mode, scope, elm, attrs) { - var params, combinations = []; - params = scope.$eval(attrs['ui'+capitaliseFirstLetter(mode)]); - - // Prepare combinations for simple checking - angular.forEach(params, function (v, k) { - var combination, expression; - expression = $parse(v); - - angular.forEach(k.split(' '), function(variation) { - combination = { - expression: expression, - keys: {} - }; - angular.forEach(variation.split('-'), function (value) { - combination.keys[value] = true; - }); - combinations.push(combination); - }); - }); - - // Check only matching of pressed keys one of the conditions - elm.bind(mode, function (event) { - // No need to do that inside the cycle - var metaPressed = !!(event.metaKey && !event.ctrlKey); - var altPressed = !!event.altKey; - var ctrlPressed = !!event.ctrlKey; - var shiftPressed = !!event.shiftKey; - var keyCode = event.keyCode; - - // normalize keycodes - if (mode === 'keypress' && !shiftPressed && keyCode >= 97 && keyCode <= 122) { - keyCode = keyCode - 32; - } - - // Iterate over prepared combinations - angular.forEach(combinations, function (combination) { - - var mainKeyPressed = combination.keys[keysByCode[keyCode]] || combination.keys[keyCode.toString()]; - - var metaRequired = !!combination.keys.meta; - var altRequired = !!combination.keys.alt; - var ctrlRequired = !!combination.keys.ctrl; - var shiftRequired = !!combination.keys.shift; - - if ( - mainKeyPressed && - ( metaRequired === metaPressed ) && - ( altRequired === altPressed ) && - ( ctrlRequired === ctrlPressed ) && - ( shiftRequired === shiftPressed ) - ) { - // Run the function - scope.$apply(function () { - combination.expression(scope, { '$event': event }); - }); - } - }); - }); - }; -}]); - -/** - * Bind one or more handlers to particular keys or their combination - * @param hash {mixed} keyBindings Can be an object or string where keybinding expression of keys or keys combinations and AngularJS Exspressions are set. Object syntax: "{ keys1: expression1 [, keys2: expression2 [ , ... ]]}". String syntax: ""expression1 on keys1 [ and expression2 on keys2 [ and ... ]]"". Expression is an AngularJS Expression, and key(s) are dash-separated combinations of keys and modifiers (one or many, if any. Order does not matter). Supported modifiers are 'ctrl', 'shift', 'alt' and key can be used either via its keyCode (13 for Return) or name. Named keys are 'backspace', 'tab', 'enter', 'esc', 'space', 'pageup', 'pagedown', 'end', 'home', 'left', 'up', 'right', 'down', 'insert', 'delete'. - * @example <input ui-keypress="{enter:'x = 1', 'ctrl-shift-space':'foo()', 'shift-13':'bar()'}" /> <input ui-keypress="foo = 2 on ctrl-13 and bar('hello') on shift-esc" /> - **/ -angular.module('ui.keypress').directive('uiKeydown', ['keypressHelper', function(keypressHelper){ - return { - link: function (scope, elm, attrs) { - keypressHelper('keydown', scope, elm, attrs); - } - }; -}]); - -angular.module('ui.keypress').directive('uiKeypress', ['keypressHelper', function(keypressHelper){ - return { - link: function (scope, elm, attrs) { - keypressHelper('keypress', scope, elm, attrs); - } - }; -}]); - -angular.module('ui.keypress').directive('uiKeyup', ['keypressHelper', function(keypressHelper){ - return { - link: function (scope, elm, attrs) { - keypressHelper('keyup', scope, elm, attrs); - } - }; -}]); - -'use strict'; - -/* - Attaches input mask onto input element - */ -angular.module('ui.mask', []) - .value('uiMaskConfig', { - 'maskDefinitions': { - '9': /\d/, - 'A': /[a-zA-Z]/, - '*': /[a-zA-Z0-9]/ - } - }) - .directive('uiMask', ['uiMaskConfig', function (maskConfig) { - return { - priority: 100, - require: 'ngModel', - restrict: 'A', - compile: function uiMaskCompilingFunction(){ - var options = maskConfig; - - return function uiMaskLinkingFunction(scope, iElement, iAttrs, controller){ - var maskProcessed = false, eventsBound = false, - maskCaretMap, maskPatterns, maskPlaceholder, maskComponents, - // Minimum required length of the value to be considered valid - minRequiredLength, - value, valueMasked, isValid, - // Vars for initializing/uninitializing - originalPlaceholder = iAttrs.placeholder, - originalMaxlength = iAttrs.maxlength, - // Vars used exclusively in eventHandler() - oldValue, oldValueUnmasked, oldCaretPosition, oldSelectionLength; - - function initialize(maskAttr){ - if (!angular.isDefined(maskAttr)) { - return uninitialize(); - } - processRawMask(maskAttr); - if (!maskProcessed) { - return uninitialize(); - } - initializeElement(); - bindEventListeners(); - return true; - } - - function initPlaceholder(placeholderAttr) { - if(! angular.isDefined(placeholderAttr)) { - return; - } - - maskPlaceholder = placeholderAttr; - - // If the mask is processed, then we need to update the value - if (maskProcessed) { - eventHandler(); - } - } - - function formatter(fromModelValue){ - if (!maskProcessed) { - return fromModelValue; - } - value = unmaskValue(fromModelValue || ''); - isValid = validateValue(value); - controller.$setValidity('mask', isValid); - return isValid && value.length ? maskValue(value) : undefined; - } - - function parser(fromViewValue){ - if (!maskProcessed) { - return fromViewValue; - } - value = unmaskValue(fromViewValue || ''); - isValid = validateValue(value); - // We have to set viewValue manually as the reformatting of the input - // value performed by eventHandler() doesn't happen until after - // this parser is called, which causes what the user sees in the input - // to be out-of-sync with what the controller's $viewValue is set to. - controller.$viewValue = value.length ? maskValue(value) : ''; - controller.$setValidity('mask', isValid); - if (value === '' && controller.$error.required !== undefined) { - controller.$setValidity('required', false); - } - return isValid ? value : undefined; - } - - var linkOptions = {}; - - if (iAttrs.uiOptions) { - linkOptions = scope.$eval('[' + iAttrs.uiOptions + ']'); - if (angular.isObject(linkOptions[0])) { - // we can't use angular.copy nor angular.extend, they lack the power to do a deep merge - linkOptions = (function(original, current){ - for(var i in original) { - if (Object.prototype.hasOwnProperty.call(original, i)) { - if (!current[i]) { - current[i] = angular.copy(original[i]); - } else { - angular.extend(current[i], original[i]); - } - } - } - return current; - })(options, linkOptions[0]); - } - } else { - linkOptions = options; - } - - iAttrs.$observe('uiMask', initialize); - iAttrs.$observe('placeholder', initPlaceholder); - controller.$formatters.push(formatter); - controller.$parsers.push(parser); - - function uninitialize(){ - maskProcessed = false; - unbindEventListeners(); - - if (angular.isDefined(originalPlaceholder)) { - iElement.attr('placeholder', originalPlaceholder); - } else { - iElement.removeAttr('placeholder'); - } - - if (angular.isDefined(originalMaxlength)) { - iElement.attr('maxlength', originalMaxlength); - } else { - iElement.removeAttr('maxlength'); - } - - iElement.val(controller.$modelValue); - controller.$viewValue = controller.$modelValue; - return false; - } - - function initializeElement(){ - value = oldValueUnmasked = unmaskValue(controller.$modelValue || ''); - valueMasked = oldValue = maskValue(value); - isValid = validateValue(value); - var viewValue = isValid && value.length ? valueMasked : ''; - if (iAttrs.maxlength) { // Double maxlength to allow pasting new val at end of mask - iElement.attr('maxlength', maskCaretMap[maskCaretMap.length - 1] * 2); - } - iElement.attr('placeholder', maskPlaceholder); - iElement.val(viewValue); - controller.$viewValue = viewValue; - // Not using $setViewValue so we don't clobber the model value and dirty the form - // without any kind of user interaction. - } - - function bindEventListeners(){ - if (eventsBound) { - return; - } - iElement.bind('blur', blurHandler); - iElement.bind('mousedown mouseup', mouseDownUpHandler); - iElement.bind('input keyup click focus', eventHandler); - eventsBound = true; - } - - function unbindEventListeners(){ - if (!eventsBound) { - return; - } - iElement.unbind('blur', blurHandler); - iElement.unbind('mousedown', mouseDownUpHandler); - iElement.unbind('mouseup', mouseDownUpHandler); - iElement.unbind('input', eventHandler); - iElement.unbind('keyup', eventHandler); - iElement.unbind('click', eventHandler); - iElement.unbind('focus', eventHandler); - eventsBound = false; - } - - function validateValue(value){ - // Zero-length value validity is ngRequired's determination - return value.length ? value.length >= minRequiredLength : true; - } - - function unmaskValue(value){ - var valueUnmasked = '', - maskPatternsCopy = maskPatterns.slice(); - // Preprocess by stripping mask components from value - value = value.toString(); - angular.forEach(maskComponents, function (component){ - value = value.replace(component, ''); - }); - angular.forEach(value.split(''), function (chr){ - if (maskPatternsCopy.length && maskPatternsCopy[0].test(chr)) { - valueUnmasked += chr; - maskPatternsCopy.shift(); - } - }); - return valueUnmasked; - } - - function maskValue(unmaskedValue){ - var valueMasked = '', - maskCaretMapCopy = maskCaretMap.slice(); - - angular.forEach(maskPlaceholder.split(''), function (chr, i){ - if (unmaskedValue.length && i === maskCaretMapCopy[0]) { - valueMasked += unmaskedValue.charAt(0) || '_'; - unmaskedValue = unmaskedValue.substr(1); - maskCaretMapCopy.shift(); - } - else { - valueMasked += chr; - } - }); - return valueMasked; - } - - function getPlaceholderChar(i) { - var placeholder = iAttrs.placeholder; - - if (typeof placeholder !== 'undefined' && placeholder[i]) { - return placeholder[i]; - } else { - return '_'; - } - } - - // Generate array of mask components that will be stripped from a masked value - // before processing to prevent mask components from being added to the unmasked value. - // E.g., a mask pattern of '+7 9999' won't have the 7 bleed into the unmasked value. - // If a maskable char is followed by a mask char and has a mask - // char behind it, we'll split it into it's own component so if - // a user is aggressively deleting in the input and a char ahead - // of the maskable char gets deleted, we'll still be able to strip - // it in the unmaskValue() preprocessing. - function getMaskComponents() { - return maskPlaceholder.replace(/[_]+/g, '_').replace(/([^_]+)([a-zA-Z0-9])([^_])/g, '$1$2_$3').split('_'); - } - - function processRawMask(mask){ - var characterCount = 0; - - maskCaretMap = []; - maskPatterns = []; - maskPlaceholder = ''; - - if (typeof mask === 'string') { - minRequiredLength = 0; - - var isOptional = false, - splitMask = mask.split(''); - - angular.forEach(splitMask, function (chr, i){ - if (linkOptions.maskDefinitions[chr]) { - - maskCaretMap.push(characterCount); - - maskPlaceholder += getPlaceholderChar(i); - maskPatterns.push(linkOptions.maskDefinitions[chr]); - - characterCount++; - if (!isOptional) { - minRequiredLength++; - } - } - else if (chr === '?') { - isOptional = true; - } - else { - maskPlaceholder += chr; - characterCount++; - } - }); - } - // Caret position immediately following last position is valid. - maskCaretMap.push(maskCaretMap.slice().pop() + 1); - - maskComponents = getMaskComponents(); - maskProcessed = maskCaretMap.length > 1 ? true : false; - } - - function blurHandler(){ - oldCaretPosition = 0; - oldSelectionLength = 0; - if (!isValid || value.length === 0) { - valueMasked = ''; - iElement.val(''); - scope.$apply(function (){ - controller.$setViewValue(''); - }); - } - } - - function mouseDownUpHandler(e){ - if (e.type === 'mousedown') { - iElement.bind('mouseout', mouseoutHandler); - } else { - iElement.unbind('mouseout', mouseoutHandler); - } - } - - iElement.bind('mousedown mouseup', mouseDownUpHandler); - - function mouseoutHandler(){ - /*jshint validthis: true */ - oldSelectionLength = getSelectionLength(this); - iElement.unbind('mouseout', mouseoutHandler); - } - - function eventHandler(e){ - /*jshint validthis: true */ - e = e || {}; - // Allows more efficient minification - var eventWhich = e.which, - eventType = e.type; - - // Prevent shift and ctrl from mucking with old values - if (eventWhich === 16 || eventWhich === 91) { return;} - - var val = iElement.val(), - valOld = oldValue, - valMasked, - valUnmasked = unmaskValue(val), - valUnmaskedOld = oldValueUnmasked, - valAltered = false, - - caretPos = getCaretPosition(this) || 0, - caretPosOld = oldCaretPosition || 0, - caretPosDelta = caretPos - caretPosOld, - caretPosMin = maskCaretMap[0], - caretPosMax = maskCaretMap[valUnmasked.length] || maskCaretMap.slice().shift(), - - selectionLenOld = oldSelectionLength || 0, - isSelected = getSelectionLength(this) > 0, - wasSelected = selectionLenOld > 0, - - // Case: Typing a character to overwrite a selection - isAddition = (val.length > valOld.length) || (selectionLenOld && val.length > valOld.length - selectionLenOld), - // Case: Delete and backspace behave identically on a selection - isDeletion = (val.length < valOld.length) || (selectionLenOld && val.length === valOld.length - selectionLenOld), - isSelection = (eventWhich >= 37 && eventWhich <= 40) && e.shiftKey, // Arrow key codes - - isKeyLeftArrow = eventWhich === 37, - // Necessary due to "input" event not providing a key code - isKeyBackspace = eventWhich === 8 || (eventType !== 'keyup' && isDeletion && (caretPosDelta === -1)), - isKeyDelete = eventWhich === 46 || (eventType !== 'keyup' && isDeletion && (caretPosDelta === 0 ) && !wasSelected), - - // Handles cases where caret is moved and placed in front of invalid maskCaretMap position. Logic below - // ensures that, on click or leftward caret placement, caret is moved leftward until directly right of - // non-mask character. Also applied to click since users are (arguably) more likely to backspace - // a character when clicking within a filled input. - caretBumpBack = (isKeyLeftArrow || isKeyBackspace || eventType === 'click') && caretPos > caretPosMin; - - oldSelectionLength = getSelectionLength(this); - - // These events don't require any action - if (isSelection || (isSelected && (eventType === 'click' || eventType === 'keyup'))) { - return; - } - - // Value Handling - // ============== - - // User attempted to delete but raw value was unaffected--correct this grievous offense - if ((eventType === 'input') && isDeletion && !wasSelected && valUnmasked === valUnmaskedOld) { - while (isKeyBackspace && caretPos > caretPosMin && !isValidCaretPosition(caretPos)) { - caretPos--; - } - while (isKeyDelete && caretPos < caretPosMax && maskCaretMap.indexOf(caretPos) === -1) { - caretPos++; - } - var charIndex = maskCaretMap.indexOf(caretPos); - // Strip out non-mask character that user would have deleted if mask hadn't been in the way. - valUnmasked = valUnmasked.substring(0, charIndex) + valUnmasked.substring(charIndex + 1); - valAltered = true; - } - - // Update values - valMasked = maskValue(valUnmasked); - - oldValue = valMasked; - oldValueUnmasked = valUnmasked; - iElement.val(valMasked); - if (valAltered) { - // We've altered the raw value after it's been $digest'ed, we need to $apply the new value. - scope.$apply(function (){ - controller.$setViewValue(valUnmasked); - }); - } - - // Caret Repositioning - // =================== - - // Ensure that typing always places caret ahead of typed character in cases where the first char of - // the input is a mask char and the caret is placed at the 0 position. - if (isAddition && (caretPos <= caretPosMin)) { - caretPos = caretPosMin + 1; - } - - if (caretBumpBack) { - caretPos--; - } - - // Make sure caret is within min and max position limits - caretPos = caretPos > caretPosMax ? caretPosMax : caretPos < caretPosMin ? caretPosMin : caretPos; - - // Scoot the caret back or forth until it's in a non-mask position and within min/max position limits - while (!isValidCaretPosition(caretPos) && caretPos > caretPosMin && caretPos < caretPosMax) { - caretPos += caretBumpBack ? -1 : 1; - } - - if ((caretBumpBack && caretPos < caretPosMax) || (isAddition && !isValidCaretPosition(caretPosOld))) { - caretPos++; - } - oldCaretPosition = caretPos; - setCaretPosition(this, caretPos); - } - - function isValidCaretPosition(pos){ return maskCaretMap.indexOf(pos) > -1; } - - function getCaretPosition(input){ - if (!input) return 0; - if (input.selectionStart !== undefined) { - return input.selectionStart; - } else if (document.selection) { - // Curse you IE - input.focus(); - var selection = document.selection.createRange(); - selection.moveStart('character', -input.value.length); - return selection.text.length; - } - return 0; - } - - function setCaretPosition(input, pos){ - if (!input) return 0; - if (input.offsetWidth === 0 || input.offsetHeight === 0) { - return; // Input's hidden - } - if (input.setSelectionRange) { - input.focus(); - input.setSelectionRange(pos, pos); - } - else if (input.createTextRange) { - // Curse you IE - var range = input.createTextRange(); - range.collapse(true); - range.moveEnd('character', pos); - range.moveStart('character', pos); - range.select(); - } - } - - function getSelectionLength(input){ - if (!input) return 0; - if (input.selectionStart !== undefined) { - return (input.selectionEnd - input.selectionStart); - } - if (document.selection) { - return (document.selection.createRange().text.length); - } - return 0; - } - - // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */){ - if (this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 1) { - n = Number(arguments[1]); - if (n !== n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n !== 0 && n !== Infinity && n !== -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - }; - } - }; - } -]); - -'use strict'; - -/** - * Add a clear button to form inputs to reset their value - */ -angular.module('ui.reset',[]).value('uiResetConfig',null).directive('uiReset', ['uiResetConfig', function (uiResetConfig) { - var resetValue = null; - if (uiResetConfig !== undefined){ - resetValue = uiResetConfig; - } - return { - require: 'ngModel', - link: function (scope, elm, attrs, ctrl) { - var aElement; - aElement = angular.element('<a class="ui-reset" />'); - elm.wrap('<span class="ui-resetwrap" />').after(aElement); - aElement.bind('click', function (e) { - e.preventDefault(); - scope.$apply(function () { - if (attrs.uiReset){ - ctrl.$setViewValue(scope.$eval(attrs.uiReset)); - }else{ - ctrl.$setViewValue(resetValue); - } - ctrl.$render(); - }); - }); - } - }; -}]); - -'use strict'; - -/** - * Set a $uiRoute boolean to see if the current route matches - */ -angular.module('ui.route', []).directive('uiRoute', ['$location', '$parse', function ($location, $parse) { - return { - restrict: 'AC', - scope: true, - compile: function(tElement, tAttrs) { - var useProperty; - if (tAttrs.uiRoute) { - useProperty = 'uiRoute'; - } else if (tAttrs.ngHref) { - useProperty = 'ngHref'; - } else if (tAttrs.href) { - useProperty = 'href'; - } else { - throw new Error('uiRoute missing a route or href property on ' + tElement[0]); - } - return function ($scope, elm, attrs) { - var modelSetter = $parse(attrs.ngModel || attrs.routeModel || '$uiRoute').assign; - var watcher = angular.noop; - - // Used by href and ngHref - function staticWatcher(newVal) { - var hash = newVal.indexOf('#'); - if (hash > -1){ - newVal = newVal.substr(hash + 1); - } - watcher = function watchHref() { - modelSetter($scope, ($location.path().indexOf(newVal) > -1)); - }; - watcher(); - } - // Used by uiRoute - function regexWatcher(newVal) { - var hash = newVal.indexOf('#'); - if (hash > -1){ - newVal = newVal.substr(hash + 1); - } - watcher = function watchRegex() { - var regexp = new RegExp('^' + newVal + '$', ['i']); - modelSetter($scope, regexp.test($location.path())); - }; - watcher(); - } - - switch (useProperty) { - case 'uiRoute': - // if uiRoute={{}} this will be undefined, otherwise it will have a value and $observe() never gets triggered - if (attrs.uiRoute){ - regexWatcher(attrs.uiRoute); - }else{ - attrs.$observe('uiRoute', regexWatcher); - } - break; - case 'ngHref': - // Setup watcher() every time ngHref changes - if (attrs.ngHref){ - staticWatcher(attrs.ngHref); - }else{ - attrs.$observe('ngHref', staticWatcher); - } - break; - case 'href': - // Setup watcher() - staticWatcher(attrs.href); - } - - $scope.$on('$routeChangeSuccess', function(){ - watcher(); - }); - - //Added for compatibility with ui-router - $scope.$on('$stateChangeSuccess', function(){ - watcher(); - }); - }; - } - }; -}]); - -'use strict'; - -angular.module('ui.scroll.jqlite', ['ui.scroll']).service('jqLiteExtras', [ - '$log', '$window', function(console, window) { - return { - registerFor: function(element) { - var convertToPx, css, getMeasurements, getStyle, getWidthHeight, isWindow, scrollTo; - css = angular.element.prototype.css; - element.prototype.css = function(name, value) { - var elem, self; - self = this; - elem = self[0]; - if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) { - return css.call(self, name, value); - } - }; - isWindow = function(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; - }; - scrollTo = function(self, direction, value) { - var elem, method, preserve, prop, _ref; - elem = self[0]; - _ref = { - top: ['scrollTop', 'pageYOffset', 'scrollLeft'], - left: ['scrollLeft', 'pageXOffset', 'scrollTop'] - }[direction], method = _ref[0], prop = _ref[1], preserve = _ref[2]; - if (isWindow(elem)) { - if (angular.isDefined(value)) { - return elem.scrollTo(self[preserve].call(self), value); - } else { - if (prop in elem) { - return elem[prop]; - } else { - return elem.document.documentElement[method]; - } - } - } else { - if (angular.isDefined(value)) { - return elem[method] = value; - } else { - return elem[method]; - } - } - }; - if (window.getComputedStyle) { - getStyle = function(elem) { - return window.getComputedStyle(elem, null); - }; - convertToPx = function(elem, value) { - return parseFloat(value); - }; - } else { - getStyle = function(elem) { - return elem.currentStyle; - }; - convertToPx = function(elem, value) { - var core_pnum, left, result, rnumnonpx, rs, rsLeft, style; - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source; - rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i'); - if (!rnumnonpx.test(value)) { - return parseFloat(value); - } else { - style = elem.style; - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - if (rs) { - rs.left = style.left; - } - style.left = value; - result = style.pixelLeft; - style.left = left; - if (rsLeft) { - rs.left = rsLeft; - } - return result; - } - }; - } - getMeasurements = function(elem, measure) { - var base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB, _ref; - if (isWindow(elem)) { - base = document.documentElement[{ - height: 'clientHeight', - width: 'clientWidth' - }[measure]]; - return { - base: base, - padding: 0, - border: 0, - margin: 0 - }; - } - _ref = { - width: [elem.offsetWidth, 'Left', 'Right'], - height: [elem.offsetHeight, 'Top', 'Bottom'] - }[measure], base = _ref[0], dirA = _ref[1], dirB = _ref[2]; - computedStyle = getStyle(elem); - paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0; - paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0; - borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0; - borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0; - computedMarginA = computedStyle['margin' + dirA]; - computedMarginB = computedStyle['margin' + dirB]; - marginA = convertToPx(elem, computedMarginA) || 0; - marginB = convertToPx(elem, computedMarginB) || 0; - return { - base: base, - padding: paddingA + paddingB, - border: borderA + borderB, - margin: marginA + marginB - }; - }; - getWidthHeight = function(elem, direction, measure) { - var computedStyle, measurements, result; - measurements = getMeasurements(elem, direction); - if (measurements.base > 0) { - return { - base: measurements.base - measurements.padding - measurements.border, - outer: measurements.base, - outerfull: measurements.base + measurements.margin - }[measure]; - } else { - computedStyle = getStyle(elem); - result = computedStyle[direction]; - if (result < 0 || result === null) { - result = elem.style[direction] || 0; - } - result = parseFloat(result) || 0; - return { - base: result - measurements.padding - measurements.border, - outer: result, - outerfull: result + measurements.padding + measurements.border + measurements.margin - }[measure]; - } - }; - return angular.forEach({ - before: function(newElem) { - var children, elem, i, parent, self, _i, _ref; - self = this; - elem = self[0]; - parent = self.parent(); - children = parent.contents(); - if (children[0] === elem) { - return parent.prepend(newElem); - } else { - for (i = _i = 1, _ref = children.length - 1; 1 <= _ref ? _i <= _ref : _i >= _ref; i = 1 <= _ref ? ++_i : --_i) { - if (children[i] === elem) { - angular.element(children[i - 1]).after(newElem); - return; - } - } - throw new Error('invalid DOM structure ' + elem.outerHTML); - } - }, - height: function(value) { - var self; - self = this; - if (angular.isDefined(value)) { - if (angular.isNumber(value)) { - value = value + 'px'; - } - return css.call(self, 'height', value); - } else { - return getWidthHeight(this[0], 'height', 'base'); - } - }, - outerHeight: function(option) { - return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer'); - }, - offset: function(value) { - var box, doc, docElem, elem, self, win; - self = this; - if (arguments.length) { - if (value === void 0) { - return self; - } else { - return value; - - } - } - box = { - top: 0, - left: 0 - }; - elem = self[0]; - doc = elem && elem.ownerDocument; - if (!doc) { - return; - } - docElem = doc.documentElement; - if (elem.getBoundingClientRect) { - box = elem.getBoundingClientRect(); - } - win = doc.defaultView || doc.parentWindow; - return { - top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - }, - scrollTop: function(value) { - return scrollTo(this, 'top', value); - }, - scrollLeft: function(value) { - return scrollTo(this, 'left', value); - } - }, function(value, key) { - if (!element.prototype[key]) { - return element.prototype[key] = value; - } - }); - } - }; - } -]).run([ - '$log', '$window', 'jqLiteExtras', function(console, window, jqLiteExtras) { - if (!window.jQuery) { - return jqLiteExtras.registerFor(angular.element); - } - } -]); - -'use strict'; -/* - - List of used element methods available in JQuery but not in JQuery Lite - - element.before(elem) - element.height() - element.outerHeight(true) - element.height(value) = only for Top/Bottom padding elements - element.scrollTop() - element.scrollTop(value) - */ - -angular.module('ui.scroll', []).directive('ngScrollViewport', [ - '$log', function() { - return { - controller: [ - '$scope', '$element', function(scope, element) { - return element; - } - ] - }; - } - ]).directive('ngScroll', [ - '$log', '$injector', '$rootScope', '$timeout', function(console, $injector, $rootScope, $timeout) { - return { - require: ['?^ngScrollViewport'], - transclude: 'element', - priority: 1000, - terminal: true, - compile: function(element, attr, linker) { - return function($scope, $element, $attr, controllers) { - var adapter, adjustBuffer, adjustRowHeight, bof, bottomVisiblePos, buffer, bufferPadding, bufferSize, clipBottom, clipTop, datasource, datasourceName, enqueueFetch, eof, eventListener, fetch, finalize, first, insert, isDatasource, isLoading, itemName, loading, match, next, pending, reload, removeFromBuffer, resizeHandler, scrollHandler, scrollHeight, shouldLoadBottom, shouldLoadTop, tempScope, topVisiblePos, viewport; - match = $attr.ngScroll.match(/^\s*(\w+)\s+in\s+(\w+)\s*$/); - if (!match) { - throw new Error('Expected ngScroll in form of "item_ in _datasource_" but got "' + $attr.ngScroll + '"'); - } - itemName = match[1]; - datasourceName = match[2]; - isDatasource = function(datasource) { - return angular.isObject(datasource) && datasource.get && angular.isFunction(datasource.get); - }; - datasource = $scope[datasourceName]; - if (!isDatasource(datasource)) { - datasource = $injector.get(datasourceName); - if (!isDatasource(datasource)) { - throw new Error(datasourceName + ' is not a valid datasource'); - } - } - bufferSize = Math.max(3, +$attr.bufferSize || 10); - bufferPadding = function() { - return viewport.height() * Math.max(0.1, +$attr.padding || 0.1); - }; - scrollHeight = function(elem) { - return elem[0].scrollHeight || elem[0].document.documentElement.scrollHeight; - }; - adapter = null; - linker(tempScope = $scope.$new(), function(template) { - var bottomPadding, createPadding, padding, repeaterType, topPadding, viewport; - repeaterType = template[0].localName; - if (repeaterType === 'dl') { - throw new Error('ng-scroll directive does not support <' + template[0].localName + '> as a repeating tag: ' + template[0].outerHTML); - } - if (repeaterType !== 'li' && repeaterType !== 'tr') { - repeaterType = 'div'; - } - viewport = controllers[0] || angular.element(window); - viewport.css({ - 'overflow-y': 'auto', - 'display': 'block' - }); - padding = function(repeaterType) { - var div, result, table; - switch (repeaterType) { - case 'tr': - table = angular.element('<table><tr><td><div></div></td></tr></table>'); - div = table.find('div'); - result = table.find('tr'); - result.paddingHeight = function() { - return div.height.apply(div, arguments); - }; - return result; - default: - result = angular.element('<' + repeaterType + '></' + repeaterType + '>'); - result.paddingHeight = result.height; - return result; - } - }; - createPadding = function(padding, element, direction) { - element[{ - top: 'before', - bottom: 'after' - }[direction]](padding); - return { - paddingHeight: function() { - return padding.paddingHeight.apply(padding, arguments); - }, - insert: function(element) { - return padding[{ - top: 'after', - bottom: 'before' - }[direction]](element); - } - }; - }; - topPadding = createPadding(padding(repeaterType), element, 'top'); - bottomPadding = createPadding(padding(repeaterType), element, 'bottom'); - tempScope.$destroy(); - return adapter = { - viewport: viewport, - topPadding: topPadding.paddingHeight, - bottomPadding: bottomPadding.paddingHeight, - append: bottomPadding.insert, - prepend: topPadding.insert, - bottomDataPos: function() { - return scrollHeight(viewport) - bottomPadding.paddingHeight(); - }, - topDataPos: function() { - return topPadding.paddingHeight(); - } - }; - }); - viewport = adapter.viewport; - first = 1; - next = 1; - buffer = []; - pending = []; - eof = false; - bof = false; - loading = datasource.loading || function() {}; - isLoading = false; - removeFromBuffer = function(start, stop) { - var i, _i; - for (i = _i = start; start <= stop ? _i < stop : _i > stop; i = start <= stop ? ++_i : --_i) { - buffer[i].scope.$destroy(); - buffer[i].element.remove(); - } - return buffer.splice(start, stop - start); - }; - reload = function() { - first = 1; - next = 1; - removeFromBuffer(0, buffer.length); - adapter.topPadding(0); - adapter.bottomPadding(0); - pending = []; - eof = false; - bof = false; - return adjustBuffer(false); - }; - bottomVisiblePos = function() { - return viewport.scrollTop() + viewport.height(); - }; - topVisiblePos = function() { - return viewport.scrollTop(); - }; - shouldLoadBottom = function() { - return !eof && adapter.bottomDataPos() < bottomVisiblePos() + bufferPadding(); - }; - clipBottom = function() { - var bottomHeight, i, itemHeight, overage, _i, _ref; - bottomHeight = 0; - overage = 0; - for (i = _i = _ref = buffer.length - 1; _ref <= 0 ? _i <= 0 : _i >= 0; i = _ref <= 0 ? ++_i : --_i) { - itemHeight = buffer[i].element.outerHeight(true); - if (adapter.bottomDataPos() - bottomHeight - itemHeight > bottomVisiblePos() + bufferPadding()) { - bottomHeight += itemHeight; - overage++; - eof = false; - } else { - break; - } - } - if (overage > 0) { - adapter.bottomPadding(adapter.bottomPadding() + bottomHeight); - removeFromBuffer(buffer.length - overage, buffer.length); - next -= overage; - return console.log('clipped off bottom ' + overage + ' bottom padding ' + (adapter.bottomPadding())); - } - }; - shouldLoadTop = function() { - return !bof && (adapter.topDataPos() > topVisiblePos() - bufferPadding()); - }; - clipTop = function() { - var item, itemHeight, overage, topHeight, _i, _len; - topHeight = 0; - overage = 0; - for (_i = 0, _len = buffer.length; _i < _len; _i++) { - item = buffer[_i]; - itemHeight = item.element.outerHeight(true); - if (adapter.topDataPos() + topHeight + itemHeight < topVisiblePos() - bufferPadding()) { - topHeight += itemHeight; - overage++; - bof = false; - } else { - break; - } - } - if (overage > 0) { - adapter.topPadding(adapter.topPadding() + topHeight); - removeFromBuffer(0, overage); - first += overage; - return console.log('clipped off top ' + overage + ' top padding ' + (adapter.topPadding())); - } - }; - enqueueFetch = function(direction, scrolling) { - if (!isLoading) { - isLoading = true; - loading(true); - } - if (pending.push(direction) === 1) { - return fetch(scrolling); - } - }; - insert = function(index, item) { - var itemScope, toBeAppended, wrapper; - itemScope = $scope.$new(); - itemScope[itemName] = item; - toBeAppended = index > first; - itemScope.$index = index; - if (toBeAppended) { - itemScope.$index--; - } - wrapper = { - scope: itemScope - }; - linker(itemScope, function(clone) { - wrapper.element = clone; - if (toBeAppended) { - if (index === next) { - adapter.append(clone); - return buffer.push(wrapper); - } else { - buffer[index - first].element.after(clone); - return buffer.splice(index - first + 1, 0, wrapper); - } - } else { - adapter.prepend(clone); - return buffer.unshift(wrapper); - } - }); - return { - appended: toBeAppended, - wrapper: wrapper - }; - }; - adjustRowHeight = function(appended, wrapper) { - var newHeight; - if (appended) { - return adapter.bottomPadding(Math.max(0, adapter.bottomPadding() - wrapper.element.outerHeight(true))); - } else { - newHeight = adapter.topPadding() - wrapper.element.outerHeight(true); - if (newHeight >= 0) { - return adapter.topPadding(newHeight); - } else { - return viewport.scrollTop(viewport.scrollTop() + wrapper.element.outerHeight(true)); - } - } - }; - adjustBuffer = function(scrolling, newItems, finalize) { - var doAdjustment; - doAdjustment = function() { - console.log('top {actual=' + (adapter.topDataPos()) + ' visible from=' + (topVisiblePos()) + ' bottom {visible through=' + (bottomVisiblePos()) + ' actual=' + (adapter.bottomDataPos()) + '}'); - if (shouldLoadBottom()) { - enqueueFetch(true, scrolling); - } else { - if (shouldLoadTop()) { - enqueueFetch(false, scrolling); - } - } - if (finalize) { - return finalize(); - } - }; - if (newItems) { - return $timeout(function() { - var row, _i, _len; - for (_i = 0, _len = newItems.length; _i < _len; _i++) { - row = newItems[_i]; - adjustRowHeight(row.appended, row.wrapper); - } - return doAdjustment(); - }); - } else { - return doAdjustment(); - } - }; - finalize = function(scrolling, newItems) { - return adjustBuffer(scrolling, newItems, function() { - pending.shift(); - if (pending.length === 0) { - isLoading = false; - return loading(false); - } else { - return fetch(scrolling); - } - }); - }; - fetch = function(scrolling) { - var direction; - direction = pending[0]; - if (direction) { - if (buffer.length && !shouldLoadBottom()) { - return finalize(scrolling); - } else { - return datasource.get(next, bufferSize, function(result) { - var item, newItems, _i, _len; - newItems = []; - if (result.length === 0) { - eof = true; - adapter.bottomPadding(0); - console.log('appended: requested ' + bufferSize + ' records starting from ' + next + ' recieved: eof'); - } else { - clipTop(); - for (_i = 0, _len = result.length; _i < _len; _i++) { - item = result[_i]; - newItems.push(insert(++next, item)); - } - console.log('appended: requested ' + bufferSize + ' received ' + result.length + ' buffer size ' + buffer.length + ' first ' + first + ' next ' + next); - } - return finalize(scrolling, newItems); - }); - } - } else { - if (buffer.length && !shouldLoadTop()) { - return finalize(scrolling); - } else { - return datasource.get(first - bufferSize, bufferSize, function(result) { - var i, newItems, _i, _ref; - newItems = []; - if (result.length === 0) { - bof = true; - adapter.topPadding(0); - console.log('prepended: requested ' + bufferSize + ' records starting from ' + (first - bufferSize) + ' recieved: bof'); - } else { - clipBottom(); - for (i = _i = _ref = result.length - 1; _ref <= 0 ? _i <= 0 : _i >= 0; i = _ref <= 0 ? ++_i : --_i) { - newItems.unshift(insert(--first, result[i])); - } - console.log('prepended: requested ' + bufferSize + ' received ' + result.length + ' buffer size ' + buffer.length + ' first ' + first + ' next ' + next); - } - return finalize(scrolling, newItems); - }); - } - } - }; - resizeHandler = function() { - if (!$rootScope.$$phase && !isLoading) { - adjustBuffer(false); - return $scope.$apply(); - } - }; - viewport.bind('resize', resizeHandler); - scrollHandler = function() { - if (!$rootScope.$$phase && !isLoading) { - adjustBuffer(true); - return $scope.$apply(); - } - }; - viewport.bind('scroll', scrollHandler); - $scope.$watch(datasource.revision, function() { - return reload(); - }); - if (datasource.scope) { - eventListener = datasource.scope.$new(); - } else { - eventListener = $scope.$new(); - } - $scope.$on('$destroy', function() { - eventListener.$destroy(); - viewport.unbind('resize', resizeHandler); - return viewport.unbind('scroll', scrollHandler); - }); - eventListener.$on('update.items', function(event, locator, newItem) { - var wrapper, _fn, _i, _len, _ref; - if (angular.isFunction(locator)) { - _fn = function(wrapper) { - return locator(wrapper.scope); - }; - for (_i = 0, _len = buffer.length; _i < _len; _i++) { - wrapper = buffer[_i]; - _fn(wrapper); - } - } else { - if ((0 <= (_ref = locator - first - 1) && _ref < buffer.length)) { - buffer[locator - first - 1].scope[itemName] = newItem; - } - } - return null; - }); - eventListener.$on('delete.items', function(event, locator) { - var i, item, temp, wrapper, _fn, _i, _j, _k, _len, _len1, _len2, _ref; - if (angular.isFunction(locator)) { - temp = []; - for (_i = 0, _len = buffer.length; _i < _len; _i++) { - item = buffer[_i]; - temp.unshift(item); - } - _fn = function(wrapper) { - if (locator(wrapper.scope)) { - removeFromBuffer(temp.length - 1 - i, temp.length - i); - return next--; - } - }; - for (i = _j = 0, _len1 = temp.length; _j < _len1; i = ++_j) { - wrapper = temp[i]; - _fn(wrapper); - } - } else { - if ((0 <= (_ref = locator - first - 1) && _ref < buffer.length)) { - removeFromBuffer(locator - first - 1, locator - first); - next--; - } - } - for (i = _k = 0, _len2 = buffer.length; _k < _len2; i = ++_k) { - item = buffer[i]; - item.scope.$index = first + i; - } - return adjustBuffer(false); - }); - return eventListener.$on('insert.item', function(event, locator, item) { - var i, inserted, temp, wrapper, _fn, _i, _j, _k, _len, _len1, _len2, _ref; - inserted = []; - if (angular.isFunction(locator)) { - temp = []; - for (_i = 0, _len = buffer.length; _i < _len; _i++) { - item = buffer[_i]; - temp.unshift(item); - } - _fn = function(wrapper) { - var j, newItems, _k, _len2, _results; - if (newItems = locator(wrapper.scope)) { - insert = function(index, newItem) { - insert(index, newItem); - return next++; - }; - if (angular.isArray(newItems)) { - _results = []; - for (j = _k = 0, _len2 = newItems.length; _k < _len2; j = ++_k) { - item = newItems[j]; - _results.push(inserted.push(insert(i + j, item))); - } - return _results; - } else { - return inserted.push(insert(i, newItems)); - } - } - }; - for (i = _j = 0, _len1 = temp.length; _j < _len1; i = ++_j) { - wrapper = temp[i]; - _fn(wrapper); - } - } else { - if ((0 <= (_ref = locator - first - 1) && _ref < buffer.length)) { - inserted.push(insert(locator, item)); - next++; - } - } - for (i = _k = 0, _len2 = buffer.length; _k < _len2; i = ++_k) { - item = buffer[i]; - item.scope.$index = first + i; - } - return adjustBuffer(false, inserted); - }); - }; - } - }; - } - ]); - -'use strict'; - -/** - * Adds a 'ui-scrollfix' class to the element when the page scrolls past it's position. - * @param [offset] {int} optional Y-offset to override the detected offset. - * Takes 300 (absolute) or -300 or +300 (relative to detected) - */ -angular.module('ui.scrollfix',[]).directive('uiScrollfix', ['$window', function ($window) { - return { - require: '^?uiScrollfixTarget', - link: function (scope, elm, attrs, uiScrollfixTarget) { - var top = elm[0].offsetTop, - $target = uiScrollfixTarget && uiScrollfixTarget.$element || angular.element($window); - - if (!attrs.uiScrollfix) { - attrs.uiScrollfix = top; - } else if (typeof(attrs.uiScrollfix) === 'string') { - // charAt is generally faster than indexOf: http://jsperf.com/indexof-vs-charat - if (attrs.uiScrollfix.charAt(0) === '-') { - attrs.uiScrollfix = top - parseFloat(attrs.uiScrollfix.substr(1)); - } else if (attrs.uiScrollfix.charAt(0) === '+') { - attrs.uiScrollfix = top + parseFloat(attrs.uiScrollfix.substr(1)); - } - } - - function onScroll() { - // if pageYOffset is defined use it, otherwise use other crap for IE - var offset; - if (angular.isDefined($window.pageYOffset)) { - offset = $window.pageYOffset; - } else { - var iebody = (document.compatMode && document.compatMode !== 'BackCompat') ? document.documentElement : document.body; - offset = iebody.scrollTop; - } - if (!elm.hasClass('ui-scrollfix') && offset > attrs.uiScrollfix) { - elm.addClass('ui-scrollfix'); - } else if (elm.hasClass('ui-scrollfix') && offset < attrs.uiScrollfix) { - elm.removeClass('ui-scrollfix'); - } - } - - $target.on('scroll', onScroll); - - // Unbind scroll event handler when directive is removed - scope.$on('$destroy', function() { - $target.off('scroll', onScroll); - }); - } - }; -}]).directive('uiScrollfixTarget', [function () { - return { - controller: ['$element', function($element) { - this.$element = $element; - }] - }; -}]); - -'use strict'; - -/** - * uiShow Directive - * - * Adds a 'ui-show' class to the element instead of display:block - * Created to allow tighter control of CSS without bulkier directives - * - * @param expression {boolean} evaluated expression to determine if the class should be added - */ -angular.module('ui.showhide',[]) -.directive('uiShow', [function () { - return function (scope, elm, attrs) { - scope.$watch(attrs.uiShow, function (newVal) { - if (newVal) { - elm.addClass('ui-show'); - } else { - elm.removeClass('ui-show'); - } - }); - }; -}]) - -/** - * uiHide Directive - * - * Adds a 'ui-hide' class to the element instead of display:block - * Created to allow tighter control of CSS without bulkier directives - * - * @param expression {boolean} evaluated expression to determine if the class should be added - */ -.directive('uiHide', [function () { - return function (scope, elm, attrs) { - scope.$watch(attrs.uiHide, function (newVal) { - if (newVal) { - elm.addClass('ui-hide'); - } else { - elm.removeClass('ui-hide'); - } - }); - }; -}]) - -/** - * uiToggle Directive - * - * Adds a class 'ui-show' if true, and a 'ui-hide' if false to the element instead of display:block/display:none - * Created to allow tighter control of CSS without bulkier directives. This also allows you to override the - * default visibility of the element using either class. - * - * @param expression {boolean} evaluated expression to determine if the class should be added - */ -.directive('uiToggle', [function () { - return function (scope, elm, attrs) { - scope.$watch(attrs.uiToggle, function (newVal) { - if (newVal) { - elm.removeClass('ui-hide').addClass('ui-show'); - } else { - elm.removeClass('ui-show').addClass('ui-hide'); - } - }); - }; -}]); - -'use strict'; - -/** - * Filters out all duplicate items from an array by checking the specified key - * @param [key] {string} the name of the attribute of each object to compare for uniqueness - if the key is empty, the entire object will be compared - if the key === false then no filtering will be performed - * @return {array} - */ -angular.module('ui.unique',[]).filter('unique', ['$parse', function ($parse) { - - return function (items, filterOn) { - - if (filterOn === false) { - return items; - } - - if ((filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)) { - var newItems = [], - get = angular.isString(filterOn) ? $parse(filterOn) : function (item) { return item; }; - - var extractValueToCompare = function (item) { - return angular.isObject(item) ? get(item) : item; - }; - - angular.forEach(items, function (item) { - var isDuplicate = false; - - for (var i = 0; i < newItems.length; i++) { - if (angular.equals(extractValueToCompare(newItems[i]), extractValueToCompare(item))) { - isDuplicate = true; - break; - } - } - if (!isDuplicate) { - newItems.push(item); - } - - }); - items = newItems; - } - return items; - }; -}]); - -'use strict'; - -/** - * General-purpose validator for ngModel. - * angular.js comes with several built-in validation mechanism for input fields (ngRequired, ngPattern etc.) but using - * an arbitrary validation function requires creation of a custom formatters and / or parsers. - * The ui-validate directive makes it easy to use any function(s) defined in scope as a validator function(s). - * A validator function will trigger validation on both model and input changes. - * - * @example <input ui-validate=" 'myValidatorFunction($value)' "> - * @example <input ui-validate="{ foo : '$value > anotherModel', bar : 'validateFoo($value)' }"> - * @example <input ui-validate="{ foo : '$value > anotherModel' }" ui-validate-watch=" 'anotherModel' "> - * @example <input ui-validate="{ foo : '$value > anotherModel', bar : 'validateFoo($value)' }" ui-validate-watch=" { foo : 'anotherModel' } "> - * - * @param ui-validate {string|object literal} If strings is passed it should be a scope's function to be used as a validator. - * If an object literal is passed a key denotes a validation error key while a value should be a validator function. - * In both cases validator function should take a value to validate as its argument and should return true/false indicating a validation result. - */ -angular.module('ui.validate',[]).directive('uiValidate', function () { - - return { - restrict: 'A', - require: 'ngModel', - link: function (scope, elm, attrs, ctrl) { - var validateFn, validators = {}, - validateExpr = scope.$eval(attrs.uiValidate); - - if (!validateExpr){ return;} - - if (angular.isString(validateExpr)) { - validateExpr = { validator: validateExpr }; - } - - angular.forEach(validateExpr, function (exprssn, key) { - validateFn = function (valueToValidate) { - var expression = scope.$eval(exprssn, { '$value' : valueToValidate }); - if (angular.isObject(expression) && angular.isFunction(expression.then)) { - // expression is a promise - expression.then(function(){ - ctrl.$setValidity(key, true); - }, function(){ - ctrl.$setValidity(key, false); - }); - return valueToValidate; - } else if (expression) { - // expression is true - ctrl.$setValidity(key, true); - return valueToValidate; - } else { - // expression is false - ctrl.$setValidity(key, false); - return valueToValidate; - } - }; - validators[key] = validateFn; - ctrl.$formatters.push(validateFn); - ctrl.$parsers.push(validateFn); - }); - - function apply_watch(watch) - { - //string - update all validators on expression change - if (angular.isString(watch)) - { - scope.$watch(watch, function(){ - angular.forEach(validators, function(validatorFn){ - validatorFn(ctrl.$modelValue); - }); - }); - return; - } - - //array - update all validators on change of any expression - if (angular.isArray(watch)) - { - angular.forEach(watch, function(expression){ - scope.$watch(expression, function() - { - angular.forEach(validators, function(validatorFn){ - validatorFn(ctrl.$modelValue); - }); - }); - }); - return; - } - - //object - update appropriate validator - if (angular.isObject(watch)) - { - angular.forEach(watch, function(expression, validatorKey) - { - //value is string - look after one expression - if (angular.isString(expression)) - { - scope.$watch(expression, function(){ - validators[validatorKey](ctrl.$modelValue); - }); - } - - //value is array - look after all expressions in array - if (angular.isArray(expression)) - { - angular.forEach(expression, function(intExpression) - { - scope.$watch(intExpression, function(){ - validators[validatorKey](ctrl.$modelValue); - }); - }); - } - }); - } - } - // Support for ui-validate-watch - if (attrs.uiValidateWatch){ - apply_watch( scope.$eval(attrs.uiValidateWatch) ); - } - } - }; -}); - -angular.module('ui.utils', [ - 'ui.event', - 'ui.format', - 'ui.highlight', - 'ui.include', - 'ui.indeterminate', - 'ui.inflector', - 'ui.jq', - 'ui.keypress', - 'ui.mask', - 'ui.reset', - 'ui.route', - 'ui.scrollfix', - 'ui.scroll', - 'ui.scroll.jqlite', - 'ui.showhide', - 'ui.unique', - 'ui.validate' -]); diff --git a/civicrm/bower_components/angular-ui-utils/ui-utils.min.js b/civicrm/bower_components/angular-ui-utils/ui-utils.min.js deleted file mode 100644 index dd7f2afcff8406d23a68b8fcdc364a2873cac8b1..0000000000000000000000000000000000000000 --- a/civicrm/bower_components/angular-ui-utils/ui-utils.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * angular-ui-utils - Swiss-Army-Knife of AngularJS tools (with no external dependencies!) - * @version v0.1.1 - 2014-02-05 - * @link http://angular-ui.github.com - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -"use strict";angular.module("ui.alias",[]).config(["$compileProvider","uiAliasConfig",function(a,b){b=b||{},angular.forEach(b,function(b,c){angular.isString(b)&&(b={replace:!0,template:b}),a.directive(c,function(){return b})})}]),angular.module("ui.event",[]).directive("uiEvent",["$parse",function(a){return function(b,c,d){var e=b.$eval(d.uiEvent);angular.forEach(e,function(d,e){var f=a(d);c.bind(e,function(a){var c=Array.prototype.slice.call(arguments);c=c.splice(1),f(b,{$event:a,$params:c}),b.$$phase||b.$apply()})})}}]),angular.module("ui.format",[]).filter("format",function(){return function(a,b){var c=a;if(angular.isString(c)&&void 0!==b)if(angular.isArray(b)||angular.isObject(b)||(b=[b]),angular.isArray(b)){var d=b.length,e=function(a,c){return c=parseInt(c,10),c>=0&&d>c?b[c]:a};c=c.replace(/\$([0-9]+)/g,e)}else angular.forEach(b,function(a,b){c=c.split(":"+b).join(a)});return c}}),angular.module("ui.highlight",[]).filter("highlight",function(){return function(a,b,c){return b||angular.isNumber(b)?(a=a.toString(),b=b.toString(),c?a.split(b).join('<span class="ui-match">'+b+"</span>"):a.replace(new RegExp(b,"gi"),'<span class="ui-match">$&</span>')):a}}),angular.module("ui.include",[]).directive("uiInclude",["$http","$templateCache","$anchorScroll","$compile",function(a,b,c,d){return{restrict:"ECA",terminal:!0,compile:function(e,f){var g=f.uiInclude||f.src,h=f.fragment||"",i=f.onload||"",j=f.autoscroll;return function(e,f){function k(){var k=++m,o=e.$eval(g),p=e.$eval(h);o?a.get(o,{cache:b}).success(function(a){if(k===m){l&&l.$destroy(),l=e.$new();var b;b=p?angular.element("<div/>").html(a).find(p):angular.element("<div/>").html(a).contents(),f.html(b),d(b)(l),!angular.isDefined(j)||j&&!e.$eval(j)||c(),l.$emit("$includeContentLoaded"),e.$eval(i)}}).error(function(){k===m&&n()}):n()}var l,m=0,n=function(){l&&(l.$destroy(),l=null),f.html("")};e.$watch(h,k),e.$watch(g,k)}}}}]),angular.module("ui.indeterminate",[]).directive("uiIndeterminate",[function(){return{compile:function(a,b){return b.type&&"checkbox"===b.type.toLowerCase()?function(a,b,c){a.$watch(c.uiIndeterminate,function(a){b[0].indeterminate=!!a})}:angular.noop}}}]),angular.module("ui.inflector",[]).filter("inflector",function(){function a(a){return a.replace(/^([a-z])|\s+([a-z])/g,function(a){return a.toUpperCase()})}function b(a,b){return a.replace(/[A-Z]/g,function(a){return b+a})}var c={humanize:function(c){return a(b(c," ").split("_").join(" "))},underscore:function(a){return a.substr(0,1).toLowerCase()+b(a.substr(1),"_").toLowerCase().split(" ").join("_")},variable:function(b){return b=b.substr(0,1).toLowerCase()+a(b.split("_").join(" ")).substr(1).split(" ").join("")}};return function(a,b){return b!==!1&&angular.isString(a)?(b=b||"humanize",c[b](a)):a}}),angular.module("ui.jq",[]).value("uiJqConfig",{}).directive("uiJq",["uiJqConfig","$timeout",function(a,b){return{restrict:"A",compile:function(c,d){if(!angular.isFunction(c[d.uiJq]))throw new Error('ui-jq: The "'+d.uiJq+'" function does not exist');var e=a&&a[d.uiJq];return function(a,c,d){function f(){b(function(){c[d.uiJq].apply(c,g)},0,!1)}var g=[];d.uiOptions?(g=a.$eval("["+d.uiOptions+"]"),angular.isObject(e)&&angular.isObject(g[0])&&(g[0]=angular.extend({},e,g[0]))):e&&(g=[e]),d.ngModel&&c.is("select,input,textarea")&&c.bind("change",function(){c.trigger("input")}),d.uiRefresh&&a.$watch(d.uiRefresh,function(){f()}),f()}}}}]),angular.module("ui.keypress",[]).factory("keypressHelper",["$parse",function(a){var b={8:"backspace",9:"tab",13:"enter",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete"},c=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};return function(d,e,f,g){var h,i=[];h=e.$eval(g["ui"+c(d)]),angular.forEach(h,function(b,c){var d,e;e=a(b),angular.forEach(c.split(" "),function(a){d={expression:e,keys:{}},angular.forEach(a.split("-"),function(a){d.keys[a]=!0}),i.push(d)})}),f.bind(d,function(a){var c=!(!a.metaKey||a.ctrlKey),f=!!a.altKey,g=!!a.ctrlKey,h=!!a.shiftKey,j=a.keyCode;"keypress"===d&&!h&&j>=97&&122>=j&&(j-=32),angular.forEach(i,function(d){var i=d.keys[b[j]]||d.keys[j.toString()],k=!!d.keys.meta,l=!!d.keys.alt,m=!!d.keys.ctrl,n=!!d.keys.shift;i&&k===c&&l===f&&m===g&&n===h&&e.$apply(function(){d.expression(e,{$event:a})})})})}}]),angular.module("ui.keypress").directive("uiKeydown",["keypressHelper",function(a){return{link:function(b,c,d){a("keydown",b,c,d)}}}]),angular.module("ui.keypress").directive("uiKeypress",["keypressHelper",function(a){return{link:function(b,c,d){a("keypress",b,c,d)}}}]),angular.module("ui.keypress").directive("uiKeyup",["keypressHelper",function(a){return{link:function(b,c,d){a("keyup",b,c,d)}}}]),angular.module("ui.mask",[]).value("uiMaskConfig",{maskDefinitions:{9:/\d/,A:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/}}).directive("uiMask",["uiMaskConfig",function(a){return{priority:100,require:"ngModel",restrict:"A",compile:function(){var b=a;return function(a,c,d,e){function f(a){return angular.isDefined(a)?(s(a),N?(k(),l(),!0):j()):j()}function g(a){angular.isDefined(a)&&(D=a,N&&w())}function h(a){return N?(G=o(a||""),I=n(G),e.$setValidity("mask",I),I&&G.length?p(G):void 0):a}function i(a){return N?(G=o(a||""),I=n(G),e.$viewValue=G.length?p(G):"",e.$setValidity("mask",I),""===G&&void 0!==e.$error.required&&e.$setValidity("required",!1),I?G:void 0):a}function j(){return N=!1,m(),angular.isDefined(P)?c.attr("placeholder",P):c.removeAttr("placeholder"),angular.isDefined(Q)?c.attr("maxlength",Q):c.removeAttr("maxlength"),c.val(e.$modelValue),e.$viewValue=e.$modelValue,!1}function k(){G=K=o(e.$modelValue||""),H=J=p(G),I=n(G);var a=I&&G.length?H:"";d.maxlength&&c.attr("maxlength",2*B[B.length-1]),c.attr("placeholder",D),c.val(a),e.$viewValue=a}function l(){O||(c.bind("blur",t),c.bind("mousedown mouseup",u),c.bind("input keyup click focus",w),O=!0)}function m(){O&&(c.unbind("blur",t),c.unbind("mousedown",u),c.unbind("mouseup",u),c.unbind("input",w),c.unbind("keyup",w),c.unbind("click",w),c.unbind("focus",w),O=!1)}function n(a){return a.length?a.length>=F:!0}function o(a){var b="",c=C.slice();return a=a.toString(),angular.forEach(E,function(b){a=a.replace(b,"")}),angular.forEach(a.split(""),function(a){c.length&&c[0].test(a)&&(b+=a,c.shift())}),b}function p(a){var b="",c=B.slice();return angular.forEach(D.split(""),function(d,e){a.length&&e===c[0]?(b+=a.charAt(0)||"_",a=a.substr(1),c.shift()):b+=d}),b}function q(a){var b=d.placeholder;return"undefined"!=typeof b&&b[a]?b[a]:"_"}function r(){return D.replace(/[_]+/g,"_").replace(/([^_]+)([a-zA-Z0-9])([^_])/g,"$1$2_$3").split("_")}function s(a){var b=0;if(B=[],C=[],D="","string"==typeof a){F=0;var c=!1,d=a.split("");angular.forEach(d,function(a,d){R.maskDefinitions[a]?(B.push(b),D+=q(d),C.push(R.maskDefinitions[a]),b++,c||F++):"?"===a?c=!0:(D+=a,b++)})}B.push(B.slice().pop()+1),E=r(),N=B.length>1?!0:!1}function t(){L=0,M=0,I&&0!==G.length||(H="",c.val(""),a.$apply(function(){e.$setViewValue("")}))}function u(a){"mousedown"===a.type?c.bind("mouseout",v):c.unbind("mouseout",v)}function v(){M=A(this),c.unbind("mouseout",v)}function w(b){b=b||{};var d=b.which,f=b.type;if(16!==d&&91!==d){var g,h=c.val(),i=J,j=o(h),k=K,l=!1,m=y(this)||0,n=L||0,q=m-n,r=B[0],s=B[j.length]||B.slice().shift(),t=M||0,u=A(this)>0,v=t>0,w=h.length>i.length||t&&h.length>i.length-t,C=h.length<i.length||t&&h.length===i.length-t,D=d>=37&&40>=d&&b.shiftKey,E=37===d,F=8===d||"keyup"!==f&&C&&-1===q,G=46===d||"keyup"!==f&&C&&0===q&&!v,H=(E||F||"click"===f)&&m>r;if(M=A(this),!D&&(!u||"click"!==f&&"keyup"!==f)){if("input"===f&&C&&!v&&j===k){for(;F&&m>r&&!x(m);)m--;for(;G&&s>m&&-1===B.indexOf(m);)m++;var I=B.indexOf(m);j=j.substring(0,I)+j.substring(I+1),l=!0}for(g=p(j),J=g,K=j,c.val(g),l&&a.$apply(function(){e.$setViewValue(j)}),w&&r>=m&&(m=r+1),H&&m--,m=m>s?s:r>m?r:m;!x(m)&&m>r&&s>m;)m+=H?-1:1;(H&&s>m||w&&!x(n))&&m++,L=m,z(this,m)}}}function x(a){return B.indexOf(a)>-1}function y(a){if(!a)return 0;if(void 0!==a.selectionStart)return a.selectionStart;if(document.selection){a.focus();var b=document.selection.createRange();return b.moveStart("character",-a.value.length),b.text.length}return 0}function z(a,b){if(!a)return 0;if(0!==a.offsetWidth&&0!==a.offsetHeight)if(a.setSelectionRange)a.focus(),a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0),c.moveEnd("character",b),c.moveStart("character",b),c.select()}}function A(a){return a?void 0!==a.selectionStart?a.selectionEnd-a.selectionStart:document.selection?document.selection.createRange().text.length:0:0}var B,C,D,E,F,G,H,I,J,K,L,M,N=!1,O=!1,P=d.placeholder,Q=d.maxlength,R={};d.uiOptions?(R=a.$eval("["+d.uiOptions+"]"),angular.isObject(R[0])&&(R=function(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]?angular.extend(b[c],a[c]):b[c]=angular.copy(a[c]));return b}(b,R[0]))):R=b,d.$observe("uiMask",f),d.$observe("placeholder",g),e.$formatters.push(h),e.$parsers.push(i),c.bind("mousedown mouseup",u),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!==d?d=0:0!==d&&1/0!==d&&d!==-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1})}}}}]),angular.module("ui.reset",[]).value("uiResetConfig",null).directive("uiReset",["uiResetConfig",function(a){var b=null;return void 0!==a&&(b=a),{require:"ngModel",link:function(a,c,d,e){var f;f=angular.element('<a class="ui-reset" />'),c.wrap('<span class="ui-resetwrap" />').after(f),f.bind("click",function(c){c.preventDefault(),a.$apply(function(){e.$setViewValue(d.uiReset?a.$eval(d.uiReset):b),e.$render()})})}}}]),angular.module("ui.route",[]).directive("uiRoute",["$location","$parse",function(a,b){return{restrict:"AC",scope:!0,compile:function(c,d){var e;if(d.uiRoute)e="uiRoute";else if(d.ngHref)e="ngHref";else{if(!d.href)throw new Error("uiRoute missing a route or href property on "+c[0]);e="href"}return function(c,d,f){function g(b){var d=b.indexOf("#");d>-1&&(b=b.substr(d+1)),(j=function(){i(c,a.path().indexOf(b)>-1)})()}function h(b){var d=b.indexOf("#");d>-1&&(b=b.substr(d+1)),(j=function(){var d=new RegExp("^"+b+"$",["i"]);i(c,d.test(a.path()))})()}var i=b(f.ngModel||f.routeModel||"$uiRoute").assign,j=angular.noop;switch(e){case"uiRoute":f.uiRoute?h(f.uiRoute):f.$observe("uiRoute",h);break;case"ngHref":f.ngHref?g(f.ngHref):f.$observe("ngHref",g);break;case"href":g(f.href)}c.$on("$routeChangeSuccess",function(){j()}),c.$on("$stateChangeSuccess",function(){j()})}}}}]),angular.module("ui.scroll.jqlite",["ui.scroll"]).service("jqLiteExtras",["$log","$window",function(a,b){return{registerFor:function(a){var c,d,e,f,g,h,i;return d=angular.element.prototype.css,a.prototype.css=function(a,b){var c,e;return e=this,c=e[0],c&&3!==c.nodeType&&8!==c.nodeType&&c.style?d.call(e,a,b):void 0},h=function(a){return a&&a.document&&a.location&&a.alert&&a.setInterval},i=function(a,b,c){var d,e,f,g,i;return d=a[0],i={top:["scrollTop","pageYOffset","scrollLeft"],left:["scrollLeft","pageXOffset","scrollTop"]}[b],e=i[0],g=i[1],f=i[2],h(d)?angular.isDefined(c)?d.scrollTo(a[f].call(a),c):g in d?d[g]:d.document.documentElement[e]:angular.isDefined(c)?d[e]=c:d[e]},b.getComputedStyle?(f=function(a){return b.getComputedStyle(a,null)},c=function(a,b){return parseFloat(b)}):(f=function(a){return a.currentStyle},c=function(a,b){var c,d,e,f,g,h,i;return c=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,f=new RegExp("^("+c+")(?!px)[a-z%]+$","i"),f.test(b)?(i=a.style,d=i.left,g=a.runtimeStyle,h=g&&g.left,g&&(g.left=i.left),i.left=b,e=i.pixelLeft,i.left=d,h&&(g.left=h),e):parseFloat(b)}),e=function(a,b){var d,e,g,i,j,k,l,m,n,o,p,q,r;return h(a)?(d=document.documentElement[{height:"clientHeight",width:"clientWidth"}[b]],{base:d,padding:0,border:0,margin:0}):(r={width:[a.offsetWidth,"Left","Right"],height:[a.offsetHeight,"Top","Bottom"]}[b],d=r[0],l=r[1],m=r[2],k=f(a),p=c(a,k["padding"+l])||0,q=c(a,k["padding"+m])||0,e=c(a,k["border"+l+"Width"])||0,g=c(a,k["border"+m+"Width"])||0,i=k["margin"+l],j=k["margin"+m],n=c(a,i)||0,o=c(a,j)||0,{base:d,padding:p+q,border:e+g,margin:n+o})},g=function(a,b,c){var d,g,h;return g=e(a,b),g.base>0?{base:g.base-g.padding-g.border,outer:g.base,outerfull:g.base+g.margin}[c]:(d=f(a),h=d[b],(0>h||null===h)&&(h=a.style[b]||0),h=parseFloat(h)||0,{base:h-g.padding-g.border,outer:h,outerfull:h+g.padding+g.border+g.margin}[c])},angular.forEach({before:function(a){var b,c,d,e,f,g,h;if(f=this,c=f[0],e=f.parent(),b=e.contents(),b[0]===c)return e.prepend(a);for(d=g=1,h=b.length-1;h>=1?h>=g:g>=h;d=h>=1?++g:--g)if(b[d]===c)return void angular.element(b[d-1]).after(a);throw new Error("invalid DOM structure "+c.outerHTML)},height:function(a){var b;return b=this,angular.isDefined(a)?(angular.isNumber(a)&&(a+="px"),d.call(b,"height",a)):g(this[0],"height","base")},outerHeight:function(a){return g(this[0],"height",a?"outerfull":"outer")},offset:function(a){var b,c,d,e,f,g;return f=this,arguments.length?void 0===a?f:a:(b={top:0,left:0},e=f[0],(c=e&&e.ownerDocument)?(d=c.documentElement,e.getBoundingClientRect&&(b=e.getBoundingClientRect()),g=c.defaultView||c.parentWindow,{top:b.top+(g.pageYOffset||d.scrollTop)-(d.clientTop||0),left:b.left+(g.pageXOffset||d.scrollLeft)-(d.clientLeft||0)}):void 0)},scrollTop:function(a){return i(this,"top",a)},scrollLeft:function(a){return i(this,"left",a)}},function(b,c){return a.prototype[c]?void 0:a.prototype[c]=b})}}}]).run(["$log","$window","jqLiteExtras",function(a,b,c){return b.jQuery?void 0:c.registerFor(angular.element)}]),angular.module("ui.scroll",[]).directive("ngScrollViewport",["$log",function(){return{controller:["$scope","$element",function(a,b){return b}]}}]).directive("ngScroll",["$log","$injector","$rootScope","$timeout",function(a,b,c,d){return{require:["?^ngScrollViewport"],transclude:"element",priority:1e3,terminal:!0,compile:function(e,f,g){return function(f,h,i,j){var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T;if(H=i.ngScroll.match(/^\s*(\w+)\s+in\s+(\w+)\s*$/),!H)throw new Error('Expected ngScroll in form of "item_ in _datasource_" but got "'+i.ngScroll+'"');if(F=H[1],v=H[2],D=function(a){return angular.isObject(a)&&a.get&&angular.isFunction(a.get)},u=f[v],!D(u)&&(u=b.get(v),!D(u)))throw new Error(v+" is not a valid datasource");return r=Math.max(3,+i.bufferSize||10),q=function(){return T.height()*Math.max(.1,+i.padding||.1)},O=function(a){return a[0].scrollHeight||a[0].document.documentElement.scrollHeight},k=null,g(R=f.$new(),function(a){var b,c,d,f,g,h;if(f=a[0].localName,"dl"===f)throw new Error("ng-scroll directive does not support <"+a[0].localName+"> as a repeating tag: "+a[0].outerHTML);return"li"!==f&&"tr"!==f&&(f="div"),h=j[0]||angular.element(window),h.css({"overflow-y":"auto",display:"block"}),d=function(a){var b,c,d;switch(a){case"tr":return d=angular.element("<table><tr><td><div></div></td></tr></table>"),b=d.find("div"),c=d.find("tr"),c.paddingHeight=function(){return b.height.apply(b,arguments)},c;default:return c=angular.element("<"+a+"></"+a+">"),c.paddingHeight=c.height,c}},c=function(a,b,c){return b[{top:"before",bottom:"after"}[c]](a),{paddingHeight:function(){return a.paddingHeight.apply(a,arguments)},insert:function(b){return a[{top:"after",bottom:"before"}[c]](b)}}},g=c(d(f),e,"top"),b=c(d(f),e,"bottom"),R.$destroy(),k={viewport:h,topPadding:g.paddingHeight,bottomPadding:b.paddingHeight,append:b.insert,prepend:g.insert,bottomDataPos:function(){return O(h)-b.paddingHeight()},topDataPos:function(){return g.paddingHeight()}}}),T=k.viewport,B=1,I=1,p=[],J=[],x=!1,n=!1,G=u.loading||function(){},E=!1,L=function(a,b){var c,d;for(c=d=a;b>=a?b>d:d>b;c=b>=a?++d:--d)p[c].scope.$destroy(),p[c].element.remove();return p.splice(a,b-a)},K=function(){return B=1,I=1,L(0,p.length),k.topPadding(0),k.bottomPadding(0),J=[],x=!1,n=!1,l(!1)},o=function(){return T.scrollTop()+T.height()},S=function(){return T.scrollTop()},P=function(){return!x&&k.bottomDataPos()<o()+q()},s=function(){var b,c,d,e,f,g;for(b=0,e=0,c=f=g=p.length-1;(0>=g?0>=f:f>=0)&&(d=p[c].element.outerHeight(!0),k.bottomDataPos()-b-d>o()+q());c=0>=g?++f:--f)b+=d,e++,x=!1;return e>0?(k.bottomPadding(k.bottomPadding()+b),L(p.length-e,p.length),I-=e,a.log("clipped off bottom "+e+" bottom padding "+k.bottomPadding())):void 0},Q=function(){return!n&&k.topDataPos()>S()-q()},t=function(){var b,c,d,e,f,g;for(e=0,d=0,f=0,g=p.length;g>f&&(b=p[f],c=b.element.outerHeight(!0),k.topDataPos()+e+c<S()-q());f++)e+=c,d++,n=!1;return d>0?(k.topPadding(k.topPadding()+e),L(0,d),B+=d,a.log("clipped off top "+d+" top padding "+k.topPadding())):void 0},w=function(a,b){return E||(E=!0,G(!0)),1===J.push(a)?z(b):void 0},C=function(a,b){var c,d,e;return c=f.$new(),c[F]=b,d=a>B,c.$index=a,d&&c.$index--,e={scope:c},g(c,function(b){return e.element=b,d?a===I?(k.append(b),p.push(e)):(p[a-B].element.after(b),p.splice(a-B+1,0,e)):(k.prepend(b),p.unshift(e))}),{appended:d,wrapper:e}},m=function(a,b){var c;return a?k.bottomPadding(Math.max(0,k.bottomPadding()-b.element.outerHeight(!0))):(c=k.topPadding()-b.element.outerHeight(!0),c>=0?k.topPadding(c):T.scrollTop(T.scrollTop()+b.element.outerHeight(!0)))},l=function(b,c,e){var f;return f=function(){return a.log("top {actual="+k.topDataPos()+" visible from="+S()+" bottom {visible through="+o()+" actual="+k.bottomDataPos()+"}"),P()?w(!0,b):Q()&&w(!1,b),e?e():void 0},c?d(function(){var a,b,d;for(b=0,d=c.length;d>b;b++)a=c[b],m(a.appended,a.wrapper);return f()}):f()},A=function(a,b){return l(a,b,function(){return J.shift(),0===J.length?(E=!1,G(!1)):z(a)})},z=function(b){var c;return c=J[0],c?p.length&&!P()?A(b):u.get(I,r,function(c){var d,e,f,g;if(e=[],0===c.length)x=!0,k.bottomPadding(0),a.log("appended: requested "+r+" records starting from "+I+" recieved: eof");else{for(t(),f=0,g=c.length;g>f;f++)d=c[f],e.push(C(++I,d));a.log("appended: requested "+r+" received "+c.length+" buffer size "+p.length+" first "+B+" next "+I)}return A(b,e)}):p.length&&!Q()?A(b):u.get(B-r,r,function(c){var d,e,f,g;if(e=[],0===c.length)n=!0,k.topPadding(0),a.log("prepended: requested "+r+" records starting from "+(B-r)+" recieved: bof");else{for(s(),d=f=g=c.length-1;0>=g?0>=f:f>=0;d=0>=g?++f:--f)e.unshift(C(--B,c[d]));a.log("prepended: requested "+r+" received "+c.length+" buffer size "+p.length+" first "+B+" next "+I)}return A(b,e)})},M=function(){return c.$$phase||E?void 0:(l(!1),f.$apply())},T.bind("resize",M),N=function(){return c.$$phase||E?void 0:(l(!0),f.$apply())},T.bind("scroll",N),f.$watch(u.revision,function(){return K()}),y=u.scope?u.scope.$new():f.$new(),f.$on("$destroy",function(){return y.$destroy(),T.unbind("resize",M),T.unbind("scroll",N)}),y.$on("update.items",function(a,b,c){var d,e,f,g,h;if(angular.isFunction(b))for(e=function(a){return b(a.scope)},f=0,g=p.length;g>f;f++)d=p[f],e(d);else 0<=(h=b-B-1)&&h<p.length&&(p[b-B-1].scope[F]=c);return null}),y.$on("delete.items",function(a,b){var c,d,e,f,g,h,i,j,k,m,n,o;if(angular.isFunction(b)){for(e=[],h=0,k=p.length;k>h;h++)d=p[h],e.unshift(d);for(g=function(a){return b(a.scope)?(L(e.length-1-c,e.length-c),I--):void 0},c=i=0,m=e.length;m>i;c=++i)f=e[c],g(f)}else 0<=(o=b-B-1)&&o<p.length&&(L(b-B-1,b-B),I--);for(c=j=0,n=p.length;n>j;c=++j)d=p[c],d.scope.$index=B+c;return l(!1)}),y.$on("insert.item",function(a,b,c){var d,e,f,g,h,i,j,k,m,n,o,q;if(e=[],angular.isFunction(b)){for(f=[],i=0,m=p.length;m>i;i++)c=p[i],f.unshift(c);for(h=function(a){var f,g,h,i,j;if(g=b(a.scope)){if(C=function(a,b){return C(a,b),I++},angular.isArray(g)){for(j=[],f=h=0,i=g.length;i>h;f=++h)c=g[f],j.push(e.push(C(d+f,c)));return j}return e.push(C(d,g))}},d=j=0,n=f.length;n>j;d=++j)g=f[d],h(g)}else 0<=(q=b-B-1)&&q<p.length&&(e.push(C(b,c)),I++);for(d=k=0,o=p.length;o>k;d=++k)c=p[d],c.scope.$index=B+d;return l(!1,e)})}}}}]),angular.module("ui.scrollfix",[]).directive("uiScrollfix",["$window",function(a){return{require:"^?uiScrollfixTarget",link:function(b,c,d,e){function f(){var b;if(angular.isDefined(a.pageYOffset))b=a.pageYOffset;else{var e=document.compatMode&&"BackCompat"!==document.compatMode?document.documentElement:document.body;b=e.scrollTop}!c.hasClass("ui-scrollfix")&&b>d.uiScrollfix?c.addClass("ui-scrollfix"):c.hasClass("ui-scrollfix")&&b<d.uiScrollfix&&c.removeClass("ui-scrollfix")}var g=c[0].offsetTop,h=e&&e.$element||angular.element(a);d.uiScrollfix?"string"==typeof d.uiScrollfix&&("-"===d.uiScrollfix.charAt(0)?d.uiScrollfix=g-parseFloat(d.uiScrollfix.substr(1)):"+"===d.uiScrollfix.charAt(0)&&(d.uiScrollfix=g+parseFloat(d.uiScrollfix.substr(1)))):d.uiScrollfix=g,h.on("scroll",f),b.$on("$destroy",function(){h.off("scroll",f)})}}}]).directive("uiScrollfixTarget",[function(){return{controller:["$element",function(a){this.$element=a}]}}]),angular.module("ui.showhide",[]).directive("uiShow",[function(){return function(a,b,c){a.$watch(c.uiShow,function(a){a?b.addClass("ui-show"):b.removeClass("ui-show")})}}]).directive("uiHide",[function(){return function(a,b,c){a.$watch(c.uiHide,function(a){a?b.addClass("ui-hide"):b.removeClass("ui-hide")})}}]).directive("uiToggle",[function(){return function(a,b,c){a.$watch(c.uiToggle,function(a){a?b.removeClass("ui-hide").addClass("ui-show"):b.removeClass("ui-show").addClass("ui-hide")})}}]),angular.module("ui.unique",[]).filter("unique",["$parse",function(a){return function(b,c){if(c===!1)return b;if((c||angular.isUndefined(c))&&angular.isArray(b)){var d=[],e=angular.isString(c)?a(c):function(a){return a},f=function(a){return angular.isObject(a)?e(a):a};angular.forEach(b,function(a){for(var b=!1,c=0;c<d.length;c++)if(angular.equals(f(d[c]),f(a))){b=!0;break}b||d.push(a)}),b=d}return b}}]),angular.module("ui.validate",[]).directive("uiValidate",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(b){return angular.isString(b)?void a.$watch(b,function(){angular.forEach(g,function(a){a(d.$modelValue)})}):angular.isArray(b)?void angular.forEach(b,function(b){a.$watch(b,function(){angular.forEach(g,function(a){a(d.$modelValue)})})}):void(angular.isObject(b)&&angular.forEach(b,function(b,c){angular.isString(b)&&a.$watch(b,function(){g[c](d.$modelValue)}),angular.isArray(b)&&angular.forEach(b,function(b){a.$watch(b,function(){g[c](d.$modelValue)})})}))}var f,g={},h=a.$eval(c.uiValidate);h&&(angular.isString(h)&&(h={validator:h}),angular.forEach(h,function(b,c){f=function(e){var f=a.$eval(b,{$value:e});return angular.isObject(f)&&angular.isFunction(f.then)?(f.then(function(){d.$setValidity(c,!0)},function(){d.$setValidity(c,!1)}),e):f?(d.$setValidity(c,!0),e):(d.$setValidity(c,!1),e)},g[c]=f,d.$formatters.push(f),d.$parsers.push(f)}),c.uiValidateWatch&&e(a.$eval(c.uiValidateWatch)))}}}),angular.module("ui.utils",["ui.event","ui.format","ui.highlight","ui.include","ui.indeterminate","ui.inflector","ui.jq","ui.keypress","ui.mask","ui.reset","ui.route","ui.scrollfix","ui.scroll","ui.scroll.jqlite","ui.showhide","ui.unique","ui.validate"]); \ No newline at end of file diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 41b9d94f479032850f7d5fbb1bed26be3722e7d4..fa2cc9f250b07e57e12bfd5cfc639f7693072706 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.51.3', + return array( 'version' => '5.52.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index 81f222aafef4e497e3d4986b637c531e200d7eea..72db2434d3ed4d4d2a45887d908b6962f515a566 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -51,16 +51,16 @@ "cache/integration-tests": "~0.17.0", "dompdf/dompdf" : "~2", "firebase/php-jwt": ">=3 <6", - "electrolinux/phpquery": "^0.9.6", - "symfony/config": "~3.0 || ~4.4", + "rubobaquero/phpquery": "^0.9.15", + "symfony/config": "~4.4", "symfony/polyfill-iconv": "~1.0", - "symfony/dependency-injection": "~3.0 || ~4.4", - "symfony/event-dispatcher": "~3.0 || ~4.4", - "symfony/filesystem": "~3.0 || ~4.4", - "symfony/process": "~3.0 || ~4.4", + "symfony/dependency-injection": "~4.4", + "symfony/event-dispatcher": "~4.4", + "symfony/filesystem": "~4.4", + "symfony/process": "~4.4", "symfony/var-dumper": "~3.0 || ~4.4 || ~5.1", "psr/log": "~1.0 || ~2.0 || ~3.0", - "symfony/finder": "~3.0 || ~4.4", + "symfony/finder": "~4.4", "tecnickcom/tcpdf" : "6.4.*", "totten/ca-config": "~22.05", "zetacomponents/base": "1.9.*", @@ -93,7 +93,8 @@ "ext-json": "*", "ezyang/htmlpurifier": "^4.13", "phpoffice/phpspreadsheet": "^1.18", - "symfony/polyfill-php73": "^1.23" + "symfony/polyfill-php73": "^1.23", + "html2text/html2text": "^4.3.1" }, "scripts": { "post-install-cmd": [ @@ -162,9 +163,6 @@ "angular-ui-sortable": { "url": "https://github.com/angular-ui/ui-sortable/archive/v0.19.0.zip" }, - "angular-ui-utils": { - "url": "https://github.com/angular-ui/ui-utils/archive/v0.1.1.zip" - }, "angular-unsavedChanges": { "url": "https://github.com/facultymatt/angular-unsavedChanges/archive/v0.1.1.zip", "ignore": [".*", "node_modules", "bower_components", "test", "tests"] @@ -278,8 +276,8 @@ "adrienrn/php-mimetyper": { "Update gitignore to ensure that sites that manage via git don't miss out on the important db.json file": "https://patch-diff.githubusercontent.com/raw/adrienrn/php-mimetyper/pull/15.patch" }, - "electrolinux/phpquery": { - "PHP7.4 Fix for array access using {} instead of []": "https://raw.githubusercontent.com/civicrm/civicrm-core/fe45bdfc4f3e3d3deb27e3d853cdbc7f616620a9/tools/scripts/composer/patches/php74_array_access_fix_phpquery.patch" + "html2text/html2text": { + "Fix deprecation warning in php8.1 on html_entity_decode": "https://raw.githubusercontent.com/civicrm/civicrm-core/e758d20e9f613ca6c4cf652c23d2cd7e5d3af3ce/tools/scripts/composer/html2text_html2_text_php81_deprecation.patch" }, "pear/db": { "Apply CiviCRM Customisations for the pear:db package": "https://raw.githubusercontent.com/civicrm/civicrm-core/2ad420c394/tools/scripts/composer/pear_db_civicrm_changes.patch" diff --git a/civicrm/composer.lock b/civicrm/composer.lock index 6543c19d51851524e3195383422b1d8739fba3ca..e84f413ebebb8145f7434b1c7c84f95d27d25c80 100644 --- a/civicrm/composer.lock +++ b/civicrm/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "859b5a2d1c1f94ccbf049848267f6469", + "content-hash": "9808720dbc97471b1d5cc71fdc6b6897", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -48,16 +48,16 @@ }, { "name": "brick/math", - "version": "0.9.2", + "version": "0.9.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", "shasum": "" }, "require": { @@ -67,7 +67,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" + "vimeo/psalm": "4.9.2" }, "type": "library", "autoload": { @@ -92,15 +92,19 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" + "source": "https://github.com/brick/math/tree/0.9.3" }, "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" } ], - "time": "2021-01-20T22:51:39+00:00" + "time": "2021-08-15T20:50:18+00:00" }, { "name": "brick/money", @@ -501,16 +505,16 @@ }, { "name": "cweagans/composer-patches", - "version": "1.7.0", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/cweagans/composer-patches.git", - "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf" + "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf", - "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e9969cfc0796e6dea9b4e52f77f18e1065212871", + "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871", "shasum": "" }, "require": { @@ -543,9 +547,9 @@ "description": "Provides a way to patch Composer packages.", "support": { "issues": "https://github.com/cweagans/composer-patches/issues", - "source": "https://github.com/cweagans/composer-patches/tree/1.7.0" + "source": "https://github.com/cweagans/composer-patches/tree/1.7.2" }, - "time": "2020-09-30T17:56:20+00:00" + "time": "2022-01-25T19:21:20+00:00" }, { "name": "dflydev/apache-mime-types", @@ -676,49 +680,6 @@ }, "time": "2022-06-21T21:14:57+00:00" }, - { - "name": "electrolinux/phpquery", - "version": "0.9.6", - "source": { - "type": "git", - "url": "https://github.com/electrolinux/phpquery.git", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "phpQuery/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobiasz Cudnik", - "email": "tobiasz.cudnik@gmail.com", - "homepage": "https://github.com/TobiaszCudnik", - "role": "Developer" - }, - { - "name": "didier Belot", - "role": "Packager" - } - ], - "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", - "homepage": "http://code.google.com/p/phpquery/", - "support": { - "source": "https://github.com/electrolinux/phpquery/tree/0.9.6" - }, - "time": "2013-03-21T12:39:33+00:00" - }, { "name": "ezyang/htmlpurifier", "version": "v4.13.0", @@ -1136,6 +1097,47 @@ ], "time": "2022-06-20T21:43:03+00:00" }, + { + "name": "html2text/html2text", + "version": "4.3.1", + "source": { + "type": "git", + "url": "https://github.com/mtibben/html2text.git", + "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtibben/html2text/zipball/61ad68e934066a6f8df29a3d23a6460536d0855c", + "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-mbstring": "For best performance", + "symfony/polyfill-mbstring": "If you can't install ext-mbstring" + }, + "type": "library", + "autoload": { + "psr-4": { + "Html2Text\\": [ + "src/", + "test/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Converts HTML to formatted plain text", + "support": { + "issues": "https://github.com/mtibben/html2text/issues", + "source": "https://github.com/mtibben/html2text/tree/4.3.1" + }, + "time": "2020-04-16T23:44:31+00:00" + }, { "name": "laminas/laminas-escaper", "version": "2.6.1", @@ -2262,20 +2264,21 @@ }, { "name": "pear/mail_mime", - "version": "1.10.9", + "version": "1.10.11", "source": { "type": "git", "url": "https://github.com/pear/Mail_Mime.git", - "reference": "1e7ae4e5258b6c0d385a8e76add567934245d38d" + "reference": "d4fb9ce61201593d0f8c6db629c45e29c3409c14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/1e7ae4e5258b6c0d385a8e76add567934245d38d", - "reference": "1e7ae4e5258b6c0d385a8e76add567934245d38d", + "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/d4fb9ce61201593d0f8c6db629c45e29c3409c14", + "reference": "d4fb9ce61201593d0f8c6db629c45e29c3409c14", "shasum": "" }, "require": { - "pear/pear-core-minimal": "*" + "pear/pear-core-minimal": "*", + "php": ">=5.2.0" }, "type": "library", "autoload": { @@ -2288,7 +2291,7 @@ "./" ], "license": [ - "BSD-3-clause" + "BSD-3-Clause" ], "authors": [ { @@ -2308,7 +2311,7 @@ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime", "source": "https://github.com/pear/Mail_Mime" }, - "time": "2020-06-27T08:35:27+00:00" + "time": "2021-09-05T08:42:45+00:00" }, { "name": "pear/net_smtp", @@ -3052,27 +3055,22 @@ }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -3085,7 +3083,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -3099,9 +3097,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-client", @@ -3408,6 +3406,53 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "rubobaquero/phpquery", + "version": "0.9.15", + "source": { + "type": "git", + "url": "https://github.com/rubobaquero/phpquery.git", + "reference": "d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rubobaquero/phpquery/zipball/d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe", + "reference": "d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "phpQuery/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "didier Belot", + "homepage": "https://github.com/electrolinux/phpquery", + "role": "Packager, maintainer" + }, + { + "name": "Tobiasz Cudnik", + "email": "tobiasz.cudnik@gmail.com", + "homepage": "https://github.com/TobiaszCudnik", + "role": "Developer" + } + ], + "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", + "homepage": "http://code.google.com/p/phpquery/", + "support": { + "source": "https://github.com/rubobaquero/phpquery/tree/0.9.15" + }, + "time": "2022-05-03T12:31:11+00:00" + }, { "name": "sabberworm/php-css-parser", "version": "8.4.0", @@ -3529,32 +3574,34 @@ }, { "name": "symfony/config", - "version": "v3.4.47", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" + "reference": "83cdafd1bd3370de23e3dc2ed01026908863be81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "url": "https://api.github.com/repos/symfony/config/zipball/83cdafd1bd3370de23e3dc2ed01026908863be81", + "reference": "83cdafd1bd3370de23e3dc2ed01026908863be81", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3582,10 +3629,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v3.4.47" + "source": "https://github.com/symfony/config/tree/v4.4.42" }, "funding": [ { @@ -3601,39 +3648,42 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-17T07:10:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.47", + "version": "v4.4.43", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" + "reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd", + "reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": ">=7.1.3", + "psr/container": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3|>=5.0", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "symfony/yaml": "<4.4.26" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/yaml": "^4.4.26|^5.0" }, "suggest": { "symfony/config": "", @@ -3665,10 +3715,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v3.4.47" + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.43" }, "funding": [ { @@ -3684,35 +3734,110 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-06-22T15:01:38+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "reference": "708e761740c16b02c86e3f0c932018a06b895d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/708e761740c16b02c86e3f0c932018a06b895d40", + "reference": "708e761740c16b02c86e3f0c932018a06b895d40", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3741,10 +3866,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.42" }, "funding": [ { @@ -3760,25 +3885,105 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-05T15:33:49+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:41:36+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.47", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3803,10 +4008,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + "source": "https://github.com/symfony/filesystem/tree/v4.4.42" }, "funding": [ { @@ -3822,24 +4027,25 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-05-20T08:49:14+00:00" }, { "name": "symfony/finder", - "version": "v3.4.47", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "url": "https://api.github.com/repos/symfony/finder/zipball/40790bdf293b462798882ef6da72bb49a4a6633a", + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3864,10 +4070,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v3.4.47" + "source": "https://github.com/symfony/finder/tree/v4.4.41" }, "funding": [ { @@ -3883,24 +4089,27 @@ "type": "tidelift" } ], - "time": "2020-11-16T17:02:08+00:00" + "time": "2022-04-14T15:36:10+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" @@ -3908,7 +4117,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3942,7 +4155,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.17.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3958,7 +4171,7 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:14:59+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", @@ -4445,22 +4658,185 @@ ], "time": "2021-06-05T21:20:04+00:00" }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, { "name": "symfony/process", - "version": "v3.4.47", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", + "url": "https://api.github.com/repos/symfony/process/zipball/9eedd60225506d56e42210a70c21bb80ca8456ce", + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4485,10 +4861,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v3.4.47" + "source": "https://github.com/symfony/process/tree/v4.4.41" }, "funding": [ { @@ -4504,7 +4880,90 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2022-04-04T10:19:07+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/var-dumper", diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index 58fb66bf88354af5865426cdf6cc912f24f4b9b7..d5741c4ebbf79ee945728cc2750079391275d69a 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -3141,6 +3141,7 @@ span.crm-select-item-color { } .crm-container.ui-dialog { + background-color: #fff; box-shadow: 0 0 10px rgba(0, 0, 0, 0.6); } .crm-container.ui-dialog.ui-resizable:before { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js index 18283b58a5d9f7116977eb2a8485f5bc78ee768e..e99e02c58ce8be88d4718e71de7deaf0f01bf741 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js @@ -95,6 +95,7 @@ editor.afform.is_dashlet = false; editor.afform.title += ' ' + ts('(copy)'); } + editor.afform.icon = editor.afform.icon || 'fa-list-alt'; $scope.canvasTab = 'layout'; $scope.layoutHtml = ''; $scope.entities = {}; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html index cb49a6f4fbf286295fb0bcd9dc30409e5edcfdc6..ca85a02cb13460507b20c273f2309922c6eeeccf 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html @@ -71,6 +71,9 @@ <option value="block">{{:: ts('As Block') }}</option> <option value="tab">{{:: ts('As Tab') }}</option> </select> + <div class="form-group" ng-show="editor.afform.contact_summary === 'tab'"> + <input required ng-model="editor.afform.icon" crm-ui-icon-picker class="form-control"> + </div> </div> <p class="help-block">{{:: ts('Placement can be configured using the Contact Layout Editor.') }}</p> </div> diff --git a/civicrm/ext/afform/admin/info.xml b/civicrm/ext/afform/admin/info.xml index 85452b46d68d13059082b813e889d1819f986aa8..fc4bff2d4f23fdfc25a6ea259ddedbe6f80afc9f 100644 --- a/civicrm/ext/afform/admin/info.xml +++ b/civicrm/ext/afform/admin/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>beta</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <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> diff --git a/civicrm/ext/afform/core/Civi/Api4/Afform.php b/civicrm/ext/afform/core/Civi/Api4/Afform.php index 3c48e9ef0545396a5ff3429478188900b4e8a988..15d2aea8d8f2a06943dfd033b4ef1ea4bf328a31 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Afform.php +++ b/civicrm/ext/afform/core/Civi/Api4/Afform.php @@ -165,6 +165,10 @@ class Afform extends Generic\AbstractEntity { 'tab' => ts('Contact Summary Tab'), ], ], + [ + 'name' => 'icon', + 'description' => 'Icon shown in the contact summary tab', + ], [ 'name' => 'server_route', ], diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index 898dd8c08e496f0ba16080678ab287fc18368efa..19f86de1ad57c929ac686fe759cb71cbd619869c 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -178,25 +178,25 @@ function afform_civicrm_tabset($tabsetName, &$tabs, $context) { if ($tabsetName !== 'civicrm/contact/view') { return; } - $scanner = \Civi::service('afform_scanner'); + $afforms = Civi\Api4\Afform::get(FALSE) + ->addWhere('contact_summary', '=', 'tab') + ->addSelect('name', 'title', 'icon', 'module_name', 'directive_name') + ->execute(); $weight = 111; - foreach ($scanner->getMetas() as $afform) { - if (!empty($afform['contact_summary']) && $afform['contact_summary'] === 'tab') { - $module = _afform_angular_module_name($afform['name']); - $tabs[] = [ - 'id' => $afform['name'], - 'title' => $afform['title'], - 'weight' => $weight++, - 'icon' => 'crm-i fa-list-alt', - 'is_active' => TRUE, - 'template' => 'afform/contactSummary/AfformTab.tpl', - 'module' => $module, - 'directive' => _afform_angular_module_name($afform['name'], 'dash'), - ]; - // If this is the real contact summary page (and not a callback from ContactLayoutEditor), load module. - if (empty($context['caller'])) { - Civi::service('angularjs.loader')->addModules($module); - } + foreach ($afforms as $afform) { + $tabs[] = [ + 'id' => $afform['name'], + 'title' => $afform['title'], + 'weight' => $weight++, + 'icon' => 'crm-i ' . ($afform['icon'] ?: 'fa-list-alt'), + 'is_active' => TRUE, + 'template' => 'afform/contactSummary/AfformTab.tpl', + 'module' => $afform['module_name'], + 'directive' => $afform['directive_name'], + ]; + // If this is the real contact summary page (and not a callback from ContactLayoutEditor), load module. + if (empty($context['caller'])) { + Civi::service('angularjs.loader')->addModules($afform['module_name']); } } } diff --git a/civicrm/ext/afform/core/ang/af/afForm.component.js b/civicrm/ext/afform/core/ang/af/afForm.component.js index 4a2f44ee59e8dd2118f47b17db80047025cd2b4a..7abbf65a59d11902f06b7e740f1588cb6affaa13 100644 --- a/civicrm/ext/afform/core/ang/af/afForm.component.js +++ b/civicrm/ext/afform/core/ang/af/afForm.component.js @@ -68,14 +68,22 @@ // Called after form is submitted and files are uploaded function postProcess() { - var metaData = ctrl.getFormMeta(); + var metaData = ctrl.getFormMeta(), + dialog = $element.closest('.ui-dialog-content'); $element.trigger('crmFormSuccess', { afform: metaData, data: data }); - if (metaData.redirect) { + status.resolve(); + $element.unblock(); + + if (dialog.length) { + dialog.dialog('close'); + } + + else if (metaData.redirect) { var url = metaData.redirect; if (url.indexOf('civicrm/') === 0) { url = CRM.url(url); @@ -84,8 +92,6 @@ } $window.location.href = url; } - status.resolve(); - $element.unblock(); } this.submit = function() { diff --git a/civicrm/ext/afform/core/ang/afCore.js b/civicrm/ext/afform/core/ang/afCore.js index ef64b2ee9db7adec81a528097df0b7d0ce4e7cac..a1dc17aa2284a70f76274613c83c7eaedd121648 100644 --- a/civicrm/ext/afform/core/ang/afCore.js +++ b/civicrm/ext/afform/core/ang/afCore.js @@ -18,9 +18,22 @@ $scope.crmUrl = CRM.url; // Afforms do not use routing, but some forms get input from search params - $scope.$watch(function() {return $location.search();}, function(params) { - $scope.routeParams = params; - }); + var dialog = $el.closest('.ui-dialog-content'); + if (!dialog.length) { + // Full-screen mode + $scope.$watch(function() {return $location.search();}, function(params) { + $scope.routeParams = params; + }); + } else { + // Use urlHash embedded in popup dialog + $scope.routeParams = {}; + if (dialog.data('urlHash')) { + var searchParams = new URLSearchParams(dialog.data('urlHash')); + searchParams.forEach(function(value, key) { + $scope.routeParams[key] = value; + }); + } + } $scope.$parent.afformTitle = meta.title; diff --git a/civicrm/ext/afform/core/info.xml b/civicrm/ext/afform/core/info.xml index e69991dccbb7b1c57458878cfc15353f5f1ce93a..01077bc24079951b85cd9f81aa0cdfa08ea02a3f 100644 --- a/civicrm/ext/afform/core/info.xml +++ b/civicrm/ext/afform/core/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>beta</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <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> diff --git a/civicrm/ext/afform/html/info.xml b/civicrm/ext/afform/html/info.xml index 8d4c1786d42ce486e04d4c3c6c0eb92de74e51ed..ea554fce85c9524bd0f72cbce334841e4f21c097 100644 --- a/civicrm/ext/afform/html/info.xml +++ b/civicrm/ext/afform/html/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>alpha</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/afform/mock/info.xml b/civicrm/ext/afform/mock/info.xml index c76dcf3d626adb06bd6c2794af567ac139c0fa87..4a77e8a8cbcbd61e8e251ad638e142b4d728ed39 100644 --- a/civicrm/ext/afform/mock/info.xml +++ b/civicrm/ext/afform/mock/info.xml @@ -12,13 +12,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>alpha</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/authx/info.xml b/civicrm/ext/authx/info.xml index 4a6d62a4ddf995e7c265a2b6824c12e672b0bf0a..8b7952847953f4ed594788bdbc47e9157733aed0 100644 --- a/civicrm/ext/authx/info.xml +++ b/civicrm/ext/authx/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-02-11</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>AuthX enables remote applications to connect to CiviCRM. Use it to enable and disable different forms of authentication (such as username-password, API key, and/or JWT).</comments> <classloader> diff --git a/civicrm/ext/civicrm_admin_ui/info.xml b/civicrm/ext/civicrm_admin_ui/info.xml index 2ee20029678c2beed6e9df0b98b81cd43e627f7b..fe92248e3322b3640a84f4a677a2696679051a45 100644 --- a/civicrm/ext/civicrm_admin_ui/info.xml +++ b/civicrm/ext/civicrm_admin_ui/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2022-01-02</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>alpha</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <requires> <ext>org.civicrm.search_kit</ext> diff --git a/civicrm/ext/civigrant/afformEntities/Grant.php b/civicrm/ext/civigrant/afformEntities/Grant.php new file mode 100644 index 0000000000000000000000000000000000000000..65eb6ed63d73299d26ed302b516fe38ec97653b3 --- /dev/null +++ b/civicrm/ext/civigrant/afformEntities/Grant.php @@ -0,0 +1,5 @@ +<?php +return [ + 'defaults' => "{'url-autofill': '1'}", + 'icon' => 'fa-money', +]; diff --git a/civicrm/ext/civigrant/ang/afsearchGrants.aff.json b/civicrm/ext/civigrant/ang/afsearchGrants.aff.json index 093d18d9f91bd2cbcc2c31e0c70dece46fd63f38..44b9ee3dcdd2b3219bcea1c312acbffe4d71266f 100644 --- a/civicrm/ext/civigrant/ang/afsearchGrants.aff.json +++ b/civicrm/ext/civigrant/ang/afsearchGrants.aff.json @@ -2,6 +2,7 @@ "type": "search", "title": "Grants", "contact_summary": "tab", + "icon": "fa-money", "server_route": "", "permission": "access CiviGrant" } diff --git a/civicrm/ext/civigrant/info.xml b/civicrm/ext/civigrant/info.xml index a575a314caa76a3a6782562c1942342e08993162..e1d4fb68e2fba708c727de4805d091ee230da635 100644 --- a/civicrm/ext/civigrant/info.xml +++ b/civicrm/ext/civigrant/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-11-11</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>CiviGrant was originally a core component before migrating to an extension</comments> <requires> @@ -31,6 +31,7 @@ <mixins> <mixin>menu-xml@1.0.0</mixin> <mixin>mgd-php@1.1.0</mixin> + <mixin>afform-entity-php@1.0.0</mixin> </mixins> <civix> <namespace>CRM/Grant</namespace> diff --git a/civicrm/ext/ckeditor4/info.xml b/civicrm/ext/ckeditor4/info.xml index b702803d1181a2c2f7404003d741e95b63df3cd3..3c020d9734e83ece74e1cf1afa0811502adc4e16 100644 --- a/civicrm/ext/ckeditor4/info.xml +++ b/civicrm/ext/ckeditor4/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">https://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-05-23</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This is the version of CKEditor that originally shipped with CiviCRM core</comments> <classloader> diff --git a/civicrm/ext/contributioncancelactions/info.xml b/civicrm/ext/contributioncancelactions/info.xml index e3ea198b2b4ea67fd25fe9d81a778456a35d9f08..abb8e4caf2454eb446cbc7cd71feaa0baeff4cd4 100644 --- a/civicrm/ext/contributioncancelactions/info.xml +++ b/civicrm/ext/contributioncancelactions/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-12</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This code has been moved from core to a separate extension in 5.32. Note that if you disable it failed or cancelled contributions will not cause related memberships and participant records to be updated</comments> <classloader> diff --git a/civicrm/ext/eventcart/CRM/Event/Cart/BAO/EventInCart.php b/civicrm/ext/eventcart/CRM/Event/Cart/BAO/EventInCart.php index 97cc92d256df8cc320a2378535b7afcf1b9dfad7..b06844e7c590283c26e1ee20d6a331a7ec92ca15 100644 --- a/civicrm/ext/eventcart/CRM/Event/Cart/BAO/EventInCart.php +++ b/civicrm/ext/eventcart/CRM/Event/Cart/BAO/EventInCart.php @@ -222,7 +222,7 @@ class CRM_Event_Cart_BAO_EventInCart extends CRM_Event_Cart_DAO_EventInCart impl * * @return bool */ - public function offsetExists($offset) { + public function offsetExists($offset): bool { return array_key_exists(array_merge($this->fields(), ['main_conference_event_id']), $offset); } @@ -231,6 +231,7 @@ class CRM_Event_Cart_BAO_EventInCart extends CRM_Event_Cart_DAO_EventInCart impl * * @return int */ + #[\ReturnTypeWillChange] public function offsetGet($offset) { if ($offset == 'event') { return $this->event->toArray(); @@ -249,13 +250,13 @@ class CRM_Event_Cart_BAO_EventInCart extends CRM_Event_Cart_DAO_EventInCart impl * @param mixed $offset * @param mixed $value */ - public function offsetSet($offset, $value) { + public function offsetSet($offset, $value): void { } /** * @param mixed $offset */ - public function offsetUnset($offset) { + public function offsetUnset($offset): void { } /** diff --git a/civicrm/ext/eventcart/info.xml b/civicrm/ext/eventcart/info.xml index dc6b9d405bfeb1fa40c5f7790a47cf26f380c7c7..97534f767be2b0cdca303714e8d568a2e350a278 100644 --- a/civicrm/ext/eventcart/info.xml +++ b/civicrm/ext/eventcart/info.xml @@ -13,13 +13,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-03</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> diff --git a/civicrm/ext/ewaysingle/info.xml b/civicrm/ext/ewaysingle/info.xml index 05f142cfae178e67388f9dce86b24358ce17955c..67a95e8a7fdbed05d6b9dda82360720ef81136f2 100644 --- a/civicrm/ext/ewaysingle/info.xml +++ b/civicrm/ext/ewaysingle/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-07</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This is an extension to contain the eWAY Single Currency Payment Processor</comments> <classloader> diff --git a/civicrm/ext/financialacls/info.xml b/civicrm/ext/financialacls/info.xml index dbcb83c090c3d8b44dc015c4aca2301ceab3d2a1..8c3a7e5198d3432aeb88b0c1d8abf6f397c12523 100644 --- a/civicrm/ext/financialacls/info.xml +++ b/civicrm/ext/financialacls/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-27</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <tags> <tag>mgmt:hidden</tag> diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml index d2397af67c79c90ac5acbc37d88859a573c81a82..15f002475da03fbd2da11db5a6d8acf4085fb04a 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.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <comments> FlexMailer is an email delivery engine which replaces the internal guts @@ -23,7 +23,7 @@ to provide richer email features. </comments> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <classloader> <psr4 prefix="Civi\FlexMailer\" path="src"/> diff --git a/civicrm/ext/greenwich/info.xml b/civicrm/ext/greenwich/info.xml index 77803375c0359149cd002dfa9dea7e78f6c8e3a7..d147e402a4bcb9143d8df8c2ba31a813e23dfa05 100644 --- a/civicrm/ext/greenwich/info.xml +++ b/civicrm/ext/greenwich/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-07-21</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> diff --git a/civicrm/ext/legacycustomsearches/info.xml b/civicrm/ext/legacycustomsearches/info.xml index 1960751f72e14a0719b13f79d0a3033b6e0e56c8..005cbdd6447ad95882b794e4d854668b97e50ec1 100644 --- a/civicrm/ext/legacycustomsearches/info.xml +++ b/civicrm/ext/legacycustomsearches/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-07-25</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <tags> <tag>mgmt:hidden</tag> </tags> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This is hidden on install to give extensions that require it time to add it to their requires and to allow us to get it out of GroupContact load</comments> <classloader> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js index d6f955271d5727c50ed0e458ae1f869ad99fc8ce..6e01a76a7a4dbbda4b338035bd55521134712da7 100644 --- a/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js @@ -251,7 +251,8 @@ formatName: 'msg_html', formats: [ {id: 0, name: 'msg_html', label: ts('HTML')}, - {id: 1, name: 'msg_text', label: ts('Text')} + {id: 1, name: 'msg_html_raw', label: ts('HTML (Raw)')}, + {id: 2, name: 'msg_text', label: ts('Text')} ], revisionName: $ctrl.tab, revisions: _.reduce(revisionTypes, function(acc, revType){ diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html index 1c15b012420e8ca51c9e12c9ef9e7068035b6d90..74c9f2b2265377990271808ddc139de408caa6dd 100644 --- a/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html @@ -91,6 +91,16 @@ </div> </div> + <div class="form-group" ng-if="!$ctrl.preview.loading && model.formats[$ctrl.formatId].name === 'msg_html_raw'"> + <div class="jumbotron well col-sm-12"> + <!-- <textarea ng-model="$ctrl.preview.html"></textarea> --> + <div ng-model="$ctrl.preview.html" + ng-disabled="true" + crm-monaco="$ctrl.monacoOptions({language: 'html', crmHeightPct: 0.5})" + ></div> + </div> + </div> + </div> </div> diff --git a/civicrm/ext/message_admin/info.xml b/civicrm/ext/message_admin/info.xml index ab091f2fe13d3075459dcf415985e4c410d7ace5..bee2dfa268c94f72e4c5fe790420e4c4f476826c 100644 --- a/civicrm/ext/message_admin/info.xml +++ b/civicrm/ext/message_admin/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-06-12</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>alpha</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/oauth-client/info.xml b/civicrm/ext/oauth-client/info.xml index 507e5c3f90cf38d7c3c30edc21a897f02e77651d..4588367c2b9603a4b69441cfe4158c8627ecf6ec 100644 --- a/civicrm/ext/oauth-client/info.xml +++ b/civicrm/ext/oauth-client/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-23</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <requires> <ext version="~4.5">org.civicrm.afform</ext> diff --git a/civicrm/ext/payflowpro/info.xml b/civicrm/ext/payflowpro/info.xml index 64a5aeb17e3e3fa9fae7d7c6b1920fdf9854da71..105f400379cf7eaaf309ced5d9f859cb9a85f24e 100644 --- a/civicrm/ext/payflowpro/info.xml +++ b/civicrm/ext/payflowpro/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-13</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This extension is extraction of the original Core Payflow Pro Payment Processor</comments> <classloader> diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml index 8f480e5848bb11822ec488e5dac95292654e7ef5..84434821bc1549eb7b10eb7ab44e98cf8a0e2eb3 100644 --- a/civicrm/ext/recaptcha/info.xml +++ b/civicrm/ext/recaptcha/info.xml @@ -13,13 +13,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-03</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> 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 ade9286e2609a10ff8b117cd324493ce585afbd7..157bd2f90087896b6e384ad849baadbef0007156 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php @@ -27,6 +27,7 @@ use Civi\Api4\Utils\FormattingUtil; abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { use SavedSearchInspectorTrait; + use ArrayQueryActionTrait; /** * Either the name of the display or an array containing the display definition (for preview mode) @@ -303,7 +304,7 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $cssClass = $clause[0] ?? ''; if ($cssClass) { $condition = $this->getRuleCondition(array_slice($clause, 1)); - if (is_null($condition[0]) || (ArrayQueryActionTrait::filterCompare($data, $condition))) { + if (is_null($condition[0]) || (self::filterCompare($data, $condition))) { $classes[] = $cssClass; } } @@ -327,7 +328,7 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { } if ($iconClass) { $condition = $this->getRuleCondition($icon['if'] ?? []); - if (!is_null($condition[0]) && !(ArrayQueryActionTrait::filterCompare($data, $condition))) { + if (!is_null($condition[0]) && !(self::filterCompare($data, $condition))) { continue; } $result[] = ['class' => $iconClass, 'side' => $icon['side'] ?? 'left']; @@ -471,7 +472,7 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { } return TRUE; } - return ArrayQueryActionTrait::filterCompare($data, $item['condition']); + return self::filterCompare($data, $item['condition']); } /** diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.component.js index d8a1e5eb69e725c1bb4a301aafee17c869514e9c..6a7d439f9e90d9cd9c78abb1fed518e8e0afc899 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.component.js @@ -22,12 +22,6 @@ }; }; - function initWidgets() { - CRM.loadScript(CRM.config.resourceBase + 'js/jquery/jquery.crmIconPicker.js').then(function() { - $('.crm-search-admin-field-icon > input.crm-icon-picker[ng-model]', $element).crmIconPicker(); - }); - } - this.$onInit = function() { $element.on('hidden.bs.dropdown', function() { $timeout(function() { @@ -51,7 +45,6 @@ } ctrl.iconFields = _.transform(allFields, getIconFields, []); ctrl.iconFieldMap = _.indexBy(ctrl.iconFields, 'id'); - $timeout(initWidgets); }; this.onSelectField = function(clause) { @@ -72,7 +65,6 @@ searchMeta.pickIcon().then(function(icon) { if (icon) { ctrl.item.icons.push({icon: icon, side: 'left', if: []}); - $timeout(initWidgets); } }); } @@ -85,7 +77,6 @@ item.icon = icon; delete item.field; item.if = item.if || []; - $timeout(initWidgets); } }); }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.html index 98d7676884c714dee607dadaa26716699fdefa47..dd698a81fcbc3ea6d4d6a68968fe59838e31638d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchAdminIcons.html @@ -17,7 +17,7 @@ </div> </div> <div class="form-group crm-search-admin-field-icon" ng-if="icon.icon"> - <input required ng-model="icon.icon" class="form-control crm-icon-picker"> + <input required ng-model="icon.icon" crm-ui-icon-picker class="form-control crm-icon-picker"> </div> <select class="form-control" ng-model="icon.side" title="{{:: ts('Show icon on left or right side of the field') }}"> <option value="left">{{:: ts('Align left') }}</option> diff --git a/civicrm/ext/search_kit/info.xml b/civicrm/ext/search_kit/info.xml index d95b7b4161dba629406e2ec9218ae1f7ad169dae..5cf4a1034d0b3ebd8649bb1104c9801df81bce41 100644 --- a/civicrm/ext/search_kit/info.xml +++ b/civicrm/ext/search_kit/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-01-06</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <comments>This extension is still in beta. Click on the chat link above to discuss development, report problems or ask questions.</comments> <classloader> diff --git a/civicrm/ext/sequentialcreditnotes/info.xml b/civicrm/ext/sequentialcreditnotes/info.xml index eda991ef9f716dc00639c8c9d8afa67fe74ae9d2..27b70955b1cc19dcde357a425e390347dbcb6a13 100644 --- a/civicrm/ext/sequentialcreditnotes/info.xml +++ b/civicrm/ext/sequentialcreditnotes/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-28</releaseDate> - <version>5.51.3</version> + <version>5.52.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.51</ver> + <ver>5.52</ver> </compatibility> <mixins> <mixin>setting-php@1.0.0</mixin> diff --git a/civicrm/js/angular-crmResource/all.js b/civicrm/js/angular-crmResource/all.js index 356a582407b997921f773ae65f5dab5fda9b8574..bad03ba486ad68ea1cf1150b19935cda51c6238a 100644 --- a/civicrm/js/angular-crmResource/all.js +++ b/civicrm/js/angular-crmResource/all.js @@ -5,14 +5,13 @@ angular.module('crmResource').factory('crmResource', function($q, $http) { var deferreds = {}; // null|object; deferreds[url][idx] = Deferred; - var templates = null; // null|object; templates[url] = HTML; var notify = function notify() { var oldDfrds = deferreds; deferreds = null; angular.forEach(oldDfrds, function(dfrs, url) { - if (templates[url]) { + if (CRM.angular.templates[url]) { angular.forEach(dfrs, function(dfr) { dfr.resolve({ status: 200, @@ -20,7 +19,7 @@ var headers = {'Content-type': 'text/html'}; return name ? headers[name] : headers; }, - data: templates[url] + data: CRM.angular.templates[url] }); }); } @@ -35,10 +34,10 @@ var moduleUrl = CRM.angular.bundleUrl; $http.get(moduleUrl) .then(function httpSuccess(response) { - templates = []; - angular.forEach(response.data, function(module) { + CRM.angular.templates = CRM.angular.templates || {}; + angular.forEach(response.data, function (module) { if (module.partials) { - angular.extend(templates, module.partials); + angular.extend(CRM.angular.templates, module.partials); } if (module.strings) { CRM.addStrings(module.domain, module.strings); @@ -46,15 +45,14 @@ }); notify(); }, function httpError() { - templates = []; notify(); }); return { // @return string|Promise<string> getUrl: function getUrl(url) { - if (templates !== null) { - return templates[url]; + if (CRM.angular.templates && CRM.angular.templates[url]) { + return CRM.angular.templates[url]; } else { var deferred = $q.defer(); diff --git a/civicrm/js/crm.ajax.js b/civicrm/js/crm.ajax.js index 57ed34f9932a7d2f83a7c1573c10d20052dd7db5..82a8025a7942191cb0e322a29c506bb4eaf51bc9 100644 --- a/civicrm/js/crm.ajax.js +++ b/civicrm/js/crm.ajax.js @@ -273,6 +273,10 @@ } else { url = url.replace(/snippet=[^&]*/, 'snippet=' + snippetType); } + // See Civi\Angular\AngularLoader + if (snippetType === 'json' && CRM.angular) { + url += '&crmAngularModules=' + CRM.angular.modules.join(); + } } return url; }, @@ -299,8 +303,10 @@ }); }, refresh: function() { - var that = this; - var url = this._formatUrl(this.options.url, 'json'); + var that = this, + hash = this.options.url.split('#')[1]; + url = this._formatUrl(this.options.url, 'json'); + $(this.element).data('urlHash', hash); if (this.options.crmForm) $('form', this.element).ajaxFormUnbind(); if (this.options.block) this.element.block(); this._ajax(url).then(function(data) { diff --git a/civicrm/packages/Smarty/Smarty_Compiler.class.php b/civicrm/packages/Smarty/Smarty_Compiler.class.php index 30bf87859158a6334e0affed7350dd9305476393..6d186a40c515642a0cb0b631a8923b8ffb7919ef 100644 --- a/civicrm/packages/Smarty/Smarty_Compiler.class.php +++ b/civicrm/packages/Smarty/Smarty_Compiler.class.php @@ -392,7 +392,7 @@ class Smarty_Compiler extends Smarty { } // put header at the top of the compiled template - $template_header = "<?php /* Smarty version ".$this->_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $template_header = "<?php /* Smarty version ".$this->_version.", created on ". date("Y-m-d H:i:s")."\n"; $template_header .= " compiled from ".strtr(urlencode($resource_name), array('%2F'=>'/', '%3A'=>':'))." */ ?>\n"; /* Emit code to load needed plugins. */ @@ -443,7 +443,7 @@ class Smarty_Compiler extends Smarty { $tag_command = $match[1]; $tag_modifier = isset($match[2]) ? $match[2] : null; - $tag_args = isset($match[3]) ? $match[3] : null; + $tag_args = $match[3] ?? ''; if (preg_match('~^' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$~', $tag_command)) { /* tag name is a variable or object */ diff --git a/civicrm/packages/Smarty/internals/core.write_compiled_include.php b/civicrm/packages/Smarty/internals/core.write_compiled_include.php index c14adb5f42a8e5db92914dbefcbbfdea9d29edde..1d56837043082a2e665f7d22d5b1b88aa1ca5e39 100644 --- a/civicrm/packages/Smarty/internals/core.write_compiled_include.php +++ b/civicrm/packages/Smarty/internals/core.write_compiled_include.php @@ -25,7 +25,7 @@ function smarty_core_write_compiled_include($params, &$smarty) if (count($_match_source)==0) return; // convert the matched php-code to functions - $_include_compiled = "<?php /* Smarty version ".$smarty->_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; + $_include_compiled = "<?php /* Smarty version ".$smarty->_version.", created on ". date("Y-m-d H:i:s")."\n"; $_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n"; $_compile_path = $params['include_file_path']; diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 1bce0d449b84d37ea1dd1473c06329beda41f971..c6592c451d8a4a2e4807f4bb1a46c4fbce4f3320 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,39 +15,22 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress -## CiviCRM 5.51.3 +## CiviCRM 5.51.0 Released August 3, 2022 -- **[Synopsis](release-notes/5.51.3.md#synopsis)** -- **[Bugs resolved](release-notes/5.51.3.md#bugs)** -- **[Credits](release-notes/5.51.3.md#credits)** -- **[Feedback](release-notes/5.51.3.md#feedback)** - -## CiviCRM 5.51.2 - -Released August 2, 2022 - -- **[Synopsis](release-notes/5.51.2.md#synopsis)** -- **[Bugs resolved](release-notes/5.51.2.md#bugs)** -- **[Credits](release-notes/5.51.2.md#credits)** -- **[Feedback](release-notes/5.51.2.md#feedback)** - -## CiviCRM 5.51.1 - -Released July 11, 2022 - -- **[Synopsis](release-notes/5.51.1.md#synopsis)** -- **[Bugs resolved](release-notes/5.51.1.md#bugs)** -- **[Credits](release-notes/5.51.1.md#credits)** -- **[Feedback](release-notes/5.51.1.md#feedback)** +- **[Synopsis](release-notes/5.52.0.md#synopsis)** +- **[Features](release-notes/5.52.0.md#features)** +- **[Bugs resolved](release-notes/5.52.0.md#bugs)** +- **[Miscellany](release-notes/5.52.0.md#misc)** +- **[Credits](release-notes/5.52.0.md#credits)** +- **[Feedback](release-notes/5.52.0.md#feedback)** ## CiviCRM 5.51.0 Released July 6, 2022 - **[Synopsis](release-notes/5.51.0.md#synopsis)** -- **[Security advisories](release-notes/5.51.0.md#security)** - **[Features](release-notes/5.51.0.md#features)** - **[Bugs resolved](release-notes/5.51.0.md#bugs)** - **[Miscellany](release-notes/5.51.0.md#misc)** diff --git a/civicrm/release-notes/5.51.0.md b/civicrm/release-notes/5.51.0.md index 6d533b03c3810021ca99081b7f03681163e60755..8a6e850286bd927e8942d0ff85285d301a56075b 100644 --- a/civicrm/release-notes/5.51.0.md +++ b/civicrm/release-notes/5.51.0.md @@ -3,7 +3,6 @@ Released July 6, 2022 - **[Synopsis](#synopsis)** -- **[Security advisories](#security)** - **[Features](#features)** - **[Bugs resolved](#bugs)** - **[Miscellany](#misc)** @@ -1118,3 +1117,9 @@ Solutions - Alan Dixon; CiviCoop - Jaap Jansma; Coop SymbioTIC - Samuel Vanhove; DevApp - Adam Kwiatkowski; Francesc Bassas i Bullich; Fuzion - Peter Davis; Greenleaf Advancement - Guy Iaccarino; Humanists UK - Andrew West; jaomalley; Jens Schuppe; Semper IT - Karin Gerritsen; 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/release-notes/5.51.1.md b/civicrm/release-notes/5.51.1.md deleted file mode 100644 index eca6cf87c0661014924610d07a140b4aad4629ce..0000000000000000000000000000000000000000 --- a/civicrm/release-notes/5.51.1.md +++ /dev/null @@ -1,39 +0,0 @@ -# CiviCRM 5.51.1 - -Released July 11, 2022 - -- **[Synopsis](#synopsis)** -- **[Bugs resolved](#bugs)** -- **[Credits](#credits)** -- **[Feedback](#feedback)** - -## <a name="synopsis"></a>Synopsis - -| *Does this version...?* | | -| --------------------------------------------------------------- | -------- | -| Change the database schema? | no | -| Alter the API? | no | -| Require attention to configuration options? | no | -| Fix problems installing or upgrading to a previous version? | no | -| Introduce features? | no | -| **Fix bugs?** | **yes** | - -## <a name="bugs"></a>Bugs resolved - -* **_CiviContribute_: Contacts with `access CiviContribute` can no longer view contributions ([dev/core#3725](https://lab.civicrm.org/dev/core/-/issues/3725): [#23965](https://github.com/civicrm/civicrm-core/pull/23965))** -* **_Importer_: Fails when handling "Note" field ([dev/core#3726](https://lab.civicrm.org/dev/core/-/issues/3726): [#23968](https://github.com/civicrm/civicrm-core/pull/23968))** -* **_PHPUnit 8.x_: Fix compatibility with current PHPUnix 8.x. Restore test matrix. ([#23988](https://github.com/civicrm/civicrm-core/pull/23988))** - -## <a name="credits"></a>Credits - -This release was developed by the following authors and reviewers: - -Wikimedia Foundation - Eileen McNaughton; Oxfam Germany - Thomas Schüttler; Megaphone -Technology Consulting - Jon Goldberg; MC3 - Graham Mitchell; JMA Consulting - Seamus Lee; -Dave D; CiviCRM - Tim Otten - -## <a name="feedback"></a>Feedback - -These release notes are edited by Tim Otten and Andie Hunt. If you'd like to -provide feedback on them, please login to https://chat.civicrm.org/civicrm and -contact `@agh1`. diff --git a/civicrm/release-notes/5.51.2.md b/civicrm/release-notes/5.51.2.md deleted file mode 100644 index ed28aedf2e3b6ec2a41defc5985750974ee1c1be..0000000000000000000000000000000000000000 --- a/civicrm/release-notes/5.51.2.md +++ /dev/null @@ -1,42 +0,0 @@ -# CiviCRM 5.51.2 - -Released August 2, 2022 - -- **[Synopsis](#synopsis)** -- **[Bugs resolved](#bugs)** -- **[Credits](#credits)** -- **[Feedback](#feedback)** - -## <a name="synopsis"></a>Synopsis - -| *Does this version...?* | | -| --------------------------------------------------------------- | -------- | -| Change the database schema? | no | -| Alter the API? | no | -| Require attention to configuration options? | no | -| **Fix problems installing or upgrading to a previous version?** | **yes** | -| Introduce features? | no | -| **Fix bugs?** | **yes** | - -## <a name="bugs"></a>Bugs resolved - -* **_DOMPDF_: Upgrade to 2.0 ([#24038](https://github.com/civicrm/civicrm-core/pull/24038))** - - This applies a prophylactic security update. It is not believed to impact the security of CiviCRM deployments. - -* **_Geocoding_: hook_civicrm_geocoderFormat does not alter address components ([dev/core#3756](https://lab.civicrm.org/dev/core/-/issues/3756): [#24067](https://github.com/civicrm/civicrm-core/pull/24067))** -* **_Scheduled Reminders_: Some tokens defined by extensions may not evaluate ([#24115](https://github.com/civicrm/civicrm-core/pull/24115))** -* **_Upgrader_: Show additional notice about running extension upgrades ([#24040](https://github.com/civicrm/civicrm-core/pull/24040))** - -## <a name="credits"></a>Credits - -This release was developed by the following authors and reviewers: - -Wikimedia Foundation - Eileen McNaughton; Tadpole Collective - Kevin Cristiano; Joinery - -Allen Shaw; JMA Consulting - Seamus Lee; Dave D; CiviCRM - Tim Otten, Coleman Watts - -## <a name="feedback"></a>Feedback - -These release notes are edited by Tim Otten and Andie Hunt. If you'd like to -provide feedback on them, please login to https://chat.civicrm.org/civicrm and -contact `@agh1`. diff --git a/civicrm/release-notes/5.51.3.md b/civicrm/release-notes/5.51.3.md deleted file mode 100644 index eac02154a890296e7130a15bd5e0c4a8b85e29d9..0000000000000000000000000000000000000000 --- a/civicrm/release-notes/5.51.3.md +++ /dev/null @@ -1,37 +0,0 @@ -# CiviCRM 5.51.3 - -Released August 3, 2022 - -- **[Synopsis](#synopsis)** -- **[Bugs resolved](#bugs)** -- **[Credits](#credits)** -- **[Feedback](#feedback)** - -## <a name="synopsis"></a>Synopsis - -| *Does this version...?* | | -| --------------------------------------------------------------- | -------- | -| Change the database schema? | no | -| Alter the API? | no | -| Require attention to configuration options? | no | -| Fix problems installing or upgrading to a previous version? | no | -| Introduce features? | no | -| **Fix bugs?** | **yes** | - -## <a name="bugs"></a>Bugs resolved - -* **_CiviContribute_: Cannot submit credit cards via backend form (on certain configurations) ([dev/core#3774](https://lab.civicrm.org/dev/core/-/issues/3774): [#24144](https://github.com/civicrm/civicrm-core/pull/24144))** -* **_Importer_: Increase size of queue batches ([#24152](https://github.com/civicrm/civicrm-core/pull/24152))** - -## <a name="credits"></a>Credits - -This release was developed by the following authors and reviewers: - -Wikimedia Foundation - Eileen McNaughton; Megaphone Technology Consulting - Jon Goldberg; -JMA Consulting - Seamus Lee; CiviCRM - Tim Otten; Andy Burns - -## <a name="feedback"></a>Feedback - -These release notes are edited by Tim Otten and Andie Hunt. If you'd like to -provide feedback on them, please login to https://chat.civicrm.org/civicrm and -contact `@agh1`. diff --git a/civicrm/release-notes/5.52.0.md b/civicrm/release-notes/5.52.0.md new file mode 100644 index 0000000000000000000000000000000000000000..63efae2abaa6e881b540896d387aab6d76c5da6f --- /dev/null +++ b/civicrm/release-notes/5.52.0.md @@ -0,0 +1,493 @@ +# CiviCRM 5.52.0 + +Released August 3, 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 + +- **Allow UFMatch to be used in SearchKit - this allows you to filter by eg. + 'has a CMS account' + ([23723](https://github.com/civicrm/civicrm-core/pull/23723))** + + Makes the UFMatch entity available in SearchKit. + +- **message_admin - Enable another preview mode ("HTML (Raw)") + ([23810](https://github.com/civicrm/civicrm-core/pull/23810))** + + Adds another preview mode to message_admin. This is similar to the "HTML" + preview, except it shows the raw HTML (with syntax highlighting) which may + help debugging fiddly edits to the markup. + +- **Start phasing out 'preferred_mail_format' + (Work Towards [dev/core#2866](https://lab.civicrm.org/dev/core/-/issues/2866): + [23856](https://github.com/civicrm/civicrm-core/pull/23856))** + + Ignores preferred_mail_format, sends both mail formats instead of just + preferred. + +- **End of life planning for MySQL server 5.0 - 5.6 + ([dev/core#1681](https://lab.civicrm.org/dev/core/-/issues/1681): + [23615](https://github.com/civicrm/civicrm-core/pull/23615))** + + Update requirements to MySQL 5.7+ and MariaDB 10.2+. + +- **navigation: cleanup less frequently used New items + ([23831](https://github.com/civicrm/civicrm-core/pull/23831))** + + Improves user experience by removing some less frequently used menu items + (only impacts new installations). + +- **Add crmRegions to contact headers and associated inline forms + ([23419](https://github.com/civicrm/civicrm-core/pull/23419))** + + Improve consistency of regions on CiviCRM pages and forms. + +- **Angular - Support popping up an afform or other ang module via ajax modal + ([23924](https://github.com/civicrm/civicrm-core/pull/23924))** + + Allows Afforms to work as modal dialogs. + +- **Afform - Allow picking icon for tab, add CrmUiIconPicker widget + ([23919](https://github.com/civicrm/civicrm-core/pull/23919))** + + Allows users to configure an Icon for their Afform Tab. + +- **APIv4 - Enable exporting profiles with custom fields + ([23825](https://github.com/civicrm/civicrm-core/pull/23825))** + + Improves APIv4 by enabling exporting profiles with custom fields. + +- **New domain token base_url + ([23852](https://github.com/civicrm/civicrm-core/pull/23852))** + + Adds a new domain token `base_url`. + +- **Add second currency example + ([23889](https://github.com/civicrm/civicrm-core/pull/23889))** + + Adds an example for the message admin ui. + +- **Upgrader - Apply extension updates after core updates (Work towards + [dev/core#3490](https://lab.civicrm.org/dev/core/-/issues/3490): + [24040](https://github.com/civicrm/civicrm-core/pull/24040))** + + Shows additional notice about running extension upgrades. + +- **Lack of hooks to detect when a "CustomOption" is deleted + ([dev/core#3668](https://lab.civicrm.org/dev/core/-/issues/3668): + [23834](https://github.com/civicrm/civicrm-core/pull/23834))** + + Calls hooks when deleting an option value from CustomOption. + +### CiviCase + +- **Feature request - Filter case activities to only activity types in civicase + ([dev/core#3709](https://lab.civicrm.org/dev/core/-/issues/3709): + [23937](https://github.com/civicrm/civicrm-core/pull/23937))** + + Makes the activity search filter on manage case less unwieldy. + +### CiviContribute + +- **Add hook to modify 'contribution payment links' + ([23790](https://github.com/civicrm/civicrm-core/pull/23790))** + + Makes it so one can modify 'contribution payment links' via + hook_civicrm_links. + +- **Invoice Workflow template - add domain tokens + ([23806](https://github.com/civicrm/civicrm-core/pull/23806))** + + Adds domain tokens to the Invoice workflow template. + +- **Make it clear what "record refund" form does + ([23792](https://github.com/civicrm/civicrm-core/pull/23792))** + + Adds more help text to the Record Refund form. + +### CiviGrant + +- **Grants appear in afform + ([23899](https://github.com/civicrm/civicrm-core/pull/23899))** + + Adds the Grant entity to Afform. + +### Drupal Integration + +- **Allow installing on drupal 10 + ([73](https://github.com/civicrm/civicrm-drupal-8/pull/73))** + + Lists CiviCRM as Drupal 10 compatible. + +### WordPress Integration + +- **Introduce "Permissions and Capabilities" metabox and functionality + ([279](https://github.com/civicrm/civicrm-wordpress/pull/279))** + + Makes it so all CiviCRM permissions can be exposed as capabilities in + WordPress via an optional custom role called "CiviCRM Admin". + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **HTML entities in iCalendar export + ([dev/core#1541](https://lab.civicrm.org/dev/core/-/issues/1541): + [23638](https://github.com/civicrm/civicrm-core/pull/23638), + [23855](https://github.com/civicrm/civicrm-core/pull/23855) and + [23840](https://github.com/civicrm/civicrm-core/pull/23840))** + + Fixes random invalid utf8 issues when exporting iCalendar files. + +- **ical/ics files generated by Civi are not compatible with Outlook during + Daylight Savings + ([dev/core#2887](https://lab.civicrm.org/dev/core/-/issues/2887): + [23808](https://github.com/civicrm/civicrm-core/pull/23808))** + +- **PHP 8.1 (Work Towards + [dev/core#3181](https://lab.civicrm.org/dev/core/-/issues/3181): + [23947](https://github.com/civicrm/civicrm-core/pull/23947))** + + Compatibility fixes for GLOBALS in PHP 8.1. + +- **Greenwich theme: transparent background on pop-ups + ([dev/core#3432](https://lab.civicrm.org/dev/core/-/issues/3432): + [23873](https://github.com/civicrm/civicrm-core/pull/23873))** + +- **Sorting/paging Advanced Search results corrupts search criteria + ([dev/core#3495](https://lab.civicrm.org/dev/core/-/issues/3495): + [23697](https://github.com/civicrm/civicrm-core/pull/23697))** + + Fixes fields with wildcards in Advanced Search. + +- **Fix sorting by mapping type + ([dev/core#3717](https://lab.civicrm.org/dev/core/-/issues/3717): + [23942](https://github.com/civicrm/civicrm-core/pull/23942))** + + Fixes sorting on import/export Mapping page so that it is sorted by mapping + type. + +- **CRM_Report_Form: set _from and _where as public for the alterReportVar hook + ([23912](https://github.com/civicrm/civicrm-core/pull/23912))** + +- **Avoid multiple log files in multi-language environments + ([23722](https://github.com/civicrm/civicrm-core/pull/23722))** + +- **Reset smarty-security after an exception + ([23891](https://github.com/civicrm/civicrm-core/pull/23891))** + + Stops tests from getting befuddled. + +- **Fix import falling over when a note is included + ([23968](https://github.com/civicrm/civicrm-core/pull/23968))** + +- **Always return boolean from initialize method + ([278](https://github.com/civicrm/civicrm-wordpress/pull/278))** + +- **Smarty notice fix + ([23963](https://github.com/civicrm/civicrm-core/pull/23963))** + +- **Enotice fix + ([23945](https://github.com/civicrm/civicrm-core/pull/23945))** + +- **Do not escape error message + ([23964](https://github.com/civicrm/civicrm-core/pull/23964))** + +- **hook_civicrm_geocoderFormat does not alter address components + ([dev/core#3756](https://lab.civicrm.org/dev/core/-/issues/3756): + [24067](https://github.com/civicrm/civicrm-core/pull/24067))** + +- **Scheduled Reminders: Some tokens defined by extensions may not evaluate + ([24115](https://github.com/civicrm/civicrm-core/pull/24115))** + + This resolves a problem where certain tokens would work when sending an + email activity but not in scheduled reminders. Originally observed with + the membership tokens in `nz.co.fuzion.civitoken`. + +### CiviCase + +- **On "My Contact Dashboard", what is the Manage Case link in the relationships + section supposed to do? + (Work Towards [dev/core#2983](https://lab.civicrm.org/dev/core/-/issues/2983): + [23832](https://github.com/civicrm/civicrm-core/pull/23832))** + + Make static function static - AJAX::caseDetails(). + +- **Fixed fatal error on update multiple case + ([23853](https://github.com/civicrm/civicrm-core/pull/23853))** + +### CiviContribute + +- **Contacts with "Access CiviContribute" but not "edit contributions" can no + longer view contributions + ([dev/core#3725](https://lab.civicrm.org/dev/core/-/issues/3725): + [23965](https://github.com/civicrm/civicrm-core/pull/23965))** + +- **Additional Details section on Recurring Contribution template edit screen + doesn't load anymore + ([dev/financial#199](https://lab.civicrm.org/dev/financial/-/issues/199): + [23774](https://github.com/civicrm/civicrm-core/pull/23774))** + +- **Ensure apiv3 params are converted at the line item level + ([23892](https://github.com/civicrm/civicrm-core/pull/23892))** + +- **Unassigned variable in invoice message template + ([23872](https://github.com/civicrm/civicrm-core/pull/23872))** + +- **Fix double organization name in invoice, use token + ([23816](https://github.com/civicrm/civicrm-core/pull/23816))** + +- **Personal Campaign Pages (PCP) incorrectly displays "Don't list my + contribution in the honour roll" + ([23871](https://github.com/civicrm/civicrm-core/pull/23871))** + +- **Fix calculation and assignment of taxAmount on contribution page + confirmation ([23346](https://github.com/civicrm/civicrm-core/pull/23346))** + +- **Subscription Amount change not respected in Paypal + ([23084](https://github.com/civicrm/civicrm-core/pull/23084))** + +- **Remove another instance of pledges using contribution option group + ([23962](https://github.com/civicrm/civicrm-core/pull/23962))** + +- **only check batch currency match when adding a financial_trxn + ([23741](https://github.com/civicrm/civicrm-core/pull/23741))** + +- **Upgrade script for contribution_recur amount, fix loading + ([23929](https://github.com/civicrm/civicrm-core/pull/23929))** + +- **Fix bug whereby editing contribution_recur.amount was not updating + single-line-item-template-contributions + ([23809](https://github.com/civicrm/civicrm-core/pull/23809))** + +- **Cannot submit credit cards via backend form (on certain configurations) + ([dev/core#3774](https://lab.civicrm.org/dev/core/-/issues/3774): + [#24144](https://github.com/civicrm/civicrm-core/pull/24144))** + +### CiviEvent + +- **Scheduled Reminder limited by Participant Role fails if any participant has + multiple roles + ([dev/core#3369](https://lab.civicrm.org/dev/core/-/issues/3369): + [23602](https://github.com/civicrm/civicrm-core/pull/23602))** + +- **Alternate to 23826 - Events RSS feed does not output a pubDate for each + Event ([23850](https://github.com/civicrm/civicrm-core/pull/23850))** + +### CiviMail + +- **CiviMail "DB error": suspected core bug relating to attachment replace api + ([dev/core#2198](https://lab.civicrm.org/dev/core/-/issues/2198): + [23776](https://github.com/civicrm/civicrm-core/pull/23776))** + + Fixes "Error - DB error - unknown error" error when trying to send a test + mailing. + +### Drupal Integration + +- **Drupal service 'site.path' is deprecated in drupal 9 and will be removed in + drupal 10 ([dev/drupal#167](https://lab.civicrm.org/dev/drupal/-/issues/167): + [21809](https://github.com/civicrm/civicrm-core/pull/21809))** + +### WordPress Integration + +- **Enable the 'notify' parameter for WordPress user creation + ([23879](https://github.com/civicrm/civicrm-core/pull/23879))** + + Ensures that Wordpress respects the user creation `notify` parameter which + says whether or not to notify the user that an account has been created. + +- **Add missing template file + ([280](https://github.com/civicrm/civicrm-wordpress/pull/280))** + +## <a name="misc"></a>Miscellany + +- **_Importer_: Increase size of queue batches + ([#24152](https://github.com/civicrm/civicrm-core/pull/24152))** + +- **RepeatTransaction - separate out repeat pledge handling from completeOrder + ([23931](https://github.com/civicrm/civicrm-core/pull/23931))** + +- **Cleanup repeattransaction + ([23928](https://github.com/civicrm/civicrm-core/pull/23928))** + +- **chore: Set permissions for GitHub actions + ([23799](https://github.com/civicrm/civicrm-core/pull/23799))** + +- **Move the cache for `CRM_Extension_Browser` out of the filesystem and use a + `SqlGroup` instead + ([dev/core#3542](https://lab.civicrm.org/dev/core/-/issues/3542): + [23768](https://github.com/civicrm/civicrm-core/pull/23768))** + +- **Exceptions - What could possibly go wrong? + ([23471](https://github.com/civicrm/civicrm-core/pull/23471))** + +- **Replace more assigns with tokens in invoice, add tests + ([23829](https://github.com/civicrm/civicrm-core/pull/23829))** + +- **Improve code comments for Activity: parent_id and source_record_id + ([dev/core#3691](https://lab.civicrm.org/dev/core/-/issues/3691): + [23878](https://github.com/civicrm/civicrm-core/pull/23878) + and [23886](https://github.com/civicrm/civicrm-core/pull/23886))** + +- **Attempt to make function more readable by extracting in-line function + ([23847](https://github.com/civicrm/civicrm-core/pull/23847))** + +- **AngularJS - Remove UI-Utils library + ([23749](https://github.com/civicrm/civicrm-core/pull/23749))** + +- **Upgrader - Add snapshots for 5.52's data modifications + ([24039](https://github.com/civicrm/civicrm-core/pull/24039))** + +- **[REF] Upgrade DOMPDF to 2.x branch + ([24038](https://github.com/civicrm/civicrm-core/pull/24038))** + +- **[REF] Replace packages/html2txt with Composer package + ([dev/core#3676](https://lab.civicrm.org/dev/core/-/issues/3676): + [23971](https://github.com/civicrm/civicrm-core/pull/23971))** + +- **REF - Remove unneeded return from private fn, add comments + ([23967](https://github.com/civicrm/civicrm-core/pull/23967))** + +- **[REF] Follow on from #23749 and remove refernece to ui-utils from karama + conf ([23846](https://github.com/civicrm/civicrm-core/pull/23846))** + +- **(REF) TokenProcessor - Tweak error message + ([23813](https://github.com/civicrm/civicrm-core/pull/23813))** + +- **[REF] Remove param that has a set value + ([23797](https://github.com/civicrm/civicrm-core/pull/23797))** + +- **[REF][PHP8.1] Fix default values which triggeres deprecation notices in + php8.1 ([23926](https://github.com/civicrm/civicrm-core/pull/23926))** + +- **[REF][PHP8.1] Add in type hints to fix deprecations and add in + #[\ReturnTypeWillChange] where type hint would be transversable or mixed for + php7 compatability + ([23925](https://github.com/civicrm/civicrm-core/pull/23925))** + +- **[REF][PHP8.1] Fix deprecations where by calling trait static functions when + not from a class that implements the trait is deprecated + ([23960](https://github.com/civicrm/civicrm-core/pull/23960))** + +- **[REF][PHP8.1] Another set of fixes for passing in NULL values to php string + or preg replace functions + ([23935](https://github.com/civicrm/civicrm-core/pull/23935))** + +- **[REF][PHP8.1] Update Brick/Math to a version that works with php8.1 + ([23938](https://github.com/civicrm/civicrm-core/pull/23938))** + +- **[REF][PHP8.1] Upgrade Symfony to 4.x for WP, Drupal7, Backdrop, Joomla + ([23913](https://github.com/civicrm/civicrm-core/pull/23913))** + +- **[REF][PHP8.1] Stop Passing NULL values into mb_strlen in DAO and strpos in + API validate string function + ([23922](https://github.com/civicrm/civicrm-core/pull/23922))** + +- **[REF] [PHP8.1] Replace usage of smarty's date_filter to ensure we don't call + strftime which is deprecated in php8.1 + ([23800](https://github.com/civicrm/civicrm-core/pull/23800))** + +- **[REF][PHP8.1] Upgrade Pear/mail_mime package to support php8.1 + ([23923](https://github.com/civicrm/civicrm-core/pull/23923))** + +- **[REF][PHP8.1] Ensure that NULL is not passed to substr in + CRM_Utils_File::addTrailingSlash + ([23914](https://github.com/civicrm/civicrm-core/pull/23914))** + +- **[REF][PHP8.1] Fix issue where is meant to be a string in preg_match_all + ([345](https://github.com/civicrm/civicrm-packages/pull/345))** + +- **[REF][PHP8.1] Replace a couple of calls in Smarty code to strftime to the + equivilant using date to fix deprecation notices + ([344](https://github.com/civicrm/civicrm-packages/pull/344))** + +- **(NFC) mgd-php@1 - Add example+assertions for new case-type + ([23961](https://github.com/civicrm/civicrm-core/pull/23961))** + +- **(NFC) case-xml@1 - Add example+assertions of new activity-type + ([23959](https://github.com/civicrm/civicrm-core/pull/23959))** + +- **[NFC] Restore handling for deprecations in phpunit test runs + ([23988](https://github.com/civicrm/civicrm-core/pull/23988))** + +- **(NFC) SoapTest - Skip this test on Drupal8+ and Backdrop + ([23975](https://github.com/civicrm/civicrm-core/pull/23975))** + +- **(NFC) Expand docblocks for hook_install and hook_postInstall + ([23901](https://github.com/civicrm/civicrm-core/pull/23901))** + +- **NFC: Fix PHP notice on ContributionRecurSelector.tpl + ([23791](https://github.com/civicrm/civicrm-core/pull/23791))** + +- **[NFC] Add code comment about triggerinfo "variables" + ([23930](https://github.com/civicrm/civicrm-core/pull/23930))** + +- **Remove another no-run test from SyntaxConformance + ([23738](https://github.com/civicrm/civicrm-core/pull/23738))** + +- **Civi\Test - Fix leak in active module-list for headless test + ([23991](https://github.com/civicrm/civicrm-core/pull/23991))** + +- **Minor test cleanup + ([23894](https://github.com/civicrm/civicrm-core/pull/23894))** + +- **(REF) WorkflowMessageTest - Use dataProvider + ([23811](https://github.com/civicrm/civicrm-core/pull/23811))** + +- **WorkflowMessageTest - Fix weird inconsistency in resolving `@dataProvider` + ([23916](https://github.com/civicrm/civicrm-core/pull/23916))** + +- **WorkflowMessageTest - Re-enable skipped test + ([23885](https://github.com/civicrm/civicrm-core/pull/23885))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Francis Whittle, Justin +Freeman; Benjamin W; Business & Code - Alain Benbassat; Christian Wach; Circle +Interactive - Pradeep Nayak; CiviCoop - Klaas Eikelboom; CiviCRM - Coleman +Watts, Tim Otten; Coop SymbioTIC - Mathieu Lutfy; Dave D; Davis Media Access - +Darrick Servis; Freeform Solutions - Herb van den Dool; Fuzion - Luke Stewart; +IProSoft; Jens Schuppe; JMA Consulting - Monish Deb, Seamus Lee; Megaphone +Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; +nathannaveen; Oxfam Germany - Thomas Schüttler; Wikimedia Foundation - Eileen +McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +AGH Strategies - Chris Garaffa; Artful Robot - Rich Lott; Betty Dolfing; +Blackfly Solutions - Alan Dixon; CiviCoop - Jaap Jansma; CiviDesk - Yashodha +Chaku; DevApp - Adam Kwiatkowski; Fuzion - Peter Davis; iXiam - Luciano Spiegel; +JMA Consulting - Joe Murray; Lighthouse Consulting and Design - Brian +Shaughnessy; MC3 - Graham Mitchell; Nicol Wistreich; Squiffle Consulting - Aidan +Saunders; Tadpole Collective - Kevin Cristiano; Third Sector Design - Kurund +Jalmi + +## <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/setup/plugins/installDatabase/BootstrapCivi.civi-setup.php b/civicrm/setup/plugins/installDatabase/BootstrapCivi.civi-setup.php index 3592e35435cc5bd2c0f1fa40ff51e0dd4caa20bc..aabe7a6d890d43ab029d4b75093d8bf2df530170 100644 --- a/civicrm/setup/plugins/installDatabase/BootstrapCivi.civi-setup.php +++ b/civicrm/setup/plugins/installDatabase/BootstrapCivi.civi-setup.php @@ -22,7 +22,7 @@ if (!defined('CIVI_SETUP')) { \Civi\Setup::log()->info(sprintf('[%s] Bootstrap CiviCRM', basename(__FILE__))); \CRM_Core_I18n::$SQL_ESCAPER = NULL; - unset(\Civi::$statics['testPreInstall']); + unset(\Civi\Test::$statics['testPreInstall']); CRM_Core_Config::singleton(TRUE, TRUE); diff --git a/civicrm/setup/plugins/installDatabase/Preboot.civi-setup.php b/civicrm/setup/plugins/installDatabase/Preboot.civi-setup.php index 116a50246739bd92123a695595b4107e9d89528e..d4851ef6f03a77711304843ef56d178611965cfd 100644 --- a/civicrm/setup/plugins/installDatabase/Preboot.civi-setup.php +++ b/civicrm/setup/plugins/installDatabase/Preboot.civi-setup.php @@ -42,7 +42,7 @@ if (!defined('CIVI_SETUP')) { return $conn->escape_string($text); }; - \Civi::$statics['testPreInstall'] = 1; + \Civi\Test::$statics['testPreInstall'] = 1; CRM_Core_Config::singleton(FALSE, TRUE); diff --git a/civicrm/setup/src/Setup/DrupalUtil.php b/civicrm/setup/src/Setup/DrupalUtil.php index d16717dc2eae7ebc0a01367ce75f1f6107564773..20afedcfedac1938b81a6b590d629ef24eacf6e7 100644 --- a/civicrm/setup/src/Setup/DrupalUtil.php +++ b/civicrm/setup/src/Setup/DrupalUtil.php @@ -20,7 +20,7 @@ class DrupalUtil { return basename(conf_path()); } elseif (class_exists('Drupal')) { - return \Drupal::service('site.path'); + return \Drupal::getContainer()->getParameter('site.path'); } else { throw new \Exception('Cannot detect path under Drupal "sites/".'); diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index b93770195ad3a29d30586d372237a0ef4d9febbf..9e2790d49d1705af94c048b71574ead8af29a886 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -3525,7 +3525,7 @@ ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMA -- *******************************************************/ CREATE TABLE `civicrm_activity` ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Other Activity ID', - `source_record_id` int unsigned COMMENT 'Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry.', + `source_record_id` int unsigned COMMENT 'Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Entity table is discovered by filtering by the appropriate activity_type_id.', `activity_type_id` int unsigned NOT NULL DEFAULT 1 COMMENT 'FK to civicrm_option_value.id, that has to be valid, registered activity type.', `subject` varchar(255) COMMENT 'The subject/purpose/short description of the activity.', `activity_date_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.', @@ -3536,7 +3536,7 @@ CREATE TABLE `civicrm_activity` ( `details` longtext COMMENT 'Details about the activity (agenda, notes, etc).', `status_id` int unsigned COMMENT 'ID of the status this activity is currently in. Foreign key to civicrm_option_value.', `priority_id` int unsigned COMMENT 'ID of the priority given to this activity. Foreign key to civicrm_option_value.', - `parent_id` int unsigned COMMENT 'Parent meeting ID (if this is a follow-up item). This is not currently implemented', + `parent_id` int unsigned COMMENT 'Parent meeting ID (if this is a follow-up item).', `is_test` tinyint NOT NULL DEFAULT 0, `medium_id` int unsigned DEFAULT NULL COMMENT 'Activity Medium, Implicit FK to civicrm_option_value where option_group = encounter_medium.', `is_auto` tinyint NOT NULL DEFAULT 0, diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index bf386d422db0430ccc1f9dd436beafca493ccd96..f0c8067b3342a795743b0aaa17a737e552ed528d 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -9338,19 +9338,15 @@ INSERT INTO civicrm_msg_template <tr> <td width="30%"><b><font size="4" align="center">{ts}INVOICE{/ts}</font></b></td> <td width="50%" valign="bottom"><b><font size="1" align="center">{ts}Invoice Date:{/ts}</font></b></td> - <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{$domain_organization}</font></b></td> + <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{domain.name}</font></b></td> </tr> <tr> - {if $organization_name} - <td><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td><font size="1" align="center">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td> <td><font size="1" align="right">{$invoice_date}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -9359,35 +9355,35 @@ INSERT INTO civicrm_msg_template <td><b><font size="1" align="right">{ts}Invoice Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> <tr> <td><font size="1" align="right">{$city} {$postal_code}</font></td> <td height="10"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> - <td><font size="1" align="right">{if $domain_country}{$domain_country}{/if}</font></td> + <td><font size="1" align="right">{domain.country_id:label}</font></td> </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> - <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> + <td><font size="1" align="right">{contribution.source}</font></td> + <td valign="top" style="white-space: nowrap"><font size="1" align="right">{domain.email}</font> </td> </tr> <tr> <td></td> <td></td> - <td valign="top"><font size="1" align="right">{if $domain_phone}{$domain_phone}{/if}</font> </td> + <td valign="top"><font size="1" align="right">{domain.phone}</font> </td> </tr> </table> @@ -9396,7 +9392,7 @@ INSERT INTO civicrm_msg_template <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{domain.tax_term}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -9452,7 +9448,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><font size="1"> - {if $contribution_status_id == $refundedStatusId} + {if \'{contribution.contribution_status_id:name}\' == \'Refunded\'} {ts}Amount Credited{/ts} {else} {ts}Amount Paid{/ts} @@ -9475,7 +9471,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="5"></td> </tr> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if \'{contribution.contribution_status_id:name}\' == \'Pending\' && \'{contribution.is_pay_later}\' == 1} <tr> <td colspan="3"><b><font size="1" align="center">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td> <td colspan="2"></td> @@ -9486,7 +9482,7 @@ INSERT INTO civicrm_msg_template </tr> </table> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if \'{contribution.contribution_status_id:name}\' == \'Pending\' && \'{contribution.is_pay_later}\' == 1} <table style="margin-top:5px;" width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td><img src="{$resourceBase}/i/contribute/cut_line.png" height="15"></td> @@ -9496,13 +9492,13 @@ INSERT INTO civicrm_msg_template <table style="margin-top:5px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="0" id="desc"> <tr> <td width="60%"><b><font size="4" align="right">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size="1" align="left"><b>{ts}To:{/ts}</b><div style="width:24em;word-wrap:break-word;"> - {$domain_organization}<br /> - {$domain_street_address} {$domain_supplemental_address_1}<br /> - {$domain_supplemental_address_2} {$domain_state}<br /> - {$domain_city} {$domain_postal_code}<br /> - {$domain_country}<br /> - {$domain_email}</div> - {$domain_phone}<br /> + {domain.name}<br /> + {domain.street_address} {domain.supplemental_address_1}<br /> + {domain.supplemental_address_2} {domain.state_province_id:label}<br /> + {domain.city} {domain.postal_code}<br /> + {domain.country_id:label}<br /> + {domain.email}</div> + {domain.phone}<br /> </font><br/><br/><font size="1" align="left">{$notes}</font> </td> <td width="40%"> @@ -9513,7 +9509,7 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td><font size="1" align="right" style="font-weight:bold;">{ts}Invoice Number:{/ts}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> </tr> <tr><td colspan="5" style="color:#F5F5F5;"><hr></td></tr> {if $is_pay_later == 1} @@ -9537,7 +9533,7 @@ INSERT INTO civicrm_msg_template </table> {/if} - {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId} + {if \'{contribution.contribution_status_id:name}\' === \'Refunded\' || \'{contribution.contribution_status_id:name}\' === \'Cancelled\'} {if $config->empoweredBy} <table style="margin-top:2px;padding-left:7px;page-break-before: always;"> <tr> @@ -9550,19 +9546,15 @@ INSERT INTO civicrm_msg_template <tr> <td style="padding-left:15px;"><b><font size="4" align="center">{ts}CREDIT NOTE{/ts}</font></b></td> <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Date:{/ts}</font></b></td> - <td><font size="1" align="right">{$domain_organization}</font></td> + <td><font size="1" align="right">{domain.name}</font></td> </tr> <tr> - {if $organization_name} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td> <td style="padding-left:30px;"><font size="1" align="right">{$invoice_date}</font></td> <td> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -9571,18 +9563,18 @@ INSERT INTO civicrm_msg_template <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Credit Note Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td style="padding-left:17px;"><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td style="padding-left:30px;"><font size="1" align="right">{$creditnote_id}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.creditnote_id}</font></td> <td> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> @@ -9591,16 +9583,16 @@ INSERT INTO civicrm_msg_template <td height="10" style="padding-left:30px;"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_country}{$domain_country}{/if} + {domain.country_id:label} </font> </td> </tr> <tr> <td></td> - <td style="padding-left:30px;"><font size="1" align="right">{$source}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.source}</font></td> <td> <font size="1" align="right"> - {if $domain_email}{$domain_email}{/if} + {domain.email} </font> </td> </tr> @@ -9609,7 +9601,7 @@ INSERT INTO civicrm_msg_template <td></td> <td> <font size="1" align="right"> - {if $domain_phone}{$domain_phone}{/if} + {domain.phone} </font> </td> </tr> @@ -9617,13 +9609,13 @@ INSERT INTO civicrm_msg_template <table style="margin-top:75px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="5" id="desc"> <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <td colspan="2"> + <table> <tr> <th style="padding-right:28px;text-align:left;font-weight:bold;width:200px;"><font size="1">{ts}Description{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Quantity{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{$taxTerm}</font></th> + <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{domain.tax_term}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -9684,7 +9676,7 @@ INSERT INTO civicrm_msg_template <td style="padding-left:28px;text-align:right;"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> <td style="padding-left:28px;text-align:right;"><font size="1">{$amount|crmMoney:$currency}</font></td> </tr> - {if $is_pay_later == 0} + {if \'{contribution.is_pay_later}\' == 0} <tr> <td colspan="3"></td> <td style="padding-left:28px;text-align:right;"><font size="1">{ts}LESS Credit to invoice(s){/ts}</font></td> @@ -9733,7 +9725,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="2"></td> <td><font size="1" align="right" style="font-weight:bold;">{ts}Credit Note#:{/ts}</font></td> - <td><font size="1" align="right">{$creditnote_id}</font></td> + <td><font size="1" align="right">{contribution.creditnote_id}</font></td> </tr> <tr><td colspan="5"style="color:#F5F5F5;"><hr></hr></td></tr> <tr> @@ -9783,19 +9775,15 @@ INSERT INTO civicrm_msg_template <tr> <td width="30%"><b><font size="4" align="center">{ts}INVOICE{/ts}</font></b></td> <td width="50%" valign="bottom"><b><font size="1" align="center">{ts}Invoice Date:{/ts}</font></b></td> - <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{$domain_organization}</font></b></td> + <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{domain.name}</font></b></td> </tr> <tr> - {if $organization_name} - <td><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td><font size="1" align="center">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td> <td><font size="1" align="right">{$invoice_date}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -9804,35 +9792,35 @@ INSERT INTO civicrm_msg_template <td><b><font size="1" align="right">{ts}Invoice Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> <tr> <td><font size="1" align="right">{$city} {$postal_code}</font></td> <td height="10"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> - <td><font size="1" align="right">{if $domain_country}{$domain_country}{/if}</font></td> + <td><font size="1" align="right">{domain.country_id:label}</font></td> </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> - <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> + <td><font size="1" align="right">{contribution.source}</font></td> + <td valign="top" style="white-space: nowrap"><font size="1" align="right">{domain.email}</font> </td> </tr> <tr> <td></td> <td></td> - <td valign="top"><font size="1" align="right">{if $domain_phone}{$domain_phone}{/if}</font> </td> + <td valign="top"><font size="1" align="right">{domain.phone}</font> </td> </tr> </table> @@ -9841,7 +9829,7 @@ INSERT INTO civicrm_msg_template <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{domain.tax_term}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -9897,7 +9885,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><font size="1"> - {if $contribution_status_id == $refundedStatusId} + {if \'{contribution.contribution_status_id:name}\' == \'Refunded\'} {ts}Amount Credited{/ts} {else} {ts}Amount Paid{/ts} @@ -9920,7 +9908,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="5"></td> </tr> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if \'{contribution.contribution_status_id:name}\' == \'Pending\' && \'{contribution.is_pay_later}\' == 1} <tr> <td colspan="3"><b><font size="1" align="center">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td> <td colspan="2"></td> @@ -9931,7 +9919,7 @@ INSERT INTO civicrm_msg_template </tr> </table> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if \'{contribution.contribution_status_id:name}\' == \'Pending\' && \'{contribution.is_pay_later}\' == 1} <table style="margin-top:5px;" width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td><img src="{$resourceBase}/i/contribute/cut_line.png" height="15"></td> @@ -9941,13 +9929,13 @@ INSERT INTO civicrm_msg_template <table style="margin-top:5px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="0" id="desc"> <tr> <td width="60%"><b><font size="4" align="right">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size="1" align="left"><b>{ts}To:{/ts}</b><div style="width:24em;word-wrap:break-word;"> - {$domain_organization}<br /> - {$domain_street_address} {$domain_supplemental_address_1}<br /> - {$domain_supplemental_address_2} {$domain_state}<br /> - {$domain_city} {$domain_postal_code}<br /> - {$domain_country}<br /> - {$domain_email}</div> - {$domain_phone}<br /> + {domain.name}<br /> + {domain.street_address} {domain.supplemental_address_1}<br /> + {domain.supplemental_address_2} {domain.state_province_id:label}<br /> + {domain.city} {domain.postal_code}<br /> + {domain.country_id:label}<br /> + {domain.email}</div> + {domain.phone}<br /> </font><br/><br/><font size="1" align="left">{$notes}</font> </td> <td width="40%"> @@ -9958,7 +9946,7 @@ INSERT INTO civicrm_msg_template </tr> <tr> <td><font size="1" align="right" style="font-weight:bold;">{ts}Invoice Number:{/ts}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> </tr> <tr><td colspan="5" style="color:#F5F5F5;"><hr></td></tr> {if $is_pay_later == 1} @@ -9982,7 +9970,7 @@ INSERT INTO civicrm_msg_template </table> {/if} - {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId} + {if \'{contribution.contribution_status_id:name}\' === \'Refunded\' || \'{contribution.contribution_status_id:name}\' === \'Cancelled\'} {if $config->empoweredBy} <table style="margin-top:2px;padding-left:7px;page-break-before: always;"> <tr> @@ -9995,19 +9983,15 @@ INSERT INTO civicrm_msg_template <tr> <td style="padding-left:15px;"><b><font size="4" align="center">{ts}CREDIT NOTE{/ts}</font></b></td> <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Date:{/ts}</font></b></td> - <td><font size="1" align="right">{$domain_organization}</font></td> + <td><font size="1" align="right">{domain.name}</font></td> </tr> <tr> - {if $organization_name} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td> <td style="padding-left:30px;"><font size="1" align="right">{$invoice_date}</font></td> <td> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -10016,18 +10000,18 @@ INSERT INTO civicrm_msg_template <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Credit Note Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td style="padding-left:17px;"><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td style="padding-left:30px;"><font size="1" align="right">{$creditnote_id}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.creditnote_id}</font></td> <td> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> @@ -10036,16 +10020,16 @@ INSERT INTO civicrm_msg_template <td height="10" style="padding-left:30px;"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_country}{$domain_country}{/if} + {domain.country_id:label} </font> </td> </tr> <tr> <td></td> - <td style="padding-left:30px;"><font size="1" align="right">{$source}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.source}</font></td> <td> <font size="1" align="right"> - {if $domain_email}{$domain_email}{/if} + {domain.email} </font> </td> </tr> @@ -10054,7 +10038,7 @@ INSERT INTO civicrm_msg_template <td></td> <td> <font size="1" align="right"> - {if $domain_phone}{$domain_phone}{/if} + {domain.phone} </font> </td> </tr> @@ -10062,13 +10046,13 @@ INSERT INTO civicrm_msg_template <table style="margin-top:75px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="5" id="desc"> <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <td colspan="2"> + <table> <tr> <th style="padding-right:28px;text-align:left;font-weight:bold;width:200px;"><font size="1">{ts}Description{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Quantity{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{$taxTerm}</font></th> + <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{domain.tax_term}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -10129,7 +10113,7 @@ INSERT INTO civicrm_msg_template <td style="padding-left:28px;text-align:right;"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> <td style="padding-left:28px;text-align:right;"><font size="1">{$amount|crmMoney:$currency}</font></td> </tr> - {if $is_pay_later == 0} + {if \'{contribution.is_pay_later}\' == 0} <tr> <td colspan="3"></td> <td style="padding-left:28px;text-align:right;"><font size="1">{ts}LESS Credit to invoice(s){/ts}</font></td> @@ -10178,7 +10162,7 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="2"></td> <td><font size="1" align="right" style="font-weight:bold;">{ts}Credit Note#:{/ts}</font></td> - <td><font size="1" align="right">{$creditnote_id}</font></td> + <td><font size="1" align="right">{contribution.creditnote_id}</font></td> </tr> <tr><td colspan="5"style="color:#F5F5F5;"><hr></hr></td></tr> <tr> @@ -12603,7 +12587,9 @@ INSERT INTO civicrm_msg_template {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($email)} @@ -12942,7 +12928,13 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} @@ -13407,7 +13399,9 @@ INSERT INTO civicrm_msg_template {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($email)} @@ -13746,7 +13740,13 @@ INSERT INTO civicrm_msg_template <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} @@ -14235,7 +14235,9 @@ INSERT INTO civicrm_msg_template {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($payer.name)} @@ -14581,7 +14583,13 @@ You were registered by: {$payer.name} <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} @@ -15015,7 +15023,9 @@ You were registered by: {$payer.name} {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($payer.name)} @@ -15361,7 +15371,13 @@ You were registered by: {$payer.name} <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} @@ -16641,7 +16657,9 @@ Click this link to go to a web page where you can confirm your registration onli {if $event.is_public} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if \'{contact.email}\'} @@ -16787,12 +16805,18 @@ Click this link to go to a web page where you can confirm your registration onli {/if} {if $event.is_public} - <tr> + <tr> <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> </td> - </tr> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> + </td> + </tr> {/if} {if \'{contact.email}\'} @@ -16909,7 +16933,9 @@ Click this link to go to a web page where you can confirm your registration onli {if $event.is_public} {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if \'{contact.email}\'} @@ -17055,12 +17081,18 @@ Click this link to go to a web page where you can confirm your registration onli {/if} {if $event.is_public} - <tr> + <tr> <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> </td> - </tr> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p=\'civicrm/event/ical\' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> + </td> + </tr> {/if} {if \'{contact.email}\'} @@ -23126,7 +23158,7 @@ VALUES ( @domainID, 'civicrm/import/contact?reset=1', 'Import Contacts', 'Import Contacts', 'import contacts', '', @contactlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/import/activity?reset=1', 'Import Activities', 'Import Activities', 'import contacts', '', @contactlastID, '1', NULL, 8 ), ( @domainID, 'civicrm/import/custom?reset=1', 'Import Custom Data', 'Import MultiValued Custom', 'import contacts', '', @contactlastID, '1', '1', 9 ), - ( @domainID, 'civicrm/group/add?reset=1', 'New Group', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/group/add?reset=1', 'New Group', 'New Group', 'edit groups', '', @contactlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/group?reset=1', 'Manage Groups', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 11 ), ( @domainID, 'civicrm/tag?reset=1', 'Manage Tags', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1', '1', 12 ), ( @domainID, 'civicrm/contact/deduperules?reset=1', 'Find and Merge Duplicate Contacts', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 ); @@ -23168,11 +23200,11 @@ VALUES ( @domainID, 'civicrm/pledge/add?reset=1&action=add&context=standalone', 'New Pledge', 'New Pledge', 'access CiviPledge,edit pledges', 'AND', @pledgelastID, '1', NULL, 2 ), ( @domainID, 'civicrm/pledge/search?reset=1', 'Find Pledges', 'Find Pledges', 'access CiviPledge', '', @pledgelastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=6&reset=1', 'Pledge Reports', 'Pledge Reports', 'access CiviPledge', '', @pledgelastID, '1', 0, 4 ), - ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', 'New Contribution Page', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', 'New Contribution Page', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 9 ), ( @domainID, 'civicrm/admin/contribute?reset=1', 'Manage Contribution Pages', 'Manage Contribution Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', '1', 10 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=contribute', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/contribute/managePremiums?reset=1', 'Premiums (Thank-you Gifts)', 'Premiums', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 12 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 13 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 14 ), ( @domainID, 'civicrm/financial/batch?reset=1&action=add', 'New Batch', 'New Batch', 'create manual batch', 'AND', @financialTransactionID, '1', NULL, 1 ), @@ -23194,11 +23226,11 @@ VALUES ( @domainID, 'civicrm/event/search?reset=1', 'Find Participants', 'Find Participants', 'access CiviEvent', '', @eventlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=1&reset=1', 'Event Reports', 'Event Reports', 'access CiviEvent', '', @eventlastID, '1', 1, 4 ), ( @domainID, 'civicrm/event/import?reset=1', 'Import Participants','Import Participants', 'access CiviEvent,edit event participants', 'AND', @eventlastID, '1', '1', 5 ), - ( @domainID, 'civicrm/event/add?reset=1&action=add', 'New Event', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/event/add?reset=1&action=add', 'New Event', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 6 ), ( @domainID, 'civicrm/event/manage?reset=1', 'Manage Events', 'Manage Events', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 7 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @eventlastID, '1', 1, 8 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', 'Event Templates', 'Event Templates', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 9 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 11 ); INSERT INTO civicrm_navigation @@ -23233,12 +23265,12 @@ INSERT INTO civicrm_navigation ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) VALUES ( @domainID, 'civicrm/member?reset=1', 'Dashboard', 'Dashboard', 'access CiviMember', '', @memberlastID, '1', NULL, 1 ), - ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', 'New Membership', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', 'New Membership', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '0', NULL, 2 ), ( @domainID, 'civicrm/member/search?reset=1', 'Find Memberships', 'Find Memberships','access CiviMember', '', @memberlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=3&reset=1', 'Membership Reports', 'Membership Reports', 'access CiviMember', '', @memberlastID, '1', 1, 4 ), ( @domainID, 'civicrm/batch?reset=1', 'Batch Data Entry', 'Batch Data Entry','access CiviContribute', '', @memberlastID, '1', NULL, 5 ), ( @domainID, 'civicrm/member/import?reset=1', 'Import Memberships', 'Import Members', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', 1, 6 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '0', NULL, 7 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 8 ); INSERT INTO civicrm_navigation @@ -23466,7 +23498,7 @@ VALUES ( @domainID, 'civicrm/admin/options/payment_instrument?reset=1', 'Payment Methods', 'Payment Instruments', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/options/accept_creditcard?reset=1', 'Accepted Credit Cards', 'Accepted Credit Cards', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 13 ), ( @domainID, 'civicrm/admin/options/soft_credit_type?reset=1', 'Soft Credit Types', 'Soft Credit Types', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', 1, 14 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '0', NULL, 15 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 16 ), ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', 'Payment Processors', 'Payment Processors', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 17 ), ( @domainID, 'civicrm/admin/setting/preferences/contribute?reset=1', 'CiviContribute Component Settings', 'CiviContribute Component Settings', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 18 ) ; @@ -23484,7 +23516,7 @@ VALUES ( @domainID, 'civicrm/event/manage?reset=1', 'Manage Events', 'Manage Events', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 2 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 3 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', 'Event Templates', 'Event Templates', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 4 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '0', NULL, 5 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 6 ), ( @domainID, 'civicrm/admin/options/event_type?reset=1', 'Event Types', 'Event Types', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/participant_status?reset=1', 'Participant Statuses', 'Participant Statuses', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 8 ), @@ -23793,4 +23825,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.51.3'; +UPDATE civicrm_domain SET version = '5.52.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 838bc590f6e3d76ed6db8d7043357b79c38ada65..59fd42b42e74650fb00e41cdf2c57e6f760bdd3a 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,8 +1,8 @@ --- MySQL dump 10.19 Distrib 10.3.29-MariaDB, for debian-linux-gnu (x86_64) +-- MySQL dump 10.19 Distrib 10.3.35-MariaDB, for debian-linux-gnu (x86_64) -- --- Host: database Database: dmastercivicrm +-- Host: 127.0.0.1 Database: tax549dev501symbiodevxyzci_1834a -- ------------------------------------------------------ --- Server version 10.4.20-MariaDB-1:10.4.20+maria~focal +-- Server version 10.3.35-MariaDB-1:10.3.35+maria~buster-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -161,647 +161,647 @@ 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,10,'Subject for Pledge Acknowledgment','2021-11-04 02:00:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (2,NULL,9,'Subject for Tell a Friend','2022-01-08 01:47:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (3,NULL,9,'Subject for Tell a Friend','2022-03-05 15:18:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (4,NULL,10,'Subject for Pledge Acknowledgment','2021-10-04 03:07:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (5,NULL,9,'Subject for Tell a Friend','2022-06-14 08:04:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (6,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 22:49:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (7,NULL,10,'Subject for Pledge Acknowledgment','2021-11-17 12:32:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (8,NULL,9,'Subject for Tell a Friend','2021-12-22 11:58:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (9,NULL,9,'Subject for Tell a Friend','2022-04-28 23:15:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (10,NULL,10,'Subject for Pledge Acknowledgment','2022-01-28 21:58:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (11,NULL,9,'Subject for Tell a Friend','2022-03-21 12:33:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (12,NULL,10,'Subject for Pledge Acknowledgment','2021-08-24 12:16:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (13,NULL,10,'Subject for Pledge Acknowledgment','2021-09-15 11:01:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (14,NULL,9,'Subject for Tell a Friend','2022-03-09 23:00:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (15,NULL,9,'Subject for Tell a Friend','2022-01-01 15:22:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (16,NULL,10,'Subject for Pledge Acknowledgment','2022-02-13 08:53:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (17,NULL,10,'Subject for Pledge Acknowledgment','2021-10-30 19:27:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (18,NULL,10,'Subject for Pledge Acknowledgment','2022-06-02 21:49:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (19,NULL,9,'Subject for Tell a Friend','2021-09-20 08:27:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (20,NULL,10,'Subject for Pledge Acknowledgment','2022-01-24 11:09:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (21,NULL,10,'Subject for Pledge Acknowledgment','2022-01-26 03:24:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (22,NULL,9,'Subject for Tell a Friend','2021-07-17 11:41:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (23,NULL,9,'Subject for Tell a Friend','2021-07-09 00:30:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (24,NULL,9,'Subject for Tell a Friend','2021-07-20 19:41:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (25,NULL,9,'Subject for Tell a Friend','2022-05-20 08:15:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (26,NULL,9,'Subject for Tell a Friend','2022-03-12 23:47:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (27,NULL,9,'Subject for Tell a Friend','2021-09-10 10:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (28,NULL,9,'Subject for Tell a Friend','2021-11-09 02:31:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (29,NULL,10,'Subject for Pledge Acknowledgment','2022-03-11 00:09:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (30,NULL,9,'Subject for Tell a Friend','2022-04-06 07:21:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (31,NULL,9,'Subject for Tell a Friend','2022-01-20 19:47:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (32,NULL,10,'Subject for Pledge Acknowledgment','2022-05-05 15:35:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (33,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 09:40:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (34,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 15:22:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (35,NULL,10,'Subject for Pledge Acknowledgment','2022-05-06 09:20:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (36,NULL,10,'Subject for Pledge Acknowledgment','2021-12-01 03:59:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (37,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 12:06:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (38,NULL,9,'Subject for Tell a Friend','2022-04-09 00:01:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (39,NULL,9,'Subject for Tell a Friend','2021-11-30 01:48:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (40,NULL,10,'Subject for Pledge Acknowledgment','2022-02-16 03:54:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (41,NULL,10,'Subject for Pledge Acknowledgment','2021-09-17 05:41:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (42,NULL,9,'Subject for Tell a Friend','2022-03-08 06:51:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (43,NULL,10,'Subject for Pledge Acknowledgment','2022-05-20 00:12:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (44,NULL,9,'Subject for Tell a Friend','2021-08-14 19:52:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (45,NULL,9,'Subject for Tell a Friend','2021-11-07 03:44:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (46,NULL,9,'Subject for Tell a Friend','2022-03-08 11:47:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (47,NULL,10,'Subject for Pledge Acknowledgment','2022-02-05 22:12:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (48,NULL,10,'Subject for Pledge Acknowledgment','2022-05-05 22:07:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (49,NULL,9,'Subject for Tell a Friend','2021-11-29 22:05:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (50,NULL,9,'Subject for Tell a Friend','2021-10-24 20:46:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (51,NULL,9,'Subject for Tell a Friend','2022-04-15 03:53:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (52,NULL,10,'Subject for Pledge Acknowledgment','2021-12-06 17:56:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (53,NULL,9,'Subject for Tell a Friend','2021-11-29 09:48:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (54,NULL,9,'Subject for Tell a Friend','2021-11-19 01:47:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (55,NULL,9,'Subject for Tell a Friend','2022-05-25 14:21:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (56,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 08:09:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (57,NULL,9,'Subject for Tell a Friend','2022-06-11 11:09:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (58,NULL,10,'Subject for Pledge Acknowledgment','2021-10-04 04:07:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (59,NULL,10,'Subject for Pledge Acknowledgment','2022-04-14 11:20:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (60,NULL,9,'Subject for Tell a Friend','2021-11-04 09:39:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (61,NULL,10,'Subject for Pledge Acknowledgment','2021-11-08 10:37:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (62,NULL,10,'Subject for Pledge Acknowledgment','2022-03-14 00:17:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (63,NULL,10,'Subject for Pledge Acknowledgment','2022-05-29 10:51:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (64,NULL,10,'Subject for Pledge Acknowledgment','2021-08-27 02:49:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (65,NULL,10,'Subject for Pledge Acknowledgment','2021-11-04 14:02:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (66,NULL,9,'Subject for Tell a Friend','2021-09-20 17:03:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (67,NULL,9,'Subject for Tell a Friend','2022-04-20 13:56:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (68,NULL,9,'Subject for Tell a Friend','2022-01-07 17:16:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (69,NULL,9,'Subject for Tell a Friend','2022-06-11 16:42:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (70,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 14:59:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (71,NULL,10,'Subject for Pledge Acknowledgment','2021-12-18 11:02:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (72,NULL,9,'Subject for Tell a Friend','2021-12-26 05:36:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (73,NULL,10,'Subject for Pledge Acknowledgment','2021-12-28 22:06:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (74,NULL,9,'Subject for Tell a Friend','2021-09-13 07:27:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (75,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 23:57:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (76,NULL,9,'Subject for Tell a Friend','2022-02-07 07:48:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (77,NULL,9,'Subject for Tell a Friend','2022-02-14 13:19:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:34','2022-06-28 04:20:34'), - (78,NULL,9,'Subject for Tell a Friend','2022-01-07 05:55:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (79,NULL,10,'Subject for Pledge Acknowledgment','2021-11-05 16:44:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (80,NULL,9,'Subject for Tell a Friend','2022-01-25 23:14:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (81,NULL,10,'Subject for Pledge Acknowledgment','2022-06-27 20:33:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (82,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 14:26:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (83,NULL,9,'Subject for Tell a Friend','2021-12-22 21:00:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (84,NULL,9,'Subject for Tell a Friend','2022-04-28 05:48:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (85,NULL,9,'Subject for Tell a Friend','2022-01-07 22:51:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (86,NULL,10,'Subject for Pledge Acknowledgment','2021-07-25 00:21:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (87,NULL,9,'Subject for Tell a Friend','2021-10-24 08:48:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (88,NULL,9,'Subject for Tell a Friend','2022-03-18 01:29:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (89,NULL,10,'Subject for Pledge Acknowledgment','2021-12-26 15:10:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (90,NULL,10,'Subject for Pledge Acknowledgment','2022-01-28 05:49:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (91,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 05:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (92,NULL,9,'Subject for Tell a Friend','2021-11-09 14:54:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (93,NULL,9,'Subject for Tell a Friend','2022-01-23 10:49:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (94,NULL,9,'Subject for Tell a Friend','2021-12-17 23:12:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (95,NULL,9,'Subject for Tell a Friend','2022-02-20 18:20:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (96,NULL,9,'Subject for Tell a Friend','2021-09-17 15:26:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (97,NULL,10,'Subject for Pledge Acknowledgment','2022-06-05 01:10:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (98,NULL,10,'Subject for Pledge Acknowledgment','2022-06-24 20:21:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (99,NULL,9,'Subject for Tell a Friend','2021-11-29 13:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (100,NULL,9,'Subject for Tell a Friend','2021-11-29 04:31:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (101,NULL,10,'Subject for Pledge Acknowledgment','2022-03-11 23:12:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (102,NULL,10,'Subject for Pledge Acknowledgment','2022-05-15 20:31:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (103,NULL,10,'Subject for Pledge Acknowledgment','2021-09-06 22:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (104,NULL,9,'Subject for Tell a Friend','2022-01-21 23:10:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (105,NULL,10,'Subject for Pledge Acknowledgment','2021-08-19 14:58:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (106,NULL,9,'Subject for Tell a Friend','2021-12-13 20:31:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (107,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 06:03:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (108,NULL,9,'Subject for Tell a Friend','2022-03-07 13:45:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (109,NULL,9,'Subject for Tell a Friend','2022-01-10 19:34:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (110,NULL,9,'Subject for Tell a Friend','2021-11-28 18:13:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (111,NULL,9,'Subject for Tell a Friend','2021-10-09 12:32:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (112,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 13:54:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (113,NULL,10,'Subject for Pledge Acknowledgment','2021-12-10 19:32:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (114,NULL,9,'Subject for Tell a Friend','2021-07-23 02:55:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (115,NULL,10,'Subject for Pledge Acknowledgment','2021-08-22 22:54:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (116,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 12:14:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (117,NULL,9,'Subject for Tell a Friend','2021-12-15 15:46:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (118,NULL,9,'Subject for Tell a Friend','2021-10-09 15:44:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (119,NULL,10,'Subject for Pledge Acknowledgment','2021-11-22 15:31:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (120,NULL,9,'Subject for Tell a Friend','2022-01-02 20:04:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (121,NULL,9,'Subject for Tell a Friend','2022-05-16 20:09:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (122,NULL,9,'Subject for Tell a Friend','2022-05-08 07:36:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (123,NULL,10,'Subject for Pledge Acknowledgment','2022-01-22 20:58:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (124,NULL,9,'Subject for Tell a Friend','2021-11-04 23:20:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (125,NULL,10,'Subject for Pledge Acknowledgment','2022-06-08 16:18:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (126,NULL,9,'Subject for Tell a Friend','2022-04-08 13:46:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (127,NULL,10,'Subject for Pledge Acknowledgment','2021-10-25 14:41:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (128,NULL,10,'Subject for Pledge Acknowledgment','2022-01-20 17:45:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (129,NULL,9,'Subject for Tell a Friend','2021-09-06 12:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (130,NULL,9,'Subject for Tell a Friend','2021-11-05 01:38:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (131,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 05:02:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (132,NULL,10,'Subject for Pledge Acknowledgment','2021-12-26 07:24:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (133,NULL,9,'Subject for Tell a Friend','2022-01-22 22:48:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (134,NULL,10,'Subject for Pledge Acknowledgment','2022-03-15 12:43:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (135,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 05:34:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (136,NULL,10,'Subject for Pledge Acknowledgment','2022-02-15 22:10:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (137,NULL,9,'Subject for Tell a Friend','2021-08-06 03:55:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (138,NULL,9,'Subject for Tell a Friend','2022-04-30 06:14:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (139,NULL,9,'Subject for Tell a Friend','2021-09-08 07:41:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (140,NULL,9,'Subject for Tell a Friend','2022-02-23 22:18:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (141,NULL,10,'Subject for Pledge Acknowledgment','2022-05-17 17:06:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (142,NULL,9,'Subject for Tell a Friend','2021-11-25 12:05:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (143,NULL,9,'Subject for Tell a Friend','2022-06-20 05:51:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (144,NULL,10,'Subject for Pledge Acknowledgment','2021-11-20 19:05:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (145,NULL,10,'Subject for Pledge Acknowledgment','2022-03-08 19:38:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (146,NULL,10,'Subject for Pledge Acknowledgment','2021-09-28 04:16:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (147,NULL,9,'Subject for Tell a Friend','2022-04-19 05:11:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (148,NULL,9,'Subject for Tell a Friend','2022-05-15 16:31:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (149,NULL,10,'Subject for Pledge Acknowledgment','2022-03-25 03:10:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (150,NULL,10,'Subject for Pledge Acknowledgment','2022-06-27 07:55:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (151,NULL,9,'Subject for Tell a Friend','2022-05-17 06:18:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (152,NULL,9,'Subject for Tell a Friend','2022-05-07 14:31:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (153,NULL,10,'Subject for Pledge Acknowledgment','2022-02-11 08:33:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (154,NULL,9,'Subject for Tell a Friend','2022-01-11 23:27:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (155,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 11:02:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (156,NULL,9,'Subject for Tell a Friend','2021-07-07 04:24:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (157,NULL,9,'Subject for Tell a Friend','2021-09-15 03:44:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:35','2022-06-28 04:20:35'), - (158,NULL,9,'Subject for Tell a Friend','2022-01-13 07:51:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (159,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 08:27:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (160,NULL,10,'Subject for Pledge Acknowledgment','2021-09-25 20:10:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (161,NULL,9,'Subject for Tell a Friend','2022-06-05 09:52:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (162,NULL,9,'Subject for Tell a Friend','2022-02-06 17:16:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (163,NULL,10,'Subject for Pledge Acknowledgment','2022-06-20 11:53:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (164,NULL,9,'Subject for Tell a Friend','2021-09-30 07:38:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (165,NULL,9,'Subject for Tell a Friend','2022-05-21 13:39:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (166,NULL,9,'Subject for Tell a Friend','2022-04-15 17:17:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (167,NULL,10,'Subject for Pledge Acknowledgment','2021-12-02 17:09:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (168,NULL,10,'Subject for Pledge Acknowledgment','2021-12-22 10:13:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (169,NULL,10,'Subject for Pledge Acknowledgment','2022-04-21 01:13:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (170,NULL,9,'Subject for Tell a Friend','2021-10-16 16:57:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (171,NULL,10,'Subject for Pledge Acknowledgment','2021-07-07 23:24:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (172,NULL,10,'Subject for Pledge Acknowledgment','2022-06-16 20:07:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (173,NULL,10,'Subject for Pledge Acknowledgment','2022-05-11 13:04:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (174,NULL,10,'Subject for Pledge Acknowledgment','2021-09-29 16:53:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (175,NULL,10,'Subject for Pledge Acknowledgment','2021-11-16 21:47:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (176,NULL,10,'Subject for Pledge Acknowledgment','2022-05-31 22:27:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (177,NULL,10,'Subject for Pledge Acknowledgment','2022-03-08 07:32:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (178,NULL,10,'Subject for Pledge Acknowledgment','2021-11-18 09:29:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (179,NULL,10,'Subject for Pledge Acknowledgment','2021-10-31 05:32:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (180,NULL,10,'Subject for Pledge Acknowledgment','2022-04-06 18:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (181,NULL,10,'Subject for Pledge Acknowledgment','2022-05-18 15:55:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (182,NULL,9,'Subject for Tell a Friend','2021-11-11 18:02:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (183,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 23:20:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (184,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 15:59:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (185,NULL,10,'Subject for Pledge Acknowledgment','2022-03-12 01:26:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (186,NULL,10,'Subject for Pledge Acknowledgment','2022-01-18 15:29:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (187,NULL,10,'Subject for Pledge Acknowledgment','2022-02-25 10:56:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (188,NULL,10,'Subject for Pledge Acknowledgment','2021-12-18 23:12:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (189,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 12:21:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (190,NULL,9,'Subject for Tell a Friend','2021-11-05 16:13:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (191,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 17:50:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (192,NULL,9,'Subject for Tell a Friend','2022-03-15 20:50:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (193,NULL,9,'Subject for Tell a Friend','2021-08-19 23:31:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (194,NULL,9,'Subject for Tell a Friend','2021-07-06 01:19:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (195,NULL,9,'Subject for Tell a Friend','2021-08-01 21:14:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (196,NULL,10,'Subject for Pledge Acknowledgment','2022-04-04 01:08:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (197,NULL,10,'Subject for Pledge Acknowledgment','2021-12-14 05:30:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (198,NULL,10,'Subject for Pledge Acknowledgment','2022-06-12 09:28:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (199,NULL,10,'Subject for Pledge Acknowledgment','2022-01-05 05:34:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (200,NULL,10,'Subject for Pledge Acknowledgment','2022-05-05 07:42:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (201,NULL,10,'Subject for Pledge Acknowledgment','2021-09-28 22:12:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (202,NULL,10,'Subject for Pledge Acknowledgment','2022-06-17 20:22:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (203,NULL,10,'Subject for Pledge Acknowledgment','2022-03-17 16:33:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (204,NULL,9,'Subject for Tell a Friend','2022-01-03 09:43:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (205,NULL,10,'Subject for Pledge Acknowledgment','2022-03-19 08:50:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (206,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 16:12:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (207,NULL,9,'Subject for Tell a Friend','2022-06-04 17:30:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (208,NULL,9,'Subject for Tell a Friend','2022-01-30 05:52:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (209,NULL,10,'Subject for Pledge Acknowledgment','2022-06-12 09:37:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (210,NULL,9,'Subject for Tell a Friend','2022-01-28 01:52:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (211,NULL,9,'Subject for Tell a Friend','2021-10-13 20:40:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (212,NULL,10,'Subject for Pledge Acknowledgment','2021-09-06 23:14:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (213,NULL,9,'Subject for Tell a Friend','2021-12-12 07:48:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (214,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 09:24:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (215,NULL,9,'Subject for Tell a Friend','2022-01-29 00:12:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (216,NULL,9,'Subject for Tell a Friend','2022-03-10 22:02:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (217,NULL,10,'Subject for Pledge Acknowledgment','2021-10-14 12:54:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (218,NULL,9,'Subject for Tell a Friend','2022-06-18 04:40:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (219,NULL,9,'Subject for Tell a Friend','2021-06-30 14:42:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (220,NULL,10,'Subject for Pledge Acknowledgment','2022-05-01 18:20:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (221,NULL,9,'Subject for Tell a Friend','2021-08-31 20:51:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (222,NULL,9,'Subject for Tell a Friend','2022-06-24 22:57:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (223,NULL,9,'Subject for Tell a Friend','2021-11-18 15:40:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (224,NULL,10,'Subject for Pledge Acknowledgment','2022-06-19 06:27:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (225,NULL,9,'Subject for Tell a Friend','2022-02-09 01:53:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (226,NULL,10,'Subject for Pledge Acknowledgment','2022-01-19 22:31:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (227,NULL,9,'Subject for Tell a Friend','2022-04-10 05:01:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (228,NULL,9,'Subject for Tell a Friend','2021-10-26 23:19:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (229,NULL,10,'Subject for Pledge Acknowledgment','2022-01-22 23:32:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (230,NULL,10,'Subject for Pledge Acknowledgment','2021-09-21 02:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (231,NULL,10,'Subject for Pledge Acknowledgment','2021-12-18 20:41:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (232,NULL,9,'Subject for Tell a Friend','2022-02-11 19:25:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (233,NULL,10,'Subject for Pledge Acknowledgment','2022-04-13 02:56:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (234,NULL,9,'Subject for Tell a Friend','2021-08-15 16:30:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (235,NULL,9,'Subject for Tell a Friend','2022-06-22 20:47:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (236,NULL,9,'Subject for Tell a Friend','2021-12-09 05:59:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (237,NULL,9,'Subject for Tell a Friend','2022-01-23 00:02:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (238,NULL,10,'Subject for Pledge Acknowledgment','2022-04-02 17:46:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (239,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 18:29:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (240,NULL,9,'Subject for Tell a Friend','2022-01-01 05:49:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (241,NULL,9,'Subject for Tell a Friend','2022-06-25 20:23:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (242,NULL,9,'Subject for Tell a Friend','2022-02-19 02:38:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (243,NULL,9,'Subject for Tell a Friend','2021-10-15 05:06:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (244,NULL,9,'Subject for Tell a Friend','2021-12-23 04:16:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (245,NULL,9,'Subject for Tell a Friend','2022-06-17 08:22:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (246,NULL,10,'Subject for Pledge Acknowledgment','2022-04-17 19:21:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (247,NULL,9,'Subject for Tell a Friend','2022-06-07 10:31:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (248,NULL,9,'Subject for Tell a Friend','2021-07-12 22:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (249,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 06:54:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (250,NULL,9,'Subject for Tell a Friend','2021-07-18 12:55:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (251,NULL,10,'Subject for Pledge Acknowledgment','2021-09-13 09:22:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (252,NULL,9,'Subject for Tell a Friend','2021-09-12 07:38:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (253,NULL,10,'Subject for Pledge Acknowledgment','2021-12-04 18:04:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (254,NULL,9,'Subject for Tell a Friend','2022-04-18 17:43:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (255,NULL,10,'Subject for Pledge Acknowledgment','2021-12-08 17:52:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (256,NULL,10,'Subject for Pledge Acknowledgment','2021-11-20 14:40:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (257,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 16:18:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (258,NULL,9,'Subject for Tell a Friend','2022-04-02 01:08:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (259,NULL,9,'Subject for Tell a Friend','2021-07-26 03:39:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (260,NULL,9,'Subject for Tell a Friend','2022-01-02 05:16:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (261,NULL,9,'Subject for Tell a Friend','2021-07-05 23:41:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (262,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 12:54:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (263,NULL,9,'Subject for Tell a Friend','2021-11-24 00:19:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (264,NULL,9,'Subject for Tell a Friend','2022-05-14 05:20:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (265,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 07:30:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (266,NULL,9,'Subject for Tell a Friend','2022-06-04 00:37:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (267,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 01:13:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:36','2022-06-28 04:20:36'), - (268,NULL,9,'Subject for Tell a Friend','2021-07-16 10:42:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (269,NULL,9,'Subject for Tell a Friend','2021-09-25 01:55:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (270,NULL,9,'Subject for Tell a Friend','2021-11-23 08:03:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (271,NULL,10,'Subject for Pledge Acknowledgment','2022-01-10 21:28:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (272,NULL,10,'Subject for Pledge Acknowledgment','2022-05-16 04:02:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (273,NULL,9,'Subject for Tell a Friend','2021-09-18 16:46:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (274,NULL,10,'Subject for Pledge Acknowledgment','2022-03-09 01:38:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (275,NULL,10,'Subject for Pledge Acknowledgment','2021-12-20 01:55:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (276,NULL,10,'Subject for Pledge Acknowledgment','2022-05-31 01:41:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (277,NULL,10,'Subject for Pledge Acknowledgment','2022-06-09 03:04:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (278,NULL,10,'Subject for Pledge Acknowledgment','2021-12-29 14:16:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (279,NULL,10,'Subject for Pledge Acknowledgment','2022-06-24 03:19:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (280,NULL,10,'Subject for Pledge Acknowledgment','2022-05-04 18:45:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (281,NULL,10,'Subject for Pledge Acknowledgment','2022-04-20 16:26:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (282,NULL,9,'Subject for Tell a Friend','2021-07-22 08:21:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (283,NULL,9,'Subject for Tell a Friend','2022-01-21 06:24:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (284,NULL,10,'Subject for Pledge Acknowledgment','2021-11-18 12:14:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (285,NULL,10,'Subject for Pledge Acknowledgment','2022-02-28 13:06:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (286,NULL,10,'Subject for Pledge Acknowledgment','2022-01-04 08:26:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (287,NULL,10,'Subject for Pledge Acknowledgment','2021-12-13 05:33:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (288,NULL,10,'Subject for Pledge Acknowledgment','2022-04-23 13:38:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (289,NULL,10,'Subject for Pledge Acknowledgment','2022-04-01 03:44:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (290,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 15:06:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (291,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 10:21:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (292,NULL,10,'Subject for Pledge Acknowledgment','2021-10-26 17:30:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (293,NULL,10,'Subject for Pledge Acknowledgment','2022-01-08 07:38:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (294,NULL,9,'Subject for Tell a Friend','2022-05-31 01:30:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (295,NULL,9,'Subject for Tell a Friend','2022-05-04 12:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (296,NULL,9,'Subject for Tell a Friend','2021-11-23 12:15:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (297,NULL,10,'Subject for Pledge Acknowledgment','2022-06-11 14:34:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (298,NULL,10,'Subject for Pledge Acknowledgment','2022-04-22 01:06:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (299,NULL,10,'Subject for Pledge Acknowledgment','2022-03-27 14:48:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (300,NULL,9,'Subject for Tell a Friend','2021-12-20 18:08:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (301,NULL,10,'Subject for Pledge Acknowledgment','2021-10-03 07:39:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (302,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 05:57:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (303,NULL,10,'Subject for Pledge Acknowledgment','2021-09-20 20:00:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (304,NULL,9,'Subject for Tell a Friend','2021-11-29 20:49:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (305,NULL,9,'Subject for Tell a Friend','2021-11-25 02:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (306,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 18:37:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (307,NULL,9,'Subject for Tell a Friend','2021-11-24 04:39:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (308,NULL,10,'Subject for Pledge Acknowledgment','2021-10-15 10:51:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (309,NULL,9,'Subject for Tell a Friend','2021-08-01 05:28:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (310,NULL,9,'Subject for Tell a Friend','2022-02-20 02:28:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (311,NULL,9,'Subject for Tell a Friend','2021-12-02 14:25:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (312,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 19:11:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (313,NULL,9,'Subject for Tell a Friend','2021-07-19 10:41:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (314,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 19:16:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (315,NULL,9,'Subject for Tell a Friend','2022-02-07 23:11:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (316,NULL,10,'Subject for Pledge Acknowledgment','2021-09-03 17:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (317,NULL,9,'Subject for Tell a Friend','2022-04-17 23:11:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (318,NULL,10,'Subject for Pledge Acknowledgment','2021-08-05 22:23:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (319,NULL,10,'Subject for Pledge Acknowledgment','2022-03-07 11:19:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (320,NULL,9,'Subject for Tell a Friend','2021-11-21 06:37:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (321,NULL,9,'Subject for Tell a Friend','2021-08-08 01:47:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (322,NULL,10,'Subject for Pledge Acknowledgment','2021-10-23 04:45:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (323,NULL,9,'Subject for Tell a Friend','2021-08-17 07:14:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (324,NULL,9,'Subject for Tell a Friend','2022-05-28 13:24:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (325,NULL,9,'Subject for Tell a Friend','2021-11-04 07:56:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (326,NULL,9,'Subject for Tell a Friend','2022-01-17 16:22:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (327,NULL,9,'Subject for Tell a Friend','2021-08-30 00:56:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (328,NULL,9,'Subject for Tell a Friend','2022-03-24 02:25:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (329,NULL,10,'Subject for Pledge Acknowledgment','2022-06-21 16:17:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (330,NULL,10,'Subject for Pledge Acknowledgment','2022-01-08 14:14:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (331,NULL,9,'Subject for Tell a Friend','2021-07-28 10:49:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (332,NULL,9,'Subject for Tell a Friend','2021-12-08 06:05:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (333,NULL,10,'Subject for Pledge Acknowledgment','2022-01-16 01:30:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (334,NULL,9,'Subject for Tell a Friend','2021-12-01 03:14:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (335,NULL,10,'Subject for Pledge Acknowledgment','2022-02-02 02:34:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (336,NULL,10,'Subject for Pledge Acknowledgment','2022-05-02 18:13:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (337,NULL,10,'Subject for Pledge Acknowledgment','2021-07-30 11:48:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (338,NULL,10,'Subject for Pledge Acknowledgment','2022-03-10 21:45:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (339,NULL,10,'Subject for Pledge Acknowledgment','2021-10-15 16:31:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (340,NULL,9,'Subject for Tell a Friend','2022-05-14 16:23:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (341,NULL,10,'Subject for Pledge Acknowledgment','2022-06-18 19:03:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (342,NULL,9,'Subject for Tell a Friend','2022-04-04 22:09:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (343,NULL,9,'Subject for Tell a Friend','2021-12-12 02:19:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (344,NULL,9,'Subject for Tell a Friend','2021-07-14 15:00:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (345,NULL,10,'Subject for Pledge Acknowledgment','2021-08-19 11:16:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (346,NULL,9,'Subject for Tell a Friend','2021-08-23 09:41:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (347,NULL,9,'Subject for Tell a Friend','2021-10-29 02:45:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (348,NULL,10,'Subject for Pledge Acknowledgment','2021-11-22 18:56:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (349,NULL,10,'Subject for Pledge Acknowledgment','2021-11-04 03:42:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (350,NULL,9,'Subject for Tell a Friend','2022-05-21 07:14:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (351,NULL,9,'Subject for Tell a Friend','2021-07-22 23:10:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (352,NULL,9,'Subject for Tell a Friend','2021-12-21 12:27:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (353,NULL,9,'Subject for Tell a Friend','2022-01-19 19:32:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (354,NULL,9,'Subject for Tell a Friend','2021-08-23 13:06:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (355,NULL,10,'Subject for Pledge Acknowledgment','2022-04-19 00:25:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (356,NULL,9,'Subject for Tell a Friend','2021-08-22 00:08:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (357,NULL,10,'Subject for Pledge Acknowledgment','2022-05-15 05:46:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (358,NULL,10,'Subject for Pledge Acknowledgment','2021-07-26 23:32:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (359,NULL,10,'Subject for Pledge Acknowledgment','2021-11-27 06:20:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (360,NULL,9,'Subject for Tell a Friend','2021-09-07 03:15:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (361,NULL,10,'Subject for Pledge Acknowledgment','2022-05-15 21:38:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (362,NULL,10,'Subject for Pledge Acknowledgment','2022-02-23 00:29:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (363,NULL,9,'Subject for Tell a Friend','2022-03-04 11:43:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (364,NULL,10,'Subject for Pledge Acknowledgment','2022-01-11 19:42:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (365,NULL,9,'Subject for Tell a Friend','2021-12-10 13:37:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (366,NULL,10,'Subject for Pledge Acknowledgment','2022-05-19 22:26:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (367,NULL,9,'Subject for Tell a Friend','2021-12-27 06:03:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (368,NULL,9,'Subject for Tell a Friend','2022-06-17 21:56:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (369,NULL,9,'Subject for Tell a Friend','2022-02-19 01:03:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (370,NULL,9,'Subject for Tell a Friend','2021-12-14 11:49:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (371,NULL,9,'Subject for Tell a Friend','2021-09-26 19:54:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (372,NULL,9,'Subject for Tell a Friend','2022-02-25 13:13:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:37','2022-06-28 04:20:37'), - (373,NULL,9,'Subject for Tell a Friend','2021-07-23 21:12:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (374,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 06:58:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (375,NULL,10,'Subject for Pledge Acknowledgment','2021-10-19 19:50:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (376,NULL,10,'Subject for Pledge Acknowledgment','2022-03-12 08:23:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (377,NULL,10,'Subject for Pledge Acknowledgment','2021-10-14 04:40:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (378,NULL,9,'Subject for Tell a Friend','2021-09-02 21:01:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (379,NULL,10,'Subject for Pledge Acknowledgment','2022-04-01 15:02:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (380,NULL,9,'Subject for Tell a Friend','2022-03-23 19:33:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (381,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 08:43:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (382,NULL,10,'Subject for Pledge Acknowledgment','2021-12-27 14:09:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (383,NULL,10,'Subject for Pledge Acknowledgment','2022-04-04 22:50:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (384,NULL,9,'Subject for Tell a Friend','2022-05-26 12:30:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (385,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 12:41:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (386,NULL,10,'Subject for Pledge Acknowledgment','2021-11-08 23:35:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (387,NULL,10,'Subject for Pledge Acknowledgment','2022-02-14 20:00:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (388,NULL,9,'Subject for Tell a Friend','2022-03-14 04:55:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (389,NULL,9,'Subject for Tell a Friend','2022-02-27 20:40:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (390,NULL,10,'Subject for Pledge Acknowledgment','2022-05-31 05:43:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (391,NULL,9,'Subject for Tell a Friend','2022-04-16 19:31:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (392,NULL,9,'Subject for Tell a Friend','2022-03-01 17:43:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (393,NULL,10,'Subject for Pledge Acknowledgment','2021-11-16 21:01:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (394,NULL,10,'Subject for Pledge Acknowledgment','2021-11-25 04:09:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (395,NULL,9,'Subject for Tell a Friend','2022-01-22 08:42:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (396,NULL,9,'Subject for Tell a Friend','2021-08-29 11:03:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (397,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 04:06:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (398,NULL,10,'Subject for Pledge Acknowledgment','2022-04-08 15:49:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (399,NULL,9,'Subject for Tell a Friend','2022-03-23 14:07:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (400,NULL,9,'Subject for Tell a Friend','2022-06-26 04:30:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (401,NULL,9,'Subject for Tell a Friend','2022-03-05 17:11:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (402,NULL,9,'Subject for Tell a Friend','2021-09-09 00:48:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (403,NULL,10,'Subject for Pledge Acknowledgment','2022-05-20 08:35:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (404,NULL,9,'Subject for Tell a Friend','2022-05-18 11:42:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (405,NULL,9,'Subject for Tell a Friend','2021-12-31 08:42:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (406,NULL,9,'Subject for Tell a Friend','2021-07-21 04:01:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (407,NULL,9,'Subject for Tell a Friend','2021-08-08 05:23:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (408,NULL,10,'Subject for Pledge Acknowledgment','2022-06-16 15:46:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (409,NULL,9,'Subject for Tell a Friend','2021-07-05 03:55:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (410,NULL,9,'Subject for Tell a Friend','2021-11-16 20:44:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (411,NULL,9,'Subject for Tell a Friend','2022-01-06 11:05:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (412,NULL,9,'Subject for Tell a Friend','2022-05-01 08:28:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (413,NULL,9,'Subject for Tell a Friend','2021-12-11 16:30:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (414,NULL,10,'Subject for Pledge Acknowledgment','2022-01-24 19:27:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (415,NULL,9,'Subject for Tell a Friend','2021-10-10 19:02:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (416,NULL,9,'Subject for Tell a Friend','2022-06-11 03:22:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (417,NULL,9,'Subject for Tell a Friend','2021-11-02 04:25:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (418,NULL,10,'Subject for Pledge Acknowledgment','2021-08-23 11:54:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (419,NULL,10,'Subject for Pledge Acknowledgment','2022-03-23 09:05:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (420,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 07:03:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (421,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 01:35:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (422,NULL,10,'Subject for Pledge Acknowledgment','2022-05-14 07:43:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (423,NULL,9,'Subject for Tell a Friend','2022-05-19 06:54:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (424,NULL,9,'Subject for Tell a Friend','2021-07-14 16:38:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (425,NULL,9,'Subject for Tell a Friend','2021-09-15 17:08:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (426,NULL,10,'Subject for Pledge Acknowledgment','2022-01-03 20:26:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (427,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 17:28:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (428,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 09:13:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (429,NULL,10,'Subject for Pledge Acknowledgment','2021-07-10 12:29:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (430,NULL,10,'Subject for Pledge Acknowledgment','2022-01-14 04:47:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (431,NULL,10,'Subject for Pledge Acknowledgment','2022-06-14 17:11:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (432,NULL,9,'Subject for Tell a Friend','2022-03-04 18:07:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (433,NULL,9,'Subject for Tell a Friend','2022-06-05 16:30:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (434,NULL,9,'Subject for Tell a Friend','2022-03-23 20:16:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (435,NULL,9,'Subject for Tell a Friend','2022-03-30 23:01:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (436,NULL,10,'Subject for Pledge Acknowledgment','2021-08-30 04:53:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (437,NULL,9,'Subject for Tell a Friend','2021-08-27 05:23:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (438,NULL,9,'Subject for Tell a Friend','2022-02-10 16:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (439,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 10:40:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (440,NULL,9,'Subject for Tell a Friend','2022-04-18 19:26:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (441,NULL,9,'Subject for Tell a Friend','2022-04-23 13:28:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (442,NULL,9,'Subject for Tell a Friend','2022-01-23 10:46:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (443,NULL,9,'Subject for Tell a Friend','2022-05-17 01:48:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (444,NULL,10,'Subject for Pledge Acknowledgment','2021-09-03 22:52:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (445,NULL,10,'Subject for Pledge Acknowledgment','2022-06-22 22:56:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (446,NULL,9,'Subject for Tell a Friend','2022-06-21 21:05:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (447,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 21:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (448,NULL,9,'Subject for Tell a Friend','2022-05-24 04:19:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (449,NULL,10,'Subject for Pledge Acknowledgment','2022-01-30 14:16:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (450,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 14:10:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (451,1,6,'$ 125 April Mailer 1','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (452,2,6,'$ 50 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (453,3,6,'£ 25 April Mailer 1','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (454,4,6,'$ 50 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (455,5,6,'$ 50 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (456,6,6,'$ 500 April Mailer 1','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (457,7,6,'$ 1750 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (458,8,6,'$ 50 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (459,9,6,'$ 10 Online: Help CiviCRM','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (460,10,6,'$ 250 Online: Help CiviCRM','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:38','2022-06-28 04:20:38'), - (461,11,6,'Â¥ 500 ','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (462,12,6,'$ 50 Online: Save the Penguins','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (463,13,6,'$ 50 ','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (464,14,6,'$ 50 ','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (465,15,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (466,16,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (467,17,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (468,18,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (469,19,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (470,20,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (471,21,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (472,22,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (473,23,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (474,24,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (475,25,6,'$ 25 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (476,26,6,'$ 10 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (477,27,6,'$ 10 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (478,28,6,'$ 10 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (479,29,6,'$ 10 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (480,30,6,'$ 10 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (481,31,6,'€ 5 Recurring contribution','2022-08-28 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (482,1,7,'General','2022-06-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (483,2,7,'Student','2022-06-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (484,3,7,'General','2022-06-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (485,4,7,'Student','2022-06-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (486,5,7,'General','2020-05-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (487,6,7,'Student','2022-06-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (488,7,7,'General','2022-06-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (489,8,7,'Student','2022-06-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (490,9,7,'General','2022-06-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (491,10,7,'General','2020-04-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (492,11,7,'Lifetime','2022-06-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (493,12,7,'Student','2022-06-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (494,13,7,'General','2022-06-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (495,14,7,'Student','2022-06-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (496,15,7,'General','2020-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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (497,16,7,'Student','2022-06-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (498,17,7,'General','2022-06-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (499,18,7,'Student','2022-06-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (500,19,7,'General','2022-06-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (501,20,7,'General','2020-01-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (502,21,7,'General','2022-06-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (503,22,7,'Lifetime','2022-06-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (504,23,7,'General','2022-06-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (505,24,7,'Student','2022-06-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (506,25,7,'Student','2021-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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (507,26,7,'Student','2022-06-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (508,27,7,'General','2022-06-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (509,28,7,'Student','2022-06-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (510,29,7,'General','2022-05-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (511,30,7,'General','2019-11-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (512,32,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (513,33,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (514,34,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (515,35,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (516,36,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (517,37,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (518,38,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (519,39,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (520,40,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (521,41,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (523,43,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (524,44,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (525,45,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (526,46,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (527,47,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (528,48,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (529,49,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (530,50,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (531,51,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (532,52,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (533,53,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (534,54,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (535,55,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (536,56,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (537,57,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (538,58,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (539,59,6,'$ 50.00 - Student Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (540,60,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (541,61,6,'$ 100.00 - General Membership: Offline signup','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (543,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (544,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (545,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (546,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (547,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (548,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (549,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (550,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (551,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (552,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (553,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (554,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (555,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (556,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (557,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (558,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (559,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (560,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (561,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (562,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (563,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (564,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (565,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (566,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (567,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (568,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (569,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (570,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (571,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (572,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (573,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (574,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (575,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (576,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (577,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (578,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (579,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (580,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (581,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (582,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (583,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (584,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (585,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (586,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (587,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (588,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (589,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (590,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (591,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (592,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,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (593,63,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (600,70,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (602,72,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (603,73,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (606,76,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (607,77,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (608,78,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (609,79,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (610,80,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (611,81,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (614,84,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (617,87,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (619,89,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (622,92,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (624,94,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (625,95,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (626,96,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (627,97,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (628,98,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (629,99,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (630,100,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (631,101,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (632,102,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (633,103,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (634,104,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (635,105,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (636,106,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (637,107,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (638,108,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (639,109,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (640,110,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (641,111,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'), - (642,112,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-28 04:20:39',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-28 04:20:39','2022-06-28 04:20:39'); + (1,NULL,10,'Subject for Pledge Acknowledgment','2022-03-12 02:12:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (2,NULL,9,'Subject for Tell a Friend','2021-07-12 22:09:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (3,NULL,9,'Subject for Tell a Friend','2021-08-18 12:27:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (4,NULL,10,'Subject for Pledge Acknowledgment','2022-05-10 23:37:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (5,NULL,9,'Subject for Tell a Friend','2021-09-18 12:36:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (6,NULL,10,'Subject for Pledge Acknowledgment','2021-12-08 22:57:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (7,NULL,10,'Subject for Pledge Acknowledgment','2022-04-13 15:34:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (8,NULL,10,'Subject for Pledge Acknowledgment','2022-01-04 23:05:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (9,NULL,10,'Subject for Pledge Acknowledgment','2021-12-11 04:55:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (10,NULL,9,'Subject for Tell a Friend','2021-08-24 12:44:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (11,NULL,10,'Subject for Pledge Acknowledgment','2021-11-24 10:43:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (12,NULL,9,'Subject for Tell a Friend','2021-12-04 07:02:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (13,NULL,10,'Subject for Pledge Acknowledgment','2022-02-06 01:18:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (14,NULL,9,'Subject for Tell a Friend','2022-02-19 18:37:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (15,NULL,9,'Subject for Tell a Friend','2021-10-05 19:46:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (16,NULL,10,'Subject for Pledge Acknowledgment','2021-10-02 12:23:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (17,NULL,9,'Subject for Tell a Friend','2022-02-25 12:16:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (18,NULL,10,'Subject for Pledge Acknowledgment','2021-10-04 20:14:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (19,NULL,10,'Subject for Pledge Acknowledgment','2022-06-16 23:27:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (20,NULL,10,'Subject for Pledge Acknowledgment','2022-02-14 14:10:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (21,NULL,9,'Subject for Tell a Friend','2022-04-20 02:48:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (22,NULL,9,'Subject for Tell a Friend','2021-09-09 04:52:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (23,NULL,9,'Subject for Tell a Friend','2021-12-20 00:28:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (24,NULL,9,'Subject for Tell a Friend','2021-10-11 00:03:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (25,NULL,9,'Subject for Tell a Friend','2021-08-14 00:44:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (26,NULL,10,'Subject for Pledge Acknowledgment','2021-10-23 09:34:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (27,NULL,9,'Subject for Tell a Friend','2022-03-08 20:04:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (28,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 00:14:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (29,NULL,9,'Subject for Tell a Friend','2021-10-13 00:11:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (30,NULL,9,'Subject for Tell a Friend','2022-01-01 16:35:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (31,NULL,10,'Subject for Pledge Acknowledgment','2021-11-08 12:26:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (32,NULL,10,'Subject for Pledge Acknowledgment','2022-03-05 03:51:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (33,NULL,9,'Subject for Tell a Friend','2022-05-31 09:53:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (34,NULL,9,'Subject for Tell a Friend','2021-12-13 00:42:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (35,NULL,9,'Subject for Tell a Friend','2021-11-03 05:49:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (36,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 05:54:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (37,NULL,9,'Subject for Tell a Friend','2021-12-19 04:25:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (38,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 02:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (39,NULL,10,'Subject for Pledge Acknowledgment','2022-06-16 00:20:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (40,NULL,10,'Subject for Pledge Acknowledgment','2022-01-20 18:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (41,NULL,10,'Subject for Pledge Acknowledgment','2021-12-11 06:20:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (42,NULL,10,'Subject for Pledge Acknowledgment','2022-06-15 18:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (43,NULL,9,'Subject for Tell a Friend','2022-05-16 17:26:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (44,NULL,10,'Subject for Pledge Acknowledgment','2021-07-31 06:53:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (45,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 21:11:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (46,NULL,9,'Subject for Tell a Friend','2022-04-24 23:42:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (47,NULL,10,'Subject for Pledge Acknowledgment','2022-01-25 14:59:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (48,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 01:08:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (49,NULL,10,'Subject for Pledge Acknowledgment','2022-03-14 10:35:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (50,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 06:35:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (51,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 09:16:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (52,NULL,10,'Subject for Pledge Acknowledgment','2021-12-19 04:55:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (53,NULL,10,'Subject for Pledge Acknowledgment','2022-06-06 15:13:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (54,NULL,10,'Subject for Pledge Acknowledgment','2022-02-27 14:09:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (55,NULL,9,'Subject for Tell a Friend','2021-09-11 06:44:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (56,NULL,10,'Subject for Pledge Acknowledgment','2022-05-18 19:12:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (57,NULL,9,'Subject for Tell a Friend','2022-04-20 08:37:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (58,NULL,9,'Subject for Tell a Friend','2021-08-05 06:16:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (59,NULL,9,'Subject for Tell a Friend','2021-07-31 14:41:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (60,NULL,10,'Subject for Pledge Acknowledgment','2022-01-10 07:25:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (61,NULL,10,'Subject for Pledge Acknowledgment','2022-04-02 22:59:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (62,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 15:19:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (63,NULL,9,'Subject for Tell a Friend','2021-12-16 06:37:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (64,NULL,9,'Subject for Tell a Friend','2022-02-09 16:28:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (65,NULL,10,'Subject for Pledge Acknowledgment','2022-03-16 12:03:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (66,NULL,9,'Subject for Tell a Friend','2022-05-21 08:36:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (67,NULL,10,'Subject for Pledge Acknowledgment','2021-08-25 21:58:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (68,NULL,10,'Subject for Pledge Acknowledgment','2021-08-13 13:28:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (69,NULL,9,'Subject for Tell a Friend','2021-07-11 13:50:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (70,NULL,9,'Subject for Tell a Friend','2021-07-20 16:00:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (71,NULL,9,'Subject for Tell a Friend','2021-08-14 18:07:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (72,NULL,9,'Subject for Tell a Friend','2022-06-10 05:18:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (73,NULL,9,'Subject for Tell a Friend','2022-05-15 14:16:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (74,NULL,10,'Subject for Pledge Acknowledgment','2022-03-13 14:26:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (75,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 03:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (76,NULL,10,'Subject for Pledge Acknowledgment','2021-07-09 20:57:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (77,NULL,9,'Subject for Tell a Friend','2021-10-07 10:58:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (78,NULL,9,'Subject for Tell a Friend','2021-07-31 01:31:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (79,NULL,9,'Subject for Tell a Friend','2021-12-16 05:41:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (80,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 16:28:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (81,NULL,9,'Subject for Tell a Friend','2022-04-24 04:35:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (82,NULL,9,'Subject for Tell a Friend','2022-03-18 00:05:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (83,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 11:39:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (84,NULL,9,'Subject for Tell a Friend','2022-04-27 10:44:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (85,NULL,9,'Subject for Tell a Friend','2021-07-25 23:32:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (86,NULL,9,'Subject for Tell a Friend','2021-10-01 09:28:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (87,NULL,9,'Subject for Tell a Friend','2021-08-03 15:35:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (88,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 00:36:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (89,NULL,10,'Subject for Pledge Acknowledgment','2022-06-04 11:14:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (90,NULL,10,'Subject for Pledge Acknowledgment','2021-11-17 20:26:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (91,NULL,10,'Subject for Pledge Acknowledgment','2022-05-18 19:05:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (92,NULL,10,'Subject for Pledge Acknowledgment','2022-04-30 20:09:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (93,NULL,9,'Subject for Tell a Friend','2022-06-10 20:36:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (94,NULL,9,'Subject for Tell a Friend','2021-08-16 20:08:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (95,NULL,10,'Subject for Pledge Acknowledgment','2021-09-23 18:54:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (96,NULL,9,'Subject for Tell a Friend','2021-07-25 12:05:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (97,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 10:50:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (98,NULL,10,'Subject for Pledge Acknowledgment','2022-04-06 18:40:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (99,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 20:20:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (100,NULL,10,'Subject for Pledge Acknowledgment','2022-01-30 18:13:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (101,NULL,9,'Subject for Tell a Friend','2021-08-24 08:31:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (102,NULL,10,'Subject for Pledge Acknowledgment','2021-12-18 00:21:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (103,NULL,9,'Subject for Tell a Friend','2021-07-30 02:32:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (104,NULL,9,'Subject for Tell a Friend','2021-11-11 20:57:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (105,NULL,9,'Subject for Tell a Friend','2022-02-19 20:02:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (106,NULL,10,'Subject for Pledge Acknowledgment','2022-03-24 23:22:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (107,NULL,9,'Subject for Tell a Friend','2022-01-05 09:37:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (108,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 16:22:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (109,NULL,10,'Subject for Pledge Acknowledgment','2022-04-09 18:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (110,NULL,10,'Subject for Pledge Acknowledgment','2021-10-29 21:32:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (111,NULL,9,'Subject for Tell a Friend','2022-05-24 13:57:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (112,NULL,9,'Subject for Tell a Friend','2022-01-09 12:36:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (113,NULL,9,'Subject for Tell a Friend','2022-06-20 13:53:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (114,NULL,10,'Subject for Pledge Acknowledgment','2021-07-26 03:55:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (115,NULL,10,'Subject for Pledge Acknowledgment','2021-10-26 09:42:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (116,NULL,9,'Subject for Tell a Friend','2022-03-15 17:49:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (117,NULL,9,'Subject for Tell a Friend','2021-08-18 07:49:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (118,NULL,10,'Subject for Pledge Acknowledgment','2022-03-13 09:39:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (119,NULL,10,'Subject for Pledge Acknowledgment','2022-06-03 03:30:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (120,NULL,9,'Subject for Tell a Friend','2022-03-10 11:46:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (121,NULL,9,'Subject for Tell a Friend','2022-03-17 03:51:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (122,NULL,10,'Subject for Pledge Acknowledgment','2021-08-07 09:09:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (123,NULL,9,'Subject for Tell a Friend','2022-01-29 07:02:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (124,NULL,9,'Subject for Tell a Friend','2021-07-13 10:33:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (125,NULL,9,'Subject for Tell a Friend','2022-04-27 02:05:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (126,NULL,9,'Subject for Tell a Friend','2021-10-11 17:14:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (127,NULL,10,'Subject for Pledge Acknowledgment','2021-10-11 00:10:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (128,NULL,10,'Subject for Pledge Acknowledgment','2022-01-30 14:33:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (129,NULL,10,'Subject for Pledge Acknowledgment','2022-03-20 23:41:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (130,NULL,9,'Subject for Tell a Friend','2022-01-12 03:35:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (131,NULL,9,'Subject for Tell a Friend','2022-02-08 00:14:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (132,NULL,10,'Subject for Pledge Acknowledgment','2021-08-04 06:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (133,NULL,10,'Subject for Pledge Acknowledgment','2022-03-28 17:43:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (134,NULL,9,'Subject for Tell a Friend','2022-03-17 11:39:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (135,NULL,10,'Subject for Pledge Acknowledgment','2022-01-11 13:16:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (136,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 01:58:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (137,NULL,9,'Subject for Tell a Friend','2021-10-07 10:02:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (138,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 06:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (139,NULL,9,'Subject for Tell a Friend','2022-05-11 16:13:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (140,NULL,9,'Subject for Tell a Friend','2022-01-06 14:41:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (141,NULL,10,'Subject for Pledge Acknowledgment','2022-01-10 03:54:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (142,NULL,10,'Subject for Pledge Acknowledgment','2022-01-27 18:30:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (143,NULL,10,'Subject for Pledge Acknowledgment','2022-03-31 18:56:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (144,NULL,9,'Subject for Tell a Friend','2021-11-23 20:52:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (145,NULL,9,'Subject for Tell a Friend','2021-08-18 22:09:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (146,NULL,10,'Subject for Pledge Acknowledgment','2022-04-28 14:42:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (147,NULL,9,'Subject for Tell a Friend','2021-09-26 19:27:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (148,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 11:12:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (149,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 20:50:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (150,NULL,9,'Subject for Tell a Friend','2021-12-08 04:45:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (151,NULL,9,'Subject for Tell a Friend','2022-05-17 08:08:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (152,NULL,9,'Subject for Tell a Friend','2022-01-20 17:42:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (153,NULL,10,'Subject for Pledge Acknowledgment','2022-01-19 04:21:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (154,NULL,10,'Subject for Pledge Acknowledgment','2022-05-26 17:44:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (155,NULL,9,'Subject for Tell a Friend','2022-03-10 11:18:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (156,NULL,9,'Subject for Tell a Friend','2022-01-28 21:31:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (157,NULL,9,'Subject for Tell a Friend','2021-11-15 07:03:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (158,NULL,9,'Subject for Tell a Friend','2021-10-11 17:49:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (159,NULL,9,'Subject for Tell a Friend','2021-11-27 07:54:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (160,NULL,9,'Subject for Tell a Friend','2022-01-28 04:20:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (161,NULL,10,'Subject for Pledge Acknowledgment','2022-05-15 01:12:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (162,NULL,10,'Subject for Pledge Acknowledgment','2022-04-10 23:43:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (163,NULL,9,'Subject for Tell a Friend','2022-04-11 12:22:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (164,NULL,9,'Subject for Tell a Friend','2022-06-14 20:54:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (165,NULL,9,'Subject for Tell a Friend','2021-11-11 17:40:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (166,NULL,10,'Subject for Pledge Acknowledgment','2022-06-14 20:10:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (167,NULL,9,'Subject for Tell a Friend','2022-03-05 14:00:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (168,NULL,10,'Subject for Pledge Acknowledgment','2022-06-15 01:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (169,NULL,9,'Subject for Tell a Friend','2021-07-03 07:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (170,NULL,9,'Subject for Tell a Friend','2021-09-11 07:01:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (171,NULL,10,'Subject for Pledge Acknowledgment','2022-02-01 03:32:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (172,NULL,10,'Subject for Pledge Acknowledgment','2022-05-10 13:48:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (173,NULL,9,'Subject for Tell a Friend','2021-06-29 13:41:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (174,NULL,9,'Subject for Tell a Friend','2022-05-14 00:43:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (175,NULL,9,'Subject for Tell a Friend','2021-12-01 01:22:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (176,NULL,9,'Subject for Tell a Friend','2022-01-15 19:24:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (177,NULL,10,'Subject for Pledge Acknowledgment','2021-10-23 23:10:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (178,NULL,9,'Subject for Tell a Friend','2022-04-16 09:04:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (179,NULL,9,'Subject for Tell a Friend','2021-07-04 16:29:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (180,NULL,10,'Subject for Pledge Acknowledgment','2022-04-07 03:30:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (181,NULL,10,'Subject for Pledge Acknowledgment','2021-09-29 04:39:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (182,NULL,10,'Subject for Pledge Acknowledgment','2022-05-16 05:54:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (183,NULL,9,'Subject for Tell a Friend','2022-01-06 06:47:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (184,NULL,9,'Subject for Tell a Friend','2022-06-19 05:25:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (185,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 16:07:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (186,NULL,9,'Subject for Tell a Friend','2021-12-13 02:18:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (187,NULL,9,'Subject for Tell a Friend','2021-10-12 19:41:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (188,NULL,9,'Subject for Tell a Friend','2022-05-27 04:19:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (189,NULL,9,'Subject for Tell a Friend','2022-03-12 09:13:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (190,NULL,10,'Subject for Pledge Acknowledgment','2021-11-23 19:23:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (191,NULL,10,'Subject for Pledge Acknowledgment','2022-05-09 18:13:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (192,NULL,9,'Subject for Tell a Friend','2021-10-27 20:34:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (193,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 12:21:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (194,NULL,10,'Subject for Pledge Acknowledgment','2022-06-16 11:35:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (195,NULL,10,'Subject for Pledge Acknowledgment','2022-05-07 14:17:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (196,NULL,9,'Subject for Tell a Friend','2021-09-12 06:58:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (197,NULL,10,'Subject for Pledge Acknowledgment','2022-01-10 23:13:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (198,NULL,10,'Subject for Pledge Acknowledgment','2021-07-04 13:50:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (199,NULL,10,'Subject for Pledge Acknowledgment','2021-10-21 13:06:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (200,NULL,9,'Subject for Tell a Friend','2021-11-23 06:40:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (201,NULL,9,'Subject for Tell a Friend','2021-12-15 21:36:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (202,NULL,9,'Subject for Tell a Friend','2021-10-16 15:30:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (203,NULL,9,'Subject for Tell a Friend','2021-07-06 11:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (204,NULL,9,'Subject for Tell a Friend','2021-07-10 20:11:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (205,NULL,9,'Subject for Tell a Friend','2022-04-04 07:05:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (206,NULL,9,'Subject for Tell a Friend','2022-05-29 17:18:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (207,NULL,10,'Subject for Pledge Acknowledgment','2022-01-03 23:25:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (208,NULL,9,'Subject for Tell a Friend','2021-08-03 06:59:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (209,NULL,10,'Subject for Pledge Acknowledgment','2021-09-15 15:22:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (210,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 05:25:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (211,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 14:07:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (212,NULL,9,'Subject for Tell a Friend','2021-10-17 18:19:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (213,NULL,9,'Subject for Tell a Friend','2021-09-25 17:22:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (214,NULL,9,'Subject for Tell a Friend','2022-02-16 13:52:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (215,NULL,9,'Subject for Tell a Friend','2022-06-14 22:57:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (216,NULL,9,'Subject for Tell a Friend','2021-08-22 10:13:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (217,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 17:20:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (218,NULL,10,'Subject for Pledge Acknowledgment','2021-12-01 06:26:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (219,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 22:58:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (220,NULL,9,'Subject for Tell a Friend','2021-09-01 13:44:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (221,NULL,10,'Subject for Pledge Acknowledgment','2021-10-18 17:06:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (222,NULL,10,'Subject for Pledge Acknowledgment','2021-12-15 01:15:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (223,NULL,9,'Subject for Tell a Friend','2022-02-19 17:01:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (224,NULL,10,'Subject for Pledge Acknowledgment','2022-05-02 21:57:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (225,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 12:44:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (226,NULL,9,'Subject for Tell a Friend','2021-06-28 02:47:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (227,NULL,10,'Subject for Pledge Acknowledgment','2022-05-05 15:59:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (228,NULL,9,'Subject for Tell a Friend','2022-03-13 22:56:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (229,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 01:34:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (230,NULL,9,'Subject for Tell a Friend','2022-03-29 21:06:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (231,NULL,10,'Subject for Pledge Acknowledgment','2022-03-22 07:20:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (232,NULL,10,'Subject for Pledge Acknowledgment','2021-08-24 16:54:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (233,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 12:03:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (234,NULL,10,'Subject for Pledge Acknowledgment','2021-10-14 12:36:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (235,NULL,9,'Subject for Tell a Friend','2021-11-20 22:16:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (236,NULL,9,'Subject for Tell a Friend','2022-05-08 02:00:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (237,NULL,10,'Subject for Pledge Acknowledgment','2022-03-27 13:31:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (238,NULL,9,'Subject for Tell a Friend','2021-10-15 06:07:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (239,NULL,10,'Subject for Pledge Acknowledgment','2021-09-25 07:59:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (240,NULL,9,'Subject for Tell a Friend','2021-10-30 14:35:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (241,NULL,9,'Subject for Tell a Friend','2021-07-17 22:25:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (242,NULL,10,'Subject for Pledge Acknowledgment','2022-04-08 06:47:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (243,NULL,10,'Subject for Pledge Acknowledgment','2022-01-25 17:44:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (244,NULL,10,'Subject for Pledge Acknowledgment','2021-06-28 23:59:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (245,NULL,9,'Subject for Tell a Friend','2022-06-17 20:34:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (246,NULL,9,'Subject for Tell a Friend','2021-08-07 08:26:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (247,NULL,9,'Subject for Tell a Friend','2021-08-06 13:59:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (248,NULL,9,'Subject for Tell a Friend','2021-11-09 07:31:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (249,NULL,10,'Subject for Pledge Acknowledgment','2021-12-28 22:30:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (250,NULL,10,'Subject for Pledge Acknowledgment','2022-04-22 07:18:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (251,NULL,9,'Subject for Tell a Friend','2022-02-26 09:43:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (252,NULL,10,'Subject for Pledge Acknowledgment','2021-11-09 06:04:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (253,NULL,10,'Subject for Pledge Acknowledgment','2021-09-25 23:18:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (254,NULL,9,'Subject for Tell a Friend','2021-08-31 20:56:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (255,NULL,9,'Subject for Tell a Friend','2022-05-23 10:45:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (256,NULL,9,'Subject for Tell a Friend','2022-02-28 01:04:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (257,NULL,9,'Subject for Tell a Friend','2022-03-09 00:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (258,NULL,9,'Subject for Tell a Friend','2022-01-08 16:07:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (259,NULL,9,'Subject for Tell a Friend','2021-06-30 07:56:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (260,NULL,10,'Subject for Pledge Acknowledgment','2022-01-28 01:37:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (261,NULL,9,'Subject for Tell a Friend','2022-05-03 09:25:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (262,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 04:18:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (263,NULL,10,'Subject for Pledge Acknowledgment','2022-06-04 09:34:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (264,NULL,10,'Subject for Pledge Acknowledgment','2022-02-19 16:12:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (265,NULL,10,'Subject for Pledge Acknowledgment','2021-08-09 00:53:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (266,NULL,9,'Subject for Tell a Friend','2022-03-17 09:49:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (267,NULL,10,'Subject for Pledge Acknowledgment','2021-11-22 15:12:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (268,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 15:10:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (269,NULL,10,'Subject for Pledge Acknowledgment','2022-04-08 08:55:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (270,NULL,9,'Subject for Tell a Friend','2022-06-16 08:09:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (271,NULL,9,'Subject for Tell a Friend','2021-11-05 19:30:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (272,NULL,9,'Subject for Tell a Friend','2021-09-28 05:07:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (273,NULL,9,'Subject for Tell a Friend','2022-06-19 12:23:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (274,NULL,10,'Subject for Pledge Acknowledgment','2021-12-23 10:12:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (275,NULL,10,'Subject for Pledge Acknowledgment','2021-12-14 14:17:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (276,NULL,10,'Subject for Pledge Acknowledgment','2021-09-10 16:33:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (277,NULL,9,'Subject for Tell a Friend','2021-07-29 17:33:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (278,NULL,9,'Subject for Tell a Friend','2021-06-29 12:04:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (279,NULL,10,'Subject for Pledge Acknowledgment','2022-01-17 15:06:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (280,NULL,10,'Subject for Pledge Acknowledgment','2022-05-04 12:26:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (281,NULL,10,'Subject for Pledge Acknowledgment','2021-11-06 17:09:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (282,NULL,9,'Subject for Tell a Friend','2022-01-17 07:48:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (283,NULL,9,'Subject for Tell a Friend','2021-07-21 09:01:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (284,NULL,9,'Subject for Tell a Friend','2021-08-02 06:34:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (285,NULL,10,'Subject for Pledge Acknowledgment','2022-03-29 12:55:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (286,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 16:20:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (287,NULL,9,'Subject for Tell a Friend','2021-09-17 09:13:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (288,NULL,10,'Subject for Pledge Acknowledgment','2022-04-06 02:21:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (289,NULL,10,'Subject for Pledge Acknowledgment','2022-05-23 22:19:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (290,NULL,9,'Subject for Tell a Friend','2022-05-07 17:59:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (291,NULL,9,'Subject for Tell a Friend','2022-02-15 19:58:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (292,NULL,10,'Subject for Pledge Acknowledgment','2022-05-22 23:05:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (293,NULL,10,'Subject for Pledge Acknowledgment','2021-09-06 00:17:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (294,NULL,9,'Subject for Tell a Friend','2021-08-22 06:36:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (295,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 16:10:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (296,NULL,9,'Subject for Tell a Friend','2021-08-17 22:23:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (297,NULL,9,'Subject for Tell a Friend','2022-06-05 14:47:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (298,NULL,10,'Subject for Pledge Acknowledgment','2021-10-10 18:29:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (299,NULL,9,'Subject for Tell a Friend','2022-02-18 06:10:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (300,NULL,9,'Subject for Tell a Friend','2022-05-12 18:33:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (301,NULL,9,'Subject for Tell a Friend','2021-07-31 00:58:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (302,NULL,9,'Subject for Tell a Friend','2021-11-23 03:10:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (303,NULL,9,'Subject for Tell a Friend','2022-01-02 22:09:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (304,NULL,9,'Subject for Tell a Friend','2021-09-24 06:06:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (305,NULL,10,'Subject for Pledge Acknowledgment','2021-07-08 18:56:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (306,NULL,9,'Subject for Tell a Friend','2021-07-12 09:51:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (307,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 21:04:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (308,NULL,10,'Subject for Pledge Acknowledgment','2021-12-01 04:29:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (309,NULL,10,'Subject for Pledge Acknowledgment','2022-06-04 17:40:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (310,NULL,9,'Subject for Tell a Friend','2021-09-26 20:05:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (311,NULL,9,'Subject for Tell a Friend','2021-06-25 02:27:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (312,NULL,9,'Subject for Tell a Friend','2021-06-26 23:17:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (313,NULL,9,'Subject for Tell a Friend','2021-09-27 20:48:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (314,NULL,9,'Subject for Tell a Friend','2021-09-15 23:09:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (315,NULL,9,'Subject for Tell a Friend','2022-06-09 02:53:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (316,NULL,9,'Subject for Tell a Friend','2022-04-07 20:42:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (317,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 17:25:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (318,NULL,9,'Subject for Tell a Friend','2022-05-15 15:19:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (319,NULL,10,'Subject for Pledge Acknowledgment','2021-09-06 14:55:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (320,NULL,10,'Subject for Pledge Acknowledgment','2021-12-09 20:58:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (321,NULL,9,'Subject for Tell a Friend','2021-12-17 03:58:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (322,NULL,9,'Subject for Tell a Friend','2021-08-02 17:28:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (323,NULL,10,'Subject for Pledge Acknowledgment','2022-06-06 03:31:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (324,NULL,10,'Subject for Pledge Acknowledgment','2022-02-03 15:01:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (325,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 23:06:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (326,NULL,10,'Subject for Pledge Acknowledgment','2021-09-25 02:05:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (327,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 11:07:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (328,NULL,10,'Subject for Pledge Acknowledgment','2021-08-15 04:47:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (329,NULL,9,'Subject for Tell a Friend','2022-03-16 11:52:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (330,NULL,9,'Subject for Tell a Friend','2021-08-13 15:57:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (331,NULL,10,'Subject for Pledge Acknowledgment','2021-08-30 10:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (332,NULL,9,'Subject for Tell a Friend','2021-11-27 12:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (333,NULL,9,'Subject for Tell a Friend','2022-01-26 04:13:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (334,NULL,9,'Subject for Tell a Friend','2022-05-20 10:48:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (335,NULL,9,'Subject for Tell a Friend','2021-11-14 06:50:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (336,NULL,9,'Subject for Tell a Friend','2021-11-01 07:45:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (337,NULL,10,'Subject for Pledge Acknowledgment','2021-12-04 23:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (338,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 21:03:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (339,NULL,9,'Subject for Tell a Friend','2022-04-21 17:50:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (340,NULL,10,'Subject for Pledge Acknowledgment','2021-10-31 18:35:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (341,NULL,9,'Subject for Tell a Friend','2022-04-02 20:11:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (342,NULL,9,'Subject for Tell a Friend','2022-06-08 07:50:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (343,NULL,9,'Subject for Tell a Friend','2021-09-03 00:04:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (344,NULL,9,'Subject for Tell a Friend','2021-08-05 21:37:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (345,NULL,10,'Subject for Pledge Acknowledgment','2022-01-02 16:30:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (346,NULL,9,'Subject for Tell a Friend','2022-03-04 05:41:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (347,NULL,10,'Subject for Pledge Acknowledgment','2021-07-26 07:36:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (348,NULL,9,'Subject for Tell a Friend','2022-02-01 22:29:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (349,NULL,10,'Subject for Pledge Acknowledgment','2021-09-08 14:00:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (350,NULL,10,'Subject for Pledge Acknowledgment','2021-09-20 09:00:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (351,NULL,10,'Subject for Pledge Acknowledgment','2021-08-21 21:51:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (352,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 13:58:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (353,NULL,9,'Subject for Tell a Friend','2021-12-30 22:05:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (354,NULL,9,'Subject for Tell a Friend','2021-11-28 06:55:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (355,NULL,9,'Subject for Tell a Friend','2021-09-26 03:14:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (356,NULL,10,'Subject for Pledge Acknowledgment','2021-10-20 20:06:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (357,NULL,10,'Subject for Pledge Acknowledgment','2021-08-10 07:07:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (358,NULL,9,'Subject for Tell a Friend','2022-01-21 04:19:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (359,NULL,10,'Subject for Pledge Acknowledgment','2021-09-24 12:33:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (360,NULL,9,'Subject for Tell a Friend','2021-07-12 00:30:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (361,NULL,10,'Subject for Pledge Acknowledgment','2021-10-10 18:58:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (362,NULL,9,'Subject for Tell a Friend','2021-10-19 17:04:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (363,NULL,9,'Subject for Tell a Friend','2021-09-14 06:44:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (364,NULL,10,'Subject for Pledge Acknowledgment','2021-07-12 14:10:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (365,NULL,9,'Subject for Tell a Friend','2021-08-04 09:14:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (366,NULL,9,'Subject for Tell a Friend','2021-09-11 05:52:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (367,NULL,9,'Subject for Tell a Friend','2021-11-19 02:01:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (368,NULL,9,'Subject for Tell a Friend','2022-03-23 18:36:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (369,NULL,9,'Subject for Tell a Friend','2021-07-10 05:40:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (370,NULL,9,'Subject for Tell a Friend','2021-07-22 17:25:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (371,NULL,9,'Subject for Tell a Friend','2021-07-05 22:00:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (372,NULL,10,'Subject for Pledge Acknowledgment','2022-04-16 07:44:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (373,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 15:15:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (374,NULL,10,'Subject for Pledge Acknowledgment','2022-02-28 10:41:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (375,NULL,9,'Subject for Tell a Friend','2022-06-20 17:29:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (376,NULL,10,'Subject for Pledge Acknowledgment','2022-05-18 07:57:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (377,NULL,9,'Subject for Tell a Friend','2022-03-02 20:16:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (378,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 12:15:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (379,NULL,10,'Subject for Pledge Acknowledgment','2022-06-09 07:08:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (380,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 15:29:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (381,NULL,9,'Subject for Tell a Friend','2022-01-06 05:24:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (382,NULL,9,'Subject for Tell a Friend','2021-10-15 16:04:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (383,NULL,10,'Subject for Pledge Acknowledgment','2021-12-01 02:38:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (384,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 19:11:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (385,NULL,10,'Subject for Pledge Acknowledgment','2021-11-29 03:23:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (386,NULL,10,'Subject for Pledge Acknowledgment','2021-12-16 04:31:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (387,NULL,10,'Subject for Pledge Acknowledgment','2022-01-01 10:10:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (388,NULL,10,'Subject for Pledge Acknowledgment','2021-10-24 10:01:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (389,NULL,10,'Subject for Pledge Acknowledgment','2022-03-09 00:00:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (390,NULL,10,'Subject for Pledge Acknowledgment','2021-08-31 01:01:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (391,NULL,9,'Subject for Tell a Friend','2022-06-14 03:38:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (392,NULL,9,'Subject for Tell a Friend','2021-08-13 15:20:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (393,NULL,9,'Subject for Tell a Friend','2022-01-07 15:37:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (394,NULL,9,'Subject for Tell a Friend','2022-02-05 23:29:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (395,NULL,9,'Subject for Tell a Friend','2021-08-07 08:38:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (396,NULL,9,'Subject for Tell a Friend','2021-08-08 04:20:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (397,NULL,9,'Subject for Tell a Friend','2021-07-10 19:55:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (398,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 01:05:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (399,NULL,9,'Subject for Tell a Friend','2022-04-08 03:43:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (400,NULL,9,'Subject for Tell a Friend','2022-01-14 09:18:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (401,NULL,10,'Subject for Pledge Acknowledgment','2021-10-15 15:23:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (402,NULL,10,'Subject for Pledge Acknowledgment','2022-03-08 01:11:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (403,NULL,10,'Subject for Pledge Acknowledgment','2021-07-12 02:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (404,NULL,10,'Subject for Pledge Acknowledgment','2022-04-18 13:34:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (405,NULL,10,'Subject for Pledge Acknowledgment','2022-02-03 03:41:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (406,NULL,10,'Subject for Pledge Acknowledgment','2021-12-25 18:58:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (407,NULL,9,'Subject for Tell a Friend','2022-01-28 08:12:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (408,NULL,10,'Subject for Pledge Acknowledgment','2021-12-13 17:46:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (409,NULL,9,'Subject for Tell a Friend','2022-03-01 19:28:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (410,NULL,9,'Subject for Tell a Friend','2021-11-02 02:55:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (411,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 20:51:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (412,NULL,9,'Subject for Tell a Friend','2022-06-22 04:17:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (413,NULL,9,'Subject for Tell a Friend','2022-01-07 05:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (414,NULL,9,'Subject for Tell a Friend','2022-02-22 19:49:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (415,NULL,9,'Subject for Tell a Friend','2022-03-22 13:50:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (416,NULL,10,'Subject for Pledge Acknowledgment','2021-09-21 23:29:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (417,NULL,9,'Subject for Tell a Friend','2022-03-16 11:31:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (418,NULL,9,'Subject for Tell a Friend','2021-11-06 12:55:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (419,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 09:17:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (420,NULL,10,'Subject for Pledge Acknowledgment','2021-08-18 11:58:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (421,NULL,9,'Subject for Tell a Friend','2022-04-21 04:20:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (422,NULL,10,'Subject for Pledge Acknowledgment','2022-03-16 06:08:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (423,NULL,10,'Subject for Pledge Acknowledgment','2022-06-11 11:23:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (424,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 12:18:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (425,NULL,10,'Subject for Pledge Acknowledgment','2022-06-17 00:52:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (426,NULL,10,'Subject for Pledge Acknowledgment','2022-03-03 21:46:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (427,NULL,9,'Subject for Tell a Friend','2022-02-26 21:57:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (428,NULL,10,'Subject for Pledge Acknowledgment','2022-01-29 04:22:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (429,NULL,10,'Subject for Pledge Acknowledgment','2021-12-24 20:56:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (430,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 00:57:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (431,NULL,9,'Subject for Tell a Friend','2021-11-27 00:57:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (432,NULL,9,'Subject for Tell a Friend','2021-09-05 15:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (433,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 06:13:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (434,NULL,10,'Subject for Pledge Acknowledgment','2021-07-12 03:30:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (435,NULL,10,'Subject for Pledge Acknowledgment','2022-02-02 23:29:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (436,NULL,9,'Subject for Tell a Friend','2022-06-02 03:37:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (437,NULL,9,'Subject for Tell a Friend','2021-07-03 00:41:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (438,NULL,10,'Subject for Pledge Acknowledgment','2022-05-08 06:42:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (439,NULL,9,'Subject for Tell a Friend','2022-01-26 09:56:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (440,NULL,9,'Subject for Tell a Friend','2022-04-02 07:38:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (441,NULL,10,'Subject for Pledge Acknowledgment','2022-04-26 04:20:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (442,NULL,9,'Subject for Tell a Friend','2022-01-22 19:02:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (443,NULL,10,'Subject for Pledge Acknowledgment','2021-12-06 01:32:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (444,NULL,10,'Subject for Pledge Acknowledgment','2022-03-10 11:00:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (445,NULL,9,'Subject for Tell a Friend','2021-09-08 02:47:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (446,NULL,10,'Subject for Pledge Acknowledgment','2022-04-03 17:25:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (447,NULL,9,'Subject for Tell a Friend','2022-05-21 13:51:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (448,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 06:49:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (449,NULL,9,'Subject for Tell a Friend','2022-06-11 18:30:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (450,NULL,9,'Subject for Tell a Friend','2022-03-24 17:42:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (451,1,6,'$ 125 April Mailer 1','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (452,2,6,'$ 50 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (453,3,6,'£ 25 April Mailer 1','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (454,4,6,'$ 50 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (455,5,6,'$ 50 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (456,6,6,'$ 500 April Mailer 1','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (457,7,6,'$ 1750 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (458,8,6,'$ 50 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (459,9,6,'$ 10 Online: Help CiviCRM','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (460,10,6,'$ 250 Online: Help CiviCRM','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (461,11,6,'Â¥ 500 ','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (462,12,6,'$ 50 Online: Save the Penguins','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (463,13,6,'$ 50 ','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (464,14,6,'$ 50 ','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (465,15,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (466,16,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (467,17,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (468,18,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (469,19,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (470,20,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (471,21,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (472,22,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (473,23,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (474,24,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (475,25,6,'$ 25 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (476,26,6,'$ 10 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (477,27,6,'$ 10 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (478,28,6,'$ 10 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (479,29,6,'$ 10 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (480,30,6,'$ 10 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (481,31,6,'€ 5 Recurring contribution','2022-08-22 09:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (482,1,7,'General','2022-06-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (483,2,7,'Student','2022-06-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (484,3,7,'General','2022-06-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (485,4,7,'Student','2022-06-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (486,5,7,'Student','2021-06-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (487,6,7,'Student','2022-06-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (488,7,7,'General','2022-06-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (489,8,7,'Student','2022-06-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (490,9,7,'General','2022-06-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (491,10,7,'Student','2021-06-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (492,11,7,'Lifetime','2022-06-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (493,12,7,'Student','2022-06-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (494,13,7,'General','2022-06-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (495,14,7,'Student','2022-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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (496,15,7,'Student','2021-06-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (497,16,7,'Student','2022-06-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (498,17,7,'General','2022-06-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (499,18,7,'Student','2022-06-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (500,19,7,'General','2022-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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (501,20,7,'Student','2021-06-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (502,21,7,'General','2022-06-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (503,22,7,'Lifetime','2022-06-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (504,23,7,'General','2022-05-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (505,24,7,'Student','2022-05-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (506,25,7,'Student','2021-05-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (507,26,7,'Student','2022-05-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (508,27,7,'General','2022-05-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (509,28,7,'Student','2022-05-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (510,29,7,'General','2022-05-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (511,30,7,'Student','2021-05-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (512,32,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (513,33,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (514,34,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (515,35,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (516,36,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (517,37,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (518,38,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (519,39,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (520,40,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (521,41,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (523,43,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (524,44,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (525,45,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (526,46,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (527,47,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (528,48,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (529,49,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (530,50,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (531,51,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (532,52,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (533,53,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (534,54,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (535,55,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (536,56,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (537,57,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (538,58,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (539,59,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (540,60,6,'$ 100.00 - General Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (541,61,6,'$ 50.00 - Student Membership: Offline signup','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (543,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (544,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (545,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (546,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (547,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (548,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (549,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (550,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (551,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (552,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (553,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (554,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (555,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (556,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (557,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (558,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (559,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (560,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (561,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (562,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (563,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (564,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (565,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (566,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (567,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (568,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (569,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (570,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (571,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (572,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (573,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (574,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (575,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (576,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (577,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (578,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (579,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (580,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (581,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (582,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (583,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (584,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (585,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (586,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (587,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (588,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (589,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (590,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (591,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (592,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,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (595,65,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (605,75,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (606,76,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (608,78,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (612,82,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (617,87,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (618,88,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (619,89,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (620,90,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (621,91,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (622,92,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (624,94,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (625,95,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (626,96,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (627,97,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (628,98,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (629,99,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (630,100,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (631,101,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (632,102,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (633,103,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (634,104,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (635,105,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (636,106,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (637,107,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (638,108,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (639,109,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (640,110,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (641,111,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'), + (642,112,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-06-22 09:51:54',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-06-22 13:51:54','2022-06-22 13:51:54'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -812,825 +812,828 @@ 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 - (227,148,1,3), - (446,300,1,3), - (437,294,2,3), - (679,451,2,2), - (409,270,3,3), - (653,434,3,3), - (773,545,3,2), - (575,384,4,3), - (680,452,4,2), - (683,455,4,2), - (211,138,5,3), - (407,269,5,3), - (718,490,5,2), - (740,520,5,2), - (119,78,6,3), - (630,417,6,3), - (681,453,6,2), - (714,486,6,2), - (741,516,6,2), - (466,313,7,3), - (658,437,7,3), - (663,440,7,3), - (810,582,7,2), - (377,250,8,3), - (491,328,8,3), - (582,389,8,3), - (682,454,8,2), - (40,26,9,3), - (288,193,9,3), - (361,241,9,3), - (392,260,9,3), - (514,344,9,3), - (665,441,9,3), - (394,261,10,3), - (619,411,10,3), - (785,557,10,2), - (388,258,11,3), - (459,309,11,3), - (641,425,11,3), - (76,50,12,3), - (159,104,12,3), - (198,129,12,3), - (485,325,12,3), - (601,401,12,3), - (57,38,13,3), - (117,77,13,3), - (184,120,13,3), - (710,482,13,2), - (742,512,13,2), - (801,573,13,2), - (17,11,14,3), - (191,124,14,3), - (313,211,14,3), - (311,210,15,3), - (349,234,15,3), - (787,559,15,2), - (14,9,16,3), - (130,85,16,3), - (324,218,16,3), - (413,273,16,3), - (610,406,16,3), - (673,446,16,3), - (684,456,16,2), - (21,14,17,3), - (42,27,17,3), - (105,69,17,3), - (239,156,17,3), - (380,252,17,3), - (615,409,17,3), - (316,213,18,3), - (47,30,19,3), - (194,126,19,3), - (333,223,19,3), - (685,457,19,2), - (783,555,19,2), - (23,15,20,3), - (651,433,20,3), - (122,80,22,3), - (399,264,22,3), - (734,506,22,2), - (743,536,22,2), - (254,165,24,3), - (329,221,25,3), - (36,24,26,3), - (109,72,26,3), - (112,74,26,3), - (336,225,26,3), - (44,28,27,3), - (306,207,27,3), - (63,42,28,3), - (115,76,28,3), - (283,190,28,3), - (461,310,28,3), - (557,371,28,3), - (85,55,29,3), - (290,194,29,3), - (372,247,29,3), - (200,130,30,3), - (101,67,31,3), - (326,219,31,3), - (559,372,31,3), - (152,99,32,3), - (676,448,32,3), - (691,463,32,2), - (692,464,32,2), - (256,166,33,3), - (405,268,33,3), - (507,340,33,3), - (543,363,33,3), - (500,334,34,3), - (523,350,34,3), - (688,460,34,2), - (570,380,35,3), - (780,552,35,2), - (593,396,36,3), - (580,388,37,3), - (49,31,38,3), - (140,92,38,3), - (483,324,38,3), - (660,438,38,3), - (804,576,38,2), - (519,347,39,3), - (525,351,39,3), - (712,484,39,2), - (744,514,39,2), - (481,323,40,3), - (351,235,41,3), - (637,423,41,3), - (456,307,42,3), - (78,51,43,3), - (331,222,43,3), - (469,315,43,3), - (478,321,43,3), - (603,402,43,3), - (690,462,43,2), - (188,122,44,3), - (487,326,44,3), - (495,331,44,3), - (83,54,45,3), - (241,157,45,3), - (374,248,45,3), - (816,588,45,2), - (171,111,46,3), - (204,133,46,3), - (798,570,46,2), - (218,142,47,3), - (617,410,47,3), - (732,504,47,2), - (745,534,47,2), - (162,106,48,3), - (169,110,48,3), - (363,242,48,3), - (539,360,48,3), - (148,96,49,3), - (249,162,49,3), - (321,216,49,3), - (390,259,49,3), - (402,266,49,3), - (425,283,49,3), - (472,317,49,3), - (286,192,50,3), - (623,413,50,3), - (713,485,50,2), - (746,515,50,2), - (791,563,50,2), - (92,60,51,3), - (165,108,51,3), - (209,137,51,3), - (621,412,51,3), - (639,424,51,3), - (231,151,52,3), - (510,342,53,3), - (667,442,53,3), - (776,548,53,2), - (341,228,54,3), - (799,571,54,2), - (142,93,55,3), - (782,554,55,2), - (135,88,57,3), - (181,118,57,3), - (367,244,57,3), - (626,415,57,3), - (805,577,57,2), - (534,356,58,3), - (365,243,59,3), - (423,282,59,3), - (693,465,59,2), - (694,466,59,2), - (695,467,59,2), - (696,468,59,2), - (697,469,59,2), - (698,470,59,2), - (699,471,59,2), - (700,472,59,2), - (701,473,59,2), - (702,474,59,2), - (703,475,59,2), - (359,240,60,3), - (517,346,60,3), - (655,435,60,3), - (784,556,60,2), - (34,23,61,3), - (215,140,61,3), - (608,405,61,3), - (74,49,63,3), - (220,143,63,3), - (820,592,64,2), - (103,68,65,3), - (397,263,65,3), - (555,370,65,3), - (720,492,65,2), - (747,522,65,2), - (1,1,66,2), - (2,2,66,2), - (4,3,66,2), - (6,4,66,2), - (7,5,66,2), - (9,6,66,2), - (10,7,66,2), - (11,8,66,2), - (13,9,66,2), - (15,10,66,2), - (16,11,66,2), - (18,12,66,2), - (19,13,66,2), - (20,14,66,2), - (22,15,66,2), - (24,16,66,2), - (25,17,66,2), - (26,18,66,2), - (27,19,66,2), - (29,20,66,2), - (30,21,66,2), - (31,22,66,2), - (33,23,66,2), - (35,24,66,2), - (37,25,66,2), - (39,26,66,2), - (41,27,66,2), - (43,28,66,2), - (45,29,66,2), - (46,30,66,2), - (48,31,66,2), - (50,32,66,2), - (51,33,66,2), - (52,34,66,2), - (53,35,66,2), - (54,36,66,2), - (55,37,66,2), - (56,38,66,2), - (58,39,66,2), - (60,40,66,2), - (61,41,66,2), - (62,42,66,2), - (64,43,66,2), - (65,44,66,2), - (67,45,66,2), - (69,46,66,2), - (71,47,66,2), - (72,48,66,2), - (73,49,66,2), - (75,50,66,2), - (77,51,66,2), - (79,52,66,2), - (80,53,66,2), - (82,54,66,2), - (84,55,66,2), - (86,56,66,2), - (87,57,66,2), - (89,58,66,2), - (90,59,66,2), - (91,60,66,2), - (93,61,66,2), - (94,62,66,2), - (95,63,66,2), - (96,64,66,2), - (97,65,66,2), - (98,66,66,2), - (100,67,66,2), - (102,68,66,2), - (104,69,66,2), - (106,70,66,2), - (107,71,66,2), - (108,72,66,2), - (110,73,66,2), - (111,74,66,2), - (113,75,66,2), - (114,76,66,2), - (116,77,66,2), - (118,78,66,2), - (120,79,66,2), - (121,80,66,2), - (123,81,66,2), - (124,82,66,2), - (125,83,66,2), - (127,84,66,2), - (129,85,66,2), - (131,86,66,2), - (132,87,66,2), - (134,88,66,2), - (136,89,66,2), - (137,90,66,2), - (138,91,66,2), - (139,92,66,2), - (141,93,66,2), - (143,94,66,2), - (145,95,66,2), - (147,96,66,2), - (149,97,66,2), - (150,98,66,2), - (151,99,66,2), - (153,100,66,2), - (155,101,66,2), - (156,102,66,2), - (157,103,66,2), - (158,104,66,2), - (160,105,66,2), - (161,106,66,2), - (163,107,66,2), - (164,108,66,2), - (166,109,66,2), - (168,110,66,2), - (170,111,66,2), - (172,112,66,2), - (173,113,66,2), - (174,114,66,2), - (176,115,66,2), - (177,116,66,2), - (178,117,66,2), - (180,118,66,2), - (182,119,66,2), - (183,120,66,2), - (185,121,66,2), - (187,122,66,2), - (189,123,66,2), - (190,124,66,2), - (192,125,66,2), - (193,126,66,2), - (195,127,66,2), - (196,128,66,2), - (197,129,66,2), - (199,130,66,2), - (201,131,66,2), - (202,132,66,2), - (203,133,66,2), - (205,134,66,2), - (206,135,66,2), - (207,136,66,2), - (208,137,66,2), - (210,138,66,2), - (212,139,66,2), - (214,140,66,2), - (216,141,66,2), - (217,142,66,2), - (219,143,66,2), - (221,144,66,2), - (222,145,66,2), - (223,146,66,2), - (224,147,66,2), - (226,148,66,2), - (228,149,66,2), - (229,150,66,2), - (243,158,66,3), - (612,407,66,3), - (144,94,67,3), - (252,164,68,3), - (66,44,69,3), - (133,87,69,3), - (716,488,69,2), - (748,518,69,2), - (346,232,70,3), - (738,510,70,2), - (749,540,70,2), - (213,139,71,3), - (689,461,71,2), - (817,589,71,2), - (32,22,72,3), - (128,84,72,3), - (233,152,72,3), - (126,83,73,3), - (261,170,73,3), - (369,245,73,3), - (649,432,74,3), - (99,66,76,3), - (353,236,76,3), - (247,161,77,3), - (606,404,78,3), - (807,579,78,2), - (81,53,79,3), - (179,117,79,3), - (274,182,79,3), - (225,147,80,3), - (463,311,80,3), - (12,8,81,3), - (453,305,81,3), - (8,5,82,3), - (175,114,82,3), - (529,353,82,3), - (686,458,82,2), - (585,391,83,3), - (68,45,86,3), - (497,332,86,3), - (553,369,86,3), - (70,46,87,3), - (167,109,87,3), - (308,208,87,3), - (319,215,87,3), - (549,367,87,3), - (3,2,88,3), - (567,378,88,3), - (722,494,88,2), - (750,524,88,2), - (302,204,89,3), - (527,352,90,3), - (531,354,90,3), - (146,95,91,3), - (628,416,91,3), - (669,443,91,3), - (771,543,91,2), - (28,19,92,3), - (476,320,92,3), - (687,459,92,2), - (818,590,93,2), - (38,25,94,3), - (339,227,94,3), - (441,296,94,3), - (451,304,94,3), - (587,392,94,3), - (591,395,94,3), - (715,487,94,2), - (751,517,94,2), - (815,587,94,2), - (5,3,95,3), - (355,237,95,3), - (551,368,95,3), - (597,399,95,3), - (88,57,96,3), - (236,154,96,3), - (439,295,96,3), - (489,327,96,3), - (154,100,97,3), - (733,505,97,2), - (752,535,97,2), - (186,121,98,3), - (383,254,98,3), - (512,343,98,3), - (546,365,98,3), - (704,476,99,2), - (705,477,99,2), - (706,478,99,2), - (707,479,99,2), - (708,480,99,2), - (561,373,100,3), - (793,565,100,2), - (59,39,101,3), - (292,195,101,3), - (599,400,101,3), - (709,481,103,2), - (812,584,104,2), - (721,493,106,2), - (753,523,106,2), - (778,550,106,2), - (796,568,111,2), - (779,551,112,2), - (230,151,115,2), - (232,152,115,2), - (234,153,115,2), - (235,154,115,2), - (237,155,115,2), - (238,156,115,2), - (240,157,115,2), - (242,158,115,2), - (244,159,115,2), - (245,160,115,2), - (246,161,115,2), - (248,162,115,2), - (250,163,115,2), - (251,164,115,2), - (253,165,115,2), - (255,166,115,2), - (257,167,115,2), - (258,168,115,2), - (259,169,115,2), - (260,170,115,2), - (262,171,115,2), - (263,172,115,2), - (264,173,115,2), - (265,174,115,2), - (266,175,115,2), - (267,176,115,2), - (268,177,115,2), - (269,178,115,2), - (270,179,115,2), - (271,180,115,2), - (272,181,115,2), - (273,182,115,2), - (275,183,115,2), - (276,184,115,2), - (277,185,115,2), - (278,186,115,2), - (279,187,115,2), - (280,188,115,2), - (281,189,115,2), - (282,190,115,2), - (284,191,115,2), - (285,192,115,2), - (287,193,115,2), - (289,194,115,2), - (291,195,115,2), - (293,196,115,2), - (294,197,115,2), - (295,198,115,2), - (296,199,115,2), - (297,200,115,2), - (298,201,115,2), - (299,202,115,2), - (300,203,115,2), - (301,204,115,2), - (303,205,115,2), - (304,206,115,2), - (305,207,115,2), - (307,208,115,2), - (309,209,115,2), - (310,210,115,2), - (312,211,115,2), - (314,212,115,2), - (315,213,115,2), - (317,214,115,2), - (318,215,115,2), - (320,216,115,2), - (322,217,115,2), - (323,218,115,2), - (325,219,115,2), - (327,220,115,2), - (328,221,115,2), - (330,222,115,2), - (332,223,115,2), - (334,224,115,2), - (335,225,115,2), - (337,226,115,2), - (338,227,115,2), - (340,228,115,2), - (342,229,115,2), - (343,230,115,2), - (344,231,115,2), - (345,232,115,2), - (347,233,115,2), - (348,234,115,2), - (350,235,115,2), - (352,236,115,2), - (354,237,115,2), - (356,238,115,2), - (357,239,115,2), - (358,240,115,2), - (360,241,115,2), - (362,242,115,2), - (364,243,115,2), - (366,244,115,2), - (368,245,115,2), - (370,246,115,2), - (371,247,115,2), - (373,248,115,2), - (375,249,115,2), - (376,250,115,2), - (378,251,115,2), - (379,252,115,2), - (381,253,115,2), - (382,254,115,2), - (384,255,115,2), - (385,256,115,2), - (386,257,115,2), - (387,258,115,2), - (389,259,115,2), - (391,260,115,2), - (393,261,115,2), - (395,262,115,2), - (396,263,115,2), - (398,264,115,2), - (400,265,115,2), - (401,266,115,2), - (403,267,115,2), - (404,268,115,2), - (406,269,115,2), - (408,270,115,2), - (410,271,115,2), - (411,272,115,2), - (412,273,115,2), - (414,274,115,2), - (415,275,115,2), - (416,276,115,2), - (417,277,115,2), - (418,278,115,2), - (419,279,115,2), - (420,280,115,2), - (421,281,115,2), - (422,282,115,2), - (424,283,115,2), - (426,284,115,2), - (427,285,115,2), - (428,286,115,2), - (429,287,115,2), - (430,288,115,2), - (431,289,115,2), - (432,290,115,2), - (433,291,115,2), - (434,292,115,2), - (435,293,115,2), - (436,294,115,2), - (438,295,115,2), - (440,296,115,2), - (442,297,115,2), - (443,298,115,2), - (444,299,115,2), - (445,300,115,2), - (774,546,116,2), - (814,586,117,2), - (711,483,121,2), - (754,513,121,2), - (723,495,125,2), - (755,525,125,2), - (795,567,125,2), - (806,578,128,2), - (797,569,130,2), - (447,301,132,2), - (448,302,132,2), - (449,303,132,2), - (450,304,132,2), - (452,305,132,2), - (454,306,132,2), - (455,307,132,2), - (457,308,132,2), - (458,309,132,2), - (460,310,132,2), - (462,311,132,2), - (464,312,132,2), - (465,313,132,2), - (467,314,132,2), - (468,315,132,2), - (470,316,132,2), - (471,317,132,2), - (473,318,132,2), - (474,319,132,2), - (475,320,132,2), - (477,321,132,2), - (479,322,132,2), - (480,323,132,2), - (482,324,132,2), - (484,325,132,2), - (486,326,132,2), - (488,327,132,2), - (490,328,132,2), - (492,329,132,2), - (493,330,132,2), - (494,331,132,2), - (496,332,132,2), - (498,333,132,2), - (499,334,132,2), - (501,335,132,2), - (502,336,132,2), - (503,337,132,2), - (504,338,132,2), - (505,339,132,2), - (506,340,132,2), - (508,341,132,2), - (509,342,132,2), - (511,343,132,2), - (513,344,132,2), - (515,345,132,2), - (516,346,132,2), - (518,347,132,2), - (520,348,132,2), - (521,349,132,2), - (522,350,132,2), - (524,351,132,2), - (526,352,132,2), - (528,353,132,2), - (530,354,132,2), - (532,355,132,2), - (533,356,132,2), - (535,357,132,2), - (536,358,132,2), - (537,359,132,2), - (538,360,132,2), - (540,361,132,2), - (541,362,132,2), - (542,363,132,2), - (544,364,132,2), - (545,365,132,2), - (547,366,132,2), - (548,367,132,2), - (550,368,132,2), - (552,369,132,2), - (554,370,132,2), - (556,371,132,2), - (558,372,132,2), - (560,373,132,2), - (562,374,132,2), - (563,375,132,2), - (564,376,132,2), - (565,377,132,2), - (566,378,132,2), - (568,379,132,2), - (569,380,132,2), - (571,381,132,2), - (572,382,132,2), - (573,383,132,2), - (574,384,132,2), - (576,385,132,2), - (577,386,132,2), - (578,387,132,2), - (579,388,132,2), - (581,389,132,2), - (583,390,132,2), - (584,391,132,2), - (586,392,132,2), - (588,393,132,2), - (589,394,132,2), - (590,395,132,2), - (592,396,132,2), - (594,397,132,2), - (595,398,132,2), - (596,399,132,2), - (598,400,132,2), - (600,401,132,2), - (602,402,132,2), - (604,403,132,2), - (605,404,132,2), - (607,405,132,2), - (609,406,132,2), - (611,407,132,2), - (613,408,132,2), - (614,409,132,2), - (616,410,132,2), - (618,411,132,2), - (620,412,132,2), - (622,413,132,2), - (624,414,132,2), - (625,415,132,2), - (627,416,132,2), - (629,417,132,2), - (631,418,132,2), - (632,419,132,2), - (633,420,132,2), - (634,421,132,2), - (635,422,132,2), - (636,423,132,2), - (638,424,132,2), - (640,425,132,2), - (642,426,132,2), - (643,427,132,2), - (644,428,132,2), - (645,429,132,2), - (646,430,132,2), - (647,431,132,2), - (648,432,132,2), - (650,433,132,2), - (652,434,132,2), - (654,435,132,2), - (656,436,132,2), - (657,437,132,2), - (659,438,132,2), - (661,439,132,2), - (662,440,132,2), - (664,441,132,2), - (666,442,132,2), - (668,443,132,2), - (670,444,132,2), - (671,445,132,2), - (672,446,132,2), - (674,447,132,2), - (675,448,132,2), - (677,449,132,2), - (678,450,132,2), - (726,498,133,2), - (756,528,133,2), - (739,511,148,2), - (757,541,148,2), - (813,585,148,2), - (719,491,151,2), - (758,521,151,2), - (777,549,153,2), - (808,580,157,2), - (727,499,159,2), - (759,529,159,2), - (786,558,159,2), - (725,497,161,2), - (760,527,161,2), - (724,496,166,2), - (761,526,166,2), - (811,583,167,2), - (802,574,168,2), - (792,564,171,2), - (819,591,172,2), - (794,566,179,2), - (731,503,180,2), - (762,533,180,2), - (737,509,181,2), - (763,539,181,2), - (775,547,181,2), - (788,560,182,2), - (803,575,183,2), - (736,508,184,2), - (764,538,184,2), - (790,562,185,2), - (729,501,186,2), - (765,531,186,2), - (730,502,187,2), - (766,532,187,2), - (789,561,187,2), - (781,553,192,2), - (800,572,193,2), - (772,544,194,2), - (728,500,196,2), - (767,530,196,2), - (735,507,198,2), - (768,537,198,2), - (717,489,199,2), - (769,519,199,2), - (809,581,200,2); + (461,304,1,3), + (469,310,1,3), + (783,552,1,2), + (99,69,2,3), + (369,245,2,3), + (682,451,2,2), + (718,487,2,2), + (748,517,2,2), + (781,550,2,2), + (95,66,4,3), + (503,332,4,3), + (683,452,4,2), + (686,455,4,2), + (821,590,4,2), + (321,212,5,3), + (726,495,5,2), + (756,525,5,2), + (25,17,6,3), + (64,43,6,3), + (303,201,6,3), + (609,400,6,3), + (684,453,6,2), + (782,551,6,2), + (34,23,7,3), + (38,25,7,3), + (313,206,7,3), + (818,587,7,2), + (193,130,8,3), + (236,158,8,3), + (305,202,8,3), + (354,235,8,3), + (604,397,8,3), + (685,454,8,2), + (719,488,8,2), + (749,518,8,2), + (814,583,8,2), + (218,147,10,3), + (165,112,11,3), + (429,284,11,3), + (557,366,11,3), + (596,393,11,3), + (536,353,12,3), + (598,394,12,3), + (631,415,12,3), + (238,159,13,3), + (240,160,13,3), + (664,439,13,3), + (287,189,14,3), + (296,196,14,3), + (634,417,14,3), + (777,546,14,2), + (126,85,15,3), + (167,113,15,3), + (251,167,15,3), + (413,273,15,3), + (511,336,15,3), + (815,584,15,2), + (572,375,16,3), + (687,456,16,2), + (464,306,17,3), + (600,395,17,3), + (739,508,18,2), + (769,538,18,2), + (785,554,18,2), + (215,145,19,3), + (688,457,19,2), + (728,497,19,2), + (758,527,19,2), + (809,578,19,2), + (158,107,20,3), + (362,240,20,3), + (737,506,20,2), + (767,536,20,2), + (3,2,21,3), + (271,179,21,3), + (731,500,21,2), + (761,530,21,2), + (92,64,22,3), + (479,315,22,3), + (226,152,23,3), + (425,282,23,3), + (171,116,24,3), + (246,164,24,3), + (359,238,24,3), + (454,301,24,2), + (456,302,24,2), + (458,303,24,2), + (460,304,24,2), + (462,305,24,2), + (463,306,24,2), + (465,307,24,2), + (466,308,24,2), + (467,309,24,2), + (468,310,24,2), + (470,311,24,2), + (472,312,24,2), + (474,313,24,2), + (476,314,24,2), + (478,315,24,2), + (480,316,24,2), + (482,317,24,2), + (483,318,24,2), + (485,319,24,2), + (486,320,24,2), + (487,321,24,2), + (489,322,24,2), + (491,323,24,2), + (492,324,24,2), + (493,325,24,2), + (494,326,24,2), + (495,327,24,2), + (496,328,24,2), + (497,329,24,2), + (499,330,24,2), + (501,331,24,2), + (502,332,24,2), + (504,333,24,2), + (506,334,24,2), + (508,335,24,2), + (510,336,24,2), + (512,337,24,2), + (513,338,24,2), + (514,339,24,2), + (516,340,24,2), + (517,341,24,2), + (519,342,24,2), + (521,343,24,2), + (523,344,24,2), + (525,345,24,2), + (526,346,24,2), + (528,347,24,2), + (529,348,24,2), + (531,349,24,2), + (532,350,24,2), + (533,351,24,2), + (534,352,24,2), + (535,353,24,2), + (537,354,24,2), + (539,355,24,2), + (541,356,24,2), + (542,357,24,2), + (543,358,24,2), + (545,359,24,2), + (546,360,24,2), + (548,361,24,2), + (549,362,24,2), + (551,363,24,2), + (553,364,24,2), + (554,365,24,2), + (556,366,24,2), + (558,367,24,2), + (560,368,24,2), + (562,369,24,2), + (564,370,24,2), + (566,371,24,2), + (568,372,24,2), + (569,373,24,2), + (570,374,24,2), + (571,375,24,2), + (573,376,24,2), + (574,377,24,2), + (576,378,24,2), + (577,379,24,2), + (578,380,24,2), + (579,381,24,2), + (581,382,24,2), + (583,383,24,2), + (584,384,24,2), + (585,385,24,2), + (586,386,24,2), + (587,387,24,2), + (588,388,24,2), + (589,389,24,2), + (590,390,24,2), + (591,391,24,2), + (593,392,24,2), + (595,393,24,2), + (597,394,24,2), + (599,395,24,2), + (601,396,24,2), + (603,397,24,2), + (605,398,24,2), + (606,399,24,2), + (608,400,24,2), + (610,401,24,2), + (611,402,24,2), + (612,403,24,2), + (613,404,24,2), + (614,405,24,2), + (615,406,24,2), + (616,407,24,2), + (618,408,24,2), + (619,409,24,2), + (620,409,24,3), + (621,410,24,2), + (623,411,24,2), + (624,412,24,2), + (626,413,24,2), + (628,414,24,2), + (630,415,24,2), + (632,416,24,2), + (633,417,24,2), + (635,418,24,2), + (637,419,24,2), + (638,420,24,2), + (639,421,24,2), + (641,422,24,2), + (642,423,24,2), + (643,424,24,2), + (644,425,24,2), + (645,426,24,2), + (646,427,24,2), + (648,428,24,2), + (649,429,24,2), + (650,430,24,2), + (651,431,24,2), + (653,432,24,2), + (655,433,24,2), + (656,434,24,2), + (657,435,24,2), + (658,436,24,2), + (660,437,24,2), + (662,438,24,2), + (663,439,24,2), + (665,440,24,2), + (667,441,24,2), + (668,442,24,2), + (670,443,24,2), + (671,444,24,2), + (672,445,24,2), + (674,446,24,2), + (675,447,24,2), + (677,448,24,2), + (678,449,24,2), + (680,450,24,2), + (8,5,25,3), + (186,125,25,3), + (203,137,25,3), + (402,266,25,3), + (518,341,25,3), + (530,348,25,3), + (101,70,27,3), + (396,261,27,3), + (505,333,27,3), + (659,436,27,3), + (254,169,28,3), + (547,360,28,3), + (795,564,28,2), + (427,283,29,3), + (673,445,29,3), + (81,57,30,3), + (116,79,30,3), + (291,192,30,3), + (565,370,30,3), + (636,418,30,3), + (375,248,31,3), + (694,463,32,2), + (695,464,32,2), + (498,329,33,3), + (515,339,33,3), + (627,413,33,3), + (640,421,33,3), + (742,511,33,2), + (772,541,33,2), + (433,287,34,3), + (617,407,34,3), + (691,460,34,2), + (647,427,35,3), + (822,591,35,2), + (490,322,36,3), + (128,86,37,3), + (184,124,37,3), + (520,342,37,3), + (281,186,38,3), + (507,334,38,3), + (580,381,38,3), + (790,559,38,2), + (206,139,39,3), + (420,278,39,3), + (182,123,40,3), + (327,215,40,3), + (163,111,41,3), + (301,200,41,3), + (195,131,42,3), + (325,214,42,3), + (383,254,42,3), + (473,312,42,3), + (230,155,43,3), + (527,346,43,3), + (693,462,43,2), + (130,87,45,3), + (222,150,45,3), + (724,493,45,2), + (754,523,45,2), + (173,117,47,3), + (373,247,47,3), + (524,344,47,3), + (629,414,47,3), + (50,33,48,3), + (389,257,49,3), + (582,382,49,3), + (459,303,50,3), + (139,94,51,3), + (155,105,52,3), + (244,163,53,3), + (68,46,54,3), + (105,72,54,3), + (266,176,54,3), + (348,230,55,3), + (550,362,55,3), + (439,291,56,3), + (666,440,56,3), + (819,588,56,2), + (119,81,58,3), + (262,174,58,3), + (407,270,58,3), + (775,544,58,2), + (696,465,59,2), + (697,466,59,2), + (698,467,59,2), + (699,468,59,2), + (700,469,59,2), + (701,470,59,2), + (702,471,59,2), + (703,472,59,2), + (704,473,59,2), + (705,474,59,2), + (706,475,59,2), + (736,505,59,2), + (766,535,59,2), + (592,391,60,3), + (602,396,60,3), + (625,412,60,3), + (451,299,61,3), + (457,302,61,3), + (278,184,62,3), + (669,442,62,3), + (153,104,63,3), + (540,355,63,3), + (725,494,63,2), + (755,524,63,2), + (786,555,63,2), + (334,220,64,3), + (817,586,64,2), + (323,213,65,3), + (90,63,66,3), + (208,140,66,3), + (538,354,66,3), + (561,368,66,3), + (311,205,67,3), + (418,277,67,3), + (594,392,67,3), + (54,35,68,3), + (103,71,69,3), + (676,447,70,3), + (810,579,70,2), + (692,461,71,2), + (714,483,71,2), + (744,513,71,2), + (446,296,72,3), + (453,300,72,3), + (559,367,72,3), + (5,3,73,3), + (224,151,73,3), + (260,173,73,3), + (727,496,73,2), + (757,526,73,2), + (285,188,74,3), + (544,358,74,3), + (563,369,74,3), + (679,449,74,3), + (411,272,75,3), + (179,121,76,3), + (213,144,76,3), + (232,156,76,3), + (364,241,76,3), + (46,30,77,3), + (124,84,77,3), + (342,226,77,3), + (808,577,77,2), + (199,134,78,3), + (794,563,78,2), + (248,165,79,3), + (32,22,80,3), + (234,157,80,3), + (661,437,80,3), + (800,569,80,2), + (41,27,81,3), + (78,55,81,3), + (137,93,81,3), + (276,183,81,3), + (393,259,81,3), + (722,491,81,2), + (752,521,81,2), + (85,59,82,3), + (345,228,82,3), + (484,318,82,3), + (509,335,82,3), + (689,458,82,2), + (391,258,83,3), + (488,321,83,3), + (681,450,83,3), + (112,77,84,3), + (356,236,84,3), + (371,246,84,3), + (500,330,84,3), + (17,12,85,3), + (409,271,85,3), + (107,73,86,3), + (385,255,86,3), + (555,365,86,3), + (652,431,86,3), + (654,432,86,3), + (148,101,87,3), + (307,203,87,3), + (455,301,87,3), + (607,399,87,3), + (791,560,87,2), + (44,29,88,3), + (114,78,88,3), + (443,294,88,3), + (22,15,89,3), + (30,21,89,3), + (522,343,89,3), + (379,251,90,3), + (567,371,90,3), + (188,126,91,3), + (789,558,91,2), + (83,58,92,3), + (151,103,92,3), + (387,256,92,3), + (690,459,92,2), + (36,24,93,3), + (57,37,93,3), + (264,175,93,3), + (622,410,93,3), + (177,120,94,3), + (437,290,94,3), + (20,14,95,3), + (329,216,95,3), + (14,10,96,3), + (142,96,96,3), + (338,223,96,3), + (733,502,96,2), + (763,532,96,2), + (223,151,97,2), + (225,152,97,2), + (227,153,97,2), + (228,154,97,2), + (229,155,97,2), + (231,156,97,2), + (233,157,97,2), + (235,158,97,2), + (237,159,97,2), + (239,160,97,2), + (241,161,97,2), + (242,162,97,2), + (243,163,97,2), + (245,164,97,2), + (247,165,97,2), + (249,166,97,2), + (250,167,97,2), + (252,168,97,2), + (253,169,97,2), + (255,170,97,2), + (257,171,97,2), + (258,172,97,2), + (259,173,97,2), + (261,174,97,2), + (263,175,97,2), + (265,176,97,2), + (267,177,97,2), + (268,178,97,2), + (270,179,97,2), + (272,180,97,2), + (273,181,97,2), + (274,182,97,2), + (275,183,97,2), + (277,184,97,2), + (279,185,97,2), + (280,186,97,2), + (282,187,97,2), + (284,188,97,2), + (286,189,97,2), + (288,190,97,2), + (289,191,97,2), + (290,192,97,2), + (292,193,97,2), + (293,194,97,2), + (294,195,97,2), + (295,196,97,2), + (297,197,97,2), + (298,198,97,2), + (299,199,97,2), + (300,200,97,2), + (302,201,97,2), + (304,202,97,2), + (306,203,97,2), + (308,204,97,2), + (310,205,97,2), + (312,206,97,2), + (314,207,97,2), + (315,208,97,2), + (317,209,97,2), + (318,210,97,2), + (319,211,97,2), + (320,212,97,2), + (322,213,97,2), + (324,214,97,2), + (326,215,97,2), + (328,216,97,2), + (330,217,97,2), + (331,218,97,2), + (332,219,97,2), + (333,220,97,2), + (335,221,97,2), + (336,222,97,2), + (337,223,97,2), + (339,224,97,2), + (340,225,97,2), + (341,226,97,2), + (343,227,97,2), + (344,228,97,2), + (346,229,97,2), + (347,230,97,2), + (349,231,97,2), + (350,232,97,2), + (351,233,97,2), + (352,234,97,2), + (353,235,97,2), + (355,236,97,2), + (357,237,97,2), + (358,238,97,2), + (360,239,97,2), + (361,240,97,2), + (363,241,97,2), + (365,242,97,2), + (366,243,97,2), + (367,244,97,2), + (368,245,97,2), + (370,246,97,2), + (372,247,97,2), + (374,248,97,2), + (376,249,97,2), + (377,250,97,2), + (378,251,97,2), + (380,252,97,2), + (381,253,97,2), + (382,254,97,2), + (384,255,97,2), + (386,256,97,2), + (388,257,97,2), + (390,258,97,2), + (392,259,97,2), + (394,260,97,2), + (395,261,97,2), + (397,262,97,2), + (398,263,97,2), + (399,264,97,2), + (400,265,97,2), + (401,266,97,2), + (403,267,97,2), + (404,268,97,2), + (405,269,97,2), + (406,270,97,2), + (408,271,97,2), + (410,272,97,2), + (412,273,97,2), + (414,274,97,2), + (415,275,97,2), + (416,276,97,2), + (417,277,97,2), + (419,278,97,2), + (421,279,97,2), + (422,280,97,2), + (423,281,97,2), + (424,282,97,2), + (426,283,97,2), + (428,284,97,2), + (430,285,97,2), + (431,286,97,2), + (432,287,97,2), + (434,288,97,2), + (435,289,97,2), + (436,290,97,2), + (438,291,97,2), + (440,292,97,2), + (441,293,97,2), + (442,294,97,2), + (444,295,97,2), + (445,296,97,2), + (447,297,97,2), + (449,298,97,2), + (450,299,97,2), + (452,300,97,2), + (477,314,97,3), + (481,316,97,3), + (448,297,98,3), + (471,311,98,3), + (475,313,99,3), + (552,363,99,3), + (575,377,99,3), + (707,476,99,2), + (708,477,99,2), + (709,478,99,2), + (710,479,99,2), + (711,480,99,2), + (52,34,100,3), + (121,82,100,3), + (256,170,100,3), + (283,187,100,3), + (269,178,101,3), + (309,204,101,3), + (316,208,101,3), + (715,484,101,2), + (745,514,101,2), + (807,576,102,2), + (712,481,103,2), + (820,589,107,2), + (796,565,111,2), + (774,543,114,2), + (806,575,121,2), + (729,498,123,2), + (759,528,123,2), + (798,567,126,2), + (792,561,127,2), + (784,553,128,2), + (802,571,129,2), + (787,556,130,2), + (713,482,131,2), + (743,512,131,2), + (816,585,131,2), + (804,573,132,2), + (740,509,133,2), + (770,539,133,2), + (717,486,134,2), + (747,516,134,2), + (779,548,134,2), + (730,499,136,2), + (760,529,136,2), + (1,1,137,2), + (2,2,137,2), + (4,3,137,2), + (6,4,137,2), + (7,5,137,2), + (9,6,137,2), + (10,7,137,2), + (11,8,137,2), + (12,9,137,2), + (13,10,137,2), + (15,11,137,2), + (16,12,137,2), + (18,13,137,2), + (19,14,137,2), + (21,15,137,2), + (23,16,137,2), + (24,17,137,2), + (26,18,137,2), + (27,19,137,2), + (28,20,137,2), + (29,21,137,2), + (31,22,137,2), + (33,23,137,2), + (35,24,137,2), + (37,25,137,2), + (39,26,137,2), + (40,27,137,2), + (42,28,137,2), + (43,29,137,2), + (45,30,137,2), + (47,31,137,2), + (48,32,137,2), + (49,33,137,2), + (51,34,137,2), + (53,35,137,2), + (55,36,137,2), + (56,37,137,2), + (58,38,137,2), + (59,39,137,2), + (60,40,137,2), + (61,41,137,2), + (62,42,137,2), + (63,43,137,2), + (65,44,137,2), + (66,45,137,2), + (67,46,137,2), + (69,47,137,2), + (70,48,137,2), + (71,49,137,2), + (72,50,137,2), + (73,51,137,2), + (74,52,137,2), + (75,53,137,2), + (76,54,137,2), + (77,55,137,2), + (79,56,137,2), + (80,57,137,2), + (82,58,137,2), + (84,59,137,2), + (86,60,137,2), + (87,61,137,2), + (88,62,137,2), + (89,63,137,2), + (91,64,137,2), + (93,65,137,2), + (94,66,137,2), + (96,67,137,2), + (97,68,137,2), + (98,69,137,2), + (100,70,137,2), + (102,71,137,2), + (104,72,137,2), + (106,73,137,2), + (108,74,137,2), + (109,75,137,2), + (110,76,137,2), + (111,77,137,2), + (113,78,137,2), + (115,79,137,2), + (117,80,137,2), + (118,81,137,2), + (120,82,137,2), + (122,83,137,2), + (123,84,137,2), + (125,85,137,2), + (127,86,137,2), + (129,87,137,2), + (131,88,137,2), + (132,89,137,2), + (133,90,137,2), + (134,91,137,2), + (135,92,137,2), + (136,93,137,2), + (138,94,137,2), + (140,95,137,2), + (141,96,137,2), + (143,97,137,2), + (144,98,137,2), + (145,99,137,2), + (146,100,137,2), + (147,101,137,2), + (149,102,137,2), + (150,103,137,2), + (152,104,137,2), + (154,105,137,2), + (156,106,137,2), + (157,107,137,2), + (159,108,137,2), + (160,109,137,2), + (161,110,137,2), + (162,111,137,2), + (164,112,137,2), + (166,113,137,2), + (168,114,137,2), + (169,115,137,2), + (170,116,137,2), + (172,117,137,2), + (174,118,137,2), + (175,119,137,2), + (176,120,137,2), + (178,121,137,2), + (180,122,137,2), + (181,123,137,2), + (183,124,137,2), + (185,125,137,2), + (187,126,137,2), + (189,127,137,2), + (190,128,137,2), + (191,129,137,2), + (192,130,137,2), + (194,131,137,2), + (196,132,137,2), + (197,133,137,2), + (198,134,137,2), + (200,135,137,2), + (201,136,137,2), + (202,137,137,2), + (204,138,137,2), + (205,139,137,2), + (207,140,137,2), + (209,141,137,2), + (210,142,137,2), + (211,143,137,2), + (212,144,137,2), + (214,145,137,2), + (216,146,137,2), + (217,147,137,2), + (219,148,137,2), + (220,149,137,2), + (221,150,137,2), + (723,492,137,2), + (753,522,137,2), + (813,582,140,2), + (788,557,146,2), + (801,570,148,2), + (799,568,149,2), + (803,572,151,2), + (735,504,154,2), + (765,534,154,2), + (741,510,155,2), + (771,540,155,2), + (797,566,158,2), + (721,490,164,2), + (751,520,164,2), + (778,547,166,2), + (720,489,168,2), + (750,519,168,2), + (793,562,168,2), + (734,503,171,2), + (764,533,171,2), + (823,592,174,2), + (811,580,180,2), + (776,545,189,2), + (716,485,192,2), + (746,515,192,2), + (732,501,197,2), + (762,531,197,2), + (805,574,197,2), + (812,581,199,2), + (738,507,201,2), + (768,537,201,2), + (780,549,202,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -1641,194 +1644,189 @@ 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,170,1,1,0,'978Z Green St SE',978,'Z',NULL,'Green','St','SE',NULL,NULL,NULL,NULL,'National Park',1,1029,NULL,'08063',NULL,1228,39.867158,-75.1802,0,NULL,NULL,NULL), - (2,27,1,1,0,'284Y Cadell Ave SE',284,'Y',NULL,'Cadell','Ave','SE',NULL,NULL,NULL,NULL,'Warrenton',1,1045,NULL,'20187',NULL,1228,38.735202,-77.73717,0,NULL,NULL,NULL), - (3,121,1,1,0,'492R Lincoln Dr SE',492,'R',NULL,'Lincoln','Dr','SE',NULL,NULL,NULL,NULL,'Fort Smith',1,1003,NULL,'72919',NULL,1228,35.191046,-94.23816,0,NULL,NULL,NULL), - (4,19,1,1,0,'815W Martin Luther King Rd SE',815,'W',NULL,'Martin Luther King','Rd','SE',NULL,NULL,NULL,NULL,'Webster Springs',1,1047,NULL,'26288',NULL,1228,38.484777,-80.38023,0,NULL,NULL,NULL), - (5,18,1,1,0,'553W Cadell St SW',553,'W',NULL,'Cadell','St','SW',NULL,NULL,NULL,NULL,'Smokerun',1,1037,NULL,'16681',NULL,1228,40.792825,-78.43559,0,NULL,NULL,NULL), - (6,53,1,1,0,'370V Dowlen Ln NE',370,'V',NULL,'Dowlen','Ln','NE',NULL,NULL,NULL,NULL,'East Stroudsburg',1,1037,NULL,'18301',NULL,1228,41.052199,-75.15936,0,NULL,NULL,NULL), - (7,61,1,1,0,'549F Jackson St W',549,'F',NULL,'Jackson','St','W',NULL,NULL,NULL,NULL,'Spring',1,1042,NULL,'77382',NULL,1228,30.214741,-95.53212,0,NULL,NULL,NULL), - (8,22,1,1,0,'82N Maple Ave SE',82,'N',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Quemado',1,1042,NULL,'78877',NULL,1228,28.917675,-100.60332,0,NULL,NULL,NULL), - (9,186,1,1,0,'63L Van Ness Pl W',63,'L',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'Riegelsville',1,1037,NULL,'18077',NULL,1228,40.576989,-75.22121,0,NULL,NULL,NULL), - (10,69,1,1,0,'181V States Blvd E',181,'V',NULL,'States','Blvd','E',NULL,NULL,NULL,NULL,'West Fairlee',1,1044,NULL,'05083',NULL,1228,43.910089,-72.26637,0,NULL,NULL,NULL), - (11,142,1,1,0,'183G Bay St S',183,'G',NULL,'Bay','St','S',NULL,NULL,NULL,NULL,'Diamond',1,1024,NULL,'64840',NULL,1228,37.002574,-94.32419,0,NULL,NULL,NULL), - (12,39,1,1,0,'404A Green Pl N',404,'A',NULL,'Green','Pl','N',NULL,NULL,NULL,NULL,'Greenport',1,1031,NULL,'11944',NULL,1228,41.103838,-72.36729,0,NULL,NULL,NULL), - (13,196,1,1,0,'204X El Camino Ln SW',204,'X',NULL,'El Camino','Ln','SW',NULL,NULL,NULL,NULL,'North Hollywood',1,1004,NULL,'91611',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL), - (14,157,1,1,0,'617C Bay Pl S',617,'C',NULL,'Bay','Pl','S',NULL,NULL,NULL,NULL,'Owls Head',1,1018,NULL,'04842',NULL,1228,44.086989,-69.104234,0,NULL,NULL,NULL), - (15,30,1,1,0,'900F Cadell Ave W',900,'F',NULL,'Cadell','Ave','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1034,NULL,'45133',NULL,1228,39.162917,-83.5802,0,NULL,NULL,NULL), - (16,147,1,1,0,'248Q Green Dr SW',248,'Q',NULL,'Green','Dr','SW',NULL,NULL,NULL,NULL,'Astoria',1,1031,NULL,'11102',NULL,1228,40.771286,-73.92462,0,NULL,NULL,NULL), - (17,94,1,1,0,'980Y Maple Dr NE',980,'Y',NULL,'Maple','Dr','NE',NULL,NULL,NULL,NULL,'Waco',1,1042,NULL,'76795',NULL,1228,31.553646,-97.203166,0,NULL,NULL,NULL), - (18,12,1,1,0,'332I Main Ln NW',332,'I',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Otisville',1,1021,NULL,'48463',NULL,1228,43.167457,-83.52542,0,NULL,NULL,NULL), - (19,193,1,1,0,'537M Dowlen Dr SW',537,'M',NULL,'Dowlen','Dr','SW',NULL,NULL,NULL,NULL,'Whitfield',1,1023,NULL,'39193',NULL,1228,32.234775,-90.07263,0,NULL,NULL,NULL), - (20,38,1,1,0,'27W Main Blvd SE',27,'W',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Salt Flat',1,1042,NULL,'79847',NULL,1228,31.820395,-105.30882,0,NULL,NULL,NULL), - (21,159,1,1,0,'400F Maple Rd NE',400,'F',NULL,'Maple','Rd','NE',NULL,NULL,NULL,NULL,'Rutledge',1,1009,NULL,'30663',NULL,1228,33.614556,-83.61157,0,NULL,NULL,NULL), - (22,90,1,1,0,'402R Main Dr N',402,'R',NULL,'Main','Dr','N',NULL,NULL,NULL,NULL,'Little Rock',1,1003,NULL,'72231',NULL,1228,34.80189,-92.189397,0,NULL,NULL,NULL), - (23,41,1,1,0,'997R Lincoln Ln S',997,'R',NULL,'Lincoln','Ln','S',NULL,NULL,NULL,NULL,'Elmira',1,1031,NULL,'14902',NULL,1228,42.147285,-76.750888,0,NULL,NULL,NULL), - (24,116,1,1,0,'579M States Way W',579,'M',NULL,'States','Way','W',NULL,NULL,NULL,NULL,'Wichita Falls',1,1042,NULL,'76308',NULL,1228,33.859798,-98.54064,0,NULL,NULL,NULL), - (25,70,1,1,0,'254U Second Dr NE',254,'U',NULL,'Second','Dr','NE',NULL,NULL,NULL,NULL,'Chester',1,1043,NULL,'84623',NULL,1228,39.465357,-111.57686,0,NULL,NULL,NULL), - (26,80,1,1,0,'196U Green Blvd W',196,'U',NULL,'Green','Blvd','W',NULL,NULL,NULL,NULL,'Plymouth',1,1048,NULL,'53073',NULL,1228,43.758674,-87.98005,0,NULL,NULL,NULL), - (27,72,1,1,0,'974G Maple Blvd NW',974,'G',NULL,'Maple','Blvd','NW',NULL,NULL,NULL,NULL,'Mulino',1,1036,NULL,'97042',NULL,1228,45.21307,-122.54321,0,NULL,NULL,NULL), - (28,64,1,1,0,'224T College Rd S',224,'T',NULL,'College','Rd','S',NULL,NULL,NULL,NULL,'Eden Prairie',1,1022,NULL,'55346',NULL,1228,44.880435,-93.4869,0,NULL,NULL,NULL), - (29,3,1,1,0,'526R Northpoint Ln NW',526,'R',NULL,'Northpoint','Ln','NW',NULL,NULL,NULL,NULL,'Porterville',1,1023,NULL,'39352',NULL,1228,32.678923,-88.49952,0,NULL,NULL,NULL), - (30,78,1,1,0,'488U States Pl SW',488,'U',NULL,'States','Pl','SW',NULL,NULL,NULL,NULL,'Ovid',1,1021,NULL,'48866',NULL,1228,42.997636,-84.37643,0,NULL,NULL,NULL), - (31,188,1,1,0,'749V Second Ave E',749,'V',NULL,'Second','Ave','E',NULL,NULL,NULL,NULL,'Vermillion',1,1040,NULL,'57069',NULL,1228,42.812664,-96.94651,0,NULL,NULL,NULL), - (32,46,1,1,0,'380K Maple Ln NE',380,'K',NULL,'Maple','Ln','NE',NULL,NULL,NULL,NULL,'Parkersburg',1,1047,NULL,'26104',NULL,1228,39.285724,-81.52639,0,NULL,NULL,NULL), - (33,123,1,1,0,'127W El Camino Way W',127,'W',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Yorktown',1,1013,NULL,'47396',NULL,1228,40.186603,-85.5056,0,NULL,NULL,NULL), - (34,58,1,1,0,'427T Maple Path NE',427,'T',NULL,'Maple','Path','NE',NULL,NULL,NULL,NULL,'Lukachukai',1,1002,NULL,'86507',NULL,1228,36.423229,-109.29689,0,NULL,NULL,NULL), - (35,34,1,1,0,'595B Van Ness Blvd N',595,'B',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Lyndell',1,1037,NULL,'19354',NULL,1228,40.058173,-75.743272,0,NULL,NULL,NULL), - (36,87,1,1,0,'686G Dowlen Way S',686,'G',NULL,'Dowlen','Way','S',NULL,NULL,NULL,NULL,'Bethel Park',1,1037,NULL,'15102',NULL,1228,40.324535,-80.03864,0,NULL,NULL,NULL), - (37,4,1,1,0,'742Z States Dr N',742,'Z',NULL,'States','Dr','N',NULL,NULL,NULL,NULL,'Elwell',1,1021,NULL,'48832',NULL,1228,43.411924,-84.77657,0,NULL,NULL,NULL), - (38,199,1,1,0,'258N Jackson Path SW',258,'N',NULL,'Jackson','Path','SW',NULL,NULL,NULL,NULL,'Huntsville',1,1042,NULL,'77341',NULL,1228,30.714476,-95.54977,0,NULL,NULL,NULL), - (39,106,1,1,0,'647E Pine Blvd SW',647,'E',NULL,'Pine','Blvd','SW',NULL,NULL,NULL,NULL,'Waltonville',1,1012,NULL,'62894',NULL,1228,38.212746,-89.03866,0,NULL,NULL,NULL), - (40,134,1,1,0,'562O Northpoint Pl SW',562,'O',NULL,'Northpoint','Pl','SW',NULL,NULL,NULL,NULL,'Clearmont',1,1024,NULL,'64431',NULL,1228,40.527919,-94.9968,0,NULL,NULL,NULL), - (41,79,1,1,0,'400G Martin Luther King Path S',400,'G',NULL,'Martin Luther King','Path','S',NULL,NULL,NULL,NULL,'Staten Island',1,1031,NULL,'10307',NULL,1228,40.508274,-74.24387,0,NULL,NULL,NULL), - (42,16,1,1,0,'346G Lincoln Ave NE',346,'G',NULL,'Lincoln','Ave','NE',NULL,NULL,NULL,NULL,'Ellenboro',1,1047,NULL,'26346',NULL,1228,39.270902,-81.06189,0,NULL,NULL,NULL), - (43,189,1,1,0,'206Z Van Ness St SW',206,'Z',NULL,'Van Ness','St','SW',NULL,NULL,NULL,NULL,'Hoboken',1,1029,NULL,'07030',NULL,1228,40.744851,-74.03294,0,NULL,NULL,NULL), - (44,10,1,1,0,'945W Dowlen Ave NW',945,'W',NULL,'Dowlen','Ave','NW',NULL,NULL,NULL,NULL,'Edgerton',1,1022,NULL,'56128',NULL,1228,43.89387,-96.1285,0,NULL,NULL,NULL), - (45,110,1,1,0,'666W Cadell Dr SE',666,'W',NULL,'Cadell','Dr','SE',NULL,NULL,NULL,NULL,'Salt Lake City',1,1043,NULL,'84120',NULL,1228,40.688246,-111.99899,0,NULL,NULL,NULL), - (46,9,1,1,0,'927U Caulder Pl NW',927,'U',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Castle Rock',1,1005,NULL,'80109',NULL,1228,39.380857,-104.89947,0,NULL,NULL,NULL), - (47,145,1,1,0,'466C College Blvd W',466,'C',NULL,'College','Blvd','W',NULL,NULL,NULL,NULL,'Radersburg',1,1025,NULL,'59641',NULL,1228,46.206922,-111.634364,0,NULL,NULL,NULL), - (48,122,1,1,0,'253S Caulder Rd NE',253,'S',NULL,'Caulder','Rd','NE',NULL,NULL,NULL,NULL,'Hope',1,1021,NULL,'48628',NULL,1228,43.807162,-84.33789,0,NULL,NULL,NULL), - (49,97,1,1,0,'995S Bay Path W',995,'S',NULL,'Bay','Path','W',NULL,NULL,NULL,NULL,'Penelope',1,1042,NULL,'76676',NULL,1228,31.861594,-96.93466,0,NULL,NULL,NULL), - (50,29,1,1,0,'9X Second Ave NW',9,'X',NULL,'Second','Ave','NW',NULL,NULL,NULL,NULL,'Scotch Plains',1,1029,NULL,'07076',NULL,1228,40.637152,-74.37493,0,NULL,NULL,NULL), - (51,161,1,1,0,'175D Jackson Ln N',175,'D',NULL,'Jackson','Ln','N',NULL,NULL,NULL,NULL,'Bridgeport',1,1006,NULL,'06602',NULL,1228,41.179846,-73.189006,0,NULL,NULL,NULL), - (52,144,1,1,0,'146Y Lincoln Ln NE',146,'Y',NULL,'Lincoln','Ln','NE',NULL,NULL,NULL,NULL,'Gettysburg',1,1037,NULL,'17326',NULL,1228,39.8948,-77.213493,0,NULL,NULL,NULL), - (53,113,1,1,0,'789W Cadell St NE',789,'W',NULL,'Cadell','St','NE',NULL,NULL,NULL,NULL,'Huntington Beach',1,1004,NULL,'92649',NULL,1228,33.720017,-118.04614,0,NULL,NULL,NULL), - (54,191,1,1,0,'572S Dowlen Dr S',572,'S',NULL,'Dowlen','Dr','S',NULL,NULL,NULL,NULL,'Sycamore',1,1039,NULL,'29846',NULL,1228,33.047132,-81.22185,0,NULL,NULL,NULL), - (55,45,1,1,0,'4H Pine Pl E',4,'H',NULL,'Pine','Pl','E',NULL,NULL,NULL,NULL,'Hatley',1,1048,NULL,'54440',NULL,1228,44.830734,-89.37414,0,NULL,NULL,NULL), - (56,201,1,1,0,'36N Beech Dr SE',36,'N',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'Aspinwall',1,1014,NULL,'51432',NULL,1228,41.911924,-95.135602,0,NULL,NULL,NULL), - (57,8,1,1,0,'408A Maple Pl NW',408,'A',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Shade Gap',1,1037,NULL,'17255',NULL,1228,40.152486,-77.8617,0,NULL,NULL,NULL), - (58,56,1,1,0,'326E Second Path E',326,'E',NULL,'Second','Path','E',NULL,NULL,NULL,NULL,'Anthony',1,1008,NULL,'32617',NULL,1228,29.315961,-82.10092,0,NULL,NULL,NULL), - (59,162,1,1,0,'735F Martin Luther King Ave E',735,'F',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Walker',1,1024,NULL,'64790',NULL,1228,37.903772,-94.21822,0,NULL,NULL,NULL), - (60,59,1,1,0,'856G Main Pl SW',856,'G',NULL,'Main','Pl','SW',NULL,NULL,NULL,NULL,'Underwood',1,1014,NULL,'51576',NULL,1228,41.388244,-95.68777,0,NULL,NULL,NULL), - (61,14,1,1,0,'121W El Camino Rd N',121,'W',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Running Springs',1,1004,NULL,'92382',NULL,1228,34.205626,-117.10499,0,NULL,NULL,NULL), - (62,153,1,1,0,'528E Dowlen Blvd SE',528,'E',NULL,'Dowlen','Blvd','SE',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33065',NULL,1228,26.272608,-80.25589,0,NULL,NULL,NULL), - (63,81,1,1,0,'757V Second Path N',757,'V',NULL,'Second','Path','N',NULL,NULL,NULL,NULL,'Farmington',1,1014,NULL,'52626',NULL,1228,40.655336,-91.72385,0,NULL,NULL,NULL), - (64,108,1,1,0,'200K Second Pl W',200,'K',NULL,'Second','Pl','W',NULL,NULL,NULL,NULL,'Renville',1,1022,NULL,'56284',NULL,1228,44.783251,-95.20682,0,NULL,NULL,NULL), - (65,55,1,1,0,'33X Northpoint Pl N',33,'X',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'Kirkville',1,1031,NULL,'13082',NULL,1228,43.099547,-75.9619,0,NULL,NULL,NULL), - (66,128,1,1,0,'7B Van Ness Way N',7,'B',NULL,'Van Ness','Way','N',NULL,NULL,NULL,NULL,'Sulphur Springs',1,1042,NULL,'75482',NULL,1228,33.143752,-95.60102,0,NULL,NULL,NULL), - (67,85,1,1,0,'265V Cadell Path E',265,'V',NULL,'Cadell','Path','E',NULL,NULL,NULL,NULL,'Homestead',1,1008,NULL,'33031',NULL,1228,25.526214,-80.49632,0,NULL,NULL,NULL), - (68,174,1,1,0,'216Z El Camino Dr N',216,'Z',NULL,'El Camino','Dr','N',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10274',NULL,1228,40.780751,-73.977182,0,NULL,NULL,NULL), - (69,167,1,1,0,'414Y Van Ness Pl W',414,'Y',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'West Palm Beach',1,1008,NULL,'33406',NULL,1228,26.659294,-80.09118,0,NULL,NULL,NULL), - (70,21,1,1,0,'13D College Rd SW',13,'D',NULL,'College','Rd','SW',NULL,NULL,NULL,NULL,'Roebuck',1,1039,NULL,'29376',NULL,1228,34.856283,-81.95444,0,NULL,NULL,NULL), - (71,77,1,1,0,'60E States Ave SW',60,'E',NULL,'States','Ave','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1045,NULL,'24007',NULL,1228,37.274175,-79.95786,0,NULL,NULL,NULL), - (72,75,1,1,0,'926K Pine Pl N',926,'K',NULL,'Pine','Pl','N',NULL,NULL,NULL,NULL,'Keizer',1,1036,NULL,'97307',NULL,1228,44.984465,-122.457024,0,NULL,NULL,NULL), - (73,156,3,1,0,'935I Green Dr SE',935,'I',NULL,'Green','Dr','SE',NULL,'c/o PO Plus',NULL,NULL,'Robards',1,1016,NULL,'42452',NULL,1228,37.674669,-87.54291,0,NULL,NULL,NULL), - (74,61,2,0,0,'935I Green Dr SE',935,'I',NULL,'Green','Dr','SE',NULL,'c/o PO Plus',NULL,NULL,'Robards',1,1016,NULL,'42452',NULL,1228,37.674669,-87.54291,0,NULL,NULL,73), - (75,74,3,1,0,'763R Cadell Pl N',763,'R',NULL,'Cadell','Pl','N',NULL,'Receiving',NULL,NULL,'Ontario',1,1004,NULL,'91762',NULL,1228,34.057561,-117.66563,0,NULL,NULL,NULL), - (76,189,2,0,0,'763R Cadell Pl N',763,'R',NULL,'Cadell','Pl','N',NULL,'Receiving',NULL,NULL,'Ontario',1,1004,NULL,'91762',NULL,1228,34.057561,-117.66563,0,NULL,NULL,75), - (77,160,3,1,0,'297E Cadell Ln SE',297,'E',NULL,'Cadell','Ln','SE',NULL,'Attn: Accounting',NULL,NULL,'Kirby',1,1003,NULL,'71950',NULL,1228,34.251107,-93.76005,0,NULL,NULL,NULL), - (78,159,2,0,0,'297E Cadell Ln SE',297,'E',NULL,'Cadell','Ln','SE',NULL,'Attn: Accounting',NULL,NULL,'Kirby',1,1003,NULL,'71950',NULL,1228,34.251107,-93.76005,0,NULL,NULL,77), - (79,54,3,1,0,'521X Beech Blvd SE',521,'X',NULL,'Beech','Blvd','SE',NULL,'Attn: Development',NULL,NULL,'Printer',1,1016,NULL,'41655',NULL,1228,37.511126,-82.72053,0,NULL,NULL,NULL), - (80,29,2,0,0,'521X Beech Blvd SE',521,'X',NULL,'Beech','Blvd','SE',NULL,'Attn: Development',NULL,NULL,'Printer',1,1016,NULL,'41655',NULL,1228,37.511126,-82.72053,0,NULL,NULL,79), - (81,101,3,1,0,'320R Second St NE',320,'R',NULL,'Second','St','NE',NULL,'Attn: Accounting',NULL,NULL,'Booneville',1,1023,NULL,'38829',NULL,1228,34.653448,-88.53751,0,NULL,NULL,NULL), - (82,19,2,0,0,'320R Second St NE',320,'R',NULL,'Second','St','NE',NULL,'Attn: Accounting',NULL,NULL,'Booneville',1,1023,NULL,'38829',NULL,1228,34.653448,-88.53751,0,NULL,NULL,81), - (83,111,3,1,0,'438K El Camino Dr S',438,'K',NULL,'El Camino','Dr','S',NULL,'Cuffe Parade',NULL,NULL,'Huntsville',1,1003,NULL,'72740',NULL,1228,36.1161,-93.68605,0,NULL,NULL,NULL), - (84,181,2,1,0,'438K El Camino Dr S',438,'K',NULL,'El Camino','Dr','S',NULL,'Cuffe Parade',NULL,NULL,'Huntsville',1,1003,NULL,'72740',NULL,1228,36.1161,-93.68605,0,NULL,NULL,83), - (85,40,3,1,0,'682B Martin Luther King Ave E',682,'B',NULL,'Martin Luther King','Ave','E',NULL,'c/o PO Plus',NULL,NULL,'Ranger',1,1042,NULL,'76470',NULL,1228,32.497298,-98.67402,0,NULL,NULL,NULL), - (86,164,3,1,0,'32G Main St S',32,'G',NULL,'Main','St','S',NULL,'Payables Dept.',NULL,NULL,'Brockton',1,1020,NULL,'02405',NULL,1228,41.970474,-70.701357,0,NULL,NULL,NULL), - (87,48,3,1,0,'759I Martin Luther King Way N',759,'I',NULL,'Martin Luther King','Way','N',NULL,'Disbursements',NULL,NULL,'Campbell',1,1022,NULL,'56522',NULL,1228,46.130213,-96.40019,0,NULL,NULL,NULL), - (88,183,3,1,0,'293S Dowlen Rd N',293,'S',NULL,'Dowlen','Rd','N',NULL,'Attn: Development',NULL,NULL,'Porthill',1,1011,NULL,'83853',NULL,1228,48.953737,-116.53078,0,NULL,NULL,NULL), - (89,106,2,0,0,'293S Dowlen Rd N',293,'S',NULL,'Dowlen','Rd','N',NULL,'Attn: Development',NULL,NULL,'Porthill',1,1011,NULL,'83853',NULL,1228,48.953737,-116.53078,0,NULL,NULL,88), - (90,96,3,1,0,'468J Woodbridge Ln NE',468,'J',NULL,'Woodbridge','Ln','NE',NULL,'c/o OPDC',NULL,NULL,'Selma',1,1000,NULL,'36701',NULL,1228,32.429066,-87.03809,0,NULL,NULL,NULL), - (91,133,2,1,0,'468J Woodbridge Ln NE',468,'J',NULL,'Woodbridge','Ln','NE',NULL,'c/o OPDC',NULL,NULL,'Selma',1,1000,NULL,'36701',NULL,1228,32.429066,-87.03809,0,NULL,NULL,90), - (92,194,3,1,0,'613V States Blvd W',613,'V',NULL,'States','Blvd','W',NULL,'Urgent',NULL,NULL,'Phoenix',1,1002,NULL,'85018',NULL,1228,33.498076,-111.98603,0,NULL,NULL,NULL), - (93,66,2,1,0,'613V States Blvd W',613,'V',NULL,'States','Blvd','W',NULL,'Urgent',NULL,NULL,'Phoenix',1,1002,NULL,'85018',NULL,1228,33.498076,-111.98603,0,NULL,NULL,92), - (94,131,3,1,0,'735X Dowlen Blvd NE',735,'X',NULL,'Dowlen','Blvd','NE',NULL,'Attn: Accounting',NULL,NULL,'Dunnellon',1,1008,NULL,'34434',NULL,1228,28.99409,-82.45364,0,NULL,NULL,NULL), - (95,126,3,1,0,'957W Martin Luther King Blvd N',957,'W',NULL,'Martin Luther King','Blvd','N',NULL,'Churchgate',NULL,NULL,'Grosse Pointe',1,1021,NULL,'48230',NULL,1228,42.386087,-82.92426,0,NULL,NULL,NULL), - (96,4,2,0,0,'957W Martin Luther King Blvd N',957,'W',NULL,'Martin Luther King','Blvd','N',NULL,'Churchgate',NULL,NULL,'Grosse Pointe',1,1021,NULL,'48230',NULL,1228,42.386087,-82.92426,0,NULL,NULL,95), - (97,168,3,1,0,'273T Beech Rd NW',273,'T',NULL,'Beech','Rd','NW',NULL,'Payables Dept.',NULL,NULL,'Scotts Mills',1,1036,NULL,'97375',NULL,1228,45.004218,-122.59658,0,NULL,NULL,NULL), - (98,140,2,1,0,'273T Beech Rd NW',273,'T',NULL,'Beech','Rd','NW',NULL,'Payables Dept.',NULL,NULL,'Scotts Mills',1,1036,NULL,'97375',NULL,1228,45.004218,-122.59658,0,NULL,NULL,97), - (99,15,3,1,0,'74R Jackson Way N',74,'R',NULL,'Jackson','Way','N',NULL,'Donor Relations',NULL,NULL,'Green',1,1015,NULL,'67447',NULL,1228,39.475173,-96.99137,0,NULL,NULL,NULL), - (100,166,2,1,0,'74R Jackson Way N',74,'R',NULL,'Jackson','Way','N',NULL,'Donor Relations',NULL,NULL,'Green',1,1015,NULL,'67447',NULL,1228,39.475173,-96.99137,0,NULL,NULL,99), - (101,99,3,1,0,'19H Van Ness Ave W',19,'H',NULL,'Van Ness','Ave','W',NULL,'Community Relations',NULL,NULL,'Freeport',1,1008,NULL,'32439',NULL,1228,30.482838,-86.1675,0,NULL,NULL,NULL), - (102,38,2,0,0,'19H Van Ness Ave W',19,'H',NULL,'Van Ness','Ave','W',NULL,'Community Relations',NULL,NULL,'Freeport',1,1008,NULL,'32439',NULL,1228,30.482838,-86.1675,0,NULL,NULL,101), - (103,139,3,1,0,'704L Lincoln Rd NW',704,'L',NULL,'Lincoln','Rd','NW',NULL,'Community Relations',NULL,NULL,'Butte',1,1025,NULL,'59702',NULL,1228,45.905345,-112.637705,0,NULL,NULL,NULL), - (104,127,3,1,0,'653C States Blvd N',653,'C',NULL,'States','Blvd','N',NULL,'c/o OPDC',NULL,NULL,'Steele',1,1016,NULL,'41566',NULL,1228,37.417254,-82.18823,0,NULL,NULL,NULL), - (105,52,3,1,0,'818W Jackson Pl N',818,'W',NULL,'Jackson','Pl','N',NULL,'Payables Dept.',NULL,NULL,'Portland',1,1036,NULL,'97221',NULL,1228,45.49759,-122.72945,0,NULL,NULL,NULL), - (106,115,1,1,0,'789W Cadell St NE',789,'W',NULL,'Cadell','St','NE',NULL,NULL,NULL,NULL,'Huntington Beach',1,1004,NULL,'92649',NULL,1228,33.720017,-118.04614,0,NULL,NULL,53), - (107,47,1,1,0,'789W Cadell St NE',789,'W',NULL,'Cadell','St','NE',NULL,NULL,NULL,NULL,'Huntington Beach',1,1004,NULL,'92649',NULL,1228,33.720017,-118.04614,0,NULL,NULL,53), - (108,181,1,0,0,'789W Cadell St NE',789,'W',NULL,'Cadell','St','NE',NULL,NULL,NULL,NULL,'Huntington Beach',1,1004,NULL,'92649',NULL,1228,33.720017,-118.04614,0,NULL,NULL,53), - (109,144,1,0,0,'789W Cadell St NE',789,'W',NULL,'Cadell','St','NE',NULL,NULL,NULL,NULL,'Huntington Beach',1,1004,NULL,'92649',NULL,1228,33.720017,-118.04614,0,NULL,NULL,53), - (110,73,1,1,0,'572S Dowlen Dr S',572,'S',NULL,'Dowlen','Dr','S',NULL,NULL,NULL,NULL,'Sycamore',1,1039,NULL,'29846',NULL,1228,33.047132,-81.22185,0,NULL,NULL,54), - (111,143,1,1,0,'572S Dowlen Dr S',572,'S',NULL,'Dowlen','Dr','S',NULL,NULL,NULL,NULL,'Sycamore',1,1039,NULL,'29846',NULL,1228,33.047132,-81.22185,0,NULL,NULL,54), - (112,5,1,1,0,'572S Dowlen Dr S',572,'S',NULL,'Dowlen','Dr','S',NULL,NULL,NULL,NULL,'Sycamore',1,1039,NULL,'29846',NULL,1228,33.047132,-81.22185,0,NULL,NULL,54), - (113,57,1,1,0,'572S Dowlen Dr S',572,'S',NULL,'Dowlen','Dr','S',NULL,NULL,NULL,NULL,'Sycamore',1,1039,NULL,'29846',NULL,1228,33.047132,-81.22185,0,NULL,NULL,54), - (114,100,1,1,0,'4H Pine Pl E',4,'H',NULL,'Pine','Pl','E',NULL,NULL,NULL,NULL,'Hatley',1,1048,NULL,'54440',NULL,1228,44.830734,-89.37414,0,NULL,NULL,55), - (115,31,1,1,0,'4H Pine Pl E',4,'H',NULL,'Pine','Pl','E',NULL,NULL,NULL,NULL,'Hatley',1,1048,NULL,'54440',NULL,1228,44.830734,-89.37414,0,NULL,NULL,55), - (116,28,1,1,0,'4H Pine Pl E',4,'H',NULL,'Pine','Pl','E',NULL,NULL,NULL,NULL,'Hatley',1,1048,NULL,'54440',NULL,1228,44.830734,-89.37414,0,NULL,NULL,55), - (117,51,1,1,0,'4H Pine Pl E',4,'H',NULL,'Pine','Pl','E',NULL,NULL,NULL,NULL,'Hatley',1,1048,NULL,'54440',NULL,1228,44.830734,-89.37414,0,NULL,NULL,55), - (118,141,1,1,0,'36N Beech Dr SE',36,'N',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'Aspinwall',1,1014,NULL,'51432',NULL,1228,41.911924,-95.135602,0,NULL,NULL,56), - (119,185,1,1,0,'36N Beech Dr SE',36,'N',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'Aspinwall',1,1014,NULL,'51432',NULL,1228,41.911924,-95.135602,0,NULL,NULL,56), - (120,166,1,0,0,'36N Beech Dr SE',36,'N',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'Aspinwall',1,1014,NULL,'51432',NULL,1228,41.911924,-95.135602,0,NULL,NULL,56), - (121,138,1,1,0,'36N Beech Dr SE',36,'N',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'Aspinwall',1,1014,NULL,'51432',NULL,1228,41.911924,-95.135602,0,NULL,NULL,56), - (122,43,1,1,0,'408A Maple Pl NW',408,'A',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Shade Gap',1,1037,NULL,'17255',NULL,1228,40.152486,-77.8617,0,NULL,NULL,57), - (123,125,1,1,0,'408A Maple Pl NW',408,'A',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Shade Gap',1,1037,NULL,'17255',NULL,1228,40.152486,-77.8617,0,NULL,NULL,57), - (124,130,1,1,0,'408A Maple Pl NW',408,'A',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Shade Gap',1,1037,NULL,'17255',NULL,1228,40.152486,-77.8617,0,NULL,NULL,57), - (125,137,1,1,0,'150T Beech Ln N',150,'T',NULL,'Beech','Ln','N',NULL,NULL,NULL,NULL,'Maple Plain',1,1022,NULL,'55576',NULL,1228,45.015914,-93.47188,0,NULL,NULL,NULL), - (126,109,1,1,0,'326E Second Path E',326,'E',NULL,'Second','Path','E',NULL,NULL,NULL,NULL,'Anthony',1,1008,NULL,'32617',NULL,1228,29.315961,-82.10092,0,NULL,NULL,58), - (127,2,1,1,0,'326E Second Path E',326,'E',NULL,'Second','Path','E',NULL,NULL,NULL,NULL,'Anthony',1,1008,NULL,'32617',NULL,1228,29.315961,-82.10092,0,NULL,NULL,58), - (128,84,1,1,0,'326E Second Path E',326,'E',NULL,'Second','Path','E',NULL,NULL,NULL,NULL,'Anthony',1,1008,NULL,'32617',NULL,1228,29.315961,-82.10092,0,NULL,NULL,58), - (129,165,1,1,0,'326E Second Path E',326,'E',NULL,'Second','Path','E',NULL,NULL,NULL,NULL,'Anthony',1,1008,NULL,'32617',NULL,1228,29.315961,-82.10092,0,NULL,NULL,58), - (130,107,1,1,0,'735F Martin Luther King Ave E',735,'F',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Walker',1,1024,NULL,'64790',NULL,1228,37.903772,-94.21822,0,NULL,NULL,59), - (131,175,1,1,0,'735F Martin Luther King Ave E',735,'F',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Walker',1,1024,NULL,'64790',NULL,1228,37.903772,-94.21822,0,NULL,NULL,59), - (132,112,1,1,0,'735F Martin Luther King Ave E',735,'F',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Walker',1,1024,NULL,'64790',NULL,1228,37.903772,-94.21822,0,NULL,NULL,59), - (133,37,1,1,0,'735F Martin Luther King Ave E',735,'F',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Walker',1,1024,NULL,'64790',NULL,1228,37.903772,-94.21822,0,NULL,NULL,59), - (134,92,1,1,0,'856G Main Pl SW',856,'G',NULL,'Main','Pl','SW',NULL,NULL,NULL,NULL,'Underwood',1,1014,NULL,'51576',NULL,1228,41.388244,-95.68777,0,NULL,NULL,60), - (135,65,1,1,0,'856G Main Pl SW',856,'G',NULL,'Main','Pl','SW',NULL,NULL,NULL,NULL,'Underwood',1,1014,NULL,'51576',NULL,1228,41.388244,-95.68777,0,NULL,NULL,60), - (136,91,1,1,0,'856G Main Pl SW',856,'G',NULL,'Main','Pl','SW',NULL,NULL,NULL,NULL,'Underwood',1,1014,NULL,'51576',NULL,1228,41.388244,-95.68777,0,NULL,NULL,60), - (137,173,1,1,0,'953V Second Rd N',953,'V',NULL,'Second','Rd','N',NULL,NULL,NULL,NULL,'Cascilla',1,1023,NULL,'38920',NULL,1228,33.875369,-90.10215,0,NULL,NULL,NULL), - (138,71,1,1,0,'121W El Camino Rd N',121,'W',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Running Springs',1,1004,NULL,'92382',NULL,1228,34.205626,-117.10499,0,NULL,NULL,61), - (139,42,1,1,0,'121W El Camino Rd N',121,'W',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Running Springs',1,1004,NULL,'92382',NULL,1228,34.205626,-117.10499,0,NULL,NULL,61), - (140,118,1,1,0,'121W El Camino Rd N',121,'W',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Running Springs',1,1004,NULL,'92382',NULL,1228,34.205626,-117.10499,0,NULL,NULL,61), - (141,20,1,1,0,'121W El Camino Rd N',121,'W',NULL,'El Camino','Rd','N',NULL,NULL,NULL,NULL,'Running Springs',1,1004,NULL,'92382',NULL,1228,34.205626,-117.10499,0,NULL,NULL,61), - (142,23,1,1,0,'528E Dowlen Blvd SE',528,'E',NULL,'Dowlen','Blvd','SE',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33065',NULL,1228,26.272608,-80.25589,0,NULL,NULL,62), - (143,66,1,0,0,'528E Dowlen Blvd SE',528,'E',NULL,'Dowlen','Blvd','SE',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33065',NULL,1228,26.272608,-80.25589,0,NULL,NULL,62), - (144,169,1,1,0,'528E Dowlen Blvd SE',528,'E',NULL,'Dowlen','Blvd','SE',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33065',NULL,1228,26.272608,-80.25589,0,NULL,NULL,62), - (145,132,1,1,0,'528E Dowlen Blvd SE',528,'E',NULL,'Dowlen','Blvd','SE',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33065',NULL,1228,26.272608,-80.25589,0,NULL,NULL,62), - (146,187,1,1,0,'757V Second Path N',757,'V',NULL,'Second','Path','N',NULL,NULL,NULL,NULL,'Farmington',1,1014,NULL,'52626',NULL,1228,40.655336,-91.72385,0,NULL,NULL,63), - (147,60,1,1,0,'757V Second Path N',757,'V',NULL,'Second','Path','N',NULL,NULL,NULL,NULL,'Farmington',1,1014,NULL,'52626',NULL,1228,40.655336,-91.72385,0,NULL,NULL,63), - (148,33,1,1,0,'757V Second Path N',757,'V',NULL,'Second','Path','N',NULL,NULL,NULL,NULL,'Farmington',1,1014,NULL,'52626',NULL,1228,40.655336,-91.72385,0,NULL,NULL,63), - (149,26,1,1,0,'992U Second Ln S',992,'U',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'West Bethel',1,1018,NULL,'04286',NULL,1228,44.40205,-70.860094,0,NULL,NULL,NULL), - (150,152,1,1,0,'200K Second Pl W',200,'K',NULL,'Second','Pl','W',NULL,NULL,NULL,NULL,'Renville',1,1022,NULL,'56284',NULL,1228,44.783251,-95.20682,0,NULL,NULL,64), - (151,148,1,1,0,'200K Second Pl W',200,'K',NULL,'Second','Pl','W',NULL,NULL,NULL,NULL,'Renville',1,1022,NULL,'56284',NULL,1228,44.783251,-95.20682,0,NULL,NULL,64), - (152,32,1,1,0,'200K Second Pl W',200,'K',NULL,'Second','Pl','W',NULL,NULL,NULL,NULL,'Renville',1,1022,NULL,'56284',NULL,1228,44.783251,-95.20682,0,NULL,NULL,64), - (153,124,1,1,0,'200K Second Pl W',200,'K',NULL,'Second','Pl','W',NULL,NULL,NULL,NULL,'Renville',1,1022,NULL,'56284',NULL,1228,44.783251,-95.20682,0,NULL,NULL,64), - (154,190,1,1,0,'33X Northpoint Pl N',33,'X',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'Kirkville',1,1031,NULL,'13082',NULL,1228,43.099547,-75.9619,0,NULL,NULL,65), - (155,7,1,1,0,'33X Northpoint Pl N',33,'X',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'Kirkville',1,1031,NULL,'13082',NULL,1228,43.099547,-75.9619,0,NULL,NULL,65), - (156,150,1,1,0,'33X Northpoint Pl N',33,'X',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'Kirkville',1,1031,NULL,'13082',NULL,1228,43.099547,-75.9619,0,NULL,NULL,65), - (157,158,1,1,0,'770H Bay Ave W',770,'H',NULL,'Bay','Ave','W',NULL,NULL,NULL,NULL,'Swisshome',1,1036,NULL,'97480',NULL,1228,44.127179,-123.83519,0,NULL,NULL,NULL), - (158,44,1,1,0,'7B Van Ness Way N',7,'B',NULL,'Van Ness','Way','N',NULL,NULL,NULL,NULL,'Sulphur Springs',1,1042,NULL,'75482',NULL,1228,33.143752,-95.60102,0,NULL,NULL,66), - (159,98,1,1,0,'7B Van Ness Way N',7,'B',NULL,'Van Ness','Way','N',NULL,NULL,NULL,NULL,'Sulphur Springs',1,1042,NULL,'75482',NULL,1228,33.143752,-95.60102,0,NULL,NULL,66), - (160,103,1,1,0,'7B Van Ness Way N',7,'B',NULL,'Van Ness','Way','N',NULL,NULL,NULL,NULL,'Sulphur Springs',1,1042,NULL,'75482',NULL,1228,33.143752,-95.60102,0,NULL,NULL,66), - (161,105,1,1,0,'1X Caulder Rd NE',1,'X',NULL,'Caulder','Rd','NE',NULL,NULL,NULL,NULL,'Durbin',1,1047,NULL,'26264',NULL,1228,38.55181,-79.83449,0,NULL,NULL,NULL), - (162,184,1,1,0,'265V Cadell Path E',265,'V',NULL,'Cadell','Path','E',NULL,NULL,NULL,NULL,'Homestead',1,1008,NULL,'33031',NULL,1228,25.526214,-80.49632,0,NULL,NULL,67), - (163,67,1,1,0,'265V Cadell Path E',265,'V',NULL,'Cadell','Path','E',NULL,NULL,NULL,NULL,'Homestead',1,1008,NULL,'33031',NULL,1228,25.526214,-80.49632,0,NULL,NULL,67), - (164,178,1,1,0,'265V Cadell Path E',265,'V',NULL,'Cadell','Path','E',NULL,NULL,NULL,NULL,'Homestead',1,1008,NULL,'33031',NULL,1228,25.526214,-80.49632,0,NULL,NULL,67), - (165,63,1,1,0,'265V Cadell Path E',265,'V',NULL,'Cadell','Path','E',NULL,NULL,NULL,NULL,'Homestead',1,1008,NULL,'33031',NULL,1228,25.526214,-80.49632,0,NULL,NULL,67), - (166,68,1,1,0,'216Z El Camino Dr N',216,'Z',NULL,'El Camino','Dr','N',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10274',NULL,1228,40.780751,-73.977182,0,NULL,NULL,68), - (167,177,1,1,0,'216Z El Camino Dr N',216,'Z',NULL,'El Camino','Dr','N',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10274',NULL,1228,40.780751,-73.977182,0,NULL,NULL,68), - (168,146,1,1,0,'216Z El Camino Dr N',216,'Z',NULL,'El Camino','Dr','N',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10274',NULL,1228,40.780751,-73.977182,0,NULL,NULL,68), - (169,104,1,1,0,'588P College Rd NW',588,'P',NULL,'College','Rd','NW',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,NULL), - (170,120,1,1,0,'414Y Van Ness Pl W',414,'Y',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'West Palm Beach',1,1008,NULL,'33406',NULL,1228,26.659294,-80.09118,0,NULL,NULL,69), - (171,171,1,1,0,'414Y Van Ness Pl W',414,'Y',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'West Palm Beach',1,1008,NULL,'33406',NULL,1228,26.659294,-80.09118,0,NULL,NULL,69), - (172,192,1,1,0,'414Y Van Ness Pl W',414,'Y',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'West Palm Beach',1,1008,NULL,'33406',NULL,1228,26.659294,-80.09118,0,NULL,NULL,69), - (173,195,1,1,0,'414Y Van Ness Pl W',414,'Y',NULL,'Van Ness','Pl','W',NULL,NULL,NULL,NULL,'West Palm Beach',1,1008,NULL,'33406',NULL,1228,26.659294,-80.09118,0,NULL,NULL,69), - (174,83,1,1,0,'13D College Rd SW',13,'D',NULL,'College','Rd','SW',NULL,NULL,NULL,NULL,'Roebuck',1,1039,NULL,'29376',NULL,1228,34.856283,-81.95444,0,NULL,NULL,70), - (175,82,1,1,0,'13D College Rd SW',13,'D',NULL,'College','Rd','SW',NULL,NULL,NULL,NULL,'Roebuck',1,1039,NULL,'29376',NULL,1228,34.856283,-81.95444,0,NULL,NULL,70), - (176,176,1,1,0,'13D College Rd SW',13,'D',NULL,'College','Rd','SW',NULL,NULL,NULL,NULL,'Roebuck',1,1039,NULL,'29376',NULL,1228,34.856283,-81.95444,0,NULL,NULL,70), - (177,35,1,1,0,'990G Bay Ln NE',990,'G',NULL,'Bay','Ln','NE',NULL,NULL,NULL,NULL,'Hayti',1,1040,NULL,'57241',NULL,1228,44.695445,-97.21584,0,NULL,NULL,NULL), - (178,179,1,1,0,'60E States Ave SW',60,'E',NULL,'States','Ave','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1045,NULL,'24007',NULL,1228,37.274175,-79.95786,0,NULL,NULL,71), - (179,119,1,1,0,'60E States Ave SW',60,'E',NULL,'States','Ave','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1045,NULL,'24007',NULL,1228,37.274175,-79.95786,0,NULL,NULL,71), - (180,140,1,0,0,'60E States Ave SW',60,'E',NULL,'States','Ave','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1045,NULL,'24007',NULL,1228,37.274175,-79.95786,0,NULL,NULL,71), - (181,6,1,1,0,'735U Second Ln NE',735,'U',NULL,'Second','Ln','NE',NULL,NULL,NULL,NULL,'Glyndon',1,1019,NULL,'21071',NULL,1228,39.472604,-76.81424,0,NULL,NULL,NULL), - (182,200,1,1,0,'926K Pine Pl N',926,'K',NULL,'Pine','Pl','N',NULL,NULL,NULL,NULL,'Keizer',1,1036,NULL,'97307',NULL,1228,44.984465,-122.457024,0,NULL,NULL,72), - (183,11,1,1,0,'926K Pine Pl N',926,'K',NULL,'Pine','Pl','N',NULL,NULL,NULL,NULL,'Keizer',1,1036,NULL,'97307',NULL,1228,44.984465,-122.457024,0,NULL,NULL,72), - (184,117,1,1,0,'926K Pine Pl N',926,'K',NULL,'Pine','Pl','N',NULL,NULL,NULL,NULL,'Keizer',1,1036,NULL,'97307',NULL,1228,44.984465,-122.457024,0,NULL,NULL,72), - (185,86,1,1,0,'483R Woodbridge St N',483,'R',NULL,'Woodbridge','St','N',NULL,NULL,NULL,NULL,'Pacolet Mills',1,1039,NULL,'29373',NULL,1228,34.925281,-81.74321,0,NULL,NULL,NULL), - (186,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), - (187,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), - (188,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,174,1,1,0,'328Y El Camino Ave SE',328,'Y',NULL,'El Camino','Ave','SE',NULL,NULL,NULL,NULL,'Cartwright',1,1035,NULL,'74731',NULL,1228,33.869195,-96.57617,0,NULL,NULL,NULL), + (2,43,1,1,0,'547N States Pl W',547,'N',NULL,'States','Pl','W',NULL,NULL,NULL,NULL,'Potomac',1,1019,NULL,'20854',NULL,1228,39.035028,-77.19995,0,NULL,NULL,NULL), + (3,14,1,1,0,'773F Jackson St SW',773,'F',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Caledonia',1,1012,NULL,'61011',NULL,1228,42.376423,-88.9325,0,NULL,NULL,NULL), + (4,191,1,1,0,'881I Beech Rd NE',881,'I',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Annapolis',1,1019,NULL,'21411',NULL,1228,38.974203,-76.594942,0,NULL,NULL,NULL), + (5,97,1,1,0,'949A Dowlen Pl NW',949,'A',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Flint Hill',1,1045,NULL,'22627',NULL,1228,38.765004,-78.0948,0,NULL,NULL,NULL), + (6,77,1,1,0,'127U Maple Way S',127,'U',NULL,'Maple','Way','S',NULL,NULL,NULL,NULL,'Huntington',1,1047,NULL,'25709',NULL,1228,38.132114,-82.418277,0,NULL,NULL,NULL), + (7,110,1,1,0,'913G Pine Ave SE',913,'G',NULL,'Pine','Ave','SE',NULL,NULL,NULL,NULL,'Leeds',1,1020,NULL,'01053',NULL,1228,42.353105,-72.70206,0,NULL,NULL,NULL), + (8,101,1,1,0,'270V Van Ness Way W',270,'V',NULL,'Van Ness','Way','W',NULL,NULL,NULL,NULL,'Salesville',1,1034,NULL,'43778',NULL,1228,39.995987,-81.36641,0,NULL,NULL,NULL), + (9,5,1,1,0,'108B Cadell Pl W',108,'B',NULL,'Cadell','Pl','W',NULL,NULL,NULL,NULL,'Monserrate',1,1056,NULL,'00763',NULL,1228,18.452175,-66.399836,0,NULL,NULL,NULL), + (10,184,1,1,0,'153A Caulder St W',153,'A',NULL,'Caulder','St','W',NULL,NULL,NULL,NULL,'Ballentine',1,1039,NULL,'29002',NULL,1228,34.126535,-81.234811,0,NULL,NULL,NULL), + (11,84,1,1,0,'646K Green Blvd S',646,'K',NULL,'Green','Blvd','S',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28256',NULL,1228,35.26002,-80.804151,0,NULL,NULL,NULL), + (12,9,1,1,0,'252M Van Ness Path N',252,'M',NULL,'Van Ness','Path','N',NULL,NULL,NULL,NULL,'Nickelsville',1,1045,NULL,'24271',NULL,1228,36.741128,-82.41823,0,NULL,NULL,NULL), + (13,25,1,1,0,'621Q Pine Blvd SW',621,'Q',NULL,'Pine','Blvd','SW',NULL,NULL,NULL,NULL,'Finger',1,1041,NULL,'38334',NULL,1228,35.357639,-88.60089,0,NULL,NULL,NULL), + (14,137,1,1,0,'897Q Dowlen Rd N',897,'Q',NULL,'Dowlen','Rd','N',NULL,NULL,NULL,NULL,'Amherst',1,1040,NULL,'57421',NULL,1228,45.755146,-97.92723,0,NULL,NULL,NULL), + (15,90,1,1,0,'512M Maple Rd NW',512,'M',NULL,'Maple','Rd','NW',NULL,NULL,NULL,NULL,'Leeds Point',1,1029,NULL,'08220',NULL,1228,39.509208,-74.608557,0,NULL,NULL,NULL), + (16,4,1,1,0,'543H Van Ness Ave SW',543,'H',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98195',NULL,1228,47.432251,-121.803388,0,NULL,NULL,NULL), + (17,116,1,1,0,'329J Pine St E',329,'J',NULL,'Pine','St','E',NULL,NULL,NULL,NULL,'Draper',1,1045,NULL,'24324',NULL,1228,36.973028,-80.79309,0,NULL,NULL,NULL), + (18,94,1,1,0,'733Q College Path SW',733,'Q',NULL,'College','Path','SW',NULL,NULL,NULL,NULL,'Moscow',1,1042,NULL,'75960',NULL,1228,30.903688,-94.80916,0,NULL,NULL,NULL), + (19,130,1,1,0,'663K Jackson Blvd E',663,'K',NULL,'Jackson','Blvd','E',NULL,NULL,NULL,NULL,'Bellefontaine',1,1023,NULL,'39737',NULL,1228,33.648956,-89.334234,0,NULL,NULL,NULL), + (20,41,1,1,0,'179B Jackson Blvd SE',179,'B',NULL,'Jackson','Blvd','SE',NULL,NULL,NULL,NULL,'Parish',1,1031,NULL,'13131',NULL,1228,43.415157,-76.11416,0,NULL,NULL,NULL), + (21,164,1,1,0,'139R Van Ness Path NE',139,'R',NULL,'Van Ness','Path','NE',NULL,NULL,NULL,NULL,'Strausstown',1,1037,NULL,'19559',NULL,1228,40.492053,-76.1841,0,NULL,NULL,NULL), + (22,138,1,1,0,'889X Second Blvd SE',889,'X',NULL,'Second','Blvd','SE',NULL,NULL,NULL,NULL,'Marietta',1,1009,NULL,'30061',NULL,1228,33.932842,-84.556004,0,NULL,NULL,NULL), + (23,118,1,1,0,'90W Beech Ln SE',90,'W',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Englewood',1,1005,NULL,'80155',NULL,1228,39.738752,-104.408349,0,NULL,NULL,NULL), + (24,140,1,1,0,'780T Caulder Blvd W',780,'T',NULL,'Caulder','Blvd','W',NULL,NULL,NULL,NULL,'San Francisco',1,1004,NULL,'94142',NULL,1228,37.784827,-122.727802,0,NULL,NULL,NULL), + (25,153,1,1,0,'225M Van Ness Way E',225,'M',NULL,'Van Ness','Way','E',NULL,NULL,NULL,NULL,'Pep',1,1030,NULL,'88126',NULL,1228,33.793145,-103.27741,0,NULL,NULL,NULL), + (26,58,1,1,0,'874K Martin Luther King Path S',874,'K',NULL,'Martin Luther King','Path','S',NULL,NULL,NULL,NULL,'San Gabriel',1,1004,NULL,'91776',NULL,1228,34.089059,-118.0951,0,NULL,NULL,NULL), + (27,163,1,1,0,'321E Maple Way SW',321,'E',NULL,'Maple','Way','SW',NULL,NULL,NULL,NULL,'Noble',1,1035,NULL,'73068',NULL,1228,35.138421,-97.32689,0,NULL,NULL,NULL), + (28,44,1,1,0,'596C Martin Luther King Rd SW',596,'C',NULL,'Martin Luther King','Rd','SW',NULL,NULL,NULL,NULL,'Reddick',1,1012,NULL,'60961',NULL,1228,41.105629,-88.23794,0,NULL,NULL,NULL), + (29,95,1,1,0,'905H Main Ave NW',905,'H',NULL,'Main','Ave','NW',NULL,NULL,NULL,NULL,'West Townshend',1,1044,NULL,'05359',NULL,1228,43.149377,-72.72492,0,NULL,NULL,NULL), + (30,6,1,1,0,'764D Woodbridge St E',764,'D',NULL,'Woodbridge','St','E',NULL,NULL,NULL,NULL,'Covina',1,1004,NULL,'91723',NULL,1228,34.085809,-117.88694,0,NULL,NULL,NULL), + (31,177,1,1,0,'102K Pine Ave NE',102,'K',NULL,'Pine','Ave','NE',NULL,NULL,NULL,NULL,'La Farge',1,1048,NULL,'54639',NULL,1228,43.610629,-90.62108,0,NULL,NULL,NULL), + (32,120,1,1,0,'857R Woodbridge Path NW',857,'R',NULL,'Woodbridge','Path','NW',NULL,NULL,NULL,NULL,'Walton',1,1013,NULL,'46994',NULL,1228,40.668348,-86.24943,0,NULL,NULL,NULL), + (33,52,1,1,0,'188S College Dr N',188,'S',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Holyoke',1,1005,NULL,'80734',NULL,1228,40.582954,-102.30451,0,NULL,NULL,NULL), + (34,117,1,1,0,'251H Martin Luther King Dr W',251,'H',NULL,'Martin Luther King','Dr','W',NULL,NULL,NULL,NULL,'Anderson',1,1013,NULL,'46018',NULL,1228,40.161733,-85.719659,0,NULL,NULL,NULL), + (35,197,1,1,0,'529Q Jackson Pl N',529,'Q',NULL,'Jackson','Pl','N',NULL,NULL,NULL,NULL,'East Amherst',1,1031,NULL,'14051',NULL,1228,43.025217,-78.70394,0,NULL,NULL,NULL), + (36,17,1,1,0,'399R States Way SW',399,'R',NULL,'States','Way','SW',NULL,NULL,NULL,NULL,'Winnfield',1,1017,NULL,'71483',NULL,1228,31.915828,-92.6445,0,NULL,NULL,NULL), + (37,33,1,1,0,'609E Maple Path N',609,'E',NULL,'Maple','Path','N',NULL,NULL,NULL,NULL,'Eaton',1,1048,NULL,'53245',NULL,1228,44.056094,-87.985595,0,NULL,NULL,NULL), + (38,192,1,1,0,'862G Green Ln SW',862,'G',NULL,'Green','Ln','SW',NULL,NULL,NULL,NULL,'Darrington',1,1046,NULL,'98241',NULL,1228,48.265483,-121.56075,0,NULL,NULL,NULL), + (39,71,1,1,0,'13H Second St SW',13,'H',NULL,'Second','St','SW',NULL,NULL,NULL,NULL,'Cleveland',1,1041,NULL,'37311',NULL,1228,35.146362,-84.88723,0,NULL,NULL,NULL), + (40,133,1,1,0,'521J Northpoint Pl N',521,'J',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93032',NULL,1228,34.032383,-119.1343,0,NULL,NULL,NULL), + (41,76,1,1,0,'535F Bay Path NW',535,'F',NULL,'Bay','Path','NW',NULL,NULL,NULL,NULL,'Nutrioso',1,1002,NULL,'85932',NULL,1228,33.927014,-109.22149,0,NULL,NULL,NULL), + (42,51,1,1,0,'68R Bay Blvd NE',68,'R',NULL,'Bay','Blvd','NE',NULL,NULL,NULL,NULL,'Laneville',1,1042,NULL,'75667',NULL,1228,31.981458,-94.85741,0,NULL,NULL,NULL), + (43,56,1,1,0,'863Q Jackson Pl NW',863,'Q',NULL,'Jackson','Pl','NW',NULL,NULL,NULL,NULL,'Exira',1,1014,NULL,'50076',NULL,1228,41.592497,-94.87032,0,NULL,NULL,NULL), + (44,8,1,1,0,'473L Cadell Ave NE',473,'L',NULL,'Cadell','Ave','NE',NULL,NULL,NULL,NULL,'Patoka',1,1013,NULL,'47666',NULL,1228,38.411923,-87.58462,0,NULL,NULL,NULL), + (45,29,1,1,0,'669H Northpoint Path W',669,'H',NULL,'Northpoint','Path','W',NULL,NULL,NULL,NULL,'Elbridge',1,1031,NULL,'13060',NULL,1228,43.025843,-76.42589,0,NULL,NULL,NULL), + (46,27,1,1,0,'950Z Cadell Ln SW',950,'Z',NULL,'Cadell','Ln','SW',NULL,NULL,NULL,NULL,'Gentryville',1,1013,NULL,'47537',NULL,1228,38.099889,-87.04073,0,NULL,NULL,NULL), + (47,67,1,1,0,'202F College Path S',202,'F',NULL,'College','Path','S',NULL,NULL,NULL,NULL,'Murrells Inlet',1,1039,NULL,'29576',NULL,1228,33.568115,-79.03226,0,NULL,NULL,NULL), + (48,106,1,1,0,'692M Woodbridge Dr SE',692,'M',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Sophia',1,1032,NULL,'27350',NULL,1228,35.808395,-79.90244,0,NULL,NULL,NULL), + (49,47,1,1,0,'248G College Ave E',248,'G',NULL,'College','Ave','E',NULL,NULL,NULL,NULL,'Riegelsville',1,1037,NULL,'18077',NULL,1228,40.576989,-75.22121,0,NULL,NULL,NULL), + (50,200,1,1,0,'641P Second Blvd SE',641,'P',NULL,'Second','Blvd','SE',NULL,NULL,NULL,NULL,'Greensboro',1,1044,NULL,'05841',NULL,1228,44.599177,-72.31179,0,NULL,NULL,NULL), + (51,103,1,1,0,'10Z Cadell Pl E',10,'Z',NULL,'Cadell','Pl','E',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'31107',NULL,1228,33.844371,-84.47405,0,NULL,NULL,NULL), + (52,75,1,1,0,'849U Maple Ave SE',849,'U',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Hot Springs',1,1003,NULL,'71907',NULL,1228,34.532516,-93.048397,0,NULL,NULL,NULL), + (53,66,1,1,0,'421C El Camino Way W',421,'C',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Salem',1,1020,NULL,'01971',NULL,1228,42.635443,-70.879123,0,NULL,NULL,NULL), + (54,92,1,1,0,'307P Bay St SW',307,'P',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'Orange Park',1,1008,NULL,'32065',NULL,1228,30.133007,-81.77904,0,NULL,NULL,NULL), + (55,85,1,1,0,'532L Green Path SW',532,'L',NULL,'Green','Path','SW',NULL,NULL,NULL,NULL,'Sebeka',1,1022,NULL,'56477',NULL,1228,46.630023,-95.01222,0,NULL,NULL,NULL), + (56,158,1,1,0,'948N Woodbridge Dr N',948,'N',NULL,'Woodbridge','Dr','N',NULL,NULL,NULL,NULL,'Colesburg',1,1014,NULL,'52035',NULL,1228,42.662381,-91.18541,0,NULL,NULL,NULL), + (57,57,1,1,0,'423O Cadell Way W',423,'O',NULL,'Cadell','Way','W',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27198',NULL,1228,36.027482,-80.20728,0,NULL,NULL,NULL), + (58,182,1,1,0,'43N Green Pl SE',43,'N',NULL,'Green','Pl','SE',NULL,NULL,NULL,NULL,'Dunlevy',1,1037,NULL,'15432',NULL,1228,40.117368,-79.86413,0,NULL,NULL,NULL), + (59,199,1,1,0,'274W Lincoln Pl W',274,'W',NULL,'Lincoln','Pl','W',NULL,NULL,NULL,NULL,'Aurora',1,1026,NULL,'68818',NULL,1228,40.83605,-98.00493,0,NULL,NULL,NULL), + (60,93,1,1,0,'318R Martin Luther King Pl N',318,'R',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'Floyd',1,1030,NULL,'88118',NULL,1228,34.215025,-103.61576,0,NULL,NULL,NULL), + (61,114,1,1,0,'486Q Woodbridge St SE',486,'Q',NULL,'Woodbridge','St','SE',NULL,NULL,NULL,NULL,'Ricetown',1,1016,NULL,'41364',NULL,1228,37.382832,-83.62327,0,NULL,NULL,NULL), + (62,87,1,1,0,'212B Caulder Blvd SE',212,'B',NULL,'Caulder','Blvd','SE',NULL,NULL,NULL,NULL,'Gideon',1,1024,NULL,'63848',NULL,1228,36.449337,-89.89562,0,NULL,NULL,NULL), + (63,7,1,1,0,'352U Martin Luther King Path NW',352,'U',NULL,'Martin Luther King','Path','NW',NULL,NULL,NULL,NULL,'Medford',1,1036,NULL,'97501',NULL,1228,42.313498,-122.87944,0,NULL,NULL,NULL), + (64,167,1,1,0,'657K Pine Dr N',657,'K',NULL,'Pine','Dr','N',NULL,NULL,NULL,NULL,'Wauchula',1,1008,NULL,'33873',NULL,1228,27.541676,-81.8127,0,NULL,NULL,NULL), + (65,107,3,1,0,'489I Caulder Path W',489,'I',NULL,'Caulder','Path','W',NULL,'Churchgate',NULL,NULL,'Laingsburg',1,1021,NULL,'48848',NULL,1228,42.884921,-84.3569,0,NULL,NULL,NULL), + (66,48,3,1,0,'48P Van Ness Path E',48,'P',NULL,'Van Ness','Path','E',NULL,'Cuffe Parade',NULL,NULL,'Elgin',1,1012,NULL,'60121',NULL,1228,42.04133,-88.3126,0,NULL,NULL,NULL), + (67,127,2,1,0,'48P Van Ness Path E',48,'P',NULL,'Van Ness','Path','E',NULL,'Cuffe Parade',NULL,NULL,'Elgin',1,1012,NULL,'60121',NULL,1228,42.04133,-88.3126,0,NULL,NULL,66), + (68,115,3,1,0,'713G Bay Way SE',713,'G',NULL,'Bay','Way','SE',NULL,'Urgent',NULL,NULL,'Port Alsworth',1,1001,NULL,'99653',NULL,1228,60.102331,-154.55708,0,NULL,NULL,NULL), + (69,50,2,1,0,'713G Bay Way SE',713,'G',NULL,'Bay','Way','SE',NULL,'Urgent',NULL,NULL,'Port Alsworth',1,1001,NULL,'99653',NULL,1228,60.102331,-154.55708,0,NULL,NULL,68), + (70,165,3,1,0,'629M Woodbridge Dr NE',629,'M',NULL,'Woodbridge','Dr','NE',NULL,'Donor Relations',NULL,NULL,'Eastlake',1,1034,NULL,'44097',NULL,1228,41.910676,-81.249027,0,NULL,NULL,NULL), + (71,134,2,1,0,'629M Woodbridge Dr NE',629,'M',NULL,'Woodbridge','Dr','NE',NULL,'Donor Relations',NULL,NULL,'Eastlake',1,1034,NULL,'44097',NULL,1228,41.910676,-81.249027,0,NULL,NULL,70), + (72,175,3,1,0,'552B Maple Dr E',552,'B',NULL,'Maple','Dr','E',NULL,'c/o OPDC',NULL,NULL,'Dousman',1,1048,NULL,'53118',NULL,1228,42.991622,-88.47085,0,NULL,NULL,NULL), + (73,8,2,0,0,'552B Maple Dr E',552,'B',NULL,'Maple','Dr','E',NULL,'c/o OPDC',NULL,NULL,'Dousman',1,1048,NULL,'53118',NULL,1228,42.991622,-88.47085,0,NULL,NULL,72), + (74,126,3,1,0,'316M Lincoln Dr S',316,'M',NULL,'Lincoln','Dr','S',NULL,'c/o OPDC',NULL,NULL,'Brinklow',1,1019,NULL,'20862',NULL,1228,39.184019,-77.01708,0,NULL,NULL,NULL), + (75,99,2,1,0,'316M Lincoln Dr S',316,'M',NULL,'Lincoln','Dr','S',NULL,'c/o OPDC',NULL,NULL,'Brinklow',1,1019,NULL,'20862',NULL,1228,39.184019,-77.01708,0,NULL,NULL,74), + (76,74,3,1,0,'317E Cadell Ave N',317,'E',NULL,'Cadell','Ave','N',NULL,'Mailstop 101',NULL,NULL,'Lake Butler',1,1008,NULL,'32054',NULL,1228,30.005135,-82.38103,0,NULL,NULL,NULL), + (77,23,3,1,0,'221X Lincoln St S',221,'X',NULL,'Lincoln','St','S',NULL,'Subscriptions Dept',NULL,NULL,'Judson',1,1042,NULL,'75660',NULL,1228,32.51121,-94.783493,0,NULL,NULL,NULL), + (78,124,2,1,0,'221X Lincoln St S',221,'X',NULL,'Lincoln','St','S',NULL,'Subscriptions Dept',NULL,NULL,'Judson',1,1042,NULL,'75660',NULL,1228,32.51121,-94.783493,0,NULL,NULL,77), + (79,109,3,1,0,'596V Main Way N',596,'V',NULL,'Main','Way','N',NULL,'Community Relations',NULL,NULL,'Snowmass Village',1,1005,NULL,'81613',NULL,1228,39.212626,-106.941907,0,NULL,NULL,NULL), + (80,161,2,1,0,'596V Main Way N',596,'V',NULL,'Main','Way','N',NULL,'Community Relations',NULL,NULL,'Snowmass Village',1,1005,NULL,'81613',NULL,1228,39.212626,-106.941907,0,NULL,NULL,79), + (81,22,3,1,0,'249W Woodbridge Path SE',249,'W',NULL,'Woodbridge','Path','SE',NULL,'Cuffe Parade',NULL,NULL,'Camp Lejeune',1,1032,NULL,'28547',NULL,1228,34.637348,-77.3127,0,NULL,NULL,NULL), + (82,52,2,0,0,'249W Woodbridge Path SE',249,'W',NULL,'Woodbridge','Path','SE',NULL,'Cuffe Parade',NULL,NULL,'Camp Lejeune',1,1032,NULL,'28547',NULL,1228,34.637348,-77.3127,0,NULL,NULL,81), + (83,80,3,1,0,'96L Caulder Path NE',96,'L',NULL,'Caulder','Path','NE',NULL,'Cuffe Parade',NULL,NULL,'Kirkwood',1,1031,NULL,'13795',NULL,1228,42.056312,-75.79275,0,NULL,NULL,NULL), + (84,13,2,1,0,'96L Caulder Path NE',96,'L',NULL,'Caulder','Path','NE',NULL,'Cuffe Parade',NULL,NULL,'Kirkwood',1,1031,NULL,'13795',NULL,1228,42.056312,-75.79275,0,NULL,NULL,83), + (85,150,3,1,0,'690M College Dr SW',690,'M',NULL,'College','Dr','SW',NULL,'c/o OPDC',NULL,NULL,'Chillicothe',1,1014,NULL,'52548',NULL,1228,41.085573,-92.52863,0,NULL,NULL,NULL), + (86,180,3,1,0,'941Y College Rd NE',941,'Y',NULL,'College','Rd','NE',NULL,'Community Relations',NULL,NULL,'Littlefork',1,1022,NULL,'56653',NULL,1228,48.366833,-93.56367,0,NULL,NULL,NULL), + (87,17,2,0,0,'941Y College Rd NE',941,'Y',NULL,'College','Rd','NE',NULL,'Community Relations',NULL,NULL,'Littlefork',1,1022,NULL,'56653',NULL,1228,48.366833,-93.56367,0,NULL,NULL,86), + (88,173,3,1,0,'243H Northpoint Way S',243,'H',NULL,'Northpoint','Way','S',NULL,'c/o PO Plus',NULL,NULL,'Saint Helena',1,1004,NULL,'94574',NULL,1228,38.511241,-122.45695,0,NULL,NULL,NULL), + (89,179,2,1,0,'243H Northpoint Way S',243,'H',NULL,'Northpoint','Way','S',NULL,'c/o PO Plus',NULL,NULL,'Saint Helena',1,1004,NULL,'94574',NULL,1228,38.511241,-122.45695,0,NULL,NULL,88), + (90,38,3,1,0,'306X College Dr SE',306,'X',NULL,'College','Dr','SE',NULL,'Subscriptions Dept',NULL,NULL,'Pawling',1,1031,NULL,'12564',NULL,1228,41.570328,-73.59825,0,NULL,NULL,NULL), + (91,88,2,1,0,'306X College Dr SE',306,'X',NULL,'College','Dr','SE',NULL,'Subscriptions Dept',NULL,NULL,'Pawling',1,1031,NULL,'12564',NULL,1228,41.570328,-73.59825,0,NULL,NULL,90), + (92,104,3,1,0,'189D Dowlen Ave NE',189,'D',NULL,'Dowlen','Ave','NE',NULL,'Editorial Dept',NULL,NULL,'Silver Spring',1,1019,NULL,'20997',NULL,1228,39.143979,-77.207617,0,NULL,NULL,NULL), + (93,51,2,0,0,'189D Dowlen Ave NE',189,'D',NULL,'Dowlen','Ave','NE',NULL,'Editorial Dept',NULL,NULL,'Silver Spring',1,1019,NULL,'20997',NULL,1228,39.143979,-77.207617,0,NULL,NULL,92), + (94,65,3,1,0,'304U Second Dr SW',304,'U',NULL,'Second','Dr','SW',NULL,'Attn: Accounting',NULL,NULL,'Garyville',1,1017,NULL,'70051',NULL,1228,30.058276,-90.61738,0,NULL,NULL,NULL), + (95,113,3,1,0,'409W El Camino Ln W',409,'W',NULL,'El Camino','Ln','W',NULL,'c/o OPDC',NULL,NULL,'Rough And Ready',1,1004,NULL,'95975',NULL,1228,39.224179,-121.14539,0,NULL,NULL,NULL), + (96,122,2,1,0,'409W El Camino Ln W',409,'W',NULL,'El Camino','Ln','W',NULL,'c/o OPDC',NULL,NULL,'Rough And Ready',1,1004,NULL,'95975',NULL,1228,39.224179,-121.14539,0,NULL,NULL,95), + (97,54,3,1,0,'4G College Way NW',4,'G',NULL,'College','Way','NW',NULL,'Churchgate',NULL,NULL,'Amboy',1,1012,NULL,'61310',NULL,1228,41.707588,-89.34371,0,NULL,NULL,NULL), + (98,40,2,1,0,'4G College Way NW',4,'G',NULL,'College','Way','NW',NULL,'Churchgate',NULL,NULL,'Amboy',1,1012,NULL,'61310',NULL,1228,41.707588,-89.34371,0,NULL,NULL,97), + (99,46,3,1,0,'100A Van Ness Path N',100,'A',NULL,'Van Ness','Path','N',NULL,'Attn: Development',NULL,NULL,'Goleta',1,1004,NULL,'93199',NULL,1228,34.262834,-119.848555,0,NULL,NULL,NULL), + (100,138,2,0,0,'100A Van Ness Path N',100,'A',NULL,'Van Ness','Path','N',NULL,'Attn: Development',NULL,NULL,'Goleta',1,1004,NULL,'93199',NULL,1228,34.262834,-119.848555,0,NULL,NULL,99), + (101,144,1,1,0,'669H Northpoint Path W',669,'H',NULL,'Northpoint','Path','W',NULL,NULL,NULL,NULL,'Elbridge',1,1031,NULL,'13060',NULL,1228,43.025843,-76.42589,0,NULL,NULL,45), + (102,151,1,1,0,'669H Northpoint Path W',669,'H',NULL,'Northpoint','Path','W',NULL,NULL,NULL,NULL,'Elbridge',1,1031,NULL,'13060',NULL,1228,43.025843,-76.42589,0,NULL,NULL,45), + (103,96,1,1,0,'669H Northpoint Path W',669,'H',NULL,'Northpoint','Path','W',NULL,NULL,NULL,NULL,'Elbridge',1,1031,NULL,'13060',NULL,1228,43.025843,-76.42589,0,NULL,NULL,45), + (104,161,1,0,0,'863X Jackson Blvd N',863,'X',NULL,'Jackson','Blvd','N',NULL,NULL,NULL,NULL,'Jacksonville',1,1008,NULL,'32245',NULL,1228,30.34494,-81.683107,0,NULL,NULL,NULL), + (105,63,1,1,0,'950Z Cadell Ln SW',950,'Z',NULL,'Cadell','Ln','SW',NULL,NULL,NULL,NULL,'Gentryville',1,1013,NULL,'47537',NULL,1228,38.099889,-87.04073,0,NULL,NULL,46), + (106,172,1,1,0,'950Z Cadell Ln SW',950,'Z',NULL,'Cadell','Ln','SW',NULL,NULL,NULL,NULL,'Gentryville',1,1013,NULL,'47537',NULL,1228,38.099889,-87.04073,0,NULL,NULL,46), + (107,39,1,1,0,'950Z Cadell Ln SW',950,'Z',NULL,'Cadell','Ln','SW',NULL,NULL,NULL,NULL,'Gentryville',1,1013,NULL,'47537',NULL,1228,38.099889,-87.04073,0,NULL,NULL,46), + (108,179,1,0,0,'950Z Cadell Ln SW',950,'Z',NULL,'Cadell','Ln','SW',NULL,NULL,NULL,NULL,'Gentryville',1,1013,NULL,'47537',NULL,1228,38.099889,-87.04073,0,NULL,NULL,46), + (109,32,1,1,0,'202F College Path S',202,'F',NULL,'College','Path','S',NULL,NULL,NULL,NULL,'Murrells Inlet',1,1039,NULL,'29576',NULL,1228,33.568115,-79.03226,0,NULL,NULL,47), + (110,16,1,1,0,'202F College Path S',202,'F',NULL,'College','Path','S',NULL,NULL,NULL,NULL,'Murrells Inlet',1,1039,NULL,'29576',NULL,1228,33.568115,-79.03226,0,NULL,NULL,47), + (111,146,1,1,0,'202F College Path S',202,'F',NULL,'College','Path','S',NULL,NULL,NULL,NULL,'Murrells Inlet',1,1039,NULL,'29576',NULL,1228,33.568115,-79.03226,0,NULL,NULL,47), + (112,159,1,1,0,'202F College Path S',202,'F',NULL,'College','Path','S',NULL,NULL,NULL,NULL,'Murrells Inlet',1,1039,NULL,'29576',NULL,1228,33.568115,-79.03226,0,NULL,NULL,47), + (113,83,1,1,0,'692M Woodbridge Dr SE',692,'M',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Sophia',1,1032,NULL,'27350',NULL,1228,35.808395,-79.90244,0,NULL,NULL,48), + (114,154,1,1,0,'692M Woodbridge Dr SE',692,'M',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Sophia',1,1032,NULL,'27350',NULL,1228,35.808395,-79.90244,0,NULL,NULL,48), + (115,12,1,1,0,'692M Woodbridge Dr SE',692,'M',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Sophia',1,1032,NULL,'27350',NULL,1228,35.808395,-79.90244,0,NULL,NULL,48), + (116,105,1,1,0,'692M Woodbridge Dr SE',692,'M',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Sophia',1,1032,NULL,'27350',NULL,1228,35.808395,-79.90244,0,NULL,NULL,48), + (117,79,1,1,0,'248G College Ave E',248,'G',NULL,'College','Ave','E',NULL,NULL,NULL,NULL,'Riegelsville',1,1037,NULL,'18077',NULL,1228,40.576989,-75.22121,0,NULL,NULL,49), + (118,36,1,1,0,'248G College Ave E',248,'G',NULL,'College','Ave','E',NULL,NULL,NULL,NULL,'Riegelsville',1,1037,NULL,'18077',NULL,1228,40.576989,-75.22121,0,NULL,NULL,49), + (119,162,1,1,0,'248G College Ave E',248,'G',NULL,'College','Ave','E',NULL,NULL,NULL,NULL,'Riegelsville',1,1037,NULL,'18077',NULL,1228,40.576989,-75.22121,0,NULL,NULL,49), + (120,194,1,1,0,'202B Second Ln W',202,'B',NULL,'Second','Ln','W',NULL,NULL,NULL,NULL,'Magnolia',1,1007,NULL,'19962',NULL,1228,39.06517,-75.49858,0,NULL,NULL,NULL), + (121,170,1,1,0,'641P Second Blvd SE',641,'P',NULL,'Second','Blvd','SE',NULL,NULL,NULL,NULL,'Greensboro',1,1044,NULL,'05841',NULL,1228,44.599177,-72.31179,0,NULL,NULL,50), + (122,37,1,1,0,'641P Second Blvd SE',641,'P',NULL,'Second','Blvd','SE',NULL,NULL,NULL,NULL,'Greensboro',1,1044,NULL,'05841',NULL,1228,44.599177,-72.31179,0,NULL,NULL,50), + (123,15,1,1,0,'641P Second Blvd SE',641,'P',NULL,'Second','Blvd','SE',NULL,NULL,NULL,NULL,'Greensboro',1,1044,NULL,'05841',NULL,1228,44.599177,-72.31179,0,NULL,NULL,50), + (124,69,1,1,0,'391M Woodbridge Path S',391,'M',NULL,'Woodbridge','Path','S',NULL,NULL,NULL,NULL,'Iredell',1,1042,NULL,'76649',NULL,1228,32.001365,-97.88196,0,NULL,NULL,NULL), + (125,59,1,1,0,'10Z Cadell Pl E',10,'Z',NULL,'Cadell','Pl','E',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'31107',NULL,1228,33.844371,-84.47405,0,NULL,NULL,51), + (126,186,1,1,0,'10Z Cadell Pl E',10,'Z',NULL,'Cadell','Pl','E',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'31107',NULL,1228,33.844371,-84.47405,0,NULL,NULL,51), + (127,112,1,1,0,'10Z Cadell Pl E',10,'Z',NULL,'Cadell','Pl','E',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'31107',NULL,1228,33.844371,-84.47405,0,NULL,NULL,51), + (128,131,1,1,0,'806C Second Rd SE',806,'C',NULL,'Second','Rd','SE',NULL,NULL,NULL,NULL,'Newry',1,1018,NULL,'04261',NULL,1228,44.570532,-70.87599,0,NULL,NULL,NULL), + (129,11,1,1,0,'849U Maple Ave SE',849,'U',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Hot Springs',1,1003,NULL,'71907',NULL,1228,34.532516,-93.048397,0,NULL,NULL,52), + (130,127,1,0,0,'849U Maple Ave SE',849,'U',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Hot Springs',1,1003,NULL,'71907',NULL,1228,34.532516,-93.048397,0,NULL,NULL,52), + (131,190,1,1,0,'849U Maple Ave SE',849,'U',NULL,'Maple','Ave','SE',NULL,NULL,NULL,NULL,'Hot Springs',1,1003,NULL,'71907',NULL,1228,34.532516,-93.048397,0,NULL,NULL,52), + (132,89,1,1,0,'768M Cadell Dr SE',768,'M',NULL,'Cadell','Dr','SE',NULL,NULL,NULL,NULL,'Hurricane Mills',1,1041,NULL,'37078',NULL,1228,35.924976,-87.77219,0,NULL,NULL,NULL), + (133,178,1,1,0,'421C El Camino Way W',421,'C',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Salem',1,1020,NULL,'01971',NULL,1228,42.635443,-70.879123,0,NULL,NULL,53), + (134,2,1,1,0,'421C El Camino Way W',421,'C',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Salem',1,1020,NULL,'01971',NULL,1228,42.635443,-70.879123,0,NULL,NULL,53), + (135,188,1,1,0,'421C El Camino Way W',421,'C',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Salem',1,1020,NULL,'01971',NULL,1228,42.635443,-70.879123,0,NULL,NULL,53), + (136,201,1,1,0,'421C El Camino Way W',421,'C',NULL,'El Camino','Way','W',NULL,NULL,NULL,NULL,'Salem',1,1020,NULL,'01971',NULL,1228,42.635443,-70.879123,0,NULL,NULL,53), + (137,20,1,1,0,'307P Bay St SW',307,'P',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'Orange Park',1,1008,NULL,'32065',NULL,1228,30.133007,-81.77904,0,NULL,NULL,54), + (138,30,1,1,0,'307P Bay St SW',307,'P',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'Orange Park',1,1008,NULL,'32065',NULL,1228,30.133007,-81.77904,0,NULL,NULL,54), + (139,42,1,1,0,'307P Bay St SW',307,'P',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'Orange Park',1,1008,NULL,'32065',NULL,1228,30.133007,-81.77904,0,NULL,NULL,54), + (140,26,1,1,0,'707K Bay Pl SW',707,'K',NULL,'Bay','Pl','SW',NULL,NULL,NULL,NULL,'Childersburg',1,1000,NULL,'35044',NULL,1228,33.268471,-86.35582,0,NULL,NULL,NULL), + (141,18,1,1,0,'532L Green Path SW',532,'L',NULL,'Green','Path','SW',NULL,NULL,NULL,NULL,'Sebeka',1,1022,NULL,'56477',NULL,1228,46.630023,-95.01222,0,NULL,NULL,55), + (142,122,1,0,0,'532L Green Path SW',532,'L',NULL,'Green','Path','SW',NULL,NULL,NULL,NULL,'Sebeka',1,1022,NULL,'56477',NULL,1228,46.630023,-95.01222,0,NULL,NULL,55), + (143,13,1,0,0,'532L Green Path SW',532,'L',NULL,'Green','Path','SW',NULL,NULL,NULL,NULL,'Sebeka',1,1022,NULL,'56477',NULL,1228,46.630023,-95.01222,0,NULL,NULL,55), + (144,139,1,1,0,'532L Green Path SW',532,'L',NULL,'Green','Path','SW',NULL,NULL,NULL,NULL,'Sebeka',1,1022,NULL,'56477',NULL,1228,46.630023,-95.01222,0,NULL,NULL,55), + (145,100,1,1,0,'948N Woodbridge Dr N',948,'N',NULL,'Woodbridge','Dr','N',NULL,NULL,NULL,NULL,'Colesburg',1,1014,NULL,'52035',NULL,1228,42.662381,-91.18541,0,NULL,NULL,56), + (146,45,1,1,0,'948N Woodbridge Dr N',948,'N',NULL,'Woodbridge','Dr','N',NULL,NULL,NULL,NULL,'Colesburg',1,1014,NULL,'52035',NULL,1228,42.662381,-91.18541,0,NULL,NULL,56), + (147,160,1,1,0,'948N Woodbridge Dr N',948,'N',NULL,'Woodbridge','Dr','N',NULL,NULL,NULL,NULL,'Colesburg',1,1014,NULL,'52035',NULL,1228,42.662381,-91.18541,0,NULL,NULL,56), + (148,99,1,0,0,'495O Northpoint Path W',495,'O',NULL,'Northpoint','Path','W',NULL,NULL,NULL,NULL,'Ranchos De Taos',1,1030,NULL,'87557',NULL,1228,36.377149,-105.67963,0,NULL,NULL,NULL), + (149,111,1,1,0,'423O Cadell Way W',423,'O',NULL,'Cadell','Way','W',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27198',NULL,1228,36.027482,-80.20728,0,NULL,NULL,57), + (150,102,1,1,0,'423O Cadell Way W',423,'O',NULL,'Cadell','Way','W',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27198',NULL,1228,36.027482,-80.20728,0,NULL,NULL,57), + (151,156,1,1,0,'423O Cadell Way W',423,'O',NULL,'Cadell','Way','W',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27198',NULL,1228,36.027482,-80.20728,0,NULL,NULL,57), + (152,181,1,1,0,'439B Northpoint Path N',439,'B',NULL,'Northpoint','Path','N',NULL,NULL,NULL,NULL,'Diaz',1,1003,NULL,'72043',NULL,1228,35.633263,-91.26187,0,NULL,NULL,NULL), + (153,124,1,0,0,'43N Green Pl SE',43,'N',NULL,'Green','Pl','SE',NULL,NULL,NULL,NULL,'Dunlevy',1,1037,NULL,'15432',NULL,1228,40.117368,-79.86413,0,NULL,NULL,58), + (154,3,1,1,0,'43N Green Pl SE',43,'N',NULL,'Green','Pl','SE',NULL,NULL,NULL,NULL,'Dunlevy',1,1037,NULL,'15432',NULL,1228,40.117368,-79.86413,0,NULL,NULL,58), + (155,123,1,1,0,'43N Green Pl SE',43,'N',NULL,'Green','Pl','SE',NULL,NULL,NULL,NULL,'Dunlevy',1,1037,NULL,'15432',NULL,1228,40.117368,-79.86413,0,NULL,NULL,58), + (156,40,1,0,0,'755K Jackson Blvd S',755,'K',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Delton',1,1021,NULL,'49046',NULL,1228,42.504149,-85.39257,0,NULL,NULL,NULL), + (157,143,1,1,0,'274W Lincoln Pl W',274,'W',NULL,'Lincoln','Pl','W',NULL,NULL,NULL,NULL,'Aurora',1,1026,NULL,'68818',NULL,1228,40.83605,-98.00493,0,NULL,NULL,59), + (158,145,1,1,0,'274W Lincoln Pl W',274,'W',NULL,'Lincoln','Pl','W',NULL,NULL,NULL,NULL,'Aurora',1,1026,NULL,'68818',NULL,1228,40.83605,-98.00493,0,NULL,NULL,59), + (159,60,1,1,0,'274W Lincoln Pl W',274,'W',NULL,'Lincoln','Pl','W',NULL,NULL,NULL,NULL,'Aurora',1,1026,NULL,'68818',NULL,1228,40.83605,-98.00493,0,NULL,NULL,59), + (160,196,1,1,0,'332V Woodbridge Ln SE',332,'V',NULL,'Woodbridge','Ln','SE',NULL,NULL,NULL,NULL,'Oakland',1,1004,NULL,'94602',NULL,1228,37.799727,-122.21211,0,NULL,NULL,NULL), + (161,193,1,1,0,'318R Martin Luther King Pl N',318,'R',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'Floyd',1,1030,NULL,'88118',NULL,1228,34.215025,-103.61576,0,NULL,NULL,60), + (162,171,1,1,0,'318R Martin Luther King Pl N',318,'R',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'Floyd',1,1030,NULL,'88118',NULL,1228,34.215025,-103.61576,0,NULL,NULL,60), + (163,86,1,1,0,'318R Martin Luther King Pl N',318,'R',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'Floyd',1,1030,NULL,'88118',NULL,1228,34.215025,-103.61576,0,NULL,NULL,60), + (164,21,1,1,0,'318R Martin Luther King Pl N',318,'R',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'Floyd',1,1030,NULL,'88118',NULL,1228,34.215025,-103.61576,0,NULL,NULL,60), + (165,157,1,1,0,'486Q Woodbridge St SE',486,'Q',NULL,'Woodbridge','St','SE',NULL,NULL,NULL,NULL,'Ricetown',1,1016,NULL,'41364',NULL,1228,37.382832,-83.62327,0,NULL,NULL,61), + (166,142,1,1,0,'486Q Woodbridge St SE',486,'Q',NULL,'Woodbridge','St','SE',NULL,NULL,NULL,NULL,'Ricetown',1,1016,NULL,'41364',NULL,1228,37.382832,-83.62327,0,NULL,NULL,61), + (167,53,1,1,0,'486Q Woodbridge St SE',486,'Q',NULL,'Woodbridge','St','SE',NULL,NULL,NULL,NULL,'Ricetown',1,1016,NULL,'41364',NULL,1228,37.382832,-83.62327,0,NULL,NULL,61), + (168,189,1,1,0,'791Z Van Ness Ln SW',791,'Z',NULL,'Van Ness','Ln','SW',NULL,NULL,NULL,NULL,'Forest Hills',1,1016,NULL,'41527',NULL,1228,37.641773,-82.27793,0,NULL,NULL,NULL), + (169,155,1,1,0,'212B Caulder Blvd SE',212,'B',NULL,'Caulder','Blvd','SE',NULL,NULL,NULL,NULL,'Gideon',1,1024,NULL,'63848',NULL,1228,36.449337,-89.89562,0,NULL,NULL,62), + (170,148,1,1,0,'212B Caulder Blvd SE',212,'B',NULL,'Caulder','Blvd','SE',NULL,NULL,NULL,NULL,'Gideon',1,1024,NULL,'63848',NULL,1228,36.449337,-89.89562,0,NULL,NULL,62), + (171,141,1,1,0,'212B Caulder Blvd SE',212,'B',NULL,'Caulder','Blvd','SE',NULL,NULL,NULL,NULL,'Gideon',1,1024,NULL,'63848',NULL,1228,36.449337,-89.89562,0,NULL,NULL,62), + (172,136,1,1,0,'955K Beech Pl NW',955,'K',NULL,'Beech','Pl','NW',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,NULL), + (173,129,1,1,0,'352U Martin Luther King Path NW',352,'U',NULL,'Martin Luther King','Path','NW',NULL,NULL,NULL,NULL,'Medford',1,1036,NULL,'97501',NULL,1228,42.313498,-122.87944,0,NULL,NULL,63), + (174,82,1,1,0,'352U Martin Luther King Path NW',352,'U',NULL,'Martin Luther King','Path','NW',NULL,NULL,NULL,NULL,'Medford',1,1036,NULL,'97501',NULL,1228,42.313498,-122.87944,0,NULL,NULL,63), + (175,81,1,1,0,'352U Martin Luther King Path NW',352,'U',NULL,'Martin Luther King','Path','NW',NULL,NULL,NULL,NULL,'Medford',1,1036,NULL,'97501',NULL,1228,42.313498,-122.87944,0,NULL,NULL,63), + (176,185,1,1,0,'352U Martin Luther King Path NW',352,'U',NULL,'Martin Luther King','Path','NW',NULL,NULL,NULL,NULL,'Medford',1,1036,NULL,'97501',NULL,1228,42.313498,-122.87944,0,NULL,NULL,63), + (177,128,1,1,0,'657K Pine Dr N',657,'K',NULL,'Pine','Dr','N',NULL,NULL,NULL,NULL,'Wauchula',1,1008,NULL,'33873',NULL,1228,27.541676,-81.8127,0,NULL,NULL,64), + (178,121,1,1,0,'657K Pine Dr N',657,'K',NULL,'Pine','Dr','N',NULL,NULL,NULL,NULL,'Wauchula',1,1008,NULL,'33873',NULL,1228,27.541676,-81.8127,0,NULL,NULL,64), + (179,166,1,1,0,'657K Pine Dr N',657,'K',NULL,'Pine','Dr','N',NULL,NULL,NULL,NULL,'Wauchula',1,1008,NULL,'33873',NULL,1228,27.541676,-81.8127,0,NULL,NULL,64), + (180,55,1,1,0,'657K Pine Dr N',657,'K',NULL,'Pine','Dr','N',NULL,NULL,NULL,NULL,'Wauchula',1,1008,NULL,'33873',NULL,1228,27.541676,-81.8127,0,NULL,NULL,64), + (181,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), + (182,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), + (183,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; @@ -1938,208 +1936,208 @@ 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,'2022-06-28 04:20:18'), - (2,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Delana','Delana Wilson',NULL,NULL,NULL,'5',NULL,'Both','3114260501',NULL,'Sample Data','Delana','A','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Wilson',NULL,1,'2013-11-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Nicole','Nicole Wattson',NULL,NULL,NULL,'5',NULL,'Both','59330073',NULL,'Sample Data','Nicole','P','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Wattson',NULL,1,'1945-11-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (4,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Carylon','Carylon Zope',NULL,NULL,NULL,'1',NULL,'Both','418679899',NULL,'Sample Data','Carylon','X','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Zope',NULL,NULL,'1933-11-19',0,NULL,NULL,NULL,'Michigan Literacy School',NULL,NULL,126,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller-DÃaz, Andrew','Andrew Müller-DÃaz',NULL,NULL,NULL,'3',NULL,'Both','2767079994',NULL,'Sample Data','Andrew','','Müller-DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Müller-DÃaz',NULL,NULL,'2011-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (6,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Ashley','Ashley Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3915396324',NULL,'Sample Data','Ashley','A','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Olsen',NULL,2,'1972-10-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Eleonor','Ms. Eleonor Bachman',NULL,NULL,NULL,NULL,NULL,'Both','711175679',NULL,'Sample Data','Eleonor','G','Bachman',2,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Ms. Eleonor Bachman',NULL,1,'1984-10-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (8,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley-Grant family','Barkley-Grant family',NULL,NULL,NULL,NULL,NULL,'Both','2724040510',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley-Grant family',5,NULL,'Dear Barkley-Grant family',2,NULL,'Barkley-Grant family',NULL,NULL,NULL,0,NULL,'Barkley-Grant family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kathleen','Mrs. Kathleen Barkley',NULL,NULL,NULL,'4',NULL,'Both','560974379',NULL,'Sample Data','Kathleen','Y','Barkley',1,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Mrs. Kathleen Barkley',NULL,NULL,'1987-03-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (10,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ay.jameson@infomail.com','ay.jameson@infomail.com',NULL,NULL,NULL,'5',NULL,'Both','2219268037',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ay.jameson@infomail.com',1,NULL,'Dear ay.jameson@infomail.com',1,NULL,'ay.jameson@infomail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Allan','Allan Deforest Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2545747290',NULL,'Sample Data','Allan','M','Deforest',NULL,2,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Deforest Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Jay','Jay Dimitrov III',NULL,NULL,NULL,NULL,NULL,'Both','512179988',NULL,'Sample Data','Jay','Y','Dimitrov',NULL,4,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Dimitrov III',NULL,2,'1941-06-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (13,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Samuels, Alida','Alida Samuels',NULL,NULL,NULL,NULL,NULL,'Both','2827635876',NULL,'Sample Data','Alida','L','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Alida Samuels',NULL,1,'1943-10-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (14,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,'2',NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz family',5,NULL,'Dear DÃaz family',2,NULL,'DÃaz family',NULL,NULL,NULL,0,NULL,'DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (15,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Progressive Arts Services','Progressive Arts Services',NULL,NULL,NULL,'5',NULL,'Both','2792910154',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Progressive Arts Services',NULL,NULL,NULL,0,NULL,NULL,166,'Progressive Arts Services',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Carylon','Carylon Barkley',NULL,NULL,NULL,'2',NULL,'Both','3982709827',NULL,'Sample Data','Carylon','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Barkley',NULL,1,'1937-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Barkley Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2169122499',NULL,'Sample Data','BrzÄ™czysÅ‚aw','O','Barkley',NULL,2,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Barkley Sr.',NULL,NULL,'1986-11-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (18,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Elina','Mrs. Elina Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1943101487',NULL,'Sample Data','Elina','','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Mrs. Elina Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Norris','Dr. Norris Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2555129550',NULL,'Sample Data','Norris','','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Blackwell',NULL,2,'1944-10-12',0,NULL,NULL,NULL,'Second Action Fellowship',NULL,NULL,101,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'billydaz@example.co.pl','billydaz@example.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','531767500',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear billydaz@example.co.pl',1,NULL,'Dear billydaz@example.co.pl',1,NULL,'billydaz@example.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (21,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,'4',NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (22,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Bernadette','Bernadette Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','110642953',NULL,'Sample Data','Bernadette','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Dimitrov',NULL,1,'1968-03-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Adams, Teresa','Teresa Samson-Adams',NULL,NULL,NULL,'1',NULL,'Both','2837195515',NULL,'Sample Data','Teresa','Z','Samson-Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Samson-Adams',NULL,1,'1957-12-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (24,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jacobs, Kacey','Kacey Jacobs',NULL,NULL,NULL,'3',NULL,'Both','1510706462',NULL,'Sample Data','Kacey','H','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Ray','Mr. Ray Reynolds',NULL,NULL,NULL,'4',NULL,'Both','4106710934',NULL,'Sample Data','Ray','','Reynolds',3,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Reynolds',NULL,2,'1944-06-01',1,'2022-05-09',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (26,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Brigette','Brigette Prentice',NULL,NULL,NULL,NULL,NULL,'Both','1103079124',NULL,'Sample Data','Brigette','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Prentice',NULL,1,'1988-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Rosario','Mr. Rosario Patel',NULL,NULL,NULL,NULL,NULL,'Both','993368350',NULL,'Sample Data','Rosario','J','Patel',3,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Patel',NULL,2,'1991-03-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (28,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Toby','Dr. Toby Adams',NULL,NULL,NULL,NULL,NULL,'Both','2975991790',NULL,'Sample Data','Toby','','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Dr. Toby Adams',NULL,2,'1993-03-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'patel.valene77@testing.com','patel.valene77@testing.com',NULL,NULL,NULL,'1',NULL,'Both','1917681852',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear patel.valene77@testing.com',1,NULL,'Dear patel.valene77@testing.com',1,NULL,'patel.valene77@testing.com',NULL,NULL,NULL,0,NULL,NULL,NULL,'United Food Collective',NULL,NULL,54,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (30,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Lincoln','Mr. Lincoln Jameson',NULL,NULL,NULL,'5',NULL,'Both','2753899992',NULL,'Sample Data','Lincoln','','Jameson',3,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Mr. Lincoln Jameson',NULL,NULL,'1976-05-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (31,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Jed','Jed Adams II',NULL,NULL,NULL,'4',NULL,'Both','1672509857',NULL,'Sample Data','Jed','N','Adams',NULL,3,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Adams II',NULL,NULL,'2010-08-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Elina','Elina Jensen',NULL,NULL,NULL,'2',NULL,'Both','2625728964',NULL,'Sample Data','Elina','P','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Jensen',NULL,NULL,'2003-05-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (33,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-DÃaz, Kathlyn','Kathlyn Prentice-DÃaz',NULL,NULL,NULL,'1',NULL,'Both','1676096374',NULL,'Sample Data','Kathlyn','','Prentice-DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Prentice-DÃaz',NULL,1,'1994-04-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (34,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Claudio','Claudio Dimitrov III',NULL,NULL,NULL,'2',NULL,'Both','1549704109',NULL,'Sample Data','Claudio','','Dimitrov',NULL,4,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Dimitrov III',NULL,2,'1957-08-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Ray','Ray Ivanov Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2368574076',NULL,'Sample Data','Ray','T','Ivanov',NULL,1,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Ivanov Jr.',NULL,2,'1973-11-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Miguel','Dr. Miguel Wilson Sr.',NULL,NULL,NULL,NULL,NULL,'Both','168512775',NULL,'Sample Data','Miguel','Z','Wilson',4,2,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Dr. Miguel Wilson Sr.',NULL,2,'1933-03-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Lou','Lou Smith',NULL,NULL,NULL,NULL,NULL,'Both','807934485',NULL,'Sample Data','Lou','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Smith',NULL,NULL,'1994-01-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Brent','Dr. Brent Wattson',NULL,NULL,NULL,'2',NULL,'Both','2094304763',NULL,'Sample Data','Brent','V','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Dr. Brent Wattson',NULL,2,NULL,0,NULL,NULL,NULL,'Van Ness Peace Collective',NULL,NULL,99,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Allen','Mr. Allen Jones',NULL,NULL,NULL,'1',NULL,'Both','1899434814',NULL,'Sample Data','Allen','','Jones',3,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Jones',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (40,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Family School','Martin Luther King Family School',NULL,NULL,NULL,NULL,NULL,'Both','3950307571',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Family School',NULL,NULL,NULL,0,NULL,NULL,NULL,'Martin Luther King Family School',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (41,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Tanya','Tanya Wagner',NULL,NULL,NULL,NULL,NULL,'Both','1099130970',NULL,'Sample Data','Tanya','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (42,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Andrew','Mr. Andrew DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2189664098',NULL,'Sample Data','Andrew','','DÃaz',3,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Mr. Andrew DÃaz',NULL,2,'1974-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Damaris','Damaris Grant',NULL,NULL,NULL,'4',NULL,'Both','1202824250',NULL,'Sample Data','Damaris','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Grant',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jrobertson@testing.co.pl','jrobertson@testing.co.pl',NULL,NULL,NULL,'5',NULL,'Both','3592615171',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jrobertson@testing.co.pl',1,NULL,'Dear jrobertson@testing.co.pl',1,NULL,'jrobertson@testing.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (45,'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,'2022-06-28 04:20:25','2022-06-28 04:20:28'), - (46,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Troy','Troy Blackwell',NULL,NULL,NULL,'1',NULL,'Both','1289798221',NULL,'Sample Data','Troy','A','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Blackwell',NULL,NULL,'1936-08-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (47,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Adams, Ivey','Ivey Adams',NULL,NULL,NULL,'4',NULL,'Both','1336379028',NULL,'Sample Data','Ivey','K','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Adams',NULL,1,'1997-11-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (48,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Rural Food Fund','Rural Food Fund',NULL,NULL,NULL,NULL,NULL,'Both','892452103',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Food Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Food Fund',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (49,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Barkley, Jacob','Dr. Jacob Barkley II',NULL,NULL,NULL,NULL,NULL,'Both','3801967052',NULL,'Sample Data','Jacob','W','Barkley',4,3,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Dr. Jacob Barkley II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (50,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jones, Mei','Mei Jones',NULL,NULL,NULL,'1',NULL,'Both','2285120120',NULL,'Sample Data','Mei','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Jones',NULL,1,'1989-08-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (51,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Esta','Dr. Esta Adams',NULL,NULL,NULL,'2',NULL,'Both','1125073025',NULL,'Sample Data','Esta','M','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Dr. Esta Adams',NULL,1,'1980-06-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (52,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Oregon Food Collective','Oregon Food Collective',NULL,NULL,NULL,'3',NULL,'Both','2311669224',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Oregon Food Collective',NULL,NULL,NULL,0,NULL,NULL,165,'Oregon Food Collective',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'barkleyk@notmail.co.uk','barkleyk@notmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','1764425283',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear barkleyk@notmail.co.uk',1,NULL,'Dear barkleyk@notmail.co.uk',1,NULL,'barkleyk@notmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Culture Initiative',NULL,NULL,164,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (54,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'United Food Collective','United Food Collective',NULL,NULL,NULL,'3',NULL,'Both','2286511510',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Food Collective',NULL,NULL,NULL,0,NULL,NULL,29,'United Food Collective',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (55,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,'3',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,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (56,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,'3',NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Shad','Shad Müller',NULL,NULL,NULL,NULL,NULL,'Both','233080666',NULL,'Sample Data','Shad','H','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Müller',NULL,2,'1966-02-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mariag@testing.com','mariag@testing.com',NULL,NULL,NULL,NULL,NULL,'Both','4250538083',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mariag@testing.com',1,NULL,'Dear mariag@testing.com',1,NULL,'mariag@testing.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (59,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'4',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,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-DÃaz, Laree','Laree Prentice-DÃaz',NULL,NULL,NULL,'5',NULL,'Both','1309372182',NULL,'Sample Data','Laree','U','Prentice-DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Prentice-DÃaz',NULL,1,'1989-10-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Norris','Norris Blackwell Sr.',NULL,NULL,NULL,'2',NULL,'Both','2555129550',NULL,'Sample Data','Norris','J','Blackwell',NULL,2,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Blackwell Sr.',NULL,2,NULL,0,NULL,NULL,NULL,'Kentucky Advocacy Association',NULL,NULL,156,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (62,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Miguel','Miguel González',NULL,NULL,NULL,NULL,NULL,'Both','833815017',NULL,'Sample Data','Miguel','L','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel González',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Toby','Toby Samson',NULL,NULL,NULL,'4',NULL,'Both','1447480328',NULL,'Sample Data','Toby','D','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Samson',NULL,2,'1952-03-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Ray','Ray Terry',NULL,NULL,NULL,NULL,NULL,'Both','1646953938',NULL,'Sample Data','Ray','L','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Terry',NULL,NULL,'1951-11-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (65,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'terrys@example.co.in','terrys@example.co.in',NULL,NULL,NULL,NULL,NULL,'Both','1969902399',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear terrys@example.co.in',1,NULL,'Dear terrys@example.co.in',1,NULL,'terrys@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Bernadette','Bernadette Adams',NULL,NULL,NULL,'3',NULL,'Both','2647828318',NULL,'Sample Data','Bernadette','B','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Adams',NULL,NULL,'2002-12-06',0,NULL,NULL,NULL,'United Music School',NULL,NULL,194,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Angelika','Angelika Samson',NULL,NULL,NULL,NULL,NULL,'Both','3050635496',NULL,'Sample Data','Angelika','V','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Samson',NULL,1,'2002-01-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Esta','Ms. Esta Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','534629196',NULL,'Sample Data','Esta','N','Blackwell',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Sherman','Sherman Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1181830438',NULL,'Sample Data','Sherman','B','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Wilson',NULL,2,NULL,1,'2021-07-17',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samuelse@airmail.co.uk','samuelse@airmail.co.uk',NULL,NULL,NULL,'2',NULL,'Both','1813947045',NULL,'Sample Data',NULL,NULL,NULL,4,3,NULL,NULL,1,NULL,'Dear samuelse@airmail.co.uk',1,NULL,'Dear samuelse@airmail.co.uk',1,NULL,'samuelse@airmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (71,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Herminia','Herminia DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2340298735',NULL,'Sample Data','Herminia','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia DÃaz',NULL,1,'1973-10-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (72,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'scarletc@testing.co.uk','scarletc@testing.co.uk',NULL,NULL,NULL,'5',NULL,'Both','1382643614',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear scarletc@testing.co.uk',1,NULL,'Dear scarletc@testing.co.uk',1,NULL,'scarletc@testing.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (73,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Ashley','Ashley DÃaz',NULL,NULL,NULL,'3',NULL,'Both','2703610004',NULL,'Sample Data','Ashley','U','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley DÃaz',NULL,NULL,'1982-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (74,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Global Environmental Initiative','Global Environmental Initiative',NULL,NULL,NULL,'1',NULL,'Both','3530712728',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Environmental Initiative',NULL,NULL,NULL,0,NULL,NULL,189,'Global Environmental Initiative',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (75,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,NULL,NULL,'Both','3235379039',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Deforest family',5,NULL,'Dear Deforest family',2,NULL,'Deforest family',NULL,NULL,NULL,0,NULL,'Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (76,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Kandace','Kandace Patel',NULL,NULL,NULL,NULL,NULL,'Both','1485676239',NULL,'Sample Data','Kandace','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Patel',NULL,NULL,'1937-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (77,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Olsen family','Olsen family',NULL,NULL,NULL,NULL,NULL,'Both','1990073228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen family',5,NULL,'Dear Olsen family',2,NULL,'Olsen family',NULL,NULL,NULL,0,NULL,'Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Sherman','Sherman Adams Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2610997591',NULL,'Sample Data','Sherman','','Adams',NULL,1,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Adams Jr.',NULL,2,'1981-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Lincoln','Lincoln Patel',NULL,NULL,NULL,'3',NULL,'Both','4135252696',NULL,'Sample Data','Lincoln','P','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Patel',NULL,NULL,'1993-12-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Miguel','Dr. Miguel Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2346499533',NULL,'Sample Data','Miguel','','Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Dr. Miguel Roberts',NULL,2,'1948-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (81,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-DÃaz family','Prentice-DÃaz family',NULL,NULL,NULL,'1',NULL,'Both','4137489289',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Prentice-DÃaz family',5,NULL,'Dear Prentice-DÃaz family',2,NULL,'Prentice-DÃaz family',NULL,NULL,NULL,0,NULL,'Prentice-DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (82,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'bivanov@fakemail.co.in','bivanov@fakemail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2025202533',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bivanov@fakemail.co.in',1,NULL,'Dear bivanov@fakemail.co.in',1,NULL,'bivanov@fakemail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (83,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones-Ivanov, Kathleen','Mrs. Kathleen Jones-Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3796881949',NULL,'Sample Data','Kathleen','H','Jones-Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Mrs. Kathleen Jones-Ivanov',NULL,NULL,'1974-05-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (84,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Delana','Delana Wilson',NULL,NULL,NULL,'1',NULL,'Both','3114260501',NULL,'Sample Data','Delana','U','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Wilson',NULL,1,'2005-09-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (85,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,NULL,NULL,'Both','333421926',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson family',5,NULL,'Dear Samson family',2,NULL,'Samson family',NULL,NULL,NULL,0,NULL,'Samson family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (86,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Miguel','Miguel Deforest Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2379734396',NULL,'Sample Data','Miguel','T','Deforest',NULL,2,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Deforest Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Troy','Troy Ivanov Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2239152562',NULL,'Sample Data','Troy','X','Ivanov',NULL,2,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Ivanov Sr.',NULL,2,'1940-04-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (88,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson, Elizabeth','Elizabeth Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3762031116',NULL,'Sample Data','Elizabeth','D','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Robertson',NULL,1,'1988-06-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (89,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Allen','Dr. Allen Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2363401575',NULL,'Sample Data','Allen','J','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Blackwell',NULL,NULL,'1966-11-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (90,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Felisha','Dr. Felisha Jensen',NULL,NULL,NULL,NULL,NULL,'Both','45016701',NULL,'Sample Data','Felisha','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Dr. Felisha Jensen',NULL,1,'1948-03-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Omar','Omar Terry Sr.',NULL,NULL,NULL,'4',NULL,'Both','767854751',NULL,'Sample Data','Omar','','Terry',NULL,2,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Terry Sr.',NULL,2,'2009-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Betty','Betty Terry',NULL,NULL,NULL,'1',NULL,'Both','3939845643',NULL,'Sample Data','Betty','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Terry',NULL,NULL,'1976-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Erik','Erik Wilson',NULL,NULL,NULL,NULL,NULL,'Both','3965179222',NULL,'Sample Data','Erik','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Wilson',NULL,NULL,'1953-01-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (94,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'robertson.h.elina@mymail.co.uk','robertson.h.elina@mymail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','3155433316',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear robertson.h.elina@mymail.co.uk',1,NULL,'Dear robertson.h.elina@mymail.co.uk',1,NULL,'robertson.h.elina@mymail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Shad','Shad Adams',NULL,NULL,NULL,NULL,NULL,'Both','1641092808',NULL,'Sample Data','Shad','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Adams',NULL,2,'1967-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (96,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Global Food Partners','Global Food Partners',NULL,NULL,NULL,NULL,NULL,'Both','369566056',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Food Partners',NULL,NULL,NULL,0,NULL,NULL,133,'Global Food Partners',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (97,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'patel.beula13@fakemail.net','patel.beula13@fakemail.net',NULL,NULL,NULL,'1',NULL,'Both','2467345832',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear patel.beula13@fakemail.net',1,NULL,'Dear patel.beula13@fakemail.net',1,NULL,'patel.beula13@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller-Robertson, Rolando','Dr. Rolando Müller-Robertson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2846532942',NULL,'Sample Data','Rolando','','Müller-Robertson',4,1,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Müller-Robertson Jr.',NULL,NULL,'1988-09-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (99,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Van Ness Peace Collective','Van Ness Peace Collective',NULL,NULL,NULL,NULL,NULL,'Both','3734582629',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Peace Collective',NULL,NULL,NULL,0,NULL,NULL,38,'Van Ness Peace Collective',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (100,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell-Adams, Magan','Mrs. Magan Blackwell-Adams',NULL,NULL,NULL,'1',NULL,'Both','2669574437',NULL,'Sample Data','Magan','','Blackwell-Adams',1,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Mrs. Magan Blackwell-Adams',NULL,1,'1964-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (101,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Second Action Fellowship','Second Action Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','2923111799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Second Action Fellowship',NULL,NULL,NULL,0,NULL,NULL,19,'Second Action Fellowship',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (102,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kandace','Dr. Kandace Barkley',NULL,NULL,NULL,NULL,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,'1937-05-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (103,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Müller-Robertson, Ray','Dr. Ray Müller-Robertson',NULL,NULL,NULL,'5',NULL,'Both','302580432',NULL,'Sample Data','Ray','','Müller-Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Dr. Ray Müller-Robertson',NULL,NULL,'1999-11-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Lawerence','Dr. Lawerence Wilson II',NULL,NULL,NULL,'5',NULL,'Both','370473343',NULL,'Sample Data','Lawerence','V','Wilson',4,3,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Dr. Lawerence Wilson II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Elbert','Elbert Müller',NULL,NULL,NULL,NULL,NULL,'Both','189304968',NULL,'Sample Data','Elbert','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Müller',NULL,2,'1979-04-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Damaris','Damaris González',NULL,NULL,NULL,'5',NULL,'Both','1257732273',NULL,'Sample Data','Damaris','A','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris González',NULL,1,'1946-03-09',0,NULL,NULL,NULL,'Idaho Development Services',NULL,NULL,183,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (107,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Smith, Elizabeth','Mrs. Elizabeth Smith',NULL,NULL,NULL,NULL,NULL,'Both','3537144682',NULL,'Sample Data','Elizabeth','T','Smith',1,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Mrs. Elizabeth Smith',NULL,1,'1987-02-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (108,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen family','Jensen family',NULL,NULL,NULL,'1',NULL,'Both','797435572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen family',5,NULL,'Dear Jensen family',2,NULL,'Jensen family',NULL,NULL,NULL,0,NULL,'Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Margaret','Margaret Wilson',NULL,NULL,NULL,'4',NULL,'Both','2853804377',NULL,'Sample Data','Margaret','A','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Wilson',NULL,1,'1960-10-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Beula','Beula Wilson',NULL,NULL,NULL,'1',NULL,'Both','1338008242',NULL,'Sample Data','Beula','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Wilson',NULL,1,'1947-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (111,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Huntsville Empowerment School','Huntsville Empowerment School',NULL,NULL,NULL,'2',NULL,'Both','827105632',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Huntsville Empowerment School',NULL,NULL,NULL,0,NULL,NULL,181,'Huntsville Empowerment School',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (112,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Truman','Truman Smith II',NULL,NULL,NULL,'3',NULL,'Both','2166519703',NULL,'Sample Data','Truman','T','Smith',NULL,3,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Smith II',NULL,NULL,'2005-01-24',0,NULL,NULL,NULL,'Montana Empowerment Center',NULL,NULL,139,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (113,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Adams family','Adams family',NULL,NULL,NULL,'5',NULL,'Both','1515323104',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams family',5,NULL,'Dear Adams family',2,NULL,'Adams family',NULL,NULL,NULL,0,NULL,'Adams family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:28'), - (114,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Kathlyn','Kathlyn Deforest',NULL,NULL,NULL,'5',NULL,'Both','333595076',NULL,'Sample Data','Kathlyn','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Deforest',NULL,1,'2012-12-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Beula','Mrs. Beula Adams',NULL,NULL,NULL,'1',NULL,'Both','24494748',NULL,'Sample Data','Beula','','Adams',1,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Mrs. Beula Adams',NULL,1,'1972-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Robertson III',NULL,NULL,NULL,'5',NULL,'Both','1083443418',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Robertson',NULL,4,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Robertson III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (117,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Billy','Billy Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3518919730',NULL,'Sample Data','Billy','B','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Deforest',NULL,NULL,'2005-05-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (118,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Heidi','Dr. Heidi DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','1139170520',NULL,'Sample Data','Heidi','','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi DÃaz',NULL,1,'1999-04-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (119,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Alexia','Alexia Olsen',NULL,NULL,NULL,NULL,NULL,'Both','1565274268',NULL,'Sample Data','Alexia','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Olsen',NULL,1,'2002-01-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'lzope44@infomail.co.nz','lzope44@infomail.co.nz',NULL,NULL,NULL,'2',NULL,'Both','2899247134',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear lzope44@infomail.co.nz',1,NULL,'Dear lzope44@infomail.co.nz',1,NULL,'lzope44@infomail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (121,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson, Miguel','Miguel Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3255154078',NULL,'Sample Data','Miguel','Z','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Robertson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Kathleen','Ms. Kathleen Robertson',NULL,NULL,NULL,'3',NULL,'Both','1039921971',NULL,'Sample Data','Kathleen','','Robertson',2,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Ms. Kathleen Robertson',NULL,NULL,'1936-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'adams.w.allan70@example.info','adams.w.allan70@example.info',NULL,NULL,NULL,NULL,NULL,'Both','1996524997',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear adams.w.allan70@example.info',1,NULL,'Dear adams.w.allan70@example.info',1,NULL,'adams.w.allan70@example.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (124,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jensen.jacob@fishmail.org','jensen.jacob@fishmail.org',NULL,NULL,NULL,'3',NULL,'Both','622187084',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear jensen.jacob@fishmail.org',1,NULL,'Dear jensen.jacob@fishmail.org',1,NULL,'jensen.jacob@fishmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (125,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley-Grant, Daren','Dr. Daren Barkley-Grant',NULL,NULL,NULL,'3',NULL,'Both','3177800168',NULL,'Sample Data','Daren','','Barkley-Grant',4,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Dr. Daren Barkley-Grant',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (126,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Michigan Literacy School','Michigan Literacy School',NULL,NULL,NULL,NULL,NULL,'Both','1814547254',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Michigan Literacy School',NULL,NULL,NULL,0,NULL,NULL,4,'Michigan Literacy School',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (127,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Kentucky Action Network','Kentucky Action Network',NULL,NULL,NULL,NULL,NULL,'Both','573413442',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kentucky Action Network',NULL,NULL,NULL,0,NULL,NULL,NULL,'Kentucky Action Network',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (128,'Household',NULL,1,0,0,0,1,0,NULL,NULL,'Müller-Robertson family','Müller-Robertson family',NULL,NULL,NULL,'2',NULL,'Both','1622021229',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller-Robertson family',5,NULL,'Dear Müller-Robertson family',2,NULL,'Müller-Robertson family',NULL,NULL,NULL,0,NULL,'Müller-Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Lashawnda','Ms. Lashawnda Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3528684380',NULL,'Sample Data','Lashawnda','','Ivanov',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley-Grant, Rebekah','Ms. Rebekah Barkley-Grant',NULL,NULL,NULL,NULL,NULL,'Both','737184443',NULL,'Sample Data','Rebekah','','Barkley-Grant',2,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Ms. Rebekah Barkley-Grant',NULL,1,'1996-09-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (131,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Dunnellon Food Fellowship','Dunnellon Food Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','3106959505',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dunnellon Food Fellowship',NULL,NULL,NULL,0,NULL,NULL,NULL,'Dunnellon Food Fellowship',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (132,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Carlos','Carlos Adams',NULL,NULL,NULL,NULL,NULL,'Both','3745383924',NULL,'Sample Data','Carlos','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Maxwell','Mr. Maxwell Deforest',NULL,NULL,NULL,'1',NULL,'Both','1808949889',NULL,'Sample Data','Maxwell','','Deforest',3,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Mr. Maxwell Deforest',NULL,2,'1965-10-21',0,NULL,NULL,NULL,'Global Food Partners',NULL,NULL,96,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (134,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'larees61@example.co.uk','larees61@example.co.uk',NULL,NULL,NULL,'4',NULL,'Both','296379637',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear larees61@example.co.uk',1,NULL,'Dear larees61@example.co.uk',1,NULL,'larees61@example.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (135,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'bo.daz38@testing.biz','bo.daz38@testing.biz',NULL,NULL,NULL,NULL,NULL,'Both','1523340566',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bo.daz38@testing.biz',1,NULL,'Dear bo.daz38@testing.biz',1,NULL,'bo.daz38@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (136,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Jacob','Jacob Roberts',NULL,NULL,NULL,NULL,NULL,'Both','867918923',NULL,'Sample Data','Jacob','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Roberts',NULL,2,'1956-07-20',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (137,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Shad','Shad Barkley',NULL,NULL,NULL,'5',NULL,'Both','2908565533',NULL,'Sample Data','Shad','I','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (138,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Elbert','Elbert Samuels II',NULL,NULL,NULL,NULL,NULL,'Both','2026133927',NULL,'Sample Data','Elbert','C','Samuels',NULL,3,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Samuels II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (139,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Montana Empowerment Center','Montana Empowerment Center',NULL,NULL,NULL,NULL,NULL,'Both','2766680767',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Montana Empowerment Center',NULL,NULL,NULL,0,NULL,NULL,112,'Montana Empowerment Center',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Maria','Dr. Maria Olsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1487979958',NULL,'Sample Data','Maria','J','Olsen',4,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Olsen Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,'Urban Action Association',NULL,NULL,168,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (141,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Lashawnda','Lashawnda Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3524202222',NULL,'Sample Data','Lashawnda','A','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Samuels',NULL,1,'1993-08-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (142,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Grant, Russell','Russell Grant II',NULL,NULL,NULL,'2',NULL,'Both','388937713',NULL,'Sample Data','Russell','','Grant',NULL,3,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Grant II',NULL,2,'1996-11-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller-DÃaz, Scarlet','Dr. Scarlet Müller-DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2966959941',NULL,'Sample Data','Scarlet','','Müller-DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet Müller-DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (144,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jacobs, Jackson','Jackson Jacobs',NULL,NULL,NULL,'2',NULL,'Both','96553680',NULL,'Sample Data','Jackson','T','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Jacobs',NULL,2,'1965-12-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'yadav.w.teresa@sample.co.pl','yadav.w.teresa@sample.co.pl',NULL,NULL,NULL,'5',NULL,'Both','1380178772',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear yadav.w.teresa@sample.co.pl',1,NULL,'Dear yadav.w.teresa@sample.co.pl',1,NULL,'yadav.w.teresa@sample.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson-Blackwell, Daren','Mr. Daren Wilson-Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2129515362',NULL,'Sample Data','Daren','','Wilson-Blackwell',3,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Mr. Daren Wilson-Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Princess','Dr. Princess McReynolds',NULL,NULL,NULL,'2',NULL,'Both','2818218342',NULL,'Sample Data','Princess','U','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Dr. Princess McReynolds',NULL,NULL,'1981-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Alexia','Alexia Jensen',NULL,NULL,NULL,'4',NULL,'Both','1964478975',NULL,'Sample Data','Alexia','H','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Jensen',NULL,1,'2017-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (149,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Bernadette','Bernadette Patel',NULL,NULL,NULL,NULL,NULL,'Both','2696373355',NULL,'Sample Data','Bernadette','I','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Patel',NULL,1,'1943-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (150,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Valene','Valene Bachman',NULL,NULL,NULL,NULL,NULL,'Both','4000615529',NULL,'Sample Data','Valene','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Bachman',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (151,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Müller, Bryon','Bryon Müller',NULL,NULL,NULL,'2',NULL,'Both','1616829813',NULL,'Sample Data','Bryon','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Müller',NULL,NULL,'1992-12-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Jensen, Brigette','Ms. Brigette Bachman-Jensen',NULL,NULL,NULL,'3',NULL,'Both','2838133851',NULL,'Sample Data','Brigette','D','Bachman-Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette Bachman-Jensen',NULL,1,'1968-01-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (153,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Adams family','Adams family',NULL,NULL,NULL,'4',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,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (154,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Allen','Dr. Allen Wattson',NULL,NULL,NULL,NULL,NULL,'Both','2599799993',NULL,'Sample Data','Allen','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Wattson',NULL,2,'1982-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (155,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Brigette','Ms. Brigette DÃaz',NULL,NULL,NULL,'5',NULL,'Both','939555461',NULL,'Sample Data','Brigette','S','DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (156,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Kentucky Advocacy Association','Kentucky Advocacy Association',NULL,NULL,NULL,'3',NULL,'Both','557669808',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kentucky Advocacy Association',NULL,NULL,NULL,0,NULL,NULL,61,'Kentucky Advocacy Association',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Teddy','Dr. Teddy Patel',NULL,NULL,NULL,'3',NULL,'Both','296402245',NULL,'Sample Data','Teddy','','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Patel',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (158,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Allen','Allen Bachman III',NULL,NULL,NULL,'4',NULL,'Both','1429054990',NULL,'Sample Data','Allen','','Bachman',NULL,4,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Bachman III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (159,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samson, Andrew','Dr. Andrew Samson',NULL,NULL,NULL,'1',NULL,'Both','2323395058',NULL,'Sample Data','Andrew','G','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Dr. Andrew Samson',NULL,2,'1993-10-05',0,NULL,NULL,NULL,'Kirby Development Collective',NULL,NULL,160,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (160,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Kirby Development Collective','Kirby Development Collective',NULL,NULL,NULL,NULL,NULL,'Both','2165724729',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kirby Development Collective',NULL,NULL,NULL,0,NULL,NULL,159,'Kirby Development Collective',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Brent','Mr. Brent ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','1516135364',NULL,'Sample Data','Brent','','ÅÄ…chowski',3,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Mr. Brent ÅÄ…chowski',NULL,2,'1978-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (162,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Smith family','Smith family',NULL,NULL,NULL,NULL,NULL,'Both','4082772645',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith family',5,NULL,'Dear Smith family',2,NULL,'Smith family',NULL,NULL,NULL,0,NULL,'Smith family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (163,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Parker, Bryon','Bryon Parker III',NULL,NULL,NULL,'3',NULL,'Both','1027230255',NULL,'Sample Data','Bryon','K','Parker',NULL,4,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Parker III',NULL,2,'1953-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (164,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Rural Culture Initiative','Rural Culture Initiative',NULL,NULL,NULL,NULL,NULL,'Both','1083531929',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Culture Initiative',NULL,NULL,NULL,0,NULL,NULL,53,'Rural Culture Initiative',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (165,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Shad','Shad Wilson III',NULL,NULL,NULL,'4',NULL,'Both','3505548330',NULL,'Sample Data','Shad','','Wilson',NULL,4,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Wilson III',NULL,2,'1988-11-24',0,NULL,NULL,NULL,'Oregon Food Collective',NULL,NULL,52,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Tanya','Mrs. Tanya Samuels',NULL,NULL,NULL,'4',NULL,'Both','147060242',NULL,'Sample Data','Tanya','T','Samuels',1,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Mrs. Tanya Samuels',NULL,1,'1982-12-08',0,NULL,NULL,NULL,'Progressive Arts Services',NULL,NULL,15,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (167,'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,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (168,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Action Association','Urban Action Association',NULL,NULL,NULL,NULL,NULL,'Both','366797991',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Action Association',NULL,NULL,NULL,0,NULL,NULL,140,'Urban Action Association',NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (169,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Jacob','Jacob Adams III',NULL,NULL,NULL,NULL,NULL,'Both','350798769',NULL,'Sample Data','Jacob','U','Adams',NULL,4,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Adams III',NULL,2,'2017-01-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Carlos','Dr. Carlos Grant II',NULL,NULL,NULL,NULL,NULL,'Both','329794815',NULL,'Sample Data','Carlos','','Grant',4,3,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Dr. Carlos Grant II',NULL,NULL,'1971-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Kathleen','Kathleen Zope',NULL,NULL,NULL,'2',NULL,'Both','855033253',NULL,'Sample Data','Kathleen','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Zope',NULL,NULL,'1986-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (172,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov, Shauna','Dr. Shauna Ivanov',NULL,NULL,NULL,'3',NULL,'Both','1678938046',NULL,'Sample Data','Shauna','Q','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Ivanov',NULL,1,'1946-04-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (173,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Brigette','Brigette Terry',NULL,NULL,NULL,NULL,NULL,'Both','2789451544',NULL,'Sample Data','Brigette','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Terry',NULL,NULL,'1980-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (174,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson-Blackwell family','Wilson-Blackwell family',NULL,NULL,NULL,'1',NULL,'Both','1641627060',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson-Blackwell family',5,NULL,'Dear Wilson-Blackwell family',2,NULL,'Wilson-Blackwell family',NULL,NULL,NULL,0,NULL,'Wilson-Blackwell family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Billy','Dr. Billy Smith Jr.',NULL,NULL,NULL,'4',NULL,'Both','3795036616',NULL,'Sample Data','Billy','L','Smith',4,1,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Smith Jr.',NULL,2,'2000-06-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:30'), - (176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ivanov.shad50@mymail.co.nz','ivanov.shad50@mymail.co.nz',NULL,NULL,NULL,'2',NULL,'Both','1672716099',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear ivanov.shad50@mymail.co.nz',1,NULL,'Dear ivanov.shad50@mymail.co.nz',1,NULL,'ivanov.shad50@mymail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'russellwilson-blackwell54@lol.net','russellwilson-blackwell54@lol.net',NULL,NULL,NULL,'4',NULL,'Both','3386289526',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear russellwilson-blackwell54@lol.net',1,NULL,'Dear russellwilson-blackwell54@lol.net',1,NULL,'russellwilson-blackwell54@lol.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Rebekah','Rebekah Samson',NULL,NULL,NULL,NULL,NULL,'Both','2854985005',NULL,'Sample Data','Rebekah','I','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Samson',NULL,1,'1978-10-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Princess','Princess Olsen',NULL,NULL,NULL,NULL,NULL,'Both','13405309',NULL,'Sample Data','Princess','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Olsen',NULL,NULL,'1984-02-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:31'), - (180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Rolando','Dr. Rolando Adams',NULL,NULL,NULL,'1',NULL,'Both','1733849809',NULL,'Sample Data','Rolando','D','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Adams',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:27'), - (181,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Toby','Toby Adams',NULL,NULL,NULL,NULL,NULL,'Both','2975991790',NULL,'Sample Data','Toby','L','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Adams',NULL,NULL,'2017-05-04',0,NULL,NULL,NULL,'Huntsville Empowerment School',NULL,NULL,111,0,'2022-06-28 04:20:25','2022-06-28 04:20:29'), - (182,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Blackwell, Tanya','Tanya Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2751001066',NULL,'Sample Data','Tanya','X','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:25','2022-06-28 04:20:26'), - (183,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Idaho Development Services','Idaho Development Services',NULL,NULL,NULL,'5',NULL,'Both','466171389',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Idaho Development Services',NULL,NULL,NULL,0,NULL,NULL,106,'Idaho Development Services',NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:29'), - (184,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Jina','Mrs. Jina Samson',NULL,NULL,NULL,NULL,NULL,'Both','1574192972',NULL,'Sample Data','Jina','','Samson',1,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Mrs. Jina Samson',NULL,NULL,'1989-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:31'), - (185,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Roland','Roland Samuels',NULL,NULL,NULL,'1',NULL,'Both','1033995138',NULL,'Sample Data','Roland','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Samuels',NULL,NULL,'2008-07-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:30'), - (186,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'nielsen.brigette@airmail.com','nielsen.brigette@airmail.com',NULL,NULL,NULL,'2',NULL,'Both','2205511086',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear nielsen.brigette@airmail.com',1,NULL,'Dear nielsen.brigette@airmail.com',1,NULL,'nielsen.brigette@airmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:26'), - (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Eleonor','Eleonor DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','1743595556',NULL,'Sample Data','Eleonor','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor DÃaz',NULL,NULL,'1969-01-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:30'), - (188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Andrew','Andrew Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1383473643',NULL,'Sample Data','Andrew','S','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:26'), - (189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Elizabeth','Elizabeth McReynolds',NULL,NULL,NULL,'3',NULL,'Both','2462154341',NULL,'Sample Data','Elizabeth','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth McReynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,'Global Environmental Initiative',NULL,NULL,74,0,'2022-06-28 04:20:26','2022-06-28 04:20:29'), - (190,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Heidi','Dr. Heidi Bachman',NULL,NULL,NULL,'4',NULL,'Both','2759978492',NULL,'Sample Data','Heidi','','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:31'), - (191,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Müller-DÃaz family','Müller-DÃaz family',NULL,NULL,NULL,'4',NULL,'Both','900322331',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller-DÃaz family',5,NULL,'Dear Müller-DÃaz family',2,NULL,'Müller-DÃaz family',NULL,NULL,NULL,0,NULL,'Müller-DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:28'), - (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Russell','Russell Zope',NULL,NULL,NULL,NULL,NULL,'Both','3644168984',NULL,'Sample Data','Russell','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Zope',NULL,NULL,'1975-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:31'), - (193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Nicole','Nicole DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','1789342524',NULL,'Sample Data','Nicole','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole DÃaz',NULL,NULL,'1991-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:26'), - (194,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'United Music School','United Music School',NULL,NULL,NULL,NULL,NULL,'Both','414348525',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Music School',NULL,NULL,NULL,0,NULL,NULL,66,'United Music School',NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:29'), - (195,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'zope.o.jed@spamalot.co.nz','zope.o.jed@spamalot.co.nz',NULL,NULL,NULL,'1',NULL,'Both','2862098178',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear zope.o.jed@spamalot.co.nz',1,NULL,'Dear zope.o.jed@spamalot.co.nz',1,NULL,'zope.o.jed@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:31'), - (196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Maria','Maria Prentice',NULL,NULL,NULL,'1',NULL,'Both','3954129997',NULL,'Sample Data','Maria','I','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Prentice',NULL,NULL,'1940-07-19',1,'2021-09-20',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:26'), - (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Ashlie','Ms. Ashlie González',NULL,NULL,NULL,NULL,NULL,'Both','4074516912',NULL,'Sample Data','Ashlie','','González',2,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ms. Ashlie González',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:27'), - (198,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Scott','Scott Roberts',NULL,NULL,NULL,'1',NULL,'Both','2696601244',NULL,'Sample Data','Scott','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Roberts',NULL,2,'1940-09-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:26'), - (199,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ev.jameson20@sample.co.in','ev.jameson20@sample.co.in',NULL,NULL,NULL,'3',NULL,'Both','3087739700',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ev.jameson20@sample.co.in',1,NULL,'Dear ev.jameson20@sample.co.in',1,NULL,'ev.jameson20@sample.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:27'), - (200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson-Deforest, Iris','Dr. Iris Wilson-Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3696585007',NULL,'Sample Data','Iris','','Wilson-Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Wilson-Deforest',NULL,NULL,'1948-08-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:31'), - (201,'Household',NULL,1,0,0,0,1,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,NULL,NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:26','2022-06-28 04:20:29'), - (202,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jenny','Jenny Lee',NULL,NULL,NULL,NULL,'en_US','Both','f20575d849169bcf9da299d9b0f73520',NULL,NULL,'Jenny',NULL,'Lee',NULL,NULL,NULL,1,1,NULL,'Dear Jenny',1,NULL,'Dear Jenny',1,NULL,'Jenny Lee','Volunteer coordinator',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-28 04:20:33','2022-06-28 04:20:33'); + (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,'2022-06-22 13:51:50'), + (2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ti.zope@lol.co.pl','ti.zope@lol.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','4083429631',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ti.zope@lol.co.pl',1,NULL,'Dear ti.zope@lol.co.pl',1,NULL,'ti.zope@lol.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (3,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Lincoln','Lincoln Terry',NULL,NULL,NULL,'1',NULL,'Both','2249730385',NULL,'Sample Data','Lincoln','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Terry',NULL,2,'2016-05-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (4,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Allen','Allen Prentice',NULL,NULL,NULL,'1',NULL,'Both','4136097142',NULL,'Sample Data','Allen','V','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Prentice',NULL,2,'1997-10-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Kenny','Kenny ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','3898932687',NULL,'Sample Data','Kenny','I','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny ÅÄ…chowski',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (6,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cooper, Betty','Dr. Betty Cooper',NULL,NULL,NULL,'3',NULL,'Both','2283344606',NULL,'Sample Data','Betty','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Dr. Betty Cooper',NULL,1,'1971-01-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (7,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds-ÅÄ…chowski family','McReynolds-ÅÄ…chowski family',NULL,NULL,NULL,'4',NULL,'Both','1204002830',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear McReynolds-ÅÄ…chowski family',5,NULL,'Dear McReynolds-ÅÄ…chowski family',2,NULL,'McReynolds-ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'McReynolds-ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (8,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Lincoln','Mr. Lincoln Smith Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3833936283',NULL,'Sample Data','Lincoln','N','Smith',3,2,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Mr. Lincoln Smith Sr.',NULL,2,NULL,0,NULL,NULL,NULL,'Dousman Sustainability Solutions',NULL,NULL,175,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Claudio','Claudio Wattson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3183458454',NULL,'Sample Data','Claudio','K','Wattson',NULL,1,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Wattson Jr.',NULL,2,'1946-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (10,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Iris','Mrs. Iris Jones',NULL,NULL,NULL,NULL,NULL,'Both','3545440397',NULL,'Sample Data','Iris','I','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Mrs. Iris Jones',NULL,1,'1933-05-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (11,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'patel.kathleen56@infomail.co.nz','patel.kathleen56@infomail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','272454913',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear patel.kathleen56@infomail.co.nz',1,NULL,'Dear patel.kathleen56@infomail.co.nz',1,NULL,'patel.kathleen56@infomail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Margaret','Ms. Margaret Cooper',NULL,NULL,NULL,NULL,NULL,'Both','897960138',NULL,'Sample Data','Margaret','P','Cooper',2,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Ms. Margaret Cooper',NULL,1,'1988-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (13,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Eleonor','Eleonor Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1163174005',NULL,'Sample Data','Eleonor','T','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Samuels',NULL,1,'2014-04-12',0,NULL,NULL,NULL,'Community Technology Systems',NULL,NULL,80,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (14,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Megan','Ms. Megan Dimitrov',NULL,NULL,NULL,'3',NULL,'Both','604448148',NULL,'Sample Data','Megan','','Dimitrov',2,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Ms. Megan Dimitrov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Carylon','Carylon Terrell',NULL,NULL,NULL,NULL,NULL,'Both','3327689936',NULL,'Sample Data','Carylon','P','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Terrell',NULL,1,'1985-09-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (16,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz-Jensen, Sherman','Dr. Sherman Cruz-Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2101990231',NULL,'Sample Data','Sherman','P','Cruz-Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Cruz-Jensen',NULL,NULL,'1985-01-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (17,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Lou','Mr. Lou González Sr.',NULL,NULL,NULL,'5',NULL,'Both','2316283556',NULL,'Sample Data','Lou','C','González',3,2,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Mr. Lou González Sr.',NULL,NULL,'1978-03-08',0,NULL,NULL,NULL,'Urban Advocacy Solutions',NULL,NULL,180,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (18,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Ashlie','Ashlie Samuels',NULL,NULL,NULL,'3',NULL,'Both','2718903137',NULL,'Sample Data','Ashlie','A','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Samuels',NULL,1,'1986-06-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Rodrigo','Rodrigo Patel',NULL,NULL,NULL,NULL,NULL,'Both','631852002',NULL,'Sample Data','Rodrigo','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Patel',NULL,NULL,'1962-11-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (20,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Felisha','Ms. Felisha Patel',NULL,NULL,NULL,NULL,NULL,'Both','3512360040',NULL,'Sample Data','Felisha','Y','Patel',2,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Ms. Felisha Patel',NULL,NULL,'1980-02-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Jacob','Jacob Patel II',NULL,NULL,NULL,NULL,NULL,'Both','767952211',NULL,'Sample Data','Jacob','L','Patel',NULL,3,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Patel II',NULL,2,'1957-09-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (22,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Woodbridge Empowerment Solutions','Woodbridge Empowerment Solutions',NULL,NULL,NULL,NULL,NULL,'Both','2316780308',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Woodbridge Empowerment Solutions',NULL,NULL,NULL,0,NULL,NULL,52,'Woodbridge Empowerment Solutions',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (23,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Lincoln Technology Initiative','Lincoln Technology Initiative',NULL,NULL,NULL,'3',NULL,'Both','708412752',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Technology Initiative',NULL,NULL,NULL,0,NULL,NULL,124,'Lincoln Technology Initiative',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (24,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Barkley, Allan','Mr. Allan Barkley',NULL,NULL,NULL,NULL,NULL,'Both','4216235672',NULL,'Sample Data','Allan','F','Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Barkley',NULL,2,'1979-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Valene','Ms. Valene Samuels',NULL,NULL,NULL,'2',NULL,'Both','1762584511',NULL,'Sample Data','Valene','A','Samuels',2,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Ms. Valene Samuels',NULL,1,'1969-12-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (26,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Jerome','Jerome Patel II',NULL,NULL,NULL,'1',NULL,'Both','2267559652',NULL,'Sample Data','Jerome','M','Patel',NULL,3,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Jerome Patel II',NULL,NULL,'1980-01-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (27,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Terry-Robertson family','Terry-Robertson family',NULL,NULL,NULL,'2',NULL,'Both','1556955133',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry-Robertson family',5,NULL,'Dear Terry-Robertson family',2,NULL,'Terry-Robertson family',NULL,NULL,NULL,0,NULL,'Terry-Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (28,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'erroldaz88@lol.co.in','erroldaz88@lol.co.in',NULL,NULL,NULL,NULL,NULL,'Both','4102684554',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear erroldaz88@lol.co.in',1,NULL,'Dear erroldaz88@lol.co.in',1,NULL,'erroldaz88@lol.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (29,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Jensen family','Jensen family',NULL,NULL,NULL,'2',NULL,'Both','797435572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen family',5,NULL,'Dear Jensen family',2,NULL,'Jensen family',NULL,NULL,NULL,0,NULL,'Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (30,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'patel.l.felisha@airmail.co.uk','patel.l.felisha@airmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','736266',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear patel.l.felisha@airmail.co.uk',1,NULL,'Dear patel.l.felisha@airmail.co.uk',1,NULL,'patel.l.felisha@airmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (31,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Toby','Toby Deforest',NULL,NULL,NULL,'5',NULL,'Both','2295860847',NULL,'Sample Data','Toby','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Deforest',NULL,NULL,'1937-08-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Lashawnda','Lashawnda Jensen',NULL,NULL,NULL,'4',NULL,'Both','4222472250',NULL,'Sample Data','Lashawnda','A','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Jensen',NULL,1,'1957-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (33,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Heidi','Heidi Robertson',NULL,NULL,NULL,NULL,NULL,'Both','266812175',NULL,'Sample Data','Heidi','','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Robertson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Laree','Laree Prentice',NULL,NULL,NULL,'4',NULL,'Both','2098700008',NULL,'Sample Data','Laree','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Prentice',NULL,NULL,'1949-12-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Damaris','Dr. Damaris Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3381130592',NULL,'Sample Data','Damaris','','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Dr. Damaris Olsen',NULL,1,'1957-09-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Shauna','Shauna Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','1678938046',NULL,'Sample Data','Shauna','V','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Ivanov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (37,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Rolando','Rolando Terrell II',NULL,NULL,NULL,NULL,NULL,'Both','3773897082',NULL,'Sample Data','Rolando','','Terrell',NULL,3,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Terrell II',NULL,2,'1992-09-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (38,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'New York Literacy Collective','New York Literacy Collective',NULL,NULL,NULL,NULL,NULL,'Both','1837047164',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New York Literacy Collective',NULL,NULL,NULL,0,NULL,NULL,88,'New York Literacy Collective',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Robertson, Brittney','Dr. Brittney Terry-Robertson',NULL,NULL,NULL,'2',NULL,'Both','2137852579',NULL,'Sample Data','Brittney','Q','Terry-Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Dr. Brittney Terry-Robertson',NULL,1,'1995-06-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (40,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Omar','Omar Terry',NULL,NULL,NULL,NULL,NULL,'Both','767854751',NULL,'Sample Data','Omar','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Terry',NULL,2,'1960-08-06',0,NULL,NULL,NULL,'College Health Trust',NULL,NULL,54,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Ashlie','Ashlie Ivanov',NULL,NULL,NULL,'4',NULL,'Both','468651798',NULL,'Sample Data','Ashlie','G','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Ivanov',NULL,NULL,'1956-11-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (42,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Margaret','Margaret Patel',NULL,NULL,NULL,'4',NULL,'Both','1725329639',NULL,'Sample Data','Margaret','U','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Patel',NULL,1,'2007-02-15',0,NULL,NULL,NULL,'Michigan Development Fund',NULL,NULL,107,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsent@fishmail.co.uk','olsent@fishmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','726478168',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear olsent@fishmail.co.uk',1,NULL,'Dear olsent@fishmail.co.uk',1,NULL,'olsent@fishmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (44,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Wattson, Arlyne','Arlyne Wattson',NULL,NULL,NULL,'2',NULL,'Both','2534537033',NULL,'Sample Data','Arlyne','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'patel-deforest.elina45@testmail.co.in','patel-deforest.elina45@testmail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','490965083',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear patel-deforest.elina45@testmail.co.in',1,NULL,'Dear patel-deforest.elina45@testmail.co.in',1,NULL,'patel-deforest.elina45@testmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (46,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'California Family Alliance','California Family Alliance',NULL,NULL,NULL,'5',NULL,'Both','4129427905',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Family Alliance',NULL,NULL,NULL,0,NULL,NULL,138,'California Family Alliance',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (47,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,'4',NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (48,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Illinois Sports School','Illinois Sports School',NULL,NULL,NULL,'3',NULL,'Both','174728266',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Illinois Sports School',NULL,NULL,NULL,0,NULL,NULL,127,'Illinois Sports School',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (49,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jameson, Damaris','Damaris Jameson',NULL,NULL,NULL,'3',NULL,'Both','2629827382',NULL,'Sample Data','Damaris','X','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Jameson',NULL,NULL,'1933-11-08',1,'2021-07-22',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (50,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mcreynolds.g.merrie@airmail.co.pl','mcreynolds.g.merrie@airmail.co.pl',NULL,NULL,NULL,'5',NULL,'Both','2606677361',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mcreynolds.g.merrie@airmail.co.pl',1,NULL,'Dear mcreynolds.g.merrie@airmail.co.pl',1,NULL,'mcreynolds.g.merrie@airmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,'Port Alsworth Peace Solutions',NULL,NULL,115,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Nicole','Dr. Nicole Jones',NULL,NULL,NULL,'5',NULL,'Both','1891539525',NULL,'Sample Data','Nicole','','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Dr. Nicole Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,'Maryland Family Center',NULL,NULL,104,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ev.bachman96@lol.co.in','ev.bachman96@lol.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3724998050',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ev.bachman96@lol.co.in',1,NULL,'Dear ev.bachman96@lol.co.in',1,NULL,'ev.bachman96@lol.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,'Woodbridge Empowerment Solutions',NULL,NULL,22,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Bob','Bob Zope Jr.',NULL,NULL,NULL,'4',NULL,'Both','707485722',NULL,'Sample Data','Bob','U','Zope',NULL,1,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Zope Jr.',NULL,NULL,'2013-03-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (54,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'College Health Trust','College Health Trust',NULL,NULL,NULL,NULL,NULL,'Both','2297106076',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'College Health Trust',NULL,NULL,NULL,0,NULL,NULL,40,'College Health Trust',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (55,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cruz, Ray','Mr. Ray Cruz II',NULL,NULL,NULL,NULL,NULL,'Both','1703831601',NULL,'Sample Data','Ray','','Cruz',3,3,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Cruz II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Truman','Mr. Truman Terrell Sr.',NULL,NULL,NULL,NULL,NULL,'Both','653635789',NULL,'Sample Data','Truman','','Terrell',3,2,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Mr. Truman Terrell Sr.',NULL,NULL,'1978-01-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (57,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,NULL,NULL,'Both','333421926',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson family',5,NULL,'Dear Samson family',2,NULL,'Samson family',NULL,NULL,NULL,0,NULL,'Samson family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (58,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'deforestk16@fakemail.co.pl','deforestk16@fakemail.co.pl',NULL,NULL,NULL,'4',NULL,'Both','2126676097',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear deforestk16@fakemail.co.pl',1,NULL,'Dear deforestk16@fakemail.co.pl',1,NULL,'deforestk16@fakemail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper-Jones, Damaris','Mrs. Damaris Cooper-Jones',NULL,NULL,NULL,'3',NULL,'Both','3069123387',NULL,'Sample Data','Damaris','','Cooper-Jones',1,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Mrs. Damaris Cooper-Jones',NULL,1,'1965-01-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Jina','Jina Cooper',NULL,NULL,NULL,'4',NULL,'Both','259819324',NULL,'Sample Data','Jina','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Cooper',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'smith.bryon@airmail.net','smith.bryon@airmail.net',NULL,NULL,NULL,'4',NULL,'Both','1741224028',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear smith.bryon@airmail.net',1,NULL,'Dear smith.bryon@airmail.net',1,NULL,'smith.bryon@airmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,'Second Empowerment Center',NULL,NULL,65,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (62,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Delana','Ms. Delana Terrell',NULL,NULL,NULL,'1',NULL,'Both','3301906923',NULL,'Sample Data','Delana','','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Ms. Delana Terrell',NULL,1,'1953-09-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Brigette','Brigette Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3984430218',NULL,'Sample Data','Brigette','R','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Robertson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wattsone4@fakemail.com','wattsone4@fakemail.com',NULL,NULL,NULL,'3',NULL,'Both','2623684150',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear wattsone4@fakemail.com',1,NULL,'Dear wattsone4@fakemail.com',1,NULL,'wattsone4@fakemail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (65,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Second Empowerment Center','Second Empowerment Center',NULL,NULL,NULL,NULL,NULL,'Both','2631823297',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Second Empowerment Center',NULL,NULL,NULL,0,NULL,NULL,61,'Second Empowerment Center',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (66,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Zope family','Zope family',NULL,NULL,NULL,'1',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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (67,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Jensen family','Cruz-Jensen family',NULL,NULL,NULL,'4',NULL,'Both','429481467',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz-Jensen family',5,NULL,'Dear Cruz-Jensen family',2,NULL,'Cruz-Jensen family',NULL,NULL,NULL,0,NULL,'Cruz-Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (68,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Truman','Dr. Truman Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3698975048',NULL,'Sample Data','Truman','','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Dr. Truman Deforest',NULL,NULL,'1996-03-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Norris','Norris Terrell',NULL,NULL,NULL,'5',NULL,'Both','1035663398',NULL,'Sample Data','Norris','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (70,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'daz.ashley48@testmail.biz','daz.ashley48@testmail.biz',NULL,NULL,NULL,NULL,NULL,'Both','2813348464',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear daz.ashley48@testmail.biz',1,NULL,'Dear daz.ashley48@testmail.biz',1,NULL,'daz.ashley48@testmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (71,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Margaret','Margaret Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2531077628',NULL,'Sample Data','Margaret','A','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Deforest',NULL,NULL,'1936-11-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (72,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Maria','Mr. Maria Yadav',NULL,NULL,NULL,NULL,NULL,'Both','1203839406',NULL,'Sample Data','Maria','','Yadav',3,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Mr. Maria Yadav',NULL,NULL,'1969-11-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'maxwellcruz@lol.co.nz','maxwellcruz@lol.co.nz',NULL,NULL,NULL,'4',NULL,'Both','2501478056',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear maxwellcruz@lol.co.nz',1,NULL,'Dear maxwellcruz@lol.co.nz',1,NULL,'maxwellcruz@lol.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (74,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Cadell Culture Systems','Cadell Culture Systems',NULL,NULL,NULL,'3',NULL,'Both','1049299857',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cadell Culture Systems',NULL,NULL,NULL,0,NULL,NULL,166,'Cadell Culture Systems',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (75,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,'2',NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (76,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'fh.parker98@fishmail.co.in','fh.parker98@fishmail.co.in',NULL,NULL,NULL,'1',NULL,'Both','1872272527',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear fh.parker98@fishmail.co.in',1,NULL,'Dear fh.parker98@fishmail.co.in',1,NULL,'fh.parker98@fishmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (77,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Juliann','Mrs. Juliann DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2604735488',NULL,'Sample Data','Juliann','','DÃaz',1,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Mrs. Juliann DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Justina','Ms. Justina McReynolds',NULL,NULL,NULL,'2',NULL,'Both','1146130692',NULL,'Sample Data','Justina','','McReynolds',2,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Ms. Justina McReynolds',NULL,1,'1968-05-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Esta','Mrs. Esta Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3595290803',NULL,'Sample Data','Esta','Y','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Mrs. Esta Ivanov',NULL,1,'1987-09-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (80,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Community Technology Systems','Community Technology Systems',NULL,NULL,NULL,NULL,NULL,'Both','2302981624',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Technology Systems',NULL,NULL,NULL,0,NULL,NULL,13,'Community Technology Systems',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mcreynolds-chowski.lincoln45@airmail.co.nz','mcreynolds-chowski.lincoln45@airmail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1999680850',NULL,'Sample Data',NULL,NULL,NULL,3,3,NULL,NULL,1,NULL,'Dear mcreynolds-chowski.lincoln45@airmail.co.nz',1,NULL,'Dear mcreynolds-chowski.lincoln45@airmail.co.nz',1,NULL,'mcreynolds-chowski.lincoln45@airmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (82,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds-ÅÄ…chowski, Delana','Ms. Delana McReynolds-ÅÄ…chowski',NULL,NULL,NULL,'4',NULL,'Both','581451099',NULL,'Sample Data','Delana','V','McReynolds-ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Ms. Delana McReynolds-ÅÄ…chowski',NULL,1,'1978-08-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (83,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Cooper, Alexia','Mrs. Alexia Cooper',NULL,NULL,NULL,'2',NULL,'Both','2846725010',NULL,'Sample Data','Alexia','D','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Mrs. Alexia Cooper',NULL,1,'1983-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Andrew','Andrew Parker',NULL,NULL,NULL,'1',NULL,'Both','3245499014',NULL,'Sample Data','Andrew','F','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Parker',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (85,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,'3',NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (86,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Beula','Beula Patel',NULL,NULL,NULL,NULL,NULL,'Both','945489022',NULL,'Sample Data','Beula','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Patel',NULL,1,'2006-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (87,'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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Rodrigo','Dr. Rodrigo Reynolds III',NULL,NULL,NULL,'3',NULL,'Both','393523623',NULL,'Sample Data','Rodrigo','','Reynolds',4,4,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo Reynolds III',NULL,2,'1965-10-31',0,NULL,NULL,NULL,'New York Literacy Collective',NULL,NULL,38,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (89,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Toby','Dr. Toby Patel',NULL,NULL,NULL,'1',NULL,'Both','2618763021',NULL,'Sample Data','Toby','W','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Dr. Toby Patel',NULL,2,'1958-04-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Rosario','Rosario Grant II',NULL,NULL,NULL,NULL,NULL,'Both','2992904466',NULL,'Sample Data','Rosario','','Grant',NULL,3,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Grant II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (91,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Troy','Mr. Troy Reynolds',NULL,NULL,NULL,'1',NULL,'Both','3318751273',NULL,'Sample Data','Troy','Z','Reynolds',3,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Mr. Troy Reynolds',NULL,2,'1990-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (92,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,NULL,NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (93,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,'1',NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (94,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson, Elina','Elina Jameson',NULL,NULL,NULL,'3',NULL,'Both','896855193',NULL,'Sample Data','Elina','Q','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Jameson',NULL,NULL,'1963-04-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (95,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cruz, Kenny','Kenny Cruz II',NULL,NULL,NULL,NULL,NULL,'Both','3987849545',NULL,'Sample Data','Kenny','X','Cruz',NULL,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Cruz II',NULL,2,'1948-10-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Sonny','Sonny Jensen Sr.',NULL,NULL,NULL,'5',NULL,'Both','2008494811',NULL,'Sample Data','Sonny','','Jensen',NULL,2,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Jensen Sr.',NULL,2,'2005-08-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (97,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Rolando','Dr. Rolando Adams Jr.',NULL,NULL,NULL,'1',NULL,'Both','1733849809',NULL,'Sample Data','Rolando','','Adams',4,1,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Adams Jr.',NULL,NULL,'1952-09-25',1,'2022-04-10',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Arlyne','Ms. Arlyne Lee',NULL,NULL,NULL,'4',NULL,'Both','1558961506',NULL,'Sample Data','Arlyne','','Lee',2,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Ms. Arlyne Lee',NULL,1,'1950-07-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (99,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Patel, Claudio','Mr. Claudio Patel III',NULL,NULL,NULL,NULL,NULL,'Both','2717427490',NULL,'Sample Data','Claudio','','Patel',3,4,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Mr. Claudio Patel III',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Advocacy Fund',NULL,NULL,126,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (100,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Kandace','Dr. Kandace Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1547944287',NULL,'Sample Data','Kandace','','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Dr. Kandace Deforest',NULL,1,'1965-06-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Merrie','Ms. Merrie Jacobs',NULL,NULL,NULL,'4',NULL,'Both','2371395127',NULL,'Sample Data','Merrie','C','Jacobs',2,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Ms. Merrie Jacobs',NULL,NULL,'1939-10-05',1,'2022-01-20',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (102,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samson, Juliann','Ms. Juliann Samson',NULL,NULL,NULL,NULL,NULL,'Both','1799778538',NULL,'Sample Data','Juliann','P','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Ms. Juliann Samson',NULL,1,'1976-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (103,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'1',NULL,'Both','1110516799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones family',5,NULL,'Dear Jones family',2,NULL,'Jones family',NULL,NULL,NULL,0,NULL,'Jones family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (104,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Maryland Family Center','Maryland Family Center',NULL,NULL,NULL,'4',NULL,'Both','4094534622',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Maryland Family Center',NULL,NULL,NULL,0,NULL,NULL,51,'Maryland Family Center',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Allan','Allan Cooper',NULL,NULL,NULL,'2',NULL,'Both','350402207',NULL,'Sample Data','Allan','S','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (106,'Household',NULL,0,0,0,0,0,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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (107,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Michigan Development Fund','Michigan Development Fund',NULL,NULL,NULL,NULL,NULL,'Both','709737418',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Michigan Development Fund',NULL,NULL,NULL,0,NULL,NULL,42,'Michigan Development Fund',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Russell','Dr. Russell Jameson',NULL,NULL,NULL,NULL,NULL,'Both','3424708861',NULL,'Sample Data','Russell','V','Jameson',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Jameson',NULL,2,'1965-04-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (109,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Colorado Legal Network','Colorado Legal Network',NULL,NULL,NULL,'2',NULL,'Both','254274369',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Colorado Legal Network',NULL,NULL,NULL,0,NULL,NULL,161,'Colorado Legal Network',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (110,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Lee, Erik','Dr. Erik Lee Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3144007526',NULL,'Sample Data','Erik','','Lee',4,2,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Lee Sr.',NULL,2,'1968-03-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (111,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson-Samson, Kathlyn','Ms. Kathlyn Wilson-Samson',NULL,NULL,NULL,'1',NULL,'Both','170950877',NULL,'Sample Data','Kathlyn','E','Wilson-Samson',2,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Ms. Kathlyn Wilson-Samson',NULL,NULL,'1987-06-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (112,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Magan','Mrs. Magan Jones',NULL,NULL,NULL,'1',NULL,'Both','781454343',NULL,'Sample Data','Magan','B','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Mrs. Magan Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (113,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'California Environmental Network','California Environmental Network',NULL,NULL,NULL,NULL,NULL,'Both','2090444528',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Environmental Network',NULL,NULL,NULL,0,NULL,NULL,122,'California Environmental Network',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (114,'Household',NULL,0,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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (115,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Port Alsworth Peace Solutions','Port Alsworth Peace Solutions',NULL,NULL,NULL,NULL,NULL,'Both','1776195820',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Port Alsworth Peace Solutions',NULL,NULL,NULL,0,NULL,NULL,50,'Port Alsworth Peace Solutions',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Shad','Shad Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2007691638',NULL,'Sample Data','Shad','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Olsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Angelika','Ms. Angelika González',NULL,NULL,NULL,NULL,NULL,'Both','2364901887',NULL,'Sample Data','Angelika','','González',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika González',NULL,1,'1945-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (118,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Felisha','Felisha Parker',NULL,NULL,NULL,NULL,NULL,'Both','559181434',NULL,'Sample Data','Felisha','U','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Parker',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (119,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Junko','Junko Müller',NULL,NULL,NULL,'2',NULL,'Both','3355176554',NULL,'Sample Data','Junko','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Müller',NULL,NULL,'1990-07-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Landon','Dr. Landon Roberts Jr.',NULL,NULL,NULL,'3',NULL,'Both','83700418',NULL,'Sample Data','Landon','','Roberts',4,1,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Roberts Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Roland','Dr. Roland Cruz',NULL,NULL,NULL,NULL,NULL,'Both','1569669867',NULL,'Sample Data','Roland','W','Cruz',4,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Cruz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Brittney','Dr. Brittney Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3183617598',NULL,'Sample Data','Brittney','','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Dr. Brittney Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,'California Environmental Network',NULL,NULL,113,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (123,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Brigette','Ms. Brigette Terry',NULL,NULL,NULL,'5',NULL,'Both','2789451544',NULL,'Sample Data','Brigette','D','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette Terry',NULL,1,'1992-09-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (124,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Kandace','Mrs. Kandace Terry',NULL,NULL,NULL,NULL,NULL,'Both','686769478',NULL,'Sample Data','Kandace','','Terry',1,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Mrs. Kandace Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,'Lincoln Technology Initiative',NULL,NULL,23,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (125,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Omar','Mr. Omar González',NULL,NULL,NULL,'5',NULL,'Both','2191997719',NULL,'Sample Data','Omar','G','González',3,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar González',NULL,NULL,'1942-08-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (126,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Advocacy Fund','Rural Advocacy Fund',NULL,NULL,NULL,'3',NULL,'Both','1051170169',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Advocacy Fund',NULL,NULL,NULL,0,NULL,NULL,99,'Rural Advocacy Fund',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (127,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Valene','Dr. Valene Patel',NULL,NULL,NULL,'4',NULL,'Both','2428544125',NULL,'Sample Data','Valene','','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Dr. Valene Patel',NULL,1,NULL,0,NULL,NULL,NULL,'Illinois Sports School',NULL,NULL,48,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (128,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cruz, Arlyne','Arlyne Cruz',NULL,NULL,NULL,NULL,NULL,'Both','630170547',NULL,'Sample Data','Arlyne','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Cruz',NULL,NULL,'1960-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (129,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Elina','Elina ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','1014989559',NULL,'Sample Data','Elina','K','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Lincoln','Lincoln Barkley Jr.',NULL,NULL,NULL,'3',NULL,'Both','1151829541',NULL,'Sample Data','Lincoln','','Barkley',NULL,1,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Barkley Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Rodrigo','Rodrigo Jones Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1530953309',NULL,'Sample Data','Rodrigo','W','Jones',NULL,2,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Jones Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (132,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Smith, Alexia','Mrs. Alexia Smith',NULL,NULL,NULL,NULL,NULL,'Both','528182465',NULL,'Sample Data','Alexia','','Smith',1,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Mrs. Alexia Smith',NULL,1,'1982-12-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (133,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'billyr99@example.co.nz','billyr99@example.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','4019110424',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear billyr99@example.co.nz',1,NULL,'Dear billyr99@example.co.nz',1,NULL,'billyr99@example.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Claudio','Mr. Claudio Yadav',NULL,NULL,NULL,NULL,NULL,'Both','2212747069',NULL,'Sample Data','Claudio','','Yadav',3,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Mr. Claudio Yadav',NULL,2,'1942-08-21',1,'2022-02-25',NULL,NULL,'Woodbridge Sustainability Services',NULL,NULL,165,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (135,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Tanya','Dr. Tanya Roberts',NULL,NULL,NULL,NULL,NULL,'Both','1629633174',NULL,'Sample Data','Tanya','W','Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Dr. Tanya Roberts',NULL,1,'1990-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (136,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'shaunablackwell92@sample.biz','shaunablackwell92@sample.biz',NULL,NULL,NULL,NULL,NULL,'Both','3784827658',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear shaunablackwell92@sample.biz',1,NULL,'Dear shaunablackwell92@sample.biz',1,NULL,'shaunablackwell92@sample.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Erik','Mr. Erik Adams Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1567928244',NULL,'Sample Data','Erik','K','Adams',3,2,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Mr. Erik Adams Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (138,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Sharyn','Sharyn Prentice',NULL,NULL,NULL,NULL,NULL,'Both','2491817184',NULL,'Sample Data','Sharyn','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Prentice',NULL,1,NULL,0,NULL,NULL,NULL,'California Family Alliance',NULL,NULL,46,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Clint','Clint Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1165497253',NULL,'Sample Data','Clint','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Samuels',NULL,2,'1964-05-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Jacob','Jacob Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','400655816',NULL,'Sample Data','Jacob','C','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Jacobs',NULL,NULL,'1985-05-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (141,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Andrew','Andrew Blackwell',NULL,NULL,NULL,'3',NULL,'Both','2328901373',NULL,'Sample Data','Andrew','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Blackwell',NULL,2,'1989-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (142,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'zope.rodrigo@sample.info','zope.rodrigo@sample.info',NULL,NULL,NULL,'5',NULL,'Both','557975893',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear zope.rodrigo@sample.info',1,NULL,'Dear zope.rodrigo@sample.info',1,NULL,'zope.rodrigo@sample.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (143,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Rebekah','Mrs. Rebekah Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3979151803',NULL,'Sample Data','Rebekah','','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Mrs. Rebekah Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Betty','Betty Jensen',NULL,NULL,NULL,'4',NULL,'Both','3826692336',NULL,'Sample Data','Betty','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Jensen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Arlyne','Arlyne Cooper',NULL,NULL,NULL,NULL,NULL,'Both','1117506834',NULL,'Sample Data','Arlyne','E','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Cooper',NULL,1,'2017-02-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Jensen, Magan','Magan Cruz-Jensen',NULL,NULL,NULL,NULL,NULL,'Both','1966896579',NULL,'Sample Data','Magan','','Cruz-Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Cruz-Jensen',NULL,1,'1984-12-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Landon','Dr. Landon Jones Jr.',NULL,NULL,NULL,'2',NULL,'Both','1338428920',NULL,'Sample Data','Landon','','Jones',4,1,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Jones Jr.',NULL,2,'1977-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Sharyn','Sharyn Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','4266419554',NULL,'Sample Data','Sharyn','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Blackwell',NULL,NULL,'1992-04-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (149,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Claudio','Dr. Claudio Jones',NULL,NULL,NULL,'1',NULL,'Both','3742470813',NULL,'Sample Data','Claudio','U','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Dr. Claudio Jones',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (150,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Chillicothe Family Collective','Chillicothe Family Collective',NULL,NULL,NULL,'3',NULL,'Both','911688679',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Chillicothe Family Collective',NULL,NULL,NULL,0,NULL,NULL,NULL,'Chillicothe Family Collective',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (151,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Mei','Mei Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3305491240',NULL,'Sample Data','Mei','K','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Jensen',NULL,1,'1996-08-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (152,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Iris','Mrs. Iris Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2973926348',NULL,'Sample Data','Iris','','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Mrs. Iris Cooper',NULL,1,'1944-07-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (153,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Teresa','Teresa Müller',NULL,NULL,NULL,NULL,NULL,'Both','3926761970',NULL,'Sample Data','Teresa','E','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Müller',NULL,1,'1969-11-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (154,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'billycooper67@testing.net','billycooper67@testing.net',NULL,NULL,NULL,NULL,NULL,'Both','806391372',NULL,'Sample Data',NULL,NULL,NULL,3,1,NULL,NULL,1,NULL,'Dear billycooper67@testing.net',1,NULL,'Dear billycooper67@testing.net',1,NULL,'billycooper67@testing.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (155,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels-Blackwell, Herminia','Ms. Herminia Samuels-Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','62895609',NULL,'Sample Data','Herminia','F','Samuels-Blackwell',2,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Ms. Herminia Samuels-Blackwell',NULL,NULL,'1958-01-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samsonm@mymail.net','samsonm@mymail.net',NULL,NULL,NULL,'5',NULL,'Both','4181468242',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear samsonm@mymail.net',1,NULL,'Dear samsonm@mymail.net',1,NULL,'samsonm@mymail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (157,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Zope, Kacey','Dr. Kacey Zope',NULL,NULL,NULL,NULL,NULL,'Both','1628998232',NULL,'Sample Data','Kacey','R','Zope',4,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Dr. Kacey Zope',NULL,1,'1993-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (158,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel-Deforest family','Patel-Deforest family',NULL,NULL,NULL,'3',NULL,'Both','3380192877',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel-Deforest family',5,NULL,'Dear Patel-Deforest family',2,NULL,'Patel-Deforest family',NULL,NULL,NULL,0,NULL,'Patel-Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Lou','Dr. Lou Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3825436654',NULL,'Sample Data','Lou','N','Cruz',4,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Dr. Lou Cruz',NULL,NULL,'1981-06-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (160,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel-Deforest, Delana','Delana Patel-Deforest',NULL,NULL,NULL,'3',NULL,'Both','4137531327',NULL,'Sample Data','Delana','','Patel-Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Patel-Deforest',NULL,1,'2002-02-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Sherman','Dr. Sherman Jensen',NULL,NULL,NULL,'1',NULL,'Both','1444666503',NULL,'Sample Data','Sherman','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Jensen',NULL,2,'1987-03-27',0,NULL,NULL,NULL,'Colorado Legal Network',NULL,NULL,109,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (162,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Princess','Princess Ivanov',NULL,NULL,NULL,'1',NULL,'Both','3366449477',NULL,'Sample Data','Princess','B','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Ivanov',NULL,NULL,'2019-06-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (163,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Patel, Clint','Mr. Clint Patel',NULL,NULL,NULL,NULL,NULL,'Both','853851705',NULL,'Sample Data','Clint','','Patel',3,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Mr. Clint Patel',NULL,NULL,'1945-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Princess','Princess Jones',NULL,NULL,NULL,'3',NULL,'Both','3647166533',NULL,'Sample Data','Princess','Y','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Jones',NULL,1,'1965-10-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (165,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Woodbridge Sustainability Services','Woodbridge Sustainability Services',NULL,NULL,NULL,'3',NULL,'Both','3365734368',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Woodbridge Sustainability Services',NULL,NULL,NULL,0,NULL,NULL,134,'Woodbridge Sustainability Services',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Delana','Delana Cruz',NULL,NULL,NULL,'1',NULL,'Both','3000651587',NULL,'Sample Data','Delana','K','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Cruz',NULL,1,'1982-02-25',0,NULL,NULL,NULL,'Cadell Culture Systems',NULL,NULL,74,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (167,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz family','Cruz family',NULL,NULL,NULL,NULL,NULL,'Both','2326538497',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz family',5,NULL,'Dear Cruz family',2,NULL,'Cruz family',NULL,NULL,NULL,0,NULL,'Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (168,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'teddywattson1@spamalot.com','teddywattson1@spamalot.com',NULL,NULL,NULL,NULL,NULL,'Both','2127773846',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear teddywattson1@spamalot.com',1,NULL,'Dear teddywattson1@spamalot.com',1,NULL,'teddywattson1@spamalot.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (169,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wagner, Claudio','Claudio Wagner Sr.',NULL,NULL,NULL,NULL,NULL,'Both','4219271411',NULL,'Sample Data','Claudio','','Wagner',NULL,2,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Wagner Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (170,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Ashley','Ashley Terrell',NULL,NULL,NULL,NULL,NULL,'Both','209760227',NULL,'Sample Data','Ashley','C','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Terrell',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (171,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Bryon','Mr. Bryon Patel',NULL,NULL,NULL,NULL,NULL,'Both','1193139310',NULL,'Sample Data','Bryon','D','Patel',3,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon Patel',NULL,NULL,'1985-09-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (172,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry-Robertson, Scott','Scott Terry-Robertson',NULL,NULL,NULL,'3',NULL,'Both','2171975803',NULL,'Sample Data','Scott','','Terry-Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Terry-Robertson',NULL,NULL,'2014-02-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (173,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Saint Helena Literacy Alliance','Saint Helena Literacy Alliance',NULL,NULL,NULL,NULL,NULL,'Both','626955140',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Saint Helena Literacy Alliance',NULL,NULL,NULL,0,NULL,NULL,179,'Saint Helena Literacy Alliance',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (174,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Santina','Ms. Santina Wagner',NULL,NULL,NULL,'1',NULL,'Both','3136401348',NULL,'Sample Data','Santina','','Wagner',2,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Ms. Santina Wagner',NULL,1,'1941-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (175,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Dousman Sustainability Solutions','Dousman Sustainability Solutions',NULL,NULL,NULL,'4',NULL,'Both','2586724771',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dousman Sustainability Solutions',NULL,NULL,NULL,0,NULL,NULL,8,'Dousman Sustainability Solutions',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (176,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cruz, Omar','Mr. Omar Cruz III',NULL,NULL,NULL,NULL,NULL,'Both','348168112',NULL,'Sample Data','Omar','O','Cruz',3,4,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Cruz III',NULL,2,'1990-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Nicole','Mrs. Nicole Roberts',NULL,NULL,NULL,NULL,NULL,'Both','998604159',NULL,'Sample Data','Nicole','','Roberts',1,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Mrs. Nicole Roberts',NULL,NULL,'1986-04-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (178,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'heiditerrell-zope95@notmail.co.pl','heiditerrell-zope95@notmail.co.pl',NULL,NULL,NULL,'2',NULL,'Both','35112576',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear heiditerrell-zope95@notmail.co.pl',1,NULL,'Dear heiditerrell-zope95@notmail.co.pl',1,NULL,'heiditerrell-zope95@notmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (179,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'terry.maxwell@infomail.org','terry.maxwell@infomail.org',NULL,NULL,NULL,NULL,NULL,'Both','1967966149',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear terry.maxwell@infomail.org',1,NULL,'Dear terry.maxwell@infomail.org',1,NULL,'terry.maxwell@infomail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,'Saint Helena Literacy Alliance',NULL,NULL,173,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (180,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Advocacy Solutions','Urban Advocacy Solutions',NULL,NULL,NULL,NULL,NULL,'Both','1856526663',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Advocacy Solutions',NULL,NULL,NULL,0,NULL,NULL,17,'Urban Advocacy Solutions',NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samsont88@notmail.co.nz','samsont88@notmail.co.nz',NULL,NULL,NULL,'2',NULL,'Both','137391330',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear samsont88@notmail.co.nz',1,NULL,'Dear samsont88@notmail.co.nz',1,NULL,'samsont88@notmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (182,'Household',NULL,0,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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Barry','Barry Zope',NULL,NULL,NULL,NULL,NULL,'Both','1953474040',NULL,'Sample Data','Barry','C','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Zope',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (184,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'ce.jameson58@testing.biz','ce.jameson58@testing.biz',NULL,NULL,NULL,NULL,NULL,'Both','3055850464',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear ce.jameson58@testing.biz',1,NULL,'Dear ce.jameson58@testing.biz',1,NULL,'ce.jameson58@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (185,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Sonny','Sonny McReynolds',NULL,NULL,NULL,'5',NULL,'Both','3975405155',NULL,'Sample Data','Sonny','S','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny McReynolds',NULL,2,'1961-04-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (186,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Shad','Shad Jones III',NULL,NULL,NULL,'3',NULL,'Both','3058482719',NULL,'Sample Data','Shad','','Jones',NULL,4,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Jones III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Arlyne','Arlyne Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','4232136365',NULL,'Sample Data','Arlyne','S','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Ivanov',NULL,1,'1936-03-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (188,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Zope, Bernadette','Bernadette Zope',NULL,NULL,NULL,NULL,NULL,'Both','2602904844',NULL,'Sample Data','Bernadette','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Zope',NULL,1,'2014-02-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (189,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Sanford','Sanford Zope Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3485406852',NULL,'Sample Data','Sanford','E','Zope',NULL,1,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Zope Jr.',NULL,2,'1971-11-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (190,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Patel, Junko','Ms. Junko Patel',NULL,NULL,NULL,NULL,NULL,'Both','3770216305',NULL,'Sample Data','Junko','','Patel',2,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Ms. Junko Patel',NULL,1,'1985-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Kathleen','Kathleen Patel',NULL,NULL,NULL,'1',NULL,'Both','3805387262',NULL,'Sample Data','Kathleen','R','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Patel',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Merrie','Merrie Smith',NULL,NULL,NULL,NULL,NULL,'Both','2728255522',NULL,'Sample Data','Merrie','A','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Smith',NULL,1,'1934-10-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mller-patel.juliann@sample.co.in','mller-patel.juliann@sample.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3898593674',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear mller-patel.juliann@sample.co.in',1,NULL,'Dear mller-patel.juliann@sample.co.in',1,NULL,'mller-patel.juliann@sample.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Clint','Clint Ivanov III',NULL,NULL,NULL,NULL,NULL,'Both','3280498131',NULL,'Sample Data','Clint','','Ivanov',NULL,4,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Ivanov III',NULL,2,'1958-09-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Bernadette','Mrs. Bernadette Roberts',NULL,NULL,NULL,NULL,NULL,'Both','4225100946',NULL,'Sample Data','Bernadette','','Roberts',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette Roberts',NULL,NULL,'1980-03-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:52'), + (196,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, BrzÄ™czysÅ‚aw','Mr. BrzÄ™czysÅ‚aw Cooper',NULL,NULL,NULL,NULL,NULL,'Both','671824527',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Mr. BrzÄ™czysÅ‚aw Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Elbert','Elbert Roberts Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2457403218',NULL,'Sample Data','Elbert','A','Roberts',NULL,2,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Roberts Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (198,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'samuels.beula@example.info','samuels.beula@example.info',NULL,NULL,NULL,NULL,NULL,'Both','3262465673',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear samuels.beula@example.info',1,NULL,'Dear samuels.beula@example.info',1,NULL,'samuels.beula@example.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (199,'Household',NULL,0,0,0,0,0,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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (200,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell family','Terrell family',NULL,NULL,NULL,'2',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,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Roland','Roland Zope',NULL,NULL,NULL,NULL,NULL,'Both','1007442606',NULL,'Sample Data','Roland','G','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Zope',NULL,NULL,'1965-04-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:52','2022-06-22 13:51:53'), + (202,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jenny','Jenny Lee',NULL,NULL,NULL,NULL,'en_US','Both','8d3969ad251075f759046920ff5bc305',NULL,NULL,'Jenny',NULL,'Lee',NULL,NULL,NULL,1,1,NULL,'Dear Jenny',1,NULL,'Dear Jenny',1,NULL,'Jenny Lee','Volunteer coordinator',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-06-22 13:51:53','2022-06-22 13:51:53'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -2168,117 +2166,117 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution` WRITE; /*!40000 ALTER TABLE `civicrm_contribution` DISABLE KEYS */; INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES - (1,2,1,NULL,4,'2012-06-28 04:20:38',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0), - (2,4,1,NULL,1,'2020-03-28 04:20:38',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (3,6,1,NULL,4,'2016-06-02 15:20:38',0.00,25.00,NULL,NULL,'GBP12',NULL,NULL,'GBP',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0), - (4,8,1,NULL,4,'2020-03-28 04:20:38',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0), - (5,4,1,NULL,1,'2020-03-28 04:20:38',0.00,50.00,NULL,NULL,'Q90901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (6,16,1,NULL,4,'2022-04-04 03:38:38',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0), - (7,19,1,NULL,1,'2022-06-26 04:20:38',0.00,1750.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0), - (8,82,1,NULL,1,'2021-11-03 12:31:38',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (9,92,1,NULL,1,'2021-07-28 04:20:38',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (10,34,1,NULL,1,'2018-02-05 06:20:38',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (11,71,1,NULL,1,'2022-06-27 00:20:38',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'JPY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (12,43,1,NULL,1,'2021-03-27 17:47:19',0.00,50.00,NULL,NULL,'P291X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (13,32,1,NULL,1,'2022-03-28 00:00:00',0.00,50.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (14,32,1,NULL,1,'2022-04-28 00:00:00',0.00,50.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (15,59,1,NULL,1,'2021-03-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I591',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (16,59,1,NULL,1,'2021-04-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I592',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (17,59,1,NULL,1,'2021-05-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I593',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (18,59,1,NULL,1,'2021-06-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I594',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (19,59,1,NULL,1,'2021-07-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I595',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (20,59,1,NULL,1,'2021-08-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I596',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (21,59,1,NULL,1,'2021-09-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I597',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (22,59,1,NULL,1,'2021-10-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I598',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (23,59,1,NULL,1,'2021-11-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I599',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (24,59,1,NULL,1,'2021-12-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I5910',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (25,59,1,NULL,1,'2022-01-28 04:20:38',0.00,25.00,NULL,NULL,'PL32I5911',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (26,99,1,NULL,1,'2021-10-28 04:20:38',0.00,10.00,NULL,NULL,'PL32I991',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (27,99,1,NULL,1,'2021-11-28 04:20:38',0.00,10.00,NULL,NULL,'PL32I992',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (28,99,1,NULL,1,'2021-12-28 04:20:38',0.00,10.00,NULL,NULL,'PL32I993',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (29,99,1,NULL,1,'2022-01-28 04:20:38',0.00,10.00,NULL,NULL,'PL32I994',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (30,99,1,NULL,1,'2022-02-28 04:20:38',0.00,10.00,NULL,NULL,'PL32I995',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (31,103,1,NULL,1,'2022-05-28 04:20:38',0.00,5.00,NULL,NULL,'PL32I1031',NULL,NULL,'EUR',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,3,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (32,13,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'12c0fef2a538e4cb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (33,121,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'ad7a27f1f5d8ae04',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (34,39,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'ff9c447a179835c8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (35,50,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'55c34941861d86ad',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (36,6,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'f60e21c1a71d0877',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (37,94,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'117f41272dc2f3f0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (38,69,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'f9a303829ce13f1a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (39,199,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'e934713e34f527e2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (40,5,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'ff57294e183c0bf4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (41,151,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'3d9bf8368ee9c006',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (42,65,2,NULL,1,'2022-06-28 04:20:39',0.00,1200.00,NULL,NULL,'8789b49254a4147a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (43,106,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'86150e0a4d5b3846',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (44,88,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'a6f6f7ea1e771a17',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (45,125,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'b492b0adc4538db6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (46,166,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'32c620ba52799b9a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (47,161,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'69441ccdeb8aad4f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (48,133,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'41e07ff1b83a5957',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (49,159,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'5e426db3d80cadf6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (50,196,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'380c1e888702fdfb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (51,186,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'9b4d1cf669c5c393',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (52,187,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'d8ad33893d2b366f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (53,180,2,NULL,1,'2022-06-28 04:20:39',0.00,1200.00,NULL,NULL,'d6d6a57ba96f2a89',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (54,47,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'8604057794b33f52',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (55,97,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'57e6828548b37fd1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (56,22,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'d3ede0477b2fd8f4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (57,198,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'228fb19a09448181',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (58,184,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'6d5e2edfa623ac0a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (59,181,2,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'bbcbc3331ea0d9e4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (60,70,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'b027195aa4388e2c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (61,148,2,NULL,1,'2022-06-28 04:20:39',0.00,100.00,NULL,NULL,'0235676032130486',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (63,3,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'4ec7b8b6dfd03581',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (64,7,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'30c363a0577f10d7',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (65,10,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'54076398df8cce64',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (66,13,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'2d7a90b38a4f5274',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (67,15,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'71d9ab4d130de602',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (68,19,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'43e470b5b9e4cd4c',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (69,35,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'c6d20af6ca7a6ff7',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (70,38,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'7998a8a4bff40cef',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (71,45,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'eee41bf34ea977ea',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (72,46,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'1df49d1bde9d7101',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (73,50,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'237491dbfbdefb1d',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (74,53,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'417e6791ac45be9f',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (75,54,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'755f88c21f7b839a',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (76,55,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'a24294248ac98774',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (77,57,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'400289590112b9f5',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (78,60,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'c7a8c12cf512a174',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (79,64,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'a172f22353b5c904',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (80,71,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'bc4cbed0c5d6ef22',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (81,78,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'90f222a38b3a72ce',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (82,91,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'a4ebc2a605f8433d',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (83,93,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'5faacadd3e7e81ab',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (84,94,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'2a7ed56222842ccc',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (85,100,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'b0f7803bbe9f0469',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (86,104,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'50f82bc55358789c',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (87,106,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'ecbc3b8c4f3af5da',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (88,111,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'296fed4e101ed043',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (89,112,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'bc862aa11a9fcdd4',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (90,116,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'b48bdcb4826ce9e9',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (91,117,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'d084b2ccc8423844',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (92,125,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'ab27566953b7ef50',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (93,128,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'27da160ee42243b1',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (94,130,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'d5f53a73eeac05e7',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (95,148,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'f687eef50d1ad17d',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (96,153,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'768bba188e2df79c',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (97,157,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'010df08754cd9837',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (98,159,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'4ddb69fdb6e64fd0',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (99,167,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'121c093c476dfccb',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (100,168,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'971ada173e4af435',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (101,171,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'19dbb7f189c4ed52',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (102,172,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'e55eca83c79ba530',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (103,179,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'0ba6415746f0e89a',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (104,181,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'d4d7ef589c35d142',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (105,182,4,NULL,1,'2022-06-28 04:20:39',0.00,800.00,NULL,NULL,'bff4a73bd7004706',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (106,183,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'3ed0d46c7029f846',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (107,185,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'f1bbb89dd1fa3392',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (108,187,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'9ee30d15f95d1977',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (109,192,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'6721b4adc64650e6',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (110,193,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'fdcd036064f4004f',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (111,194,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'522878abb2c5cef1',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (112,200,4,NULL,1,'2022-06-28 04:20:39',0.00,50.00,NULL,NULL,'38da919a144f6aff',NULL,NULL,'USD',NULL,NULL,'2022-06-28 04:20:39',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); + (1,2,1,NULL,4,'2012-06-22 09:51:54',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0), + (2,4,1,NULL,1,'2020-03-22 09:51:54',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (3,6,1,NULL,4,'2016-05-27 20:51:54',0.00,25.00,NULL,NULL,'GBP12',NULL,NULL,'GBP',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0), + (4,8,1,NULL,4,'2020-03-22 09:51:54',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0), + (5,4,1,NULL,1,'2020-03-22 09:51:54',0.00,50.00,NULL,NULL,'Q90901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (6,16,1,NULL,4,'2022-03-29 09:09:54',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0), + (7,19,1,NULL,1,'2022-06-20 09:51:54',0.00,1750.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0), + (8,82,1,NULL,1,'2021-10-28 18:02:54',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (9,92,1,NULL,1,'2021-07-22 09:51:54',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (10,34,1,NULL,1,'2018-01-30 11:51:54',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (11,71,1,NULL,1,'2022-06-21 05:51:54',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'JPY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (12,43,1,NULL,1,'2021-03-21 23:18:34',0.00,50.00,NULL,NULL,'P291X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (13,32,1,NULL,1,'2022-03-22 00:00:00',0.00,50.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (14,32,1,NULL,1,'2022-04-22 00:00:00',0.00,50.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,59,1,NULL,1,'2021-03-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I591',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,59,1,NULL,1,'2021-04-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I592',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,59,1,NULL,1,'2021-05-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I593',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,59,1,NULL,1,'2021-06-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I594',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,59,1,NULL,1,'2021-07-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I595',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,59,1,NULL,1,'2021-08-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I596',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,59,1,NULL,1,'2021-09-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I597',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,59,1,NULL,1,'2021-10-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I598',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,59,1,NULL,1,'2021-11-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I599',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,59,1,NULL,1,'2021-12-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I5910',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,59,1,NULL,1,'2022-01-22 09:51:54',0.00,25.00,NULL,NULL,'PL32I5911',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,99,1,NULL,1,'2021-10-22 09:51:54',0.00,10.00,NULL,NULL,'PL32I991',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,99,1,NULL,1,'2021-11-22 09:51:54',0.00,10.00,NULL,NULL,'PL32I992',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,99,1,NULL,1,'2021-12-22 09:51:54',0.00,10.00,NULL,NULL,'PL32I993',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,99,1,NULL,1,'2022-01-22 09:51:54',0.00,10.00,NULL,NULL,'PL32I994',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,99,1,NULL,1,'2022-02-22 09:51:54',0.00,10.00,NULL,NULL,'PL32I995',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,103,1,NULL,1,'2022-05-22 09:51:54',0.00,5.00,NULL,NULL,'PL32I1031',NULL,NULL,'EUR',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,3,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,131,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'28fe54a2e12346b9',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,71,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9f0fdb03ae014e13',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,101,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'824167b4f2f6a00c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,192,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9fd96e940d770cd8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,134,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'14d15ad2c9a7ce3c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,2,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9044b2acafa51819',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (38,8,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'6959b93934b2599b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (39,168,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'fac11c1af9276211',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (40,164,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'e1b367229a77977a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (41,81,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'b552801b65205b60',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (42,137,2,NULL,1,'2022-06-22 09:51:54',0.00,1200.00,NULL,NULL,'7b00946ebebfd3e0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (43,45,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'3bc0fa5a784cd06d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (44,63,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'3c033b377bba5ad4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (45,5,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'eaf8fd785b2d650e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (46,73,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9b5778fd82f9fdc0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (47,19,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9f41fa270f1d1f65',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (48,123,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'ca2ad95d434d0a75',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (49,136,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'9d3adce27a83e400',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (50,21,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'e81ab3c38c8e1d58',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (51,197,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'75986f8cd2e4e0d5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (52,96,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'39a6bea5a782e5bb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (53,171,2,NULL,1,'2022-06-22 09:51:54',0.00,1200.00,NULL,NULL,'a51de6bf4ab34440',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (54,154,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'beb72efaa0c55854',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (55,59,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'f2cc37da11999f66',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (56,20,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'3e2230ded06a4ff2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (57,201,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'b4d81bc239fc298d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (58,18,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'c433dab0f68bf3f0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (59,133,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'fe1cd545096edaad',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (60,155,2,NULL,1,'2022-06-22 09:51:54',0.00,100.00,NULL,NULL,'1a3e131e60490fba',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (61,33,2,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'f66d0174b87acf1d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (63,1,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'e0471ccdf963a072',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (64,2,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'cf8c325e969c7d3c',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (65,4,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'cf4c165aec49c550',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (66,6,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'639efa098f6caffd',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (67,7,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'632fcb3e63cd8c4e',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (68,8,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'a810fab676f62dbd',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (69,14,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'b390d0d7575256a2',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (70,15,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'293813dc6309f41e',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (71,18,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'83da0f4330b0011f',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (72,19,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'b6a939834246bc92',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (73,28,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'7792427cd429502c',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (74,35,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'2801eeb18ead8d9b',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (75,38,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'3f38c95b0848adc3',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (76,56,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'2ab4377281aa13db',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (77,58,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'16d4098454e519d9',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (78,63,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'d709ffe8e28506cf',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (79,64,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'0d3c2a755c49d49b',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (80,70,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'da426931229acb8f',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (81,77,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'587c22763f64d837',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (82,78,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'00d821f8ed2c5ea2',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (83,80,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'bd22b3d1fd2132ad',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (84,87,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'9aa798abdf017438',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (85,91,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'154790ca52344b60',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (86,102,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'9c681c8ad63a44ca',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (87,107,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'3b593264eb94c70b',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (88,111,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'357c861c1f9d5294',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (89,114,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'f069b05227743a64',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (90,121,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'0c72b7ac77e3e34c',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (91,126,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'fd46399849025f85',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (92,127,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'66b264923941f9ba',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (93,128,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'b2ea96f4ee909042',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (94,129,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'3e69ae9d238300df',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (95,130,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'edb4a7825601c734',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (96,131,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'c4f4fe4f3ecee695',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (97,132,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'e45d2a2ca0965aae',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (98,134,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'2317d7ff2cb8757a',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (99,140,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'0ce02d56ccaeff17',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (100,146,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'430d1fce1dba7268',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (101,148,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'aaec111895c96da1',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (102,149,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'01379d1d23d88550',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (103,151,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'6c014b0037077b09',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (104,158,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'a6cf9eea1050247c',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (105,166,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'d55b31acbf3d46e1',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (106,168,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'1aef52ebd54323ad',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (107,174,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'a217ae61436d8213',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (108,180,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'c9a6f3d4ae35fe1f',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (109,189,4,NULL,1,'2022-06-22 09:51:54',0.00,800.00,NULL,NULL,'9877c894fae7a092',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (110,197,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'ca2b9a9578628450',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (111,199,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'87ab1025cd4ec6ca',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (112,202,4,NULL,1,'2022-06-22 09:51:54',0.00,50.00,NULL,NULL,'e0317f3ef2a31915',NULL,NULL,'USD',NULL,NULL,'2022-06-22 09:51:54',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */; UNLOCK TABLES; @@ -2311,9 +2309,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_recur` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_recur` DISABLE KEYS */; INSERT INTO `civicrm_contribution_recur` (`id`, `contact_id`, `amount`, `currency`, `frequency_unit`, `frequency_interval`, `installments`, `start_date`, `create_date`, `modified_date`, `cancel_date`, `cancel_reason`, `end_date`, `processor_id`, `payment_token_id`, `trxn_id`, `invoice_id`, `contribution_status_id`, `is_test`, `cycle_day`, `next_sched_contribution_date`, `failure_count`, `failure_retry_date`, `auto_renew`, `payment_processor_id`, `financial_type_id`, `payment_instrument_id`, `campaign_id`, `is_email_receipt`) VALUES - (1,59,25.00,'USD','month',1,12,'2021-03-28 04:20:38','2022-06-28 04:20:38','2022-06-28 04:20:38',NULL,'',NULL,'CLC45',NULL,'56799',NULL,1,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), - (2,99,10.00,'CAD','month',1,6,'2021-10-28 04:20:38','2022-06-28 04:20:38','2022-06-28 04:20:38','2022-05-28 04:20:38','No longer interested',NULL,'CLR35',NULL,'22799',NULL,3,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), - (3,103,5.00,'EUR','month',3,3,'2022-05-28 04:20:38','2022-06-28 04:20:38','2022-06-28 04:20:38',NULL,'',NULL,'EGR12',NULL,'44889',NULL,5,0,1,'2022-08-28 04:20:38',0,NULL,0,1,NULL,NULL,NULL,1); + (1,59,25.00,'USD','month',1,12,'2021-03-22 09:51:54','2022-06-22 09:51:54','2022-06-22 13:51:54',NULL,'',NULL,'CLC45',NULL,'56799',NULL,1,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), + (2,99,10.00,'CAD','month',1,6,'2021-10-22 09:51:54','2022-06-22 09:51:54','2022-06-22 13:51:54','2022-05-22 09:51:54','No longer interested',NULL,'CLR35',NULL,'22799',NULL,3,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), + (3,103,5.00,'EUR','month',3,3,'2022-05-22 09:51:54','2022-06-22 09:51:54','2022-06-22 13:51:54',NULL,'',NULL,'EGR12',NULL,'44889',NULL,5,0,1,'2022-08-22 09:51:54',0,NULL,0,1,NULL,NULL,NULL,1); /*!40000 ALTER TABLE `civicrm_contribution_recur` ENABLE KEYS */; UNLOCK TABLES; @@ -2324,8 +2322,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,9,170,10.00,'USD',1,1,'Jones Family','Helping Hands',10), - (2,10,170,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); + (1,9,134,10.00,'USD',1,1,'Jones Family','Helping Hands',10), + (2,10,134,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -2924,7 +2922,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.51.3',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); + (1,'Default Domain Name',NULL,'5.52.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -2936,203 +2934,199 @@ 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,114,1,'deforest.kathlyn@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (3,114,1,'deforestk@sample.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (4,95,1,'adams.shad@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (5,95,1,'shadadams95@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (6,182,1,'tanyab@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (7,170,1,'grant.carlos27@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (8,170,1,'carlosgrant@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (9,27,1,'patel.rosario@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (10,121,1,'mz.robertson@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (11,121,1,'robertsonm@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (12,19,1,'blackwell.norris22@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (13,53,1,'barkleyk@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (14,53,1,'barkleyk@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (15,186,1,'brigetten@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (16,186,1,'nielsen.brigette@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (17,93,1,'ewilson@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (18,93,1,'ewilson@sample.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (19,69,1,'wilson.sherman@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (20,142,1,'russellgrant65@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (21,142,1,'grantr@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (22,198,1,'scottr26@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (23,198,1,'roberts.scott@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (24,136,1,'jroberts13@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (25,133,1,'deforest.maxwell@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (26,133,1,'maxwelld7@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (27,196,1,'mi.prentice63@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), - (28,196,1,'mariaprentice@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (29,157,1,'patel.teddy@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (30,157,1,'teddypatel@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (31,147,1,'pu.mcreynolds60@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (32,94,1,'robertson.h.elina@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (33,25,1,'rayreynolds@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (34,159,1,'andrewsamson@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (35,159,1,'andrewsamson40@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (36,90,1,'fjensen@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (37,151,1,'bmller@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (38,151,1,'mllerb48@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (39,116,1,'brzczysawrobertson@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (40,70,1,'samuelse@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (41,76,1,'patel.kandace@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (42,72,1,'cooper.scarlet@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (43,72,1,'scarletc@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (44,13,1,'alidas6@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (45,89,1,'aj.blackwell@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (46,89,1,'blackwell.allen71@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (47,135,1,'bo.daz38@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (48,3,1,'wattson.p.nicole@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (49,3,1,'wattsonn@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (50,78,1,'sadams@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (51,62,1,'gonzlez.l.miguel@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (52,62,1,'miguelgonzlez@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (53,188,1,'wilson.s.andrew@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (54,46,1,'blackwell.a.troy@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (55,46,1,'ta.blackwell@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (56,123,1,'adams.allan@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (57,123,1,'adams.w.allan70@example.info',0,0,0,0,NULL,NULL,NULL,NULL), - (58,58,1,'grant.q.maria81@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (59,58,1,'mariag@testing.com',0,0,0,0,NULL,NULL,NULL,NULL), - (60,34,1,'dimitrovc@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (61,34,1,'claudiodimitrov9@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (62,180,1,'rolandoadams@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (63,180,1,'adamsr@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (64,88,1,'ed.robertson@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (65,4,1,'carylonz46@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (66,199,1,'jameson.elina@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (67,199,1,'ev.jameson20@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (68,163,1,'bryonparker@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (69,163,1,'bk.parker@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (70,134,1,'larees61@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (71,102,1,'barkley.kandace@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (72,102,1,'kbarkley@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (73,50,1,'mjones@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (74,50,1,'jones.mei63@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (75,79,1,'lincolnpatel51@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (76,79,1,'lincolnpatel31@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (77,154,1,'wattson.allen@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (78,16,1,'carylonb@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (79,16,1,'barkley.carylon@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (80,189,1,'mcreynolds.elizabeth45@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (81,10,1,'ashleyj@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (82,10,1,'ay.jameson@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (83,49,1,'jacobbarkley@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (84,49,1,'barkley.jacob@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (85,129,1,'ivanov.lashawnda@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (86,24,1,'jacobs.kacey21@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (87,24,1,'kaceyj45@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (88,145,1,'yadav.w.teresa@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (89,155,1,'brigettedaz@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (90,155,1,'daz.brigette@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), - (91,97,1,'bpatel@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), - (92,97,1,'patel.beula13@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (93,29,1,'patel.valene77@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (94,144,1,'jt.jacobs@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (95,144,1,'jacobs.t.jackson@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (96,115,1,'beulaa48@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (97,115,1,'adamsb@testing.info',0,0,0,0,NULL,NULL,NULL,NULL), - (98,181,1,'adams.l.toby@example.info',1,0,0,0,NULL,NULL,NULL,NULL), - (99,181,1,'adams.toby18@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (100,57,1,'mller.shad@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (101,73,1,'daz.ashley@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), - (102,143,1,'mller-dazs24@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (103,5,1,'amller-daz52@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (104,5,1,'amller-daz@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (105,51,1,'em.adams@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (106,51,1,'adamse@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL), - (107,100,1,'blackwell-adamsm75@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (108,31,1,'adams.jed@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (109,28,1,'adams.toby@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (110,28,1,'tadams90@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), - (111,138,1,'elbertsamuels85@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (112,185,1,'samuelsr@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (113,185,1,'rsamuels@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (114,166,1,'samuels.t.tanya26@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), - (115,137,1,'barkley.shad@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), - (116,137,1,'barkley.i.shad@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), - (117,125,1,'darenb@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (118,125,1,'darenbarkley-grant54@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (119,165,1,'swilson32@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), - (120,165,1,'shadw1@testmail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (121,109,1,'wilson.a.margaret@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (122,84,1,'delanaw@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (123,37,1,'smithl39@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (124,107,1,'smith.elizabeth@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (125,173,1,'terry.brigette76@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (126,173,1,'terry.brigette60@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (127,65,1,'sharynt45@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (128,65,1,'terrys@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (129,20,1,'billydaz@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (130,71,1,'dazh@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (131,42,1,'andrewd@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (132,132,1,'adams.carlos@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (133,66,1,'adamsb59@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (134,66,1,'bernadetteadams@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (135,169,1,'adams.jacob@example.info',1,0,0,0,NULL,NULL,NULL,NULL), - (136,169,1,'ju.adams@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL), - (137,26,1,'brigetteprentice33@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (138,26,1,'bprentice@lol.org',0,0,0,0,NULL,NULL,NULL,NULL), - (139,187,1,'daz.eleonor16@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (140,33,1,'kprentice-daz68@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (141,124,1,'jensenj@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (142,124,1,'jensen.jacob@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (143,152,1,'bd.bachman-jensen@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (144,148,1,'jensen.alexia26@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (145,148,1,'ah.jensen@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (146,44,1,'jinarobertson@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (147,44,1,'jrobertson@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (148,103,1,'mller-robertson.ray48@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (149,63,1,'samson.d.toby71@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (150,104,1,'lawerencew29@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (151,68,1,'en.blackwell@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (152,68,1,'en.blackwell@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (153,177,1,'russellwilson-blackwell54@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (154,146,1,'dwilson-blackwell@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (155,146,1,'wilson-blackwelld15@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (156,195,1,'zope.o.jed@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (157,120,1,'lzope44@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (158,192,1,'zope.russell7@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (159,192,1,'zoper@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (160,83,1,'jones-ivanovk@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (161,82,1,'beulai75@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (162,82,1,'bivanov@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (163,176,1,'ivanov.shad50@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (164,6,1,'olsen.ashley76@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (165,6,1,'olsen.a.ashley17@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (166,179,1,'olsen.princess@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (167,140,1,'mariao26@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (168,140,1,'olsen.j.maria@lol.info',0,0,0,0,NULL,NULL,NULL,NULL), - (169,86,1,'deforestm@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (170,200,1,'irisw87@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (171,200,1,'iwilson-deforest35@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (172,11,1,'deforest.m.allan@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (173,156,3,'feedback@kentuckyadvocacy.org',1,0,0,0,NULL,NULL,NULL,NULL), - (174,61,2,'norrisblackwell4@kentuckyadvocacy.org',1,0,0,0,NULL,NULL,NULL,NULL), - (175,74,3,'feedback@globalenvironmental.org',1,0,0,0,NULL,NULL,NULL,NULL), - (176,189,2,'mcreynolds.elizabeth52@globalenvironmental.org',0,0,0,0,NULL,NULL,NULL,NULL), - (177,160,3,'info@kirbydevelopment.org',1,0,0,0,NULL,NULL,NULL,NULL), - (178,159,2,'samson.andrew@kirbydevelopment.org',0,0,0,0,NULL,NULL,NULL,NULL), - (179,54,3,'service@unitedfood.org',1,0,0,0,NULL,NULL,NULL,NULL), - (180,29,2,'72@unitedfood.org',0,0,0,0,NULL,NULL,NULL,NULL), - (181,101,3,'feedback@secondaction.org',1,0,0,0,NULL,NULL,NULL,NULL), - (182,19,2,'nblackwell@secondaction.org',0,0,0,0,NULL,NULL,NULL,NULL), - (183,183,3,'contact@idahodevelopmentservices.org',1,0,0,0,NULL,NULL,NULL,NULL), - (184,106,2,'damarisgonzlez@idahodevelopmentservices.org',1,0,0,0,NULL,NULL,NULL,NULL), - (185,96,3,'service@globalfood.org',1,0,0,0,NULL,NULL,NULL,NULL), - (186,133,2,'deforestm@globalfood.org',0,0,0,0,NULL,NULL,NULL,NULL), - (187,194,3,'info@unitedmusicschool.org',1,0,0,0,NULL,NULL,NULL,NULL), - (188,66,2,'adams.bernadette@unitedmusicschool.org',0,0,0,0,NULL,NULL,NULL,NULL), - (189,131,3,'sales@dunnellonfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL), - (190,126,3,'sales@michiganschool.org',1,0,0,0,NULL,NULL,NULL,NULL), - (191,4,2,'carylonz43@michiganschool.org',0,0,0,0,NULL,NULL,NULL,NULL), - (192,139,3,'contact@montanaempowerment.org',1,0,0,0,NULL,NULL,NULL,NULL), - (193,112,2,'smith.truman85@montanaempowerment.org',1,0,0,0,NULL,NULL,NULL,NULL), - (194,127,3,'service@kentuckyactionnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), - (195,202,1,'jenny@example.com',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); + (2,176,1,'omarc@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (3,64,1,'wattson.s.elizabeth@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (4,64,1,'wattsone4@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (5,168,1,'teddywattson1@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (6,134,1,'claudioy75@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (7,134,1,'yadavc@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (8,174,1,'wagner.santina85@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (9,174,1,'santinaw@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (10,43,1,'olsent@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (11,14,1,'megandimitrov27@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (12,14,1,'mdimitrov79@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (13,195,1,'robertsb@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (14,195,1,'bernadetter@testmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (15,191,1,'patel.r.kathleen@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (16,191,1,'kathleenpatel43@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), + (17,28,1,'erroldaz88@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (18,97,1,'rolandoadams@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (19,77,1,'daz.juliann@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), + (20,77,1,'julianndaz@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (21,101,1,'merriej39@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (22,152,1,'icooper@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (23,61,1,'smith.bryon@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (24,132,1,'alexiasmith@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (25,184,1,'ce.jameson58@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (26,50,1,'mcreynolds.g.merrie@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (27,50,1,'mcreynolds.g.merrie@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (28,84,1,'parker.andrew@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (29,84,1,'af.parker@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (30,70,1,'ashleyd@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (31,70,1,'daz.ashley48@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (32,25,1,'valenes@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (33,25,1,'samuels.a.valene@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (34,137,1,'adams.erik@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (35,137,1,'erika@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (36,4,1,'allenp@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (37,4,1,'av.prentice@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (38,116,1,'shadolsen@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (39,108,1,'russelljameson7@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), + (40,130,1,'lincolnbarkley93@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (41,41,1,'ivanov.g.ashlie15@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (42,41,1,'ivanov.ashlie@infomail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (43,73,1,'mcruz@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (44,73,1,'maxwellcruz@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (45,164,1,'jones.y.princess92@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (46,91,1,'reynolds.troy@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (47,62,1,'delanat22@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (48,183,1,'barryzope@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (49,183,1,'zopeb@lol.com',0,0,0,0,NULL,NULL,NULL,NULL), + (50,187,1,'arlynei76@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (51,187,1,'ivanov.s.arlyne@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (52,118,1,'fu.parker@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (53,118,1,'parker.felisha@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (54,140,1,'jacobsj@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (55,140,1,'jacobs.c.jacob@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (56,58,1,'deforestk16@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (57,163,1,'clintp@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (58,6,1,'bettycooper61@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (59,119,1,'mllerj@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (60,119,1,'mllerj@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (61,120,1,'landonroberts@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (62,35,1,'damarisolsen@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (63,52,1,'bachman.v.erik80@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (64,52,1,'ev.bachman96@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (65,117,1,'gonzlez.angelika@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), + (66,17,1,'lc.gonzlez@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (67,198,1,'samuels.beula@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (68,198,1,'samuels.beula@example.info',0,0,0,0,NULL,NULL,NULL,NULL), + (69,169,1,'claudiow92@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (70,192,1,'smith.a.merrie80@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (71,71,1,'deforestm@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (72,71,1,'margaretdeforest98@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (73,19,1,'rodrigopatel@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (74,133,1,'billyr50@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (75,133,1,'billyr99@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (76,76,1,'fh.parker98@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (77,125,1,'gonzlezo52@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (78,56,1,'terrell.truman24@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (79,56,1,'trumanterrell@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (80,68,1,'deforest.truman10@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (81,8,1,'smith.lincoln@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (82,78,1,'mcreynolds.justina@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), + (83,78,1,'mcreynolds.justina8@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), + (84,135,1,'roberts.w.tanya@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (85,135,1,'robertst@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (86,161,1,'shermanjensen@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (87,151,1,'meij@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), + (88,151,1,'jensen.mei@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (89,179,1,'terry.maxwell@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (90,63,1,'brigetterobertson@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (91,105,1,'as.cooper15@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (92,154,1,'cooper.a.billy@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (93,154,1,'billycooper67@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), + (94,12,1,'margaretcooper@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (95,12,1,'cooper.margaret@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (96,194,1,'clintivanov60@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (97,79,1,'ey.ivanov@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (98,162,1,'ivanovp22@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (99,69,1,'nterrell@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (100,69,1,'terrelln45@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (101,170,1,'terrell.ashley@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (102,131,1,'jones.w.rodrigo@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (103,131,1,'jonesr@fishmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (104,59,1,'dcooper-jones@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (105,59,1,'dcooper-jones@notmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (106,89,1,'tobyp@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (107,89,1,'patel.w.toby@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (108,11,1,'patelk94@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (109,11,1,'patel.kathleen56@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (110,127,1,'valenep35@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (111,127,1,'vpatel28@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (112,190,1,'patel.junko@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), + (113,190,1,'junkopatel@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL), + (114,201,1,'zope.g.roland96@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (115,201,1,'zoper@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (116,178,1,'heiditerrell-zope95@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (117,2,1,'ti.zope@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (118,188,1,'zopeb84@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (119,188,1,'bernadettez63@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (120,26,1,'jeromep@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (121,26,1,'patel.jerome7@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (122,30,1,'patel.l.felisha@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (123,42,1,'patel.margaret@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (124,139,1,'samuelsc@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (125,139,1,'samuelsc61@sample.org',0,0,0,0,NULL,NULL,NULL,NULL), + (126,122,1,'samuelsb16@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (127,13,1,'samuels.eleonor@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (128,13,1,'et.samuels@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (129,99,1,'patelc59@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (130,45,1,'elinap@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (131,45,1,'patel-deforest.elina45@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (132,160,1,'patel-deforest.delana44@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (133,160,1,'delanap@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (134,181,1,'samsont88@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (135,111,1,'kathlynwilson-samson@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (136,111,1,'wilson-samsonk93@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (137,156,1,'samsonm@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (138,40,1,'omarterry@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (139,196,1,'cooper.brzczysaw@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), + (140,143,1,'cooper.rebekah@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (141,143,1,'cooperr58@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (142,60,1,'cooper.jina@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (143,21,1,'jl.patel@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (144,21,1,'jacobpatel@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), + (145,193,1,'mller-patel.juliann@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (146,86,1,'beulapatel@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (147,86,1,'patel.beula94@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (148,189,1,'sanfordzope@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), + (149,189,1,'zope.e.sanford@sample.info',0,0,0,0,NULL,NULL,NULL,NULL), + (150,157,1,'zope.r.kacey55@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (151,157,1,'kaceyz@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (152,142,1,'zope.rodrigo@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (153,142,1,'zope.rodrigo@sample.info',0,0,0,0,NULL,NULL,NULL,NULL), + (154,53,1,'zopeb@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (155,53,1,'zope.u.bob@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (156,136,1,'shaunablackwell92@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (157,148,1,'blackwell.sharyn@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (158,141,1,'blackwell.andrew@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), + (159,185,1,'mcreynolds.sonny64@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (160,129,1,'elinachowski@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (161,81,1,'mcreynolds-chowskil@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (162,81,1,'mcreynolds-chowski.lincoln45@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (163,55,1,'rcruz41@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (164,128,1,'cruza88@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (165,121,1,'rw.cruz@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (166,121,1,'rolandc@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (167,166,1,'dk.cruz@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (168,107,3,'feedback@michiganfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (169,42,2,'patelm@michiganfund.org',0,0,0,0,NULL,NULL,NULL,NULL), + (170,48,3,'feedback@illinoisschool.org',1,0,0,0,NULL,NULL,NULL,NULL), + (171,127,2,'vpatel72@illinoisschool.org',0,0,0,0,NULL,NULL,NULL,NULL), + (172,175,3,'service@dousmansolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), + (173,8,2,'smith.n.lincoln@dousmansolutions.org',0,0,0,0,NULL,NULL,NULL,NULL), + (174,74,3,'contact@cadellsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (175,166,2,'cruz.k.delana@cadellsystems.org',0,0,0,0,NULL,NULL,NULL,NULL), + (176,23,3,'contact@lincolninitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), + (177,124,2,'kandacet@lincolninitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), + (178,109,3,'info@coloradonetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (179,161,2,'shermanjensen@coloradonetwork.org',0,0,0,0,NULL,NULL,NULL,NULL), + (180,22,3,'contact@woodbridgeempowerment.org',1,0,0,0,NULL,NULL,NULL,NULL), + (181,52,2,'.59@woodbridgeempowerment.org',0,0,0,0,NULL,NULL,NULL,NULL), + (182,150,3,'contact@chillicothefamily.org',1,0,0,0,NULL,NULL,NULL,NULL), + (183,104,3,'contact@marylandcenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (184,51,2,'njones@marylandcenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (185,65,3,'contact@secondcenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (186,61,2,'.2@secondcenter.org',0,0,0,0,NULL,NULL,NULL,NULL), + (187,113,3,'contact@californiaenvironmentalnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (188,122,2,'brittneysamuels51@californiaenvironmentalnetwork.org',0,0,0,0,NULL,NULL,NULL,NULL), + (189,46,3,'info@californiafamilyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (190,138,2,'sharynp@californiafamilyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (191,202,1,'jenny@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (192,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (193,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (194,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -3260,161 +3254,161 @@ INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, (64,'civicrm_financial_item',32,32,100.00), (65,'civicrm_contribution',34,33,100.00), (66,'civicrm_financial_item',33,33,100.00), - (67,'civicrm_contribution',36,34,100.00), + (67,'civicrm_contribution',38,34,100.00), (68,'civicrm_financial_item',34,34,100.00), - (69,'civicrm_contribution',38,35,100.00), + (69,'civicrm_contribution',40,35,100.00), (70,'civicrm_financial_item',35,35,100.00), - (71,'civicrm_contribution',40,36,100.00), + (71,'civicrm_contribution',44,36,100.00), (72,'civicrm_financial_item',36,36,100.00), - (73,'civicrm_contribution',41,37,100.00), + (73,'civicrm_contribution',48,37,100.00), (74,'civicrm_financial_item',37,37,100.00), - (75,'civicrm_contribution',44,38,100.00), + (75,'civicrm_contribution',50,38,100.00), (76,'civicrm_financial_item',38,38,100.00), - (77,'civicrm_contribution',46,39,100.00), + (77,'civicrm_contribution',52,39,100.00), (78,'civicrm_financial_item',39,39,100.00), - (79,'civicrm_contribution',48,40,100.00), + (79,'civicrm_contribution',54,40,100.00), (80,'civicrm_financial_item',40,40,100.00), - (81,'civicrm_contribution',50,41,100.00), + (81,'civicrm_contribution',58,41,100.00), (82,'civicrm_financial_item',41,41,100.00), - (83,'civicrm_contribution',51,42,100.00), + (83,'civicrm_contribution',60,42,100.00), (84,'civicrm_financial_item',42,42,100.00), - (85,'civicrm_contribution',52,43,100.00), - (86,'civicrm_financial_item',43,43,100.00), - (87,'civicrm_contribution',54,44,100.00), - (88,'civicrm_financial_item',44,44,100.00), - (89,'civicrm_contribution',58,45,100.00), - (90,'civicrm_financial_item',45,45,100.00), - (91,'civicrm_contribution',60,46,100.00), - (92,'civicrm_financial_item',46,46,100.00), - (93,'civicrm_contribution',61,47,100.00), - (94,'civicrm_financial_item',47,47,100.00), - (95,'civicrm_contribution',33,48,50.00), + (85,'civicrm_contribution',33,43,50.00), + (86,'civicrm_financial_item',43,43,50.00), + (87,'civicrm_contribution',35,44,50.00), + (88,'civicrm_financial_item',44,44,50.00), + (89,'civicrm_contribution',36,45,50.00), + (90,'civicrm_financial_item',45,45,50.00), + (91,'civicrm_contribution',37,46,50.00), + (92,'civicrm_financial_item',46,46,50.00), + (93,'civicrm_contribution',39,47,50.00), + (94,'civicrm_financial_item',47,47,50.00), + (95,'civicrm_contribution',41,48,50.00), (96,'civicrm_financial_item',48,48,50.00), - (97,'civicrm_contribution',35,49,50.00), + (97,'civicrm_contribution',43,49,50.00), (98,'civicrm_financial_item',49,49,50.00), - (99,'civicrm_contribution',37,50,50.00), + (99,'civicrm_contribution',45,50,50.00), (100,'civicrm_financial_item',50,50,50.00), - (101,'civicrm_contribution',39,51,50.00), + (101,'civicrm_contribution',46,51,50.00), (102,'civicrm_financial_item',51,51,50.00), - (103,'civicrm_contribution',43,52,50.00), + (103,'civicrm_contribution',47,52,50.00), (104,'civicrm_financial_item',52,52,50.00), - (105,'civicrm_contribution',45,53,50.00), + (105,'civicrm_contribution',49,53,50.00), (106,'civicrm_financial_item',53,53,50.00), - (107,'civicrm_contribution',47,54,50.00), + (107,'civicrm_contribution',51,54,50.00), (108,'civicrm_financial_item',54,54,50.00), - (109,'civicrm_contribution',49,55,50.00), + (109,'civicrm_contribution',55,55,50.00), (110,'civicrm_financial_item',55,55,50.00), - (111,'civicrm_contribution',55,56,50.00), + (111,'civicrm_contribution',56,56,50.00), (112,'civicrm_financial_item',56,56,50.00), - (113,'civicrm_contribution',56,57,50.00), + (113,'civicrm_contribution',57,57,50.00), (114,'civicrm_financial_item',57,57,50.00), - (115,'civicrm_contribution',57,58,50.00), + (115,'civicrm_contribution',59,58,50.00), (116,'civicrm_financial_item',58,58,50.00), - (117,'civicrm_contribution',59,59,50.00), + (117,'civicrm_contribution',61,59,50.00), (118,'civicrm_financial_item',59,59,50.00), (119,'civicrm_contribution',42,60,1200.00), (120,'civicrm_financial_item',60,60,1200.00), (121,'civicrm_contribution',53,61,1200.00), (122,'civicrm_financial_item',61,61,1200.00), - (123,'civicrm_contribution',111,62,50.00), + (123,'civicrm_contribution',77,62,50.00), (124,'civicrm_financial_item',62,62,50.00), - (125,'civicrm_contribution',104,63,50.00), + (125,'civicrm_contribution',105,63,50.00), (126,'civicrm_financial_item',63,63,50.00), - (127,'civicrm_contribution',87,64,50.00), + (127,'civicrm_contribution',64,64,50.00), (128,'civicrm_financial_item',64,64,50.00), - (129,'civicrm_contribution',109,65,50.00), + (129,'civicrm_contribution',93,65,50.00), (130,'civicrm_financial_item',65,65,50.00), - (131,'civicrm_contribution',78,66,50.00), + (131,'civicrm_contribution',95,66,50.00), (132,'civicrm_financial_item',66,66,50.00), - (133,'civicrm_contribution',67,67,50.00), + (133,'civicrm_contribution',75,67,50.00), (134,'civicrm_financial_item',67,67,50.00), - (135,'civicrm_contribution',107,68,50.00), + (135,'civicrm_contribution',106,68,50.00), (136,'civicrm_financial_item',68,68,50.00), - (137,'civicrm_contribution',85,69,50.00), + (137,'civicrm_contribution',88,69,50.00), (138,'civicrm_financial_item',69,69,50.00), - (139,'civicrm_contribution',94,70,50.00), + (139,'civicrm_contribution',83,70,50.00), (140,'civicrm_financial_item',70,70,50.00), - (141,'civicrm_contribution',110,71,50.00), + (141,'civicrm_contribution',103,71,50.00), (142,'civicrm_financial_item',71,71,50.00), - (143,'civicrm_contribution',106,72,50.00), + (143,'civicrm_contribution',90,72,50.00), (144,'civicrm_financial_item',72,72,50.00), - (145,'civicrm_contribution',93,73,50.00), + (145,'civicrm_contribution',72,73,50.00), (146,'civicrm_financial_item',73,73,50.00), - (147,'civicrm_contribution',112,74,50.00), + (147,'civicrm_contribution',111,74,50.00), (148,'civicrm_financial_item',74,74,50.00), - (149,'civicrm_contribution',86,75,50.00), + (149,'civicrm_contribution',70,75,50.00), (150,'civicrm_financial_item',75,75,50.00), - (151,'civicrm_contribution',84,76,50.00), + (151,'civicrm_contribution',67,76,50.00), (152,'civicrm_financial_item',76,76,50.00), - (153,'civicrm_contribution',83,77,50.00), + (153,'civicrm_contribution',65,77,50.00), (154,'civicrm_financial_item',77,77,50.00), - (155,'civicrm_contribution',63,78,800.00), + (155,'civicrm_contribution',109,78,800.00), (156,'civicrm_financial_item',78,78,800.00), - (157,'civicrm_contribution',74,79,800.00), + (157,'civicrm_contribution',98,79,800.00), (158,'civicrm_financial_item',79,79,800.00), - (159,'civicrm_contribution',89,80,800.00), + (159,'civicrm_contribution',66,80,800.00), (160,'civicrm_financial_item',80,80,800.00), - (161,'civicrm_contribution',76,81,800.00), + (161,'civicrm_contribution',71,81,800.00), (162,'civicrm_financial_item',81,81,800.00), - (163,'civicrm_contribution',65,82,800.00), + (163,'civicrm_contribution',100,82,800.00), (164,'civicrm_financial_item',82,82,800.00), - (165,'civicrm_contribution',105,83,800.00), + (165,'civicrm_contribution',84,83,800.00), (166,'civicrm_financial_item',83,83,800.00), - (167,'civicrm_contribution',73,84,800.00), + (167,'civicrm_contribution',82,84,800.00), (168,'civicrm_financial_item',84,84,800.00), - (169,'civicrm_contribution',103,85,800.00), + (169,'civicrm_contribution',104,85,800.00), (170,'civicrm_financial_item',85,85,800.00), - (171,'civicrm_contribution',92,86,800.00), + (171,'civicrm_contribution',91,86,800.00), (172,'civicrm_financial_item',86,86,800.00), - (173,'civicrm_contribution',72,87,800.00), + (173,'civicrm_contribution',101,87,800.00), (174,'civicrm_financial_item',87,87,800.00), - (175,'civicrm_contribution',66,88,800.00), + (175,'civicrm_contribution',97,88,800.00), (176,'civicrm_financial_item',88,88,800.00), - (177,'civicrm_contribution',70,89,800.00), + (177,'civicrm_contribution',86,89,800.00), (178,'civicrm_financial_item',89,89,800.00), - (179,'civicrm_contribution',81,90,800.00), + (179,'civicrm_contribution',80,90,800.00), (180,'civicrm_financial_item',90,90,800.00), - (181,'civicrm_contribution',64,91,800.00), + (181,'civicrm_contribution',99,91,800.00), (182,'civicrm_financial_item',91,91,800.00), - (183,'civicrm_contribution',95,92,800.00), + (183,'civicrm_contribution',96,92,800.00), (184,'civicrm_financial_item',92,92,800.00), - (185,'civicrm_contribution',71,93,800.00), + (185,'civicrm_contribution',76,93,800.00), (186,'civicrm_financial_item',93,93,800.00), - (187,'civicrm_contribution',102,94,800.00), + (187,'civicrm_contribution',74,94,800.00), (188,'civicrm_financial_item',94,94,800.00), - (189,'civicrm_contribution',79,95,800.00), + (189,'civicrm_contribution',107,95,800.00), (190,'civicrm_financial_item',95,95,800.00), - (191,'civicrm_contribution',82,96,50.00), + (191,'civicrm_contribution',89,96,50.00), (192,'civicrm_financial_item',96,96,50.00), - (193,'civicrm_contribution',90,97,50.00), + (193,'civicrm_contribution',69,97,50.00), (194,'civicrm_financial_item',97,97,50.00), - (195,'civicrm_contribution',96,98,50.00), + (195,'civicrm_contribution',112,98,50.00), (196,'civicrm_financial_item',98,98,50.00), - (197,'civicrm_contribution',69,99,50.00), + (197,'civicrm_contribution',63,99,50.00), (198,'civicrm_financial_item',99,99,50.00), - (199,'civicrm_contribution',68,100,50.00), + (199,'civicrm_contribution',78,100,50.00), (200,'civicrm_financial_item',100,100,50.00), - (201,'civicrm_contribution',98,101,50.00), + (201,'civicrm_contribution',85,101,50.00), (202,'civicrm_financial_item',101,101,50.00), - (203,'civicrm_contribution',108,102,50.00), + (203,'civicrm_contribution',92,102,50.00), (204,'civicrm_financial_item',102,102,50.00), - (205,'civicrm_contribution',101,103,50.00), + (205,'civicrm_contribution',73,103,50.00), (206,'civicrm_financial_item',103,103,50.00), - (207,'civicrm_contribution',88,104,50.00), + (207,'civicrm_contribution',102,104,50.00), (208,'civicrm_financial_item',104,104,50.00), - (209,'civicrm_contribution',75,105,50.00), + (209,'civicrm_contribution',94,105,50.00), (210,'civicrm_financial_item',105,105,50.00), - (211,'civicrm_contribution',100,106,50.00), + (211,'civicrm_contribution',110,106,50.00), (212,'civicrm_financial_item',106,106,50.00), - (213,'civicrm_contribution',77,107,50.00), + (213,'civicrm_contribution',81,107,50.00), (214,'civicrm_financial_item',107,107,50.00), - (215,'civicrm_contribution',97,108,50.00), + (215,'civicrm_contribution',108,108,50.00), (216,'civicrm_financial_item',108,108,50.00), - (217,'civicrm_contribution',99,109,50.00), + (217,'civicrm_contribution',68,109,50.00), (218,'civicrm_financial_item',109,109,50.00), - (219,'civicrm_contribution',91,110,50.00), + (219,'civicrm_contribution',79,110,50.00), (220,'civicrm_financial_item',110,110,50.00), - (221,'civicrm_contribution',80,111,50.00), + (221,'civicrm_contribution',87,111,50.00), (222,'civicrm_financial_item',111,111,50.00); /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3426,122 +3420,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 - (78,'civicrm_contact',2,5), - (38,'civicrm_contact',3,4), - (39,'civicrm_contact',3,5), - (46,'civicrm_contact',4,5), - (112,'civicrm_contact',6,4), - (113,'civicrm_contact',6,5), - (96,'civicrm_contact',7,5), - (55,'civicrm_contact',10,4), - (116,'civicrm_contact',11,4), - (54,'civicrm_contact',16,5), - (45,'civicrm_contact',17,5), - (16,'civicrm_contact',19,4), - (83,'civicrm_contact',20,4), - (18,'civicrm_contact',22,4), - (90,'civicrm_contact',26,4), - (14,'civicrm_contact',27,4), - (15,'civicrm_contact',27,5), - (61,'civicrm_contact',29,5), - (26,'civicrm_contact',30,4), - (27,'civicrm_contact',30,5), - (70,'civicrm_contact',31,5), - (110,'civicrm_contact',35,5), - (48,'civicrm_contact',36,4), - (49,'civicrm_contact',36,5), + (87,'civicrm_contact',2,4), + (101,'civicrm_contact',3,4), + (102,'civicrm_contact',3,5), + (23,'civicrm_contact',5,5), + (26,'civicrm_contact',9,4), + (27,'civicrm_contact',9,5), + (16,'civicrm_contact',14,5), + (70,'civicrm_contact',16,4), + (51,'civicrm_contact',17,4), + (56,'civicrm_contact',19,5), + (105,'civicrm_contact',21,4), + (106,'civicrm_contact',21,5), + (39,'civicrm_contact',24,4), + (40,'civicrm_contact',24,5), + (28,'civicrm_contact',25,5), + (88,'civicrm_contact',26,5), + (89,'civicrm_contact',30,4), + (90,'civicrm_contact',30,5), + (46,'civicrm_contact',31,4), + (52,'civicrm_contact',33,4), + (53,'civicrm_contact',33,5), + (48,'civicrm_contact',35,4), + (75,'civicrm_contact',36,4), + (76,'civicrm_contact',36,5), (79,'civicrm_contact',37,5), - (30,'civicrm_contact',38,5), - (4,'civicrm_contact',40,1), - (84,'civicrm_contact',42,4), - (85,'civicrm_contact',42,5), - (41,'civicrm_contact',46,5), - (64,'civicrm_contact',47,4), - (5,'civicrm_contact',48,2), - (68,'civicrm_contact',51,4), - (69,'civicrm_contact',51,5), - (17,'civicrm_contact',53,5), - (65,'civicrm_contact',57,4), - (66,'civicrm_contact',57,5), - (42,'civicrm_contact',58,5), - (91,'civicrm_contact',60,4), - (92,'civicrm_contact',60,5), - (40,'civicrm_contact',62,4), - (100,'civicrm_contact',63,4), - (101,'civicrm_contact',63,5), - (36,'civicrm_contact',64,5), - (82,'civicrm_contact',65,4), - (88,'civicrm_contact',66,4), - (89,'civicrm_contact',66,5), - (102,'civicrm_contact',67,4), - (34,'civicrm_contact',70,5), - (35,'civicrm_contact',76,5), - (53,'civicrm_contact',79,5), - (111,'civicrm_contact',82,4), - (115,'civicrm_contact',86,4), - (37,'civicrm_contact',89,5), - (31,'civicrm_contact',90,4), - (32,'civicrm_contact',90,5), - (19,'civicrm_contact',93,4), - (20,'civicrm_contact',93,5), - (28,'civicrm_contact',94,4), - (6,'civicrm_contact',96,2), - (99,'civicrm_contact',98,4), - (9,'civicrm_contact',99,3), - (3,'civicrm_contact',101,2), - (51,'civicrm_contact',102,4), - (52,'civicrm_contact',102,5), - (103,'civicrm_contact',104,5), - (97,'civicrm_contact',105,4), - (98,'civicrm_contact',105,5), - (58,'civicrm_contact',110,4), - (11,'civicrm_contact',114,4), - (12,'civicrm_contact',114,5), - (114,'civicrm_contact',119,5), - (60,'civicrm_contact',122,5), - (93,'civicrm_contact',124,5), - (75,'civicrm_contact',125,4), - (10,'civicrm_contact',127,2), - (56,'civicrm_contact',129,4), - (57,'civicrm_contact',129,5), - (7,'civicrm_contact',131,3), - (86,'civicrm_contact',132,4), - (87,'civicrm_contact',132,5), - (24,'civicrm_contact',136,4), - (74,'civicrm_contact',137,5), - (71,'civicrm_contact',138,4), - (72,'civicrm_contact',138,5), - (67,'civicrm_contact',143,4), - (62,'civicrm_contact',144,4), - (63,'civicrm_contact',144,5), - (59,'civicrm_contact',145,4), - (94,'civicrm_contact',148,5), - (47,'civicrm_contact',149,5), - (33,'civicrm_contact',151,4), - (1,'civicrm_contact',156,2), - (95,'civicrm_contact',158,4), - (2,'civicrm_contact',160,2), - (76,'civicrm_contact',165,4), - (77,'civicrm_contact',165,5), - (8,'civicrm_contact',168,1), - (108,'civicrm_contact',171,4), - (109,'civicrm_contact',171,5), - (21,'civicrm_contact',172,5), - (81,'civicrm_contact',173,4), - (80,'civicrm_contact',175,5), - (104,'civicrm_contact',177,4), - (105,'civicrm_contact',177,5), - (43,'civicrm_contact',180,4), - (44,'civicrm_contact',180,5), - (13,'civicrm_contact',182,5), - (73,'civicrm_contact',185,5), - (29,'civicrm_contact',193,5), - (106,'civicrm_contact',195,4), - (107,'civicrm_contact',195,5), - (25,'civicrm_contact',196,5), - (50,'civicrm_contact',197,5), - (22,'civicrm_contact',198,4), - (23,'civicrm_contact',198,5); + (8,'civicrm_contact',38,3), + (100,'civicrm_contact',40,5), + (44,'civicrm_contact',44,5), + (95,'civicrm_contact',45,4), + (96,'civicrm_contact',45,5), + (59,'civicrm_contact',51,4), + (60,'civicrm_contact',51,5), + (10,'civicrm_contact',54,3), + (116,'civicrm_contact',55,5), + (43,'civicrm_contact',58,4), + (9,'civicrm_contact',65,1), + (61,'civicrm_contact',68,4), + (77,'civicrm_contact',69,4), + (78,'civicrm_contact',69,5), + (35,'civicrm_contact',73,4), + (4,'civicrm_contact',74,2), + (62,'civicrm_contact',78,4), + (63,'civicrm_contact',78,5), + (6,'civicrm_contact',80,1), + (115,'civicrm_contact',82,4), + (57,'civicrm_contact',88,5), + (83,'civicrm_contact',89,5), + (29,'civicrm_contact',90,4), + (30,'civicrm_contact',90,5), + (38,'civicrm_contact',91,4), + (45,'civicrm_contact',95,5), + (20,'civicrm_contact',97,4), + (25,'civicrm_contact',98,5), + (93,'civicrm_contact',99,4), + (94,'civicrm_contact',99,5), + (98,'civicrm_contact',102,4), + (99,'civicrm_contact',102,5), + (71,'civicrm_contact',105,4), + (72,'civicrm_contact',105,5), + (1,'civicrm_contact',107,2), + (32,'civicrm_contact',108,4), + (33,'civicrm_contact',108,5), + (5,'civicrm_contact',109,1), + (21,'civicrm_contact',110,4), + (2,'civicrm_contact',115,2), + (31,'civicrm_contact',116,4), + (49,'civicrm_contact',117,4), + (50,'civicrm_contact',117,5), + (47,'civicrm_contact',119,4), + (117,'civicrm_contact',121,4), + (92,'civicrm_contact',122,5), + (58,'civicrm_contact',125,5), + (84,'civicrm_contact',127,5), + (34,'civicrm_contact',130,4), + (80,'civicrm_contact',131,5), + (112,'civicrm_contact',136,4), + (36,'civicrm_contact',138,4), + (37,'civicrm_contact',138,5), + (91,'civicrm_contact',139,4), + (42,'civicrm_contact',140,4), + (111,'civicrm_contact',142,5), + (104,'civicrm_contact',145,4), + (113,'civicrm_contact',148,4), + (65,'civicrm_contact',151,4), + (22,'civicrm_contact',152,4), + (73,'civicrm_contact',154,5), + (68,'civicrm_contact',159,4), + (69,'civicrm_contact',159,5), + (64,'civicrm_contact',161,4), + (12,'civicrm_contact',168,4), + (13,'civicrm_contact',168,5), + (107,'civicrm_contact',171,4), + (108,'civicrm_contact',171,5), + (67,'civicrm_contact',172,5), + (14,'civicrm_contact',174,4), + (15,'civicrm_contact',174,5), + (3,'civicrm_contact',175,1), + (11,'civicrm_contact',176,5), + (66,'civicrm_contact',179,5), + (7,'civicrm_contact',180,2), + (97,'civicrm_contact',181,4), + (24,'civicrm_contact',184,4), + (114,'civicrm_contact',185,4), + (81,'civicrm_contact',186,4), + (82,'civicrm_contact',186,5), + (41,'civicrm_contact',187,4), + (109,'civicrm_contact',189,4), + (110,'civicrm_contact',189,5), + (19,'civicrm_contact',191,5), + (54,'civicrm_contact',192,4), + (55,'civicrm_contact',192,5), + (74,'civicrm_contact',194,5), + (17,'civicrm_contact',195,4), + (18,'civicrm_contact',195,5), + (103,'civicrm_contact',196,5), + (85,'civicrm_contact',201,4), + (86,'civicrm_contact',201,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -3552,9 +3547,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-12-28 17:00:00','2022-12-30 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,0,0,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,'2022-06-27 12:00:00','2022-06-27 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,0,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,0,0,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,'2023-01-28 07:00:00','2023-01-31 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,0,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,0,0,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-12-22 17:00:00','2022-12-24 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,0,0,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,'2022-06-21 12:00:00','2022-06-21 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,0,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,0,0,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,'2023-01-22 07:00:00','2023-01-25 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,0,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,0,0,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,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,0,0,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,0,0,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,0,0,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); @@ -3638,117 +3633,117 @@ 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,'2022-06-28 04:20:39','2012-06-28 04:20:38',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), - (2,'2022-06-28 04:20:39','2020-03-28 04:20:38',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), - (3,'2022-06-28 04:20:39','2016-06-02 15:20:38',6,'Contribution Amount',25.00,'GBP',1,1,'civicrm_line_item',3), - (4,'2022-06-28 04:20:39','2020-03-28 04:20:38',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), - (5,'2022-06-28 04:20:39','2020-03-28 04:20:38',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',5), - (6,'2022-06-28 04:20:39','2022-04-04 03:38:38',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',6), - (7,'2022-06-28 04:20:39','2022-06-26 04:20:38',19,'Contribution Amount',1750.00,'USD',1,1,'civicrm_line_item',7), - (8,'2022-06-28 04:20:39','2021-11-03 12:31:38',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',8), - (9,'2022-06-28 04:20:39','2021-07-28 04:20:38',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',9), - (10,'2022-06-28 04:20:39','2018-02-05 06:20:38',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',10), - (11,'2022-06-28 04:20:39','2022-06-27 00:20:38',71,'Contribution Amount',500.00,'JPY',1,1,'civicrm_line_item',11), - (12,'2022-06-28 04:20:39','2021-03-27 17:47:19',43,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',12), - (13,'2022-06-28 04:20:39','2022-03-28 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',13), - (14,'2022-06-28 04:20:39','2022-04-28 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',14), - (15,'2022-06-28 04:20:39','2021-03-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',15), - (16,'2022-06-28 04:20:39','2021-04-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',16), - (17,'2022-06-28 04:20:39','2021-05-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',17), - (18,'2022-06-28 04:20:39','2021-06-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',18), - (19,'2022-06-28 04:20:39','2021-07-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',19), - (20,'2022-06-28 04:20:39','2021-08-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',20), - (21,'2022-06-28 04:20:40','2021-09-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',21), - (22,'2022-06-28 04:20:40','2021-10-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',22), - (23,'2022-06-28 04:20:40','2021-11-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',23), - (24,'2022-06-28 04:20:40','2021-12-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',24), - (25,'2022-06-28 04:20:40','2022-01-28 04:20:38',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',25), - (26,'2022-06-28 04:20:40','2021-10-28 04:20:38',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',26), - (27,'2022-06-28 04:20:40','2021-11-28 04:20:38',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',27), - (28,'2022-06-28 04:20:40','2021-12-28 04:20:38',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',28), - (29,'2022-06-28 04:20:40','2022-01-28 04:20:38',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',29), - (30,'2022-06-28 04:20:40','2022-02-28 04:20:38',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',30), - (31,'2022-06-28 04:20:40','2022-05-28 04:20:38',103,'Contribution Amount',5.00,'EUR',1,1,'civicrm_line_item',31), - (32,'2022-06-28 04:20:40','2022-06-28 04:20:39',13,'General',100.00,'USD',2,1,'civicrm_line_item',32), - (33,'2022-06-28 04:20:40','2022-06-28 04:20:39',39,'General',100.00,'USD',2,1,'civicrm_line_item',33), - (34,'2022-06-28 04:20:40','2022-06-28 04:20:39',6,'General',100.00,'USD',2,1,'civicrm_line_item',34), - (35,'2022-06-28 04:20:40','2022-06-28 04:20:39',69,'General',100.00,'USD',2,1,'civicrm_line_item',35), - (36,'2022-06-28 04:20:40','2022-06-28 04:20:39',5,'General',100.00,'USD',2,1,'civicrm_line_item',36), - (37,'2022-06-28 04:20:40','2022-06-28 04:20:39',151,'General',100.00,'USD',2,1,'civicrm_line_item',37), - (38,'2022-06-28 04:20:40','2022-06-28 04:20:39',88,'General',100.00,'USD',2,1,'civicrm_line_item',38), - (39,'2022-06-28 04:20:40','2022-06-28 04:20:39',166,'General',100.00,'USD',2,1,'civicrm_line_item',39), - (40,'2022-06-28 04:20:40','2022-06-28 04:20:39',133,'General',100.00,'USD',2,1,'civicrm_line_item',40), - (41,'2022-06-28 04:20:40','2022-06-28 04:20:39',196,'General',100.00,'USD',2,1,'civicrm_line_item',41), - (42,'2022-06-28 04:20:40','2022-06-28 04:20:39',186,'General',100.00,'USD',2,1,'civicrm_line_item',42), - (43,'2022-06-28 04:20:40','2022-06-28 04:20:39',187,'General',100.00,'USD',2,1,'civicrm_line_item',43), - (44,'2022-06-28 04:20:40','2022-06-28 04:20:39',47,'General',100.00,'USD',2,1,'civicrm_line_item',44), - (45,'2022-06-28 04:20:40','2022-06-28 04:20:39',184,'General',100.00,'USD',2,1,'civicrm_line_item',45), - (46,'2022-06-28 04:20:40','2022-06-28 04:20:39',70,'General',100.00,'USD',2,1,'civicrm_line_item',46), - (47,'2022-06-28 04:20:40','2022-06-28 04:20:39',148,'General',100.00,'USD',2,1,'civicrm_line_item',47), - (48,'2022-06-28 04:20:40','2022-06-28 04:20:39',121,'Student',50.00,'USD',2,1,'civicrm_line_item',48), - (49,'2022-06-28 04:20:40','2022-06-28 04:20:39',50,'Student',50.00,'USD',2,1,'civicrm_line_item',49), - (50,'2022-06-28 04:20:40','2022-06-28 04:20:39',94,'Student',50.00,'USD',2,1,'civicrm_line_item',50), - (51,'2022-06-28 04:20:40','2022-06-28 04:20:39',199,'Student',50.00,'USD',2,1,'civicrm_line_item',51), - (52,'2022-06-28 04:20:40','2022-06-28 04:20:39',106,'Student',50.00,'USD',2,1,'civicrm_line_item',52), - (53,'2022-06-28 04:20:40','2022-06-28 04:20:39',125,'Student',50.00,'USD',2,1,'civicrm_line_item',53), - (54,'2022-06-28 04:20:40','2022-06-28 04:20:39',161,'Student',50.00,'USD',2,1,'civicrm_line_item',54), - (55,'2022-06-28 04:20:40','2022-06-28 04:20:39',159,'Student',50.00,'USD',2,1,'civicrm_line_item',55), - (56,'2022-06-28 04:20:40','2022-06-28 04:20:39',97,'Student',50.00,'USD',2,1,'civicrm_line_item',56), - (57,'2022-06-28 04:20:40','2022-06-28 04:20:39',22,'Student',50.00,'USD',2,1,'civicrm_line_item',57), - (58,'2022-06-28 04:20:40','2022-06-28 04:20:39',198,'Student',50.00,'USD',2,1,'civicrm_line_item',58), - (59,'2022-06-28 04:20:40','2022-06-28 04:20:39',181,'Student',50.00,'USD',2,1,'civicrm_line_item',59), - (60,'2022-06-28 04:20:40','2022-06-28 04:20:39',65,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',60), - (61,'2022-06-28 04:20:40','2022-06-28 04:20:39',180,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',61), - (62,'2022-06-28 04:20:40','2022-06-28 04:20:39',194,'Soprano',50.00,'USD',2,1,'civicrm_line_item',97), - (63,'2022-06-28 04:20:40','2022-06-28 04:20:39',181,'Soprano',50.00,'USD',2,1,'civicrm_line_item',98), - (64,'2022-06-28 04:20:40','2022-06-28 04:20:39',106,'Soprano',50.00,'USD',2,1,'civicrm_line_item',99), - (65,'2022-06-28 04:20:40','2022-06-28 04:20:39',192,'Soprano',50.00,'USD',2,1,'civicrm_line_item',100), - (66,'2022-06-28 04:20:40','2022-06-28 04:20:39',60,'Soprano',50.00,'USD',2,1,'civicrm_line_item',101), - (67,'2022-06-28 04:20:40','2022-06-28 04:20:39',15,'Soprano',50.00,'USD',2,1,'civicrm_line_item',102), - (68,'2022-06-28 04:20:40','2022-06-28 04:20:39',185,'Soprano',50.00,'USD',2,1,'civicrm_line_item',103), - (69,'2022-06-28 04:20:40','2022-06-28 04:20:39',100,'Soprano',50.00,'USD',2,1,'civicrm_line_item',104), - (70,'2022-06-28 04:20:40','2022-06-28 04:20:39',130,'Soprano',50.00,'USD',2,1,'civicrm_line_item',105), - (71,'2022-06-28 04:20:40','2022-06-28 04:20:39',193,'Soprano',50.00,'USD',2,1,'civicrm_line_item',106), - (72,'2022-06-28 04:20:40','2022-06-28 04:20:39',183,'Soprano',50.00,'USD',2,1,'civicrm_line_item',107), - (73,'2022-06-28 04:20:40','2022-06-28 04:20:39',128,'Soprano',50.00,'USD',2,1,'civicrm_line_item',108), - (74,'2022-06-28 04:20:40','2022-06-28 04:20:39',200,'Soprano',50.00,'USD',2,1,'civicrm_line_item',109), - (75,'2022-06-28 04:20:41','2022-06-28 04:20:39',104,'Soprano',50.00,'USD',2,1,'civicrm_line_item',110), - (76,'2022-06-28 04:20:41','2022-06-28 04:20:39',94,'Soprano',50.00,'USD',2,1,'civicrm_line_item',111), - (77,'2022-06-28 04:20:41','2022-06-28 04:20:39',93,'Soprano',50.00,'USD',2,1,'civicrm_line_item',112), - (78,'2022-06-28 04:20:41','2022-06-28 04:20:39',3,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), - (79,'2022-06-28 04:20:41','2022-06-28 04:20:39',53,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), - (80,'2022-06-28 04:20:41','2022-06-28 04:20:39',112,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',65), - (81,'2022-06-28 04:20:41','2022-06-28 04:20:39',55,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',66), - (82,'2022-06-28 04:20:41','2022-06-28 04:20:39',10,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',67), - (83,'2022-06-28 04:20:41','2022-06-28 04:20:39',182,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',68), - (84,'2022-06-28 04:20:41','2022-06-28 04:20:39',50,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',69), - (85,'2022-06-28 04:20:41','2022-06-28 04:20:39',179,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',70), - (86,'2022-06-28 04:20:41','2022-06-28 04:20:39',125,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',71), - (87,'2022-06-28 04:20:41','2022-06-28 04:20:39',46,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',72), - (88,'2022-06-28 04:20:41','2022-06-28 04:20:39',13,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',73), - (89,'2022-06-28 04:20:41','2022-06-28 04:20:39',38,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',74), - (90,'2022-06-28 04:20:41','2022-06-28 04:20:39',78,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',75), - (91,'2022-06-28 04:20:41','2022-06-28 04:20:39',7,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',76), - (92,'2022-06-28 04:20:41','2022-06-28 04:20:39',148,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',77), - (93,'2022-06-28 04:20:41','2022-06-28 04:20:39',45,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',78), - (94,'2022-06-28 04:20:41','2022-06-28 04:20:39',172,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',79), - (95,'2022-06-28 04:20:41','2022-06-28 04:20:39',64,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',80), - (96,'2022-06-28 04:20:41','2022-06-28 04:20:39',91,'Single',50.00,'USD',4,1,'civicrm_line_item',81), - (97,'2022-06-28 04:20:41','2022-06-28 04:20:39',116,'Single',50.00,'USD',4,1,'civicrm_line_item',82), - (98,'2022-06-28 04:20:41','2022-06-28 04:20:39',153,'Single',50.00,'USD',4,1,'civicrm_line_item',83), - (99,'2022-06-28 04:20:41','2022-06-28 04:20:39',35,'Single',50.00,'USD',4,1,'civicrm_line_item',84), - (100,'2022-06-28 04:20:41','2022-06-28 04:20:39',19,'Single',50.00,'USD',4,1,'civicrm_line_item',85), - (101,'2022-06-28 04:20:41','2022-06-28 04:20:39',159,'Single',50.00,'USD',4,1,'civicrm_line_item',86), - (102,'2022-06-28 04:20:41','2022-06-28 04:20:39',187,'Single',50.00,'USD',4,1,'civicrm_line_item',87), - (103,'2022-06-28 04:20:41','2022-06-28 04:20:39',171,'Single',50.00,'USD',4,1,'civicrm_line_item',88), - (104,'2022-06-28 04:20:41','2022-06-28 04:20:39',111,'Single',50.00,'USD',4,1,'civicrm_line_item',89), - (105,'2022-06-28 04:20:41','2022-06-28 04:20:39',54,'Single',50.00,'USD',4,1,'civicrm_line_item',90), - (106,'2022-06-28 04:20:41','2022-06-28 04:20:39',168,'Single',50.00,'USD',4,1,'civicrm_line_item',91), - (107,'2022-06-28 04:20:41','2022-06-28 04:20:39',57,'Single',50.00,'USD',4,1,'civicrm_line_item',92), - (108,'2022-06-28 04:20:41','2022-06-28 04:20:39',157,'Single',50.00,'USD',4,1,'civicrm_line_item',93), - (109,'2022-06-28 04:20:41','2022-06-28 04:20:39',167,'Single',50.00,'USD',4,1,'civicrm_line_item',94), - (110,'2022-06-28 04:20:41','2022-06-28 04:20:39',117,'Single',50.00,'USD',4,1,'civicrm_line_item',95), - (111,'2022-06-28 04:20:41','2022-06-28 04:20:39',71,'Single',50.00,'USD',4,1,'civicrm_line_item',96); + (1,'2022-06-22 13:51:54','2012-06-22 09:51:54',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), + (2,'2022-06-22 13:51:54','2020-03-22 09:51:54',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), + (3,'2022-06-22 13:51:54','2016-05-27 20:51:54',6,'Contribution Amount',25.00,'GBP',1,1,'civicrm_line_item',3), + (4,'2022-06-22 13:51:55','2020-03-22 09:51:54',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), + (5,'2022-06-22 13:51:55','2020-03-22 09:51:54',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',5), + (6,'2022-06-22 13:51:55','2022-03-29 09:09:54',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',6), + (7,'2022-06-22 13:51:55','2022-06-20 09:51:54',19,'Contribution Amount',1750.00,'USD',1,1,'civicrm_line_item',7), + (8,'2022-06-22 13:51:55','2021-10-28 18:02:54',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',8), + (9,'2022-06-22 13:51:55','2021-07-22 09:51:54',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',9), + (10,'2022-06-22 13:51:55','2018-01-30 11:51:54',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',10), + (11,'2022-06-22 13:51:55','2022-06-21 05:51:54',71,'Contribution Amount',500.00,'JPY',1,1,'civicrm_line_item',11), + (12,'2022-06-22 13:51:55','2021-03-21 23:18:34',43,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',12), + (13,'2022-06-22 13:51:55','2022-03-22 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',13), + (14,'2022-06-22 13:51:55','2022-04-22 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',14), + (15,'2022-06-22 13:51:55','2021-03-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',15), + (16,'2022-06-22 13:51:55','2021-04-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',16), + (17,'2022-06-22 13:51:55','2021-05-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',17), + (18,'2022-06-22 13:51:55','2021-06-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',18), + (19,'2022-06-22 13:51:55','2021-07-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',19), + (20,'2022-06-22 13:51:55','2021-08-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',20), + (21,'2022-06-22 13:51:55','2021-09-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',21), + (22,'2022-06-22 13:51:55','2021-10-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',22), + (23,'2022-06-22 13:51:55','2021-11-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',23), + (24,'2022-06-22 13:51:55','2021-12-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',24), + (25,'2022-06-22 13:51:55','2022-01-22 09:51:54',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',25), + (26,'2022-06-22 13:51:55','2021-10-22 09:51:54',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',26), + (27,'2022-06-22 13:51:55','2021-11-22 09:51:54',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',27), + (28,'2022-06-22 13:51:55','2021-12-22 09:51:54',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',28), + (29,'2022-06-22 13:51:55','2022-01-22 09:51:54',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',29), + (30,'2022-06-22 13:51:55','2022-02-22 09:51:54',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',30), + (31,'2022-06-22 13:51:55','2022-05-22 09:51:54',103,'Contribution Amount',5.00,'EUR',1,1,'civicrm_line_item',31), + (32,'2022-06-22 13:51:55','2022-06-22 09:51:54',131,'General',100.00,'USD',2,1,'civicrm_line_item',32), + (33,'2022-06-22 13:51:55','2022-06-22 09:51:54',101,'General',100.00,'USD',2,1,'civicrm_line_item',33), + (34,'2022-06-22 13:51:55','2022-06-22 09:51:54',8,'General',100.00,'USD',2,1,'civicrm_line_item',34), + (35,'2022-06-22 13:51:55','2022-06-22 09:51:54',164,'General',100.00,'USD',2,1,'civicrm_line_item',35), + (36,'2022-06-22 13:51:55','2022-06-22 09:51:54',63,'General',100.00,'USD',2,1,'civicrm_line_item',36), + (37,'2022-06-22 13:51:55','2022-06-22 09:51:54',123,'General',100.00,'USD',2,1,'civicrm_line_item',37), + (38,'2022-06-22 13:51:55','2022-06-22 09:51:54',21,'General',100.00,'USD',2,1,'civicrm_line_item',38), + (39,'2022-06-22 13:51:55','2022-06-22 09:51:54',96,'General',100.00,'USD',2,1,'civicrm_line_item',39), + (40,'2022-06-22 13:51:55','2022-06-22 09:51:54',154,'General',100.00,'USD',2,1,'civicrm_line_item',40), + (41,'2022-06-22 13:51:55','2022-06-22 09:51:54',18,'General',100.00,'USD',2,1,'civicrm_line_item',41), + (42,'2022-06-22 13:51:55','2022-06-22 09:51:54',155,'General',100.00,'USD',2,1,'civicrm_line_item',42), + (43,'2022-06-22 13:51:55','2022-06-22 09:51:54',71,'Student',50.00,'USD',2,1,'civicrm_line_item',43), + (44,'2022-06-22 13:51:55','2022-06-22 09:51:54',192,'Student',50.00,'USD',2,1,'civicrm_line_item',44), + (45,'2022-06-22 13:51:55','2022-06-22 09:51:54',134,'Student',50.00,'USD',2,1,'civicrm_line_item',45), + (46,'2022-06-22 13:51:55','2022-06-22 09:51:54',2,'Student',50.00,'USD',2,1,'civicrm_line_item',46), + (47,'2022-06-22 13:51:55','2022-06-22 09:51:54',168,'Student',50.00,'USD',2,1,'civicrm_line_item',47), + (48,'2022-06-22 13:51:55','2022-06-22 09:51:54',81,'Student',50.00,'USD',2,1,'civicrm_line_item',48), + (49,'2022-06-22 13:51:55','2022-06-22 09:51:54',45,'Student',50.00,'USD',2,1,'civicrm_line_item',49), + (50,'2022-06-22 13:51:55','2022-06-22 09:51:54',5,'Student',50.00,'USD',2,1,'civicrm_line_item',50), + (51,'2022-06-22 13:51:55','2022-06-22 09:51:54',73,'Student',50.00,'USD',2,1,'civicrm_line_item',51), + (52,'2022-06-22 13:51:55','2022-06-22 09:51:54',19,'Student',50.00,'USD',2,1,'civicrm_line_item',52), + (53,'2022-06-22 13:51:55','2022-06-22 09:51:54',136,'Student',50.00,'USD',2,1,'civicrm_line_item',53), + (54,'2022-06-22 13:51:55','2022-06-22 09:51:54',197,'Student',50.00,'USD',2,1,'civicrm_line_item',54), + (55,'2022-06-22 13:51:55','2022-06-22 09:51:54',59,'Student',50.00,'USD',2,1,'civicrm_line_item',55), + (56,'2022-06-22 13:51:55','2022-06-22 09:51:54',20,'Student',50.00,'USD',2,1,'civicrm_line_item',56), + (57,'2022-06-22 13:51:55','2022-06-22 09:51:54',201,'Student',50.00,'USD',2,1,'civicrm_line_item',57), + (58,'2022-06-22 13:51:55','2022-06-22 09:51:54',133,'Student',50.00,'USD',2,1,'civicrm_line_item',58), + (59,'2022-06-22 13:51:55','2022-06-22 09:51:54',33,'Student',50.00,'USD',2,1,'civicrm_line_item',59), + (60,'2022-06-22 13:51:55','2022-06-22 09:51:54',137,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',60), + (61,'2022-06-22 13:51:55','2022-06-22 09:51:54',171,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',61), + (62,'2022-06-22 13:51:55','2022-06-22 09:51:54',58,'Soprano',50.00,'USD',2,1,'civicrm_line_item',97), + (63,'2022-06-22 13:51:55','2022-06-22 09:51:54',166,'Soprano',50.00,'USD',2,1,'civicrm_line_item',98), + (64,'2022-06-22 13:51:55','2022-06-22 09:51:54',2,'Soprano',50.00,'USD',2,1,'civicrm_line_item',99), + (65,'2022-06-22 13:51:55','2022-06-22 09:51:54',128,'Soprano',50.00,'USD',2,1,'civicrm_line_item',100), + (66,'2022-06-22 13:51:55','2022-06-22 09:51:54',130,'Soprano',50.00,'USD',2,1,'civicrm_line_item',101), + (67,'2022-06-22 13:51:55','2022-06-22 09:51:54',38,'Soprano',50.00,'USD',2,1,'civicrm_line_item',102), + (68,'2022-06-22 13:51:55','2022-06-22 09:51:54',168,'Soprano',50.00,'USD',2,1,'civicrm_line_item',103), + (69,'2022-06-22 13:51:55','2022-06-22 09:51:54',111,'Soprano',50.00,'USD',2,1,'civicrm_line_item',104), + (70,'2022-06-22 13:51:55','2022-06-22 09:51:54',80,'Soprano',50.00,'USD',2,1,'civicrm_line_item',105), + (71,'2022-06-22 13:51:55','2022-06-22 09:51:54',151,'Soprano',50.00,'USD',2,1,'civicrm_line_item',106), + (72,'2022-06-22 13:51:55','2022-06-22 09:51:54',121,'Soprano',50.00,'USD',2,1,'civicrm_line_item',107), + (73,'2022-06-22 13:51:55','2022-06-22 09:51:54',19,'Soprano',50.00,'USD',2,1,'civicrm_line_item',108), + (74,'2022-06-22 13:51:55','2022-06-22 09:51:54',199,'Soprano',50.00,'USD',2,1,'civicrm_line_item',109), + (75,'2022-06-22 13:51:55','2022-06-22 09:51:54',15,'Soprano',50.00,'USD',2,1,'civicrm_line_item',110), + (76,'2022-06-22 13:51:55','2022-06-22 09:51:54',7,'Soprano',50.00,'USD',2,1,'civicrm_line_item',111), + (77,'2022-06-22 13:51:55','2022-06-22 09:51:54',4,'Soprano',50.00,'USD',2,1,'civicrm_line_item',112), + (78,'2022-06-22 13:51:55','2022-06-22 09:51:54',189,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), + (79,'2022-06-22 13:51:55','2022-06-22 09:51:54',134,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), + (80,'2022-06-22 13:51:55','2022-06-22 09:51:54',6,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',65), + (81,'2022-06-22 13:51:55','2022-06-22 09:51:54',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',66), + (82,'2022-06-22 13:51:55','2022-06-22 09:51:54',146,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',67), + (83,'2022-06-22 13:51:55','2022-06-22 09:51:54',87,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',68), + (84,'2022-06-22 13:51:55','2022-06-22 09:51:54',78,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',69), + (85,'2022-06-22 13:51:55','2022-06-22 09:51:54',158,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',70), + (86,'2022-06-22 13:51:55','2022-06-22 09:51:54',126,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',71), + (87,'2022-06-22 13:51:55','2022-06-22 09:51:54',148,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',72), + (88,'2022-06-22 13:51:55','2022-06-22 09:51:54',132,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',73), + (89,'2022-06-22 13:51:55','2022-06-22 09:51:54',102,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',74), + (90,'2022-06-22 13:51:55','2022-06-22 09:51:54',70,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',75), + (91,'2022-06-22 13:51:55','2022-06-22 09:51:54',140,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',76), + (92,'2022-06-22 13:51:55','2022-06-22 09:51:54',131,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',77), + (93,'2022-06-22 13:51:55','2022-06-22 09:51:54',56,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',78), + (94,'2022-06-22 13:51:55','2022-06-22 09:51:54',35,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',79), + (95,'2022-06-22 13:51:55','2022-06-22 09:51:54',174,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',80), + (96,'2022-06-22 13:51:55','2022-06-22 09:51:54',114,'Single',50.00,'USD',4,1,'civicrm_line_item',81), + (97,'2022-06-22 13:51:55','2022-06-22 09:51:54',14,'Single',50.00,'USD',4,1,'civicrm_line_item',82), + (98,'2022-06-22 13:51:55','2022-06-22 09:51:54',202,'Single',50.00,'USD',4,1,'civicrm_line_item',83), + (99,'2022-06-22 13:51:55','2022-06-22 09:51:54',1,'Single',50.00,'USD',4,1,'civicrm_line_item',84), + (100,'2022-06-22 13:51:55','2022-06-22 09:51:54',63,'Single',50.00,'USD',4,1,'civicrm_line_item',85), + (101,'2022-06-22 13:51:55','2022-06-22 09:51:54',91,'Single',50.00,'USD',4,1,'civicrm_line_item',86), + (102,'2022-06-22 13:51:55','2022-06-22 09:51:54',127,'Single',50.00,'USD',4,1,'civicrm_line_item',87), + (103,'2022-06-22 13:51:55','2022-06-22 09:51:54',28,'Single',50.00,'USD',4,1,'civicrm_line_item',88), + (104,'2022-06-22 13:51:55','2022-06-22 09:51:54',149,'Single',50.00,'USD',4,1,'civicrm_line_item',89), + (105,'2022-06-22 13:51:55','2022-06-22 09:51:54',129,'Single',50.00,'USD',4,1,'civicrm_line_item',90), + (106,'2022-06-22 13:51:55','2022-06-22 09:51:54',197,'Single',50.00,'USD',4,1,'civicrm_line_item',91), + (107,'2022-06-22 13:51:55','2022-06-22 09:51:54',77,'Single',50.00,'USD',4,1,'civicrm_line_item',92), + (108,'2022-06-22 13:51:55','2022-06-22 09:51:54',180,'Single',50.00,'USD',4,1,'civicrm_line_item',93), + (109,'2022-06-22 13:51:55','2022-06-22 09:51:54',8,'Single',50.00,'USD',4,1,'civicrm_line_item',94), + (110,'2022-06-22 13:51:55','2022-06-22 09:51:54',64,'Single',50.00,'USD',4,1,'civicrm_line_item',95), + (111,'2022-06-22 13:51:55','2022-06-22 09:51:54',107,'Single',50.00,'USD',4,1,'civicrm_line_item',96); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -3759,117 +3754,117 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_financial_trxn` DISABLE KEYS */; INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES - (1,NULL,6,'2012-06-28 04:20:38',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL), - (2,NULL,6,'2020-03-28 04:20:38',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (3,NULL,6,'2016-06-02 15:20:38',25.00,NULL,NULL,'GBP',1,'GBP12',NULL,1,NULL,4,NULL,'2095',NULL,NULL), - (4,NULL,6,'2020-03-28 04:20:38',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL), - (5,NULL,6,'2020-03-28 04:20:38',50.00,NULL,NULL,'USD',1,'Q90901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (6,NULL,6,'2022-04-04 03:38:38',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL), - (7,NULL,6,'2022-06-26 04:20:38',1750.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,'102',NULL,NULL), - (8,NULL,6,'2021-11-03 12:31:38',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (9,NULL,6,'2021-07-28 04:20:38',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (10,NULL,6,'2018-02-05 06:20:38',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (11,NULL,6,'2022-06-27 00:20:38',500.00,NULL,NULL,'JPY',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (12,NULL,6,'2021-03-27 17:47:19',50.00,NULL,NULL,'USD',1,'P291X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (13,NULL,6,'2022-03-28 00:00:00',50.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (14,NULL,6,'2022-04-28 00:00:00',50.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (15,NULL,6,'2021-03-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I591',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (16,NULL,6,'2021-04-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I592',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (17,NULL,6,'2021-05-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I593',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (18,NULL,6,'2021-06-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I594',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (19,NULL,6,'2021-07-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I595',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (20,NULL,6,'2021-08-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I596',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (21,NULL,6,'2021-09-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I597',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (22,NULL,6,'2021-10-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I598',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (23,NULL,6,'2021-11-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I599',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (24,NULL,6,'2021-12-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I5910',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (25,NULL,6,'2022-01-28 04:20:38',25.00,NULL,NULL,'USD',1,'PL32I5911',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (26,NULL,6,'2021-10-28 04:20:38',10.00,NULL,NULL,'CAD',1,'PL32I991',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (27,NULL,6,'2021-11-28 04:20:38',10.00,NULL,NULL,'CAD',1,'PL32I992',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (28,NULL,6,'2021-12-28 04:20:38',10.00,NULL,NULL,'CAD',1,'PL32I993',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (29,NULL,6,'2022-01-28 04:20:38',10.00,NULL,NULL,'CAD',1,'PL32I994',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (30,NULL,6,'2022-02-28 04:20:38',10.00,NULL,NULL,'CAD',1,'PL32I995',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (31,NULL,6,'2022-05-28 04:20:38',5.00,NULL,NULL,'EUR',1,'PL32I1031',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (32,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'12c0fef2a538e4cb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (33,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'ff9c447a179835c8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (34,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'f60e21c1a71d0877',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (35,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'f9a303829ce13f1a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (36,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'ff57294e183c0bf4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (37,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'3d9bf8368ee9c006',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (38,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'a6f6f7ea1e771a17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (39,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'32c620ba52799b9a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (40,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'41e07ff1b83a5957',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (41,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'380c1e888702fdfb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (42,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'9b4d1cf669c5c393',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (43,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'d8ad33893d2b366f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (44,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'8604057794b33f52',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (45,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'6d5e2edfa623ac0a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (46,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'b027195aa4388e2c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (47,NULL,6,'2022-06-28 04:20:39',100.00,NULL,NULL,'USD',1,'0235676032130486',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (48,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'ad7a27f1f5d8ae04',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (49,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'55c34941861d86ad',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (50,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'117f41272dc2f3f0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (51,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'e934713e34f527e2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (52,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'86150e0a4d5b3846',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (53,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'b492b0adc4538db6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (54,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'69441ccdeb8aad4f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (55,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'5e426db3d80cadf6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (56,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'57e6828548b37fd1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (57,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'d3ede0477b2fd8f4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (58,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'228fb19a09448181',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (59,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'bbcbc3331ea0d9e4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (60,NULL,6,'2022-06-28 04:20:39',1200.00,NULL,NULL,'USD',1,'8789b49254a4147a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (61,NULL,6,'2022-06-28 04:20:39',1200.00,NULL,NULL,'USD',1,'d6d6a57ba96f2a89',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (62,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'522878abb2c5cef1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (63,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'d4d7ef589c35d142',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (64,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'ecbc3b8c4f3af5da',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (65,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'6721b4adc64650e6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (66,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'c7a8c12cf512a174',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (67,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'71d9ab4d130de602',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (68,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'f1bbb89dd1fa3392',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (69,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'b0f7803bbe9f0469',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (70,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'d5f53a73eeac05e7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (71,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'fdcd036064f4004f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (72,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'3ed0d46c7029f846',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (73,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'27da160ee42243b1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (74,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'38da919a144f6aff',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (75,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'50f82bc55358789c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (76,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'2a7ed56222842ccc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (77,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'5faacadd3e7e81ab',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (78,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'4ec7b8b6dfd03581',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (79,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'417e6791ac45be9f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (80,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'bc862aa11a9fcdd4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (81,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'a24294248ac98774',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (82,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'54076398df8cce64',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (83,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'bff4a73bd7004706',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (84,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'237491dbfbdefb1d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (85,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'0ba6415746f0e89a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (86,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'ab27566953b7ef50',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (87,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'1df49d1bde9d7101',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (88,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'2d7a90b38a4f5274',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (89,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'7998a8a4bff40cef',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (90,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'90f222a38b3a72ce',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (91,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'30c363a0577f10d7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (92,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'f687eef50d1ad17d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (93,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'eee41bf34ea977ea',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (94,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'e55eca83c79ba530',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (95,NULL,6,'2022-06-28 04:20:39',800.00,NULL,NULL,'USD',1,'a172f22353b5c904',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (96,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'a4ebc2a605f8433d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (97,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'b48bdcb4826ce9e9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (98,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'768bba188e2df79c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (99,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'c6d20af6ca7a6ff7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (100,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'43e470b5b9e4cd4c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (101,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'4ddb69fdb6e64fd0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (102,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'9ee30d15f95d1977',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (103,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'19dbb7f189c4ed52',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (104,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'296fed4e101ed043',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (105,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'755f88c21f7b839a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (106,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'971ada173e4af435',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (107,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'400289590112b9f5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (108,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'010df08754cd9837',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (109,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'121c093c476dfccb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (110,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'d084b2ccc8423844',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (111,NULL,6,'2022-06-28 04:20:39',50.00,NULL,NULL,'USD',1,'bc4cbed0c5d6ef22',NULL,1,NULL,1,NULL,NULL,NULL,NULL); + (1,NULL,6,'2012-06-22 09:51:54',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL), + (2,NULL,6,'2020-03-22 09:51:54',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (3,NULL,6,'2016-05-27 20:51:54',25.00,NULL,NULL,'GBP',1,'GBP12',NULL,1,NULL,4,NULL,'2095',NULL,NULL), + (4,NULL,6,'2020-03-22 09:51:54',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL), + (5,NULL,6,'2020-03-22 09:51:54',50.00,NULL,NULL,'USD',1,'Q90901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (6,NULL,6,'2022-03-29 09:09:54',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL), + (7,NULL,6,'2022-06-20 09:51:54',1750.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,'102',NULL,NULL), + (8,NULL,6,'2021-10-28 18:02:54',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (9,NULL,6,'2021-07-22 09:51:54',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (10,NULL,6,'2018-01-30 11:51:54',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (11,NULL,6,'2022-06-21 05:51:54',500.00,NULL,NULL,'JPY',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (12,NULL,6,'2021-03-21 23:18:34',50.00,NULL,NULL,'USD',1,'P291X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (13,NULL,6,'2022-03-22 00:00:00',50.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (14,NULL,6,'2022-04-22 00:00:00',50.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (15,NULL,6,'2021-03-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I591',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (16,NULL,6,'2021-04-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I592',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (17,NULL,6,'2021-05-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I593',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (18,NULL,6,'2021-06-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I594',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (19,NULL,6,'2021-07-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I595',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (20,NULL,6,'2021-08-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I596',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (21,NULL,6,'2021-09-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I597',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (22,NULL,6,'2021-10-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I598',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (23,NULL,6,'2021-11-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I599',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (24,NULL,6,'2021-12-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I5910',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (25,NULL,6,'2022-01-22 09:51:54',25.00,NULL,NULL,'USD',1,'PL32I5911',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (26,NULL,6,'2021-10-22 09:51:54',10.00,NULL,NULL,'CAD',1,'PL32I991',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (27,NULL,6,'2021-11-22 09:51:54',10.00,NULL,NULL,'CAD',1,'PL32I992',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (28,NULL,6,'2021-12-22 09:51:54',10.00,NULL,NULL,'CAD',1,'PL32I993',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (29,NULL,6,'2022-01-22 09:51:54',10.00,NULL,NULL,'CAD',1,'PL32I994',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (30,NULL,6,'2022-02-22 09:51:54',10.00,NULL,NULL,'CAD',1,'PL32I995',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (31,NULL,6,'2022-05-22 09:51:54',5.00,NULL,NULL,'EUR',1,'PL32I1031',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (32,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'28fe54a2e12346b9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (33,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'824167b4f2f6a00c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (34,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'6959b93934b2599b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (35,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'e1b367229a77977a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (36,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'3c033b377bba5ad4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (37,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'ca2ad95d434d0a75',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (38,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'e81ab3c38c8e1d58',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (39,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'39a6bea5a782e5bb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (40,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'beb72efaa0c55854',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (41,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'c433dab0f68bf3f0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (42,NULL,6,'2022-06-22 09:51:54',100.00,NULL,NULL,'USD',1,'1a3e131e60490fba',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (43,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9f0fdb03ae014e13',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (44,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9fd96e940d770cd8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (45,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'14d15ad2c9a7ce3c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (46,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9044b2acafa51819',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (47,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'fac11c1af9276211',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (48,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'b552801b65205b60',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (49,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'3bc0fa5a784cd06d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (50,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'eaf8fd785b2d650e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (51,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9b5778fd82f9fdc0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (52,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9f41fa270f1d1f65',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (53,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'9d3adce27a83e400',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (54,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'75986f8cd2e4e0d5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (55,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'f2cc37da11999f66',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (56,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'3e2230ded06a4ff2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (57,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'b4d81bc239fc298d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (58,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'fe1cd545096edaad',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (59,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'f66d0174b87acf1d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (60,NULL,6,'2022-06-22 09:51:54',1200.00,NULL,NULL,'USD',1,'7b00946ebebfd3e0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (61,NULL,6,'2022-06-22 09:51:54',1200.00,NULL,NULL,'USD',1,'a51de6bf4ab34440',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (62,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'16d4098454e519d9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (63,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'d55b31acbf3d46e1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (64,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'cf8c325e969c7d3c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (65,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'b2ea96f4ee909042',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (66,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'edb4a7825601c734',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (67,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'3f38c95b0848adc3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (68,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'1aef52ebd54323ad',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (69,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'357c861c1f9d5294',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (70,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'bd22b3d1fd2132ad',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (71,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'6c014b0037077b09',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (72,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'0c72b7ac77e3e34c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (73,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'b6a939834246bc92',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (74,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'87ab1025cd4ec6ca',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (75,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'293813dc6309f41e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (76,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'632fcb3e63cd8c4e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (77,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'cf4c165aec49c550',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (78,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'9877c894fae7a092',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (79,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'2317d7ff2cb8757a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (80,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'639efa098f6caffd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (81,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'83da0f4330b0011f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (82,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'430d1fce1dba7268',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (83,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'9aa798abdf017438',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (84,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'00d821f8ed2c5ea2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (85,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'a6cf9eea1050247c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (86,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'fd46399849025f85',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (87,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'aaec111895c96da1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (88,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'e45d2a2ca0965aae',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (89,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'9c681c8ad63a44ca',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (90,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'da426931229acb8f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (91,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'0ce02d56ccaeff17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (92,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'c4f4fe4f3ecee695',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (93,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'2ab4377281aa13db',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (94,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'2801eeb18ead8d9b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (95,NULL,6,'2022-06-22 09:51:54',800.00,NULL,NULL,'USD',1,'a217ae61436d8213',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (96,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'f069b05227743a64',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (97,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'b390d0d7575256a2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (98,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'e0317f3ef2a31915',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (99,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'e0471ccdf963a072',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (100,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'d709ffe8e28506cf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (101,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'154790ca52344b60',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (102,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'66b264923941f9ba',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (103,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'7792427cd429502c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (104,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'01379d1d23d88550',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (105,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'3e69ae9d238300df',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (106,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'ca2b9a9578628450',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (107,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'587c22763f64d837',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (108,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'c9a6f3d4ae35fe1f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (109,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'a810fab676f62dbd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (110,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'0d3c2a755c49d49b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (111,NULL,6,'2022-06-22 09:51:54',50.00,NULL,NULL,'USD',1,'3b593264eb94c70b',NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3908,89 +3903,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,114,'Added',NULL,NULL), - (2,2,95,'Added',NULL,NULL), - (3,2,182,'Added',NULL,NULL), - (4,2,170,'Added',NULL,NULL), - (5,2,27,'Added',NULL,NULL), - (6,2,121,'Added',NULL,NULL), - (7,2,19,'Added',NULL,NULL), - (8,2,18,'Added',NULL,NULL), - (9,2,53,'Added',NULL,NULL), - (10,2,61,'Added',NULL,NULL), - (11,2,22,'Added',NULL,NULL), - (12,2,186,'Added',NULL,NULL), - (13,2,93,'Added',NULL,NULL), - (14,2,69,'Added',NULL,NULL), - (15,2,172,'Added',NULL,NULL), - (16,2,142,'Added',NULL,NULL), - (17,2,198,'Added',NULL,NULL), - (18,2,39,'Added',NULL,NULL), - (19,2,136,'Added',NULL,NULL), - (20,2,133,'Added',NULL,NULL), - (21,2,196,'Added',NULL,NULL), - (22,2,157,'Added',NULL,NULL), - (23,2,30,'Added',NULL,NULL), - (24,2,147,'Added',NULL,NULL), - (25,2,94,'Added',NULL,NULL), - (26,2,12,'Added',NULL,NULL), - (27,2,193,'Added',NULL,NULL), - (28,2,25,'Added',NULL,NULL), - (29,2,38,'Added',NULL,NULL), - (30,2,159,'Added',NULL,NULL), - (31,2,90,'Added',NULL,NULL), - (32,2,41,'Added',NULL,NULL), - (33,2,151,'Added',NULL,NULL), - (34,2,116,'Added',NULL,NULL), - (35,2,70,'Added',NULL,NULL), - (36,2,80,'Added',NULL,NULL), - (37,2,76,'Added',NULL,NULL), - (38,2,72,'Added',NULL,NULL), - (39,2,64,'Added',NULL,NULL), - (40,2,13,'Added',NULL,NULL), - (41,2,89,'Added',NULL,NULL), - (42,2,135,'Added',NULL,NULL), - (43,2,3,'Added',NULL,NULL), - (44,2,78,'Added',NULL,NULL), - (45,2,62,'Added',NULL,NULL), - (46,2,188,'Added',NULL,NULL), - (47,2,46,'Added',NULL,NULL), - (48,2,123,'Added',NULL,NULL), + (1,2,176,'Added',NULL,NULL), + (2,2,64,'Added',NULL,NULL), + (3,2,168,'Added',NULL,NULL), + (4,2,134,'Added',NULL,NULL), + (5,2,174,'Added',NULL,NULL), + (6,2,43,'Added',NULL,NULL), + (7,2,14,'Added',NULL,NULL), + (8,2,49,'Added',NULL,NULL), + (9,2,195,'Added',NULL,NULL), + (10,2,34,'Added',NULL,NULL), + (11,2,191,'Added',NULL,NULL), + (12,2,28,'Added',NULL,NULL), + (13,2,97,'Added',NULL,NULL), + (14,2,77,'Added',NULL,NULL), + (15,2,110,'Added',NULL,NULL), + (16,2,101,'Added',NULL,NULL), + (17,2,152,'Added',NULL,NULL), + (18,2,61,'Added',NULL,NULL), + (19,2,5,'Added',NULL,NULL), + (20,2,132,'Added',NULL,NULL), + (21,2,184,'Added',NULL,NULL), + (22,2,50,'Added',NULL,NULL), + (23,2,98,'Added',NULL,NULL), + (24,2,84,'Added',NULL,NULL), + (25,2,9,'Added',NULL,NULL), + (26,2,70,'Added',NULL,NULL), + (27,2,25,'Added',NULL,NULL), + (28,2,137,'Added',NULL,NULL), + (29,2,90,'Added',NULL,NULL), + (30,2,4,'Added',NULL,NULL), + (31,2,116,'Added',NULL,NULL), + (32,2,149,'Added',NULL,NULL), + (33,2,108,'Added',NULL,NULL), + (34,2,94,'Added',NULL,NULL), + (35,2,130,'Added',NULL,NULL), + (36,2,41,'Added',NULL,NULL), + (37,2,73,'Added',NULL,NULL), + (38,2,164,'Added',NULL,NULL), + (39,2,138,'Added',NULL,NULL), + (40,2,147,'Added',NULL,NULL), + (41,2,91,'Added',NULL,NULL), + (42,2,62,'Added',NULL,NULL), + (43,2,24,'Added',NULL,NULL), + (44,2,183,'Added',NULL,NULL), + (45,2,187,'Added',NULL,NULL), + (46,2,118,'Added',NULL,NULL), + (47,2,140,'Added',NULL,NULL), + (48,2,153,'Added',NULL,NULL), (49,2,58,'Added',NULL,NULL), - (50,2,34,'Added',NULL,NULL), - (51,2,180,'Added',NULL,NULL), - (52,2,87,'Added',NULL,NULL), - (53,2,17,'Added',NULL,NULL), - (54,2,88,'Added',NULL,NULL), - (55,2,4,'Added',NULL,NULL), - (56,2,199,'Added',NULL,NULL), - (57,2,149,'Added',NULL,NULL), - (58,2,106,'Added',NULL,NULL), - (59,2,36,'Added',NULL,NULL), - (60,2,163,'Added',NULL,NULL), - (61,3,197,'Added',NULL,NULL), - (62,3,134,'Added',NULL,NULL), - (63,3,102,'Added',NULL,NULL), - (64,3,50,'Added',NULL,NULL), - (65,3,79,'Added',NULL,NULL), - (66,3,154,'Added',NULL,NULL), - (67,3,16,'Added',NULL,NULL), - (68,3,189,'Added',NULL,NULL), - (69,3,10,'Added',NULL,NULL), - (70,3,49,'Added',NULL,NULL), - (71,3,129,'Added',NULL,NULL), - (72,3,24,'Added',NULL,NULL), - (73,3,110,'Added',NULL,NULL), - (74,3,9,'Added',NULL,NULL), - (75,3,145,'Added',NULL,NULL), - (76,4,114,'Added',NULL,NULL), - (77,4,18,'Added',NULL,NULL), - (78,4,172,'Added',NULL,NULL), - (79,4,157,'Added',NULL,NULL), - (80,4,38,'Added',NULL,NULL), - (81,4,80,'Added',NULL,NULL), - (82,4,3,'Added',NULL,NULL), - (83,4,34,'Added',NULL,NULL), + (50,2,163,'Added',NULL,NULL), + (51,2,44,'Added',NULL,NULL), + (52,2,72,'Added',NULL,NULL), + (53,2,95,'Added',NULL,NULL), + (54,2,6,'Added',NULL,NULL), + (55,2,31,'Added',NULL,NULL), + (56,2,177,'Added',NULL,NULL), + (57,2,119,'Added',NULL,NULL), + (58,2,120,'Added',NULL,NULL), + (59,2,35,'Added',NULL,NULL), + (60,2,52,'Added',NULL,NULL), + (61,3,117,'Added',NULL,NULL), + (62,3,197,'Added',NULL,NULL), + (63,3,17,'Added',NULL,NULL), + (64,3,198,'Added',NULL,NULL), + (65,3,33,'Added',NULL,NULL), + (66,3,169,'Added',NULL,NULL), + (67,3,192,'Added',NULL,NULL), + (68,3,71,'Added',NULL,NULL), + (69,3,19,'Added',NULL,NULL), + (70,3,133,'Added',NULL,NULL), + (71,3,88,'Added',NULL,NULL), + (72,3,76,'Added',NULL,NULL), + (73,3,125,'Added',NULL,NULL), + (74,3,10,'Added',NULL,NULL), + (75,3,51,'Added',NULL,NULL), + (76,4,176,'Added',NULL,NULL), + (77,4,49,'Added',NULL,NULL), + (78,4,110,'Added',NULL,NULL), + (79,4,50,'Added',NULL,NULL), + (80,4,90,'Added',NULL,NULL), + (81,4,41,'Added',NULL,NULL), + (82,4,24,'Added',NULL,NULL), + (83,4,163,'Added',NULL,NULL), (84,4,202,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -4107,84 +4102,84 @@ INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contributio (31,'civicrm_contribution',31,31,1,'Contribution Amount',1.00,5.00,5.00,0,1,1,0.00,NULL,NULL), (32,'civicrm_membership',1,32,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), (33,'civicrm_membership',3,34,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (34,'civicrm_membership',5,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (35,'civicrm_membership',7,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (36,'civicrm_membership',9,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (37,'civicrm_membership',10,41,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (38,'civicrm_membership',13,44,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (39,'civicrm_membership',15,46,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (40,'civicrm_membership',17,48,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (41,'civicrm_membership',19,50,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (42,'civicrm_membership',20,51,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (43,'civicrm_membership',21,52,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (44,'civicrm_membership',23,54,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (45,'civicrm_membership',27,58,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (46,'civicrm_membership',29,60,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (47,'civicrm_membership',30,61,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (48,'civicrm_membership',2,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (49,'civicrm_membership',4,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (50,'civicrm_membership',6,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (51,'civicrm_membership',8,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (52,'civicrm_membership',12,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (53,'civicrm_membership',14,45,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (54,'civicrm_membership',16,47,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (55,'civicrm_membership',18,49,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (56,'civicrm_membership',24,55,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (57,'civicrm_membership',25,56,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (58,'civicrm_membership',26,57,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (59,'civicrm_membership',28,59,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (34,'civicrm_membership',7,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (35,'civicrm_membership',9,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (36,'civicrm_membership',13,44,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (37,'civicrm_membership',17,48,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (38,'civicrm_membership',19,50,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (39,'civicrm_membership',21,52,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (40,'civicrm_membership',23,54,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (41,'civicrm_membership',27,58,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (42,'civicrm_membership',29,60,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (43,'civicrm_membership',2,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (44,'civicrm_membership',4,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (45,'civicrm_membership',5,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (46,'civicrm_membership',6,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (47,'civicrm_membership',8,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (48,'civicrm_membership',10,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (49,'civicrm_membership',12,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (50,'civicrm_membership',14,45,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (51,'civicrm_membership',15,46,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (52,'civicrm_membership',16,47,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (53,'civicrm_membership',18,49,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (54,'civicrm_membership',20,51,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (55,'civicrm_membership',24,55,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (56,'civicrm_membership',25,56,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (57,'civicrm_membership',26,57,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (58,'civicrm_membership',28,59,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (59,'civicrm_membership',30,61,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (60,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), (61,'civicrm_membership',22,53,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), - (63,'civicrm_participant',3,63,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (64,'civicrm_participant',6,74,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (65,'civicrm_participant',9,89,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (66,'civicrm_participant',12,76,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (67,'civicrm_participant',15,65,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (68,'civicrm_participant',18,105,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (69,'civicrm_participant',21,73,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (70,'civicrm_participant',24,103,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (71,'civicrm_participant',25,92,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (72,'civicrm_participant',28,72,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (73,'civicrm_participant',31,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (74,'civicrm_participant',34,70,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (75,'civicrm_participant',37,81,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (76,'civicrm_participant',40,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (77,'civicrm_participant',43,95,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (78,'civicrm_participant',46,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (79,'civicrm_participant',49,102,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (80,'civicrm_participant',50,79,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (81,'civicrm_participant',1,82,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (82,'civicrm_participant',4,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (83,'civicrm_participant',7,96,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (84,'civicrm_participant',10,69,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (85,'civicrm_participant',13,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (86,'civicrm_participant',16,98,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (87,'civicrm_participant',19,108,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (88,'civicrm_participant',22,101,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (89,'civicrm_participant',26,88,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (90,'civicrm_participant',29,75,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (91,'civicrm_participant',32,100,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (92,'civicrm_participant',35,77,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (93,'civicrm_participant',38,97,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (94,'civicrm_participant',41,99,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (95,'civicrm_participant',44,91,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (96,'civicrm_participant',47,80,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (97,'civicrm_participant',2,111,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (98,'civicrm_participant',5,104,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (99,'civicrm_participant',8,87,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (100,'civicrm_participant',11,109,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (101,'civicrm_participant',14,78,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (102,'civicrm_participant',17,67,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (103,'civicrm_participant',20,107,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (104,'civicrm_participant',23,85,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (105,'civicrm_participant',27,94,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (106,'civicrm_participant',30,110,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (107,'civicrm_participant',33,106,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (108,'civicrm_participant',36,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (109,'civicrm_participant',39,112,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (110,'civicrm_participant',42,86,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (111,'civicrm_participant',45,84,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (112,'civicrm_participant',48,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL); + (63,'civicrm_participant',3,109,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (64,'civicrm_participant',6,98,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (65,'civicrm_participant',9,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (66,'civicrm_participant',12,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (67,'civicrm_participant',15,100,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (68,'civicrm_participant',18,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (69,'civicrm_participant',21,82,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (70,'civicrm_participant',24,104,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (71,'civicrm_participant',25,91,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (72,'civicrm_participant',28,101,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (73,'civicrm_participant',31,97,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (74,'civicrm_participant',34,86,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (75,'civicrm_participant',37,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (76,'civicrm_participant',40,99,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (77,'civicrm_participant',43,96,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (78,'civicrm_participant',46,76,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (79,'civicrm_participant',49,74,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (80,'civicrm_participant',50,107,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (81,'civicrm_participant',1,89,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (82,'civicrm_participant',4,69,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (83,'civicrm_participant',7,112,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (84,'civicrm_participant',10,63,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (85,'civicrm_participant',13,78,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (86,'civicrm_participant',16,85,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (87,'civicrm_participant',19,92,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (88,'civicrm_participant',22,73,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (89,'civicrm_participant',26,102,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (90,'civicrm_participant',29,94,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (91,'civicrm_participant',32,110,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (92,'civicrm_participant',35,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (93,'civicrm_participant',38,108,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (94,'civicrm_participant',41,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (95,'civicrm_participant',44,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (96,'civicrm_participant',47,87,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (97,'civicrm_participant',2,77,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (98,'civicrm_participant',5,105,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (99,'civicrm_participant',8,64,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (100,'civicrm_participant',11,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (101,'civicrm_participant',14,95,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (102,'civicrm_participant',17,75,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (103,'civicrm_participant',20,106,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (104,'civicrm_participant',23,88,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (105,'civicrm_participant',27,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (106,'civicrm_participant',30,103,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (107,'civicrm_participant',33,90,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (108,'civicrm_participant',36,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (109,'civicrm_participant',39,111,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (110,'civicrm_participant',42,70,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (111,'civicrm_participant',45,67,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (112,'civicrm_participant',48,65,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL); /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */; UNLOCK TABLES; @@ -4195,9 +4190,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,186,196,173,NULL,NULL,NULL,NULL,NULL), - (2,187,197,174,NULL,NULL,NULL,NULL,NULL), - (3,188,198,175,NULL,NULL,NULL,NULL,NULL); + (1,181,192,172,NULL,NULL,NULL,NULL,NULL), + (2,182,193,173,NULL,NULL,NULL,NULL,NULL), + (3,183,194,174,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -4223,7 +4218,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_log` WRITE; /*!40000 ALTER TABLE `civicrm_log` DISABLE KEYS */; INSERT INTO `civicrm_log` (`id`, `entity_table`, `entity_id`, `data`, `modified_id`, `modified_date`) VALUES - (1,'civicrm_contact',202,'civicrm_contact,202',202,'2022-06-28 04:20:33'); + (1,'civicrm_contact',202,'civicrm_contact,202',202,'2022-06-22 09:51:53'); /*!40000 ALTER TABLE `civicrm_log` ENABLE KEYS */; UNLOCK TABLES; @@ -4639,36 +4634,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,13,1,'2022-06-28','2022-06-28','2024-06-27','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (2,121,2,'2022-06-27','2022-06-27','2023-06-26','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (3,39,1,'2022-06-26','2022-06-26','2024-06-25','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (4,50,2,'2022-06-25','2022-06-25','2023-06-24','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (5,6,1,'2020-05-27','2020-05-27','2022-05-26','Donation',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (6,94,2,'2022-06-23','2022-06-23','2023-06-22','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (7,69,1,'2022-06-22','2022-06-22','2024-06-21','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (8,199,2,'2022-06-21','2022-06-21','2023-06-20','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (9,5,1,'2022-06-20','2022-06-20','2024-06-19','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (10,151,1,'2020-04-17','2020-04-17','2022-04-16','Donation',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (11,65,3,'2022-06-18','2022-06-18',NULL,'Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (12,106,2,'2022-06-17','2022-06-17','2023-06-16','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (13,88,1,'2022-06-16','2022-06-16','2024-06-15','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (14,125,2,'2022-06-15','2022-06-15','2023-06-14','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (15,166,1,'2020-03-08','2020-03-08','2022-03-07','Check',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (16,161,2,'2022-06-13','2022-06-13','2023-06-12','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (17,133,1,'2022-06-12','2022-06-12','2024-06-11','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (18,159,2,'2022-06-11','2022-06-11','2023-06-10','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (19,196,1,'2022-06-10','2022-06-10','2024-06-09','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (20,186,1,'2020-01-28','2020-01-28','2022-01-27','Check',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (21,187,1,'2022-06-08','2022-06-08','2024-06-07','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (22,180,3,'2022-06-07','2022-06-07',NULL,'Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (23,47,1,'2022-06-06','2022-06-06','2024-06-05','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (24,97,2,'2022-06-05','2022-06-05','2023-06-04','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (25,22,2,'2021-06-04','2021-06-04','2022-06-03','Donation',4,0,NULL,NULL,NULL,0,0,NULL,NULL), - (26,198,2,'2022-06-03','2022-06-03','2023-06-02','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (27,184,1,'2022-06-02','2022-06-02','2024-06-01','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (28,181,2,'2022-06-01','2022-06-01','2023-05-31','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (29,70,1,'2022-05-31','2022-05-31','2024-05-30','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (30,148,1,'2019-11-09','2019-11-09','2021-11-08','Donation',3,0,NULL,NULL,NULL,0,0,NULL,NULL); + (1,131,1,'2022-06-22','2022-06-22','2024-06-21','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (2,71,2,'2022-06-21','2022-06-21','2023-06-20','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (3,101,1,'2022-06-20','2022-06-20','2024-06-19','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (4,192,2,'2022-06-19','2022-06-19','2023-06-18','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (5,134,2,'2021-06-18','2021-06-18','2022-06-17','Donation',4,0,NULL,NULL,NULL,0,0,NULL,NULL), + (6,2,2,'2022-06-17','2022-06-17','2023-06-16','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (7,8,1,'2022-06-16','2022-06-16','2024-06-15','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (8,168,2,'2022-06-15','2022-06-15','2023-06-14','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (9,164,1,'2022-06-14','2022-06-14','2024-06-13','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (10,81,2,'2021-06-13','2021-06-13','2022-06-12','Check',4,0,NULL,NULL,NULL,0,0,NULL,NULL), + (11,137,3,'2022-06-12','2022-06-12',NULL,'Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (12,45,2,'2022-06-11','2022-06-11','2023-06-10','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (13,63,1,'2022-06-10','2022-06-10','2024-06-09','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (14,5,2,'2022-06-09','2022-06-09','2023-06-08','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (15,73,2,'2021-06-08','2021-06-08','2022-06-07','Check',4,0,NULL,NULL,NULL,0,0,NULL,NULL), + (16,19,2,'2022-06-07','2022-06-07','2023-06-06','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (17,123,1,'2022-06-06','2022-06-06','2024-06-05','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (18,136,2,'2022-06-05','2022-06-05','2023-06-04','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (19,21,1,'2022-06-04','2022-06-04','2024-06-03','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (20,197,2,'2021-06-03','2021-06-03','2022-06-02','Donation',4,0,NULL,NULL,NULL,0,0,NULL,NULL), + (21,96,1,'2022-06-02','2022-06-02','2024-06-01','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (22,171,3,'2022-06-01','2022-06-01',NULL,'Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (23,154,1,'2022-05-31','2022-05-31','2024-05-30','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (24,59,2,'2022-05-30','2022-05-30','2023-05-29','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (25,20,2,'2021-05-29','2021-05-29','2022-05-28','Donation',4,0,NULL,NULL,NULL,0,0,NULL,NULL), + (26,201,2,'2022-05-28','2022-05-28','2023-05-27','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (27,18,1,'2022-05-27','2022-05-27','2024-05-26','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (28,133,2,'2022-05-26','2022-05-26','2023-05-25','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (29,155,1,'2022-05-25','2022-05-25','2024-05-24','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (30,33,2,'2021-05-24','2021-05-24','2022-05-23','Payment',4,0,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -4690,36 +4685,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,9,1,'2022-06-20','2024-06-19',5,'2022-06-28',1,NULL), - (2,5,3,'2020-05-27','2022-05-26',6,'2022-06-28',1,NULL), - (3,1,1,'2022-06-28','2024-06-27',13,'2022-06-28',1,NULL), - (4,25,4,'2021-06-04','2022-06-03',22,'2022-06-28',2,NULL), - (5,3,1,'2022-06-26','2024-06-25',39,'2022-06-28',1,NULL), - (6,23,1,'2022-06-06','2024-06-05',47,'2022-06-28',1,NULL), - (7,4,1,'2022-06-25','2023-06-24',50,'2022-06-28',2,NULL), - (8,11,1,'2022-06-18',NULL,65,'2022-06-28',3,NULL), - (9,7,1,'2022-06-22','2024-06-21',69,'2022-06-28',1,NULL), - (10,29,1,'2022-05-31','2024-05-30',70,'2022-06-28',1,NULL), - (11,13,1,'2022-06-16','2024-06-15',88,'2022-06-28',1,NULL), - (12,6,1,'2022-06-23','2023-06-22',94,'2022-06-28',2,NULL), - (13,24,1,'2022-06-05','2023-06-04',97,'2022-06-28',2,NULL), - (14,12,1,'2022-06-17','2023-06-16',106,'2022-06-28',2,NULL), - (15,2,1,'2022-06-27','2023-06-26',121,'2022-06-28',2,NULL), - (16,14,1,'2022-06-15','2023-06-14',125,'2022-06-28',2,NULL), - (17,17,1,'2022-06-12','2024-06-11',133,'2022-06-28',1,NULL), - (18,30,3,'2019-11-09','2021-11-08',148,'2022-06-28',1,NULL), - (19,10,3,'2020-04-17','2022-04-16',151,'2022-06-28',1,NULL), - (20,18,1,'2022-06-11','2023-06-10',159,'2022-06-28',2,NULL), - (21,16,1,'2022-06-13','2023-06-12',161,'2022-06-28',2,NULL), - (22,15,3,'2020-03-08','2022-03-07',166,'2022-06-28',1,NULL), - (23,22,1,'2022-06-07',NULL,180,'2022-06-28',3,NULL), - (24,28,1,'2022-06-01','2023-05-31',181,'2022-06-28',2,NULL), - (25,27,1,'2022-06-02','2024-06-01',184,'2022-06-28',1,NULL), - (26,20,3,'2020-01-28','2022-01-27',186,'2022-06-28',1,NULL), - (27,21,1,'2022-06-08','2024-06-07',187,'2022-06-28',1,NULL), - (28,19,1,'2022-06-10','2024-06-09',196,'2022-06-28',1,NULL), - (29,26,1,'2022-06-03','2023-06-02',198,'2022-06-28',2,NULL), - (30,8,1,'2022-06-21','2023-06-20',199,'2022-06-28',2,NULL); + (1,6,1,'2022-06-17','2023-06-16',2,'2022-06-22',2,NULL), + (2,14,1,'2022-06-09','2023-06-08',5,'2022-06-22',2,NULL), + (3,7,1,'2022-06-16','2024-06-15',8,'2022-06-22',1,NULL), + (4,27,1,'2022-05-27','2024-05-26',18,'2022-06-22',1,NULL), + (5,16,1,'2022-06-07','2023-06-06',19,'2022-06-22',2,NULL), + (6,25,4,'2021-05-29','2022-05-28',20,'2022-06-22',2,NULL), + (7,19,1,'2022-06-04','2024-06-03',21,'2022-06-22',1,NULL), + (8,30,4,'2021-05-24','2022-05-23',33,'2022-06-22',2,NULL), + (9,12,1,'2022-06-11','2023-06-10',45,'2022-06-22',2,NULL), + (10,24,1,'2022-05-30','2023-05-29',59,'2022-06-22',2,NULL), + (11,13,1,'2022-06-10','2024-06-09',63,'2022-06-22',1,NULL), + (12,2,1,'2022-06-21','2023-06-20',71,'2022-06-22',2,NULL), + (13,15,4,'2021-06-08','2022-06-07',73,'2022-06-22',2,NULL), + (14,10,4,'2021-06-13','2022-06-12',81,'2022-06-22',2,NULL), + (15,21,1,'2022-06-02','2024-06-01',96,'2022-06-22',1,NULL), + (16,3,1,'2022-06-20','2024-06-19',101,'2022-06-22',1,NULL), + (17,17,1,'2022-06-06','2024-06-05',123,'2022-06-22',1,NULL), + (18,1,1,'2022-06-22','2024-06-21',131,'2022-06-22',1,NULL), + (19,28,1,'2022-05-26','2023-05-25',133,'2022-06-22',2,NULL), + (20,5,4,'2021-06-18','2022-06-17',134,'2022-06-22',2,NULL), + (21,18,1,'2022-06-05','2023-06-04',136,'2022-06-22',2,NULL), + (22,11,1,'2022-06-12',NULL,137,'2022-06-22',3,NULL), + (23,23,1,'2022-05-31','2024-05-30',154,'2022-06-22',1,NULL), + (24,29,1,'2022-05-25','2024-05-24',155,'2022-06-22',1,NULL), + (25,9,1,'2022-06-14','2024-06-13',164,'2022-06-22',1,NULL), + (26,8,1,'2022-06-15','2023-06-14',168,'2022-06-22',2,NULL), + (27,22,1,'2022-06-01',NULL,171,'2022-06-22',3,NULL), + (28,4,1,'2022-06-19','2023-06-18',192,'2022-06-22',2,NULL), + (29,20,4,'2021-06-03','2022-06-02',197,'2022-06-22',2,NULL), + (30,26,1,'2022-05-28','2023-05-27',201,'2022-06-22',2,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -4730,36 +4725,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_payment` WRITE; /*!40000 ALTER TABLE `civicrm_membership_payment` DISABLE KEYS */; INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES - (3,1,32), - (15,2,33), - (5,3,34), - (7,4,35), - (2,5,36), - (12,6,37), - (9,7,38), - (30,8,39), - (1,9,40), - (19,10,41), - (8,11,42), - (14,12,43), - (11,13,44), - (16,14,45), - (22,15,46), - (21,16,47), + (1,1,32), + (2,2,33), + (3,3,34), + (4,4,35), + (5,5,36), + (6,6,37), + (7,7,38), + (8,8,39), + (9,9,40), + (10,10,41), + (11,11,42), + (12,12,43), + (13,13,44), + (14,14,45), + (15,15,46), + (16,16,47), (17,17,48), - (20,18,49), - (28,19,50), - (26,20,51), - (27,21,52), - (23,22,53), - (6,23,54), - (13,24,55), - (4,25,56), - (29,26,57), - (25,27,58), - (24,28,59), - (10,29,60), - (18,30,61); + (18,18,49), + (19,19,50), + (20,20,51), + (21,21,52), + (22,22,53), + (23,23,54), + (24,24,55), + (25,25,56), + (26,26,57), + (27,27,58), + (28,28,59), + (29,29,60), + (30,30,61); /*!40000 ALTER TABLE `civicrm_membership_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -4804,293 +4799,293 @@ INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title` (2,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'), (3,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), (4,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (5,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,400,1,1,0,'a:0:{}'), - (6,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,410,1,1,0,'a:0:{}'), - (7,1,'civicrm/import/contact/summary',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Import_Form_Summary\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Import Contacts\";s:3:\"url\";s:31:\"/civicrm/import/contact?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,410,1,1,0,'a:0:{}'), - (8,1,'civicrm/import/outcome',NULL,'Import results','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Import_Forms\";i:1;s:9:\"outputCSV\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (9,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,420,1,1,0,'a:0:{}'), - (10,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,420,1,1,0,'a:0:{}'), - (11,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (12,1,'civicrm/import/datasource',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Import_Form_DataSourceConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,450,1,1,0,'a:0:{}'), - (13,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (14,1,'civicrm/admin/custom/group/edit',NULL,'Configure Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (15,1,'civicrm/admin/custom/group/preview',NULL,'Custom Field Preview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:23:\"CRM_Custom_Form_Preview\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (16,1,'civicrm/admin/custom/group/delete',NULL,'Delete Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteGroup\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (17,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,11,1,0,0,'a:0:{}'), - (18,1,'civicrm/admin/custom/group/field/delete',NULL,'Delete Custom Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (19,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (20,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (21,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (22,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (23,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (24,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,21,1,0,0,'a:0:{}'), - (25,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,22,1,0,0,'a:0:{}'), - (26,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,23,1,0,0,'a:0:{}'), - (27,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,24,1,0,0,'a:0:{}'), - (28,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,25,1,0,0,'a:0:{}'), - (29,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,0,1,0,0,'a:0:{}'), - (30,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (31,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,35,1,0,0,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (32,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (33,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,45,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (34,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (35,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,55,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (36,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (37,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,65,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (38,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (39,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (40,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (41,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (42,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,95,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (43,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (44,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (45,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (46,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (47,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (48,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (49,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (50,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,262,1,0,0,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), - (51,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (52,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (53,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (54,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (55,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (56,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (57,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (58,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (59,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (60,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (61,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (62,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (63,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), - (64,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (65,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), - (66,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (67,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (68,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (69,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (70,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (71,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (72,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (73,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (74,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (75,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (76,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (77,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (78,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (79,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (80,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (81,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (82,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (83,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,130,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (84,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (85,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (86,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,430,1,0,0,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (87,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (88,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), - (89,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1370,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (90,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1380,1,0,0,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (91,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), - (92,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), - (93,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,9000,1,1,0,'a:0:{}'), - (94,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (95,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), - (96,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (97,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), - (98,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'), - (99,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (100,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (101,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (102,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (103,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,500,1,0,0,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (104,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,610,1,1,0,'a:0:{}'), - (105,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (106,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,399,1,0,0,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (107,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (108,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (109,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (110,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (111,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (112,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (113,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (114,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (115,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (116,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (117,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (118,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (119,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,0,1,0,0,'a:0:{}'), - (120,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (121,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (122,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (123,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (124,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (125,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (126,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (127,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (128,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,9999,1,1,0,'a:0:{}'), - (129,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (130,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (131,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (132,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (133,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (134,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (135,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (136,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (137,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (138,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (139,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (140,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:0:{}'), - (141,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,1,1,0,0,'a:0:{}'), - (142,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (143,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (144,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (145,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (146,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (147,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (148,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (149,1,'civicrm/dev/fake-error',NULL,'Fake Error','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Page_FakeError\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (150,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (151,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (152,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (153,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (154,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (155,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (156,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (157,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (158,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (159,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (160,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (161,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (162,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (163,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (164,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (165,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (166,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (167,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,1,0,1,0,0,1,0,0,'a:0:{}'), - (168,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,0,1,1,0,'a:0:{}'), - (169,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,10,1,1,0,'a:0:{}'), - (170,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (171,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (172,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (173,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,12,1,1,0,'a:0:{}'), - (174,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,14,1,1,0,'a:0:{}'), - (175,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,16,1,1,0,'a:0:{}'), - (176,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (177,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (178,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (179,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (180,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (181,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (182,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (183,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (184,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (185,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (186,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (187,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (188,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (189,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (190,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (191,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (192,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (193,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (194,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (195,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (196,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (197,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (198,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (199,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (200,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (201,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (202,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (203,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (204,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (205,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), - (206,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (207,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (208,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), - (209,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (210,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (211,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (212,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (213,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (214,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (215,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (216,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (217,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (218,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (219,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (220,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,105,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (221,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (222,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (223,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (224,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,110,1,0,0,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), - (225,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (226,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (227,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (228,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (229,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (230,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (231,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (232,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (233,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (234,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (235,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (236,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (237,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (238,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (239,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (240,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (241,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), - (242,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (243,1,'civicrm/tag',NULL,'Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,25,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (244,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (245,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (246,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (247,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (248,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (249,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (250,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,362,1,0,0,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (251,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,0,1,0,0,'a:0:{}'), - (252,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (253,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (254,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,1,0,1,0,800,1,1,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), - (255,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), - (256,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,1,1,0,0,'a:0:{}'), - (257,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), - (258,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), - (259,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), - (260,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), - (261,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), - (262,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (263,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,375,1,0,0,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (264,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (265,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (266,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,395,1,0,0,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (267,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,398,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (268,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (269,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,810,1,1,0,'a:0:{}'), - (270,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,1,820,1,1,0,'a:0:{}'), - (271,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,1,1,0,0,'a:0:{}'), - (272,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,910,1,0,0,'a:0:{}'), - (273,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,930,1,0,0,'a:0:{}'), - (274,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,920,1,0,0,'a:0:{}'), - (275,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,930,1,0,0,'a:0:{}'), - (276,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,940,1,0,0,'a:0:{}'), - (277,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,950,1,0,0,'a:0:{}'), - (278,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,960,1,0,0,'a:0:{}'), - (279,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,950,1,0,0,'a:0:{}'), - (280,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,830,1,0,0,'a:0:{}'), - (281,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,840,1,1,0,'a:0:{}'), - (282,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,850,1,1,0,'a:0:{}'), - (283,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,880,1,1,0,'a:0:{}'), - (284,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,890,1,1,0,'a:0:{}'), - (285,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,4,1,0,0,'a:0:{}'), - (286,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (287,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (288,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,1,0,1,0,1,1,0,0,'a:0:{}'), - (289,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,540,1,1,0,'a:0:{}'), - (290,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,1,1,0,0,'a:0:{}'), - (291,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (5,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (6,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (7,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (8,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (9,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (10,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (11,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (12,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), + (13,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (14,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), + (15,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), + (16,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (17,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,0,1,0,0,'a:0:{}'), + (18,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (19,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (20,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (21,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (22,1,'civicrm/admin/custom/group/edit',NULL,'Configure Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (23,1,'civicrm/admin/custom/group/preview',NULL,'Custom Field Preview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:23:\"CRM_Custom_Form_Preview\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (24,1,'civicrm/admin/custom/group/delete',NULL,'Delete Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteGroup\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (25,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,11,1,0,0,'a:0:{}'), + (26,1,'civicrm/admin/custom/group/field/delete',NULL,'Delete Custom Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (27,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (28,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (29,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (30,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (31,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (32,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,21,1,0,0,'a:0:{}'), + (33,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,22,1,0,0,'a:0:{}'), + (34,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,23,1,0,0,'a:0:{}'), + (35,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,24,1,0,0,'a:0:{}'), + (36,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,25,1,0,0,'a:0:{}'), + (37,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,0,1,0,0,'a:0:{}'), + (38,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (39,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,35,1,0,0,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (40,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (41,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,45,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (42,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (43,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,55,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (44,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (45,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,65,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (46,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (47,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (48,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (49,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (50,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,95,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (51,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (52,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (53,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (54,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (55,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (56,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (57,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (58,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,262,1,0,0,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), + (59,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (60,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (61,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (62,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (63,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (64,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (65,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (66,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (67,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (68,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (69,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (70,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (71,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), + (72,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (73,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), + (74,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (75,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (76,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (77,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (78,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (79,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (80,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (81,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (82,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (83,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (84,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (85,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (86,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (87,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (88,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (89,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (90,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (91,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,130,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (92,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (93,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (94,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,430,1,0,0,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (95,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (96,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), + (97,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1370,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (98,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1380,1,0,0,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (99,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), + (100,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), + (101,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,9000,1,1,0,'a:0:{}'), + (102,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (103,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), + (104,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (105,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), + (106,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'), + (107,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (108,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (109,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (110,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (111,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,500,1,0,0,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (112,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,610,1,1,0,'a:0:{}'), + (113,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (114,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,399,1,0,0,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (115,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (116,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (117,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,400,1,1,0,'a:0:{}'), + (118,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,410,1,1,0,'a:0:{}'), + (119,1,'civicrm/import/contact/summary',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Import_Form_Summary\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Import Contacts\";s:3:\"url\";s:31:\"/civicrm/import/contact?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,410,1,1,0,'a:0:{}'), + (120,1,'civicrm/import/outcome',NULL,'Import results','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Import_Forms\";i:1;s:9:\"outputCSV\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (121,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,420,1,1,0,'a:0:{}'), + (122,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,420,1,1,0,'a:0:{}'), + (123,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (124,1,'civicrm/import/datasource',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Import_Form_DataSourceConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,450,1,1,0,'a:0:{}'), + (125,1,'civicrm/tag',NULL,'Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,25,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (126,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (127,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (128,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (129,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (130,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), + (131,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (132,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,362,1,0,0,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (133,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (134,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (135,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (136,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (137,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (138,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (139,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,0,1,0,0,'a:0:{}'), + (140,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (141,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (142,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (143,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (144,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (145,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (146,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (147,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (148,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,9999,1,1,0,'a:0:{}'), + (149,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (150,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (151,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (152,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (153,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (154,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (155,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (156,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (157,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (158,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (159,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (160,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:0:{}'), + (161,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,1,1,0,0,'a:0:{}'), + (162,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (163,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (164,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (165,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (166,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (167,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (168,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (169,1,'civicrm/dev/fake-error',NULL,'Fake Error','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Page_FakeError\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (170,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (171,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (172,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (173,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (174,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (175,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (176,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (177,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (178,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (179,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (180,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (181,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (182,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (183,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (184,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (185,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (186,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (187,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,1,0,1,0,0,1,0,0,'a:0:{}'), + (188,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,0,1,1,0,'a:0:{}'), + (189,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,10,1,1,0,'a:0:{}'), + (190,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (191,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (192,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (193,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,12,1,1,0,'a:0:{}'), + (194,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,14,1,1,0,'a:0:{}'), + (195,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,16,1,1,0,'a:0:{}'), + (196,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (197,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (198,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (199,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (200,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (201,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (202,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (203,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (204,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (205,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (206,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (207,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (208,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (209,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (210,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (211,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (212,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (213,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (214,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (215,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (216,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (217,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (218,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (219,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (220,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (221,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), + (222,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (223,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (224,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (225,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), + (226,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (227,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (228,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), + (229,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (230,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (231,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (232,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (233,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (234,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (235,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (236,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (237,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (238,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (239,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (240,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,105,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (241,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (242,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (243,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (244,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,110,1,0,0,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), + (245,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (246,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (247,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (248,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (249,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (250,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (251,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (252,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (253,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (254,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,540,1,1,0,'a:0:{}'), + (255,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,1,1,0,0,'a:0:{}'), + (256,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (257,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,1,0,1,0,800,1,1,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (258,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (259,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,1,1,0,0,'a:0:{}'), + (260,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), + (261,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), + (262,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (263,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (264,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (265,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (266,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,375,1,0,0,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (267,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (268,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (269,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,395,1,0,0,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (270,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,398,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (271,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (272,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,810,1,1,0,'a:0:{}'), + (273,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,1,820,1,1,0,'a:0:{}'), + (274,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,1,1,0,0,'a:0:{}'), + (275,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,910,1,0,0,'a:0:{}'), + (276,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,930,1,0,0,'a:0:{}'), + (277,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,920,1,0,0,'a:0:{}'), + (278,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,930,1,0,0,'a:0:{}'), + (279,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,940,1,0,0,'a:0:{}'), + (280,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,950,1,0,0,'a:0:{}'), + (281,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,960,1,0,0,'a:0:{}'), + (282,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,1,0,1,1,950,1,0,0,'a:0:{}'), + (283,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,830,1,0,0,'a:0:{}'), + (284,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,840,1,1,0,'a:0:{}'), + (285,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,0,1,0,850,1,1,0,'a:0:{}'), + (286,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,880,1,1,0,'a:0:{}'), + (287,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,890,1,1,0,'a:0:{}'), + (288,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,4,1,0,0,'a:0:{}'), + (289,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (290,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (291,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,1,0,1,0,1,1,0,0,'a:0:{}'), (292,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,1,0,1,0,500,1,1,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), (293,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), (294,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), @@ -5268,8 +5263,8 @@ INSERT INTO `civicrm_msg_template` (`id`, `msg_title`, `msg_subject`, `msg_text` (6,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if \'{contribution.financial_type_id}\'}\n{ts}Financial Type{/ts}: {contribution.financial_type_id:label}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $line.tax_rate || $line.tax_amount != \"\"} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $isShowTax}\n{ts}Total Tax Amount{/ts} : {contribution.tax_amount}\n{/if}\n{ts}Total Amount{/ts} : {contribution.total_amount}\n{if \'{contribution.receive_date}\'}\n{ts}Date Received{/ts}: {contribution.receive_date|crmDate:\"shortdate\"}\n{/if}\n{if \'{contribution.receipt_date}\'}\n{ts}Receipt Date{/ts}: {contribution.receipt_date|crmDate:\"shortdate\"}\n{/if}\n{if \'{contribution.payment_instrument_id}\' and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {contribution.payment_instrument_id:label}\n{if \'{contribution.check_number}\'}\n{ts}Check Number{/ts}: {contribution.check_number}\n{/if}\n{/if}\n{if \'{contribution.trxn_id}\'}\n{ts}Transaction ID{/ts}: {contribution.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if !empty($fulfilled_date)}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if \'{contribution.financial_type_id}\'}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.financial_type_id:label}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if $isShowTax}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.tax_amount}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.total_amount}\n </td>\n </tr>\n\n {if \'{contribution.receive_date}\'}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.receive_date|crmDate:\"shortdate\"}\n </td>\n </tr>\n {/if}\n\n {if \'{contribution.receipt_date}\'}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.receipt_date|crmDate:\"shortdate\"}\n </td>\n </tr>\n {/if}\n\n {if \'{contribution.payment_instrument_id}\' and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.payment_instrument_id:label}\n </td>\n </tr>\n {if \'{contribution.check_number}\'}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if \'{contribution.trxn_id}\'}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if !empty($fulfilled_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n\n</body>\n</html>\n',1,814,'contribution_offline_receipt',0,1,0,NULL), (7,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $isShowLineItems}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $line.tax_rate || $line.tax_amount != \"\"} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $isShowTax}\n{ts}Total Tax Amount{/ts}: {contribution.tax_amount|crmMoney}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if \'{contribution.amount_level}\'} - {contribution.amount_level}{/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if $isShowLineItems}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $isShowTax}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.tax_amount|crmMoney}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if \'{contribution.amount_level}\'} - {contribution.amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n\n</body>\n</html>\n',1,815,'contribution_online_receipt',1,0,0,NULL), (8,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $isShowLineItems}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $line.tax_rate || $line.tax_amount != \"\"} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $isShowTax}\n{ts}Total Tax Amount{/ts}: {contribution.tax_amount|crmMoney}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if \'{contribution.amount_level}\'} - {contribution.amount_level}{/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if $isShowLineItems}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $line.tax_rate || $line.tax_amount != \"\"}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $isShowTax}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {contribution.tax_amount|crmMoney}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if \'{contribution.amount_level}\'} - {contribution.amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n\n</body>\n</html>\n',1,815,'contribution_online_receipt',0,1,0,NULL), - (9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n </div>\n </body>\n</html>\n',1,816,'contribution_invoice_receipt',1,0,0,NULL), - (10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{$taxTerm}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n </div>\n </body>\n</html>\n',1,816,'contribution_invoice_receipt',0,1,0,NULL), + (9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{domain.name}</font></b></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {domain.street_address}\n {domain.supplemental_address_1}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.supplemental_address_2}\n {domain.state_province_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {domain.city}\n {domain.postal_code}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{domain.country_id:label}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.source}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{domain.email}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{domain.phone}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{domain.tax_term}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {domain.name}<br />\n {domain.street_address} {domain.supplemental_address_1}<br />\n {domain.supplemental_address_2} {domain.state_province_id:label}<br />\n {domain.city} {domain.postal_code}<br />\n {domain.country_id:label}<br />\n {domain.email}</div>\n {domain.phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{domain.name}</font></td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.street_address}\n {domain.supplemental_address_1}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.supplemental_address_2}\n {domain.state_province_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.city}\n {domain.postal_code}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.country_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.email}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.phone}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{domain.tax_term}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n </div>\n </body>\n</html>\n',1,816,'contribution_invoice_receipt',1,0,0,NULL), + (10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{domain.name}</font></b></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {domain.street_address}\n {domain.supplemental_address_1}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.supplemental_address_2}\n {domain.state_province_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {domain.city}\n {domain.postal_code}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{domain.country_id:label}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.source}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{domain.email}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{domain.phone}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{domain.tax_term}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {domain.name}<br />\n {domain.street_address} {domain.supplemental_address_1}<br />\n {domain.supplemental_address_2} {domain.state_province_id:label}<br />\n {domain.city} {domain.postal_code}<br />\n {domain.country_id:label}<br />\n {domain.email}</div>\n {domain.phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contribution.invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{domain.name}</font></td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}{if \'{contact.current_employer}\'} ({contact.current_employer}){/if}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.street_address}\n {domain.supplemental_address_1}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.supplemental_address_2}\n {domain.state_province_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.city}\n {domain.postal_code}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.country_id:label}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.email}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {domain.phone}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{domain.tax_term}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $value.tax_rate}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if $taxTerm}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n </div>\n </body>\n</html>\n',1,816,'contribution_invoice_receipt',0,1,0,NULL), (11,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n\n</body>\n</html>\n',1,817,'contribution_recurring_notify',1,0,0,NULL), (12,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n\n</body>\n</html>\n',1,817,'contribution_recurring_notify',0,1,0,NULL), (13,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n</body>\n</html>\n',1,818,'contribution_recurring_cancelled',1,0,0,NULL), @@ -5360,7 +5355,7 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (21,1,'Import Contacts','Import Contacts','civicrm/import/contact?reset=1',NULL,'import contacts','',14,1,NULL,7), (22,1,'Import Activities','Import Activities','civicrm/import/activity?reset=1',NULL,'import contacts','',14,1,NULL,8), (23,1,'Import Custom Data','Import MultiValued Custom','civicrm/import/custom?reset=1',NULL,'import contacts','',14,1,1,9), - (24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',14,1,NULL,10), + (24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',14,0,NULL,10), (25,1,'Manage Groups','Manage Groups','civicrm/group?reset=1',NULL,'access CiviCRM','',14,1,1,11), (26,1,'Manage Tags','Manage Tags (Categories)','civicrm/tag?reset=1',NULL,'manage tags','',14,1,1,12), (27,1,'Find and Merge Duplicate Contacts','Find and Merge Duplicate Contacts','civicrm/contact/deduperules?reset=1',NULL,'administer dedupe rules,merge duplicate contacts','OR',14,1,NULL,13), @@ -5377,11 +5372,11 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (38,1,'New Pledge','New Pledge','civicrm/pledge/add?reset=1&action=add&context=standalone',NULL,'access CiviPledge,edit pledges','AND',35,1,NULL,2), (39,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',35,1,NULL,3), (40,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',35,1,0,4), - (41,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,NULL,9), + (41,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',28,0,NULL,9), (42,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,1,10), (43,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,NULL,11), (44,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,1,12), - (45,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,NULL,13), + (45,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',28,0,NULL,13), (46,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',28,1,1,14), (47,1,'New Batch','New Batch','civicrm/financial/batch?reset=1&action=add',NULL,'create manual batch','AND',36,1,NULL,1), (48,1,'Open Batches','Open Batches','civicrm/financial/financialbatches?reset=1&batchStatus=1',NULL,'view own manual batches,view all manual batches','OR',36,1,NULL,2), @@ -5393,11 +5388,11 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (54,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',51,1,NULL,3), (55,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',51,1,1,4), (56,1,'Import Participants','Import Participants','civicrm/event/import?reset=1',NULL,'access CiviEvent,edit event participants','AND',51,1,1,5), - (57,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',51,1,NULL,6), + (57,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',51,0,NULL,6), (58,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,edit all events','AND',51,1,1,7), (59,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',51,1,1,8), (60,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,edit all events','AND',51,1,1,9), - (61,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',51,1,NULL,10), + (61,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',51,0,NULL,10), (62,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,edit all events','AND',51,1,NULL,11), (63,1,'Mailings','Mailings',NULL,'crm-i fa-envelope-o','access CiviMail,create mailings,approve mailings,schedule mailings,send SMS','OR',NULL,1,NULL,50), (64,1,'New Mailing','New Mailing','civicrm/mailing/send?reset=1',NULL,'access CiviMail,create mailings','OR',63,1,NULL,1), @@ -5414,12 +5409,12 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (75,1,'Manage A/B Tests','Manage A/B Tests','civicrm/a/#/abtest',NULL,'access CiviMail','',63,1,1,16), (76,1,'Memberships','Memberships',NULL,'crm-i fa-id-badge','access CiviMember','',NULL,1,NULL,60), (77,1,'Dashboard','Dashboard','civicrm/member?reset=1',NULL,'access CiviMember','',76,1,NULL,1), - (78,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',76,1,NULL,2), + (78,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',76,0,NULL,2), (79,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',76,1,NULL,3), (80,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',76,1,1,4), (81,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',76,1,NULL,5), (82,1,'Import Memberships','Import Members','civicrm/member/import?reset=1',NULL,'access CiviMember,edit memberships','AND',76,1,1,6), - (83,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',76,1,NULL,7), + (83,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',76,0,NULL,7), (84,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',76,1,NULL,8), (85,1,'Campaigns','Campaigns',NULL,'crm-i fa-bullhorn','interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',NULL,1,NULL,70), (86,1,'Dashboard','Dashboard','civicrm/campaign?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',85,1,NULL,1), @@ -5526,7 +5521,7 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (187,1,'Payment Methods','Payment Instruments','civicrm/admin/options/payment_instrument?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',180,1,NULL,12), (188,1,'Accepted Credit Cards','Accepted Credit Cards','civicrm/admin/options/accept_creditcard?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',180,1,NULL,13), (189,1,'Soft Credit Types','Soft Credit Types','civicrm/admin/options/soft_credit_type?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',180,1,1,14), - (190,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',180,1,NULL,15), + (190,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',180,0,NULL,15), (191,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',180,1,NULL,16), (192,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',180,1,NULL,17), (193,1,'CiviContribute Component Settings','CiviContribute Component Settings','civicrm/admin/setting/preferences/contribute?reset=1',NULL,'administer CiviCRM','',180,1,NULL,18), @@ -5535,7 +5530,7 @@ INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `ic (196,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,1,2), (197,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,1,3), (198,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,1,4), - (199,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,NULL,5), + (199,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',194,0,NULL,5), (200,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,1,6), (201,1,'Event Types','Event Types','civicrm/admin/options/event_type?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,NULL,7), (202,1,'Participant Statuses','Participant Statuses','civicrm/admin/participant_status?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',194,1,NULL,8), @@ -5600,26 +5595,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',105,'Chart out route map for next 10k run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-06-26 09:03:52',NULL,'0'), - (2,'civicrm_contact',71,'Arrange collection of funds from members',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-08-17 11:23:24',NULL,'0'), - (3,'civicrm_contact',93,'Reminder screening of \"Black\" on next Friday',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-02-18 05:34:52',NULL,'0'), - (4,'civicrm_contact',45,'Contact the Commissioner of Charities',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-11-16 11:04:26',NULL,'0'), - (5,'civicrm_contact',144,'Arrange collection of funds from members',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-11-29 17:22:31',NULL,'0'), - (6,'civicrm_contact',157,'Contact the Commissioner of Charities',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-09-02 22:58:13',NULL,'0'), - (7,'civicrm_contact',21,'Organize the Terry Fox run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-11-17 08:55:00',NULL,'0'), - (8,'civicrm_contact',201,'Chart out route map for next 10k run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-05-22 18:59:21',NULL,'0'), - (9,'civicrm_contact',9,'Get the registration done for NGO status',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-07-11 18:16:20',NULL,'0'), - (10,'civicrm_contact',65,'Send reminder for annual dinner',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-08-12 01:36:32',NULL,'0'), - (11,'civicrm_contact',113,'Arrange for cricket match with Sunil Gavaskar',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-12-30 07:50:17',NULL,'0'), - (12,'civicrm_contact',173,'Send reminder for annual dinner',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-09-14 19:44:36',NULL,'0'), - (13,'civicrm_contact',161,'Organize the Terry Fox run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-12-12 02:20:04',NULL,'0'), - (14,'civicrm_contact',130,'Connect for presentation',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-05-07 02:21:40',NULL,'0'), - (15,'civicrm_contact',106,'Organize the Terry Fox run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-01-20 03:17:09',NULL,'0'), - (16,'civicrm_contact',116,'Connect for presentation',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-10-25 20:29:16',NULL,'0'), - (17,'civicrm_contact',110,'Arrange collection of funds from members',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2022-03-24 18:47:27',NULL,'0'), - (18,'civicrm_contact',87,'Chart out route map for next 10k run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-09-19 16:34:22',NULL,'0'), - (19,'civicrm_contact',66,'Chart out route map for next 10k run',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-11-28 18:07:36',NULL,'0'), - (20,'civicrm_contact',176,'Get the registration done for NGO status',1,'2022-06-28 04:20:34','2022-06-28 04:20:34','2021-07-25 09:25:50',NULL,'0'); + (1,'civicrm_contact',66,'Organize the Terry Fox run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-07-20 02:05:06',NULL,'0'), + (2,'civicrm_contact',42,'Arrange for cricket match with Sunil Gavaskar',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-01-04 17:01:05',NULL,'0'), + (3,'civicrm_contact',81,'Arrange for cricket match with Sunil Gavaskar',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-03-17 17:29:36',NULL,'0'), + (4,'civicrm_contact',116,'Get the registration done for NGO status',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-10-19 20:40:59',NULL,'0'), + (5,'civicrm_contact',97,'Send reminder for annual dinner',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-01-04 12:12:14',NULL,'0'), + (6,'civicrm_contact',127,'Send reminder for annual dinner',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-11-10 03:24:00',NULL,'0'), + (7,'civicrm_contact',51,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-10-04 04:57:14',NULL,'0'), + (8,'civicrm_contact',185,'Organize the Terry Fox run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-11-24 14:14:00',NULL,'0'), + (9,'civicrm_contact',112,'Send newsletter for April 2005',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-06-23 11:50:50',NULL,'0'), + (10,'civicrm_contact',104,'Send reminder for annual dinner',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-03-01 09:21:45',NULL,'0'), + (11,'civicrm_contact',194,'Arrange collection of funds from members',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-02-09 19:33:39',NULL,'0'), + (12,'civicrm_contact',176,'Arrange collection of funds from members',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-01-30 13:52:54',NULL,'0'), + (13,'civicrm_contact',26,'Connect for presentation',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-12-29 02:20:57',NULL,'0'), + (14,'civicrm_contact',109,'Send newsletter for April 2005',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-02-08 06:56:23',NULL,'0'), + (15,'civicrm_contact',56,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-11-19 13:32:43',NULL,'0'), + (16,'civicrm_contact',98,'Organize the Terry Fox run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-03-05 03:28:08',NULL,'0'), + (17,'civicrm_contact',60,'Contact the Commissioner of Charities',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-05-25 03:55:14',NULL,'0'), + (18,'civicrm_contact',37,'Reminder screening of \"Black\" on next Friday',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-04-16 05:13:37',NULL,'0'), + (19,'civicrm_contact',148,'Send reminder for annual dinner',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2022-03-03 03:24:28',NULL,'0'), + (20,'civicrm_contact',197,'Chart out route map for next 10k run',1,'2022-06-22 13:51:53','2022-06-22 13:51:53','2021-09-21 23:43:01',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -6610,56 +6605,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,91,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (2,194,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,3,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,116,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,181,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (6,53,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,153,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,106,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,112,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,35,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (11,192,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,55,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,19,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,60,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,10,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,159,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,15,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,182,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,187,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,185,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,50,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,171,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,100,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,179,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,125,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,111,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (27,130,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,46,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,54,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,193,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,13,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,168,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (33,183,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,38,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,57,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,128,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,78,3,4,'4','2009-03-06 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (38,157,1,1,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (39,200,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,7,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,167,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,104,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,148,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,117,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,94,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,45,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,71,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,93,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,172,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,64,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,114,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (2,58,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,189,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,14,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,166,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (6,134,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,202,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,2,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,6,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,1,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (11,128,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,18,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,63,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,130,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,146,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,91,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,38,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,87,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,127,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,78,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,28,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,111,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,158,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,126,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,149,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (27,80,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,148,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,129,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,151,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,132,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,197,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (33,121,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,102,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,77,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,19,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,70,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,180,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,199,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,140,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,8,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,15,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,131,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,64,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,7,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,56,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,107,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,4,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,35,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,174,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; @@ -6670,56 +6665,56 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant_payment` WRITE; /*!40000 ALTER TABLE `civicrm_participant_payment` DISABLE KEYS */; INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES - (1,3,63), - (2,40,64), - (3,15,65), - (4,31,66), - (5,17,67), - (6,13,68), - (7,10,69), - (8,34,70), - (9,46,71), - (10,28,72), - (11,21,73), - (12,6,74), - (13,29,75), - (14,12,76), - (15,35,77), - (16,14,78), - (17,50,79), - (18,47,80), - (19,37,81), - (20,1,82), - (21,48,83), - (22,45,84), - (23,23,85), - (24,42,86), - (25,8,87), - (26,26,88), - (27,9,89), - (28,4,90), - (29,44,91), - (30,25,92), - (31,36,93), - (32,27,94), - (33,43,95), - (34,7,96), - (35,38,97), - (36,16,98), - (37,41,99), - (38,32,100), - (39,22,101), - (40,49,102), - (41,24,103), - (42,5,104), - (43,18,105), - (44,33,106), - (45,20,107), - (46,19,108), - (47,11,109), - (48,30,110), - (49,2,111), - (50,39,112); + (1,10,63), + (2,8,64), + (3,48,65), + (4,9,66), + (5,45,67), + (6,41,68), + (7,4,69), + (8,42,70), + (9,12,71), + (10,36,72), + (11,22,73), + (12,49,74), + (13,17,75), + (14,46,76), + (15,2,77), + (16,13,78), + (17,44,79), + (18,37,80), + (19,35,81), + (20,21,82), + (21,27,83), + (22,18,84), + (23,16,85), + (24,34,86), + (25,47,87), + (26,23,88), + (27,1,89), + (28,33,90), + (29,25,91), + (30,19,92), + (31,11,93), + (32,29,94), + (33,14,95), + (34,43,96), + (35,31,97), + (36,6,98), + (37,40,99), + (38,15,100), + (39,28,101), + (40,26,102), + (41,30,103), + (42,24,104), + (43,5,105), + (44,20,106), + (45,50,107), + (46,38,108), + (47,3,109), + (48,32,110), + (49,39,111), + (50,7,112); /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -6793,7 +6788,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,170,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,134,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; @@ -6815,181 +6810,180 @@ 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,114,1,1,0,NULL,'471-9151',NULL,'4719151',1), - (2,114,1,0,0,NULL,'(296) 750-9524',NULL,'2967509524',1), - (3,95,1,1,0,NULL,'463-8482',NULL,'4638482',1), - (4,95,1,0,0,NULL,'273-6620',NULL,'2736620',1), - (5,182,1,1,0,NULL,'362-4512',NULL,'3624512',1), - (6,182,1,0,0,NULL,'(526) 202-4650',NULL,'5262024650',2), - (7,170,1,1,0,NULL,'(642) 707-7684',NULL,'6427077684',1), - (8,170,1,0,0,NULL,'(677) 319-7033',NULL,'6773197033',1), - (9,27,1,1,0,NULL,'606-4650',NULL,'6064650',2), - (10,27,1,0,0,NULL,'(384) 208-2139',NULL,'3842082139',2), - (11,121,1,1,0,NULL,'(811) 723-4666',NULL,'8117234666',1), - (12,121,1,0,0,NULL,'(229) 464-6135',NULL,'2294646135',1), - (13,19,1,1,0,NULL,'(833) 449-8163',NULL,'8334498163',2), - (14,19,1,0,0,NULL,'829-4266',NULL,'8294266',1), - (15,18,1,1,0,NULL,'309-6535',NULL,'3096535',2), - (16,53,1,1,0,NULL,'(859) 329-5252',NULL,'8593295252',2), - (17,53,1,0,0,NULL,'(207) 874-6462',NULL,'2078746462',2), - (18,22,1,1,0,NULL,'492-6636',NULL,'4926636',1), - (19,22,1,0,0,NULL,'(688) 252-6128',NULL,'6882526128',2), - (20,93,1,1,0,NULL,'(464) 818-5392',NULL,'4648185392',2), - (21,69,1,1,0,NULL,'(482) 875-7841',NULL,'4828757841',2), - (22,69,1,0,0,NULL,'(803) 646-5495',NULL,'8036465495',1), - (23,142,1,1,0,NULL,'715-2526',NULL,'7152526',1), - (24,39,1,1,0,NULL,'401-1903',NULL,'4011903',1), - (25,136,1,1,0,NULL,'355-9262',NULL,'3559262',1), - (26,147,1,1,0,NULL,'(623) 339-1219',NULL,'6233391219',2), - (27,147,1,0,0,NULL,'(710) 715-8044',NULL,'7107158044',2), - (28,94,1,1,0,NULL,'(262) 695-5078',NULL,'2626955078',1), - (29,94,1,0,0,NULL,'484-5667',NULL,'4845667',2), - (30,12,1,1,0,NULL,'(262) 475-7411',NULL,'2624757411',1), - (31,193,1,1,0,NULL,'(500) 788-2313',NULL,'5007882313',1), - (32,193,1,0,0,NULL,'(299) 687-3581',NULL,'2996873581',1), - (33,25,1,1,0,NULL,'647-3194',NULL,'6473194',2), - (34,25,1,0,0,NULL,'624-3195',NULL,'6243195',2), - (35,159,1,1,0,NULL,'743-6692',NULL,'7436692',1), - (36,90,1,1,0,NULL,'399-3089',NULL,'3993089',2), - (37,90,1,0,0,NULL,'(765) 411-2712',NULL,'7654112712',2), - (38,41,1,1,0,NULL,'461-8983',NULL,'4618983',2), - (39,41,1,0,0,NULL,'606-9352',NULL,'6069352',2), - (40,116,1,1,0,NULL,'(892) 399-6468',NULL,'8923996468',1), - (41,70,1,1,0,NULL,'(693) 661-5231',NULL,'6936615231',1), - (42,70,1,0,0,NULL,'602-8486',NULL,'6028486',2), - (43,76,1,1,0,NULL,'(440) 897-5346',NULL,'4408975346',2), - (44,72,1,1,0,NULL,'777-4325',NULL,'7774325',1), - (45,64,1,1,0,NULL,'(668) 214-2045',NULL,'6682142045',1), - (46,89,1,1,0,NULL,'411-1457',NULL,'4111457',2), - (47,89,1,0,0,NULL,'(292) 339-2935',NULL,'2923392935',2), - (48,135,1,1,0,NULL,'355-5109',NULL,'3555109',2), - (49,135,1,0,0,NULL,'(635) 714-4799',NULL,'6357144799',2), - (50,78,1,1,0,NULL,'(565) 738-9608',NULL,'5657389608',2), - (51,62,1,1,0,NULL,'(690) 445-7667',NULL,'6904457667',2), - (52,62,1,0,0,NULL,'870-3236',NULL,'8703236',2), - (53,46,1,1,0,NULL,'(629) 348-9183',NULL,'6293489183',1), - (54,123,1,1,0,NULL,'(670) 470-6050',NULL,'6704706050',1), - (55,123,1,0,0,NULL,'(231) 763-5483',NULL,'2317635483',1), - (56,34,1,1,0,NULL,'342-1027',NULL,'3421027',1), - (57,180,1,1,0,NULL,'327-3008',NULL,'3273008',2), - (58,180,1,0,0,NULL,'750-3842',NULL,'7503842',1), - (59,87,1,1,0,NULL,'(493) 846-5907',NULL,'4938465907',1), - (60,17,1,1,0,NULL,'(843) 368-4035',NULL,'8433684035',1), - (61,17,1,0,0,NULL,'819-4452',NULL,'8194452',2), - (62,88,1,1,0,NULL,'279-3952',NULL,'2793952',2), - (63,149,1,1,0,NULL,'(633) 723-5559',NULL,'6337235559',1), - (64,149,1,0,0,NULL,'787-9798',NULL,'7879798',2), - (65,163,1,1,0,NULL,'413-8813',NULL,'4138813',2), - (66,163,1,0,0,NULL,'733-3766',NULL,'7333766',1), - (67,197,1,1,0,NULL,'(859) 760-2661',NULL,'8597602661',2), - (68,134,1,1,0,NULL,'(653) 781-1620',NULL,'6537811620',2), - (69,134,1,0,0,NULL,'(830) 699-4085',NULL,'8306994085',2), - (70,102,1,1,0,NULL,'(250) 451-6055',NULL,'2504516055',2), - (71,102,1,0,0,NULL,'858-1828',NULL,'8581828',1), - (72,50,1,1,0,NULL,'(496) 634-9817',NULL,'4966349817',1), - (73,50,1,0,0,NULL,'721-9643',NULL,'7219643',1), - (74,79,1,1,0,NULL,'326-4401',NULL,'3264401',2), - (75,154,1,1,0,NULL,'739-4102',NULL,'7394102',1), - (76,16,1,1,0,NULL,'(836) 621-5801',NULL,'8366215801',1), - (77,16,1,0,0,NULL,'692-7009',NULL,'6927009',1), - (78,189,1,1,0,NULL,'601-3167',NULL,'6013167',1), - (79,189,1,0,0,NULL,'(748) 625-4171',NULL,'7486254171',2), - (80,49,1,1,0,NULL,'242-3685',NULL,'2423685',1), - (81,49,1,0,0,NULL,'381-6584',NULL,'3816584',2), - (82,129,1,1,0,NULL,'(345) 595-6013',NULL,'3455956013',2), - (83,24,1,1,0,NULL,'533-5726',NULL,'5335726',1), - (84,24,1,0,0,NULL,'(214) 829-1956',NULL,'2148291956',2), - (85,110,1,1,0,NULL,'441-2874',NULL,'4412874',2), - (86,145,1,1,0,NULL,'534-8952',NULL,'5348952',2), - (87,145,1,0,0,NULL,'(213) 263-8638',NULL,'2132638638',2), - (88,155,1,1,0,NULL,'306-3203',NULL,'3063203',1), - (89,97,1,1,0,NULL,'661-1027',NULL,'6611027',1), - (90,97,1,0,0,NULL,'291-9438',NULL,'2919438',2), - (91,29,1,1,0,NULL,'822-5172',NULL,'8225172',1), - (92,29,1,0,0,NULL,'(493) 234-1631',NULL,'4932341631',2), - (93,161,1,1,0,NULL,'348-3007',NULL,'3483007',2), - (94,161,1,0,0,NULL,'(312) 254-1237',NULL,'3122541237',1), - (95,47,1,1,0,NULL,'371-3148',NULL,'3713148',2), - (96,181,1,1,0,NULL,'361-3159',NULL,'3613159',1), - (97,57,1,1,0,NULL,'(231) 751-4733',NULL,'2317514733',2), - (98,5,1,1,0,NULL,'386-6429',NULL,'3866429',1), - (99,5,1,0,0,NULL,'(734) 799-1039',NULL,'7347991039',2), - (100,31,1,1,0,NULL,'670-4968',NULL,'6704968',1), - (101,138,1,1,0,NULL,'657-5042',NULL,'6575042',2), - (102,138,1,0,0,NULL,'873-3665',NULL,'8733665',2), - (103,141,1,1,0,NULL,'390-9700',NULL,'3909700',1), - (104,141,1,0,0,NULL,'(552) 383-1287',NULL,'5523831287',2), - (105,166,1,1,0,NULL,'(279) 423-6340',NULL,'2794236340',1), - (106,137,1,1,0,NULL,'(396) 480-9669',NULL,'3964809669',2), - (107,43,1,1,0,NULL,'(573) 762-8446',NULL,'5737628446',2), - (108,43,1,0,0,NULL,'(430) 478-7042',NULL,'4304787042',1), - (109,125,1,1,0,NULL,'(501) 645-1480',NULL,'5016451480',1), - (110,125,1,0,0,NULL,'(518) 358-2689',NULL,'5183582689',1), - (111,130,1,1,0,NULL,'(708) 708-8679',NULL,'7087088679',1), - (112,109,1,1,0,NULL,'(311) 215-9206',NULL,'3112159206',2), - (113,2,1,1,0,NULL,'(289) 806-8407',NULL,'2898068407',1), - (114,107,1,1,0,NULL,'331-2002',NULL,'3312002',1), - (115,107,1,0,0,NULL,'(859) 547-8437',NULL,'8595478437',2), - (116,173,1,1,0,NULL,'230-5948',NULL,'2305948',2), - (117,92,1,1,0,NULL,'(332) 374-9522',NULL,'3323749522',2), - (118,92,1,0,0,NULL,'(736) 225-2065',NULL,'7362252065',2), - (119,65,1,1,0,NULL,'(325) 713-2941',NULL,'3257132941',2), - (120,91,1,1,0,NULL,'264-5507',NULL,'2645507',2), - (121,91,1,0,0,NULL,'638-8725',NULL,'6388725',2), - (122,20,1,1,0,NULL,'(673) 543-3280',NULL,'6735433280',1), - (123,20,1,0,0,NULL,'(729) 556-8931',NULL,'7295568931',1), - (124,71,1,1,0,NULL,'416-4587',NULL,'4164587',1), - (125,71,1,0,0,NULL,'840-1596',NULL,'8401596',2), - (126,118,1,1,0,NULL,'576-6300',NULL,'5766300',2), - (127,118,1,0,0,NULL,'201-6223',NULL,'2016223',1), - (128,132,1,1,0,NULL,'(435) 613-8013',NULL,'4356138013',1), - (129,132,1,0,0,NULL,'(477) 849-4439',NULL,'4778494439',1), - (130,66,1,1,0,NULL,'425-3348',NULL,'4253348',2), - (131,66,1,0,0,NULL,'(349) 847-2109',NULL,'3498472109',2), - (132,26,1,1,0,NULL,'(552) 565-7895',NULL,'5525657895',1), - (133,187,1,1,0,NULL,'353-4462',NULL,'3534462',2), - (134,60,1,1,0,NULL,'455-5262',NULL,'4555262',1), - (135,124,1,1,0,NULL,'(787) 827-8027',NULL,'7878278027',2), - (136,152,1,1,0,NULL,'606-2868',NULL,'6062868',1), - (137,152,1,0,0,NULL,'847-5223',NULL,'8475223',1), - (138,148,1,1,0,NULL,'(891) 538-5999',NULL,'8915385999',2), - (139,32,1,1,0,NULL,'353-9595',NULL,'3539595',2), - (140,32,1,0,0,NULL,'232-8986',NULL,'2328986',1), - (141,158,1,1,0,NULL,'542-2673',NULL,'5422673',1), - (142,158,1,0,0,NULL,'616-8075',NULL,'6168075',2), - (143,190,1,1,0,NULL,'708-9332',NULL,'7089332',2), - (144,7,1,1,0,NULL,'(463) 301-1973',NULL,'4633011973',2), - (145,150,1,1,0,NULL,'(806) 663-9855',NULL,'8066639855',2), - (146,150,1,0,0,NULL,'(429) 484-2377',NULL,'4294842377',2), - (147,105,1,1,0,NULL,'(680) 688-4363',NULL,'6806884363',2), - (148,63,1,1,0,NULL,'(394) 444-6106',NULL,'3944446106',2), - (149,67,1,1,0,NULL,'(567) 266-5416',NULL,'5672665416',1), - (150,67,1,0,0,NULL,'890-9223',NULL,'8909223',1), - (151,178,1,1,0,NULL,'(357) 704-4893',NULL,'3577044893',2), - (152,104,1,1,0,NULL,'(630) 737-1323',NULL,'6307371323',2), - (153,104,1,0,0,NULL,'310-9365',NULL,'3109365',2), - (154,68,1,1,0,NULL,'(481) 872-2709',NULL,'4818722709',1), - (155,68,1,0,0,NULL,'294-1057',NULL,'2941057',1), - (156,146,1,1,0,NULL,'(849) 452-9909',NULL,'8494529909',2), - (157,146,1,0,0,NULL,'(842) 419-3629',NULL,'8424193629',1), - (158,195,1,1,0,NULL,'674-6477',NULL,'6746477',2), - (159,195,1,0,0,NULL,'(406) 371-6570',NULL,'4063716570',1), - (160,120,1,1,0,NULL,'217-2524',NULL,'2172524',2), - (161,192,1,1,0,NULL,'(658) 838-3673',NULL,'6588383673',1), - (162,35,1,1,0,NULL,'686-5321',NULL,'6865321',2), - (163,35,1,0,0,NULL,'359-6303',NULL,'3596303',2), - (164,83,1,1,0,NULL,'552-1713',NULL,'5521713',1), - (165,6,1,1,0,NULL,'(426) 708-5294',NULL,'4267085294',1), - (166,6,1,0,0,NULL,'886-8278',NULL,'8868278',2), - (167,179,1,1,0,NULL,'(334) 375-9015',NULL,'3343759015',1), - (168,119,1,1,0,NULL,'399-4019',NULL,'3994019',2), - (169,140,1,1,0,NULL,'(829) 445-2780',NULL,'8294452780',2), - (170,140,1,0,0,NULL,'752-5821',NULL,'7525821',1), - (171,200,1,1,0,NULL,'(329) 354-2804',NULL,'3293542804',2), - (172,200,1,0,0,NULL,'(432) 759-1902',NULL,'4327591902',1), - (173,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), - (174,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), - (175,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); + (1,176,1,1,0,NULL,'(523) 503-1517',NULL,'5235031517',2), + (2,176,1,0,0,NULL,'778-5486',NULL,'7785486',1), + (3,64,1,1,0,NULL,'802-5518',NULL,'8025518',1), + (4,64,1,0,0,NULL,'651-8496',NULL,'6518496',1), + (5,168,1,1,0,NULL,'(895) 682-7134',NULL,'8956827134',2), + (6,168,1,0,0,NULL,'523-5201',NULL,'5235201',2), + (7,134,1,1,0,NULL,'(799) 546-7444',NULL,'7995467444',2), + (8,43,1,1,0,NULL,'(703) 787-3783',NULL,'7037873783',1), + (9,43,1,0,0,NULL,'502-6800',NULL,'5026800',2), + (10,14,1,1,0,NULL,'(331) 484-8045',NULL,'3314848045',1), + (11,195,1,1,0,NULL,'353-9597',NULL,'3539597',1), + (12,195,1,0,0,NULL,'683-3620',NULL,'6833620',2), + (13,34,1,1,0,NULL,'(871) 298-2838',NULL,'8712982838',2), + (14,34,1,0,0,NULL,'533-4345',NULL,'5334345',2), + (15,97,1,1,0,NULL,'(421) 787-1532',NULL,'4217871532',2), + (16,97,1,0,0,NULL,'(431) 875-9665',NULL,'4318759665',1), + (17,77,1,1,0,NULL,'(803) 489-7400',NULL,'8034897400',2), + (18,77,1,0,0,NULL,'(271) 429-8475',NULL,'2714298475',1), + (19,101,1,1,0,NULL,'489-1289',NULL,'4891289',2), + (20,152,1,1,0,NULL,'336-3607',NULL,'3363607',1), + (21,184,1,1,0,NULL,'(701) 878-7181',NULL,'7018787181',2), + (22,184,1,0,0,NULL,'(490) 475-8955',NULL,'4904758955',1), + (23,50,1,1,0,NULL,'359-5934',NULL,'3595934',1), + (24,84,1,1,0,NULL,'(642) 755-7704',NULL,'6427557704',1), + (25,70,1,1,0,NULL,'(693) 783-3723',NULL,'6937833723',1), + (26,137,1,1,0,NULL,'804-2745',NULL,'8042745',1), + (27,137,1,0,0,NULL,'264-2952',NULL,'2642952',2), + (28,116,1,1,0,NULL,'334-7197',NULL,'3347197',2), + (29,149,1,1,0,NULL,'(341) 407-6873',NULL,'3414076873',1), + (30,149,1,0,0,NULL,'246-7624',NULL,'2467624',2), + (31,108,1,1,0,NULL,'(225) 280-1554',NULL,'2252801554',1), + (32,94,1,1,0,NULL,'(844) 582-8519',NULL,'8445828519',2), + (33,94,1,0,0,NULL,'(429) 226-4397',NULL,'4292264397',2), + (34,130,1,1,0,NULL,'(352) 623-2678',NULL,'3526232678',2), + (35,41,1,1,0,NULL,'266-9333',NULL,'2669333',2), + (36,41,1,0,0,NULL,'(735) 836-2914',NULL,'7358362914',1), + (37,73,1,1,0,NULL,'645-6631',NULL,'6456631',1), + (38,138,1,1,0,NULL,'(798) 608-4056',NULL,'7986084056',2), + (39,91,1,1,0,NULL,'(463) 695-3830',NULL,'4636953830',1), + (40,91,1,0,0,NULL,'(227) 326-6101',NULL,'2273266101',1), + (41,62,1,1,0,NULL,'709-8182',NULL,'7098182',1), + (42,24,1,1,0,NULL,'(272) 361-2203',NULL,'2723612203',2), + (43,24,1,0,0,NULL,'(794) 774-3778',NULL,'7947743778',2), + (44,183,1,1,0,NULL,'(564) 715-3730',NULL,'5647153730',1), + (45,118,1,1,0,NULL,'249-1151',NULL,'2491151',2), + (46,118,1,0,0,NULL,'424-9915',NULL,'4249915',2), + (47,140,1,1,0,NULL,'392-7112',NULL,'3927112',2), + (48,140,1,0,0,NULL,'(686) 704-7623',NULL,'6867047623',2), + (49,58,1,1,0,NULL,'(679) 777-2548',NULL,'6797772548',2), + (50,163,1,1,0,NULL,'323-4382',NULL,'3234382',1), + (51,44,1,1,0,NULL,'723-1102',NULL,'7231102',1), + (52,44,1,0,0,NULL,'(609) 889-8749',NULL,'6098898749',2), + (53,72,1,1,0,NULL,'339-1331',NULL,'3391331',2), + (54,95,1,1,0,NULL,'(835) 510-2658',NULL,'8355102658',1), + (55,6,1,1,0,NULL,'(315) 604-6837',NULL,'3156046837',1), + (56,6,1,0,0,NULL,'(267) 581-7209',NULL,'2675817209',1), + (57,31,1,1,0,NULL,'(536) 758-3806',NULL,'5367583806',2), + (58,31,1,0,0,NULL,'287-2123',NULL,'2872123',2), + (59,120,1,1,0,NULL,'(573) 284-3421',NULL,'5732843421',2), + (60,52,1,1,0,NULL,'741-8284',NULL,'7418284',2), + (61,52,1,0,0,NULL,'(679) 482-1961',NULL,'6794821961',2), + (62,197,1,1,0,NULL,'(288) 749-4902',NULL,'2887494902',1), + (63,197,1,0,0,NULL,'734-9143',NULL,'7349143',2), + (64,17,1,1,0,NULL,'(523) 306-2203',NULL,'5233062203',1), + (65,17,1,0,0,NULL,'759-3133',NULL,'7593133',2), + (66,198,1,1,0,NULL,'536-4609',NULL,'5364609',2), + (67,198,1,0,0,NULL,'416-8481',NULL,'4168481',2), + (68,33,1,1,0,NULL,'(484) 874-2872',NULL,'4848742872',2), + (69,33,1,0,0,NULL,'289-9418',NULL,'2899418',1), + (70,169,1,1,0,NULL,'872-1567',NULL,'8721567',1), + (71,192,1,1,0,NULL,'(218) 835-3663',NULL,'2188353663',1), + (72,71,1,1,0,NULL,'(613) 426-6094',NULL,'6134266094',1), + (73,133,1,1,0,NULL,'732-9850',NULL,'7329850',1), + (74,133,1,0,0,NULL,'296-8335',NULL,'2968335',2), + (75,88,1,1,0,NULL,'241-9007',NULL,'2419007',2), + (76,125,1,1,0,NULL,'713-9756',NULL,'7139756',2), + (77,125,1,0,0,NULL,'(853) 774-8370',NULL,'8537748370',2), + (78,10,1,1,0,NULL,'(217) 235-9801',NULL,'2172359801',1), + (79,51,1,1,0,NULL,'(774) 420-3640',NULL,'7744203640',2), + (80,56,1,1,0,NULL,'(343) 388-5264',NULL,'3433885264',1), + (81,56,1,0,0,NULL,'526-4601',NULL,'5264601',2), + (82,68,1,1,0,NULL,'711-9304',NULL,'7119304',2), + (83,68,1,0,0,NULL,'302-1144',NULL,'3021144',1), + (84,8,1,1,0,NULL,'696-3835',NULL,'6963835',1), + (85,78,1,1,0,NULL,'807-6683',NULL,'8076683',1), + (86,135,1,1,0,NULL,'(664) 875-2496',NULL,'6648752496',2), + (87,161,1,1,0,NULL,'(640) 220-2917',NULL,'6402202917',1), + (88,179,1,1,0,NULL,'207-7257',NULL,'2077257',1), + (89,63,1,1,0,NULL,'383-4029',NULL,'3834029',1), + (90,172,1,1,0,NULL,'(476) 210-3493',NULL,'4762103493',2), + (91,172,1,0,0,NULL,'355-2959',NULL,'3552959',2), + (92,39,1,1,0,NULL,'(390) 565-9681',NULL,'3905659681',1), + (93,159,1,1,0,NULL,'674-9871',NULL,'6749871',1), + (94,159,1,0,0,NULL,'(616) 437-4703',NULL,'6164374703',1), + (95,16,1,1,0,NULL,'898-4272',NULL,'8984272',1), + (96,16,1,0,0,NULL,'(820) 841-4436',NULL,'8208414436',2), + (97,146,1,1,0,NULL,'(229) 502-4538',NULL,'2295024538',2), + (98,146,1,0,0,NULL,'(848) 424-2942',NULL,'8484242942',2), + (99,83,1,1,0,NULL,'(786) 390-7561',NULL,'7863907561',2), + (100,83,1,0,0,NULL,'826-3365',NULL,'8263365',2), + (101,154,1,1,0,NULL,'(490) 331-3558',NULL,'4903313558',2), + (102,154,1,0,0,NULL,'780-4116',NULL,'7804116',1), + (103,12,1,1,0,NULL,'(710) 210-3486',NULL,'7102103486',1), + (104,12,1,0,0,NULL,'848-9601',NULL,'8489601',2), + (105,79,1,1,0,NULL,'586-6016',NULL,'5866016',2), + (106,36,1,1,0,NULL,'(322) 513-5575',NULL,'3225135575',1), + (107,36,1,0,0,NULL,'(605) 455-9406',NULL,'6054559406',1), + (108,69,1,1,0,NULL,'(824) 271-7222',NULL,'8242717222',2), + (109,170,1,1,0,NULL,'838-6527',NULL,'8386527',1), + (110,15,1,1,0,NULL,'(565) 325-3561',NULL,'5653253561',2), + (111,15,1,0,0,NULL,'496-3294',NULL,'4963294',2), + (112,131,1,1,0,NULL,'(736) 699-3765',NULL,'7366993765',1), + (113,59,1,1,0,NULL,'811-3185',NULL,'8113185',1), + (114,112,1,1,0,NULL,'(349) 424-4079',NULL,'3494244079',1), + (115,112,1,0,0,NULL,'(799) 466-3900',NULL,'7994663900',2), + (116,127,1,1,0,NULL,'211-5170',NULL,'2115170',2), + (117,201,1,1,0,NULL,'(693) 484-6788',NULL,'6934846788',2), + (118,201,1,0,0,NULL,'452-2656',NULL,'4522656',2), + (119,178,1,1,0,NULL,'(753) 574-9120',NULL,'7535749120',1), + (120,178,1,0,0,NULL,'839-8324',NULL,'8398324',2), + (121,2,1,1,0,NULL,'(833) 598-5041',NULL,'8335985041',2), + (122,188,1,1,0,NULL,'(696) 290-5970',NULL,'6962905970',1), + (123,26,1,1,0,NULL,'832-3610',NULL,'8323610',2), + (124,20,1,1,0,NULL,'(414) 675-7713',NULL,'4146757713',2), + (125,20,1,0,0,NULL,'791-4531',NULL,'7914531',2), + (126,30,1,1,0,NULL,'(545) 710-4721',NULL,'5457104721',1), + (127,30,1,0,0,NULL,'(737) 396-7587',NULL,'7373967587',1), + (128,42,1,1,0,NULL,'(546) 663-6211',NULL,'5466636211',2), + (129,139,1,1,0,NULL,'(388) 442-9538',NULL,'3884429538',1), + (130,18,1,1,0,NULL,'(647) 672-9515',NULL,'6476729515',1), + (131,18,1,0,0,NULL,'(300) 522-3874',NULL,'3005223874',2), + (132,122,1,1,0,NULL,'521-8740',NULL,'5218740',1), + (133,99,1,1,0,NULL,'(792) 505-9645',NULL,'7925059645',1), + (134,99,1,0,0,NULL,'(823) 332-1039',NULL,'8233321039',2), + (135,100,1,1,0,NULL,'(504) 574-1452',NULL,'5045741452',2), + (136,45,1,1,0,NULL,'(424) 765-5172',NULL,'4247655172',1), + (137,45,1,0,0,NULL,'858-4389',NULL,'8584389',2), + (138,181,1,1,0,NULL,'256-2310',NULL,'2562310',1), + (139,181,1,0,0,NULL,'741-7286',NULL,'7417286',1), + (140,111,1,1,0,NULL,'(230) 896-7446',NULL,'2308967446',2), + (141,102,1,1,0,NULL,'693-4693',NULL,'6934693',1), + (142,156,1,1,0,NULL,'400-4353',NULL,'4004353',1), + (143,156,1,0,0,NULL,'767-9588',NULL,'7679588',1), + (144,40,1,1,0,NULL,'(202) 690-9620',NULL,'2026909620',2), + (145,124,1,1,0,NULL,'(693) 569-7688',NULL,'6935697688',1), + (146,3,1,1,0,NULL,'(578) 502-6224',NULL,'5785026224',2), + (147,3,1,0,0,NULL,'(478) 895-2361',NULL,'4788952361',1), + (148,196,1,1,0,NULL,'(711) 657-4182',NULL,'7116574182',1), + (149,143,1,1,0,NULL,'(733) 690-5701',NULL,'7336905701',1), + (150,21,1,1,0,NULL,'(565) 819-9464',NULL,'5658199464',1), + (151,21,1,0,0,NULL,'388-3955',NULL,'3883955',1), + (152,193,1,1,0,NULL,'(698) 760-4972',NULL,'6987604972',2), + (153,193,1,0,0,NULL,'(335) 660-8585',NULL,'3356608585',1), + (154,171,1,1,0,NULL,'645-6133',NULL,'6456133',2), + (155,171,1,0,0,NULL,'(771) 404-9516',NULL,'7714049516',2), + (156,86,1,1,0,NULL,'422-9171',NULL,'4229171',1), + (157,86,1,0,0,NULL,'(749) 750-8275',NULL,'7497508275',1), + (158,189,1,1,0,NULL,'(762) 742-8969',NULL,'7627428969',2), + (159,142,1,1,0,NULL,'609-3263',NULL,'6093263',1), + (160,142,1,0,0,NULL,'(637) 246-4167',NULL,'6372464167',1), + (161,136,1,1,0,NULL,'723-6575',NULL,'7236575',1), + (162,136,1,0,0,NULL,'(737) 881-4357',NULL,'7378814357',1), + (163,155,1,1,0,NULL,'(374) 554-6656',NULL,'3745546656',2), + (164,155,1,0,0,NULL,'(676) 866-1757',NULL,'6768661757',2), + (165,185,1,1,0,NULL,'806-2024',NULL,'8062024',1), + (166,185,1,0,0,NULL,'509-9264',NULL,'5099264',2), + (167,55,1,1,0,NULL,'(341) 774-5840',NULL,'3417745840',2), + (168,128,1,1,0,NULL,'(708) 653-1205',NULL,'7086531205',2), + (169,128,1,0,0,NULL,'(364) 450-6494',NULL,'3644506494',2), + (170,166,1,1,0,NULL,'714-9628',NULL,'7149628',2), + (171,166,1,0,0,NULL,'762-4539',NULL,'7624539',1), + (172,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), + (173,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), + (174,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -7224,222 +7218,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`, `created_date`, `modified_date`) VALUES - (1,47,144,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (2,181,144,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (3,47,115,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (4,181,115,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (5,181,47,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (6,115,113,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (7,47,113,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (8,181,113,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:29','2022-06-28 04:20:29'), - (9,144,113,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (10,115,144,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (11,143,57,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (12,5,57,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (13,143,73,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (14,5,73,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (15,5,143,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (16,73,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (17,143,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (18,5,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (19,57,191,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (20,73,57,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (21,31,51,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (22,28,51,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (23,31,100,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (24,28,100,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (25,28,31,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (26,100,45,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (27,31,45,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (28,28,45,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (29,51,45,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (30,100,51,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (31,185,138,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (32,166,138,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (33,185,141,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (34,166,141,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (35,166,185,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (36,141,201,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (37,185,201,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (38,166,201,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (39,138,201,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (40,141,138,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (41,125,137,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (42,130,137,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (43,125,43,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (44,130,43,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (45,130,125,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (46,43,8,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (47,125,8,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (48,130,8,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (49,137,8,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (50,43,137,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (51,2,165,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (52,84,165,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (53,2,109,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (54,84,109,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (55,84,2,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (56,109,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (57,2,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (58,84,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (59,165,56,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (60,109,165,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (61,175,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (62,112,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (63,175,107,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (64,112,107,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (65,112,175,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (66,107,162,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (67,175,162,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (68,112,162,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (69,37,162,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (70,107,37,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (71,65,173,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (72,91,173,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (73,65,92,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (74,91,92,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (75,91,65,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (76,92,59,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (77,65,59,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (78,91,59,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (79,173,59,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (80,92,173,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (81,42,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (82,118,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (83,42,71,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (84,118,71,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (85,118,42,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (86,71,14,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (87,42,14,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (88,118,14,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (89,20,14,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (90,71,20,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (91,66,132,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (92,169,132,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (93,66,23,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (94,169,23,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (95,169,66,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (96,23,153,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (97,66,153,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (98,169,153,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (99,132,153,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (100,23,132,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (101,60,26,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (102,33,26,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (103,60,187,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (104,33,187,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (105,33,60,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (106,187,81,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (107,60,81,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (108,33,81,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (109,26,81,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (110,187,26,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (111,148,124,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (112,32,124,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (113,148,152,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (114,32,152,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (115,32,148,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (116,152,108,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (117,148,108,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (118,32,108,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:30','2022-06-28 04:20:30'), - (119,124,108,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (120,152,124,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (121,7,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (122,150,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (123,7,190,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (124,150,190,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (125,150,7,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (126,190,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (127,7,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (128,150,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (129,158,55,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (130,190,158,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (131,98,105,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (132,103,105,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (133,98,44,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (134,103,44,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (135,103,98,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (136,44,128,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (137,98,128,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (138,103,128,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (139,105,128,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (140,44,105,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (141,67,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (142,178,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (143,67,184,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (144,178,184,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (145,178,67,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (146,184,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (147,67,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (148,178,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (149,63,85,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (150,184,63,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (151,177,104,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (152,146,104,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (153,177,68,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (154,146,68,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (155,146,177,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (156,68,174,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (157,177,174,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (158,146,174,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (159,104,174,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (160,68,104,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (161,171,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (162,192,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (163,171,120,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (164,192,120,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (165,192,171,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (166,120,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (167,171,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (168,192,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (169,195,167,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (170,120,195,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (171,82,35,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (172,176,35,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (173,82,83,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (174,176,83,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (175,176,82,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (176,83,21,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (177,82,21,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (178,176,21,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (179,35,21,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (180,83,35,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (181,119,6,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (182,140,6,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (183,119,179,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (184,140,179,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (185,140,119,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (186,179,77,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (187,119,77,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (188,140,77,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (189,6,77,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (190,179,6,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (191,11,86,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (192,117,86,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (193,11,200,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (194,117,200,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (195,117,11,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (196,200,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (197,11,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (198,117,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (199,86,75,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (200,200,86,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (201,166,15,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (202,165,52,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (203,29,54,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (204,189,74,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (205,133,96,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (206,38,99,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (207,19,101,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (208,181,111,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (209,4,126,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (210,112,139,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (211,61,156,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (212,159,160,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (213,53,164,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (214,140,168,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (215,106,183,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'), - (216,66,194,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-28 04:20:31','2022-06-28 04:20:31'); + (1,151,161,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (2,96,161,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (3,151,144,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (4,96,144,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (5,96,151,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (6,144,29,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (7,151,29,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (8,96,29,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (9,161,29,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (10,144,161,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (11,172,179,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (12,39,179,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (13,172,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (14,39,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (15,39,172,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (16,63,27,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (17,172,27,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (18,39,27,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (19,179,27,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (20,63,179,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (21,16,159,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (22,146,159,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (23,16,32,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (24,146,32,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (25,146,16,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (26,32,67,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (27,16,67,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (28,146,67,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (29,159,67,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (30,32,159,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (31,154,105,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (32,12,105,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (33,154,83,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (34,12,83,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (35,12,154,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (36,83,106,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (37,154,106,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (38,12,106,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (39,105,106,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (40,83,105,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (41,36,194,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (42,162,194,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (43,36,79,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (44,162,79,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (45,162,36,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (46,79,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (47,36,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (48,162,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (49,194,47,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (50,79,194,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (51,37,69,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (52,15,69,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (53,37,170,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (54,15,170,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (55,15,37,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (56,170,200,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (57,37,200,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (58,15,200,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (59,69,200,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (60,170,69,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (61,186,131,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (62,112,131,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (63,186,59,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (64,112,59,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (65,112,186,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (66,59,103,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (67,186,103,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (68,112,103,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (69,131,103,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (70,59,131,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (71,127,89,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (72,190,89,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (73,127,11,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (74,190,11,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (75,190,127,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (76,11,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (77,127,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (78,190,75,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (79,89,75,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (80,11,89,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (81,2,201,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (82,188,201,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (83,2,178,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (84,188,178,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (85,188,2,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (86,178,66,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (87,2,66,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (88,188,66,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (89,201,66,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (90,178,201,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (91,30,26,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (92,42,26,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (93,30,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (94,42,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (95,42,30,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (96,20,92,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (97,30,92,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (98,42,92,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (99,26,92,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (100,20,26,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (101,122,139,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (102,13,139,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (103,122,18,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (104,13,18,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (105,13,122,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (106,18,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (107,122,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (108,13,85,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (109,139,85,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (110,18,139,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (111,45,99,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (112,160,99,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (113,45,100,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (114,160,100,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (115,160,45,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (116,100,158,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (117,45,158,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (118,160,158,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (119,99,158,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (120,100,99,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (121,102,181,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (122,156,181,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (123,102,111,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (124,156,111,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (125,156,102,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (126,111,57,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (127,102,57,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (128,156,57,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (129,181,57,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (130,111,181,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (131,3,40,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (132,123,40,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (133,3,124,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (134,123,124,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (135,123,3,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (136,124,182,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (137,3,182,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (138,123,182,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (139,40,182,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (140,124,40,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (141,145,196,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (142,60,196,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (143,145,143,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (144,60,143,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (145,60,145,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (146,143,199,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (147,145,199,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (148,60,199,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (149,196,199,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (150,143,196,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (151,171,21,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (152,86,21,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (153,171,193,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (154,86,193,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (155,86,171,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (156,193,93,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (157,171,93,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (158,86,93,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (159,21,93,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (160,193,21,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (161,142,189,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (162,53,189,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (163,142,157,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (164,53,157,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (165,53,142,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (166,157,114,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (167,142,114,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (168,53,114,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (169,189,114,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (170,157,189,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (171,148,136,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (172,141,136,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (173,148,155,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (174,141,155,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (175,141,148,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (176,155,87,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (177,148,87,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (178,141,87,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (179,136,87,7,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (180,155,136,2,NULL,NULL,0,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (181,82,185,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (182,81,185,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (183,82,129,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (184,81,129,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (185,81,82,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (186,129,7,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (187,82,7,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (188,81,7,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (189,185,7,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (190,129,185,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (191,121,55,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (192,166,55,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (193,121,128,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (194,166,128,1,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (195,166,121,4,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (196,128,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (197,121,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (198,166,167,8,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (199,55,167,7,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (200,128,55,2,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (201,52,22,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (202,124,23,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (203,88,38,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (204,138,46,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (205,127,48,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (206,40,54,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (207,61,65,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (208,166,74,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (209,13,80,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (210,51,104,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (211,42,107,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (212,161,109,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (213,122,113,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (214,50,115,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (215,99,126,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (216,134,165,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (217,179,173,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (218,8,175,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'), + (219,17,180,5,NULL,NULL,1,NULL,0,0,NULL,'2022-06-22 13:51:53','2022-06-22 13:51:53'); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -7450,438 +7447,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',47,'Child of',144,'Parent of',1,NULL,NULL,NULL), - (2,1,1,'b_a',144,'Parent of',47,'Child of',1,NULL,NULL,NULL), - (3,2,1,'a_b',181,'Child of',144,'Parent of',1,NULL,NULL,NULL), - (4,2,1,'b_a',144,'Parent of',181,'Child of',1,NULL,NULL,NULL), - (5,3,1,'a_b',47,'Child of',115,'Parent of',1,NULL,NULL,NULL), - (6,3,1,'b_a',115,'Parent of',47,'Child of',1,NULL,NULL,NULL), - (7,4,1,'a_b',181,'Child of',115,'Parent of',1,NULL,NULL,NULL), - (8,4,1,'b_a',115,'Parent of',181,'Child of',1,NULL,NULL,NULL), - (9,5,4,'a_b',181,'Sibling of',47,'Sibling of',1,NULL,NULL,NULL), - (10,5,4,'b_a',47,'Sibling of',181,'Sibling of',1,NULL,NULL,NULL), - (11,6,8,'a_b',115,'Household Member of',113,'Household Member is',1,NULL,NULL,NULL), - (12,6,8,'b_a',113,'Household Member is',115,'Household Member of',1,NULL,NULL,NULL), - (13,7,8,'a_b',47,'Household Member of',113,'Household Member is',1,NULL,NULL,NULL), - (14,7,8,'b_a',113,'Household Member is',47,'Household Member of',1,NULL,NULL,NULL), - (15,8,8,'a_b',181,'Household Member of',113,'Household Member is',1,NULL,NULL,NULL), - (16,8,8,'b_a',113,'Household Member is',181,'Household Member of',1,NULL,NULL,NULL), - (17,9,7,'a_b',144,'Head of Household for',113,'Head of Household is',1,NULL,NULL,NULL), - (18,9,7,'b_a',113,'Head of Household is',144,'Head of Household for',1,NULL,NULL,NULL), - (19,10,2,'a_b',115,'Spouse of',144,'Spouse of',1,NULL,NULL,NULL), - (20,10,2,'b_a',144,'Spouse of',115,'Spouse of',1,NULL,NULL,NULL), - (21,11,1,'a_b',143,'Child of',57,'Parent of',1,NULL,NULL,NULL), - (22,11,1,'b_a',57,'Parent of',143,'Child of',1,NULL,NULL,NULL), - (23,12,1,'a_b',5,'Child of',57,'Parent of',1,NULL,NULL,NULL), - (24,12,1,'b_a',57,'Parent of',5,'Child of',1,NULL,NULL,NULL), - (25,13,1,'a_b',143,'Child of',73,'Parent of',1,NULL,NULL,NULL), - (26,13,1,'b_a',73,'Parent of',143,'Child of',1,NULL,NULL,NULL), - (27,14,1,'a_b',5,'Child of',73,'Parent of',1,NULL,NULL,NULL), - (28,14,1,'b_a',73,'Parent of',5,'Child of',1,NULL,NULL,NULL), - (29,15,4,'a_b',5,'Sibling of',143,'Sibling of',1,NULL,NULL,NULL), - (30,15,4,'b_a',143,'Sibling of',5,'Sibling of',1,NULL,NULL,NULL), - (31,16,8,'a_b',73,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (32,16,8,'b_a',191,'Household Member is',73,'Household Member of',1,NULL,NULL,NULL), - (33,17,8,'a_b',143,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (34,17,8,'b_a',191,'Household Member is',143,'Household Member of',1,NULL,NULL,NULL), - (35,18,8,'a_b',5,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (36,18,8,'b_a',191,'Household Member is',5,'Household Member of',1,NULL,NULL,NULL), - (37,19,7,'a_b',57,'Head of Household for',191,'Head of Household is',1,NULL,NULL,NULL), - (38,19,7,'b_a',191,'Head of Household is',57,'Head of Household for',1,NULL,NULL,NULL), - (39,20,2,'a_b',73,'Spouse of',57,'Spouse of',1,NULL,NULL,NULL), - (40,20,2,'b_a',57,'Spouse of',73,'Spouse of',1,NULL,NULL,NULL), - (41,21,1,'a_b',31,'Child of',51,'Parent of',1,NULL,NULL,NULL), - (42,21,1,'b_a',51,'Parent of',31,'Child of',1,NULL,NULL,NULL), - (43,22,1,'a_b',28,'Child of',51,'Parent of',1,NULL,NULL,NULL), - (44,22,1,'b_a',51,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (45,23,1,'a_b',31,'Child of',100,'Parent of',1,NULL,NULL,NULL), - (46,23,1,'b_a',100,'Parent of',31,'Child of',1,NULL,NULL,NULL), - (47,24,1,'a_b',28,'Child of',100,'Parent of',1,NULL,NULL,NULL), - (48,24,1,'b_a',100,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (49,25,4,'a_b',28,'Sibling of',31,'Sibling of',1,NULL,NULL,NULL), - (50,25,4,'b_a',31,'Sibling of',28,'Sibling of',1,NULL,NULL,NULL), - (51,26,8,'a_b',100,'Household Member of',45,'Household Member is',1,NULL,NULL,NULL), - (52,26,8,'b_a',45,'Household Member is',100,'Household Member of',1,NULL,NULL,NULL), - (53,27,8,'a_b',31,'Household Member of',45,'Household Member is',1,NULL,NULL,NULL), - (54,27,8,'b_a',45,'Household Member is',31,'Household Member of',1,NULL,NULL,NULL), - (55,28,8,'a_b',28,'Household Member of',45,'Household Member is',1,NULL,NULL,NULL), - (56,28,8,'b_a',45,'Household Member is',28,'Household Member of',1,NULL,NULL,NULL), - (57,29,7,'a_b',51,'Head of Household for',45,'Head of Household is',1,NULL,NULL,NULL), - (58,29,7,'b_a',45,'Head of Household is',51,'Head of Household for',1,NULL,NULL,NULL), - (59,30,2,'a_b',100,'Spouse of',51,'Spouse of',1,NULL,NULL,NULL), - (60,30,2,'b_a',51,'Spouse of',100,'Spouse of',1,NULL,NULL,NULL), - (61,31,1,'a_b',185,'Child of',138,'Parent of',1,NULL,NULL,NULL), - (62,31,1,'b_a',138,'Parent of',185,'Child of',1,NULL,NULL,NULL), - (63,32,1,'a_b',166,'Child of',138,'Parent of',1,NULL,NULL,NULL), - (64,32,1,'b_a',138,'Parent of',166,'Child of',1,NULL,NULL,NULL), - (65,33,1,'a_b',185,'Child of',141,'Parent of',1,NULL,NULL,NULL), - (66,33,1,'b_a',141,'Parent of',185,'Child of',1,NULL,NULL,NULL), - (67,34,1,'a_b',166,'Child of',141,'Parent of',1,NULL,NULL,NULL), - (68,34,1,'b_a',141,'Parent of',166,'Child of',1,NULL,NULL,NULL), - (69,35,4,'a_b',166,'Sibling of',185,'Sibling of',1,NULL,NULL,NULL), - (70,35,4,'b_a',185,'Sibling of',166,'Sibling of',1,NULL,NULL,NULL), - (71,36,8,'a_b',141,'Household Member of',201,'Household Member is',1,NULL,NULL,NULL), - (72,36,8,'b_a',201,'Household Member is',141,'Household Member of',1,NULL,NULL,NULL), - (73,37,8,'a_b',185,'Household Member of',201,'Household Member is',1,NULL,NULL,NULL), - (74,37,8,'b_a',201,'Household Member is',185,'Household Member of',1,NULL,NULL,NULL), - (75,38,8,'a_b',166,'Household Member of',201,'Household Member is',1,NULL,NULL,NULL), - (76,38,8,'b_a',201,'Household Member is',166,'Household Member of',1,NULL,NULL,NULL), - (77,39,7,'a_b',138,'Head of Household for',201,'Head of Household is',1,NULL,NULL,NULL), - (78,39,7,'b_a',201,'Head of Household is',138,'Head of Household for',1,NULL,NULL,NULL), - (79,40,2,'a_b',141,'Spouse of',138,'Spouse of',1,NULL,NULL,NULL), - (80,40,2,'b_a',138,'Spouse of',141,'Spouse of',1,NULL,NULL,NULL), - (81,41,1,'a_b',125,'Child of',137,'Parent of',1,NULL,NULL,NULL), - (82,41,1,'b_a',137,'Parent of',125,'Child of',1,NULL,NULL,NULL), - (83,42,1,'a_b',130,'Child of',137,'Parent of',1,NULL,NULL,NULL), - (84,42,1,'b_a',137,'Parent of',130,'Child of',1,NULL,NULL,NULL), - (85,43,1,'a_b',125,'Child of',43,'Parent of',1,NULL,NULL,NULL), - (86,43,1,'b_a',43,'Parent of',125,'Child of',1,NULL,NULL,NULL), - (87,44,1,'a_b',130,'Child of',43,'Parent of',1,NULL,NULL,NULL), - (88,44,1,'b_a',43,'Parent of',130,'Child of',1,NULL,NULL,NULL), - (89,45,4,'a_b',130,'Sibling of',125,'Sibling of',1,NULL,NULL,NULL), - (90,45,4,'b_a',125,'Sibling of',130,'Sibling of',1,NULL,NULL,NULL), - (91,46,8,'a_b',43,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (92,46,8,'b_a',8,'Household Member is',43,'Household Member of',1,NULL,NULL,NULL), - (93,47,8,'a_b',125,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (94,47,8,'b_a',8,'Household Member is',125,'Household Member of',1,NULL,NULL,NULL), - (95,48,8,'a_b',130,'Household Member of',8,'Household Member is',1,NULL,NULL,NULL), - (96,48,8,'b_a',8,'Household Member is',130,'Household Member of',1,NULL,NULL,NULL), - (97,49,7,'a_b',137,'Head of Household for',8,'Head of Household is',0,NULL,NULL,NULL), - (98,49,7,'b_a',8,'Head of Household is',137,'Head of Household for',0,NULL,NULL,NULL), - (99,50,2,'a_b',43,'Spouse of',137,'Spouse of',0,NULL,NULL,NULL), - (100,50,2,'b_a',137,'Spouse of',43,'Spouse of',0,NULL,NULL,NULL), - (101,51,1,'a_b',2,'Child of',165,'Parent of',1,NULL,NULL,NULL), - (102,51,1,'b_a',165,'Parent of',2,'Child of',1,NULL,NULL,NULL), - (103,52,1,'a_b',84,'Child of',165,'Parent of',1,NULL,NULL,NULL), - (104,52,1,'b_a',165,'Parent of',84,'Child of',1,NULL,NULL,NULL), - (105,53,1,'a_b',2,'Child of',109,'Parent of',1,NULL,NULL,NULL), - (106,53,1,'b_a',109,'Parent of',2,'Child of',1,NULL,NULL,NULL), - (107,54,1,'a_b',84,'Child of',109,'Parent of',1,NULL,NULL,NULL), - (108,54,1,'b_a',109,'Parent of',84,'Child of',1,NULL,NULL,NULL), - (109,55,4,'a_b',84,'Sibling of',2,'Sibling of',1,NULL,NULL,NULL), - (110,55,4,'b_a',2,'Sibling of',84,'Sibling of',1,NULL,NULL,NULL), - (111,56,8,'a_b',109,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), - (112,56,8,'b_a',56,'Household Member is',109,'Household Member of',1,NULL,NULL,NULL), - (113,57,8,'a_b',2,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), - (114,57,8,'b_a',56,'Household Member is',2,'Household Member of',1,NULL,NULL,NULL), - (115,58,8,'a_b',84,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), - (116,58,8,'b_a',56,'Household Member is',84,'Household Member of',1,NULL,NULL,NULL), - (117,59,7,'a_b',165,'Head of Household for',56,'Head of Household is',1,NULL,NULL,NULL), - (118,59,7,'b_a',56,'Head of Household is',165,'Head of Household for',1,NULL,NULL,NULL), - (119,60,2,'a_b',109,'Spouse of',165,'Spouse of',1,NULL,NULL,NULL), - (120,60,2,'b_a',165,'Spouse of',109,'Spouse of',1,NULL,NULL,NULL), - (121,61,1,'a_b',175,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (122,61,1,'b_a',37,'Parent of',175,'Child of',1,NULL,NULL,NULL), - (123,62,1,'a_b',112,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (124,62,1,'b_a',37,'Parent of',112,'Child of',1,NULL,NULL,NULL), - (125,63,1,'a_b',175,'Child of',107,'Parent of',1,NULL,NULL,NULL), - (126,63,1,'b_a',107,'Parent of',175,'Child of',1,NULL,NULL,NULL), - (127,64,1,'a_b',112,'Child of',107,'Parent of',1,NULL,NULL,NULL), - (128,64,1,'b_a',107,'Parent of',112,'Child of',1,NULL,NULL,NULL), - (129,65,4,'a_b',112,'Sibling of',175,'Sibling of',1,NULL,NULL,NULL), - (130,65,4,'b_a',175,'Sibling of',112,'Sibling of',1,NULL,NULL,NULL), - (131,66,8,'a_b',107,'Household Member of',162,'Household Member is',1,NULL,NULL,NULL), - (132,66,8,'b_a',162,'Household Member is',107,'Household Member of',1,NULL,NULL,NULL), - (133,67,8,'a_b',175,'Household Member of',162,'Household Member is',1,NULL,NULL,NULL), - (134,67,8,'b_a',162,'Household Member is',175,'Household Member of',1,NULL,NULL,NULL), - (135,68,8,'a_b',112,'Household Member of',162,'Household Member is',1,NULL,NULL,NULL), - (136,68,8,'b_a',162,'Household Member is',112,'Household Member of',1,NULL,NULL,NULL), - (137,69,7,'a_b',37,'Head of Household for',162,'Head of Household is',1,NULL,NULL,NULL), - (138,69,7,'b_a',162,'Head of Household is',37,'Head of Household for',1,NULL,NULL,NULL), - (139,70,2,'a_b',107,'Spouse of',37,'Spouse of',1,NULL,NULL,NULL), - (140,70,2,'b_a',37,'Spouse of',107,'Spouse of',1,NULL,NULL,NULL), - (141,71,1,'a_b',65,'Child of',173,'Parent of',1,NULL,NULL,NULL), - (142,71,1,'b_a',173,'Parent of',65,'Child of',1,NULL,NULL,NULL), - (143,72,1,'a_b',91,'Child of',173,'Parent of',1,NULL,NULL,NULL), - (144,72,1,'b_a',173,'Parent of',91,'Child of',1,NULL,NULL,NULL), - (145,73,1,'a_b',65,'Child of',92,'Parent of',1,NULL,NULL,NULL), - (146,73,1,'b_a',92,'Parent of',65,'Child of',1,NULL,NULL,NULL), - (147,74,1,'a_b',91,'Child of',92,'Parent of',1,NULL,NULL,NULL), - (148,74,1,'b_a',92,'Parent of',91,'Child of',1,NULL,NULL,NULL), - (149,75,4,'a_b',91,'Sibling of',65,'Sibling of',1,NULL,NULL,NULL), - (150,75,4,'b_a',65,'Sibling of',91,'Sibling of',1,NULL,NULL,NULL), - (151,76,8,'a_b',92,'Household Member of',59,'Household Member is',1,NULL,NULL,NULL), - (152,76,8,'b_a',59,'Household Member is',92,'Household Member of',1,NULL,NULL,NULL), - (153,77,8,'a_b',65,'Household Member of',59,'Household Member is',1,NULL,NULL,NULL), - (154,77,8,'b_a',59,'Household Member is',65,'Household Member of',1,NULL,NULL,NULL), - (155,78,8,'a_b',91,'Household Member of',59,'Household Member is',1,NULL,NULL,NULL), - (156,78,8,'b_a',59,'Household Member is',91,'Household Member of',1,NULL,NULL,NULL), - (157,79,7,'a_b',173,'Head of Household for',59,'Head of Household is',0,NULL,NULL,NULL), - (158,79,7,'b_a',59,'Head of Household is',173,'Head of Household for',0,NULL,NULL,NULL), - (159,80,2,'a_b',92,'Spouse of',173,'Spouse of',0,NULL,NULL,NULL), - (160,80,2,'b_a',173,'Spouse of',92,'Spouse of',0,NULL,NULL,NULL), - (161,81,1,'a_b',42,'Child of',20,'Parent of',1,NULL,NULL,NULL), - (162,81,1,'b_a',20,'Parent of',42,'Child of',1,NULL,NULL,NULL), - (163,82,1,'a_b',118,'Child of',20,'Parent of',1,NULL,NULL,NULL), - (164,82,1,'b_a',20,'Parent of',118,'Child of',1,NULL,NULL,NULL), - (165,83,1,'a_b',42,'Child of',71,'Parent of',1,NULL,NULL,NULL), - (166,83,1,'b_a',71,'Parent of',42,'Child of',1,NULL,NULL,NULL), - (167,84,1,'a_b',118,'Child of',71,'Parent of',1,NULL,NULL,NULL), - (168,84,1,'b_a',71,'Parent of',118,'Child of',1,NULL,NULL,NULL), - (169,85,4,'a_b',118,'Sibling of',42,'Sibling of',1,NULL,NULL,NULL), - (170,85,4,'b_a',42,'Sibling of',118,'Sibling of',1,NULL,NULL,NULL), - (171,86,8,'a_b',71,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), - (172,86,8,'b_a',14,'Household Member is',71,'Household Member of',1,NULL,NULL,NULL), - (173,87,8,'a_b',42,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), - (174,87,8,'b_a',14,'Household Member is',42,'Household Member of',1,NULL,NULL,NULL), - (175,88,8,'a_b',118,'Household Member of',14,'Household Member is',1,NULL,NULL,NULL), - (176,88,8,'b_a',14,'Household Member is',118,'Household Member of',1,NULL,NULL,NULL), - (177,89,7,'a_b',20,'Head of Household for',14,'Head of Household is',1,NULL,NULL,NULL), - (178,89,7,'b_a',14,'Head of Household is',20,'Head of Household for',1,NULL,NULL,NULL), - (179,90,2,'a_b',71,'Spouse of',20,'Spouse of',1,NULL,NULL,NULL), - (180,90,2,'b_a',20,'Spouse of',71,'Spouse of',1,NULL,NULL,NULL), - (181,91,1,'a_b',66,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (182,91,1,'b_a',132,'Parent of',66,'Child of',1,NULL,NULL,NULL), - (183,92,1,'a_b',169,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (184,92,1,'b_a',132,'Parent of',169,'Child of',1,NULL,NULL,NULL), - (185,93,1,'a_b',66,'Child of',23,'Parent of',1,NULL,NULL,NULL), - (186,93,1,'b_a',23,'Parent of',66,'Child of',1,NULL,NULL,NULL), - (187,94,1,'a_b',169,'Child of',23,'Parent of',1,NULL,NULL,NULL), - (188,94,1,'b_a',23,'Parent of',169,'Child of',1,NULL,NULL,NULL), - (189,95,4,'a_b',169,'Sibling of',66,'Sibling of',1,NULL,NULL,NULL), - (190,95,4,'b_a',66,'Sibling of',169,'Sibling of',1,NULL,NULL,NULL), - (191,96,8,'a_b',23,'Household Member of',153,'Household Member is',1,NULL,NULL,NULL), - (192,96,8,'b_a',153,'Household Member is',23,'Household Member of',1,NULL,NULL,NULL), - (193,97,8,'a_b',66,'Household Member of',153,'Household Member is',1,NULL,NULL,NULL), - (194,97,8,'b_a',153,'Household Member is',66,'Household Member of',1,NULL,NULL,NULL), - (195,98,8,'a_b',169,'Household Member of',153,'Household Member is',1,NULL,NULL,NULL), - (196,98,8,'b_a',153,'Household Member is',169,'Household Member of',1,NULL,NULL,NULL), - (197,99,7,'a_b',132,'Head of Household for',153,'Head of Household is',1,NULL,NULL,NULL), - (198,99,7,'b_a',153,'Head of Household is',132,'Head of Household for',1,NULL,NULL,NULL), - (199,100,2,'a_b',23,'Spouse of',132,'Spouse of',1,NULL,NULL,NULL), - (200,100,2,'b_a',132,'Spouse of',23,'Spouse of',1,NULL,NULL,NULL), - (201,101,1,'a_b',60,'Child of',26,'Parent of',1,NULL,NULL,NULL), - (202,101,1,'b_a',26,'Parent of',60,'Child of',1,NULL,NULL,NULL), - (203,102,1,'a_b',33,'Child of',26,'Parent of',1,NULL,NULL,NULL), - (204,102,1,'b_a',26,'Parent of',33,'Child of',1,NULL,NULL,NULL), - (205,103,1,'a_b',60,'Child of',187,'Parent of',1,NULL,NULL,NULL), - (206,103,1,'b_a',187,'Parent of',60,'Child of',1,NULL,NULL,NULL), - (207,104,1,'a_b',33,'Child of',187,'Parent of',1,NULL,NULL,NULL), - (208,104,1,'b_a',187,'Parent of',33,'Child of',1,NULL,NULL,NULL), - (209,105,4,'a_b',33,'Sibling of',60,'Sibling of',1,NULL,NULL,NULL), - (210,105,4,'b_a',60,'Sibling of',33,'Sibling of',1,NULL,NULL,NULL), - (211,106,8,'a_b',187,'Household Member of',81,'Household Member is',1,NULL,NULL,NULL), - (212,106,8,'b_a',81,'Household Member is',187,'Household Member of',1,NULL,NULL,NULL), - (213,107,8,'a_b',60,'Household Member of',81,'Household Member is',1,NULL,NULL,NULL), - (214,107,8,'b_a',81,'Household Member is',60,'Household Member of',1,NULL,NULL,NULL), - (215,108,8,'a_b',33,'Household Member of',81,'Household Member is',1,NULL,NULL,NULL), - (216,108,8,'b_a',81,'Household Member is',33,'Household Member of',1,NULL,NULL,NULL), - (217,109,7,'a_b',26,'Head of Household for',81,'Head of Household is',0,NULL,NULL,NULL), - (218,109,7,'b_a',81,'Head of Household is',26,'Head of Household for',0,NULL,NULL,NULL), - (219,110,2,'a_b',187,'Spouse of',26,'Spouse of',0,NULL,NULL,NULL), - (220,110,2,'b_a',26,'Spouse of',187,'Spouse of',0,NULL,NULL,NULL), - (221,111,1,'a_b',148,'Child of',124,'Parent of',1,NULL,NULL,NULL), - (222,111,1,'b_a',124,'Parent of',148,'Child of',1,NULL,NULL,NULL), - (223,112,1,'a_b',32,'Child of',124,'Parent of',1,NULL,NULL,NULL), - (224,112,1,'b_a',124,'Parent of',32,'Child of',1,NULL,NULL,NULL), - (225,113,1,'a_b',148,'Child of',152,'Parent of',1,NULL,NULL,NULL), - (226,113,1,'b_a',152,'Parent of',148,'Child of',1,NULL,NULL,NULL), - (227,114,1,'a_b',32,'Child of',152,'Parent of',1,NULL,NULL,NULL), - (228,114,1,'b_a',152,'Parent of',32,'Child of',1,NULL,NULL,NULL), - (229,115,4,'a_b',32,'Sibling of',148,'Sibling of',1,NULL,NULL,NULL), - (230,115,4,'b_a',148,'Sibling of',32,'Sibling of',1,NULL,NULL,NULL), - (231,116,8,'a_b',152,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (232,116,8,'b_a',108,'Household Member is',152,'Household Member of',1,NULL,NULL,NULL), - (233,117,8,'a_b',148,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (234,117,8,'b_a',108,'Household Member is',148,'Household Member of',1,NULL,NULL,NULL), - (235,118,8,'a_b',32,'Household Member of',108,'Household Member is',1,NULL,NULL,NULL), - (236,118,8,'b_a',108,'Household Member is',32,'Household Member of',1,NULL,NULL,NULL), - (237,119,7,'a_b',124,'Head of Household for',108,'Head of Household is',1,NULL,NULL,NULL), - (238,119,7,'b_a',108,'Head of Household is',124,'Head of Household for',1,NULL,NULL,NULL), - (239,120,2,'a_b',152,'Spouse of',124,'Spouse of',1,NULL,NULL,NULL), - (240,120,2,'b_a',124,'Spouse of',152,'Spouse of',1,NULL,NULL,NULL), - (241,121,1,'a_b',7,'Child of',158,'Parent of',1,NULL,NULL,NULL), - (242,121,1,'b_a',158,'Parent of',7,'Child of',1,NULL,NULL,NULL), - (243,122,1,'a_b',150,'Child of',158,'Parent of',1,NULL,NULL,NULL), - (244,122,1,'b_a',158,'Parent of',150,'Child of',1,NULL,NULL,NULL), - (245,123,1,'a_b',7,'Child of',190,'Parent of',1,NULL,NULL,NULL), - (246,123,1,'b_a',190,'Parent of',7,'Child of',1,NULL,NULL,NULL), - (247,124,1,'a_b',150,'Child of',190,'Parent of',1,NULL,NULL,NULL), - (248,124,1,'b_a',190,'Parent of',150,'Child of',1,NULL,NULL,NULL), - (249,125,4,'a_b',150,'Sibling of',7,'Sibling of',1,NULL,NULL,NULL), - (250,125,4,'b_a',7,'Sibling of',150,'Sibling of',1,NULL,NULL,NULL), - (251,126,8,'a_b',190,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), - (252,126,8,'b_a',55,'Household Member is',190,'Household Member of',1,NULL,NULL,NULL), - (253,127,8,'a_b',7,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), - (254,127,8,'b_a',55,'Household Member is',7,'Household Member of',1,NULL,NULL,NULL), - (255,128,8,'a_b',150,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), - (256,128,8,'b_a',55,'Household Member is',150,'Household Member of',1,NULL,NULL,NULL), - (257,129,7,'a_b',158,'Head of Household for',55,'Head of Household is',0,NULL,NULL,NULL), - (258,129,7,'b_a',55,'Head of Household is',158,'Head of Household for',0,NULL,NULL,NULL), - (259,130,2,'a_b',190,'Spouse of',158,'Spouse of',0,NULL,NULL,NULL), - (260,130,2,'b_a',158,'Spouse of',190,'Spouse of',0,NULL,NULL,NULL), - (261,131,1,'a_b',98,'Child of',105,'Parent of',1,NULL,NULL,NULL), - (262,131,1,'b_a',105,'Parent of',98,'Child of',1,NULL,NULL,NULL), - (263,132,1,'a_b',103,'Child of',105,'Parent of',1,NULL,NULL,NULL), - (264,132,1,'b_a',105,'Parent of',103,'Child of',1,NULL,NULL,NULL), - (265,133,1,'a_b',98,'Child of',44,'Parent of',1,NULL,NULL,NULL), - (266,133,1,'b_a',44,'Parent of',98,'Child of',1,NULL,NULL,NULL), - (267,134,1,'a_b',103,'Child of',44,'Parent of',1,NULL,NULL,NULL), - (268,134,1,'b_a',44,'Parent of',103,'Child of',1,NULL,NULL,NULL), - (269,135,4,'a_b',103,'Sibling of',98,'Sibling of',1,NULL,NULL,NULL), - (270,135,4,'b_a',98,'Sibling of',103,'Sibling of',1,NULL,NULL,NULL), - (271,136,8,'a_b',44,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), - (272,136,8,'b_a',128,'Household Member is',44,'Household Member of',1,NULL,NULL,NULL), - (273,137,8,'a_b',98,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), - (274,137,8,'b_a',128,'Household Member is',98,'Household Member of',1,NULL,NULL,NULL), - (275,138,8,'a_b',103,'Household Member of',128,'Household Member is',1,NULL,NULL,NULL), - (276,138,8,'b_a',128,'Household Member is',103,'Household Member of',1,NULL,NULL,NULL), - (277,139,7,'a_b',105,'Head of Household for',128,'Head of Household is',0,NULL,NULL,NULL), - (278,139,7,'b_a',128,'Head of Household is',105,'Head of Household for',0,NULL,NULL,NULL), - (279,140,2,'a_b',44,'Spouse of',105,'Spouse of',0,NULL,NULL,NULL), - (280,140,2,'b_a',105,'Spouse of',44,'Spouse of',0,NULL,NULL,NULL), - (281,141,1,'a_b',67,'Child of',63,'Parent of',1,NULL,NULL,NULL), - (282,141,1,'b_a',63,'Parent of',67,'Child of',1,NULL,NULL,NULL), - (283,142,1,'a_b',178,'Child of',63,'Parent of',1,NULL,NULL,NULL), - (284,142,1,'b_a',63,'Parent of',178,'Child of',1,NULL,NULL,NULL), - (285,143,1,'a_b',67,'Child of',184,'Parent of',1,NULL,NULL,NULL), - (286,143,1,'b_a',184,'Parent of',67,'Child of',1,NULL,NULL,NULL), - (287,144,1,'a_b',178,'Child of',184,'Parent of',1,NULL,NULL,NULL), - (288,144,1,'b_a',184,'Parent of',178,'Child of',1,NULL,NULL,NULL), - (289,145,4,'a_b',178,'Sibling of',67,'Sibling of',1,NULL,NULL,NULL), - (290,145,4,'b_a',67,'Sibling of',178,'Sibling of',1,NULL,NULL,NULL), - (291,146,8,'a_b',184,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), - (292,146,8,'b_a',85,'Household Member is',184,'Household Member of',1,NULL,NULL,NULL), - (293,147,8,'a_b',67,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), - (294,147,8,'b_a',85,'Household Member is',67,'Household Member of',1,NULL,NULL,NULL), - (295,148,8,'a_b',178,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), - (296,148,8,'b_a',85,'Household Member is',178,'Household Member of',1,NULL,NULL,NULL), - (297,149,7,'a_b',63,'Head of Household for',85,'Head of Household is',1,NULL,NULL,NULL), - (298,149,7,'b_a',85,'Head of Household is',63,'Head of Household for',1,NULL,NULL,NULL), - (299,150,2,'a_b',184,'Spouse of',63,'Spouse of',1,NULL,NULL,NULL), - (300,150,2,'b_a',63,'Spouse of',184,'Spouse of',1,NULL,NULL,NULL), - (301,151,1,'a_b',177,'Child of',104,'Parent of',1,NULL,NULL,NULL), - (302,151,1,'b_a',104,'Parent of',177,'Child of',1,NULL,NULL,NULL), - (303,152,1,'a_b',146,'Child of',104,'Parent of',1,NULL,NULL,NULL), - (304,152,1,'b_a',104,'Parent of',146,'Child of',1,NULL,NULL,NULL), - (305,153,1,'a_b',177,'Child of',68,'Parent of',1,NULL,NULL,NULL), - (306,153,1,'b_a',68,'Parent of',177,'Child of',1,NULL,NULL,NULL), - (307,154,1,'a_b',146,'Child of',68,'Parent of',1,NULL,NULL,NULL), - (308,154,1,'b_a',68,'Parent of',146,'Child of',1,NULL,NULL,NULL), - (309,155,4,'a_b',146,'Sibling of',177,'Sibling of',1,NULL,NULL,NULL), - (310,155,4,'b_a',177,'Sibling of',146,'Sibling of',1,NULL,NULL,NULL), - (311,156,8,'a_b',68,'Household Member of',174,'Household Member is',1,NULL,NULL,NULL), - (312,156,8,'b_a',174,'Household Member is',68,'Household Member of',1,NULL,NULL,NULL), - (313,157,8,'a_b',177,'Household Member of',174,'Household Member is',1,NULL,NULL,NULL), - (314,157,8,'b_a',174,'Household Member is',177,'Household Member of',1,NULL,NULL,NULL), - (315,158,8,'a_b',146,'Household Member of',174,'Household Member is',1,NULL,NULL,NULL), - (316,158,8,'b_a',174,'Household Member is',146,'Household Member of',1,NULL,NULL,NULL), - (317,159,7,'a_b',104,'Head of Household for',174,'Head of Household is',0,NULL,NULL,NULL), - (318,159,7,'b_a',174,'Head of Household is',104,'Head of Household for',0,NULL,NULL,NULL), - (319,160,2,'a_b',68,'Spouse of',104,'Spouse of',0,NULL,NULL,NULL), - (320,160,2,'b_a',104,'Spouse of',68,'Spouse of',0,NULL,NULL,NULL), - (321,161,1,'a_b',171,'Child of',195,'Parent of',1,NULL,NULL,NULL), - (322,161,1,'b_a',195,'Parent of',171,'Child of',1,NULL,NULL,NULL), - (323,162,1,'a_b',192,'Child of',195,'Parent of',1,NULL,NULL,NULL), - (324,162,1,'b_a',195,'Parent of',192,'Child of',1,NULL,NULL,NULL), - (325,163,1,'a_b',171,'Child of',120,'Parent of',1,NULL,NULL,NULL), - (326,163,1,'b_a',120,'Parent of',171,'Child of',1,NULL,NULL,NULL), - (327,164,1,'a_b',192,'Child of',120,'Parent of',1,NULL,NULL,NULL), - (328,164,1,'b_a',120,'Parent of',192,'Child of',1,NULL,NULL,NULL), - (329,165,4,'a_b',192,'Sibling of',171,'Sibling of',1,NULL,NULL,NULL), - (330,165,4,'b_a',171,'Sibling of',192,'Sibling of',1,NULL,NULL,NULL), - (331,166,8,'a_b',120,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), - (332,166,8,'b_a',167,'Household Member is',120,'Household Member of',1,NULL,NULL,NULL), - (333,167,8,'a_b',171,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), - (334,167,8,'b_a',167,'Household Member is',171,'Household Member of',1,NULL,NULL,NULL), - (335,168,8,'a_b',192,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), - (336,168,8,'b_a',167,'Household Member is',192,'Household Member of',1,NULL,NULL,NULL), - (337,169,7,'a_b',195,'Head of Household for',167,'Head of Household is',1,NULL,NULL,NULL), - (338,169,7,'b_a',167,'Head of Household is',195,'Head of Household for',1,NULL,NULL,NULL), - (339,170,2,'a_b',120,'Spouse of',195,'Spouse of',1,NULL,NULL,NULL), - (340,170,2,'b_a',195,'Spouse of',120,'Spouse of',1,NULL,NULL,NULL), - (341,171,1,'a_b',82,'Child of',35,'Parent of',1,NULL,NULL,NULL), - (342,171,1,'b_a',35,'Parent of',82,'Child of',1,NULL,NULL,NULL), - (343,172,1,'a_b',176,'Child of',35,'Parent of',1,NULL,NULL,NULL), - (344,172,1,'b_a',35,'Parent of',176,'Child of',1,NULL,NULL,NULL), - (345,173,1,'a_b',82,'Child of',83,'Parent of',1,NULL,NULL,NULL), - (346,173,1,'b_a',83,'Parent of',82,'Child of',1,NULL,NULL,NULL), - (347,174,1,'a_b',176,'Child of',83,'Parent of',1,NULL,NULL,NULL), - (348,174,1,'b_a',83,'Parent of',176,'Child of',1,NULL,NULL,NULL), - (349,175,4,'a_b',176,'Sibling of',82,'Sibling of',1,NULL,NULL,NULL), - (350,175,4,'b_a',82,'Sibling of',176,'Sibling of',1,NULL,NULL,NULL), - (351,176,8,'a_b',83,'Household Member of',21,'Household Member is',1,NULL,NULL,NULL), - (352,176,8,'b_a',21,'Household Member is',83,'Household Member of',1,NULL,NULL,NULL), - (353,177,8,'a_b',82,'Household Member of',21,'Household Member is',1,NULL,NULL,NULL), - (354,177,8,'b_a',21,'Household Member is',82,'Household Member of',1,NULL,NULL,NULL), - (355,178,8,'a_b',176,'Household Member of',21,'Household Member is',1,NULL,NULL,NULL), - (356,178,8,'b_a',21,'Household Member is',176,'Household Member of',1,NULL,NULL,NULL), - (357,179,7,'a_b',35,'Head of Household for',21,'Head of Household is',0,NULL,NULL,NULL), - (358,179,7,'b_a',21,'Head of Household is',35,'Head of Household for',0,NULL,NULL,NULL), - (359,180,2,'a_b',83,'Spouse of',35,'Spouse of',0,NULL,NULL,NULL), - (360,180,2,'b_a',35,'Spouse of',83,'Spouse of',0,NULL,NULL,NULL), - (361,181,1,'a_b',119,'Child of',6,'Parent of',1,NULL,NULL,NULL), - (362,181,1,'b_a',6,'Parent of',119,'Child of',1,NULL,NULL,NULL), - (363,182,1,'a_b',140,'Child of',6,'Parent of',1,NULL,NULL,NULL), - (364,182,1,'b_a',6,'Parent of',140,'Child of',1,NULL,NULL,NULL), - (365,183,1,'a_b',119,'Child of',179,'Parent of',1,NULL,NULL,NULL), - (366,183,1,'b_a',179,'Parent of',119,'Child of',1,NULL,NULL,NULL), - (367,184,1,'a_b',140,'Child of',179,'Parent of',1,NULL,NULL,NULL), - (368,184,1,'b_a',179,'Parent of',140,'Child of',1,NULL,NULL,NULL), - (369,185,4,'a_b',140,'Sibling of',119,'Sibling of',1,NULL,NULL,NULL), - (370,185,4,'b_a',119,'Sibling of',140,'Sibling of',1,NULL,NULL,NULL), - (371,186,8,'a_b',179,'Household Member of',77,'Household Member is',1,NULL,NULL,NULL), - (372,186,8,'b_a',77,'Household Member is',179,'Household Member of',1,NULL,NULL,NULL), - (373,187,8,'a_b',119,'Household Member of',77,'Household Member is',1,NULL,NULL,NULL), - (374,187,8,'b_a',77,'Household Member is',119,'Household Member of',1,NULL,NULL,NULL), - (375,188,8,'a_b',140,'Household Member of',77,'Household Member is',1,NULL,NULL,NULL), - (376,188,8,'b_a',77,'Household Member is',140,'Household Member of',1,NULL,NULL,NULL), - (377,189,7,'a_b',6,'Head of Household for',77,'Head of Household is',0,NULL,NULL,NULL), - (378,189,7,'b_a',77,'Head of Household is',6,'Head of Household for',0,NULL,NULL,NULL), - (379,190,2,'a_b',179,'Spouse of',6,'Spouse of',0,NULL,NULL,NULL), - (380,190,2,'b_a',6,'Spouse of',179,'Spouse of',0,NULL,NULL,NULL), - (381,191,1,'a_b',11,'Child of',86,'Parent of',1,NULL,NULL,NULL), - (382,191,1,'b_a',86,'Parent of',11,'Child of',1,NULL,NULL,NULL), - (383,192,1,'a_b',117,'Child of',86,'Parent of',1,NULL,NULL,NULL), - (384,192,1,'b_a',86,'Parent of',117,'Child of',1,NULL,NULL,NULL), - (385,193,1,'a_b',11,'Child of',200,'Parent of',1,NULL,NULL,NULL), - (386,193,1,'b_a',200,'Parent of',11,'Child of',1,NULL,NULL,NULL), - (387,194,1,'a_b',117,'Child of',200,'Parent of',1,NULL,NULL,NULL), - (388,194,1,'b_a',200,'Parent of',117,'Child of',1,NULL,NULL,NULL), - (389,195,4,'a_b',117,'Sibling of',11,'Sibling of',1,NULL,NULL,NULL), - (390,195,4,'b_a',11,'Sibling of',117,'Sibling of',1,NULL,NULL,NULL), - (391,196,8,'a_b',200,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), - (392,196,8,'b_a',75,'Household Member is',200,'Household Member of',1,NULL,NULL,NULL), - (393,197,8,'a_b',11,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), - (394,197,8,'b_a',75,'Household Member is',11,'Household Member of',1,NULL,NULL,NULL), - (395,198,8,'a_b',117,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), - (396,198,8,'b_a',75,'Household Member is',117,'Household Member of',1,NULL,NULL,NULL), - (397,199,7,'a_b',86,'Head of Household for',75,'Head of Household is',0,NULL,NULL,NULL), - (398,199,7,'b_a',75,'Head of Household is',86,'Head of Household for',0,NULL,NULL,NULL), - (399,200,2,'a_b',200,'Spouse of',86,'Spouse of',0,NULL,NULL,NULL), - (400,200,2,'b_a',86,'Spouse of',200,'Spouse of',0,NULL,NULL,NULL), - (401,201,5,'a_b',166,'Employee of',15,'Employer of',1,NULL,NULL,NULL), - (402,201,5,'b_a',15,'Employer of',166,'Employee of',1,NULL,NULL,NULL), - (403,202,5,'a_b',165,'Employee of',52,'Employer of',1,NULL,NULL,NULL), - (404,202,5,'b_a',52,'Employer of',165,'Employee of',1,NULL,NULL,NULL), - (405,203,5,'a_b',29,'Employee of',54,'Employer of',1,NULL,NULL,NULL), - (406,203,5,'b_a',54,'Employer of',29,'Employee of',1,NULL,NULL,NULL), - (407,204,5,'a_b',189,'Employee of',74,'Employer of',1,NULL,NULL,NULL), - (408,204,5,'b_a',74,'Employer of',189,'Employee of',1,NULL,NULL,NULL), - (409,205,5,'a_b',133,'Employee of',96,'Employer of',1,NULL,NULL,NULL), - (410,205,5,'b_a',96,'Employer of',133,'Employee of',1,NULL,NULL,NULL), - (411,206,5,'a_b',38,'Employee of',99,'Employer of',1,NULL,NULL,NULL), - (412,206,5,'b_a',99,'Employer of',38,'Employee of',1,NULL,NULL,NULL), - (413,207,5,'a_b',19,'Employee of',101,'Employer of',1,NULL,NULL,NULL), - (414,207,5,'b_a',101,'Employer of',19,'Employee of',1,NULL,NULL,NULL), - (415,208,5,'a_b',181,'Employee of',111,'Employer of',1,NULL,NULL,NULL), - (416,208,5,'b_a',111,'Employer of',181,'Employee of',1,NULL,NULL,NULL), - (417,209,5,'a_b',4,'Employee of',126,'Employer of',1,NULL,NULL,NULL), - (418,209,5,'b_a',126,'Employer of',4,'Employee of',1,NULL,NULL,NULL), - (419,210,5,'a_b',112,'Employee of',139,'Employer of',1,NULL,NULL,NULL), - (420,210,5,'b_a',139,'Employer of',112,'Employee of',1,NULL,NULL,NULL), - (421,211,5,'a_b',61,'Employee of',156,'Employer of',1,NULL,NULL,NULL), - (422,211,5,'b_a',156,'Employer of',61,'Employee of',1,NULL,NULL,NULL), - (423,212,5,'a_b',159,'Employee of',160,'Employer of',1,NULL,NULL,NULL), - (424,212,5,'b_a',160,'Employer of',159,'Employee of',1,NULL,NULL,NULL), - (425,213,5,'a_b',53,'Employee of',164,'Employer of',1,NULL,NULL,NULL), - (426,213,5,'b_a',164,'Employer of',53,'Employee of',1,NULL,NULL,NULL), - (427,214,5,'a_b',140,'Employee of',168,'Employer of',1,NULL,NULL,NULL), - (428,214,5,'b_a',168,'Employer of',140,'Employee of',1,NULL,NULL,NULL), - (429,215,5,'a_b',106,'Employee of',183,'Employer of',1,NULL,NULL,NULL), - (430,215,5,'b_a',183,'Employer of',106,'Employee of',1,NULL,NULL,NULL), - (431,216,5,'a_b',66,'Employee of',194,'Employer of',1,NULL,NULL,NULL), - (432,216,5,'b_a',194,'Employer of',66,'Employee of',1,NULL,NULL,NULL); + (1,1,1,'a_b',151,'Child of',161,'Parent of',1,NULL,NULL,NULL), + (2,1,1,'b_a',161,'Parent of',151,'Child of',1,NULL,NULL,NULL), + (3,2,1,'a_b',96,'Child of',161,'Parent of',1,NULL,NULL,NULL), + (4,2,1,'b_a',161,'Parent of',96,'Child of',1,NULL,NULL,NULL), + (5,3,1,'a_b',151,'Child of',144,'Parent of',1,NULL,NULL,NULL), + (6,3,1,'b_a',144,'Parent of',151,'Child of',1,NULL,NULL,NULL), + (7,4,1,'a_b',96,'Child of',144,'Parent of',1,NULL,NULL,NULL), + (8,4,1,'b_a',144,'Parent of',96,'Child of',1,NULL,NULL,NULL), + (9,5,4,'a_b',96,'Sibling of',151,'Sibling of',1,NULL,NULL,NULL), + (10,5,4,'b_a',151,'Sibling of',96,'Sibling of',1,NULL,NULL,NULL), + (11,6,8,'a_b',144,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (12,6,8,'b_a',29,'Household Member is',144,'Household Member of',1,NULL,NULL,NULL), + (13,7,8,'a_b',151,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (14,7,8,'b_a',29,'Household Member is',151,'Household Member of',1,NULL,NULL,NULL), + (15,8,8,'a_b',96,'Household Member of',29,'Household Member is',1,NULL,NULL,NULL), + (16,8,8,'b_a',29,'Household Member is',96,'Household Member of',1,NULL,NULL,NULL), + (17,9,7,'a_b',161,'Head of Household for',29,'Head of Household is',0,NULL,NULL,NULL), + (18,9,7,'b_a',29,'Head of Household is',161,'Head of Household for',0,NULL,NULL,NULL), + (19,10,2,'a_b',144,'Spouse of',161,'Spouse of',0,NULL,NULL,NULL), + (20,10,2,'b_a',161,'Spouse of',144,'Spouse of',0,NULL,NULL,NULL), + (21,11,1,'a_b',172,'Child of',179,'Parent of',1,NULL,NULL,NULL), + (22,11,1,'b_a',179,'Parent of',172,'Child of',1,NULL,NULL,NULL), + (23,12,1,'a_b',39,'Child of',179,'Parent of',1,NULL,NULL,NULL), + (24,12,1,'b_a',179,'Parent of',39,'Child of',1,NULL,NULL,NULL), + (25,13,1,'a_b',172,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (26,13,1,'b_a',63,'Parent of',172,'Child of',1,NULL,NULL,NULL), + (27,14,1,'a_b',39,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (28,14,1,'b_a',63,'Parent of',39,'Child of',1,NULL,NULL,NULL), + (29,15,4,'a_b',39,'Sibling of',172,'Sibling of',1,NULL,NULL,NULL), + (30,15,4,'b_a',172,'Sibling of',39,'Sibling of',1,NULL,NULL,NULL), + (31,16,8,'a_b',63,'Household Member of',27,'Household Member is',1,NULL,NULL,NULL), + (32,16,8,'b_a',27,'Household Member is',63,'Household Member of',1,NULL,NULL,NULL), + (33,17,8,'a_b',172,'Household Member of',27,'Household Member is',1,NULL,NULL,NULL), + (34,17,8,'b_a',27,'Household Member is',172,'Household Member of',1,NULL,NULL,NULL), + (35,18,8,'a_b',39,'Household Member of',27,'Household Member is',1,NULL,NULL,NULL), + (36,18,8,'b_a',27,'Household Member is',39,'Household Member of',1,NULL,NULL,NULL), + (37,19,7,'a_b',179,'Head of Household for',27,'Head of Household is',1,NULL,NULL,NULL), + (38,19,7,'b_a',27,'Head of Household is',179,'Head of Household for',1,NULL,NULL,NULL), + (39,20,2,'a_b',63,'Spouse of',179,'Spouse of',1,NULL,NULL,NULL), + (40,20,2,'b_a',179,'Spouse of',63,'Spouse of',1,NULL,NULL,NULL), + (41,21,1,'a_b',16,'Child of',159,'Parent of',1,NULL,NULL,NULL), + (42,21,1,'b_a',159,'Parent of',16,'Child of',1,NULL,NULL,NULL), + (43,22,1,'a_b',146,'Child of',159,'Parent of',1,NULL,NULL,NULL), + (44,22,1,'b_a',159,'Parent of',146,'Child of',1,NULL,NULL,NULL), + (45,23,1,'a_b',16,'Child of',32,'Parent of',1,NULL,NULL,NULL), + (46,23,1,'b_a',32,'Parent of',16,'Child of',1,NULL,NULL,NULL), + (47,24,1,'a_b',146,'Child of',32,'Parent of',1,NULL,NULL,NULL), + (48,24,1,'b_a',32,'Parent of',146,'Child of',1,NULL,NULL,NULL), + (49,25,4,'a_b',146,'Sibling of',16,'Sibling of',1,NULL,NULL,NULL), + (50,25,4,'b_a',16,'Sibling of',146,'Sibling of',1,NULL,NULL,NULL), + (51,26,8,'a_b',32,'Household Member of',67,'Household Member is',1,NULL,NULL,NULL), + (52,26,8,'b_a',67,'Household Member is',32,'Household Member of',1,NULL,NULL,NULL), + (53,27,8,'a_b',16,'Household Member of',67,'Household Member is',1,NULL,NULL,NULL), + (54,27,8,'b_a',67,'Household Member is',16,'Household Member of',1,NULL,NULL,NULL), + (55,28,8,'a_b',146,'Household Member of',67,'Household Member is',1,NULL,NULL,NULL), + (56,28,8,'b_a',67,'Household Member is',146,'Household Member of',1,NULL,NULL,NULL), + (57,29,7,'a_b',159,'Head of Household for',67,'Head of Household is',1,NULL,NULL,NULL), + (58,29,7,'b_a',67,'Head of Household is',159,'Head of Household for',1,NULL,NULL,NULL), + (59,30,2,'a_b',32,'Spouse of',159,'Spouse of',1,NULL,NULL,NULL), + (60,30,2,'b_a',159,'Spouse of',32,'Spouse of',1,NULL,NULL,NULL), + (61,31,1,'a_b',154,'Child of',105,'Parent of',1,NULL,NULL,NULL), + (62,31,1,'b_a',105,'Parent of',154,'Child of',1,NULL,NULL,NULL), + (63,32,1,'a_b',12,'Child of',105,'Parent of',1,NULL,NULL,NULL), + (64,32,1,'b_a',105,'Parent of',12,'Child of',1,NULL,NULL,NULL), + (65,33,1,'a_b',154,'Child of',83,'Parent of',1,NULL,NULL,NULL), + (66,33,1,'b_a',83,'Parent of',154,'Child of',1,NULL,NULL,NULL), + (67,34,1,'a_b',12,'Child of',83,'Parent of',1,NULL,NULL,NULL), + (68,34,1,'b_a',83,'Parent of',12,'Child of',1,NULL,NULL,NULL), + (69,35,4,'a_b',12,'Sibling of',154,'Sibling of',1,NULL,NULL,NULL), + (70,35,4,'b_a',154,'Sibling of',12,'Sibling of',1,NULL,NULL,NULL), + (71,36,8,'a_b',83,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), + (72,36,8,'b_a',106,'Household Member is',83,'Household Member of',1,NULL,NULL,NULL), + (73,37,8,'a_b',154,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), + (74,37,8,'b_a',106,'Household Member is',154,'Household Member of',1,NULL,NULL,NULL), + (75,38,8,'a_b',12,'Household Member of',106,'Household Member is',1,NULL,NULL,NULL), + (76,38,8,'b_a',106,'Household Member is',12,'Household Member of',1,NULL,NULL,NULL), + (77,39,7,'a_b',105,'Head of Household for',106,'Head of Household is',1,NULL,NULL,NULL), + (78,39,7,'b_a',106,'Head of Household is',105,'Head of Household for',1,NULL,NULL,NULL), + (79,40,2,'a_b',83,'Spouse of',105,'Spouse of',1,NULL,NULL,NULL), + (80,40,2,'b_a',105,'Spouse of',83,'Spouse of',1,NULL,NULL,NULL), + (81,41,1,'a_b',36,'Child of',194,'Parent of',1,NULL,NULL,NULL), + (82,41,1,'b_a',194,'Parent of',36,'Child of',1,NULL,NULL,NULL), + (83,42,1,'a_b',162,'Child of',194,'Parent of',1,NULL,NULL,NULL), + (84,42,1,'b_a',194,'Parent of',162,'Child of',1,NULL,NULL,NULL), + (85,43,1,'a_b',36,'Child of',79,'Parent of',1,NULL,NULL,NULL), + (86,43,1,'b_a',79,'Parent of',36,'Child of',1,NULL,NULL,NULL), + (87,44,1,'a_b',162,'Child of',79,'Parent of',1,NULL,NULL,NULL), + (88,44,1,'b_a',79,'Parent of',162,'Child of',1,NULL,NULL,NULL), + (89,45,4,'a_b',162,'Sibling of',36,'Sibling of',1,NULL,NULL,NULL), + (90,45,4,'b_a',36,'Sibling of',162,'Sibling of',1,NULL,NULL,NULL), + (91,46,8,'a_b',79,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (92,46,8,'b_a',47,'Household Member is',79,'Household Member of',1,NULL,NULL,NULL), + (93,47,8,'a_b',36,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (94,47,8,'b_a',47,'Household Member is',36,'Household Member of',1,NULL,NULL,NULL), + (95,48,8,'a_b',162,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (96,48,8,'b_a',47,'Household Member is',162,'Household Member of',1,NULL,NULL,NULL), + (97,49,7,'a_b',194,'Head of Household for',47,'Head of Household is',0,NULL,NULL,NULL), + (98,49,7,'b_a',47,'Head of Household is',194,'Head of Household for',0,NULL,NULL,NULL), + (99,50,2,'a_b',79,'Spouse of',194,'Spouse of',0,NULL,NULL,NULL), + (100,50,2,'b_a',194,'Spouse of',79,'Spouse of',0,NULL,NULL,NULL), + (101,51,1,'a_b',37,'Child of',69,'Parent of',1,NULL,NULL,NULL), + (102,51,1,'b_a',69,'Parent of',37,'Child of',1,NULL,NULL,NULL), + (103,52,1,'a_b',15,'Child of',69,'Parent of',1,NULL,NULL,NULL), + (104,52,1,'b_a',69,'Parent of',15,'Child of',1,NULL,NULL,NULL), + (105,53,1,'a_b',37,'Child of',170,'Parent of',1,NULL,NULL,NULL), + (106,53,1,'b_a',170,'Parent of',37,'Child of',1,NULL,NULL,NULL), + (107,54,1,'a_b',15,'Child of',170,'Parent of',1,NULL,NULL,NULL), + (108,54,1,'b_a',170,'Parent of',15,'Child of',1,NULL,NULL,NULL), + (109,55,4,'a_b',15,'Sibling of',37,'Sibling of',1,NULL,NULL,NULL), + (110,55,4,'b_a',37,'Sibling of',15,'Sibling of',1,NULL,NULL,NULL), + (111,56,8,'a_b',170,'Household Member of',200,'Household Member is',1,NULL,NULL,NULL), + (112,56,8,'b_a',200,'Household Member is',170,'Household Member of',1,NULL,NULL,NULL), + (113,57,8,'a_b',37,'Household Member of',200,'Household Member is',1,NULL,NULL,NULL), + (114,57,8,'b_a',200,'Household Member is',37,'Household Member of',1,NULL,NULL,NULL), + (115,58,8,'a_b',15,'Household Member of',200,'Household Member is',1,NULL,NULL,NULL), + (116,58,8,'b_a',200,'Household Member is',15,'Household Member of',1,NULL,NULL,NULL), + (117,59,7,'a_b',69,'Head of Household for',200,'Head of Household is',0,NULL,NULL,NULL), + (118,59,7,'b_a',200,'Head of Household is',69,'Head of Household for',0,NULL,NULL,NULL), + (119,60,2,'a_b',170,'Spouse of',69,'Spouse of',0,NULL,NULL,NULL), + (120,60,2,'b_a',69,'Spouse of',170,'Spouse of',0,NULL,NULL,NULL), + (121,61,1,'a_b',186,'Child of',131,'Parent of',1,NULL,NULL,NULL), + (122,61,1,'b_a',131,'Parent of',186,'Child of',1,NULL,NULL,NULL), + (123,62,1,'a_b',112,'Child of',131,'Parent of',1,NULL,NULL,NULL), + (124,62,1,'b_a',131,'Parent of',112,'Child of',1,NULL,NULL,NULL), + (125,63,1,'a_b',186,'Child of',59,'Parent of',1,NULL,NULL,NULL), + (126,63,1,'b_a',59,'Parent of',186,'Child of',1,NULL,NULL,NULL), + (127,64,1,'a_b',112,'Child of',59,'Parent of',1,NULL,NULL,NULL), + (128,64,1,'b_a',59,'Parent of',112,'Child of',1,NULL,NULL,NULL), + (129,65,4,'a_b',112,'Sibling of',186,'Sibling of',1,NULL,NULL,NULL), + (130,65,4,'b_a',186,'Sibling of',112,'Sibling of',1,NULL,NULL,NULL), + (131,66,8,'a_b',59,'Household Member of',103,'Household Member is',1,NULL,NULL,NULL), + (132,66,8,'b_a',103,'Household Member is',59,'Household Member of',1,NULL,NULL,NULL), + (133,67,8,'a_b',186,'Household Member of',103,'Household Member is',1,NULL,NULL,NULL), + (134,67,8,'b_a',103,'Household Member is',186,'Household Member of',1,NULL,NULL,NULL), + (135,68,8,'a_b',112,'Household Member of',103,'Household Member is',1,NULL,NULL,NULL), + (136,68,8,'b_a',103,'Household Member is',112,'Household Member of',1,NULL,NULL,NULL), + (137,69,7,'a_b',131,'Head of Household for',103,'Head of Household is',0,NULL,NULL,NULL), + (138,69,7,'b_a',103,'Head of Household is',131,'Head of Household for',0,NULL,NULL,NULL), + (139,70,2,'a_b',59,'Spouse of',131,'Spouse of',0,NULL,NULL,NULL), + (140,70,2,'b_a',131,'Spouse of',59,'Spouse of',0,NULL,NULL,NULL), + (141,71,1,'a_b',127,'Child of',89,'Parent of',1,NULL,NULL,NULL), + (142,71,1,'b_a',89,'Parent of',127,'Child of',1,NULL,NULL,NULL), + (143,72,1,'a_b',190,'Child of',89,'Parent of',1,NULL,NULL,NULL), + (144,72,1,'b_a',89,'Parent of',190,'Child of',1,NULL,NULL,NULL), + (145,73,1,'a_b',127,'Child of',11,'Parent of',1,NULL,NULL,NULL), + (146,73,1,'b_a',11,'Parent of',127,'Child of',1,NULL,NULL,NULL), + (147,74,1,'a_b',190,'Child of',11,'Parent of',1,NULL,NULL,NULL), + (148,74,1,'b_a',11,'Parent of',190,'Child of',1,NULL,NULL,NULL), + (149,75,4,'a_b',190,'Sibling of',127,'Sibling of',1,NULL,NULL,NULL), + (150,75,4,'b_a',127,'Sibling of',190,'Sibling of',1,NULL,NULL,NULL), + (151,76,8,'a_b',11,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), + (152,76,8,'b_a',75,'Household Member is',11,'Household Member of',1,NULL,NULL,NULL), + (153,77,8,'a_b',127,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), + (154,77,8,'b_a',75,'Household Member is',127,'Household Member of',1,NULL,NULL,NULL), + (155,78,8,'a_b',190,'Household Member of',75,'Household Member is',1,NULL,NULL,NULL), + (156,78,8,'b_a',75,'Household Member is',190,'Household Member of',1,NULL,NULL,NULL), + (157,79,7,'a_b',89,'Head of Household for',75,'Head of Household is',0,NULL,NULL,NULL), + (158,79,7,'b_a',75,'Head of Household is',89,'Head of Household for',0,NULL,NULL,NULL), + (159,80,2,'a_b',11,'Spouse of',89,'Spouse of',0,NULL,NULL,NULL), + (160,80,2,'b_a',89,'Spouse of',11,'Spouse of',0,NULL,NULL,NULL), + (161,81,1,'a_b',2,'Child of',201,'Parent of',1,NULL,NULL,NULL), + (162,81,1,'b_a',201,'Parent of',2,'Child of',1,NULL,NULL,NULL), + (163,82,1,'a_b',188,'Child of',201,'Parent of',1,NULL,NULL,NULL), + (164,82,1,'b_a',201,'Parent of',188,'Child of',1,NULL,NULL,NULL), + (165,83,1,'a_b',2,'Child of',178,'Parent of',1,NULL,NULL,NULL), + (166,83,1,'b_a',178,'Parent of',2,'Child of',1,NULL,NULL,NULL), + (167,84,1,'a_b',188,'Child of',178,'Parent of',1,NULL,NULL,NULL), + (168,84,1,'b_a',178,'Parent of',188,'Child of',1,NULL,NULL,NULL), + (169,85,4,'a_b',188,'Sibling of',2,'Sibling of',1,NULL,NULL,NULL), + (170,85,4,'b_a',2,'Sibling of',188,'Sibling of',1,NULL,NULL,NULL), + (171,86,8,'a_b',178,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), + (172,86,8,'b_a',66,'Household Member is',178,'Household Member of',1,NULL,NULL,NULL), + (173,87,8,'a_b',2,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), + (174,87,8,'b_a',66,'Household Member is',2,'Household Member of',1,NULL,NULL,NULL), + (175,88,8,'a_b',188,'Household Member of',66,'Household Member is',1,NULL,NULL,NULL), + (176,88,8,'b_a',66,'Household Member is',188,'Household Member of',1,NULL,NULL,NULL), + (177,89,7,'a_b',201,'Head of Household for',66,'Head of Household is',1,NULL,NULL,NULL), + (178,89,7,'b_a',66,'Head of Household is',201,'Head of Household for',1,NULL,NULL,NULL), + (179,90,2,'a_b',178,'Spouse of',201,'Spouse of',1,NULL,NULL,NULL), + (180,90,2,'b_a',201,'Spouse of',178,'Spouse of',1,NULL,NULL,NULL), + (181,91,1,'a_b',30,'Child of',26,'Parent of',1,NULL,NULL,NULL), + (182,91,1,'b_a',26,'Parent of',30,'Child of',1,NULL,NULL,NULL), + (183,92,1,'a_b',42,'Child of',26,'Parent of',1,NULL,NULL,NULL), + (184,92,1,'b_a',26,'Parent of',42,'Child of',1,NULL,NULL,NULL), + (185,93,1,'a_b',30,'Child of',20,'Parent of',1,NULL,NULL,NULL), + (186,93,1,'b_a',20,'Parent of',30,'Child of',1,NULL,NULL,NULL), + (187,94,1,'a_b',42,'Child of',20,'Parent of',1,NULL,NULL,NULL), + (188,94,1,'b_a',20,'Parent of',42,'Child of',1,NULL,NULL,NULL), + (189,95,4,'a_b',42,'Sibling of',30,'Sibling of',1,NULL,NULL,NULL), + (190,95,4,'b_a',30,'Sibling of',42,'Sibling of',1,NULL,NULL,NULL), + (191,96,8,'a_b',20,'Household Member of',92,'Household Member is',1,NULL,NULL,NULL), + (192,96,8,'b_a',92,'Household Member is',20,'Household Member of',1,NULL,NULL,NULL), + (193,97,8,'a_b',30,'Household Member of',92,'Household Member is',1,NULL,NULL,NULL), + (194,97,8,'b_a',92,'Household Member is',30,'Household Member of',1,NULL,NULL,NULL), + (195,98,8,'a_b',42,'Household Member of',92,'Household Member is',1,NULL,NULL,NULL), + (196,98,8,'b_a',92,'Household Member is',42,'Household Member of',1,NULL,NULL,NULL), + (197,99,7,'a_b',26,'Head of Household for',92,'Head of Household is',0,NULL,NULL,NULL), + (198,99,7,'b_a',92,'Head of Household is',26,'Head of Household for',0,NULL,NULL,NULL), + (199,100,2,'a_b',20,'Spouse of',26,'Spouse of',0,NULL,NULL,NULL), + (200,100,2,'b_a',26,'Spouse of',20,'Spouse of',0,NULL,NULL,NULL), + (201,101,1,'a_b',122,'Child of',139,'Parent of',1,NULL,NULL,NULL), + (202,101,1,'b_a',139,'Parent of',122,'Child of',1,NULL,NULL,NULL), + (203,102,1,'a_b',13,'Child of',139,'Parent of',1,NULL,NULL,NULL), + (204,102,1,'b_a',139,'Parent of',13,'Child of',1,NULL,NULL,NULL), + (205,103,1,'a_b',122,'Child of',18,'Parent of',1,NULL,NULL,NULL), + (206,103,1,'b_a',18,'Parent of',122,'Child of',1,NULL,NULL,NULL), + (207,104,1,'a_b',13,'Child of',18,'Parent of',1,NULL,NULL,NULL), + (208,104,1,'b_a',18,'Parent of',13,'Child of',1,NULL,NULL,NULL), + (209,105,4,'a_b',13,'Sibling of',122,'Sibling of',1,NULL,NULL,NULL), + (210,105,4,'b_a',122,'Sibling of',13,'Sibling of',1,NULL,NULL,NULL), + (211,106,8,'a_b',18,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), + (212,106,8,'b_a',85,'Household Member is',18,'Household Member of',1,NULL,NULL,NULL), + (213,107,8,'a_b',122,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), + (214,107,8,'b_a',85,'Household Member is',122,'Household Member of',1,NULL,NULL,NULL), + (215,108,8,'a_b',13,'Household Member of',85,'Household Member is',1,NULL,NULL,NULL), + (216,108,8,'b_a',85,'Household Member is',13,'Household Member of',1,NULL,NULL,NULL), + (217,109,7,'a_b',139,'Head of Household for',85,'Head of Household is',1,NULL,NULL,NULL), + (218,109,7,'b_a',85,'Head of Household is',139,'Head of Household for',1,NULL,NULL,NULL), + (219,110,2,'a_b',18,'Spouse of',139,'Spouse of',1,NULL,NULL,NULL), + (220,110,2,'b_a',139,'Spouse of',18,'Spouse of',1,NULL,NULL,NULL), + (221,111,1,'a_b',45,'Child of',99,'Parent of',1,NULL,NULL,NULL), + (222,111,1,'b_a',99,'Parent of',45,'Child of',1,NULL,NULL,NULL), + (223,112,1,'a_b',160,'Child of',99,'Parent of',1,NULL,NULL,NULL), + (224,112,1,'b_a',99,'Parent of',160,'Child of',1,NULL,NULL,NULL), + (225,113,1,'a_b',45,'Child of',100,'Parent of',1,NULL,NULL,NULL), + (226,113,1,'b_a',100,'Parent of',45,'Child of',1,NULL,NULL,NULL), + (227,114,1,'a_b',160,'Child of',100,'Parent of',1,NULL,NULL,NULL), + (228,114,1,'b_a',100,'Parent of',160,'Child of',1,NULL,NULL,NULL), + (229,115,4,'a_b',160,'Sibling of',45,'Sibling of',1,NULL,NULL,NULL), + (230,115,4,'b_a',45,'Sibling of',160,'Sibling of',1,NULL,NULL,NULL), + (231,116,8,'a_b',100,'Household Member of',158,'Household Member is',1,NULL,NULL,NULL), + (232,116,8,'b_a',158,'Household Member is',100,'Household Member of',1,NULL,NULL,NULL), + (233,117,8,'a_b',45,'Household Member of',158,'Household Member is',1,NULL,NULL,NULL), + (234,117,8,'b_a',158,'Household Member is',45,'Household Member of',1,NULL,NULL,NULL), + (235,118,8,'a_b',160,'Household Member of',158,'Household Member is',1,NULL,NULL,NULL), + (236,118,8,'b_a',158,'Household Member is',160,'Household Member of',1,NULL,NULL,NULL), + (237,119,7,'a_b',99,'Head of Household for',158,'Head of Household is',0,NULL,NULL,NULL), + (238,119,7,'b_a',158,'Head of Household is',99,'Head of Household for',0,NULL,NULL,NULL), + (239,120,2,'a_b',100,'Spouse of',99,'Spouse of',0,NULL,NULL,NULL), + (240,120,2,'b_a',99,'Spouse of',100,'Spouse of',0,NULL,NULL,NULL), + (241,121,1,'a_b',102,'Child of',181,'Parent of',1,NULL,NULL,NULL), + (242,121,1,'b_a',181,'Parent of',102,'Child of',1,NULL,NULL,NULL), + (243,122,1,'a_b',156,'Child of',181,'Parent of',1,NULL,NULL,NULL), + (244,122,1,'b_a',181,'Parent of',156,'Child of',1,NULL,NULL,NULL), + (245,123,1,'a_b',102,'Child of',111,'Parent of',1,NULL,NULL,NULL), + (246,123,1,'b_a',111,'Parent of',102,'Child of',1,NULL,NULL,NULL), + (247,124,1,'a_b',156,'Child of',111,'Parent of',1,NULL,NULL,NULL), + (248,124,1,'b_a',111,'Parent of',156,'Child of',1,NULL,NULL,NULL), + (249,125,4,'a_b',156,'Sibling of',102,'Sibling of',1,NULL,NULL,NULL), + (250,125,4,'b_a',102,'Sibling of',156,'Sibling of',1,NULL,NULL,NULL), + (251,126,8,'a_b',111,'Household Member of',57,'Household Member is',1,NULL,NULL,NULL), + (252,126,8,'b_a',57,'Household Member is',111,'Household Member of',1,NULL,NULL,NULL), + (253,127,8,'a_b',102,'Household Member of',57,'Household Member is',1,NULL,NULL,NULL), + (254,127,8,'b_a',57,'Household Member is',102,'Household Member of',1,NULL,NULL,NULL), + (255,128,8,'a_b',156,'Household Member of',57,'Household Member is',1,NULL,NULL,NULL), + (256,128,8,'b_a',57,'Household Member is',156,'Household Member of',1,NULL,NULL,NULL), + (257,129,7,'a_b',181,'Head of Household for',57,'Head of Household is',0,NULL,NULL,NULL), + (258,129,7,'b_a',57,'Head of Household is',181,'Head of Household for',0,NULL,NULL,NULL), + (259,130,2,'a_b',111,'Spouse of',181,'Spouse of',0,NULL,NULL,NULL), + (260,130,2,'b_a',181,'Spouse of',111,'Spouse of',0,NULL,NULL,NULL), + (261,131,1,'a_b',3,'Child of',40,'Parent of',1,NULL,NULL,NULL), + (262,131,1,'b_a',40,'Parent of',3,'Child of',1,NULL,NULL,NULL), + (263,132,1,'a_b',123,'Child of',40,'Parent of',1,NULL,NULL,NULL), + (264,132,1,'b_a',40,'Parent of',123,'Child of',1,NULL,NULL,NULL), + (265,133,1,'a_b',3,'Child of',124,'Parent of',1,NULL,NULL,NULL), + (266,133,1,'b_a',124,'Parent of',3,'Child of',1,NULL,NULL,NULL), + (267,134,1,'a_b',123,'Child of',124,'Parent of',1,NULL,NULL,NULL), + (268,134,1,'b_a',124,'Parent of',123,'Child of',1,NULL,NULL,NULL), + (269,135,4,'a_b',123,'Sibling of',3,'Sibling of',1,NULL,NULL,NULL), + (270,135,4,'b_a',3,'Sibling of',123,'Sibling of',1,NULL,NULL,NULL), + (271,136,8,'a_b',124,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), + (272,136,8,'b_a',182,'Household Member is',124,'Household Member of',1,NULL,NULL,NULL), + (273,137,8,'a_b',3,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), + (274,137,8,'b_a',182,'Household Member is',3,'Household Member of',1,NULL,NULL,NULL), + (275,138,8,'a_b',123,'Household Member of',182,'Household Member is',1,NULL,NULL,NULL), + (276,138,8,'b_a',182,'Household Member is',123,'Household Member of',1,NULL,NULL,NULL), + (277,139,7,'a_b',40,'Head of Household for',182,'Head of Household is',0,NULL,NULL,NULL), + (278,139,7,'b_a',182,'Head of Household is',40,'Head of Household for',0,NULL,NULL,NULL), + (279,140,2,'a_b',124,'Spouse of',40,'Spouse of',0,NULL,NULL,NULL), + (280,140,2,'b_a',40,'Spouse of',124,'Spouse of',0,NULL,NULL,NULL), + (281,141,1,'a_b',145,'Child of',196,'Parent of',1,NULL,NULL,NULL), + (282,141,1,'b_a',196,'Parent of',145,'Child of',1,NULL,NULL,NULL), + (283,142,1,'a_b',60,'Child of',196,'Parent of',1,NULL,NULL,NULL), + (284,142,1,'b_a',196,'Parent of',60,'Child of',1,NULL,NULL,NULL), + (285,143,1,'a_b',145,'Child of',143,'Parent of',1,NULL,NULL,NULL), + (286,143,1,'b_a',143,'Parent of',145,'Child of',1,NULL,NULL,NULL), + (287,144,1,'a_b',60,'Child of',143,'Parent of',1,NULL,NULL,NULL), + (288,144,1,'b_a',143,'Parent of',60,'Child of',1,NULL,NULL,NULL), + (289,145,4,'a_b',60,'Sibling of',145,'Sibling of',1,NULL,NULL,NULL), + (290,145,4,'b_a',145,'Sibling of',60,'Sibling of',1,NULL,NULL,NULL), + (291,146,8,'a_b',143,'Household Member of',199,'Household Member is',1,NULL,NULL,NULL), + (292,146,8,'b_a',199,'Household Member is',143,'Household Member of',1,NULL,NULL,NULL), + (293,147,8,'a_b',145,'Household Member of',199,'Household Member is',1,NULL,NULL,NULL), + (294,147,8,'b_a',199,'Household Member is',145,'Household Member of',1,NULL,NULL,NULL), + (295,148,8,'a_b',60,'Household Member of',199,'Household Member is',1,NULL,NULL,NULL), + (296,148,8,'b_a',199,'Household Member is',60,'Household Member of',1,NULL,NULL,NULL), + (297,149,7,'a_b',196,'Head of Household for',199,'Head of Household is',0,NULL,NULL,NULL), + (298,149,7,'b_a',199,'Head of Household is',196,'Head of Household for',0,NULL,NULL,NULL), + (299,150,2,'a_b',143,'Spouse of',196,'Spouse of',0,NULL,NULL,NULL), + (300,150,2,'b_a',196,'Spouse of',143,'Spouse of',0,NULL,NULL,NULL), + (301,151,1,'a_b',171,'Child of',21,'Parent of',1,NULL,NULL,NULL), + (302,151,1,'b_a',21,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (303,152,1,'a_b',86,'Child of',21,'Parent of',1,NULL,NULL,NULL), + (304,152,1,'b_a',21,'Parent of',86,'Child of',1,NULL,NULL,NULL), + (305,153,1,'a_b',171,'Child of',193,'Parent of',1,NULL,NULL,NULL), + (306,153,1,'b_a',193,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (307,154,1,'a_b',86,'Child of',193,'Parent of',1,NULL,NULL,NULL), + (308,154,1,'b_a',193,'Parent of',86,'Child of',1,NULL,NULL,NULL), + (309,155,4,'a_b',86,'Sibling of',171,'Sibling of',1,NULL,NULL,NULL), + (310,155,4,'b_a',171,'Sibling of',86,'Sibling of',1,NULL,NULL,NULL), + (311,156,8,'a_b',193,'Household Member of',93,'Household Member is',1,NULL,NULL,NULL), + (312,156,8,'b_a',93,'Household Member is',193,'Household Member of',1,NULL,NULL,NULL), + (313,157,8,'a_b',171,'Household Member of',93,'Household Member is',1,NULL,NULL,NULL), + (314,157,8,'b_a',93,'Household Member is',171,'Household Member of',1,NULL,NULL,NULL), + (315,158,8,'a_b',86,'Household Member of',93,'Household Member is',1,NULL,NULL,NULL), + (316,158,8,'b_a',93,'Household Member is',86,'Household Member of',1,NULL,NULL,NULL), + (317,159,7,'a_b',21,'Head of Household for',93,'Head of Household is',1,NULL,NULL,NULL), + (318,159,7,'b_a',93,'Head of Household is',21,'Head of Household for',1,NULL,NULL,NULL), + (319,160,2,'a_b',193,'Spouse of',21,'Spouse of',1,NULL,NULL,NULL), + (320,160,2,'b_a',21,'Spouse of',193,'Spouse of',1,NULL,NULL,NULL), + (321,161,1,'a_b',142,'Child of',189,'Parent of',1,NULL,NULL,NULL), + (322,161,1,'b_a',189,'Parent of',142,'Child of',1,NULL,NULL,NULL), + (323,162,1,'a_b',53,'Child of',189,'Parent of',1,NULL,NULL,NULL), + (324,162,1,'b_a',189,'Parent of',53,'Child of',1,NULL,NULL,NULL), + (325,163,1,'a_b',142,'Child of',157,'Parent of',1,NULL,NULL,NULL), + (326,163,1,'b_a',157,'Parent of',142,'Child of',1,NULL,NULL,NULL), + (327,164,1,'a_b',53,'Child of',157,'Parent of',1,NULL,NULL,NULL), + (328,164,1,'b_a',157,'Parent of',53,'Child of',1,NULL,NULL,NULL), + (329,165,4,'a_b',53,'Sibling of',142,'Sibling of',1,NULL,NULL,NULL), + (330,165,4,'b_a',142,'Sibling of',53,'Sibling of',1,NULL,NULL,NULL), + (331,166,8,'a_b',157,'Household Member of',114,'Household Member is',1,NULL,NULL,NULL), + (332,166,8,'b_a',114,'Household Member is',157,'Household Member of',1,NULL,NULL,NULL), + (333,167,8,'a_b',142,'Household Member of',114,'Household Member is',1,NULL,NULL,NULL), + (334,167,8,'b_a',114,'Household Member is',142,'Household Member of',1,NULL,NULL,NULL), + (335,168,8,'a_b',53,'Household Member of',114,'Household Member is',1,NULL,NULL,NULL), + (336,168,8,'b_a',114,'Household Member is',53,'Household Member of',1,NULL,NULL,NULL), + (337,169,7,'a_b',189,'Head of Household for',114,'Head of Household is',0,NULL,NULL,NULL), + (338,169,7,'b_a',114,'Head of Household is',189,'Head of Household for',0,NULL,NULL,NULL), + (339,170,2,'a_b',157,'Spouse of',189,'Spouse of',0,NULL,NULL,NULL), + (340,170,2,'b_a',189,'Spouse of',157,'Spouse of',0,NULL,NULL,NULL), + (341,171,1,'a_b',148,'Child of',136,'Parent of',1,NULL,NULL,NULL), + (342,171,1,'b_a',136,'Parent of',148,'Child of',1,NULL,NULL,NULL), + (343,172,1,'a_b',141,'Child of',136,'Parent of',1,NULL,NULL,NULL), + (344,172,1,'b_a',136,'Parent of',141,'Child of',1,NULL,NULL,NULL), + (345,173,1,'a_b',148,'Child of',155,'Parent of',1,NULL,NULL,NULL), + (346,173,1,'b_a',155,'Parent of',148,'Child of',1,NULL,NULL,NULL), + (347,174,1,'a_b',141,'Child of',155,'Parent of',1,NULL,NULL,NULL), + (348,174,1,'b_a',155,'Parent of',141,'Child of',1,NULL,NULL,NULL), + (349,175,4,'a_b',141,'Sibling of',148,'Sibling of',1,NULL,NULL,NULL), + (350,175,4,'b_a',148,'Sibling of',141,'Sibling of',1,NULL,NULL,NULL), + (351,176,8,'a_b',155,'Household Member of',87,'Household Member is',1,NULL,NULL,NULL), + (352,176,8,'b_a',87,'Household Member is',155,'Household Member of',1,NULL,NULL,NULL), + (353,177,8,'a_b',148,'Household Member of',87,'Household Member is',1,NULL,NULL,NULL), + (354,177,8,'b_a',87,'Household Member is',148,'Household Member of',1,NULL,NULL,NULL), + (355,178,8,'a_b',141,'Household Member of',87,'Household Member is',1,NULL,NULL,NULL), + (356,178,8,'b_a',87,'Household Member is',141,'Household Member of',1,NULL,NULL,NULL), + (357,179,7,'a_b',136,'Head of Household for',87,'Head of Household is',0,NULL,NULL,NULL), + (358,179,7,'b_a',87,'Head of Household is',136,'Head of Household for',0,NULL,NULL,NULL), + (359,180,2,'a_b',155,'Spouse of',136,'Spouse of',0,NULL,NULL,NULL), + (360,180,2,'b_a',136,'Spouse of',155,'Spouse of',0,NULL,NULL,NULL), + (361,181,1,'a_b',82,'Child of',185,'Parent of',1,NULL,NULL,NULL), + (362,181,1,'b_a',185,'Parent of',82,'Child of',1,NULL,NULL,NULL), + (363,182,1,'a_b',81,'Child of',185,'Parent of',1,NULL,NULL,NULL), + (364,182,1,'b_a',185,'Parent of',81,'Child of',1,NULL,NULL,NULL), + (365,183,1,'a_b',82,'Child of',129,'Parent of',1,NULL,NULL,NULL), + (366,183,1,'b_a',129,'Parent of',82,'Child of',1,NULL,NULL,NULL), + (367,184,1,'a_b',81,'Child of',129,'Parent of',1,NULL,NULL,NULL), + (368,184,1,'b_a',129,'Parent of',81,'Child of',1,NULL,NULL,NULL), + (369,185,4,'a_b',81,'Sibling of',82,'Sibling of',1,NULL,NULL,NULL), + (370,185,4,'b_a',82,'Sibling of',81,'Sibling of',1,NULL,NULL,NULL), + (371,186,8,'a_b',129,'Household Member of',7,'Household Member is',1,NULL,NULL,NULL), + (372,186,8,'b_a',7,'Household Member is',129,'Household Member of',1,NULL,NULL,NULL), + (373,187,8,'a_b',82,'Household Member of',7,'Household Member is',1,NULL,NULL,NULL), + (374,187,8,'b_a',7,'Household Member is',82,'Household Member of',1,NULL,NULL,NULL), + (375,188,8,'a_b',81,'Household Member of',7,'Household Member is',1,NULL,NULL,NULL), + (376,188,8,'b_a',7,'Household Member is',81,'Household Member of',1,NULL,NULL,NULL), + (377,189,7,'a_b',185,'Head of Household for',7,'Head of Household is',1,NULL,NULL,NULL), + (378,189,7,'b_a',7,'Head of Household is',185,'Head of Household for',1,NULL,NULL,NULL), + (379,190,2,'a_b',129,'Spouse of',185,'Spouse of',1,NULL,NULL,NULL), + (380,190,2,'b_a',185,'Spouse of',129,'Spouse of',1,NULL,NULL,NULL), + (381,191,1,'a_b',121,'Child of',55,'Parent of',1,NULL,NULL,NULL), + (382,191,1,'b_a',55,'Parent of',121,'Child of',1,NULL,NULL,NULL), + (383,192,1,'a_b',166,'Child of',55,'Parent of',1,NULL,NULL,NULL), + (384,192,1,'b_a',55,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (385,193,1,'a_b',121,'Child of',128,'Parent of',1,NULL,NULL,NULL), + (386,193,1,'b_a',128,'Parent of',121,'Child of',1,NULL,NULL,NULL), + (387,194,1,'a_b',166,'Child of',128,'Parent of',1,NULL,NULL,NULL), + (388,194,1,'b_a',128,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (389,195,4,'a_b',166,'Sibling of',121,'Sibling of',1,NULL,NULL,NULL), + (390,195,4,'b_a',121,'Sibling of',166,'Sibling of',1,NULL,NULL,NULL), + (391,196,8,'a_b',128,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), + (392,196,8,'b_a',167,'Household Member is',128,'Household Member of',1,NULL,NULL,NULL), + (393,197,8,'a_b',121,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), + (394,197,8,'b_a',167,'Household Member is',121,'Household Member of',1,NULL,NULL,NULL), + (395,198,8,'a_b',166,'Household Member of',167,'Household Member is',1,NULL,NULL,NULL), + (396,198,8,'b_a',167,'Household Member is',166,'Household Member of',1,NULL,NULL,NULL), + (397,199,7,'a_b',55,'Head of Household for',167,'Head of Household is',1,NULL,NULL,NULL), + (398,199,7,'b_a',167,'Head of Household is',55,'Head of Household for',1,NULL,NULL,NULL), + (399,200,2,'a_b',128,'Spouse of',55,'Spouse of',1,NULL,NULL,NULL), + (400,200,2,'b_a',55,'Spouse of',128,'Spouse of',1,NULL,NULL,NULL), + (401,201,5,'a_b',52,'Employee of',22,'Employer of',1,NULL,NULL,NULL), + (402,201,5,'b_a',22,'Employer of',52,'Employee of',1,NULL,NULL,NULL), + (403,202,5,'a_b',124,'Employee of',23,'Employer of',1,NULL,NULL,NULL), + (404,202,5,'b_a',23,'Employer of',124,'Employee of',1,NULL,NULL,NULL), + (405,203,5,'a_b',88,'Employee of',38,'Employer of',1,NULL,NULL,NULL), + (406,203,5,'b_a',38,'Employer of',88,'Employee of',1,NULL,NULL,NULL), + (407,204,5,'a_b',138,'Employee of',46,'Employer of',1,NULL,NULL,NULL), + (408,204,5,'b_a',46,'Employer of',138,'Employee of',1,NULL,NULL,NULL), + (409,205,5,'a_b',127,'Employee of',48,'Employer of',1,NULL,NULL,NULL), + (410,205,5,'b_a',48,'Employer of',127,'Employee of',1,NULL,NULL,NULL), + (411,206,5,'a_b',40,'Employee of',54,'Employer of',1,NULL,NULL,NULL), + (412,206,5,'b_a',54,'Employer of',40,'Employee of',1,NULL,NULL,NULL), + (413,207,5,'a_b',61,'Employee of',65,'Employer of',1,NULL,NULL,NULL), + (414,207,5,'b_a',65,'Employer of',61,'Employee of',1,NULL,NULL,NULL), + (415,208,5,'a_b',166,'Employee of',74,'Employer of',1,NULL,NULL,NULL), + (416,208,5,'b_a',74,'Employer of',166,'Employee of',1,NULL,NULL,NULL), + (417,209,5,'a_b',13,'Employee of',80,'Employer of',1,NULL,NULL,NULL), + (418,209,5,'b_a',80,'Employer of',13,'Employee of',1,NULL,NULL,NULL), + (419,210,5,'a_b',51,'Employee of',104,'Employer of',1,NULL,NULL,NULL), + (420,210,5,'b_a',104,'Employer of',51,'Employee of',1,NULL,NULL,NULL), + (421,211,5,'a_b',42,'Employee of',107,'Employer of',1,NULL,NULL,NULL), + (422,211,5,'b_a',107,'Employer of',42,'Employee of',1,NULL,NULL,NULL), + (423,212,5,'a_b',161,'Employee of',109,'Employer of',1,NULL,NULL,NULL), + (424,212,5,'b_a',109,'Employer of',161,'Employee of',1,NULL,NULL,NULL), + (425,213,5,'a_b',122,'Employee of',113,'Employer of',1,NULL,NULL,NULL), + (426,213,5,'b_a',113,'Employer of',122,'Employee of',1,NULL,NULL,NULL), + (427,214,5,'a_b',50,'Employee of',115,'Employer of',1,NULL,NULL,NULL), + (428,214,5,'b_a',115,'Employer of',50,'Employee of',1,NULL,NULL,NULL), + (429,215,5,'a_b',99,'Employee of',126,'Employer of',1,NULL,NULL,NULL), + (430,215,5,'b_a',126,'Employer of',99,'Employee of',1,NULL,NULL,NULL), + (431,216,5,'a_b',134,'Employee of',165,'Employer of',1,NULL,NULL,NULL), + (432,216,5,'b_a',165,'Employer of',134,'Employee of',1,NULL,NULL,NULL), + (433,217,5,'a_b',179,'Employee of',173,'Employer of',1,NULL,NULL,NULL), + (434,217,5,'b_a',173,'Employer of',179,'Employee of',1,NULL,NULL,NULL), + (435,218,5,'a_b',8,'Employee of',175,'Employer of',1,NULL,NULL,NULL), + (436,218,5,'b_a',175,'Employer of',8,'Employee of',1,NULL,NULL,NULL), + (437,219,5,'a_b',17,'Employee of',180,'Employer of',1,NULL,NULL,NULL), + (438,219,5,'b_a',180,'Employer of',17,'Employee of',1,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_relationship_cache` ENABLE KEYS */; UNLOCK TABLES; @@ -12049,90 +12052,90 @@ 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,114,2,'2021-12-02 22:24:02','Admin','Added',NULL), - (2,95,2,'2022-05-31 20:09:21','Admin','Added',NULL), - (3,182,2,'2021-09-29 20:53:21','Admin','Added',NULL), - (4,170,2,'2022-05-23 14:42:15','Admin','Added',NULL), - (5,27,2,'2022-05-25 21:05:01','Admin','Added',NULL), - (6,121,2,'2022-01-12 02:22:57','Admin','Added',NULL), - (7,19,2,'2022-04-13 21:13:49','Email','Added',NULL), - (8,18,2,'2021-10-04 04:12:40','Admin','Added',NULL), - (9,53,2,'2021-08-30 19:00:00','Email','Added',NULL), - (10,61,2,'2021-08-07 09:18:02','Admin','Added',NULL), - (11,22,2,'2022-05-25 06:10:18','Email','Added',NULL), - (12,186,2,'2021-07-15 09:56:57','Admin','Added',NULL), - (13,93,2,'2021-07-05 01:06:19','Email','Added',NULL), - (14,69,2,'2022-06-05 20:18:46','Email','Added',NULL), - (15,172,2,'2022-02-04 15:43:12','Admin','Added',NULL), - (16,142,2,'2022-05-08 20:54:19','Admin','Added',NULL), - (17,198,2,'2021-08-31 13:08:08','Admin','Added',NULL), - (18,39,2,'2021-12-05 07:49:05','Email','Added',NULL), - (19,136,2,'2022-04-06 09:18:23','Admin','Added',NULL), - (20,133,2,'2022-05-07 20:28:22','Admin','Added',NULL), - (21,196,2,'2021-10-04 00:27:58','Admin','Added',NULL), - (22,157,2,'2022-01-27 01:37:49','Admin','Added',NULL), - (23,30,2,'2022-05-13 01:32:23','Admin','Added',NULL), - (24,147,2,'2021-12-13 18:01:06','Email','Added',NULL), - (25,94,2,'2021-12-29 09:49:15','Email','Added',NULL), - (26,12,2,'2022-03-02 15:44:56','Admin','Added',NULL), - (27,193,2,'2022-03-29 23:10:37','Email','Added',NULL), - (28,25,2,'2021-10-13 08:13:16','Email','Added',NULL), - (29,38,2,'2022-01-16 03:00:28','Admin','Added',NULL), - (30,159,2,'2021-08-14 00:51:05','Admin','Added',NULL), - (31,90,2,'2021-07-19 18:40:08','Admin','Added',NULL), - (32,41,2,'2022-02-10 17:37:37','Admin','Added',NULL), - (33,151,2,'2021-09-27 03:36:00','Admin','Added',NULL), - (34,116,2,'2021-08-17 23:25:29','Admin','Added',NULL), - (35,70,2,'2021-07-06 11:30:19','Admin','Added',NULL), - (36,80,2,'2022-02-13 22:17:48','Email','Added',NULL), - (37,76,2,'2021-08-29 02:04:23','Email','Added',NULL), - (38,72,2,'2022-04-02 22:35:25','Admin','Added',NULL), - (39,64,2,'2022-03-25 08:31:37','Email','Added',NULL), - (40,13,2,'2021-10-22 02:10:42','Admin','Added',NULL), - (41,89,2,'2021-08-25 11:52:53','Admin','Added',NULL), - (42,135,2,'2021-12-31 11:58:28','Admin','Added',NULL), - (43,3,2,'2022-02-10 20:03:07','Admin','Added',NULL), - (44,78,2,'2022-04-05 15:55:38','Email','Added',NULL), - (45,62,2,'2021-07-10 18:56:31','Email','Added',NULL), - (46,188,2,'2022-01-08 10:11:38','Admin','Added',NULL), - (47,46,2,'2021-07-22 02:05:10','Admin','Added',NULL), - (48,123,2,'2022-04-03 07:17:13','Admin','Added',NULL), - (49,58,2,'2022-01-18 03:08:56','Admin','Added',NULL), - (50,34,2,'2022-01-15 07:07:02','Email','Added',NULL), - (51,180,2,'2021-10-16 01:08:45','Admin','Added',NULL), - (52,87,2,'2021-11-13 09:49:47','Admin','Added',NULL), - (53,17,2,'2021-09-27 23:43:19','Admin','Added',NULL), - (54,88,2,'2021-11-04 00:19:20','Email','Added',NULL), - (55,4,2,'2022-05-25 05:33:21','Email','Added',NULL), - (56,199,2,'2021-11-25 22:40:47','Email','Added',NULL), - (57,149,2,'2022-01-02 22:06:23','Admin','Added',NULL), - (58,106,2,'2022-06-16 03:05:09','Email','Added',NULL), - (59,36,2,'2022-03-23 08:44:28','Email','Added',NULL), - (60,163,2,'2021-11-27 02:49:52','Email','Added',NULL), - (61,197,3,'2022-01-15 18:57:29','Email','Added',NULL), - (62,134,3,'2022-01-07 11:05:28','Email','Added',NULL), - (63,102,3,'2021-08-08 05:19:10','Email','Added',NULL), - (64,50,3,'2022-03-19 05:38:57','Email','Added',NULL), - (65,79,3,'2022-06-26 02:41:43','Admin','Added',NULL), - (66,154,3,'2022-06-23 16:51:44','Email','Added',NULL), - (67,16,3,'2021-10-06 10:30:39','Admin','Added',NULL), - (68,189,3,'2022-06-03 03:45:07','Admin','Added',NULL), - (69,10,3,'2022-03-21 17:13:28','Email','Added',NULL), - (70,49,3,'2021-08-28 08:08:40','Admin','Added',NULL), - (71,129,3,'2022-02-14 18:45:47','Admin','Added',NULL), - (72,24,3,'2021-11-29 00:16:59','Email','Added',NULL), - (73,110,3,'2022-05-16 02:42:07','Email','Added',NULL), - (74,9,3,'2022-06-26 23:31:21','Email','Added',NULL), - (75,145,3,'2022-04-01 14:05:52','Email','Added',NULL), - (76,114,4,'2022-03-25 13:59:16','Admin','Added',NULL), - (77,18,4,'2021-10-08 22:08:50','Email','Added',NULL), - (78,172,4,'2021-10-09 20:55:25','Email','Added',NULL), - (79,157,4,'2021-10-17 23:29:29','Email','Added',NULL), - (80,38,4,'2022-01-08 09:24:30','Email','Added',NULL), - (81,80,4,'2022-04-11 07:35:49','Admin','Added',NULL), - (82,3,4,'2021-11-07 20:35:50','Admin','Added',NULL), - (83,34,4,'2021-07-30 23:53:18','Email','Added',NULL), - (84,202,4,'2021-10-06 15:27:46','Admin','Added',NULL); + (1,176,2,'2022-04-14 17:53:21','Admin','Added',NULL), + (2,64,2,'2022-01-09 03:40:07','Email','Added',NULL), + (3,168,2,'2022-03-26 09:39:30','Admin','Added',NULL), + (4,134,2,'2022-05-29 17:33:42','Email','Added',NULL), + (5,174,2,'2021-08-06 08:01:49','Admin','Added',NULL), + (6,43,2,'2022-02-01 11:40:28','Email','Added',NULL), + (7,14,2,'2022-05-19 14:09:30','Admin','Added',NULL), + (8,49,2,'2022-06-09 07:52:11','Admin','Added',NULL), + (9,195,2,'2022-01-09 00:43:33','Admin','Added',NULL), + (10,34,2,'2022-06-11 18:05:54','Admin','Added',NULL), + (11,191,2,'2022-05-25 19:26:26','Email','Added',NULL), + (12,28,2,'2021-10-10 04:29:41','Admin','Added',NULL), + (13,97,2,'2022-01-14 06:46:31','Email','Added',NULL), + (14,77,2,'2022-05-09 07:20:33','Email','Added',NULL), + (15,110,2,'2022-01-22 21:47:28','Email','Added',NULL), + (16,101,2,'2021-06-30 07:20:29','Admin','Added',NULL), + (17,152,2,'2022-02-22 05:31:45','Email','Added',NULL), + (18,61,2,'2021-06-29 00:03:10','Admin','Added',NULL), + (19,5,2,'2022-06-02 20:10:59','Email','Added',NULL), + (20,132,2,'2022-01-31 07:31:12','Email','Added',NULL), + (21,184,2,'2022-03-14 19:26:20','Admin','Added',NULL), + (22,50,2,'2021-06-27 03:51:21','Admin','Added',NULL), + (23,98,2,'2022-05-03 16:58:50','Admin','Added',NULL), + (24,84,2,'2021-08-31 08:13:00','Email','Added',NULL), + (25,9,2,'2022-06-16 19:09:59','Email','Added',NULL), + (26,70,2,'2022-02-27 04:53:45','Email','Added',NULL), + (27,25,2,'2022-03-07 08:24:57','Admin','Added',NULL), + (28,137,2,'2021-07-18 14:40:46','Email','Added',NULL), + (29,90,2,'2022-05-02 09:41:04','Admin','Added',NULL), + (30,4,2,'2022-01-27 06:12:41','Admin','Added',NULL), + (31,116,2,'2021-07-16 15:12:12','Email','Added',NULL), + (32,149,2,'2021-07-27 17:48:16','Admin','Added',NULL), + (33,108,2,'2021-08-13 10:39:17','Email','Added',NULL), + (34,94,2,'2021-07-26 14:38:20','Admin','Added',NULL), + (35,130,2,'2021-09-13 02:54:56','Admin','Added',NULL), + (36,41,2,'2021-09-05 10:52:14','Admin','Added',NULL), + (37,73,2,'2021-11-22 01:11:30','Admin','Added',NULL), + (38,164,2,'2022-01-29 02:33:53','Admin','Added',NULL), + (39,138,2,'2021-10-09 21:50:37','Admin','Added',NULL), + (40,147,2,'2021-12-13 06:44:30','Admin','Added',NULL), + (41,91,2,'2021-12-02 14:43:37','Admin','Added',NULL), + (42,62,2,'2022-02-15 05:22:46','Email','Added',NULL), + (43,24,2,'2022-03-06 01:59:04','Admin','Added',NULL), + (44,183,2,'2021-10-05 17:18:58','Admin','Added',NULL), + (45,187,2,'2022-01-21 14:57:48','Admin','Added',NULL), + (46,118,2,'2021-09-04 14:19:55','Admin','Added',NULL), + (47,140,2,'2021-12-25 17:56:08','Email','Added',NULL), + (48,153,2,'2022-04-25 19:06:23','Email','Added',NULL), + (49,58,2,'2022-06-05 03:50:10','Admin','Added',NULL), + (50,163,2,'2022-06-13 12:01:37','Email','Added',NULL), + (51,44,2,'2021-11-10 06:57:41','Admin','Added',NULL), + (52,72,2,'2021-11-15 17:59:59','Admin','Added',NULL), + (53,95,2,'2021-09-15 11:03:30','Email','Added',NULL), + (54,6,2,'2021-09-23 17:52:04','Admin','Added',NULL), + (55,31,2,'2022-02-03 20:59:52','Admin','Added',NULL), + (56,177,2,'2021-09-24 04:56:02','Admin','Added',NULL), + (57,119,2,'2021-07-03 04:10:08','Admin','Added',NULL), + (58,120,2,'2021-12-21 19:56:52','Admin','Added',NULL), + (59,35,2,'2021-11-07 16:24:57','Admin','Added',NULL), + (60,52,2,'2021-09-14 17:14:17','Admin','Added',NULL), + (61,117,3,'2022-01-16 00:11:38','Admin','Added',NULL), + (62,197,3,'2022-04-27 16:05:28','Admin','Added',NULL), + (63,17,3,'2021-07-04 20:06:54','Admin','Added',NULL), + (64,198,3,'2022-01-30 13:46:53','Admin','Added',NULL), + (65,33,3,'2021-09-22 07:26:37','Email','Added',NULL), + (66,169,3,'2022-06-05 21:45:28','Email','Added',NULL), + (67,192,3,'2021-10-01 10:36:50','Admin','Added',NULL), + (68,71,3,'2022-05-04 06:33:48','Admin','Added',NULL), + (69,19,3,'2021-08-22 18:06:46','Admin','Added',NULL), + (70,133,3,'2021-08-24 11:31:18','Admin','Added',NULL), + (71,88,3,'2022-04-09 17:42:02','Email','Added',NULL), + (72,76,3,'2021-12-05 17:45:38','Email','Added',NULL), + (73,125,3,'2022-03-04 14:49:22','Admin','Added',NULL), + (74,10,3,'2022-01-31 16:01:01','Email','Added',NULL), + (75,51,3,'2021-12-01 18:35:51','Email','Added',NULL), + (76,176,4,'2021-12-22 00:23:07','Admin','Added',NULL), + (77,49,4,'2022-06-18 12:17:40','Admin','Added',NULL), + (78,110,4,'2022-01-24 14:04:31','Admin','Added',NULL), + (79,50,4,'2021-07-30 06:40:28','Admin','Added',NULL), + (80,90,4,'2021-07-19 19:54:48','Admin','Added',NULL), + (81,41,4,'2022-05-08 20:25:33','Admin','Added',NULL), + (82,24,4,'2021-10-30 07:02:59','Email','Added',NULL), + (83,163,4,'2022-04-12 16:44:32','Email','Added',NULL), + (84,202,4,'2021-08-01 01:13:55','Admin','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -12358,18 +12361,18 @@ 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,156,'http://kentuckyadvocacy.org',1), - (2,74,'http://globalenvironmental.org',1), - (3,160,'http://kirbydevelopment.org',1), - (4,54,'http://unitedfood.org',1), - (5,101,'http://secondaction.org',1), - (6,183,'http://idahodevelopmentservices.org',1), - (7,96,'http://globalfood.org',1), - (8,194,'http://unitedmusicschool.org',1), - (9,131,'http://dunnellonfellowship.org',1), - (10,126,'http://michiganschool.org',1), - (11,139,'http://montanaempowerment.org',1), - (12,127,'http://kentuckyactionnetwork.org',1); + (1,107,'http://michiganfund.org',1), + (2,48,'http://illinoisschool.org',1), + (3,175,'http://dousmansolutions.org',1), + (4,74,'http://cadellsystems.org',1), + (5,23,'http://lincolninitiative.org',1), + (6,109,'http://coloradonetwork.org',1), + (7,22,'http://woodbridgeempowerment.org',1), + (8,150,'http://chillicothefamily.org',1), + (9,104,'http://marylandcenter.org',1), + (10,65,'http://secondcenter.org',1), + (11,113,'http://californiaenvironmentalnetwork.org',1), + (12,46,'http://californiafamilyalliance.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -12406,7 +12409,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2022-06-28 4:20:42 +-- Dump completed on 2022-06-22 9:51:55 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | diff --git a/civicrm/sql/civicrm_navigation.mysql b/civicrm/sql/civicrm_navigation.mysql index ae1261cfa251f0000647cd54e04de0c1ce7dc6dc..f6cf0a8f5186ad519f833df2bf704ae55167967f 100644 --- a/civicrm/sql/civicrm_navigation.mysql +++ b/civicrm/sql/civicrm_navigation.mysql @@ -92,7 +92,7 @@ VALUES ( @domainID, 'civicrm/import/contact?reset=1', 'Import Contacts', 'Import Contacts', 'import contacts', '', @contactlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/import/activity?reset=1', 'Import Activities', 'Import Activities', 'import contacts', '', @contactlastID, '1', NULL, 8 ), ( @domainID, 'civicrm/import/custom?reset=1', 'Import Custom Data', 'Import MultiValued Custom', 'import contacts', '', @contactlastID, '1', '1', 9 ), - ( @domainID, 'civicrm/group/add?reset=1', 'New Group', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/group/add?reset=1', 'New Group', 'New Group', 'edit groups', '', @contactlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/group?reset=1', 'Manage Groups', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 11 ), ( @domainID, 'civicrm/tag?reset=1', 'Manage Tags', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1', '1', 12 ), ( @domainID, 'civicrm/contact/deduperules?reset=1', 'Find and Merge Duplicate Contacts', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 ); @@ -134,11 +134,11 @@ VALUES ( @domainID, 'civicrm/pledge/add?reset=1&action=add&context=standalone', 'New Pledge', 'New Pledge', 'access CiviPledge,edit pledges', 'AND', @pledgelastID, '1', NULL, 2 ), ( @domainID, 'civicrm/pledge/search?reset=1', 'Find Pledges', 'Find Pledges', 'access CiviPledge', '', @pledgelastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=6&reset=1', 'Pledge Reports', 'Pledge Reports', 'access CiviPledge', '', @pledgelastID, '1', 0, 4 ), - ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', 'New Contribution Page', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', 'New Contribution Page', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 9 ), ( @domainID, 'civicrm/admin/contribute?reset=1', 'Manage Contribution Pages', 'Manage Contribution Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', '1', 10 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=contribute', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/contribute/managePremiums?reset=1', 'Premiums (Thank-you Gifts)', 'Premiums', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 12 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 13 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 14 ), ( @domainID, 'civicrm/financial/batch?reset=1&action=add', 'New Batch', 'New Batch', 'create manual batch', 'AND', @financialTransactionID, '1', NULL, 1 ), @@ -160,11 +160,11 @@ VALUES ( @domainID, 'civicrm/event/search?reset=1', 'Find Participants', 'Find Participants', 'access CiviEvent', '', @eventlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=1&reset=1', 'Event Reports', 'Event Reports', 'access CiviEvent', '', @eventlastID, '1', 1, 4 ), ( @domainID, 'civicrm/event/import?reset=1', 'Import Participants','Import Participants', 'access CiviEvent,edit event participants', 'AND', @eventlastID, '1', '1', 5 ), - ( @domainID, 'civicrm/event/add?reset=1&action=add', 'New Event', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/event/add?reset=1&action=add', 'New Event', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 6 ), ( @domainID, 'civicrm/event/manage?reset=1', 'Manage Events', 'Manage Events', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 7 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @eventlastID, '1', 1, 8 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', 'Event Templates', 'Event Templates', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 9 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 11 ); INSERT INTO civicrm_navigation @@ -199,12 +199,12 @@ INSERT INTO civicrm_navigation ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) VALUES ( @domainID, 'civicrm/member?reset=1', 'Dashboard', 'Dashboard', 'access CiviMember', '', @memberlastID, '1', NULL, 1 ), - ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', 'New Membership', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', 'New Membership', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '0', NULL, 2 ), ( @domainID, 'civicrm/member/search?reset=1', 'Find Memberships', 'Find Memberships','access CiviMember', '', @memberlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=3&reset=1', 'Membership Reports', 'Membership Reports', 'access CiviMember', '', @memberlastID, '1', 1, 4 ), ( @domainID, 'civicrm/batch?reset=1', 'Batch Data Entry', 'Batch Data Entry','access CiviContribute', '', @memberlastID, '1', NULL, 5 ), ( @domainID, 'civicrm/member/import?reset=1', 'Import Memberships', 'Import Members', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', 1, 6 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '0', NULL, 7 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 8 ); INSERT INTO civicrm_navigation @@ -432,7 +432,7 @@ VALUES ( @domainID, 'civicrm/admin/options/payment_instrument?reset=1', 'Payment Methods', 'Payment Instruments', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/options/accept_creditcard?reset=1', 'Accepted Credit Cards', 'Accepted Credit Cards', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 13 ), ( @domainID, 'civicrm/admin/options/soft_credit_type?reset=1', 'Soft Credit Types', 'Soft Credit Types', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', 1, 14 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '0', NULL, 15 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 16 ), ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', 'Payment Processors', 'Payment Processors', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 17 ), ( @domainID, 'civicrm/admin/setting/preferences/contribute?reset=1', 'CiviContribute Component Settings', 'CiviContribute Component Settings', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 18 ) ; @@ -450,7 +450,7 @@ VALUES ( @domainID, 'civicrm/event/manage?reset=1', 'Manage Events', 'Manage Events', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 2 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', 'Personal Campaign Pages', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 3 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', 'Event Templates', 'Event Templates', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 4 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', 'New Price Set', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '0', NULL, 5 ), ( @domainID, 'civicrm/admin/price?reset=1', 'Manage Price Sets', 'Manage Price Sets', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 6 ), ( @domainID, 'civicrm/admin/options/event_type?reset=1', 'Event Types', 'Event Types', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/participant_status?reset=1', 'Participant Statuses', 'Participant Statuses', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 8 ), diff --git a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl index 2ff0c050d2e9376448b18799c510b888d7cadcbf..b1c90b1f3f493194da511fc95462b94dfe527963 100644 --- a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl @@ -16,7 +16,7 @@ BEGIN:VEVENT UID:CIVICRMACTIVITY{$activity->id} SUMMARY:{$activity->subject|crmICalText} CALSCALE:GREGORIAN -DTSTAMP;TZID={$timezone}:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} +DTSTAMP;TZID={$timezone}:{$smarty.now|crmDate:'%Y-%m-%d %H:%M:%S'|crmICalDate} DTSTART;TZID={$timezone}:{$activity->activity_date_time|crmICalDate} DURATION:PT{$activity->duration}M {if $activity->location} diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl index 26971236e192b22a9e9645e95f8dba57d6aea07f..dd16a90cfb8f766dbbd2ebe23764ba2bbc09b337 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl @@ -9,18 +9,20 @@ *} {* tpl for building Household related fields *} <table class="form-layout-compressed"> - <tr> - <td> - {$form.household_name.label}<br/> - {$form.household_name.html} - </td> - <td> - {$form.nick_name.label}<br/> - {$form.nick_name.html} - </td> - <td> - {$form.contact_sub_type.label}<br /> - {$form.contact_sub_type.html} - </td> - </tr> + {crmRegion name="contact-form-edit-household"} + <tr> + <td> + {$form.household_name.label}<br/> + {$form.household_name.html} + </td> + <td> + {$form.nick_name.label}<br/> + {$form.nick_name.html} + </td> + <td> + {$form.contact_sub_type.label}<br /> + {$form.contact_sub_type.html} + </td> + </tr> + {/crmRegion} </table> diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl index 24f529edb39bc07cf6ba83b8a213f327e5138399..2ed590c35865416751e9d207f64fab0da3f39a00 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl @@ -9,63 +9,65 @@ *} {* tpl for building Individual related fields *} <table class="form-layout-compressed"> - <tr> - {if !empty($form.prefix_id)} - <td> - {$form.prefix_id.label}<br/> - {$form.prefix_id.html} - </td> - {/if} - {if $form.formal_title} - <td> - {$form.formal_title.label}<br/> - {$form.formal_title.html} - </td> - {/if} - {if !empty($form.first_name)} - <td> - {$form.first_name.label}<br /> - {$form.first_name.html} - </td> - {/if} - {if !empty($form.middle_name)} - <td> - {$form.middle_name.label}<br /> - {$form.middle_name.html} - </td> - {/if} - {if !empty($form.last_name)} - <td> - {$form.last_name.label}<br /> - {$form.last_name.html} - </td> - {/if} - {if !empty($form.suffix_id)} - <td> - {$form.suffix_id.label}<br/> - {$form.suffix_id.html} - </td> - {/if} - </tr> + {crmRegion name="contact-form-edit-individual"} + <tr> + {if !empty($form.prefix_id)} + <td> + {$form.prefix_id.label}<br/> + {$form.prefix_id.html} + </td> + {/if} + {if $form.formal_title} + <td> + {$form.formal_title.label}<br/> + {$form.formal_title.html} + </td> + {/if} + {if !empty($form.first_name)} + <td> + {$form.first_name.label}<br /> + {$form.first_name.html} + </td> + {/if} + {if !empty($form.middle_name)} + <td> + {$form.middle_name.label}<br /> + {$form.middle_name.html} + </td> + {/if} + {if !empty($form.last_name)} + <td> + {$form.last_name.label}<br /> + {$form.last_name.html} + </td> + {/if} + {if !empty($form.suffix_id)} + <td> + {$form.suffix_id.label}<br/> + {$form.suffix_id.html} + </td> + {/if} + </tr> - <tr> - <td colspan="2"> - {$form.employer_id.label} {help id="id-current-employer" file="CRM/Contact/Form/Contact.hlp"}<br /> - {$form.employer_id.html} - </td> - <td> - {$form.job_title.label}<br /> - {$form.job_title.html} - </td> - <td> - {$form.nick_name.label}<br /> - {$form.nick_name.html} - </td> - {if !empty($form.contact_sub_type)} - <td> - {$form.contact_sub_type.label}<br /> - {$form.contact_sub_type.html} - </td> - {/if} - </tr> + <tr> + <td colspan="2"> + {$form.employer_id.label} {help id="id-current-employer" file="CRM/Contact/Form/Contact.hlp"}<br /> + {$form.employer_id.html} + </td> + <td> + {$form.job_title.label}<br /> + {$form.job_title.html} + </td> + <td> + {$form.nick_name.label}<br /> + {$form.nick_name.html} + </td> + {if !empty($form.contact_sub_type)} + <td> + {$form.contact_sub_type.label}<br /> + {$form.contact_sub_type.html} + </td> + {/if} + </tr> + {/crmRegion} </table> diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl index 6fd616f0d6939a9dc7369b52ee1946f669c5c68b..0aaf0d3942133a01a459641f4b21e732080d7850 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl @@ -9,26 +9,28 @@ *} {* tpl for building Organization related fields *} <table class="form-layout-compressed"> - <tr> - <td>{ - $form.organization_name.label}<br/> - {$form.organization_name.html} - </td> - <td> - {$form.legal_name.label}<br/> - {$form.legal_name.html} - </td> - <td> - {$form.nick_name.label}<br/> - {$form.nick_name.html} - </td> - <td> - {$form.sic_code.label}<br/> - {$form.sic_code.html} - </td> - <td> - {$form.contact_sub_type.label}<br /> - {$form.contact_sub_type.html} - </td> - </tr> + {crmRegion name="contact-form-edit-organization"} + <tr> + <td>{ + $form.organization_name.label}<br/> + {$form.organization_name.html} + </td> + <td> + {$form.legal_name.label}<br/> + {$form.legal_name.html} + </td> + <td> + {$form.nick_name.label}<br/> + {$form.nick_name.html} + </td> + <td> + {$form.sic_code.label}<br/> + {$form.sic_code.html} + </td> + <td> + {$form.contact_sub_type.label}<br /> + {$form.contact_sub_type.html} + </td> + </tr> + {/crmRegion} </table> diff --git a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl index 379afb93b8b274e4346f358cf84283b05bd1483a..021cff1c51e9ff1772311d527d1ea832af881be3 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl @@ -13,49 +13,51 @@ <div class="crm-inline-button"> {include file="CRM/common/formButtons.tpl"} </div> - {if $contactType eq 'Individual'} - {if !empty($form.prefix_id)} - <div class="crm-inline-edit-field"> - {$form.prefix_id.label}<br/> - {$form.prefix_id.html} - </div> + {crmRegion name="contact-form-inline-contactname"} + {if $contactType eq 'Individual'} + {if !empty($form.prefix_id)} + <div class="crm-inline-edit-field"> + {$form.prefix_id.label}<br/> + {$form.prefix_id.html} + </div> + {/if} + {if !empty($form.formal_title)} + <div class="crm-inline-edit-field"> + {$form.formal_title.label}<br/> + {$form.formal_title.html} + </div> + {/if} + {if !empty($form.first_name)} + <div class="crm-inline-edit-field"> + {$form.first_name.label}<br /> + {$form.first_name.html} + </div> + {/if} + {if !empty($form.middle_name)} + <div class="crm-inline-edit-field"> + {$form.middle_name.label}<br /> + {$form.middle_name.html} + </div> + {/if} + {if !empty($form.last_name)} + <div class="crm-inline-edit-field"> + {$form.last_name.label}<br /> + {$form.last_name.html} + </div> + {/if} + {if !empty($form.suffix_id)} + <div class="crm-inline-edit-field"> + {$form.suffix_id.label}<br/> + {$form.suffix_id.html} + </div> + {/if} + {elseif $contactType eq 'Organization'} + <div class="crm-inline-edit-field">{$form.organization_name.label} + {$form.organization_name.html}</div> + {elseif $contactType eq 'Household'} + <div class="crm-inline-edit-field">{$form.household_name.label} + {$form.household_name.html}</div> {/if} - {if !empty($form.formal_title)} - <div class="crm-inline-edit-field"> - {$form.formal_title.label}<br/> - {$form.formal_title.html} - </div> - {/if} - {if !empty($form.first_name)} - <div class="crm-inline-edit-field"> - {$form.first_name.label}<br /> - {$form.first_name.html} - </div> - {/if} - {if !empty($form.middle_name)} - <div class="crm-inline-edit-field"> - {$form.middle_name.label}<br /> - {$form.middle_name.html} - </div> - {/if} - {if !empty($form.last_name)} - <div class="crm-inline-edit-field"> - {$form.last_name.label}<br /> - {$form.last_name.html} - </div> - {/if} - {if !empty($form.suffix_id)} - <div class="crm-inline-edit-field"> - {$form.suffix_id.label}<br/> - {$form.suffix_id.html} - </div> - {/if} - {elseif $contactType eq 'Organization'} - <div class="crm-inline-edit-field">{$form.organization_name.label} - {$form.organization_name.html}</div> - {elseif $contactType eq 'Household'} - <div class="crm-inline-edit-field">{$form.household_name.label} - {$form.household_name.html}</div> - {/if} + {/crmRegion} </div> <div class="clear"></div> diff --git a/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl b/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl index f32f169cf7fd09b6df96432f37f98b9fa938d723..499022320f08c0f7f2419680e8ef2b66ba41a73d 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl @@ -8,15 +8,17 @@ +--------------------------------------------------------------------+ *} <div id="crm-contactname-content" {if $permission EQ 'edit'}class="crm-inline-edit" data-edit-params='{ldelim}"cid": "{$contactId}", "class_name": "CRM_Contact_Form_Inline_ContactName"{rdelim}' data-dependent-fields='["#crm-communication-pref-content"]'{/if}> - <div class="crm-inline-block-content"{if $permission EQ 'edit'} title="{ts}Edit Contact Name{/ts}"{/if}> - {if $permission EQ 'edit'} - <div class="crm-edit-help"> - <span class="crm-i fa-pencil" aria-hidden="true"></span> {ts}Edit name{/ts} - </div> - {/if} + {crmRegion name="contact-page-contactname"} + <div class="crm-inline-block-content"{if $permission EQ 'edit'} title="{ts}Edit Contact Name{/ts}"{/if}> + {if $permission EQ 'edit'} + <div class="crm-edit-help"> + <span class="crm-i fa-pencil" aria-hidden="true"></span> {ts}Edit name{/ts} + </div> + {/if} - <div class="crm-summary-display_name"> - {$title}{if $domainContact} ({ts}default organization{/ts}){/if} + <div class="crm-summary-display_name"> + {$title}{if $domainContact} ({ts}default organization{/ts}){/if} + </div> </div> - </div> + {/crmRegion} </div> diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl index 886f43b84d51918eb481baf023eddf56a2ba11cf..88f1bdae27a98a8bf462255b80b0da328a723ef4 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl @@ -23,6 +23,11 @@ {icon icon="fa-info-circle"}{/icon}{ts}You will not be able to send an automatic email receipt for this payment because there is no email address recorded for this contact. If you want a receipt to be sent when this payment is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the payment.{/ts} </div> {/if} + {if $paymentType EQ 'refund'} + <div class="messages status no-popup"> + {icon icon="fa-info-circle"}{/icon} {ts}Use this form to record a manual refund. If a payment processor was used to make payment it will not be notified.{/ts} + </div> + {/if} {if $newCredit AND $contributionMode EQ null} {if $contactId} {capture assign=ccModeLink}{crmURL p='civicrm/payment/add' q="reset=1&action=add&cid=`$contactId`&id=`$id`&component=`$component`&mode=live"}{/capture} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl index 3bfd864ea8a84b55a6826002be512c0d4a0da9a3..1beb28c2fe7c731b28288e3de5763ecfc7db37a9 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl @@ -182,29 +182,25 @@ </fieldset> {/if} - {if $pcpBlock} + {if $pcpBlock && $pcp_display_in_roll} <div class="crm-group pcp_display-group"> <div class="header-dark"> {ts}Contribution Honor Roll{/ts} </div> <div class="display-block"> - {if $pcp_display_in_roll} - {ts}List my contribution{/ts} - {if $pcp_is_anonymous} - <strong>{ts}anonymously{/ts}.</strong> + {ts}List my contribution{/ts} + {if $pcp_is_anonymous} + <strong>{ts}anonymously{/ts}.</strong> + {else} + {ts}under the name{/ts}: + <strong>{$pcp_roll_nickname}</strong> + <br/> + {if $pcp_personal_note} + {ts}With the personal note{/ts}: + <strong>{$pcp_personal_note}</strong> {else} - {ts}under the name{/ts}: - <strong>{$pcp_roll_nickname}</strong> - <br/> - {if $pcp_personal_note} - {ts}With the personal note{/ts}: - <strong>{$pcp_personal_note}</strong> - {else} - <strong>{ts}With no personal note{/ts}</strong> - {/if} + <strong>{ts}With no personal note{/ts}</strong> {/if} - {else} - {ts}Don't list my contribution in the honor roll.{/ts} {/if} <br/> </div> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl index d82d0af5357577cc66eb16dab7422a7333fea879..edd12f0f571e27d665634346e4fbb56228a695d2 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl @@ -127,7 +127,7 @@ {/if} {else} <div class="label">{$form.start_date.label}</div> - <div class="content">{$start_date_display|date_format}</div> + <div class="content">{$start_date_display|crmDate:'%b %e, %Y'}</div> {/if} <div class="clear"></div> </div> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl index 372b69efe867bbdd04c0d850ab7e9675ed317564..51d6ab1abd85bd99dad3fa3e0d4647bdad4576f1 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl @@ -37,7 +37,7 @@ <div id='help'> {* Lifetime memberships have no end-date so current_membership array key exists but is NULL *} {if $row.current_membership} - {if $row.current_membership|date_format:"%Y%m%d" LT $smarty.now|date_format:"%Y%m%d"} + {if $row.current_membership|crmDate:"%Y%m%d" LT $smarty.now|crmDate:"%Y%m%d"} {ts 1=$row.current_membership|crmDate 2=$row.name}Your <strong>%2</strong> membership expired on %1.{/ts}<br /> {else} {ts 1=$row.current_membership|crmDate 2=$row.name}Your <strong>%2</strong> membership expires on %1.{/ts}<br /> @@ -180,7 +180,7 @@ {* Check if there is an existing membership of this type (current_membership NOT empty) and if the end-date is prior to today. *} {if array_key_exists( 'current_membership', $row ) AND $context EQ "makeContribution" } {if $row.current_membership} - {if $row.current_membership|date_format:"%Y%m%d" LT $smarty.now|date_format:"%Y%m%d"} + {if $row.current_membership|crmDate:"%Y%m%d" LT $smarty.now|crmDate:"%Y%m%d"} <br /><em>{ts 1=$row.current_membership|crmDate 2=$row.name}Your <strong>%2</strong> membership expired on %1.{/ts}</em> {else} <br /><em>{ts 1=$row.current_membership|crmDate 2=$row.name}Your <strong>%2</strong> membership expires on %1.{/ts}</em> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl index 3e638d8aacd31689e96944c7b8322422a9fb94ec..c9ac6090e09ae4b0141204478d51b6c03863d7b5 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl @@ -215,26 +215,22 @@ </fieldset> {/if} - {if $pcpBlock} + {if $pcpBlock && $pcp_display_in_roll} <div class="crm-group pcp_display-group"> <div class="header-dark"> {ts}Contribution Honor Roll{/ts} </div> <div class="display-block"> - {if $pcp_display_in_roll} - {ts}List my contribution{/ts} - {if $pcp_is_anonymous} - <strong>{ts}anonymously{/ts}.</strong> + {ts}List my contribution{/ts} + {if $pcp_is_anonymous} + <strong>{ts}anonymously{/ts}.</strong> + {else} + {ts}under the name{/ts}: <strong>{$pcp_roll_nickname}</strong><br/> + {if $pcp_personal_note} + {ts}With the personal note{/ts}: <strong>{$pcp_personal_note}</strong> {else} - {ts}under the name{/ts}: <strong>{$pcp_roll_nickname}</strong><br/> - {if $pcp_personal_note} - {ts}With the personal note{/ts}: <strong>{$pcp_personal_note}</strong> - {else} - <strong>{ts}With no personal note{/ts}</strong> - {/if} + <strong>{ts}With no personal note{/ts}</strong> {/if} - {else} - {ts}Don't list my contribution in the honor roll.{/ts} {/if} <br /> </div> diff --git a/civicrm/templates/CRM/Contribute/Form/Selector.tpl b/civicrm/templates/CRM/Contribute/Form/Selector.tpl index d522a3fc87ea5e8602d1e9a85813c59dcb7695e7..29c9490be2d25bca08d80b5918d2ff4c24ad2685 100644 --- a/civicrm/templates/CRM/Contribute/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Selector.tpl @@ -51,7 +51,7 @@ {if $row.amount_level}<br/>({$row.amount_level}){/if} {if $row.contribution_recur_id && $row.is_template} <br/>{ts}(Recurring Template){/ts} - {elseif $row.contribution_recur_id } + {elseif $row.contribution_recur_id} <br/>{ts}(Recurring){/ts} {/if} </td> diff --git a/civicrm/templates/CRM/Core/Calendar/ICal.tpl b/civicrm/templates/CRM/Core/Calendar/ICal.tpl index f38502d5adf5f9c895a6dfdb22b8260b61dd0ef0..ba35c212f8b2bee97d1ce211a520bf7ce0af05c2 100644 --- a/civicrm/templates/CRM/Core/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Core/Calendar/ICal.tpl @@ -12,11 +12,27 @@ VERSION:2.0 PRODID:-//CiviCRM//NONSGML CiviEvent iCal//EN X-WR-TIMEZONE:{$timezone} METHOD:PUBLISH +{foreach from=$timezones item=tzItem} +BEGIN:VTIMEZONE +TZID:{$tzItem.id} +{foreach from=$tzItem.transitions item=tzTr} +BEGIN:{$tzTr.type} +TZOFFSETFROM:{$tzTr.offset_from} +TZOFFSETTO:{$tzTr.offset_to} +TZNAME:{$tzTr.abbr} +{if $tzTr.dtstart} +DTSTART:{$tzTr.dtstart|crmICalDate} +{/if} +END:{$tzTr.type} +{/foreach} +END:VTIMEZONE +{/foreach} {foreach from=$events key=uid item=event} BEGIN:VEVENT UID:{$event.uid} SUMMARY:{$event.title|crmICalText} {if $event.description} +X-ALT-DESC;FMTTYPE=text/html:{$event.description|crmICalText:true:29} DESCRIPTION:{$event.description|crmICalText} {/if} {if $event.event_type} @@ -27,7 +43,7 @@ CALSCALE:GREGORIAN DTSTAMP;TZID={$timezone}:{$event.start_date|crmICalDate} DTSTART;TZID={$timezone}:{$event.start_date|crmICalDate} {else} -DTSTAMP;TZID={$timezone}:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} +DTSTAMP;TZID={$timezone}:{$smarty.now|crmDate:'%Y-%m-%d %H:%M:%S'|crmICalDate} {/if} {if $event.end_date} DTEND;TZID={$timezone}:{$event.end_date|crmICalDate} diff --git a/civicrm/templates/CRM/Core/Calendar/Rss.tpl b/civicrm/templates/CRM/Core/Calendar/Rss.tpl index cc0139f1d9e5994a546d176e0a0f9eb106764605..ed85ad03f1c54c084a8b7de30f82e8d5d9e3aab2 100644 --- a/civicrm/templates/CRM/Core/Calendar/Rss.tpl +++ b/civicrm/templates/CRM/Core/Calendar/Rss.tpl @@ -19,6 +19,8 @@ {foreach from=$events key=uid item=event} <item> <title>{$event.title|escape:'html'}</title> +{* pubDate must follow RFC822 format *} +<pubDate>{$event.start_date|crmRSSPubDate}</pubDate> <link>{crmURL p='civicrm/event/info' q="reset=1&id=`$event.event_id`" fe=1 a=1}</link> <description> {if $event.summary}{$event.summary|escape:'html'} @@ -27,8 +29,8 @@ {/if} {if $event.start_date}{ts}When{/ts}: {$event.start_date|crmDate}{if $event.end_date} {ts}through{/ts} {strip} {* Only show end time if end date = start date *} - {if $event.end_date|date_format:"%Y%m%d" == $event.start_date|date_format:"%Y%m%d"} - {$event.end_date|date_format:"%I:%M %p"} + {if $event.end_date|crmDate:"%Y%m%d" == $event.start_date|crmDate:"%Y%m%d"} + {$event.end_date|crmDate:"%I:%M %p"} {else} {$event.end_date|crmDate} {/if}{/strip} diff --git a/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl b/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl index 862728aa978c92ebea6071bae8cd01997af6f53a..20fa9774f0be3b886f5bdb9b11e458be057036d3 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl @@ -55,28 +55,24 @@ </div> </div> - {if $pcpBlock} + {if $pcpBlock && $pcp_display_in_roll} <div class="crm-group pcp_display-group"> <div class="header-dark"> {ts}Contribution Honor Roll{/ts} </div> <div class="display-block"> - {if $pcp_display_in_roll} - {ts}List my contribution{/ts} - {if $pcp_is_anonymous} - <strong>{ts}anonymously{/ts}.</strong> - {else} + {ts}List my contribution{/ts} + {if $pcp_is_anonymous} + <strong>{ts}anonymously{/ts}.</strong> + {else} {ts}under the name{/ts}: <strong>{$pcp_roll_nickname}</strong><br/> - {if $pcp_personal_note} - {ts}With the personal note{/ts}: <strong>{$pcp_personal_note}</strong> - {else} - <strong>{ts}With no personal note{/ts}</strong> - {/if} - {/if} + {if $pcp_personal_note} + {ts}With the personal note{/ts}: <strong>{$pcp_personal_note}</strong> {else} - {ts}Don't list my contribution in the honor roll.{/ts} - {/if} - <br /> + <strong>{ts}With no personal note{/ts}</strong> + {/if} + {/if} + <br /> </div> </div> {/if} diff --git a/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl b/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl index 8a0486b4c22ce784fc9a7fd9c16a314c0e304105..c75be4e1d365573a5815888c4d737b8795f21db8 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl @@ -24,7 +24,7 @@ {if $event.event_end_date} {ts}through{/ts} {* Only show end time if end date = start date *} - {if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"} + {if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"} {$event.event_end_date|crmDate:0:1} {else} {$event.event_end_date|crmDate} diff --git a/civicrm/templates/CRM/Event/Form/Selector.tpl b/civicrm/templates/CRM/Event/Form/Selector.tpl index a09a6d3567c6c9dc0f9d51d732644105bf1c40bf..1461fc4d531d28b4acf79791dda12f0dc64de79f 100644 --- a/civicrm/templates/CRM/Event/Form/Selector.tpl +++ b/civicrm/templates/CRM/Event/Form/Selector.tpl @@ -60,7 +60,7 @@ <td class="right nowrap crm-participant-participant_fee_amount">{$row.participant_fee_amount|crmMoney:$row.participant_fee_currency}</td> <td class="crm-participant-participant_register_date">{$row.participant_register_date|truncate:10:''|crmDate}</td> <td class="crm-participant-event_start_date">{$row.event_start_date|truncate:10:''|crmDate} - {if $row.event_end_date && $row.event_end_date|date_format:"%Y%m%d" NEQ $row.event_start_date|date_format:"%Y%m%d"} + {if $row.event_end_date && $row.event_end_date|crmDate:"%Y%m%d" NEQ $row.event_start_date|crmDate:"%Y%m%d"} <br/>- {$row.event_end_date|truncate:10:''|crmDate} {/if} </td> diff --git a/civicrm/templates/CRM/Event/Form/Task/Print.tpl b/civicrm/templates/CRM/Event/Form/Task/Print.tpl index 013cf6fd28a31913babfee65ee6192a90f474b71..689580967b0044861ac459262566a48f38a32531 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Print.tpl @@ -43,7 +43,7 @@ {/if} <td class="crm-event-print-event_participant_fee_amount">{$row.participant_fee_amount|crmMoney}</td> <td class="crm-event-print-event_date">{$row.event_start_date|truncate:10:''|crmDate} - {if $row.event_end_date && $row.event_end_date|date_format:"%Y%m%d" NEQ $row.event_start_date|date_format:"%Y%m%d"} + {if $row.event_end_date && $row.event_end_date|crmDate:"%Y%m%d" NEQ $row.event_start_date|crmDate:"%Y%m%d"} <br/>- {$row.event_end_date|truncate:10:''|crmDate} {/if} </td> diff --git a/civicrm/templates/CRM/Event/Page/EventInfo.tpl b/civicrm/templates/CRM/Event/Page/EventInfo.tpl index 8315c22131c0746a87127aca0fa6b557a571447d..55efe2c6ae140dca76564910fd20069b373f7a97 100644 --- a/civicrm/templates/CRM/Event/Page/EventInfo.tpl +++ b/civicrm/templates/CRM/Event/Page/EventInfo.tpl @@ -106,7 +106,7 @@ {if $event.event_end_date} {ts}through{/ts} {* Only show end time if end date = start date *} - {if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"} + {if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"} {$event.event_end_date|crmDate:0:1} {else} {$event.event_end_date|crmDate} diff --git a/civicrm/templates/CRM/Event/Page/List.tpl b/civicrm/templates/CRM/Event/Page/List.tpl index 50da60fd8b6d9caf50469bf443b98ad9379cbd1a..5d2d839ceb6bd8065a3daaba8a1a6fdb3605f07d 100644 --- a/civicrm/templates/CRM/Event/Page/List.tpl +++ b/civicrm/templates/CRM/Event/Page/List.tpl @@ -32,7 +32,7 @@ <td class="nowrap" data-order="{$event.start_date|crmDate:'%Y-%m-%d'}"> {if $event.start_date}{$event.start_date|crmDate}{if $event.end_date}<br /><em>{ts}through{/ts}</em><br />{strip} {* Only show end time if end date = start date *} - {if $event.end_date|date_format:"%Y%m%d" == $event.start_date|date_format:"%Y%m%d"} + {if $event.end_date|crmDate:"%Y%m%d" == $event.start_date|crmDate:"%Y%m%d"} {$event.end_date|crmDate:0:1} {else} {$event.end_date|crmDate} diff --git a/civicrm/templates/CRM/Event/Page/UserDashboard.tpl b/civicrm/templates/CRM/Event/Page/UserDashboard.tpl index 210ece0034e4f7b81e791b4aa31408a92e439b46..6ceeff6ad809d958b1707cc96f14c5dd8670c0f3 100644 --- a/civicrm/templates/CRM/Event/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Event/Page/UserDashboard.tpl @@ -31,7 +31,7 @@ {if $row.event_end_date} - {* Only show end time if end date = start date *} - {if $row.event_end_date|date_format:"%Y%m%d" == $row.event_start_date|date_format:"%Y%m%d"} + {if $row.event_end_date|crmDate:"%Y%m%d" == $row.event_start_date|crmDate:"%Y%m%d"} {$row.event_end_date|crmDate:0:1} {else} {$row.event_end_date|crmDate} diff --git a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl index 05a676c69469e94a579873146c6f290fc36ce78f..2f6a31556762d912b51d2076a2159935bb772dbb 100644 --- a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl +++ b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl @@ -9,8 +9,8 @@ *} {* Display icons / links for ical download and feed for EventInfo.tpl, ThankYou.tpl, DashBoard.tpl, and ManageEvent.tpl *} {foreach from=$iCal item="iCalItem"} - <a href="{$iCalItem.url}" title="{$iCalItem.text}"{if !empty($event)} class="crm-event-feed-link"{/if}> + <a href="{$iCalItem.url}" {if !empty($event)} class="crm-event-feed-link"{/if}> <span class="fa-stack" aria-hidden="true"><i class="crm-i fa-calendar-o fa-stack-2x"></i><i style="top: 15%;" class="crm-i {$iCalItem.icon} fa-stack-1x"></i></span> - <span class="sr-only">{$iCalItem.text}</span> + <span class="label">{$iCalItem.text}</span> </a> {/foreach} diff --git a/civicrm/templates/CRM/Mailing/Form/Search.tpl b/civicrm/templates/CRM/Mailing/Form/Search.tpl index 91d681a68c1129df36b8148f667c38d88be6a19c..d0b160498419168c7fa11210e56796e83b4152a4 100644 --- a/civicrm/templates/CRM/Mailing/Form/Search.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Search.tpl @@ -43,7 +43,7 @@ </tr> {* language *} - {if !empty($form.language)} + {if array_key_exists('language', $form)} <tr> <td>{$form.language.label} {help id="id-language"}<br /> {$form.language.html|crmAddClass:big} diff --git a/civicrm/templates/CRM/common/info.tpl b/civicrm/templates/CRM/common/info.tpl index 1584b0002ef05df0a9a2f0a89d9741cb777fcef9..94d9be9cb6b03933d0bbbfbd775befa59f26a445 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 $infoMessage || $infoTitle} - <div class="messages status {$infoType}"{if $infoOptions} data-options='{$infoOptions}'{/if}> +{if $infoMessage|smarty:nodefaults || $infoTitle|smarty:nodefaults} + <div class="messages status {$infoType}"{if $infoOptions|smarty:nodefaults} data-options='{$infoOptions|smarty:nodefaults}'{/if}> {icon icon="fa-info-circle"}{/icon} <span class="msg-title">{$infoTitle}</span> - <span class="msg-text">{$infoMessage}</span> + <span class="msg-text">{$infoMessage|smarty:nodefaults|purify}</span> </div> {/if} diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index 67f69ada05885bd537d3c64e5e5c4d627dfe5aac..03598223d76982dbd9ac3784f2e931bf70431613 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -7,7 +7,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *}// http://civicrm.org/licensing -// <script> Generated {$smarty.now|date_format:'%d %b %Y %H:%M:%S'} +// <script> Generated {$smarty.now|crmDate:'%d %b %Y %H:%M:%S'} {* This file should only contain strings and settings which rarely change *} (function($) {ldelim} // Config settings diff --git a/civicrm/templates/CRM/common/navigation.js.tpl b/civicrm/templates/CRM/common/navigation.js.tpl index 5ec824a85e46250e75f26587a78cf8def7fabcc7..55594f6b9a11c7e5cbdf70815e7497c4b961e113 100644 --- a/civicrm/templates/CRM/common/navigation.js.tpl +++ b/civicrm/templates/CRM/common/navigation.js.tpl @@ -28,7 +28,7 @@ </li> {$navigation} </ul> -{/strip}{/capture}// <script> Generated {$smarty.now|date_format:'%d %b %Y %H:%M:%S'} +{/strip}{/capture}// <script> Generated {$smarty.now|crmDate:'%d %b %Y %H:%M:%S'} {literal} (function($) { var menuMarkup = {/literal}{$menuMarkup|@json_encode}{literal}; diff --git a/civicrm/templates/CRM/common/status.tpl b/civicrm/templates/CRM/common/status.tpl index 5ff662baf0dc3ad79b353b77d40f1132f78ba92d..fa36d7ec59279d0550f1051d5760875898f8c73c 100644 --- a/civicrm/templates/CRM/common/status.tpl +++ b/civicrm/templates/CRM/common/status.tpl @@ -17,6 +17,6 @@ {else} {assign var="infoType" value=$statItem.type} {/if} - {include file="CRM/common/info.tpl" infoTitle=$statItem.title infoMessage=$statItem.text infoOptions=$statItem.options|@json_encode} + {include file="CRM/common/info.tpl" infoTitle=$statItem.title infoMessage=$statItem.text|smarty:nodefaults|purify infoOptions=$statItem.options|smarty:nodefaults|@json_encode} {/foreach} {/if} diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index c596717a199ede3e08ab9d63d8c893bc392af11a..dca67026783856bec2f9544b8388d624bbd015ca 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) { require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28::getLoader(); +return ComposerAutoloaderInitc4b80b14ec4be1e37a02512281713763::getLoader(); diff --git a/civicrm/vendor/brick/math/CHANGELOG.md b/civicrm/vendor/brick/math/CHANGELOG.md index 61ab09d1821597cc532585ab846ec6a85e302535..03c3d824d5f6d0c9127207f1f3378a15e4ef32ff 100644 --- a/civicrm/vendor/brick/math/CHANGELOG.md +++ b/civicrm/vendor/brick/math/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. +## [0.9.3](https://github.com/brick/math/releases/tag/0.9.3) - 2021-08-15 + +🚀 **Compatibility with PHP 8.1** + +- Support for custom object serialization; this removes a warning on PHP 8.1 due to the `Serializable` interface being deprecated (thanks @TRowbotham) + +## [0.9.2](https://github.com/brick/math/releases/tag/0.9.2) - 2021-01-20 + +🛠**Bug fix** + +- Incorrect results could be returned when using the BCMath calculator, with a default scale set with `bcscale()`, on PHP >= 7.2 (#55). + ## [0.9.1](https://github.com/brick/math/releases/tag/0.9.1) - 2020-08-19 ✨ New features @@ -24,6 +36,76 @@ All notable changes to this project will be documented in this file. - Deprecated method `BigInteger::powerMod()` has been removed - use `modPow()` instead - Deprecated method `BigInteger::parse()` has been removed - use `fromBase()` instead +## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19 + +🛠**Bug fix** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18 + +🚑 **Critical fix** + +- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle. + +✨ **New features** + +- `BigInteger::modInverse()` calculates a modular multiplicative inverse +- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string +- `BigInteger::toBytes()` converts a `BigInteger` to a byte string +- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length +- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds + +💩 **Deprecations** + +- `BigInteger::powerMod()` is now deprecated in favour of `modPow()` + +## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15 + +🛠**Fixes** + +- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable` + +âš¡ï¸ **Optimizations** + +- additional optimization in `BigInteger::remainder()` + +## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18 + +✨ **New features** + +- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit + +## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16 + +✨ **New features** + +- `BigInteger::isEven()` tests whether the number is even +- `BigInteger::isOdd()` tests whether the number is odd +- `BigInteger::testBit()` tests if a bit is set +- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number + +## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03 + +ðŸ› ï¸ **Maintenance release** + +Classes are now annotated for better static analysis with [psalm](https://psalm.dev/). + +This is a maintenance release: no bug fixes, no new features, no breaking changes. + +## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23 + +✨ **New feature** + +`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto. + +## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21 + +✨ **New feature** + +`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different. + ## [0.8.9](https://github.com/brick/math/releases/tag/0.8.9) - 2020-01-08 âš¡ï¸ **Performance improvements** @@ -96,76 +178,6 @@ Thanks @manowark 👠- Further improvement of `toInt()` performance - `NativeCalculator` can now perform some multiplications more efficiently -## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19 - -🛠**Bug fix** - -- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers -- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available - -## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18 - -🚑 **Critical fix** - -- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle. - -✨ **New features** - -- `BigInteger::modInverse()` calculates a modular multiplicative inverse -- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string -- `BigInteger::toBytes()` converts a `BigInteger` to a byte string -- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length -- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds - -💩 **Deprecations** - -- `BigInteger::powerMod()` is now deprecated in favour of `modPow()` - -## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15 - -🛠**Fixes** - -- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable` - -âš¡ï¸ **Optimizations** - -- additional optimization in `BigInteger::remainder()` - -## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18 - -✨ **New features** - -- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit - -## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16 - -✨ **New features** - -- `BigInteger::isEven()` tests whether the number is even -- `BigInteger::isOdd()` tests whether the number is odd -- `BigInteger::testBit()` tests if a bit is set -- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number - -## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03 - -ðŸ› ï¸ **Maintenance release** - -Classes are now annotated for better static analysis with [psalm](https://psalm.dev/). - -This is a maintenance release: no bug fixes, no new features, no breaking changes. - -## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23 - -✨ **New feature** - -`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto. - -## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21 - -✨ **New feature** - -`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different. - ## [0.8.1](https://github.com/brick/math/releases/tag/0.8.1) - 2018-11-07 Performance optimization of `toInt()` methods. diff --git a/civicrm/vendor/brick/math/composer.json b/civicrm/vendor/brick/math/composer.json index c89955d12b9440206d354f1448e40f37cf9f25f7..ec196632ffa3722b21fa98ec432c097018b4a58d 100644 --- a/civicrm/vendor/brick/math/composer.json +++ b/civicrm/vendor/brick/math/composer.json @@ -20,7 +20,7 @@ "require-dev": { "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", "php-coveralls/php-coveralls": "^2.2", - "vimeo/psalm": "4.3.2" + "vimeo/psalm": "4.9.2" }, "autoload": { "psr-4": { diff --git a/civicrm/vendor/brick/math/random-tests.php b/civicrm/vendor/brick/math/random-tests.php deleted file mode 100644 index d9053fc1192c16cb0188247a3667eb067b5b5650..0000000000000000000000000000000000000000 --- a/civicrm/vendor/brick/math/random-tests.php +++ /dev/null @@ -1,194 +0,0 @@ -<?php - -/** - * This script stress tests calculators with random large numbers and ensures that all implementations return the same - * results. It is designed to run in an infinite loop unless a bug is found. - */ - -declare(strict_types=1); - -require __DIR__ . '/vendor/autoload.php'; - -use Brick\Math\Internal\Calculator; - -(new class(30) { // max digits - private $gmp; - private $bcmath; - private $native; - - private $maxDigits; - - public function __construct(int $maxDigits) - { - $this->gmp = new Calculator\GmpCalculator(); - $this->bcmath = new Calculator\BcMathCalculator(); - $this->native = new Calculator\NativeCalculator(); - - $this->maxDigits = $maxDigits; - } - - public function __invoke() : void - { - for (;;) { - $a = $this->generateRandomNumber(); - $b = $this->generateRandomNumber(); - $c = $this->generateRandomNumber(); - - $this->runTests($a, $b); - $this->runTests($b, $a); - - if ($a !== '0') { - $this->runTests("-$a", $b); - $this->runTests($b, "-$a"); - } - - if ($b !== '0') { - $this->runTests($a, "-$b"); - $this->runTests("-$b", $a); - } - - if ($a !== '0' && $b !== '0') { - $this->runTests("-$a", "-$b"); - $this->runTests("-$b", "-$a"); - } - - if ($c !== '0') { - $this->test("$a POW $b MOD $c", function(Calculator $calc) use($a, $b, $c) { - return $calc->modPow($a, $b, $c); - }); - } - } - } - - /** - * @param string $a The left operand. - * @param string $b The right operand. - */ - private function runTests(string $a, string $b) : void - { - $this->test("$a + $b", function(Calculator $c) use($a, $b) { - return $c->add($a, $b); - }); - - $this->test("$a - $b", function(Calculator $c) use($a, $b) { - return $c->sub($a, $b); - }); - - $this->test("$a * $b", function(Calculator $c) use($a, $b) { - return $c->mul($a, $b); - }); - - if ($b !== '0') { - $this->test("$a / $b", function(Calculator $c) use($a, $b) { - return $c->divQR($a, $b); - }); - - $this->test("$a MOD $b", function(Calculator $c) use($a, $b) { - return $c->mod($a, $b); - }); - } - - if ($b !== '0' && $b[0] !== '-') { - $this->test("INV $a MOD $b", function(Calculator $c) use($a, $b) { - return $c->modInverse($a, $b); - }); - } - - $this->test("GCD $a, $b", function(Calculator $c) use($a, $b) { - return $c->gcd($a, $b); - }); - - if ($a[0] !== '-') { - $this->test("SQRT $a", function(Calculator $c) use($a, $b) { - return $c->sqrt($a); - }); - } - - $this->test("$a AND $b", function(Calculator $c) use($a, $b) { - return $c->and($a, $b); - }); - - $this->test("$a OR $b", function(Calculator $c) use($a, $b) { - return $c->or($a, $b); - }); - - $this->test("$a XOR $b", function(Calculator $c) use($a, $b) { - return $c->xor($a, $b); - }); - } - - /** - * @param string $test A string representing the test being executed. - * @param Closure $callback A callback function accepting a Calculator instance and returning a calculation result. - */ - private function test(string $test, Closure $callback) : void - { - static $testCounter = 0; - static $lastOutputTime = 0.0; - static $currentSecond = 0; - static $currentSecondTestCounter = 0; - static $testsPerSecond = 0; - - $gmpResult = $callback($this->gmp); - $bcmathResult = $callback($this->bcmath); - $nativeResult = $callback($this->native); - - if ($gmpResult !== $bcmathResult) { - self::failure('GMP', 'BCMath', $test); - } - - if ($gmpResult !== $nativeResult) { - self::failure('GMP', 'Native', $test); - } - - $testCounter++; - $currentSecondTestCounter++; - - $time = microtime(true); - $second = (int) $time; - - if ($second !== $currentSecond) { - $currentSecond = $second; - $testsPerSecond = $currentSecondTestCounter; - $currentSecondTestCounter = 0; - } - - if ($time - $lastOutputTime >= 0.1) { - echo "\r", number_format($testCounter), ' (', number_format($testsPerSecond) . ' / s)'; - $lastOutputTime = $time; - } - } - - /** - * @param string $c1 The name of the first calculator. - * @param string $c2 The name of the second calculator. - * @param string $test A string representing the test being executed. - */ - private static function failure(string $c1, string $c2, string $test) : void - { - echo PHP_EOL; - echo 'FAILURE!', PHP_EOL; - echo $c1, ' vs ', $c2, PHP_EOL; - echo $test, PHP_EOL; - die; - } - - private function generateRandomNumber() : string - { - $length = random_int(1, $this->maxDigits); - - $number = ''; - - for ($i = 0; $i < $length; $i++) { - $number .= random_int(0, 9); - } - - $number = ltrim($number, '0'); - - if ($number === '') { - return '0'; - } - - return $number; - } -})(); diff --git a/civicrm/vendor/brick/math/src/BigDecimal.php b/civicrm/vendor/brick/math/src/BigDecimal.php index 7707b166e25f5727b2daac0a9ddbdf4d41b3da19..78246500cd98ff4467254e6dd591709e2e1c721a 100644 --- a/civicrm/vendor/brick/math/src/BigDecimal.php +++ b/civicrm/vendor/brick/math/src/BigDecimal.php @@ -752,6 +752,40 @@ final class BigDecimal extends BigNumber return \substr($value, 0, -$this->scale) . '.' . \substr($value, -$this->scale); } + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{value: string, scale: int} + */ + public function __serialize(): array + { + return ['value' => $this->value, 'scale' => $this->scale]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{value: string, scale: int} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->value)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $data['value']; + $this->scale = $data['scale']; + } + /** * This method is required by interface Serializable and SHOULD NOT be accessed directly. * @@ -794,7 +828,7 @@ final class BigDecimal extends BigNumber * @param BigDecimal $x The first decimal number. * @param BigDecimal $y The second decimal number. * - * @return array{0: string, 1: string} The scaled integer values of $x and $y. + * @return array{string, string} The scaled integer values of $x and $y. */ private function scaleValues(BigDecimal $x, BigDecimal $y) : array { diff --git a/civicrm/vendor/brick/math/src/BigInteger.php b/civicrm/vendor/brick/math/src/BigInteger.php index 0dcc8f3b340da30210bd8f78ce09280559beaad5..f213fbedb2ec99a38523b503956c1d16b68a4bda 100644 --- a/civicrm/vendor/brick/math/src/BigInteger.php +++ b/civicrm/vendor/brick/math/src/BigInteger.php @@ -1116,6 +1116,39 @@ final class BigInteger extends BigNumber return $this->value; } + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{value: string} + */ + public function __serialize(): array + { + return ['value' => $this->value]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{value: string} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->value)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $data['value']; + } + /** * This method is required by interface Serializable and SHOULD NOT be accessed directly. * diff --git a/civicrm/vendor/brick/math/src/BigRational.php b/civicrm/vendor/brick/math/src/BigRational.php index 7fbabd7f12c7556d67d1791a16dc0f85163810cd..bee094f7362436c5423405a47b2f7793c32f8293 100644 --- a/civicrm/vendor/brick/math/src/BigRational.php +++ b/civicrm/vendor/brick/math/src/BigRational.php @@ -451,6 +451,40 @@ final class BigRational extends BigNumber return $this->numerator . '/' . $this->denominator; } + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{numerator: BigInteger, denominator: BigInteger} + */ + public function __serialize(): array + { + return ['numerator' => $this->numerator, 'denominator' => $this->denominator]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{numerator: BigInteger, denominator: BigInteger} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->numerator)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->numerator = $data['numerator']; + $this->denominator = $data['denominator']; + } + /** * This method is required by interface Serializable and SHOULD NOT be accessed directly. * diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator.php index 99b478193d25da4c4b55e7b4b5c8401da1e3af81..a6eac799f771a3cd4754e4dead8581a649848f12 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator.php @@ -99,7 +99,7 @@ abstract class Calculator * @param string $a The first operand. * @param string $b The second operand. * - * @return array{0: bool, 1: bool, 2: string, 3: string} Whether $a and $b are negative, followed by their digits. + * @return array{bool, bool, string, string} Whether $a and $b are negative, followed by their digits. */ final protected function init(string $a, string $b) : array { @@ -677,9 +677,6 @@ abstract class Calculator } /** - * @psalm-suppress InvalidOperand - * @see https://github.com/vimeo/psalm/issues/4456 - * * @param string $number A positive, binary number. * * @return string diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php index a5f8a9b487c8a43876c909cec5c59f6f3a97a80f..020a6338bd0590fb8481a236639cd7d5dd16e997 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php @@ -610,7 +610,7 @@ class NativeCalculator extends Calculator * @param string $a The first operand. * @param string $b The second operand. * - * @return array{0: string, 1: string, 2: int} + * @return array{string, string, int} */ private function pad(string $a, string $b) : array { diff --git a/civicrm/vendor/civicrm/composer-compile-lib/CCL.php b/civicrm/vendor/civicrm/composer-compile-lib/CCL.php index 68fc4f704fc664ac0ae2dc0b2a624c51f98d838d..6c46409e886cb315184c7f8f551f00dc93fac2c9 100644 --- a/civicrm/vendor/civicrm/composer-compile-lib/CCL.php +++ b/civicrm/vendor/civicrm/composer-compile-lib/CCL.php @@ -251,8 +251,8 @@ class CCL { /** * Atomically dumps content into a file. * - * @param string $filename The file to be written to - * @param string $content The data to write into the file + * @param string $filename The file to be written to + * @param string|resource $content The data to write into the file * * @throws IOException if the file cannot be written to */ @@ -263,8 +263,8 @@ class CCL { /** * Appends content to an existing file. * - * @param string $filename The file to which to append content - * @param string $content The content to append + * @param string $filename The file to which to append content + * @param string|resource $content The content to append * * @throws IOException If the file is not writable */ diff --git a/civicrm/vendor/composer/autoload_classmap.php b/civicrm/vendor/composer/autoload_classmap.php index 185fc68d5bed72903e4e5a83c10d410c1574fa7b..083257e3efbe08dc7ff9e14cfa9781a55d533d76 100644 --- a/civicrm/vendor/composer/autoload_classmap.php +++ b/civicrm/vendor/composer/autoload_classmap.php @@ -6,23 +6,27 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( - 'Callback' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackBody' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackParam' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackParameterToReference' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackReturnReference' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackReturnValue' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Callback' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackBody' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackParam' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackParameterToReference' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackReturnReference' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackReturnValue' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'DOMDocumentWrapper' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php', - 'DOMEvent' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/DOMEvent.php', + 'DOMDocumentWrapper' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php', + 'DOMEvent' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/DOMEvent.php', 'Datamatrix' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php', 'Dompdf\\Cpdf' => $vendorDir . '/dompdf/dompdf/lib/Cpdf.php', - 'ICallbackNamed' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', + 'ICallbackNamed' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'PDF417' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', 'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'QRcode' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', + 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', 'TCPDFBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php', @@ -34,6 +38,8 @@ return array( 'TCPDF_IMPORT' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_import.php', 'TCPDF_PARSER' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_parser.php', 'TCPDF_STATIC' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_static.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'ezcBase' => $vendorDir . '/zetacomponents/base/src/base.php', 'ezcBaseAutoloadException' => $vendorDir . '/zetacomponents/base/src/exceptions/autoload.php', 'ezcBaseAutoloadOptions' => $vendorDir . '/zetacomponents/base/src/options/autoload.php', @@ -135,14 +141,14 @@ return array( 'ezcMailTransportSmtpException' => $vendorDir . '/zetacomponents/mail/src/exceptions/transport_smtp_exception.php', 'ezcMailVariableSet' => $vendorDir . '/zetacomponents/mail/src/transports/variable/var_set.php', 'ezcMailVirtualFile' => $vendorDir . '/zetacomponents/mail/src/parts/fileparts/virtual_file.php', - 'phpQuery' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery.php', - 'phpQueryEvents' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryEvents.php', - 'phpQueryObject' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php', - 'phpQueryObjectPlugin_Scripts' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php', - 'phpQueryObjectPlugin_WebBrowser' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', - 'phpQueryObjectPlugin_example' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php', - 'phpQueryPlugin_Scripts' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php', - 'phpQueryPlugin_WebBrowser' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', - 'phpQueryPlugin_example' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php', - 'phpQueryPlugins' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery.php', + 'phpQuery' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery.php', + 'phpQueryEvents' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryEvents.php', + 'phpQueryObject' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryObject.php', + 'phpQueryObjectPlugin_Scripts' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php', + 'phpQueryObjectPlugin_WebBrowser' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', + 'phpQueryObjectPlugin_example' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php', + 'phpQueryPlugin_Scripts' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php', + 'phpQueryPlugin_WebBrowser' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', + 'phpQueryPlugin_example' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php', + 'phpQueryPlugins' => $vendorDir . '/rubobaquero/phpquery/phpQuery/phpQuery.php', ); diff --git a/civicrm/vendor/composer/autoload_files.php b/civicrm/vendor/composer/autoload_files.php index 04deaedee033b6d9f068c2db6de16f7579c69105..3ca7438d8ccb75bef8b7b4f73b4240e912ad6da5 100644 --- a/civicrm/vendor/composer/autoload_files.php +++ b/civicrm/vendor/composer/autoload_files.php @@ -6,6 +6,7 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', @@ -16,6 +17,7 @@ return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', '7e9bd612cc444b3eed788ebbe46263a0' => $vendorDir . '/laminas/laminas-zendframework-bridge/src/autoload.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 'abede361264e2ae69ec1eee813a101af' => $vendorDir . '/markbaker/complex/classes/src/functions/abs.php', '21a5860fbef5be28db5ddfbc3cca67c4' => $vendorDir . '/markbaker/complex/classes/src/functions/acos.php', @@ -76,6 +78,7 @@ return array( '4888a6f58c08148ebe17682f9ce9b2a8' => $vendorDir . '/markbaker/matrix/classes/src/Operations/divideby.php', 'eef6fa3879d3efa347cd24d5eb348f85' => $vendorDir . '/markbaker/matrix/classes/src/Operations/divideinto.php', 'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php', + '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', '9e4824c5afbdc1482b6025ce3d4dfde8' => $vendorDir . '/league/csv/src/functions_include.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php index 179c27006bca6bd052de7370af7e64266278605d..397cc45ef391b7d3e489611bf65d9e6b2a154bb0 100644 --- a/civicrm/vendor/composer/autoload_psr4.php +++ b/civicrm/vendor/composer/autoload_psr4.php @@ -13,6 +13,8 @@ return array( 'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'), 'When\\' => array($vendorDir . '/tplaner/when/src'), 'TYPO3\\PharStreamWrapper\\' => array($vendorDir . '/typo3/phar-stream-wrapper/src'), + 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), @@ -20,6 +22,8 @@ return array( 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), + 'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'), 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), @@ -50,6 +54,7 @@ return array( 'LastCall\\DownloadsPlugin\\' => array($vendorDir . '/civicrm/composer-downloads-plugin/src'), 'Laminas\\ZendFrameworkBridge\\' => array($vendorDir . '/laminas/laminas-zendframework-bridge/src'), 'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'), + 'Html2Text\\' => array($vendorDir . '/html2text/html2text/src', $vendorDir . '/html2text/html2text/test'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index e827f45f95a4cc2667ffc94150c6375efe871abb..6e64499d3e1aacf41ea84757753caf516f58a06e 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 ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28 +class ComposerAutoloaderInitc4b80b14ec4be1e37a02512281713763 { private static $loader; @@ -24,22 +24,22 @@ class ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28 require __DIR__ . '/platform_check.php'; - spl_autoload_register(array('ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitc4b80b14ec4be1e37a02512281713763', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitc4b80b14ec4be1e37a02512281713763', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); set_include_path(implode(PATH_SEPARATOR, $includePaths)); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitc4b80b14ec4be1e37a02512281713763::getInitializer($loader)); $loader->register(true); - $includeFiles = \Composer\Autoload\ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$files; + $includeFiles = \Composer\Autoload\ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$files; foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire53a782a3c9a14d5d0c80ac3ee1053c28($fileIdentifier, $file); + composerRequirec4b80b14ec4be1e37a02512281713763($fileIdentifier, $file); } return $loader; @@ -51,7 +51,7 @@ class ComposerAutoloaderInit53a782a3c9a14d5d0c80ac3ee1053c28 * @param string $file * @return void */ -function composerRequire53a782a3c9a14d5d0c80ac3ee1053c28($fileIdentifier, $file) +function composerRequirec4b80b14ec4be1e37a02512281713763($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 18286ae34e69a90220e306b2740747e30f1bc4b2..3f93a44fd3c0a203cbd0378313ff47b897445770 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,9 +4,10 @@ namespace Composer\Autoload; -class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 +class ComposerStaticInitc4b80b14ec4be1e37a02512281713763 { public static $files = array ( + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', @@ -17,6 +18,7 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', '7e9bd612cc444b3eed788ebbe46263a0' => __DIR__ . '/..' . '/laminas/laminas-zendframework-bridge/src/autoload.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', 'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php', '21a5860fbef5be28db5ddfbc3cca67c4' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acos.php', @@ -77,6 +79,7 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 '4888a6f58c08148ebe17682f9ce9b2a8' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/Operations/divideby.php', 'eef6fa3879d3efa347cd24d5eb348f85' => __DIR__ . '/..' . '/markbaker/matrix/classes/src/Operations/divideinto.php', 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', + '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', '9e4824c5afbdc1482b6025ce3d4dfde8' => __DIR__ . '/..' . '/league/csv/src/functions_include.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', @@ -115,6 +118,8 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 ), 'S' => array ( + 'Symfony\\Polyfill\\Php81\\' => 23, + 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Php73\\' => 23, 'Symfony\\Polyfill\\Php72\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, @@ -122,6 +127,8 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, 'Symfony\\Polyfill\\Iconv\\' => 23, 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Contracts\\Service\\' => 26, + 'Symfony\\Contracts\\EventDispatcher\\' => 34, 'Symfony\\Component\\VarDumper\\' => 28, 'Symfony\\Component\\Process\\' => 26, 'Symfony\\Component\\Finder\\' => 25, @@ -162,6 +169,10 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 'Laminas\\ZendFrameworkBridge\\' => 28, 'Laminas\\Escaper\\' => 16, ), + 'H' => + array ( + 'Html2Text\\' => 10, + ), 'G' => array ( 'GuzzleHttp\\Psr7\\' => 16, @@ -223,6 +234,14 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 array ( 0 => __DIR__ . '/..' . '/typo3/phar-stream-wrapper/src', ), + 'Symfony\\Polyfill\\Php81\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php81', + ), + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), 'Symfony\\Polyfill\\Php73\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php73', @@ -251,6 +270,14 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', ), + 'Symfony\\Contracts\\Service\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/service-contracts', + ), + 'Symfony\\Contracts\\EventDispatcher\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts', + ), 'Symfony\\Component\\VarDumper\\' => array ( 0 => __DIR__ . '/..' . '/symfony/var-dumper', @@ -373,6 +400,11 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 array ( 0 => __DIR__ . '/..' . '/laminas/laminas-escaper/src', ), + 'Html2Text\\' => + array ( + 0 => __DIR__ . '/..' . '/html2text/html2text/src', + 1 => __DIR__ . '/..' . '/html2text/html2text/test', + ), 'GuzzleHttp\\Psr7\\' => array ( 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', @@ -541,23 +573,27 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 ); public static $classMap = array ( - 'Callback' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackBody' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackParam' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackParameterToReference' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackReturnReference' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', - 'CallbackReturnValue' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Callback' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackBody' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackParam' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackParameterToReference' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackReturnReference' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', + 'CallbackReturnValue' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'DOMDocumentWrapper' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php', - 'DOMEvent' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/DOMEvent.php', + 'DOMDocumentWrapper' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php', + 'DOMEvent' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/DOMEvent.php', 'Datamatrix' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php', 'Dompdf\\Cpdf' => __DIR__ . '/..' . '/dompdf/dompdf/lib/Cpdf.php', - 'ICallbackNamed' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php', + 'ICallbackNamed' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php', 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'PDF417' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', 'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'QRcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', + 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', 'TCPDFBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php', @@ -569,6 +605,8 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 'TCPDF_IMPORT' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_import.php', 'TCPDF_PARSER' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_parser.php', 'TCPDF_STATIC' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_static.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'ezcBase' => __DIR__ . '/..' . '/zetacomponents/base/src/base.php', 'ezcBaseAutoloadException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/autoload.php', 'ezcBaseAutoloadOptions' => __DIR__ . '/..' . '/zetacomponents/base/src/options/autoload.php', @@ -670,26 +708,26 @@ class ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28 'ezcMailTransportSmtpException' => __DIR__ . '/..' . '/zetacomponents/mail/src/exceptions/transport_smtp_exception.php', 'ezcMailVariableSet' => __DIR__ . '/..' . '/zetacomponents/mail/src/transports/variable/var_set.php', 'ezcMailVirtualFile' => __DIR__ . '/..' . '/zetacomponents/mail/src/parts/fileparts/virtual_file.php', - 'phpQuery' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery.php', - 'phpQueryEvents' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryEvents.php', - 'phpQueryObject' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php', - 'phpQueryObjectPlugin_Scripts' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php', - 'phpQueryObjectPlugin_WebBrowser' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', - 'phpQueryObjectPlugin_example' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php', - 'phpQueryPlugin_Scripts' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php', - 'phpQueryPlugin_WebBrowser' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', - 'phpQueryPlugin_example' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php', - 'phpQueryPlugins' => __DIR__ . '/..' . '/electrolinux/phpquery/phpQuery/phpQuery.php', + 'phpQuery' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery.php', + 'phpQueryEvents' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryEvents.php', + 'phpQueryObject' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryObject.php', + 'phpQueryObjectPlugin_Scripts' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php', + 'phpQueryObjectPlugin_WebBrowser' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', + 'phpQueryObjectPlugin_example' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php', + 'phpQueryPlugin_Scripts' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php', + 'phpQueryPlugin_WebBrowser' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php', + 'phpQueryPlugin_example' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php', + 'phpQueryPlugins' => __DIR__ . '/..' . '/rubobaquero/phpquery/phpQuery/phpQuery.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit53a782a3c9a14d5d0c80ac3ee1053c28::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInitc4b80b14ec4be1e37a02512281713763::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index 24891d37d12eeb65d6191922cc27d88d9d4ea5f0..21de0eefbf2b77b93db5eb29c0fc21841a945a15 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -50,17 +50,17 @@ }, { "name": "brick/math", - "version": "0.9.2", - "version_normalized": "0.9.2.0", + "version": "0.9.3", + "version_normalized": "0.9.3.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", "shasum": "" }, "require": { @@ -70,9 +70,9 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" + "vimeo/psalm": "4.9.2" }, - "time": "2021-01-20T22:51:39+00:00", + "time": "2021-08-15T20:50:18+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -97,9 +97,13 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" + "source": "https://github.com/brick/math/tree/0.9.3" }, "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" @@ -527,17 +531,17 @@ }, { "name": "cweagans/composer-patches", - "version": "1.7.0", - "version_normalized": "1.7.0.0", + "version": "1.7.2", + "version_normalized": "1.7.2.0", "source": { "type": "git", "url": "https://github.com/cweagans/composer-patches.git", - "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf" + "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf", - "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e9969cfc0796e6dea9b4e52f77f18e1065212871", + "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871", "shasum": "" }, "require": { @@ -548,7 +552,7 @@ "composer/composer": "~1.0 || ~2.0", "phpunit/phpunit": "~4.6" }, - "time": "2020-09-30T17:56:20+00:00", + "time": "2022-01-25T19:21:20+00:00", "type": "composer-plugin", "extra": { "class": "cweagans\\Composer\\Patches" @@ -572,7 +576,7 @@ "description": "Provides a way to patch Composer packages.", "support": { "issues": "https://github.com/cweagans/composer-patches/issues", - "source": "https://github.com/cweagans/composer-patches/tree/1.7.0" + "source": "https://github.com/cweagans/composer-patches/tree/1.7.2" }, "install-path": "../cweagans/composer-patches" }, @@ -711,57 +715,6 @@ }, "install-path": "../dompdf/dompdf" }, - { - "name": "electrolinux/phpquery", - "version": "0.9.6", - "version_normalized": "0.9.6.0", - "source": { - "type": "git", - "url": "https://github.com/electrolinux/phpquery.git", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", - "shasum": "" - }, - "time": "2013-03-21T12:39:33+00:00", - "type": "library", - "extra": { - "patches_applied": { - "PHP7.4 Fix for array access using {} instead of []": "https://raw.githubusercontent.com/civicrm/civicrm-core/fe45bdfc4f3e3d3deb27e3d853cdbc7f616620a9/tools/scripts/composer/patches/php74_array_access_fix_phpquery.patch" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "phpQuery/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobiasz Cudnik", - "email": "tobiasz.cudnik@gmail.com", - "homepage": "https://github.com/TobiaszCudnik", - "role": "Developer" - }, - { - "name": "didier Belot", - "role": "Packager" - } - ], - "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", - "homepage": "http://code.google.com/p/phpquery/", - "support": { - "source": "https://github.com/electrolinux/phpquery/tree/0.9.6" - }, - "install-path": "../electrolinux/phpquery" - }, { "name": "ezyang/htmlpurifier", "version": "v4.13.0", @@ -1194,6 +1147,55 @@ ], "install-path": "../guzzlehttp/psr7" }, + { + "name": "html2text/html2text", + "version": "4.3.1", + "version_normalized": "4.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/mtibben/html2text.git", + "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtibben/html2text/zipball/61ad68e934066a6f8df29a3d23a6460536d0855c", + "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-mbstring": "For best performance", + "symfony/polyfill-mbstring": "If you can't install ext-mbstring" + }, + "time": "2020-04-16T23:44:31+00:00", + "type": "library", + "extra": { + "patches_applied": { + "Fix deprecation warning in php8.1 on html_entity_decode": "https://raw.githubusercontent.com/civicrm/civicrm-core/e758d20e9f613ca6c4cf652c23d2cd7e5d3af3ce/tools/scripts/composer/html2text_html2_text_php81_deprecation.patch" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Html2Text\\": [ + "src/", + "test/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Converts HTML to formatted plain text", + "support": { + "issues": "https://github.com/mtibben/html2text/issues", + "source": "https://github.com/mtibben/html2text/tree/4.3.1" + }, + "install-path": "../html2text/html2text" + }, { "name": "laminas/laminas-escaper", "version": "2.6.1", @@ -2384,23 +2386,24 @@ }, { "name": "pear/mail_mime", - "version": "1.10.9", - "version_normalized": "1.10.9.0", + "version": "1.10.11", + "version_normalized": "1.10.11.0", "source": { "type": "git", "url": "https://github.com/pear/Mail_Mime.git", - "reference": "1e7ae4e5258b6c0d385a8e76add567934245d38d" + "reference": "d4fb9ce61201593d0f8c6db629c45e29c3409c14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/1e7ae4e5258b6c0d385a8e76add567934245d38d", - "reference": "1e7ae4e5258b6c0d385a8e76add567934245d38d", + "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/d4fb9ce61201593d0f8c6db629c45e29c3409c14", + "reference": "d4fb9ce61201593d0f8c6db629c45e29c3409c14", "shasum": "" }, "require": { - "pear/pear-core-minimal": "*" + "pear/pear-core-minimal": "*", + "php": ">=5.2.0" }, - "time": "2020-06-27T08:35:27+00:00", + "time": "2021-09-05T08:42:45+00:00", "type": "library", "extra": { "patches_applied": { @@ -2418,7 +2421,7 @@ "./" ], "license": [ - "BSD-3-clause" + "BSD-3-Clause" ], "authors": [ { @@ -3220,29 +3223,24 @@ }, { "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "version": "1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, - "time": "2017-02-14T16:28:37+00:00", + "time": "2021-03-05T17:36:06+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -3256,7 +3254,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -3270,7 +3268,7 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, "install-path": "../psr/container" }, @@ -3597,6 +3595,56 @@ }, "install-path": "../ralouphie/getallheaders" }, + { + "name": "rubobaquero/phpquery", + "version": "0.9.15", + "version_normalized": "0.9.15.0", + "source": { + "type": "git", + "url": "https://github.com/rubobaquero/phpquery.git", + "reference": "d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rubobaquero/phpquery/zipball/d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe", + "reference": "d2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2022-05-03T12:31:11+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "phpQuery/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "didier Belot", + "homepage": "https://github.com/electrolinux/phpquery", + "role": "Packager, maintainer" + }, + { + "name": "Tobiasz Cudnik", + "email": "tobiasz.cudnik@gmail.com", + "homepage": "https://github.com/TobiaszCudnik", + "role": "Developer" + } + ], + "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", + "homepage": "http://code.google.com/p/phpquery/", + "support": { + "source": "https://github.com/rubobaquero/phpquery/tree/0.9.15" + }, + "install-path": "../rubobaquero/phpquery" + }, { "name": "sabberworm/php-css-parser", "version": "8.4.0", @@ -3724,38 +3772,40 @@ }, { "name": "symfony/config", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.42", + "version_normalized": "4.4.42.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" + "reference": "83cdafd1bd3370de23e3dc2ed01026908863be81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "url": "https://api.github.com/repos/symfony/config/zipball/83cdafd1bd3370de23e3dc2ed01026908863be81", + "reference": "83cdafd1bd3370de23e3dc2ed01026908863be81", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" }, - "time": "2020-10-24T10:57:07+00:00", + "time": "2022-05-17T07:10:14+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3780,10 +3830,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v3.4.47" + "source": "https://github.com/symfony/config/tree/v4.4.42" }, "funding": [ { @@ -3803,36 +3853,39 @@ }, { "name": "symfony/dependency-injection", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.43", + "version_normalized": "4.4.43.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" + "reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd", + "reference": "8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": ">=7.1.3", + "psr/container": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3|>=5.0", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "symfony/yaml": "<4.4.26" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/yaml": "^4.4.26|^5.0" }, "suggest": { "symfony/config": "", @@ -3841,7 +3894,7 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, - "time": "2020-10-24T10:57:07+00:00", + "time": "2022-06-22T15:01:38+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3866,10 +3919,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v3.4.47" + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.43" }, "funding": [ { @@ -3887,40 +3940,118 @@ ], "install-path": "../symfony/dependency-injection" }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "version_normalized": "2.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/deprecation-contracts" + }, { "name": "symfony/event-dispatcher", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.42", + "version_normalized": "4.4.42.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "reference": "708e761740c16b02c86e3f0c932018a06b895d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/708e761740c16b02c86e3f0c932018a06b895d40", + "reference": "708e761740c16b02c86e3f0c932018a06b895d40", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, - "time": "2020-10-24T10:57:07+00:00", + "time": "2022-05-05T15:33:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3945,10 +4076,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.42" }, "funding": [ { @@ -3966,26 +4097,109 @@ ], "install-path": "../symfony/event-dispatcher" }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.13", + "version_normalized": "1.1.13.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "time": "2022-01-02T09:41:36+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/event-dispatcher-contracts" + }, { "name": "symfony/filesystem", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.42", + "version_normalized": "4.4.42.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, - "time": "2020-10-24T10:57:07+00:00", + "time": "2022-05-20T08:49:14+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4010,10 +4224,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v3.4.47" + "source": "https://github.com/symfony/filesystem/tree/v4.4.42" }, "funding": [ { @@ -4033,23 +4247,24 @@ }, { "name": "symfony/finder", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.41", + "version_normalized": "4.4.41.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", + "url": "https://api.github.com/repos/symfony/finder/zipball/40790bdf293b462798882ef6da72bb49a4a6633a", + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, - "time": "2020-11-16T17:02:08+00:00", + "time": "2022-04-14T15:36:10+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4074,10 +4289,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v3.4.47" + "source": "https://github.com/symfony/finder/tree/v4.4.41" }, "funding": [ { @@ -4097,30 +4312,37 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", + "version": "v1.26.0", + "version_normalized": "1.26.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" }, - "time": "2020-05-12T16:14:59+00:00", + "time": "2022-05-24T11:49:31+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "installation-source": "dist", @@ -4155,7 +4377,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.17.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -4676,25 +4898,194 @@ ], "install-path": "../symfony/polyfill-php73" }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "version_normalized": "1.26.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2022-05-10T07:21:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "version_normalized": "1.26.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2022-05-24T11:49:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php81" + }, { "name": "symfony/process", - "version": "v3.4.47", - "version_normalized": "3.4.47.0", + "version": "v4.4.41", + "version_normalized": "4.4.41.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", - "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", + "url": "https://api.github.com/repos/symfony/process/zipball/9eedd60225506d56e42210a70c21bb80ca8456ce", + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, - "time": "2020-10-24T10:57:07+00:00", + "time": "2022-04-04T10:19:07+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4719,10 +5110,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v3.4.47" + "source": "https://github.com/symfony/process/tree/v4.4.41" }, "funding": [ { @@ -4740,6 +5131,92 @@ ], "install-path": "../symfony/process" }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "version_normalized": "2.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "time": "2022-05-30T19:17:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/service-contracts" + }, { "name": "symfony/var-dumper", "version": "v3.4.47", diff --git a/civicrm/vendor/composer/installed.php b/civicrm/vendor/composer/installed.php index ab215f9e54cb6403646a804242c3d7f830816a07..a1dbfaa7dd72f427c9924fac352945360c30c009 100644 --- a/civicrm/vendor/composer/installed.php +++ b/civicrm/vendor/composer/installed.php @@ -1,9 +1,9 @@ <?php return array( 'root' => array( 'name' => 'civicrm/civicrm-core', - 'pretty_version' => '5.51.x-dev', - 'version' => '5.51.9999999.9999999-dev', - 'reference' => '047979bd487cd5c34ac87959deb649b46fc1357a', + 'pretty_version' => '5.52.x-dev', + 'version' => '5.52.9999999.9999999-dev', + 'reference' => '04ae5d12ef221deaecffd756d875d70964c993d0', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -20,9 +20,9 @@ 'dev_requirement' => false, ), 'brick/math' => array( - 'pretty_version' => '0.9.2', - 'version' => '0.9.2.0', - 'reference' => 'dff976c2f3487d42c1db75a3b180e2b9f0e72ce0', + 'pretty_version' => '0.9.3', + 'version' => '0.9.3.0', + 'reference' => 'ca57d18f028f84f777b2168cd1911b0dee2343ae', 'type' => 'library', 'install_path' => __DIR__ . '/../brick/math', 'aliases' => array(), @@ -56,9 +56,9 @@ 'dev_requirement' => false, ), 'civicrm/civicrm-core' => array( - 'pretty_version' => '5.51.x-dev', - 'version' => '5.51.9999999.9999999-dev', - 'reference' => '047979bd487cd5c34ac87959deb649b46fc1357a', + 'pretty_version' => '5.52.x-dev', + 'version' => '5.52.9999999.9999999-dev', + 'reference' => '04ae5d12ef221deaecffd756d875d70964c993d0', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -101,9 +101,9 @@ 'dev_requirement' => false, ), 'cweagans/composer-patches' => array( - 'pretty_version' => '1.7.0', - 'version' => '1.7.0.0', - 'reference' => 'ae02121445ad75f4eaff800cc532b5e6233e2ddf', + 'pretty_version' => '1.7.2', + 'version' => '1.7.2.0', + 'reference' => 'e9969cfc0796e6dea9b4e52f77f18e1065212871', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../cweagans/composer-patches', 'aliases' => array(), @@ -127,15 +127,6 @@ 'aliases' => array(), 'dev_requirement' => false, ), - 'electrolinux/phpquery' => array( - 'pretty_version' => '0.9.6', - 'version' => '0.9.6.0', - 'reference' => '6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../electrolinux/phpquery', - 'aliases' => array(), - 'dev_requirement' => false, - ), 'ezyang/htmlpurifier' => array( 'pretty_version' => 'v4.13.0', 'version' => '4.13.0.0', @@ -187,6 +178,15 @@ 0 => '*', ), ), + 'html2text/html2text' => array( + 'pretty_version' => '4.3.1', + 'version' => '4.3.1.0', + 'reference' => '61ad68e934066a6f8df29a3d23a6460536d0855c', + 'type' => 'library', + 'install_path' => __DIR__ . '/../html2text/html2text', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'laminas/laminas-escaper' => array( 'pretty_version' => '2.6.1', 'version' => '2.6.1.0', @@ -350,9 +350,9 @@ 'dev_requirement' => false, ), 'pear/mail_mime' => array( - 'pretty_version' => '1.10.9', - 'version' => '1.10.9.0', - 'reference' => '1e7ae4e5258b6c0d385a8e76add567934245d38d', + 'pretty_version' => '1.10.11', + 'version' => '1.10.11.0', + 'reference' => 'd4fb9ce61201593d0f8c6db629c45e29c3409c14', 'type' => 'library', 'install_path' => __DIR__ . '/../pear/mail_mime', 'aliases' => array(), @@ -458,9 +458,9 @@ 'dev_requirement' => false, ), 'psr/container' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f', + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), @@ -472,6 +472,12 @@ 0 => '1.0', ), ), + 'psr/event-dispatcher-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), 'psr/http-client' => array( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', @@ -538,6 +544,15 @@ 0 => 'v1.10.7', ), ), + 'rubobaquero/phpquery' => array( + 'pretty_version' => '0.9.15', + 'version' => '0.9.15.0', + 'reference' => 'd2c3c1bb8a9d48dd0f1230bda2413ce38108b5fe', + 'type' => 'library', + 'install_path' => __DIR__ . '/../rubobaquero/phpquery', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'sabberworm/php-css-parser' => array( 'pretty_version' => '8.4.0', 'version' => '8.4.0.0', @@ -557,54 +572,78 @@ 'dev_requirement' => false, ), 'symfony/config' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => 'bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f', + 'pretty_version' => 'v4.4.42', + 'version' => '4.4.42.0', + 'reference' => '83cdafd1bd3370de23e3dc2ed01026908863be81', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/config', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/dependency-injection' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => '51d2a2708c6ceadad84393f8581df1dcf9e5e84b', + 'pretty_version' => 'v4.4.43', + 'version' => '4.4.43.0', + 'reference' => '8d0ae6d87ceea5f3a352413f9d1f71ed2234dcbd', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/dependency-injection', 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.5.2', + 'version' => '2.5.2.0', + 'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => '31fde73757b6bad247c54597beef974919ec6860', + 'pretty_version' => 'v4.4.42', + 'version' => '4.4.42.0', + 'reference' => '708e761740c16b02c86e3f0c932018a06b895d40', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/event-dispatcher', 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/event-dispatcher-contracts' => array( + 'pretty_version' => 'v1.1.13', + 'version' => '1.1.13.0', + 'reference' => '1d5cd762abaa6b2a4169d3e77610193a7157129e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/event-dispatcher-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.1', + ), + ), 'symfony/filesystem' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => 'e58d7841cddfed6e846829040dca2cca0ebbbbb3', + 'pretty_version' => 'v4.4.42', + 'version' => '4.4.42.0', + 'reference' => '815412ee8971209bd4c1eecd5f4f481eacd44bf5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/finder' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => 'b6b6ad3db3edb1b4b1c1896b1975fb684994de6e', + 'pretty_version' => 'v4.4.41', + 'version' => '4.4.41.0', + 'reference' => '40790bdf293b462798882ef6da72bb49a4a6633a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.17.0', - 'version' => '1.17.0.0', - 'reference' => 'e94c8b1bbe2bc77507a1056cdb06451c75b427f9', + 'pretty_version' => 'v1.26.0', + 'version' => '1.26.0.0', + 'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), @@ -664,15 +703,48 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.26.0', + 'version' => '1.26.0.0', + 'reference' => 'cfa0ae98841b9e461207c13ab093d76b0fa7bace', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-php81' => array( + 'pretty_version' => 'v1.26.0', + 'version' => '1.26.0.0', + 'reference' => '13f6d1271c663dc5ae9fb843a8f16521db7687a1', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php81', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'symfony/process' => array( - 'pretty_version' => 'v3.4.47', - 'version' => '3.4.47.0', - 'reference' => 'b8648cf1d5af12a44a51d07ef9bf980921f15fca', + 'pretty_version' => 'v4.4.41', + 'version' => '4.4.41.0', + 'reference' => '9eedd60225506d56e42210a70c21bb80ca8456ce', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/service-contracts' => array( + 'pretty_version' => 'v2.5.2', + 'version' => '2.5.2.0', + 'reference' => '4b426aac47d6427cc1a1d0f7e2ac724627f5966c', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/service-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/service-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0|2.0', + ), + ), 'symfony/var-dumper' => array( 'pretty_version' => 'v3.4.47', 'version' => '3.4.47.0', diff --git a/civicrm/vendor/cweagans/composer-patches/README.md b/civicrm/vendor/cweagans/composer-patches/README.md index 972694028def52240b512b43ff3be52bda1a91da..87f9dc0c7482798dfd49fbf76df4d578ee1e8d52 100644 --- a/civicrm/vendor/cweagans/composer-patches/README.md +++ b/civicrm/vendor/cweagans/composer-patches/README.md @@ -166,6 +166,33 @@ To enforce throwing an error and stopping package installation/update immediatel By default, failed patches are skipped. +## Patches reporting + +When a patch is applied, the plugin writes a report-file `PATCHES.txt` to a patching directory (e.g. `./patch-me/PATCHES.txt`), +which contains a list of applied patches. + +If you want to avoid this behavior, add a specific key to the `extra` section: +```json +"extra": { + "composer-patches-skip-reporting": true +} +``` + +Or provide an environment variable `COMPOSER_PATCHES_SKIP_REPORTING` with a config. + +## Patching composer.json in dependencies + +This doesn't work like you'd want. By the time you're running `composer install`, +the metadata from your dependencies' composer.json has already been aggregated by +packagist (or whatever metadata repo you're using). Unfortunately, this means that +you cannot e.g. patch a dependency to be compatible with an earlier version of PHP +or change the framework version that a plugin depends on. + +@anotherjames over at @computerminds wrote an article about how to work around +that particular problem for a Drupal 8 -> Drupal 9 upgrade: + +[Apply Drupal 9 compatibility patches with Composer](https://www.computerminds.co.uk/articles/apply-drupal-9-compatibility-patches-composer) ([archive](https://web.archive.org/web/20210124171010/https://www.computerminds.co.uk/articles/apply-drupal-9-compatibility-patches-composer)) + ## Difference between this and netresearch/composer-patches-plugin - This plugin is much more simple to use and maintain diff --git a/civicrm/vendor/cweagans/composer-patches/src/Patches.php b/civicrm/vendor/cweagans/composer-patches/src/Patches.php index 0e36c7ff356a43f8c1035c8a79b15f47aff3cbc0..52e4203a968fba538e03a33131abf5b33a6e4076 100644 --- a/civicrm/vendor/cweagans/composer-patches/src/Patches.php +++ b/civicrm/vendor/cweagans/composer-patches/src/Patches.php @@ -124,6 +124,7 @@ class Patches implements PluginInterface, EventSubscriberInterface { } // Remove packages for which the patch set has changed. + $promises = array(); foreach ($packages as $package) { if (!($package instanceof AliasPackage)) { $package_name = $package->getName(); @@ -135,10 +136,14 @@ class Patches implements PluginInterface, EventSubscriberInterface { || ($has_patches && $has_applied_patches && $tmp_patches[$package_name] !== $extra['patches_applied'])) { $uninstallOperation = new UninstallOperation($package, 'Removing package so it can be re-installed and re-patched.'); $this->io->write('<info>Removing package ' . $package_name . ' so that it can be re-installed and re-patched.</info>'); - $installationManager->uninstall($localRepository, $uninstallOperation); + $promises[] = $installationManager->uninstall($localRepository, $uninstallOperation); } } } + $promises = array_filter($promises); + if ($promises) { + $this->composer->getLoop()->wait($promises); + } } // If the Locker isn't available, then we don't need to do this. // It's the first time packages have been installed. @@ -278,6 +283,7 @@ class Patches implements PluginInterface, EventSubscriberInterface { // Check if we should exit in failure. $extra = $this->composer->getPackage()->getExtra(); $exitOnFailure = getenv('COMPOSER_EXIT_ON_PATCH_FAILURE') || !empty($extra['composer-exit-on-patch-failure']); + $skipReporting = getenv('COMPOSER_PATCHES_SKIP_REPORTING') || !empty($extra['composer-patches-skip-reporting']); // Get the package object for the current operation. $operation = $event->getOperation(); @@ -324,7 +330,10 @@ class Patches implements PluginInterface, EventSubscriberInterface { $localPackage->setExtra($extra); $this->io->write(''); - $this->writePatchReport($this->patches[$package_name], $install_path); + + if (true !== $skipReporting) { + $this->writePatchReport($this->patches[$package_name], $install_path); + } } /** @@ -555,6 +564,19 @@ class Patches implements PluginInterface, EventSubscriberInterface { return $patched; } + /** + * Indicates if a package has been patched. + * + * @param \Composer\Package\PackageInterface $package + * The package to check. + * + * @return bool + * TRUE if the package has been patched. + */ + public static function isPackagePatched(PackageInterface $package) { + return array_key_exists('patches_applied', $package->getExtra()); + } + /** * {@inheritDoc} */ diff --git a/civicrm/vendor/electrolinux/phpquery/PATCHES.txt b/civicrm/vendor/electrolinux/phpquery/PATCHES.txt deleted file mode 100644 index 6d21d5461ec549894acadb41f5e717081200b37c..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/PATCHES.txt +++ /dev/null @@ -1,7 +0,0 @@ -This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches) -Patches applied to this directory: - -PHP7.4 Fix for array access using {} instead of [] -Source: https://raw.githubusercontent.com/civicrm/civicrm-core/fe45bdfc4f3e3d3deb27e3d853cdbc7f616620a9/tools/scripts/composer/patches/php74_array_access_fix_phpquery.patch - - diff --git a/civicrm/vendor/electrolinux/phpquery/unit-tests/test.html b/civicrm/vendor/electrolinux/phpquery/unit-tests/test.html deleted file mode 100644 index 03d7c7835947abb5758a323ab34b2516b153cd01..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/unit-tests/test.html +++ /dev/null @@ -1,54 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <title> - plainTemplate test - </title> - <script src="../jQueryServer/demo/jquery.js" type="text/javascript" charset="utf-8"></script> - <script src="<?php print $js_src; ?>" type="text/javascript" charset="utf-8"></script> - </head> - <body> - <div class='articles'> - div.articles text node - < - <ul> - <li> - <p>This is paragraph of first LI</p> - <p class='title'> - this is example title - </p> - <p class='body'> - this is example body - </p> - </li> - <li id='testID'> - <p rel='test'>This is paragraph of second LI</p> - <p class='title'> - this is example title 2 - </p> - <p class='body'> - this is example body 2 - </p> - </li> - <li> - <p rel='test'>This is paragraph of third LI</p> - <p class='noTitle'>There isnt any title</p> - <p class='body'> - this is example body 3 - </p> - </li> - </ul> - <p class='after'>paragraph after UL</p> - </div> - <ul> - <li id='i_have_nested_list'> - <ul> - <li class='nested'></li> - </ul> - </li> - <li class='second'> - </li> - </ul> - </body> -</html> diff --git a/civicrm/vendor/electrolinux/phpquery/unit-tests/test.php b/civicrm/vendor/electrolinux/phpquery/unit-tests/test.php deleted file mode 100644 index 938aeb6ba630fe9a7bd69443eb2d7ff791d78c99..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/unit-tests/test.php +++ /dev/null @@ -1,217 +0,0 @@ -<?php -require_once 'PHPUnit/Autoload.php'; -require_once '../phpQuery/phpQuery.php'; -//phpQuery::$debug = true; - -class phpQueryBasicTest extends PHPUnit_Framework_TestCase { - function provider() { - // TODO change filename - return array( array( - phpQuery::newDocumentFile('test.html') - )); - } - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testFilterWithPseudoclass( $pq ) { -// xdebug_break(); -// function testFilterWithPseudoclass( $pq ) { -// print_r(`ls`); -// $pq = phpQuery::newDocumentFile('test.html'); - $pq = $pq->find('p') - ->filter('.body:gt(1)'); - $result = array( - 'p.body', - ); - - $this->assertTrue( $pq->whois() == $result ); - } - - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testSlice( $pq ) { - $testResult = array( - 'li#testID', - ); - $pq = $pq->find('li') - ->slice(1, 2); - - $this->assertTrue( $pq->whois() == $testResult ); - } - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testSlice2( $pq ) { - // SLICE2 - $testResult = array( - 'li#testID', - 'li', - 'li#i_have_nested_list', - 'li.nested', - ); - - $pq = $pq->find('li') - ->slice(1, -1); - - $this->assertTrue( $pq->whois() == $testResult ); - } - - - /** - * @return void - */ - function testMultiInsert() { - // Multi-insert - $pq = phpQuery::newDocument('<li><span class="field1"></span><span class="field1"></span></li>') - ->find('.field1') - ->php('longlongtest'); - $validResult = '<li><span class="field1"><php>longlongtest</php></span><span class="field1"><php>longlongtest</php></span></li>'; - similar_text($pq->htmlOuter(), $validResult, $similarity); - - $this->assertGreaterThan( 80, $similarity); - - } - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testIndex( $pq ) { - $testResult = 1; - $pq = $pq->find('p') - ->index( - $pq->find('p.title:first') - ); - - $this->assertTrue( $pq == $testResult ); - } - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testClone( $pq ) { - $testResult = 3; - $document = null; - $pq = $pq->toReference($document) - ->find('p:first'); - - foreach(array(0,1,2) as $i) { - $pq->clone() - ->addClass("clone-test") - ->addClass("class-$i") - ->insertBefore($pq); - } - - $size = $document->find('.clone-test')->size(); - $this->assertEquals( $testResult, $size); - } - - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testNextSibling( $pq ) { - $testResult = 3; - $document = null; - $result = $pq->find('li:first') - ->next() - ->next() - ->prev() - ->is('#testID'); - - $this->assertTrue( $result ); - } - - /** - * @param phpQueryObject $pq - * @dataProvider provider - * @return void - */ - function testSimpleDataInsertion( $pq ) { - $testName = 'Simple data insertion'; - $testResult = <<<EOF -<div class="articles"> - div.articles text node - <ul> - - <li> - <p>This is paragraph of first LI</p> - <p class="title">News 1 title</p> - <p class="body">News 1 body</p> - </li> - -<li> - <p>This is paragraph of first LI</p> - <p class="title">News 2 title</p> - <p class="body">News 2 body</p> - </li> -<li> - <p>This is paragraph of first LI</p> - <p class="title">News 3</p> - <p class="body">News 3 body</p> - </li> -</ul> -<p>paragraph after UL</p> - </div> -EOF; - $rows = array( - array( - 'title' => 'News 1 title', - 'body' => 'News 1 body', - ), - array( - 'title' => 'News 2 title', - 'body' => 'News 2 body', - ), - array( - 'title' => 'News 3', - 'body' => 'News 3 body', - ), - ); - $articles = $pq->find('.articles ul'); - $rowSrc = $articles->find('li') - ->remove() - ->eq(0); - foreach ($rows as $r) { - $row = $rowSrc->_clone(); - foreach ($r as $field => $value) { - $row->find(".{$field}") - ->html($value); - // die($row->htmlOuter()); - } - $row->appendTo($articles); - } - $result = $pq->find('.articles')->htmlOuter(); - //print htmlspecialchars("<pre>{$result}</pre>").'<br />'; - $similarity = 0.0; - similar_text($testResult, $result, $similarity); - - $this->assertGreaterThan( 90, $similarity); - } - - -// function __construct() { -// xdebug_break(); -// parent::__construct(); -// } -} - -$test = new phpQueryBasicTest(); -//$test->testFilterWithPseudoclass(); -$result = null; -//$test->run($result); \ No newline at end of file diff --git a/civicrm/vendor/html2text/html2text/.gitignore b/civicrm/vendor/html2text/html2text/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..3c973fb7da657f3a014eb651aa8aed70053890cb --- /dev/null +++ b/civicrm/vendor/html2text/html2text/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +/vendor/ +composer.lock diff --git a/civicrm/vendor/html2text/html2text/.travis.yml b/civicrm/vendor/html2text/html2text/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..e9087914c8ee9faed53e26dc102cfcc3beb2a51d --- /dev/null +++ b/civicrm/vendor/html2text/html2text/.travis.yml @@ -0,0 +1,18 @@ +language: php + +matrix: + include: + - php: 5.3 + dist: precise + - php: 5.4 + dist: trusty + - php: 5.5 + dist: trusty + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: 7.2 + - php: 7.3 + +before_script: + - composer install diff --git a/civicrm/vendor/html2text/html2text/PATCHES.txt b/civicrm/vendor/html2text/html2text/PATCHES.txt new file mode 100644 index 0000000000000000000000000000000000000000..5388d4c0c9766adc820a8c7a465673f599b11743 --- /dev/null +++ b/civicrm/vendor/html2text/html2text/PATCHES.txt @@ -0,0 +1,7 @@ +This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches) +Patches applied to this directory: + +Fix deprecation warning in php8.1 on html_entity_decode +Source: https://raw.githubusercontent.com/civicrm/civicrm-core/e758d20e9f613ca6c4cf652c23d2cd7e5d3af3ce/tools/scripts/composer/html2text_html2_text_php81_deprecation.patch + + diff --git a/civicrm/vendor/html2text/html2text/README.md b/civicrm/vendor/html2text/html2text/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e66da7b18be6bd94f4df01851023f03b7fead873 --- /dev/null +++ b/civicrm/vendor/html2text/html2text/README.md @@ -0,0 +1,26 @@ +# Html2Text + +A PHP library for converting HTML to formatted plain text. + +[](https://travis-ci.org/mtibben/html2text) + +## Installing + +``` +composer require html2text/html2text +``` + +## Basic Usage +```php +$html = new \Html2Text\Html2Text('Hello, "<b>world</b>"'); + +echo $html->getText(); // Hello, "WORLD" +``` + +## History + +This library started life on the blog of Jon Abernathy http://www.chuggnutt.com/html2text + +A number of projects picked up the library and started using it - among those was RoundCube mail. They made a number of updates to it over time to suit their webmail client. + +Now it has been extracted as a standalone library. Hopefully it can be of use to others. diff --git a/civicrm/vendor/html2text/html2text/composer.json b/civicrm/vendor/html2text/html2text/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..ab76efed566d87471fef9ecfcff3ebc2d0b96975 --- /dev/null +++ b/civicrm/vendor/html2text/html2text/composer.json @@ -0,0 +1,16 @@ +{ + "name": "html2text/html2text", + "description": "Converts HTML to formatted plain text", + "type": "library", + "license": "GPL-2.0-or-later", + "autoload": { + "psr-4": { "Html2Text\\": ["src/", "test/"] } + }, + "require-dev": { + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-mbstring": "For best performance", + "symfony/polyfill-mbstring": "If you can't install ext-mbstring" + } +} diff --git a/civicrm/vendor/html2text/html2text/phpunit.xml.dist b/civicrm/vendor/html2text/html2text/phpunit.xml.dist new file mode 100644 index 0000000000000000000000000000000000000000..17beecab1c58de585f8c76a8709933ec4d186abe --- /dev/null +++ b/civicrm/vendor/html2text/html2text/phpunit.xml.dist @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<phpunit colors="true" + convertErrorsToExceptions="true" + convertNoticesToExceptions="true" + convertWarningsToExceptions="true" + processIsolation="false" + stopOnFailure="false" + syntaxCheck="false" + bootstrap="test/bootstrap.php" +> + <testsuites> + <testsuite name="Html2Text Test Suite"> + <directory>test</directory> + </testsuite> + </testsuites> +</phpunit> diff --git a/civicrm/vendor/html2text/html2text/src/Html2Text.php b/civicrm/vendor/html2text/html2text/src/Html2Text.php new file mode 100644 index 0000000000000000000000000000000000000000..5fa6185ec8b774206b15b53b548d2a9e80660291 --- /dev/null +++ b/civicrm/vendor/html2text/html2text/src/Html2Text.php @@ -0,0 +1,659 @@ +<?php + +/* + * Copyright (c) 2005-2007 Jon Abernathy <jon@chuggnutt.com> + * + * This script is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +namespace Html2Text; + +class Html2Text +{ + const ENCODING = 'UTF-8'; + + protected $htmlFuncFlags; + + /** + * Contains the HTML content to convert. + * + * @var string $html + */ + protected $html; + + /** + * Contains the converted, formatted text. + * + * @var string $text + */ + protected $text; + + /** + * List of preg* regular expression patterns to search for, + * used in conjunction with $replace. + * + * @var array $search + * @see $replace + */ + protected $search = array( + "/\r/", // Non-legal carriage return + "/[\n\t]+/", // Newlines and tabs + '/<head\b[^>]*>.*?<\/head>/i', // <head> + '/<script\b[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with + '/<style\b[^>]*>.*?<\/style>/i', // <style>s -- which strip_tags supposedly has problems with + '/<i\b[^>]*>(.*?)<\/i>/i', // <i> + '/<em\b[^>]*>(.*?)<\/em>/i', // <em> + '/<ins\b[^>]*>(.*?)<\/ins>/i', // <ins> + '/(<ul\b[^>]*>|<\/ul>)/i', // <ul> and </ul> + '/(<ol\b[^>]*>|<\/ol>)/i', // <ol> and </ol> + '/(<dl\b[^>]*>|<\/dl>)/i', // <dl> and </dl> + '/<li\b[^>]*>(.*?)<\/li>/i', // <li> and </li> + '/<dd\b[^>]*>(.*?)<\/dd>/i', // <dd> and </dd> + '/<dt\b[^>]*>(.*?)<\/dt>/i', // <dt> and </dt> + '/<li\b[^>]*>/i', // <li> + '/<hr\b[^>]*>/i', // <hr> + '/<div\b[^>]*>/i', // <div> + '/(<table\b[^>]*>|<\/table>)/i', // <table> and </table> + '/(<tr\b[^>]*>|<\/tr>)/i', // <tr> and </tr> + '/<td\b[^>]*>(.*?)<\/td>/i', // <td> and </td> + '/<span class="_html2text_ignore">.+?<\/span>/i', // <span class="_html2text_ignore">...</span> + '/<(img)\b[^>]*alt=\"([^>"]+)\"[^>]*>/i', // <img> with alt tag + ); + + /** + * List of pattern replacements corresponding to patterns searched. + * + * @var array $replace + * @see $search + */ + protected $replace = array( + '', // Non-legal carriage return + ' ', // Newlines and tabs + '', // <head> + '', // <script>s -- which strip_tags supposedly has problems with + '', // <style>s -- which strip_tags supposedly has problems with + '_\\1_', // <i> + '_\\1_', // <em> + '_\\1_', // <ins> + "\n\n", // <ul> and </ul> + "\n\n", // <ol> and </ol> + "\n\n", // <dl> and </dl> + "\t* \\1\n", // <li> and </li> + " \\1\n", // <dd> and </dd> + "\t* \\1", // <dt> and </dt> + "\n\t* ", // <li> + "\n-------------------------\n", // <hr> + "<div>\n", // <div> + "\n\n", // <table> and </table> + "\n", // <tr> and </tr> + "\t\t\\1\n", // <td> and </td> + "", // <span class="_html2text_ignore">...</span> + '[\\2]', // <img> with alt tag + ); + + /** + * List of preg* regular expression patterns to search for, + * used in conjunction with $entReplace. + * + * @var array $entSearch + * @see $entReplace + */ + protected $entSearch = array( + '/™/i', // TM symbol in win-1252 + '/—/i', // m-dash in win-1252 + '/&(amp|#38);/i', // Ampersand: see converter() + '/[ ]{2,}/', // Runs of spaces, post-handling + '/'/i', // The apostrophe symbol + ); + + /** + * List of pattern replacements corresponding to patterns searched. + * + * @var array $entReplace + * @see $entSearch + */ + protected $entReplace = array( + 'â„¢', // TM symbol + '—', // m-dash + '|+|amp|+|', // Ampersand: see converter() + ' ', // Runs of spaces, post-handling + '\'', // Apostrophe + ); + + /** + * List of preg* regular expression patterns to search for + * and replace using callback function. + * + * @var array $callbackSearch + */ + protected $callbackSearch = array( + '/<(h)[123456]( [^>]*)?>(.*?)<\/h[123456]>/i', // h1 - h6 + '/[ ]*<(p)( [^>]*)?>(.*?)<\/p>[ ]*/si', // <p> with surrounding whitespace. + '/<(br)[^>]*>[ ]*/i', // <br> with leading whitespace after the newline. + '/<(b)( [^>]*)?>(.*?)<\/b>/i', // <b> + '/<(strong)( [^>]*)?>(.*?)<\/strong>/i', // <strong> + '/<(del)( [^>]*)?>(.*?)<\/del>/i', // <del> + '/<(th)( [^>]*)?>(.*?)<\/th>/i', // <th> and </th> + '/<(a) [^>]*href=("|\')([^"\']+)\2([^>]*)>(.*?)<\/a>/i' // <a href=""> + ); + + /** + * List of preg* regular expression patterns to search for in PRE body, + * used in conjunction with $preReplace. + * + * @var array $preSearch + * @see $preReplace + */ + protected $preSearch = array( + "/\n/", + "/\t/", + '/ /', + '/<pre[^>]*>/', + '/<\/pre>/' + ); + + /** + * List of pattern replacements corresponding to patterns searched for PRE body. + * + * @var array $preReplace + * @see $preSearch + */ + protected $preReplace = array( + '<br>', + ' ', + ' ', + '', + '', + ); + + /** + * Temporary workspace used during PRE processing. + * + * @var string $preContent + */ + protected $preContent = ''; + + /** + * Contains the base URL that relative links should resolve to. + * + * @var string $baseurl + */ + protected $baseurl = ''; + + /** + * Indicates whether content in the $html variable has been converted yet. + * + * @var boolean $converted + * @see $html, $text + */ + protected $converted = false; + + /** + * Contains URL addresses from links to be rendered in plain text. + * + * @var array $linkList + * @see buildlinkList() + */ + protected $linkList = array(); + + /** + * Various configuration options (able to be set in the constructor) + * + * @var array $options + */ + protected $options = array( + 'do_links' => 'inline', // 'none' + // 'inline' (show links inline) + // 'nextline' (show links on the next line) + // 'table' (if a table of link URLs should be listed after the text. + // 'bbcode' (show links as bbcode) + + 'width' => 70, // Maximum width of the formatted text, in columns. + // Set this value to 0 (or less) to ignore word wrapping + // and not constrain text to a fixed-width column. + ); + + private function legacyConstruct($html = '', $fromFile = false, array $options = array()) + { + $this->set_html($html, $fromFile); + $this->options = array_merge($this->options, $options); + } + + /** + * @param string $html Source HTML + * @param array $options Set configuration options + */ + public function __construct($html = '', $options = array()) + { + $this->htmlFuncFlags = (PHP_VERSION_ID < 50400) + ? ENT_QUOTES + : ENT_QUOTES | ENT_HTML5; + + // for backwards compatibility + if (!is_array($options)) { + return call_user_func_array(array($this, 'legacyConstruct'), func_get_args()); + } + + $this->html = $html; + $this->options = array_merge($this->options, $options); + } + + /** + * Get the source HTML + * + * @return string + */ + public function getHtml() + { + return $this->html; + } + + /** + * Set the source HTML + * + * @param string $html HTML source content + */ + public function setHtml($html) + { + $this->html = $html; + $this->converted = false; + } + + /** + * @deprecated + */ + public function set_html($html, $from_file = false) + { + if ($from_file) { + throw new \InvalidArgumentException("Argument from_file no longer supported"); + } + + return $this->setHtml($html); + } + + /** + * Returns the text, converted from HTML. + * + * @return string Plain text + */ + public function getText() + { + if (!$this->converted) { + $this->convert(); + } + + return $this->text; + } + + /** + * @deprecated + */ + public function get_text() + { + return $this->getText(); + } + + /** + * @deprecated + */ + public function print_text() + { + print $this->getText(); + } + + /** + * @deprecated + */ + public function p() + { + return $this->print_text(); + } + + /** + * Sets a base URL to handle relative links. + * + * @param string $baseurl + */ + public function setBaseUrl($baseurl) + { + $this->baseurl = $baseurl; + } + + /** + * @deprecated + */ + public function set_base_url($baseurl) + { + return $this->setBaseUrl($baseurl); + } + + protected function convert() + { + $origEncoding = mb_internal_encoding(); + mb_internal_encoding(self::ENCODING); + + $this->doConvert(); + + mb_internal_encoding($origEncoding); + } + + protected function doConvert() + { + $this->linkList = array(); + + $text = trim($this->html); + + $this->converter($text); + + if ($this->linkList) { + $text .= "\n\nLinks:\n------\n"; + foreach ($this->linkList as $i => $url) { + $text .= '[' . ($i + 1) . '] ' . $url . "\n"; + } + } + + $this->text = $text; + + $this->converted = true; + } + + protected function converter(&$text) + { + $this->convertBlockquotes($text); + $this->convertPre($text); + $text = preg_replace($this->search, $this->replace, $text); + $text = preg_replace_callback($this->callbackSearch, array($this, 'pregCallback'), $text); + $text = strip_tags($text); + $text = preg_replace($this->entSearch, $this->entReplace, $text); + $text = html_entity_decode($text, $this->htmlFuncFlags, self::ENCODING); + + // Remove unknown/unhandled entities (this cannot be done in search-and-replace block) + $text = preg_replace('/&([a-zA-Z0-9]{2,6}|#[0-9]{2,4});/', '', $text); + + // Convert "|+|amp|+|" into "&", need to be done after handling of unknown entities + // This properly handles situation of "&quot;" in input string + $text = str_replace('|+|amp|+|', '&', $text); + + // Normalise empty lines + $text = preg_replace("/\n\s+\n/", "\n\n", $text); + $text = preg_replace("/[\n]{3,}/", "\n\n", $text); + + // remove leading empty lines (can be produced by eg. P tag on the beginning) + $text = ltrim($text, "\n"); + + if ($this->options['width'] > 0) { + $text = wordwrap($text, $this->options['width']); + } + } + + /** + * Helper function called by preg_replace() on link replacement. + * + * Maintains an internal list of links to be displayed at the end of the + * text, with numeric indices to the original point in the text they + * appeared. Also makes an effort at identifying and handling absolute + * and relative links. + * + * @param string $link URL of the link + * @param string $display Part of the text to associate number with + * @param null $linkOverride + * @return string + */ + protected function buildlinkList($link, $display, $linkOverride = null) + { + $linkMethod = ($linkOverride) ? $linkOverride : $this->options['do_links']; + if ($linkMethod == 'none') { + return $display; + } + + // Ignored link types + if (preg_match('!^(javascript:|mailto:|#)!i', html_entity_decode($link))) { + return $display; + } + + if (preg_match('!^([a-z][a-z0-9.+-]+:)!i', $link)) { + $url = $link; + } else { + $url = $this->baseurl; + if (mb_substr($link, 0, 1) != '/') { + $url .= '/'; + } + $url .= $link; + } + + if ($linkMethod == 'table') { + if (($index = array_search($url, $this->linkList)) === false) { + $index = count($this->linkList); + $this->linkList[] = $url; + } + + return $display . ' [' . ($index + 1) . ']'; + } elseif ($linkMethod == 'nextline') { + if ($url === $display) { + return $display; + } + return $display . "\n[" . $url . ']'; + } elseif ($linkMethod == 'bbcode') { + return sprintf('[url=%s]%s[/url]', $url, $display); + } else { // link_method defaults to inline + if ($url === $display) { + return $display; + } + return $display . ' [' . $url . ']'; + } + } + + /** + * Helper function for PRE body conversion. + * + * @param string &$text HTML content + */ + protected function convertPre(&$text) + { + // get the content of PRE element + while (preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) { + // Replace br tags with newlines to prevent the search-and-replace callback from killing whitespace + $this->preContent = preg_replace('/(<br\b[^>]*>)/i', "\n", $matches[1]); + + // Run our defined tags search-and-replace with callback + $this->preContent = preg_replace_callback( + $this->callbackSearch, + array($this, 'pregCallback'), + $this->preContent + ); + + // convert the content + $this->preContent = sprintf( + '<div><br>%s<br></div>', + preg_replace($this->preSearch, $this->preReplace, $this->preContent) + ); + + // replace the content (use callback because content can contain $0 variable) + $text = preg_replace_callback( + '/<pre[^>]*>.*<\/pre>/ismU', + array($this, 'pregPreCallback'), + $text, + 1 + ); + + // free memory + $this->preContent = ''; + } + } + + /** + * Helper function for BLOCKQUOTE body conversion. + * + * @param string &$text HTML content + */ + protected function convertBlockquotes(&$text) + { + if (preg_match_all('/<\/*blockquote[^>]*>/i', $text, $matches, PREG_OFFSET_CAPTURE)) { + $originalText = $text; + $start = 0; + $taglen = 0; + $level = 0; + $diff = 0; + foreach ($matches[0] as $m) { + $m[1] = mb_strlen(substr($originalText, 0, $m[1])); + if ($m[0][0] == '<' && $m[0][1] == '/') { + $level--; + if ($level < 0) { + $level = 0; // malformed HTML: go to next blockquote + } elseif ($level > 0) { + // skip inner blockquote + } else { + $end = $m[1]; + $len = $end - $taglen - $start; + // Get blockquote content + $body = mb_substr($text, $start + $taglen - $diff, $len); + + // Set text width + $pWidth = $this->options['width']; + if ($this->options['width'] > 0) $this->options['width'] -= 2; + // Convert blockquote content + $body = trim($body); + $this->converter($body); + // Add citation markers and create PRE block + $body = preg_replace('/((^|\n)>*)/', '\\1> ', trim($body)); + $body = '<pre>' . htmlspecialchars($body, $this->htmlFuncFlags, self::ENCODING) . '</pre>'; + // Re-set text width + $this->options['width'] = $pWidth; + // Replace content + $text = mb_substr($text, 0, $start - $diff) + . $body + . mb_substr($text, $end + mb_strlen($m[0]) - $diff); + + $diff += $len + $taglen + mb_strlen($m[0]) - mb_strlen($body); + unset($body); + } + } else { + if ($level == 0) { + $start = $m[1]; + $taglen = mb_strlen($m[0]); + } + $level++; + } + } + } + } + + /** + * Callback function for preg_replace_callback use. + * + * @param array $matches PREG matches + * @return string + */ + protected function pregCallback($matches) + { + switch (mb_strtolower($matches[1])) { + case 'p': + // Replace newlines with spaces. + $para = str_replace("\n", " ", $matches[3]); + + // Trim trailing and leading whitespace within the tag. + $para = trim($para); + + // Add trailing newlines for this para. + return "\n" . $para . "\n"; + case 'br': + return "\n"; + case 'b': + case 'strong': + return $this->toupper($matches[3]); + case 'del': + return $this->tostrike($matches[3]); + case 'th': + return $this->toupper("\t\t" . $matches[3] . "\n"); + case 'h': + return $this->toupper("\n\n" . $matches[3] . "\n\n"); + case 'a': + // override the link method + $linkOverride = null; + if (preg_match('/_html2text_link_(\w+)/', $matches[4], $linkOverrideMatch)) { + $linkOverride = $linkOverrideMatch[1]; + } + // Remove spaces in URL (#1487805) + $url = str_replace(' ', '', $matches[3]); + + return $this->buildlinkList($url, $matches[5], $linkOverride); + } + + return ''; + } + + /** + * Callback function for preg_replace_callback use in PRE content handler. + * + * @param array $matches PREG matches + * @return string + */ + protected function pregPreCallback(/** @noinspection PhpUnusedParameterInspection */ $matches) + { + return $this->preContent; + } + + /** + * Strtoupper function with HTML tags and entities handling. + * + * @param string $str Text to convert + * @return string Converted text + */ + protected function toupper($str) + { + // string can contain HTML tags + $chunks = preg_split('/(<[^>]*>)/', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); + + // convert toupper only the text between HTML tags + foreach ($chunks as $i => $chunk) { + if ($chunk[0] != '<') { + $chunks[$i] = $this->strtoupper($chunk); + } + } + + return implode($chunks); + } + + /** + * Strtoupper multibyte wrapper function with HTML entities handling. + * + * @param string $str Text to convert + * @return string Converted text + */ + protected function strtoupper($str) + { + $str = html_entity_decode($str, $this->htmlFuncFlags, self::ENCODING); + $str = mb_strtoupper($str); + $str = htmlspecialchars($str, $this->htmlFuncFlags, self::ENCODING); + + return $str; + } + + /** + * Helper function for DEL conversion. + * + * @param string $text HTML content + * @return string Converted text + */ + protected function tostrike($str) + { + $rtn = ''; + for ($i = 0; $i < mb_strlen($str); $i++) { + $chr = mb_substr($str, $i, 1); + $combiningChr = chr(0xC0 | 0x336 >> 6). chr(0x80 | 0x336 & 0x3F); + $rtn .= $chr . $combiningChr; + } + return $rtn; + } +} diff --git a/civicrm/vendor/pear/mail_mime/.gitattributes b/civicrm/vendor/pear/mail_mime/.gitattributes index 3726835a685976ead7315e71550a59ec4e3a3482..881c159170147a1b2a950ed244390e0199acc979 100644 --- a/civicrm/vendor/pear/mail_mime/.gitattributes +++ b/civicrm/vendor/pear/mail_mime/.gitattributes @@ -1,4 +1,5 @@ tests/ export-ignore +.github/ export-ignore .gitignore export-ignore .travis.yml export-ignore package.xml export-ignore diff --git a/civicrm/vendor/pear/mail_mime/Mail/mime.php b/civicrm/vendor/pear/mail_mime/Mail/mime.php index 25342f86aa3e983d6fb99c239428ce167f3ae597..9198135b9330b04e3adcfa4d1a077f81affe1a01 100644 --- a/civicrm/vendor/pear/mail_mime/Mail/mime.php +++ b/civicrm/vendor/pear/mail_mime/Mail/mime.php @@ -8,7 +8,7 @@ * contain plain-text bodies, HTML bodies, attachments, inline * images and specific headers. * - * Compatible with PHP version 5 and 7 + * Compatible with PHP version 5, 7 and 8 * * LICENSE: This LICENSE is in the BSD license style. * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org> @@ -87,21 +87,21 @@ class Mail_mime * * @var string */ - protected $txtbody; + protected $txtbody = ''; /** * Contains the html part of the email * * @var string */ - protected $htmlbody; + protected $htmlbody = ''; /** * Contains the text/calendar part of the email * * @var string */ - protected $calbody; + protected $calbody = ''; /** * List of the attached images @@ -792,7 +792,7 @@ class Mail_mime // Write the rest of the message into file $res = $this->get($params, $filename); - return $res ?: true; + return $res ? $res : true; } /** @@ -837,7 +837,7 @@ class Mail_mime @ini_set('magic_quotes_runtime', $magic_quotes); } - return $res ?: true; + return $res ? $res : true; } /** @@ -875,7 +875,7 @@ class Mail_mime } } - if (count($this->html_images) && isset($this->htmlbody)) { + if (count($this->html_images) && strlen($this->htmlbody) > 0) { foreach ($this->html_images as $key => $value) { $rval = preg_quote($value['name'], '#'); $regex = array( @@ -987,12 +987,12 @@ class Mail_mime $alternatives_count = $html + $calendar + $has_text; if ($alternatives_count > 1) { - $alt_part = $this->addAlternativePart($parent_part ?: $mixed_params); + $alt_part = $this->addAlternativePart($parent_part ? $parent_part : $mixed_params); } else { $alt_part = null; } - $dest_part = $alt_part ?: $parent_part; + $dest_part = $alt_part ? $alt_part : $parent_part; $part = null; if ($has_text) { @@ -1007,7 +1007,7 @@ class Mail_mime $part = $this->addCalendarPart($dest_part); } - return $dest_part ?: $part; + return $dest_part ? $dest_part : $part; } /** diff --git a/civicrm/vendor/pear/mail_mime/Mail/mimePart.php b/civicrm/vendor/pear/mail_mime/Mail/mimePart.php index b66c840c450cc15c8fabe2abbf5ffd061107d0dc..a0e55225b121783e15a1184504500925ced8188f 100644 --- a/civicrm/vendor/pear/mail_mime/Mail/mimePart.php +++ b/civicrm/vendor/pear/mail_mime/Mail/mimePart.php @@ -8,7 +8,7 @@ * of mime mail. * This class however allows full control over the email. * - * Compatible with PHP version 5 and 7 + * Compatible with PHP version 5, 7 and 8 * * LICENSE: This LICENSE is in the BSD license style. * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org> @@ -636,9 +636,11 @@ class Mail_mimePart } elseif ($dec == 9 && isset($line[$i])) { ; // Do nothing if a TAB is not on eol } elseif (($dec == 61) || ($dec < 32) || ($dec > 126)) { + // Escape unprintable chars $char = $escape . sprintf('%02X', $dec); } elseif (($dec == 46) && (($newline == '') - || ((strlen($newline) + strlen("=2E")) >= $line_max)) + || ((strlen($newline) + strlen(".=")) > $line_max + && isset($line[$i]))) ) { // Bug #9722: convert full-stop at bol, // some Windows servers need this, won't break anything (cipri) @@ -647,10 +649,12 @@ class Mail_mimePart $char = '=2E'; } - // Note, when changing this line, also change the ($dec == 46) - // check line, as it mimics this line due to Bug #11731 // EOL is not counted - if ((strlen($newline) + strlen($char)) >= $line_max) { + if ((strlen($newline) + strlen($char) == $line_max) + && !isset($line[$i]) + ) { + ; // no soft break is needed if we're the last char + } elseif ((strlen($newline) + strlen($char)) >= $line_max) { // soft line break; " =\r\n" is okay $output .= $newline . $escape . $eol; $newline = ''; @@ -881,7 +885,7 @@ class Mail_mimePart // Structured header (make sure addr-spec inside is not encoded) if (!empty($separator)) { // Simple e-mail address regexp - $email_regexp = '([^\s<]+|("[^\r\n"]+"))@\S+'; + $email_regexp = '([^\s<]+|("[^\r\n"]+"))@[^\s"]+'; if ($mb) { $value = mb_convert_encoding($value, 'UTF-8', $mb_charset); diff --git a/civicrm/vendor/pear/mail_mime/composer.json b/civicrm/vendor/pear/mail_mime/composer.json index 08498e564060b9f6d2bc5251b1b5a3b94e077905..b78f0b4a78616811f62395e22e2e481fa4a0aef3 100644 --- a/civicrm/vendor/pear/mail_mime/composer.json +++ b/civicrm/vendor/pear/mail_mime/composer.json @@ -21,7 +21,7 @@ "include-path": [ "./" ], - "license": "BSD-3-clause", + "license": "BSD-3-Clause", "name": "pear/mail_mime", "support": { "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime", @@ -29,6 +29,7 @@ }, "type": "library", "require": { + "php": ">=5.2.0", "pear/pear-core-minimal": "*" } } diff --git a/civicrm/vendor/psr/container/README.md b/civicrm/vendor/psr/container/README.md index 084f6df51b21868be82bfc59ef361a6d803d7d3d..1b9d9e5708ad387080dcde0d74585c15647733d6 100644 --- a/civicrm/vendor/psr/container/README.md +++ b/civicrm/vendor/psr/container/README.md @@ -1,5 +1,13 @@ -# PSR Container +Container interface +============== -This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md). +This repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url]. + +Note that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container. + +The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. + +[psr-url]: https://www.php-fig.org/psr/psr-11/ +[package-url]: https://packagist.org/packages/psr/container +[implementation-url]: https://packagist.org/providers/psr/container-implementation -Note that this is not a container implementation of its own. See the specification for more details. diff --git a/civicrm/vendor/psr/container/composer.json b/civicrm/vendor/psr/container/composer.json index b8ee01265dee64bc8b911a6eece972353b7db2f3..3797a25382aa2ce80ea066979a330397e569ac10 100644 --- a/civicrm/vendor/psr/container/composer.json +++ b/civicrm/vendor/psr/container/composer.json @@ -8,20 +8,15 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } } } diff --git a/civicrm/vendor/psr/container/src/ContainerExceptionInterface.php b/civicrm/vendor/psr/container/src/ContainerExceptionInterface.php index d35c6b4d864d9870f1517f47c2917b9e7e2b9a35..cf10b8b4f570efbf6d793e1be65311c1cdb4b068 100644 --- a/civicrm/vendor/psr/container/src/ContainerExceptionInterface.php +++ b/civicrm/vendor/psr/container/src/ContainerExceptionInterface.php @@ -1,7 +1,4 @@ <?php -/** - * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file) - */ namespace Psr\Container; diff --git a/civicrm/vendor/psr/container/src/ContainerInterface.php b/civicrm/vendor/psr/container/src/ContainerInterface.php index c3a7206fa00b0db45bbaa2cf47fa9698d578d363..cf8e7fd330ffcac7259d2c908c26581736dcf4ae 100644 --- a/civicrm/vendor/psr/container/src/ContainerInterface.php +++ b/civicrm/vendor/psr/container/src/ContainerInterface.php @@ -1,7 +1,6 @@ <?php -/** - * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file) - */ + +declare(strict_types=1); namespace Psr\Container; @@ -20,7 +19,7 @@ interface ContainerInterface * * @return mixed Entry. */ - public function get($id); + public function get(string $id); /** * Returns true if the container can return an entry for the given identifier. @@ -33,5 +32,5 @@ interface ContainerInterface * * @return bool */ - public function has($id); + public function has(string $id); } diff --git a/civicrm/vendor/psr/container/src/NotFoundExceptionInterface.php b/civicrm/vendor/psr/container/src/NotFoundExceptionInterface.php index 6566704eda1d0f551641d38d7c944bffd7d530d9..650bf464eb554870d9f983ee5f636e7d3789001b 100644 --- a/civicrm/vendor/psr/container/src/NotFoundExceptionInterface.php +++ b/civicrm/vendor/psr/container/src/NotFoundExceptionInterface.php @@ -1,7 +1,4 @@ <?php -/** - * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file) - */ namespace Psr\Container; diff --git a/civicrm/vendor/rubobaquero/phpquery/.gitattributes b/civicrm/vendor/rubobaquero/phpquery/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..1eef81a1483ac44eb3c222a2d19800acf7677b46 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/.gitattributes @@ -0,0 +1,4 @@ +/.idea export-ignore +/test-cases export-ignore +/unit-tests export-ignore + diff --git a/civicrm/vendor/electrolinux/phpquery/README.md b/civicrm/vendor/rubobaquero/phpquery/README.md similarity index 90% rename from civicrm/vendor/electrolinux/phpquery/README.md rename to civicrm/vendor/rubobaquero/phpquery/README.md index 63b68700f9d958e1be360f86e31818992c42ba3f..304616937d5e40d38fbee34eef84d35bd0df9c73 100644 --- a/civicrm/vendor/electrolinux/phpquery/README.md +++ b/civicrm/vendor/rubobaquero/phpquery/README.md @@ -1,5 +1,7 @@ ## phpQuery, one more fork! +**Note:** _I haven't used this package since many years, and just recently looked at the code: this is scary, buggy and unfinished. Please don't use it on any production server!_ + My intent is to have it easily integrated in differents projects, so available on packagist. I've gathered some fix and new features here and there, as will keep looking for new stuff on github about phpQuery @@ -12,7 +14,6 @@ I've gathered some fix and new features here and there, as will keep looking for ### github repos i've looked at: * https://github.com/denis-isaev/phpquery -* https://github.com/fmorrow/pQuery--PHPQuery- (big project so far) * https://github.com/r-sal/phpquery * https://github.com/damien-list/phpquery-1 * https://github.com/nev3rm0re/phpquery @@ -20,6 +21,10 @@ I've gathered some fix and new features here and there, as will keep looking for * https://github.com/kevee/phpquery (include php-css-parser) * https://github.com/lucassouza1/phpquery +## Manual + +* [Manual](wiki/README.md) imported from http://code.google.com/p/phpquery/wiki + ## Extracts from fmorrow README.md: ### Whats phpQuery? diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/classtrees_phpQuery.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/classtrees_phpQuery.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/classtrees_phpQuery.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/classtrees_phpQuery.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/elementindex.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/elementindex.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/elementindex.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/elementindex.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/elementindex_phpQuery.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/elementindex_phpQuery.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/elementindex_phpQuery.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/elementindex_phpQuery.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/errors.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/errors.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/errors.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/errors.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/index.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/index.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/index.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/index.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/li_phpQuery.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/li_phpQuery.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/li_phpQuery.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/li_phpQuery.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/media/background.png b/civicrm/vendor/rubobaquero/phpquery/api-reference/media/background.png similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/media/background.png rename to civicrm/vendor/rubobaquero/phpquery/api-reference/media/background.png diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/media/empty.png b/civicrm/vendor/rubobaquero/phpquery/api-reference/media/empty.png similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/media/empty.png rename to civicrm/vendor/rubobaquero/phpquery/api-reference/media/empty.png diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/media/style.css b/civicrm/vendor/rubobaquero/phpquery/api-reference/media/style.css similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/media/style.css rename to civicrm/vendor/rubobaquero/phpquery/api-reference/media/style.css diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/Callback.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/Callback.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/Callback.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/Callback.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/CallbackParam.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/CallbackParam.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/CallbackParam.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/CallbackParam.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/CallbackReference.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/CallbackReference.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/CallbackReference.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/CallbackReference.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/DOMDocumentWrapper.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/DOMDocumentWrapper.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/DOMDocumentWrapper.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/DOMDocumentWrapper.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/DOMEvent.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/DOMEvent.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/DOMEvent.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/DOMEvent.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_Callback.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_Callback.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_Callback.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_Callback.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_DOMDocumentWrapper.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_DOMDocumentWrapper.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_DOMDocumentWrapper.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_DOMDocumentWrapper.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_DOMEvent.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_DOMEvent.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_DOMEvent.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_DOMEvent.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQuery.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQuery.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQuery.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQuery.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQueryEvents.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQueryEvents.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQueryEvents.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQueryEvents.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQueryObject.php.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQueryObject.php.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/_phpQueryObject.php.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/_phpQueryObject.php.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQuery.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQuery.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQuery.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQuery.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryEvents.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryEvents.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryEvents.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryEvents.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryObject.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryObject.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryObject.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryObject.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryPlugins.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryPlugins.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/phpQuery/phpQueryPlugins.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/phpQuery/phpQueryPlugins.html diff --git a/civicrm/vendor/electrolinux/phpquery/api-reference/todolist.html b/civicrm/vendor/rubobaquero/phpquery/api-reference/todolist.html similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/api-reference/todolist.html rename to civicrm/vendor/rubobaquero/phpquery/api-reference/todolist.html diff --git a/civicrm/vendor/electrolinux/phpquery/cli/phpquery b/civicrm/vendor/rubobaquero/phpquery/cli/phpquery similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/cli/phpquery rename to civicrm/vendor/rubobaquero/phpquery/cli/phpquery diff --git a/civicrm/vendor/electrolinux/phpquery/composer.json b/civicrm/vendor/rubobaquero/phpquery/composer.json similarity index 67% rename from civicrm/vendor/electrolinux/phpquery/composer.json rename to civicrm/vendor/rubobaquero/phpquery/composer.json index 2ea5d6663b1f01d4092cc923a98ed9ddc04517fd..9755172cb4a577e165a7a35c0aab0798015b1548 100644 --- a/civicrm/vendor/electrolinux/phpquery/composer.json +++ b/civicrm/vendor/rubobaquero/phpquery/composer.json @@ -1,23 +1,30 @@ { - "name": "electrolinux/phpquery" + "name": "rubobaquero/phpquery" ,"type": "library" ,"description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library" - ,"version": "0.9.6" + ,"version": "0.9.15" ,"keywords": [] ,"homepage": "http://code.google.com/p/phpquery/" ,"license": "MIT" ,"authors": [ - { + + { + "name": "didier Belot" + ,"role": "Packager, maintainer" + ,"homepage": "https://github.com/electrolinux/phpquery" + } + ,{ "name": "Tobiasz Cudnik" ,"email": "tobiasz.cudnik@gmail.com" ,"homepage": "https://github.com/TobiaszCudnik" ,"role": "Developer" } - ,{ - "name": "didier Belot" - ,"role": "Packager" - } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { "classmap": ["phpQuery/"] } diff --git a/civicrm/vendor/electrolinux/phpquery/demo.php b/civicrm/vendor/rubobaquero/phpquery/demo.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/demo.php rename to civicrm/vendor/rubobaquero/phpquery/demo.php diff --git a/civicrm/vendor/electrolinux/phpquery/jQueryServer/demo/demo.htm b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/demo/demo.htm similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/jQueryServer/demo/demo.htm rename to civicrm/vendor/rubobaquero/phpquery/jQueryServer/demo/demo.htm diff --git a/civicrm/vendor/electrolinux/phpquery/jQueryServer/demo/jquery.js b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/demo/jquery.js similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/jQueryServer/demo/jquery.js rename to civicrm/vendor/rubobaquero/phpquery/jQueryServer/demo/jquery.js diff --git a/civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.config.php.example b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.config.php.example similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.config.php.example rename to civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.config.php.example diff --git a/civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.js b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.js similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.js rename to civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.js diff --git a/civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.php b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.php similarity index 99% rename from civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.php rename to civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.php index 75ff06498a372d75f9b419c2581fcd28bb5e86e4..093fe05c0198b5a66e24e59ed95178cbf790861b 100755 --- a/civicrm/vendor/electrolinux/phpquery/jQueryServer/jQueryServer.php +++ b/civicrm/vendor/rubobaquero/phpquery/jQueryServer/jQueryServer.php @@ -1,4 +1,4 @@ -`<?php +<?php /** * jQuery Server Plugin * @@ -104,4 +104,4 @@ class jQueryServer { // } } new jQueryServer($_POST['data']); -?> \ No newline at end of file +?> diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery.php similarity index 99% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery.php index 08f22fc1b86e66449cec57d9957e9d26aa93eb05..118c94bb6ff95c8f14fe290b2cdeddd329d7fa1f 100644 --- a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery.php +++ b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery.php @@ -32,8 +32,8 @@ require_once(dirname(__FILE__).'/phpQuery/compat/mbstring.php'); */ abstract class phpQuery { /** - * XXX: Workaround for mbstring problems - * + * XXX: Workaround for mbstring problems + * * @var bool */ public static $mbstringSupport = true; @@ -384,15 +384,15 @@ abstract class phpQuery { while (preg_match($regex, $content)) $content = preg_replace_callback( $regex, - create_function('$m', - 'return $m[1].$m[2].$m[3]."<?php " + function ($m) { + return $m[1].$m[2].$m[3]."<?php " .str_replace( array("%20", "%3E", "%09", " ", "	", "%7B", "%24", "%7D", "%22", "%5B", "%5D"), - array(" ", ">", " ", "\n", " ", "{", "$", "}", \'"\', "[", "]"), + array(" ", ">", " ", "\n", " ", "{", "$", "}", '"', "[", "]"), htmlspecialchars_decode($m[4]) ) - ." ?>".$m[5].$m[2];' - ), + ." ?>".$m[5].$m[2]; + }, $content ); return $content; @@ -998,7 +998,7 @@ abstract class phpQuery { * @return unknown_type * @link http://docs.jquery.com/Utilities/jQuery.makeArray */ - public static function makeArray($obj) { + public static function makeArray($object) { $array = array(); if (is_object($object) && $object instanceof DOMNODELIST) { foreach($object as $value) @@ -1341,4 +1341,4 @@ set_include_path( phpQuery::$plugins = new phpQueryPlugins(); // include bootstrap file (personal library config) if (file_exists(dirname(__FILE__).'/phpQuery/bootstrap.php')) - require_once dirname(__FILE__).'/phpQuery/bootstrap.php'; \ No newline at end of file + require_once dirname(__FILE__).'/phpQuery/bootstrap.php'; diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/Callback.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/Callback.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/Callback.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php similarity index 98% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php index a58b1f31648bcd11f2e58ccb341415a6842538a6..2630b63974d48975682b418f1d3bec4ba1095ee7 100644 --- a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php +++ b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php @@ -157,8 +157,8 @@ class DOMDocumentWrapper { } // Should be careful here, still need 'magic encoding detection' since lots of pages have other 'default encoding' // Worse, some pages can have mixed encodings... we'll try not to worry about that - $requestedCharset = strtoupper($requestedCharset); - $documentCharset = strtoupper($documentCharset); + if($requestedCharset) $requestedCharset = strtoupper($requestedCharset); + if($documentCharset) $documentCharset = strtoupper($documentCharset); phpQuery::debug("DOC: $documentCharset REQ: $requestedCharset"); if ($requestedCharset && $documentCharset && $requestedCharset !== $documentCharset) { phpQuery::debug("CHARSET CONVERT"); @@ -314,8 +314,6 @@ class DOMDocumentWrapper { } protected function contentTypeToArray($contentType) { - $test = null; - $test = $matches = explode(';', trim(strtolower($contentType))); if (isset($matches[1])) { $matches[1] = explode('=', $matches[1]); @@ -351,7 +349,7 @@ class DOMDocumentWrapper { return $contentType[1]; } protected function charsetFromXML($markup) { - $matches; + $matches = array(); // find declaration preg_match('@<'.'?xml[^>]+encoding\\s*=\\s*(["|\'])(.*?)\\1@i', $markup, $matches @@ -532,7 +530,7 @@ class DOMDocumentWrapper { } else { $markup2 = phpQuery::$defaultDoctype.'<html><head><meta http-equiv="Content-Type" content="text/html;charset=' .$charset.'"></head>'; - $noBody = strpos($markup, '<body') === false; + $noBody = $markup == null || strpos($markup, '<body') === false; if ($noBody) $markup2 .= '<body>'; $markup2 .= $markup; diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/DOMEvent.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/DOMEvent.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/DOMEvent.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/DOMEvent.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/bootstrap.example.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/bootstrap.example.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/bootstrap.example.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/bootstrap.example.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/compat/mbstring.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/compat/mbstring.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/compat/mbstring.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/compat/mbstring.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryEvents.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryEvents.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryEvents.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryEvents.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryObject.php similarity index 97% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryObject.php index a41356cf1e6418a66f231fd0fc496d7746aa4630..daab012ba9c370f4e66830af97a5800877e1cde4 100644 --- a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php +++ b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/phpQueryObject.php @@ -502,7 +502,7 @@ class phpQueryObject * @todo maybe other name... */ public function getString($index = null, $callback1 = null, $callback2 = null, $callback3 = null) { - if ($index) + if (!is_null($index) && is_int($index)) $return = $this->eq($index)->text(); else { $return = array(); @@ -529,7 +529,7 @@ class phpQueryObject * @todo maybe other name... */ public function getStrings($index = null, $callback1 = null, $callback2 = null, $callback3 = null) { - if ($index) + if (!is_null($index) && is_int($index)) $return = $this->eq($index)->text(); else { $return = array(); @@ -587,7 +587,7 @@ class phpQueryObject if ( mb_strpos($class, '.', 1)) { $classes = explode('.', substr($class, 1)); $classesCount = count( $classes ); - $nodeClasses = explode(' ', $node->getAttribute('class') ); + $nodeClasses = preg_split("/[\s\t\r\n]+/", $node->getAttribute('class'),-1, PREG_SPLIT_NO_EMPTY); $nodeClassesCount = count( $nodeClasses ); if ( $classesCount > $nodeClassesCount ) return false; @@ -605,7 +605,7 @@ class phpQueryObject // strip leading dot from class name substr($class, 1), // get classes for element as array - explode(' ', $node->getAttribute('class') ) + preg_split("/[\s\t\r\n]+/", $node->getAttribute('class'),-1, PREG_SPLIT_NO_EMPTY) ); } } @@ -967,16 +967,18 @@ class phpQueryObject break; case 'parent': $this->elements = $this->map( - create_function('$node', ' + function ($node) { return $node instanceof DOMELEMENT && $node->childNodes->length - ? $node : null;') + ? $node : null; + } )->elements; break; case 'empty': $this->elements = $this->map( - create_function('$node', ' + function ($node) { return $node instanceof DOMELEMENT && $node->childNodes->length - ? null : $node;') + ? null : $node; + } )->elements; break; case 'disabled': @@ -989,19 +991,21 @@ class phpQueryObject break; case 'enabled': $this->elements = $this->map( - create_function('$node', ' - return pq($node)->not(":disabled") ? $node : null;') + function ($node) { + return pq($node)->not(":disabled") ? $node : null; + } )->elements; break; case 'header': $this->elements = $this->map( - create_function('$node', - '$isHeader = isset($node->tagName) && in_array($node->tagName, array( + function ($node) { + $isHeader = isset($node->tagName) && in_array($node->tagName, array( "h1", "h2", "h3", "h4", "h5", "h6", "h7" )); return $isHeader ? $node - : null;') + : null; + } )->elements; // $this->elements = $this->map( // create_function('$node', '$node = pq($node); @@ -1018,18 +1022,19 @@ class phpQueryObject break; case 'only-child': $this->elements = $this->map( - create_function('$node', - 'return pq($node)->siblings()->size() == 0 ? $node : null;') + function ($node) { + return pq($node)->siblings()->size() == 0 ? $node : null; + } )->elements; break; case 'first-child': $this->elements = $this->map( - create_function('$node', 'return pq($node)->prevAll()->size() == 0 ? $node : null;') + function ($node) { return pq($node)->prevAll()->size() == 0 ? $node : null; } )->elements; break; case 'last-child': $this->elements = $this->map( - create_function('$node', 'return pq($node)->nextAll()->size() == 0 ? $node : null;') + function ($node) { return pq($node)->nextAll()->size() == 0 ? $node : null; } )->elements; break; case 'nth-child': @@ -1042,28 +1047,31 @@ class phpQueryObject // :nth-child(index/even/odd/equation) if ($param == 'even' || $param == 'odd') $mapped = $this->map( - create_function('$node, $param', - '$index = pq($node)->prevAll()->size()+1; + function ($node, $param) { + $index = pq($node)->prevAll()->size()+1; if ($param == "even" && ($index%2) == 0) return $node; else if ($param == "odd" && $index%2 == 1) return $node; else - return null;'), + return null; + }, new CallbackParam(), $param ); - else if (mb_strlen($param) > 1 && $param[1] == 'n') + else if (mb_strlen($param) > 1 && preg_match('/^(\d*)n([-+]?)(\d*)/', $param) === 1) // an+b $mapped = $this->map( - create_function('$node, $param', - '$prevs = pq($node)->prevAll()->size(); + function ($node, $param) { + $prevs = pq($node)->prevAll()->size(); $index = 1+$prevs; - $b = mb_strlen($param) > 3 - ? $param[3] - : 0; - $a = $param[0]; - if ($b && $param[2] == "-") - $b = -$b; + + preg_match("/^(\d*)n([-+]?)(\d*)/", $param, $matches); + $a = intval($matches[1]); + $b = intval($matches[3]); + if( $matches[2] === "-" ) { + $b = -$b; + } + if ($a > 0) { return ($index-$b)%$a == 0 ? $node @@ -1089,20 +1097,21 @@ class phpQueryObject // return ($index-$b)%$a == 0 // ? $node // : null; - '), + }, new CallbackParam(), $param ); else // index $mapped = $this->map( - create_function('$node, $index', - '$prevs = pq($node)->prevAll()->size(); + function ($node, $index) { + $prevs = pq($node)->prevAll()->size(); if ($prevs && $prevs == $index-1) return $node; else if (! $prevs && $index == 1) return $node; else - return null;'), + return null; + }, new CallbackParam(), $param ); $this->elements = $mapped->elements; @@ -1663,9 +1672,11 @@ class phpQueryObject * @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery * @deprecated Use length as attribute */ + #[\ReturnTypeWillChange] public function length() { return $this->size(); } + #[\ReturnTypeWillChange] public function count() { return $this->size(); } @@ -1878,7 +1889,7 @@ class phpQueryObject } /** * Enter description here... - * + * * @param $code * @return unknown_type */ @@ -1889,7 +1900,7 @@ class phpQueryObject } /** * Enter description here... - * + * * @param $code * @return unknown_type */ @@ -2264,7 +2275,7 @@ class phpQueryObject } return $return; } - + /** * @return The text content of each matching element, like * text() but returns an array with one entry per matched element. @@ -2277,7 +2288,7 @@ class phpQueryObject } return $results; } - + /** * Enter description here... * @@ -2637,6 +2648,8 @@ class phpQueryObject foreach($node->attributes as $n => $v) $return[$n] = $v->value; return $return; + } else if ($attr == null) { + return null; } else return $node->hasAttribute($attr) ? $node->getAttribute($attr) @@ -2645,7 +2658,7 @@ class phpQueryObject return is_null($value) ? '' : $this; } - + /** * @return The same attribute of each matching element, like * attr() but returns an array with one entry per matched element. @@ -2949,7 +2962,7 @@ class phpQueryObject } /** * Enter description here... - * + * * @param <type> $key * @param <type> $value */ @@ -2966,7 +2979,7 @@ class phpQueryObject } /** * Enter description here... - * + * * @param <type> $key */ public function removeData($key) { @@ -2980,6 +2993,7 @@ class phpQueryObject /** * @access private */ + #[\ReturnTypeWillChange] public function rewind(){ $this->debug('iterating foreach'); // phpQuery::selectDocument($this->getDocumentID()); @@ -2995,12 +3009,14 @@ class phpQueryObject /** * @access private */ + #[\ReturnTypeWillChange] public function current(){ return $this->elementsInterator[ $this->current ]; } /** * @access private */ + #[\ReturnTypeWillChange] public function key(){ return $this->current; } @@ -3015,6 +3031,7 @@ class phpQueryObject * @see phpQueryObject::_next() * @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery */ + #[\ReturnTypeWillChange] public function next($cssSelector = null){ // if ($cssSelector || $this->valid) // return $this->_next($cssSelector); @@ -3032,6 +3049,7 @@ class phpQueryObject /** * @access private */ + #[\ReturnTypeWillChange] public function valid(){ return $this->valid; } @@ -3040,18 +3058,21 @@ class phpQueryObject /** * @access private */ + #[\ReturnTypeWillChange] public function offsetExists($offset) { return $this->find($offset)->size() > 0; } /** * @access private */ + #[\ReturnTypeWillChange] public function offsetGet($offset) { return $this->find($offset); } /** * @access private */ + #[\ReturnTypeWillChange] public function offsetSet($offset, $value) { // $this->find($offset)->replaceWith($value); $this->find($offset)->html($value); @@ -3059,6 +3080,7 @@ class phpQueryObject /** * @access private */ + #[\ReturnTypeWillChange] public function offsetUnset($offset) { // empty throw new Exception("Can't do unset, use array interface only for calling queries and replacing HTML."); @@ -3099,7 +3121,7 @@ class phpQueryObject : "{$node->tagName}[{$i}]"; $node = $node->parentNode; } - $xpath = join('/', array_reverse($xpath)); + $xpath = implode('/', array_reverse($xpath)); $return[] = '/'.$xpath; } return $oneNode @@ -3121,7 +3143,7 @@ class phpQueryObject .($node->getAttribute('id') ? '#'.$node->getAttribute('id'):'') .($node->getAttribute('class') - ? '.'.join('.', split(' ', $node->getAttribute('class'))):'') + ? '.'.implode('.', explode(' ', $node->getAttribute('class'))):'') .($node->getAttribute('name') ? '[name="'.$node->getAttribute('name').'"]':'') .($node->getAttribute('value') && strpos($node->getAttribute('value'), '<'.'?php') === false diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/__config.example.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/__config.example.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/__config.example.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/__config.example.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/example.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/example.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/example.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/example.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/fix_webroot.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/fix_webroot.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/fix_webroot.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/fix_webroot.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/google_login.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/google_login.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/google_login.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/google_login.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/print_source.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/print_source.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/print_source.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/print_source.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/print_websafe.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/print_websafe.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts/print_websafe.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/Scripts/print_websafe.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php b/civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php similarity index 100% rename from civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php rename to civicrm/vendor/rubobaquero/phpquery/phpQuery/phpQuery/plugins/example.php diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Ajax.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Ajax.md new file mode 100644 index 0000000000000000000000000000000000000000..fe9a24e76dcfb4404ad09be3b46a90dc41d1650c --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Ajax.md @@ -0,0 +1,70 @@ +## Example +``` +pq('#element')->load('http://somesite.com/page .inline-selector')->... +``` +# Table of Contents + * [Server Side Ajax](#Server_Side_Ajax.md) + * [Cross Domain Ajax](#Cross_Domain_Ajax.md) + * [Ajax Requests](#Ajax_Requests.md) + * [Ajax Events](#Ajax_Events.md) + * [Misc](#Misc.md) +## Server Side Ajax +Ajax, standing for _Asynchronous JavaScript and XML_ is combination of HTTP Client and XML parser which doesn't lock program's thread (doing request in asynchronous way). + +**phpQuery** also offers such functionality, making use of solid quality [Zend\_Http\_Client](http://framework.zend.com/manual/en/zend.http.html). Unfortunately requests aren't asynchronous, but nothing is impossible. For today, instead of [XMLHttpRequest](http://en.wikipedia.org/wiki/XMLHttpRequest) you always get Zend\_Http\_Client instance. API unification is [planned](http://code.google.com/p/phpquery/issues/detail?id=44). +## Cross Domain Ajax +For security reasons, by default **phpQuery** doesn't allow connections to hosts other than actual `$_SERVER['HTTP_HOST']`. Developer needs to grant rights to other hosts before making an [Ajax](Ajax.md) request. + +There are 2 methods for allowing other hosts + * phpQuery::**ajaxAllowURL**($url) + * phpQuery::**ajaxAllowHost**($host) + +``` +// connect to google.com +phpQuery::ajaxAllowHost('google.com'); +phpQuery::get('http://google.com/ig'); +// or using same string +$url = 'http://google.com/ig'; +phpQuery::ajaxAllowURL($url); +phpQuery::get($url); +``` +## Ajax Requests + * **[phpQuery::ajax](http://docs.jquery.com/Ajax/jQuery.ajax)**[($options)](http://docs.jquery.com/Ajax/jQuery.ajax) Load a remote page using an HTTP request. + * **[load](http://docs.jquery.com/Ajax/load)**[($url, $data, $callback)](http://docs.jquery.com/Ajax/load) Load HTML from a remote file and inject it into the DOM. + * **[phpQuery::get](http://docs.jquery.com/Ajax/jQuery.get)**[($url, $data, $callback)](http://docs.jquery.com/Ajax/jQuery.get) Load a remote page using an HTTP GET request. + * **[phpQuery::getJSON](http://docs.jquery.com/Ajax/jQuery.getJSON)**[($url, $data, $callback)](http://docs.jquery.com/Ajax/jQuery.getJSON) Load JSON data using an HTTP GET request. + * **[phpQuery::getScript](http://docs.jquery.com/Ajax/jQuery.getScript)**[($url, $callback)](http://docs.jquery.com/Ajax/jQuery.getScript) Loads, and executes, a local JavaScript file using an HTTP GET request. + * **[phpQuery::post](http://docs.jquery.com/Ajax/jQuery.post)**[($url, $data, $callback, $type)](http://docs.jquery.com/Ajax/jQuery.post) Load a remote page using an HTTP POST request. +## Ajax Events + * **[ajaxComplete](http://docs.jquery.com/Ajax/ajaxComplete)**[($callback)](http://docs.jquery.com/Ajax/ajaxComplete) Attach a function to be executed whenever an AJAX request completes. This is an Ajax Event. + * **[ajaxError](http://docs.jquery.com/Ajax/ajaxError)**[($callback)](http://docs.jquery.com/Ajax/ajaxError) Attach a function to be executed whenever an AJAX request fails. This is an Ajax Event. + * **[ajaxSend](http://docs.jquery.com/Ajax/ajaxSend)**[($callback)](http://docs.jquery.com/Ajax/ajaxSend) Attach a function to be executed before an AJAX request is sent. This is an Ajax Event. + * **[ajaxStart](http://docs.jquery.com/Ajax/ajaxStart)**[($callback)](http://docs.jquery.com/Ajax/ajaxStart) Attach a function to be executed whenever an AJAX request begins and there is none already active. This is an Ajax Event. + * **[ajaxStop](http://docs.jquery.com/Ajax/ajaxStop)**[($callback)](http://docs.jquery.com/Ajax/ajaxStop) Attach a function to be executed whenever all AJAX requests have ended. This is an Ajax Event. + * **[ajaxSuccess](http://docs.jquery.com/Ajax/ajaxSuccess)**[($callback)](http://docs.jquery.com/Ajax/ajaxSuccess) Attach a function to be executed whenever an AJAX request completes successfully. This is an Ajax Event. +## Misc + * **[phpQuery::ajaxSetup](http://docs.jquery.com/Ajax/jQuery.ajaxSetup)**[($options)](http://docs.jquery.com/Ajax/jQuery.ajaxSetup) Setup global settings for AJAX requests. + * **[serialize](http://docs.jquery.com/Ajax/serialize)**[()](http://docs.jquery.com/Ajax/serialize) Serializes a set of input elements into a string of data. This will serialize all given elements. + * **[serializeArray](http://docs.jquery.com/Ajax/serializeArray)**[()](http://docs.jquery.com/Ajax/serializeArray) Serializes all forms and form elements (like the .serialize() method) but returns a JSON data structure for you to work with. +## Options +Detailed options description in available at [jQuery Documentation Site](http://docs.jquery.com/Ajax/jQuery.ajax#toptions). + * **`async`** `Boolean` + * **`beforeSend`** `Function` + * **`cache`** `Boolean` + * **`complete`** `Function` + * **`contentType`** `String` + * **`data`** `Object, String` + * **`dataType`** `String` + * **`error`** `Function` + * **`global`** `Boolean` + * **`ifModified`** `Boolean` + * **`jsonp`** `String` + * **`password`** `String` + * **`processData`** `Boolean` + * **`success`** `Function` + * **`timeout`** `Number` + * **`type`** `String` + * **`url`** `String` + * **`username`** `String` + +Read more at [Ajax](http://docs.jquery.com/Ajax) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Attributes.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Attributes.md new file mode 100644 index 0000000000000000000000000000000000000000..c4ca3981773f967865f386b8aa1d4606b93f03b7 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Attributes.md @@ -0,0 +1,33 @@ +## Example +``` +pq('a')->attr('href', 'newVal')->removeClass('className')->html('newHtml')->... +``` +# Table of Contents + * [Attr](#Attr.md) + * [Class](#Class.md) + * [HTML](#HTML.md) + * [Text](#Text.md) + * [Value](#Value.md) +## Attr + * **[attr](http://docs.jquery.com/Attributes/attr)**[($name)](http://docs.jquery.com/Attributes/attr) Access a property on the first matched element. This method makes it easy to retrieve a property value from the first matched element. If the element does not have an attribute with such a name, undefined is returned. + * **[attr](http://docs.jquery.com/Attributes/attr)**[($properties)](http://docs.jquery.com/Attributes/attr) Set a key/value object as properties to all matched elements. + * **[attr](http://docs.jquery.com/Attributes/attr)**[($key, $value)](http://docs.jquery.com/Attributes/attr) Set a single property to a value, on all matched elements. + * **[attr](http://docs.jquery.com/Attributes/attr)**[($key, $fn)](http://docs.jquery.com/Attributes/attr) Set a single property to a computed value, on all matched elements. + * **[removeAttr](http://docs.jquery.com/Attributes/removeAttr)**[($name)](http://docs.jquery.com/Attributes/removeAttr) Remove an attribute from each of the matched elements. +## Class + * **[addClass](http://docs.jquery.com/Attributes/addClass)**[($class)](http://docs.jquery.com/Attributes/addClass) Adds the specified class(es) to each of the set of matched elements. + * **[hasClass](http://docs.jquery.com/Attributes/hasClass)**[($class)](http://docs.jquery.com/Attributes/hasClass) Returns true if the specified class is present on at least one of the set of matched elements. + * **[removeClass](http://docs.jquery.com/Attributes/removeClass)**[($class)](http://docs.jquery.com/Attributes/removeClass) Removes all or the specified class(es) from the set of matched elements. + * **[toggleClass](http://docs.jquery.com/Attributes/toggleClass)**[($class)](http://docs.jquery.com/Attributes/toggleClass) Adds the specified class if it is not present, removes the specified class if it is present. +## HTML + * **[html](http://docs.jquery.com/Attributes/html)**[()](http://docs.jquery.com/Attributes/html) Get the html contents (innerHTML) of the first matched element. This property is not available on XML documents (although it will work for XHTML documents). + * **[html](http://docs.jquery.com/Attributes/html)**[($val)](http://docs.jquery.com/Attributes/html) Set the html contents of every matched element. This property is not available on XML documents (although it will work for XHTML documents). +## Text + * **[text](http://docs.jquery.com/Attributes/text)**[()](http://docs.jquery.com/Attributes/text) Get the combined text contents of all matched elements. + * **[text](http://docs.jquery.com/Attributes/text)**[($val)](http://docs.jquery.com/Attributes/text) Set the text contents of all matched elements. +## Value + * **[val](http://docs.jquery.com/Attributes/val)**[()](http://docs.jquery.com/Attributes/val) Get the content of the value attribute of the first matched element. + * **[val](http://docs.jquery.com/Attributes/val)**[($val)](http://docs.jquery.com/Attributes/val) Set the value attribute of every matched element. + * **[val](http://docs.jquery.com/Attributes/val)**[($val)](http://docs.jquery.com/Attributes/val) Checks, or selects, all the radio buttons, checkboxes, and select options that match the set of values. + +Read more at [Attributes](http://docs.jquery.com/Attributes) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Basics.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Basics.md new file mode 100644 index 0000000000000000000000000000000000000000..dedd0064977e09af137323ea9f0468ae748ddd2d --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Basics.md @@ -0,0 +1,54 @@ +## Example +``` +phpQuery::newDocumentFileXHTML('my-xhtml.html')->find('p'); +$ul = pq('ul'); +``` +# Table of Contents + * [Loading documents](#Loading_documents.md) + * [pq() function](#pq_function.md) + +## Loading documents + * phpQuery::**newDocument**($html, $contentType = null) Creates new document from markup. If no $contentType, autodetection is made (based on markup). If it fails, text/html in utf-8 is used. + * phpQuery::**newDocumentFile**($file, $contentType = null) Creates new document from file. Works like newDocument() + * phpQuery::**newDocumentHTML**($html, $charset = 'utf-8') + * phpQuery::**newDocumentXHTML**($html, $charset = 'utf-8') + * phpQuery::**newDocumentXML**($html, $charset = 'utf-8') + * phpQuery::**newDocumentPHP**($html, $contentType = null) Read more about it on [PHPSupport page](PHPSupport.md) + * phpQuery::**newDocumentFileHTML**($file, $charset = 'utf-8') + * phpQuery::**newDocumentFileXHTML**($file, $charset = 'utf-8') + * phpQuery::**newDocumentFileXML**($file, $charset = 'utf-8') + * phpQuery::**newDocumentFilePHP**($file, $contentType) Read more about it on [PHPSupport page](PHPSupport.md) +## pq function +**`pq($param, $context = null);`** + +**pq();** function is equivalent of jQuery's **$();**. It's used for 3 type of things: + 1. Importing markup +``` +// Import into selected document: +// doesn't accept text nodes at beginning of input string +pq('<div/>') +// Import into document with ID from $pq->getDocumentID(): +pq('<div/>', $pq->getDocumentID()) +// Import into same document as DOMNode belongs to: +pq('<div/>', DOMNode) +// Import into document from phpQuery object: +pq('<div/>', $pq) +``` + 1. Running queries +``` +// Run query on last selected document: +pq('div.myClass') +// Run query on document with ID from $pq->getDocumentID(): +pq('div.myClass', $pq->getDocumentID()) +// Run query on same document as DOMNode belongs to and use node(s)as root for query: +pq('div.myClass', DOMNode) +// Run query on document from phpQuery object +// and use object's stack as root node(s) for query: +pq('div.myClass', $pq) +``` + 1. Wrapping DOMNodes with phpQuery objects +``` +foreach(pq('li') as $li) + // $li is pure DOMNode, change it to phpQuery object + pq($li); +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/CSS.md b/civicrm/vendor/rubobaquero/phpquery/wiki/CSS.md new file mode 100644 index 0000000000000000000000000000000000000000..e1a913a88cc49896ef6ed2996ec67c70e430f865 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/CSS.md @@ -0,0 +1 @@ +Work in progress. Scheduled before 1.0. \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Callbacks.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Callbacks.md new file mode 100644 index 0000000000000000000000000000000000000000..856bccf277253d4842a0254b2f3f370711c89ab1 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Callbacks.md @@ -0,0 +1,91 @@ +# Table of Contents + * [What are callbacks](#What_are_callbacks.md) + * [phpQuery callback system](#phpQuery_callbacks.md) + * [Callback class](#Callback.md) + * [CallbackParam class](#CallbackParam.md) + * [CallbackReference class](#CallbackReference.md) + * [Scope Pseudo-Inheritance](#Scope_Pseudo_Inheritance.md) +## What are callbacks +Callbacks are functions _called back_ by other functions in proper moment (eg on [Ajax](Ajax.md) request error). + +In **JavaScript** this pattern can be very flexible due to [Closures](http://en.wikipedia.org/wiki/Closure_(computer_science)) support, which can be inline (no code break) and inherits scope (no need to passing params). + +**PHP** has only simple [support for callbacks](http://pl2.php.net/manual/en/function.call-user-func-array.php) so the case is more complicated. That's why phpQuery extends callback support by it's own. +## phpQuery callback system +phpQuery uses it's own approach to callbacks. This task is achieved thou **Callback**, **CallbackParam** and **CallbackReference** classes. +### Callback +Callback class is used for wrapping valid callbacks with params. +#### Example 1 +``` +function myCallback($param1, $param2) { + var_dump($param1); + var_dump($param2); +} +phpQuery::get($url, + new Callback('myCallback', 'myParam1', new CallbackParam) +); +// now $param1 in myCallback will have value 'myParam1' +// and $param2 will be parameter passed by function calling callback +// which in this example would be ajax request result +``` +### CallbackParam +As we can see in [last example](#Example_1.md), new instance of CallbackParam class is used for defining places, where original callback parameter(s) will be placed. Such pattern can be used also without Callback class for some methods. +#### Example 2 +``` +phpQuery::each( + // first param is array which will be iterated + array(1,2,3), + // second param is callback (string or array to call objects method) + 'myCallback', + // rest of params are ParamStructure + // CallbackParam objects will be changed to $i and $v by phpQuery::each method + 'param1', new CallbackParam, new CallbackParam, 'param4' +); +function myCallback($param1, $i, $v, $param4) { + print "Index: $i; Value: $v"; +} +``` +Methods supporting CallbackParam **without** using Callback class: + * `phpQuery::each()` + * `phpQuery::map()` + * `pq()->each()` + * `pq()->map()` +### CallbackReference +Finally, CallbackReference can be used when we don't really want a callback, only parameter passed to it. CallbackReference takes first parameter's value and passes it to reference. Thanks to that, we can use **if statement** instead of **callback function**. +#### Example 3 +``` +$html; +phpQuery::get($url, new CallbackReference($html)); +if ($html) { + // callback triggered, value non-false + phpQuery::get($url, new CallbackReference($html)); + if ($html) { + // we just skipped 2 function declarations + } +} +``` +## Scope Pseudo Inheritance +There is an easy way to pseudo inherit scope in PHP. [Scope](http://en.wikipedia.org/wiki/Scope_(programming)) means _variables accessible in specified point of code_ (which in other words means _any variable you can use_). It's achieved using [compact()](http://php.net/compact) and [extract()](http://php.net/extract) functions. +#### Example 4 +Look at this modified [example 2](#Example_2.md). Previous comments were removed. +``` +$a = 'foo'; +$b = 'bar'; +phpQuery::each( + array(1,2,3), + 'myCallback', + // notice that 'param1' changed to compact('a', 'b') + // where 'a' and 'b' are variable names accessible in actual scope + compact('a', 'b'), new CallbackParam, new CallbackParam, 'param4' +); +function myCallback($scope, $i, $v, $param4) { + // this is the place where variables from $scope array + // are forwarded to actual function's scope + extract($scope); + print "Var a: $a"; // will print 'Var a: foo' + print "Var b: $b"; // will print 'Var a: bar' + print "Index: $i; Value: $v"; +} +``` +## Future +In the future this functionality will be extended and more methods will support it. Check [Issue Tracker entry #48](http://code.google.com/p/phpquery/issues/detail?id=48) if you're interested in any way. \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Chains.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Chains.md new file mode 100644 index 0000000000000000000000000000000000000000..2ff40289a0f12ac2ef1b16723e410ee6156b92ae --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Chains.md @@ -0,0 +1 @@ +TODO ;) \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/CommandLineInterface.md b/civicrm/vendor/rubobaquero/phpquery/wiki/CommandLineInterface.md new file mode 100644 index 0000000000000000000000000000000000000000..f3e4d9df29bca7042753fc86a1d1221ecbd83257 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/CommandLineInterface.md @@ -0,0 +1,14 @@ +phpQuery features CommandLineInterface aka CLI. +``` +Usage: phpquery URL --method1 arg1 arg2 argN --method2 arg1 arg2 argN ... +Example: phpquery 'http://localhost' --find 'div > p' --contents +Pipe: cat index.html | phpquery --find 'div > p' --contents +Docs: http://code.google.com/p/phpquery/wiki/ +``` +## Example +Fetch number of downloads of all release packages. +``` +phpquery 'http://code.google.com/p/phpquery/downloads/list?can=1' \ + --find '.vt.col_4 a' --contents \ + --getString null array_sum +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Debugging.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Debugging.md new file mode 100644 index 0000000000000000000000000000000000000000..b6088061ab74abe2f827b47d267ab0d08d441382 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Debugging.md @@ -0,0 +1,16 @@ +## Enabling debugging +``` +// enable debugging messages +phpQuery::$debug = 1; +// enable extensive debugging messages +// used to debug document loading errors from phpQuery::newDocument() +phpQuery::$debug = 2; +``` +## Debugging methods +``` +// debug inside chain +pq('.foo')->dump()->...; +pq('.foo')->dumpWhois()->...; +pq('.foo')->dumpTree()->...; +pq('.foo')->dumpDie()->...; +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Dependencies.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Dependencies.md new file mode 100644 index 0000000000000000000000000000000000000000..4a4108de0fc397a80d8234636134f29495c31603 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Dependencies.md @@ -0,0 +1,14 @@ +**phpQuery** depends on following code parts: + * [PHP5](#PHP5.md) + * [PHP5 DOM extension](#DOM_extension.md) + * [Zend Framework](#Zend_Framework.md) + +## PHP5 +Required version of PHP is [PHP5](http://www.php.net/), **5.2** recommended. + +## DOM extension +PHP5's build-in [DOM extension](http://php.net/manual/en/book.dom.php) is required. Users of +[windows XAMPP](http://www.apachefriends.org/en/xampp-windows.html) (and maybe other unofficial PHP distributions) need to disable depracated [DOM XML](http://php.net/manual/en/ref.domxml.php) extension. More information can be found in [this post on mrclay.org](http://mrclay.org/index.php/2008/10/08/getting-phpquery-running-under-xampp-for-windows/) + +## Zend Framework +[Zend Framework](http://framework.zend.com/) is used as HTTP Client and JSON encoder. Those who already have Zend Framework in their applications, can remove directory **/phpQuery/Zend**. Only condition is having proper include path set for own copy of the library. \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Events.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Events.md new file mode 100644 index 0000000000000000000000000000000000000000..0fd4f4d19e5cd553768f2bc3b64047a40431e862 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Events.md @@ -0,0 +1,47 @@ +# Table of Contents + * [Example](#Example.md) + * [Server Side Events](#Server_Side_Events.md) + * [Page Load](#Page_Load.md) + * [Event Handling](#Event_Handling.md) + * [Interaction Helpers](#Interaction_Helpers.md) + * [Event Helpers](#Event_Helpers.md) + +## Example +``` +pq('form')->bind('submit', 'submitHandler')->trigger('submit')->... +function submitHandler($e) { + print 'Target: '.$e->target->tagName; + print 'Bubbling ? '.$e->currentTarget->tagName; +} +``` + +## Server Side Events +phpQuery support **server-side** events, same as jQuery handle client-side ones. On server there isn't, of course, events such as _mouseover_ (but they can be triggered). + +By default, phpQuery automatically fires up only **change** event for form elements. If you load WebBrowser plugin, **submit** and **click** will be handled properly - eg submitting form with inputs' data to action URL via new [Ajax](Ajax.md) request. + +$this (`this` in JS) context for handler scope **isn't available**. You have to use one of following manually: + * $event->**target** + * $event->**currentTarget** + * $event->**relatedTarget** + +## Page Load +_none_ + +## Event Handling + * **[bind](http://docs.jquery.com/Events/bind)**[($type, $data, $fn)](http://docs.jquery.com/Events/bind) Binds a handler to one or more events (like click) for each matched element. Can also bind custom events. + * **[one](http://docs.jquery.com/Events/one)**[($type, $data, $fn)](http://docs.jquery.com/Events/one) Binds a handler to one or more events to be executed once for each matched element. + * **[trigger](http://docs.jquery.com/Events/trigger)**[($type , $data )](http://docs.jquery.com/Events/trigger) Trigger a type of event on every matched element. + * **[triggerHandler](http://docs.jquery.com/Events/triggerHandler)**[($type , $data )](http://docs.jquery.com/Events/triggerHandler) This particular method triggers all bound event handlers on an element (for a specific event type) WITHOUT executing the browsers default actions. + * **[unbind](http://docs.jquery.com/Events/unbind)**[($type , $data )](http://docs.jquery.com/Events/unbind) This does the opposite of bind, it removes bound events from each of the matched elements. + +## Interaction Helpers +_none_ + +## Event Helpers + * **[change](http://docs.jquery.com/Events/change)**[()](http://docs.jquery.com/Events/change) Triggers the change event of each matched element. + * **[change](http://docs.jquery.com/Events/change)**[($fn)](http://docs.jquery.com/Events/change) Binds a function to the change event of each matched element. + * **[submit](http://docs.jquery.com/Events/submit)**[()](http://docs.jquery.com/Events/submit) Trigger the submit event of each matched element. + * **[submit](http://docs.jquery.com/Events/submit)**[($fn)](http://docs.jquery.com/Events/submit) Bind a function to the submit event of each matched element. + +Read more at [Events](http://docs.jquery.com/Events) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/LibrarySections.md b/civicrm/vendor/rubobaquero/phpquery/wiki/LibrarySections.md new file mode 100644 index 0000000000000000000000000000000000000000..3d323e3d23fea7cca59e54bc568b654a443c91f5 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/LibrarySections.md @@ -0,0 +1 @@ +Renamed to [Manual](Manual.md). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Manipulation.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Manipulation.md new file mode 100644 index 0000000000000000000000000000000000000000..255df6ab4ce75c065d8a077957aac78299a441fe --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Manipulation.md @@ -0,0 +1,45 @@ +## Example +``` +pq('div.old')->replaceWith( pq('div.new')->clone() )->appendTo('.trash')->prepend('Deleted')->... +``` +# Table of Contents + * [Changing Contents](#Changing_Contents.md) + * [Inserting Inside](#Inserting_Inside.md) + * [Inserting Outside](#Inserting_Outside.md) + * [Inserting Around](#Inserting_Around.md) + * [Replacing](#Replacing.md) + * [Removing](#Removing.md) + * [Copying](#Copying.md) +## Changing Contents + * **[html](http://docs.jquery.com/Manipulation/html)**[()](http://docs.jquery.com/Manipulation/html) Get the html contents (innerHTML) of the first matched element. This property is not available on XML documents (although it will work for XHTML documents). + * **[html](http://docs.jquery.com/Manipulation/html)**[($val)](http://docs.jquery.com/Manipulation/html) Set the html contents of every matched element. This property is not available on XML documents (although it will work for XHTML documents). + * **[text](http://docs.jquery.com/Manipulation/text)**[()](http://docs.jquery.com/Manipulation/text) Get the combined text contents of all matched elements. + * **[text](http://docs.jquery.com/Manipulation/text)**[($val)](http://docs.jquery.com/Manipulation/text) Set the text contents of all matched elements. +## Inserting Inside + * **[append](http://docs.jquery.com/Manipulation/append)**[($content)](http://docs.jquery.com/Manipulation/append) Append content to the inside of every matched element. + * **[appendTo](http://docs.jquery.com/Manipulation/appendTo)**[($content)](http://docs.jquery.com/Manipulation/appendTo) Append all of the matched elements to another, specified, set of elements. + * **[prepend](http://docs.jquery.com/Manipulation/prepend)**[($content)](http://docs.jquery.com/Manipulation/prepend) Prepend content to the inside of every matched element. + * **[prependTo](http://docs.jquery.com/Manipulation/prependTo)**[($content)](http://docs.jquery.com/Manipulation/prependTo) Prepend all of the matched elements to another, specified, set of elements. +## Inserting Outside + * **[after](http://docs.jquery.com/Manipulation/after)**[($content)](http://docs.jquery.com/Manipulation/after) Insert content after each of the matched elements. + * **[before](http://docs.jquery.com/Manipulation/before)**[($content)](http://docs.jquery.com/Manipulation/before) Insert content before each of the matched elements. + * **[insertAfter](http://docs.jquery.com/Manipulation/insertAfter)**[($content)](http://docs.jquery.com/Manipulation/insertAfter) Insert all of the matched elements after another, specified, set of elements. + * **[insertBefore](http://docs.jquery.com/Manipulation/insertBefore)**[($content)](http://docs.jquery.com/Manipulation/insertBefore) Insert all of the matched elements before another, specified, set of elements. +## Inserting Around + * **[wrap](http://docs.jquery.com/Manipulation/wrap)**[($html)](http://docs.jquery.com/Manipulation/wrap) Wrap each matched element with the specified HTML content. + * **[wrap](http://docs.jquery.com/Manipulation/wrap)**[($elem)](http://docs.jquery.com/Manipulation/wrap) Wrap each matched element with the specified element. + * **[wrapAll](http://docs.jquery.com/Manipulation/wrapAll)**[($html)](http://docs.jquery.com/Manipulation/wrapAll) Wrap all the elements in the matched set into a single wrapper element. + * **[wrapAll](http://docs.jquery.com/Manipulation/wrapAll)**[($elem)](http://docs.jquery.com/Manipulation/wrapAll) Wrap all the elements in the matched set into a single wrapper element. + * **[wrapInner](http://docs.jquery.com/Manipulation/wrapInner)**[($html)](http://docs.jquery.com/Manipulation/wrapInner) Wrap the inner child contents of each matched element (including text nodes) with an HTML structure. + * **[wrapInner](http://docs.jquery.com/Manipulation/wrapInner)**[($elem)](http://docs.jquery.com/Manipulation/wrapInner) Wrap the inner child contents of each matched element (including text nodes) with a DOM element. +## Replacing + * **[replaceWith](http://docs.jquery.com/Manipulation/replaceWith)**[($content)](http://docs.jquery.com/Manipulation/replaceWith) Replaces all matched elements with the specified HTML or DOM elements. + * **[replaceAll](http://docs.jquery.com/Manipulation/replaceAll)**[($selector)](http://docs.jquery.com/Manipulation/replaceAll) Replaces the elements matched by the specified selector with the matched elements. +## Removing + * **[empty](http://docs.jquery.com/Manipulation/empty)**[()](http://docs.jquery.com/Manipulation/empty) Remove all child nodes from the set of matched elements. + * **[remove](http://docs.jquery.com/Manipulation/remove)**[($expr)](http://docs.jquery.com/Manipulation/remove) Removes all matched elements from the DOM. +## Copying + * **[clone](http://docs.jquery.com/Manipulation/clone)**[()](http://docs.jquery.com/Manipulation/clone) Clone matched DOM Elements and select the clones. + * **[clone](http://docs.jquery.com/Manipulation/clone)**[($true)](http://docs.jquery.com/Manipulation/clone) Clone matched DOM Elements, and all their event handlers, and select the clones. + +Read more at [Manipulation](http://docs.jquery.com/Manipulation) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/MultiDocumentSupport.md b/civicrm/vendor/rubobaquero/phpquery/wiki/MultiDocumentSupport.md new file mode 100644 index 0000000000000000000000000000000000000000..6febb3889bc03bbd9ab5980f5bb69abb79c1dcf2 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/MultiDocumentSupport.md @@ -0,0 +1,53 @@ +## What MultiDocumentSupport is + * support for working on several documents in same time + * easy importing of nodes from one document to another + * pointing document thought + * phpQuery object + * [DOMNode](http://www.php.net/manual/en/class.domnode.php) object + * [DOMDocument](http://www.php.net/manual/en/class.domdocument.php) object + * internal document ID + * last created (or selected) document is assumed to be default in pq(); +## What MultiDocumentSupport is NOT + * it's **not possible** to fetch nodes from several document in one query + * it's **not possible** to operate on nodes from several document in one phpQuery object + +## Example +``` +// first three documents are wrapped inside phpQuery +$doc1 = phpQuery::newDocumentFile('my-file.html'); +$doc2 = phpQuery::newDocumentFile('my-file.html'); +$doc3 = phpQuery::newDocumentFile('my-other-file.html'); +// $doc4 is plain DOMDocument +$doc4 = new DOMDocument; +$doc4->loadHTMLFile('my-file.html'); +// find first UL list in $doc1 +$doc1->find('ul:first') + // append all LIs from $doc2 (node import) + ->append( $doc2->find('li') ) + // append UL (with new LIs) into $doc3 BODY (node import) + ->appendTo( $doc3->find('body') ); +// this will find all LIs from $doc3 +// thats because it was created as last one +pq('li'); +// this will find all LIs inside first UL in $doc2 (context query) +pq('li', $doc2->find('ul:first')->get()); +// this will find all LIs in whole $doc2 (not a context query) +pq('li', $doc2->find('ul:first')->getDocumentID()); +// this will transparently load $doc4 into phpQuery::$documents +// and then all LIs will be found +// TODO this example must be verified +pq('li', $doc4); +``` +## Static Methods + * phpQuery::**newDocument**($html) Creates new document from markup + * phpQuery::**newDocumentFile**($file) Creates new document from file + * phpQuery::**getDocument**($id = null) Returns phpQueryObject containing document with id $id or default document (last created/selected) + * phpQuery::**selectDocument**($id) Sets default document to $id + * phpQuery::**unloadDocuments**($id = null) Unloades all or specified document from memory + * phpQuery::**getDocumentID**($source) Returns $source's document ID + * phpQuery::**getDOMDocument**($source) Get DOMDocument object related to $source +## Object Methods + * $pq->**getDocument**() Returns object with stack set to document root + * $pq->**getDocumentID**() Get object's Document ID + * $pq->**getDocumentIDRef**(&$documentID) Saves object's DocumentID to $var by reference + * $pq->**unloadDocument**() Unloads whole document from memory \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/PHPSupport.md b/civicrm/vendor/rubobaquero/phpquery/wiki/PHPSupport.md new file mode 100644 index 0000000000000000000000000000000000000000..f5e9987d4e0fa933aaedd2a65dc49de10f24f5fb --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/PHPSupport.md @@ -0,0 +1,78 @@ +Although **phpQuery** is a [jQuery port](jQueryPortingState.md), there is extensive PHP-specific support. + +# Table of Contents + * [Class Interfaces](#Class_Interfaces.md) + * [Iterator Interface](#Iterator.md) + * [ArrayAccess](#Array_Access.md) + * [Countable Interface](#Countable.md) + * [Callbacks](Callbacks.md) + * [PHP Code Support](#PHP_Code_Support.md) + * [Opening PHP files as DOM](#Opening_PHP_files_as_DOM.md) + * [Inputting PHP code](#Inputting_PHP_code.md) + * [Outputting PHP code](#Outputting_PHP_code.md) + +## Class Interfaces +phpQuery implements some of [Standard PHP Library (SPL)](http://pl.php.net/spl) interfaces. +#### Iterator +Iterator interface allows looping objects thou native PHP **foreach loop**. Example: +``` +// get all direct LI elements from UL list of class 'im-the-list' +$LIs = pq('ul.im-the-list > li'); +foreach($LIs as $li) { + pq($li)->addClass('foreached'); +} +``` +Now there is a catch above. Foreach loop **doesn't return phpQuery object**. Instead it returns pure DOMNode. That's how jQuery does, because not always you need **phpQuery** when you found interesting nodes. +#### Array Access +If you like writing arrays, with phpQuery you can still do it, thanks to the ArrayAccess interface. +``` +$pq = phpQuery::newDocumentFile('somefile.html'); +// print first list outer HTML +print $pq['ul:first']; +// change INNER HTML of second LI directly in first UL +$pq['ul:first > li:eq(1)'] = 'new inner html of second LI directly in first UL'; +// now look at the difference (outer vs inner) +print $pq['ul:first > li:eq(1)']; +// will print <li>new inner html of second LI directly in first UL</li> +``` +#### Countable +If used to do `count($something)` you can still do this that way, instead of eg `pq('p')->size()`. +``` +// count all direct LIs in first list +print count(pq('ul:first > li')); +``` +## Callbacks +There is a special [Callbacks](Callbacks.md) wiki section, to which you should refer to. +## PHP Code Support +#### Opening PHP files as DOM +PHP files can be opened using **phpQuery::newDocumentPHP($markup)** or **phpQuery::newDocumentFilePHP($file)**. Such files are visible as DOM, where: + * PHP tags beetween DOM elements are available (queryable) as `<php> ...code... </php>` + * PHP tags inside attributes are HTML entities + * PHP tags between DOM element's attributes are **not yet supported** +#### Inputting PHP code +Additional methods allows placing PHP code inside DOM. Below each method visible is it's logic equivalent. + * **attrPHP**($attr, $code) + * [attr](http://docs.jquery.com/Attributes/attr)($attr, "<?php $code ?>") + * **addClassPHP**($code) + * [addClass](http://docs.jquery.com/Attributes/addClass)("<?php $code ?>") + * **beforePHP**($code) + * [before](http://docs.jquery.com/Manipulation/before)("<?php $code ?>") + * **afterPHP**($code) + * [after](http://docs.jquery.com/Manipulation/after)("<?php $code ?>") + * **prependPHP**($code) + * [prepend](http://docs.jquery.com/Manipulation/prepend)("<?php $code ?>") + * **appendPHP**($code) + * [append](http://docs.jquery.com/Manipulation/append)("<?php $code ?>") + * **php**($code) + * [html](http://docs.jquery.com/Manipulation/html)("<?php $code ?>") + * **wrapAllPHP**($codeBefore, $codeAfter) + * [wrapAll](http://docs.jquery.com/Manipulation/wrapAll)("<?php $codeBefore?><?php $codeAfter ?>") + * **wrapPHP**($codeBefore, $codeAfter) + * [wrap](http://docs.jquery.com/Manipulation/wrap)("<?php $codeBefore?><?php $codeAfter ?>") + * **wrapInnerPHP**($codeBefore, $codeAfter) + * [wrapInner](http://docs.jquery.com/Manipulation/wrapInner)("<?php $codeBefore?><?php $codeAfter ?>") + * **replaceWithPHP**($code) + * [replaceWith](http://docs.jquery.com/Manipulation/replaceWith)("<?php $code ?>") +#### Outputting PHP code +Code inserted with methods above won't be returned as valid (runnable) using classic output methods such as **html()**. To make it work, **php()** method without parameter have to be used. Optionaly **phpQuery::markupToPHP($markup)** can activate tags in string outputed before. +**REMEMBER** Outputing runnable code and placing it on webserver is always dangerous ! \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsClientSidePorts.md b/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsClientSidePorts.md new file mode 100644 index 0000000000000000000000000000000000000000..d7a2e28292815daddcfe798806a8cf20960c5c92 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsClientSidePorts.md @@ -0,0 +1,7 @@ +In [Issue Tracker](http://code.google.com/p/phpquery/issues/list) there is a list of [plugins which are planned to be ported](http://code.google.com/p/phpquery/issues/list?can=2&q=label%3APort). +## JSON +Port of [JSON](http://jollytoad.googlepages.com/json.js) plugin. +``` +$jsonString = phpQuery::toJSON( pq('form')->serializeArray() ); +$array = phpQuery::parseJSON('{"foo": "bar"}'); +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsServerSide.md b/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsServerSide.md new file mode 100644 index 0000000000000000000000000000000000000000..641e34f0f5a0793aa28b16bc903d6166ef99f82e --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/PluginsServerSide.md @@ -0,0 +1,77 @@ +If you need to write plugin only for simple task, write a **script** using ScriptsPlugin. + +## Using plugins +Plugins are loaded using **plugin** method from phpQueryObject or phpQuery static namespace. +``` +// all calls to plugin below are equal +phpQuery::plugin('example') +phpQuery::plugin('example', 'example.php') +pq('ul')->plugin('example') +pq('ul')->plugin('example', 'example.php') +``` +## Writing plugins +Plugin consist from 2 classes - first extending **phpQueryObjects** (result of pq(); function) and second, extending static **phpQuery::$plugins** namespace. Plugin classes are never intialized, just method calls are forwarded in static way from phpQuery. + +#### Extending phpQueryObject +``` +/** + * phpQuery plugin class extending phpQuery object. + * Methods from this class are callable on every phpQuery object. + * + * Class name prefix 'phpQueryObjectPlugin_' must be preserved. + */ +abstract class phpQueryObjectPlugin_example { + /** + * Limit binded methods. + * + * null means all public. + * array means only specified ones. + * + * @var array|null + */ + public static $phpQueryMethods = null; + /** + * Enter description here... + * + * @param phpQueryObject $self + */ + public static function example($self, $arg1) { + // this method can be called on any phpQuery object, like this: + // pq('div')->example('$arg1 Value') + + // do something + $self->append('Im just an example !'); + // change stack of result object + return $self->find('div'); + } + protected static function helperFunction() { + // this method WONT be avaible as phpQuery method, + // because it isn't publicly callable + } +} +``` +#### Extending phpQuery +``` +/** + * phpQuery plugin class extending phpQuery static namespace. + * Methods from this class are callable as follows: + * phpQuery::$plugins->staticMethod() + * + * Class name prefix 'phpQueryPlugin_' must be preserved. + */ +abstract class phpQueryPlugin_example { + /** + * Limit binded methods. + * + * null means all public. + * array means only specified ones. + * + * @var array|null + */ + public static $phpQueryMethods = null; + public static function staticMethod() { + // this method can be called within phpQuery class namespace, like this: + // phpQuery::$plugins->staticMethod() + } +} +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/README.md b/civicrm/vendor/rubobaquero/phpquery/wiki/README.md new file mode 100644 index 0000000000000000000000000000000000000000..79c4866ddaf8b32f5c629c81f943a146809635f5 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/README.md @@ -0,0 +1,24 @@ + 1. [Basics](Basics.md) + 1. [Ported jQuery sections](jQueryPortingState.md) + 1. [Selectors](Selectors.md) + 1. [Attributes](Attributes.md) + 1. [Traversing](Traversing.md) + 1. [Manipulation](Manipulation.md) + 1. [Ajax](Ajax.md) + 1. [Events](Events.md) + 1. [Utilities](Utilities.md) + 1. [Plugin ports](PluginsClientSidePorts.md) + 1. [PHP Support](PHPSupport.md) + 1. [Command Line Interface](CommandLineInterface.md) + 1. [Multi document support](MultiDocumentSupport.md) + 1. [Plugins](PluginsServerSide.md) + 1. [WebBrowser](WebBrowser.md) + 1. [Scripts](ScriptsPlugin.md) + 1. [jQueryServer](jQueryServer.md) + 1. [Debugging](Debugging.md) + 1. Bootstrap file + + +This manual is copied from http://code.google.com/p/phpquery/wiki/Manual + +The wiki was downloaded from the [Google Code source repository for phpQuery](https://code.google.com/p/phpquery/source/browse/#svn%2Fwiki), which is under the MIT License. diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/ReleasePackages.md b/civicrm/vendor/rubobaquero/phpquery/wiki/ReleasePackages.md new file mode 100644 index 0000000000000000000000000000000000000000..c5929ca56193326c398458cefa785cdaa3b87b40 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/ReleasePackages.md @@ -0,0 +1,11 @@ +# This page is TODO + +## Formats + * RPM + * ZIP + +## Forms + * Standard + * OneFile + * Broken plugins support ? + * ZendFramework not included \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/ScriptsPlugin.md b/civicrm/vendor/rubobaquero/phpquery/wiki/ScriptsPlugin.md new file mode 100644 index 0000000000000000000000000000000000000000..f8e59217fac4ee4bade870fc2d7651445c43632f --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/ScriptsPlugin.md @@ -0,0 +1,24 @@ +ScriptsPlugin simplifies writing short code scripts which can be easily reused (chained). It removes plugin overhead allowing script to be one-line command. + +## Using scripts +Before using any script, you need to load **Scripts** plugin, like so: +``` +phpQuery::plugin('Scripts'); +// or inside a chain +pq('li')->plugin('Scripts'); +``` +After that, any available script can be used thou **script** method. +``` +print pq('div')->script('safe_print'); +``` +## Writing scripts +Scripts are placed in **/phpQuery/plugins/Scripts**. Each script has it's own file. Each file has access to 4 variables: + * **$self** Represents $this + * **$params** Represents parameters passed to script() method (without script name) + * **$return** If not null, will be used as method result + * **$config** Content of config.php file +By default each script returns $self aka $this. +##### Example script +``` +$return = $self->find($params[0]); +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Selectors.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Selectors.md new file mode 100644 index 0000000000000000000000000000000000000000..0d737bcb2673a1f758f7f1c7e7e6cddc89e13f3f --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Selectors.md @@ -0,0 +1,76 @@ +Selectors are the heart of jQuery-like interface. Most of [CSS Level 3](http://www.w3.org/TR/2005/WD-css3-selectors-20051215/) syntax is implemented (in state same as in jQuery). +## Example +``` +pq(".class ul > li[rel='foo']:first:has(a)")->appendTo('.append-target-wrapper div')->... +``` +# Table of Contents + * [Basics](#Basics.md) + * [Hierarchy](#Hierarchy.md) + * [Basic Filters](#Basic_Filters.md) + * [Content Filters](#Content_Filters.md) + * [Visibility Filters](#Visibility_Filters.md) + * [Attribute Filters](#Attribute_Filters.md) + * [Child Filters](#Child_Filters.md) + * [Forms](#Forms.md) + * [Form Filters](#Form_Filters.md) +## Basics + * **[#id](http://docs.jquery.com/Selectors/id)** Matches a single element with the given id attribute. + * **[element](http://docs.jquery.com/Selectors/element)** Matches all elements with the given name. + * **[.class](http://docs.jquery.com/Selectors/class)** Matches all elements with the given class. + * **[\*](http://docs.jquery.com/Selectors/all)** Matches all elements. + * **[selector1, selector2, selectorN](http://docs.jquery.com/Selectors/multiple)** Matches the combined results of all the specified selectors. +## Hierarchy + * **[ancestor descendant](http://docs.jquery.com/Selectors/descendant)** Matches all descendant elements specified by "descendant" of elements specified by "ancestor". + * **[parent > child](http://docs.jquery.com/Selectors/child)** Matches all child elements specified by "child" of elements specified by "parent". + * **[prev + next](http://docs.jquery.com/Selectors/next)** Matches all next elements specified by "next" that are next to elements specified by "prev". + * **[prev ~ siblings](http://docs.jquery.com/Selectors/siblings)** Matches all sibling elements after the "prev" element that match the filtering "siblings" selector. +## Basic Filters + * **[:first](http://docs.jquery.com/Selectors/first)** Matches the first selected element. + * **[:last](http://docs.jquery.com/Selectors/last)** Matches the last selected element. + * **[:not(selector)](http://docs.jquery.com/Selectors/not)** Filters out all elements matching the given selector. + * **[:even](http://docs.jquery.com/Selectors/even)** Matches even elements, zero-indexed. + * **[:odd](http://docs.jquery.com/Selectors/odd)** Matches odd elements, zero-indexed. + * **[:eq(index)](http://docs.jquery.com/Selectors/eq)** Matches a single element by its index. + * **[:gt(index)](http://docs.jquery.com/Selectors/gt)** Matches all elements with an index above the given one. + * **[:lt(index)](http://docs.jquery.com/Selectors/lt)** Matches all elements with an index below the given one. + * **[:header](http://docs.jquery.com/Selectors/header)** Matches all elements that are headers, like h1, h2, h3 and so on. + * **[:animated](http://docs.jquery.com/Selectors/animated)** Matches all elements that are currently being animated. +## Content Filters + * **[:contains(text)](http://docs.jquery.com/Selectors/contains)** Matches elements which contain the given text. + * **[:empty](http://docs.jquery.com/Selectors/empty)** Matches all elements that have no children (including text nodes). + * **[:has(selector)](http://docs.jquery.com/Selectors/has)** Matches elements which contain at least one element that matches the specified selector. + * **[:parent](http://docs.jquery.com/Selectors/parent)** Matches all elements that are parents - they have child elements, including text. +## Visibility Filters +_none_ +## Attribute Filters + * **[[attribute](http://docs.jquery.com/Selectors/attributeHas)]** Matches elements that have the specified attribute. + * **[[attribute=value](http://docs.jquery.com/Selectors/attributeEquals)]** Matches elements that have the specified attribute with a certain value. + * **[[attribute!=value](http://docs.jquery.com/Selectors/attributeNotEqual)]** Matches elements that don't have the specified attribute with a certain value. + * **[[attribute^=value](http://docs.jquery.com/Selectors/attributeStartsWith)]** Matches elements that have the specified attribute and it starts with a certain value. + * **[[attribute$=value](http://docs.jquery.com/Selectors/attributeEndsWith)]** Matches elements that have the specified attribute and it ends with a certain value. + * **[[attribute\*=value](http://docs.jquery.com/Selectors/attributeContains)]** Matches elements that have the specified attribute and it contains a certain value. + * **[[selector1](http://docs.jquery.com/Selectors/attributeMultiple)[selector2](selector2.md)[selectorN](selectorN.md)]** Matches elements that have the specified attribute and it contains a certain value. +## Child Filters + * **[:nth-child(index/even/odd/equation)](http://docs.jquery.com/Selectors/nthChild)** Matches all elements that are the nth-child of their parent or that are the parent's even or odd children. + * **[:first-child](http://docs.jquery.com/Selectors/firstChild)** Matches all elements that are the first child of their parent. + * **[:last-child](http://docs.jquery.com/Selectors/lastChild)** Matches all elements that are the last child of their parent. + * **[:only-child](http://docs.jquery.com/Selectors/onlyChild)** Matches all elements that are the only child of their parent. +## Forms + * **[:input](http://docs.jquery.com/Selectors/input)** Matches all input, textarea, select and button elements. + * **[:text](http://docs.jquery.com/Selectors/text)** Matches all input elements of type text. + * **[:password](http://docs.jquery.com/Selectors/password)** Matches all input elements of type password. + * **[:radio](http://docs.jquery.com/Selectors/radio)** Matches all input elements of type radio. + * **[:checkbox](http://docs.jquery.com/Selectors/checkbox)** Matches all input elements of type checkbox. + * **[:submit](http://docs.jquery.com/Selectors/submit)** Matches all input elements of type submit. + * **[:image](http://docs.jquery.com/Selectors/image)** Matches all input elements of type image. + * **[:reset](http://docs.jquery.com/Selectors/reset)** Matches all input elements of type reset. + * **[:button](http://docs.jquery.com/Selectors/button)** Matches all button elements and input elements of type button. + * **[:file](http://docs.jquery.com/Selectors/file)** Matches all input elements of type file. + * **[:hidden](http://docs.jquery.com/Selectors/hidden)** Matches all elements that are hidden, or input elements of type "hidden". +## Form Filters + * **[:enabled](http://docs.jquery.com/Selectors/enabled)** Matches all elements that are enabled. + * **[:disabled](http://docs.jquery.com/Selectors/disabled)** Matches all elements that are disabled. + * **[:checked](http://docs.jquery.com/Selectors/checked)** Matches all elements that are checked. + * **[:selected](http://docs.jquery.com/Selectors/selected)** Matches all elements that are selected. + +Read more at [Selectors](http://docs.jquery.com/Selectors) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Traversing.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Traversing.md new file mode 100644 index 0000000000000000000000000000000000000000..cc89f5b2e54dd1723dc4fbcaabdb9504dbb66031 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Traversing.md @@ -0,0 +1,34 @@ +## Example +``` +pq('div > p')->add('div > ul')->filter(':has(a)')->find('p:first')->nextAll()->andSelf()->... +``` +# Table of Contents + * [Filtering](#Filtering.md) + * [Finding](#Finding.md) + * [Chaining](#Chaining.md) +## Filtering + * **[eq](http://docs.jquery.com/Traversing/eq)**[($index)](http://docs.jquery.com/Traversing/eq) Reduce the set of matched elements to a single element. + * **[hasClass](http://docs.jquery.com/Traversing/hasClass)**[($class)](http://docs.jquery.com/Traversing/hasClass) Checks the current selection against a class and returns true, if at least one element of the selection has the given class. + * **[filter](http://docs.jquery.com/Traversing/filter)**[($expr)](http://docs.jquery.com/Traversing/filter) Removes all elements from the set of matched elements that do not match the specified expression(s). + * **[filter](http://docs.jquery.com/Traversing/filter)**[($fn)](http://docs.jquery.com/Traversing/filter) Removes all elements from the set of matched elements that does not match the specified function. + * **[is](http://docs.jquery.com/Traversing/is)**[($expr)](http://docs.jquery.com/Traversing/is) Checks the current selection against an expression and returns true, if at least one element of the selection fits the given expression. + * **[map](http://docs.jquery.com/Traversing/map)**[($callback)](http://docs.jquery.com/Traversing/map) Translate a set of elements in the jQuery object into another set of values in an array (which may, or may not, be elements). + * **[not](http://docs.jquery.com/Traversing/not)**[($expr)](http://docs.jquery.com/Traversing/not) Removes elements matching the specified expression from the set of matched elements. + * **[slice](http://docs.jquery.com/Traversing/slice)**[($start, $end)](http://docs.jquery.com/Traversing/slice) Selects a subset of the matched elements. +## Finding + * **[add](http://docs.jquery.com/Traversing/add)**[($expr)](http://docs.jquery.com/Traversing/add) Adds more elements, matched by the given expression, to the set of matched elements. + * **[children](http://docs.jquery.com/Traversing/children)**[($expr)](http://docs.jquery.com/Traversing/children) Get a set of elements containing all of the unique immediate children of each of the matched set of elements. + * **[contents](http://docs.jquery.com/Traversing/contents)**[()](http://docs.jquery.com/Traversing/contents) Find all the child nodes inside the matched elements (including text nodes), or the content document, if the element is an iframe. + * **[find](http://docs.jquery.com/Traversing/find)**[($expr)](http://docs.jquery.com/Traversing/find) Searches for all elements that match the specified expression. This method is a good way to find additional descendant elements with which to process. + * **[next](http://docs.jquery.com/Traversing/next)**[($expr)](http://docs.jquery.com/Traversing/next) Get a set of elements containing the unique next siblings of each of the given set of elements. + * **[nextAll](http://docs.jquery.com/Traversing/nextAll)**[($expr)](http://docs.jquery.com/Traversing/nextAll) Find all sibling elements after the current element. + * **[parent](http://docs.jquery.com/Traversing/parent)**[($expr)](http://docs.jquery.com/Traversing/parent) Get a set of elements containing the unique parents of the matched set of elements. + * **[parents](http://docs.jquery.com/Traversing/parents)**[($expr)](http://docs.jquery.com/Traversing/parents) Get a set of elements containing the unique ancestors of the matched set of elements (except for the root element). The matched elements can be filtered with an optional expression. + * **[prev](http://docs.jquery.com/Traversing/prev)**[($expr)](http://docs.jquery.com/Traversing/prev) Get a set of elements containing the unique previous siblings of each of the matched set of elements. + * **[prevAll](http://docs.jquery.com/Traversing/prevAll)**[($expr)](http://docs.jquery.com/Traversing/prevAll) Find all sibling elements before the current element. + * **[siblings](http://docs.jquery.com/Traversing/siblings)**[($expr)](http://docs.jquery.com/Traversing/siblings) Get a set of elements containing all of the unique siblings of each of the matched set of elements. Can be filtered with an optional expressions. +## Chaining + * **[andSelf](http://docs.jquery.com/Traversing/andSelf)**[()](http://docs.jquery.com/Traversing/andSelf) Add the previous selection to the current selection. + * **[end](http://docs.jquery.com/Traversing/end)**[()](http://docs.jquery.com/Traversing/end) Revert the most recent 'destructive' operation, changing the set of matched elements to its previous state (right before the destructive operation). + +Read more at [Traversing](http://docs.jquery.com/Traversing) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/Utilities.md b/civicrm/vendor/rubobaquero/phpquery/wiki/Utilities.md new file mode 100644 index 0000000000000000000000000000000000000000..b42720a8d49a17e2d1aeb5707a3384eb7c045c35 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/Utilities.md @@ -0,0 +1,20 @@ +# Table of Contents + * [User Agent](#User_Agent.md) + * [Array and Object operations](#Array_and_Object_operations.md) + * [Test operations](#Test_operations.md) + * [String operations](#String_operations.md) +## User Agent +_none_ +## Array and Object operations + * **[phpQuery::each](http://docs.jquery.com/Utilities/jQuery.each)**[($object, $callback)](http://docs.jquery.com/Utilities/jQuery.each) A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. + * **[phpQuery::grep](http://docs.jquery.com/Utilities/jQuery.grep)**[($array, $callback, $invert)](http://docs.jquery.com/Utilities/jQuery.grep) Filter items out of an array, by using a filter function. + * **[phpQuery::makeArray](http://docs.jquery.com/Utilities/jQuery.makeArray)**[($obj)](http://docs.jquery.com/Utilities/jQuery.makeArray) Turns an array-like object into a true array. + * **[phpQuery::map](http://docs.jquery.com/Utilities/jQuery.map)**[($array, $callback)](http://docs.jquery.com/Utilities/jQuery.map) Translate all items in an array to another array of items. + * **[phpQuery::inArray](http://docs.jquery.com/Utilities/jQuery.inArray)**[($value, $array)](http://docs.jquery.com/Utilities/jQuery.inArray) Determine the index of the first parameter in the Array (-1 if not found). + * **[phpQuery::unique](http://docs.jquery.com/Utilities/jQuery.unique)**[($array)](http://docs.jquery.com/Utilities/jQuery.unique) Remove all duplicate elements from an array of elements. +## Test operations + * **[phpQuery::isFunction](http://docs.jquery.com/Utilities/jQuery.isFunction)**[($obj)](http://docs.jquery.com/Utilities/jQuery.isFunction) Determine if the parameter passed is a function. +## String operations + * **[phpQuery::trim](http://docs.jquery.com/Utilities/jQuery.trim)**[($str)](http://docs.jquery.com/Utilities/jQuery.trim) Remove the whitespace from the beginning and end of a string. + +Read more at [Utilities](http://docs.jquery.com/Utilities) section on [jQuery Documentation Site](http://docs.jquery.com/). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/WebBrowser.md b/civicrm/vendor/rubobaquero/phpquery/wiki/WebBrowser.md new file mode 100644 index 0000000000000000000000000000000000000000..6b189c1fc80b18cb4c81b6c69e4fb7c11742cbd9 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/WebBrowser.md @@ -0,0 +1,37 @@ +**WebBrowser** is a phpQuery [plugin](PluginsServerSide.md) that mimics behaviors of web browser. Thanks to that developer can simulate user's behavior inside a PHP script. + +## Supported + * Link navigation (click event) + * Form navigation (submit event) + * Cookies (thought [Zend\_Http\_CookieJar](http://framework.zend.com/manual/en/zend.http.cookies.html)) + * Relative links + * document.location (not an object, yet) + +## Use cases + * Fill forms and submit them easly + * Login to secure pages and collect content + * Write test cases reproducing browsing proccess + +## Example 1 +Adding web browser functionality to existing phpQuery object and submiting the form. +``` +->WebBrowser('callback')->find('form')->submit()->... +``` + +## Example 2 +Querying Google against "search phrase": +``` +require_once('phpQuery/phpQuery.php'); +phpQuery::browserGet('http://www.google.com/', 'success1'); +function success1($browser) { + $browser + ->WebBrowser('success2') + ->find('input[name=q]') + ->val('search phrase') + ->parents('form') + ->submit(); +} +function success2($browser) { + print $browser; +} +``` \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryDifferences.md b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryDifferences.md new file mode 100644 index 0000000000000000000000000000000000000000..2d87ca9fd096ba00bc859d94673d166052a0da64 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryDifferences.md @@ -0,0 +1 @@ +Renamed to [jQueryPortingState](jQueryPortingState.md). \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryHelpers.md b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryHelpers.md new file mode 100644 index 0000000000000000000000000000000000000000..2df052a7deaa10906d5909c60cfb95a0425e6600 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryHelpers.md @@ -0,0 +1,3 @@ +jQuery helper libraries written in PHP + * [jquery-php](http://code.google.com/p/jquery-php/) + * [PQuery](http://www.ngcoders.com/php/pquery-php-and-jquery) \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryPortingState.md b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryPortingState.md new file mode 100644 index 0000000000000000000000000000000000000000..d4d75b5e7b0613de5e61abfedabb46e1e413774a --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryPortingState.md @@ -0,0 +1,29 @@ +phpQuery is almost a full port of the [jQuery JavaScript Library](http://jquery.com/). + +## Ported Sections + 1. [Selectors](Selectors.md) + 1. [Attributes](Attributes.md) + 1. [Traversing](Traversing.md) + 1. [Manipulation](Manipulation.md) + 1. [Ajax](Ajax.md) + 1. [Events](Events.md) + 1. [Utilities](Utilities.md) + 1. [Plugin ports](PluginsClientSidePorts.md) + +## Additional methods +phpQuery features many additional methods comparing to jQuery: + * htmlOuter() + * xml() + * xmlOuter() + * markup() + * markupOuter() + * getString() + * reverse() + * contentsUnwrap() + * switchWith() + * all from [PHPSupport](PHPSupport.md) + * all from [Basic](Basic.md) + * all from [MultiDocumentSupport](MultiDocumentSupport.md) + +## Other Differences + * [Server Side Events](http://code.google.com/p/phpquery/wiki/Events?ts=1225458859&updated=Events#Server_Side_Events) \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServer.md b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServer.md new file mode 100644 index 0000000000000000000000000000000000000000..3be1b2701a2a4ae5ed214658cccf43782fa63dc1 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServer.md @@ -0,0 +1,16 @@ +**jQueryServer** is a jQuery plugin giving unobstrusive, client-side bindings to server-side implementation of jQuery. + +## Example scenario + 1. Connect to server and make an [Ajax](Ajax.md) request to somewhere ([crossdomain allowed](CrossDomainAjax.md)) + 1. Do some manipulations, you can even trigger a [server-side event](http://code.google.com/p/phpquery/wiki/Events#Server_Side_Events) + 1. Get processed date back to the browser + +## Example code +``` +$.server({url: 'http://somesite.com'}) + .find('.my-class') + .client(function(response){ + $('.destination').html(response); +}); +``` +Since version **0.5.1** (this is **not** phpQuery release version number) there is a support for config file which **authorizes** [Ajax](Ajax.md) hosts and referers. \ No newline at end of file diff --git a/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServerSidePorts.md b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServerSidePorts.md new file mode 100644 index 0000000000000000000000000000000000000000..5a6eeb5dfe4028d1945a7e3bbb2d0c74c2365a66 --- /dev/null +++ b/civicrm/vendor/rubobaquero/phpquery/wiki/jQueryServerSidePorts.md @@ -0,0 +1,6 @@ +jQuery ports to server-side languages: + * **PHP** - [phpQuery](http://code.google.com/p/phpquery/) + * **ActionScript** - [as3query](http://tech.nitoyon.com/blog/2008/01/as3query_alpha.html) + * **Ruby** - [hpricot](http://code.whytheluckystiff.net/hpricot/) + * **Perl** - [pQuery](http://search.cpan.org/~ingy/pQuery/lib/pQuery.pm) + * **Python** - [PyQuery](http://pypi.python.org/pypi/pyquery) \ No newline at end of file diff --git a/civicrm/vendor/symfony/config/CHANGELOG.md b/civicrm/vendor/symfony/config/CHANGELOG.md index 6cb610c478694e978eb4e2d88ecf663e424835d1..a650e10ab8ff3cb818ea69e2df11430c4cc6d130 100644 --- a/civicrm/vendor/symfony/config/CHANGELOG.md +++ b/civicrm/vendor/symfony/config/CHANGELOG.md @@ -1,6 +1,36 @@ CHANGELOG ========= +4.4.0 +----- + + * added a way to exclude patterns of resources from being imported by the `import()` method + +4.3.0 +----- + + * deprecated using environment variables with `cannotBeEmpty()` if the value is validated with `validate()` + * made `Resource\*` classes final and not implement `Serializable` anymore + * deprecated the `root()` method in `TreeBuilder`, pass the root node information to the constructor instead + +4.2.0 +----- + + * deprecated constructing a `TreeBuilder` without passing root node information + * renamed `FileLoaderLoadException` to `LoaderLoadException` + +4.1.0 +----- + + * added `setPathSeparator` method to `NodeBuilder` class + * added third `$pathSeparator` constructor argument to `BaseNode` + * the `Processor` class has been made final + +4.0.0 +----- + + * removed `ConfigCachePass` + 3.4.0 ----- diff --git a/civicrm/vendor/symfony/config/ConfigCache.php b/civicrm/vendor/symfony/config/ConfigCache.php index b2a39076f9d4a70352bc060c07abf516824aba56..053059b8ab490a3f25ad22815ba641981f01e6fd 100644 --- a/civicrm/vendor/symfony/config/ConfigCache.php +++ b/civicrm/vendor/symfony/config/ConfigCache.php @@ -31,9 +31,9 @@ class ConfigCache extends ResourceCheckerConfigCache * @param string $file The absolute cache path * @param bool $debug Whether debugging is enabled or not */ - public function __construct($file, $debug) + public function __construct(string $file, bool $debug) { - $this->debug = (bool) $debug; + $this->debug = $debug; $checkers = []; if (true === $this->debug) { diff --git a/civicrm/vendor/symfony/config/ConfigCacheFactory.php b/civicrm/vendor/symfony/config/ConfigCacheFactory.php index 7903cca9321f0901f0f8f033ef56c8b0d1cbd78e..bfb70cb2ceda5e29e558b55cfebb12af84064bea 100644 --- a/civicrm/vendor/symfony/config/ConfigCacheFactory.php +++ b/civicrm/vendor/symfony/config/ConfigCacheFactory.php @@ -27,7 +27,7 @@ class ConfigCacheFactory implements ConfigCacheFactoryInterface /** * @param bool $debug The debug flag to pass to ConfigCache */ - public function __construct($debug) + public function __construct(bool $debug) { $this->debug = $debug; } @@ -43,7 +43,7 @@ class ConfigCacheFactory implements ConfigCacheFactoryInterface $cache = new ConfigCache($file, $this->debug); if (!$cache->isFresh()) { - \call_user_func($callback, $cache); + $callback($cache); } return $cache; diff --git a/civicrm/vendor/symfony/config/Definition/ArrayNode.php b/civicrm/vendor/symfony/config/Definition/ArrayNode.php index 59a0af8794345596c241779192ec4f2179be95d3..34201709c217910e5e2f289077fecd2c51884c34 100644 --- a/civicrm/vendor/symfony/config/Definition/ArrayNode.php +++ b/civicrm/vendor/symfony/config/Definition/ArrayNode.php @@ -55,7 +55,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface $normalized = []; foreach ($value as $k => $v) { - if (false !== strpos($k, '-') && false === strpos($k, '_') && !\array_key_exists($normalizedKey = str_replace('-', '_', $k), $value)) { + if (str_contains($k, '-') && !str_contains($k, '_') && !\array_key_exists($normalizedKey = str_replace('-', '_', $k), $value)) { $normalized[$normalizedKey] = $v; } else { $normalized[$k] = $v; @@ -68,7 +68,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface /** * Retrieves the children of this node. * - * @return array The children + * @return array<string, NodeInterface> */ public function getChildren() { @@ -192,7 +192,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface public function addChild(NodeInterface $node) { $name = $node->getName(); - if (!\strlen($name)) { + if ('' === $name) { throw new \InvalidArgumentException('Child nodes must be named.'); } if (isset($this->children[$name])) { @@ -203,11 +203,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } /** - * Finalizes the value of this node. - * - * @param mixed $value - * - * @return mixed The finalised value + * {@inheritdoc} * * @throws UnsetKeyException * @throws InvalidConfigurationException if the node doesn't have enough children @@ -249,11 +245,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } /** - * Validates the type of the value. - * - * @param mixed $value - * - * @throws InvalidTypeException + * {@inheritdoc} */ protected function validateType($value) { @@ -269,11 +261,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } /** - * Normalizes the value. - * - * @param mixed $value The value to normalize - * - * @return mixed The normalized value + * {@inheritdoc} * * @throws InvalidConfigurationException */ @@ -300,7 +288,31 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface // if extra fields are present, throw exception if (\count($value) && !$this->ignoreExtraKeys) { - $ex = new InvalidConfigurationException(sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath())); + $proposals = array_keys($this->children); + sort($proposals); + $guesses = []; + + foreach (array_keys($value) as $subject) { + $minScore = \INF; + foreach ($proposals as $proposal) { + $distance = levenshtein($subject, $proposal); + if ($distance <= $minScore && $distance < 3) { + $guesses[$proposal] = $distance; + $minScore = $distance; + } + } + } + + $msg = sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath()); + + if (\count($guesses)) { + asort($guesses); + $msg .= sprintf('. Did you mean "%s"?', implode('", "', array_keys($guesses))); + } else { + $msg .= sprintf('. Available option%s %s "%s".', 1 === \count($proposals) ? '' : 's', 1 === \count($proposals) ? 'is' : 'are', implode('", "', $proposals)); + } + + $ex = new InvalidConfigurationException($msg); $ex->setPath($this->getPath()); throw $ex; @@ -318,7 +330,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface */ protected function remapXml($value) { - foreach ($this->xmlRemappings as list($singular, $plural)) { + foreach ($this->xmlRemappings as [$singular, $plural]) { if (!isset($value[$singular])) { continue; } @@ -331,12 +343,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } /** - * Merges values together. - * - * @param mixed $leftSide The left side to merge - * @param mixed $rightSide The right side to merge - * - * @return mixed The merged values + * {@inheritdoc} * * @throws InvalidConfigurationException * @throws \RuntimeException @@ -368,7 +375,12 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface } if (!isset($this->children[$k])) { - throw new \RuntimeException('merge() expects a normalized config array.'); + if (!$this->ignoreExtraKeys || $this->removeExtraKeys) { + throw new \RuntimeException('merge() expects a normalized config array.'); + } + + $leftSide[$k] = $v; + continue; } $leftSide[$k] = $this->children[$k]->merge($leftSide[$k], $v); @@ -376,4 +388,12 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface return $leftSide; } + + /** + * {@inheritdoc} + */ + protected function allowPlaceholders(): bool + { + return false; + } } diff --git a/civicrm/vendor/symfony/config/Definition/BaseNode.php b/civicrm/vendor/symfony/config/Definition/BaseNode.php index 10bcb49c8b4950df0b54122cdf9852552fc8fadf..209e3d265166ef3197e7044d4cc40f22c3505c7e 100644 --- a/civicrm/vendor/symfony/config/Definition/BaseNode.php +++ b/civicrm/vendor/symfony/config/Definition/BaseNode.php @@ -15,6 +15,7 @@ use Symfony\Component\Config\Definition\Exception\Exception; use Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; use Symfony\Component\Config\Definition\Exception\InvalidTypeException; +use Symfony\Component\Config\Definition\Exception\UnsetKeyException; /** * The base node class. @@ -23,6 +24,11 @@ use Symfony\Component\Config\Definition\Exception\InvalidTypeException; */ abstract class BaseNode implements NodeInterface { + public const DEFAULT_PATH_SEPARATOR = '.'; + + private static $placeholderUniquePrefixes = []; + private static $placeholders = []; + protected $name; protected $parent; protected $normalizationClosures = []; @@ -32,21 +38,63 @@ abstract class BaseNode implements NodeInterface protected $deprecationMessage = null; protected $equivalentValues = []; protected $attributes = []; + protected $pathSeparator; + + private $handlingPlaceholder; /** - * @param string|null $name The name of the node - * @param NodeInterface|null $parent The parent of this node - * * @throws \InvalidArgumentException if the name contains a period */ - public function __construct($name, NodeInterface $parent = null) + public function __construct(?string $name, NodeInterface $parent = null, string $pathSeparator = self::DEFAULT_PATH_SEPARATOR) { - if (false !== strpos($name = (string) $name, '.')) { - throw new \InvalidArgumentException('The name must not contain ".".'); + if (str_contains($name = (string) $name, $pathSeparator)) { + throw new \InvalidArgumentException('The name must not contain ".'.$pathSeparator.'".'); } $this->name = $name; $this->parent = $parent; + $this->pathSeparator = $pathSeparator; + } + + /** + * Register possible (dummy) values for a dynamic placeholder value. + * + * Matching configuration values will be processed with a provided value, one by one. After a provided value is + * successfully processed the configuration value is returned as is, thus preserving the placeholder. + * + * @internal + */ + public static function setPlaceholder(string $placeholder, array $values): void + { + if (!$values) { + throw new \InvalidArgumentException('At least one value must be provided.'); + } + + self::$placeholders[$placeholder] = $values; + } + + /** + * Adds a common prefix for dynamic placeholder values. + * + * Matching configuration values will be skipped from being processed and are returned as is, thus preserving the + * placeholder. An exact match provided by {@see setPlaceholder()} might take precedence. + * + * @internal + */ + public static function setPlaceholderUniquePrefix(string $prefix): void + { + self::$placeholderUniquePrefixes[] = $prefix; + } + + /** + * Resets all current placeholders available. + * + * @internal + */ + public static function resetPlaceholders(): void + { + self::$placeholderUniquePrefixes = []; + self::$placeholders = []; } /** @@ -64,7 +112,7 @@ abstract class BaseNode implements NodeInterface */ public function getAttribute($key, $default = null) { - return isset($this->attributes[$key]) ? $this->attributes[$key] : $default; + return $this->attributes[$key] ?? $default; } /** @@ -246,13 +294,11 @@ abstract class BaseNode implements NodeInterface */ public function getPath() { - $path = $this->name; - if (null !== $this->parent) { - $path = $this->parent->getPath().'.'.$path; + return $this->parent->getPath().$this->pathSeparator.$this->name; } - return $path; + return $this->name; } /** @@ -264,8 +310,34 @@ abstract class BaseNode implements NodeInterface throw new ForbiddenOverwriteException(sprintf('Configuration path "%s" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.', $this->getPath())); } - $this->validateType($leftSide); - $this->validateType($rightSide); + if ($leftSide !== $leftPlaceholders = self::resolvePlaceholderValue($leftSide)) { + foreach ($leftPlaceholders as $leftPlaceholder) { + $this->handlingPlaceholder = $leftSide; + try { + $this->merge($leftPlaceholder, $rightSide); + } finally { + $this->handlingPlaceholder = null; + } + } + + return $rightSide; + } + + if ($rightSide !== $rightPlaceholders = self::resolvePlaceholderValue($rightSide)) { + foreach ($rightPlaceholders as $rightPlaceholder) { + $this->handlingPlaceholder = $rightSide; + try { + $this->merge($leftSide, $rightPlaceholder); + } finally { + $this->handlingPlaceholder = null; + } + } + + return $rightSide; + } + + $this->doValidateType($leftSide); + $this->doValidateType($rightSide); return $this->mergeValues($leftSide, $rightSide); } @@ -282,6 +354,20 @@ abstract class BaseNode implements NodeInterface $value = $closure($value); } + // resolve placeholder value + if ($value !== $placeholders = self::resolvePlaceholderValue($value)) { + foreach ($placeholders as $placeholder) { + $this->handlingPlaceholder = $value; + try { + $this->normalize($placeholder); + } finally { + $this->handlingPlaceholder = null; + } + } + + return $value; + } + // replace value with their equivalent foreach ($this->equivalentValues as $data) { if ($data[0] === $value) { @@ -290,7 +376,7 @@ abstract class BaseNode implements NodeInterface } // validate type - $this->validateType($value); + $this->doValidateType($value); // normalize value return $this->normalizeValue($value); @@ -323,7 +409,20 @@ abstract class BaseNode implements NodeInterface */ final public function finalize($value) { - $this->validateType($value); + if ($value !== $placeholders = self::resolvePlaceholderValue($value)) { + foreach ($placeholders as $placeholder) { + $this->handlingPlaceholder = $value; + try { + $this->finalize($placeholder); + } finally { + $this->handlingPlaceholder = null; + } + } + + return $value; + } + + $this->doValidateType($value); $value = $this->finalizeValue($value); @@ -333,6 +432,10 @@ abstract class BaseNode implements NodeInterface try { $value = $closure($value); } catch (Exception $e) { + if ($e instanceof UnsetKeyException && null !== $this->handlingPlaceholder) { + continue; + } + throw $e; } catch (\Exception $e) { throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e); @@ -378,4 +481,81 @@ abstract class BaseNode implements NodeInterface * @return mixed The finalized value */ abstract protected function finalizeValue($value); + + /** + * Tests if placeholder values are allowed for this node. + */ + protected function allowPlaceholders(): bool + { + return true; + } + + /** + * Tests if a placeholder is being handled currently. + */ + protected function isHandlingPlaceholder(): bool + { + return null !== $this->handlingPlaceholder; + } + + /** + * Gets allowed dynamic types for this node. + */ + protected function getValidPlaceholderTypes(): array + { + return []; + } + + private static function resolvePlaceholderValue($value) + { + if (\is_string($value)) { + if (isset(self::$placeholders[$value])) { + return self::$placeholders[$value]; + } + + foreach (self::$placeholderUniquePrefixes as $placeholderUniquePrefix) { + if (str_starts_with($value, $placeholderUniquePrefix)) { + return []; + } + } + } + + return $value; + } + + private function doValidateType($value): void + { + if (null !== $this->handlingPlaceholder && !$this->allowPlaceholders()) { + $e = new InvalidTypeException(sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', static::class, $this->getPath())); + $e->setPath($this->getPath()); + + throw $e; + } + + if (null === $this->handlingPlaceholder || null === $value) { + $this->validateType($value); + + return; + } + + $knownTypes = array_keys(self::$placeholders[$this->handlingPlaceholder]); + $validTypes = $this->getValidPlaceholderTypes(); + + if ($validTypes && array_diff($knownTypes, $validTypes)) { + $e = new InvalidTypeException(sprintf( + 'Invalid type for path "%s". Expected %s, but got %s.', + $this->getPath(), + 1 === \count($validTypes) ? '"'.reset($validTypes).'"' : 'one of "'.implode('", "', $validTypes).'"', + 1 === \count($knownTypes) ? '"'.reset($knownTypes).'"' : 'one of "'.implode('", "', $knownTypes).'"' + )); + if ($hint = $this->getInfo()) { + $e->addHint($hint); + } + $e->setPath($this->getPath()); + + throw $e; + } + + $this->validateType($value); + } } diff --git a/civicrm/vendor/symfony/config/Definition/BooleanNode.php b/civicrm/vendor/symfony/config/Definition/BooleanNode.php index 85f467b6bea92b5b5e234ff683aeb7eeca8f71b2..c43c46f0168d10ea82a44c9012de8102d8d2eb31 100644 --- a/civicrm/vendor/symfony/config/Definition/BooleanNode.php +++ b/civicrm/vendor/symfony/config/Definition/BooleanNode.php @@ -44,4 +44,12 @@ class BooleanNode extends ScalarNode // a boolean value cannot be empty return false; } + + /** + * {@inheritdoc} + */ + protected function getValidPlaceholderTypes(): array + { + return ['bool']; + } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php index da4ebf6273cc08a1a470817f28a13af33e60e49f..61348387be2d37324ba2d66647da13b77da1053f 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php @@ -39,7 +39,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition /** * {@inheritdoc} */ - public function __construct($name, NodeParentInterface $parent = null) + public function __construct(?string $name, NodeParentInterface $parent = null) { parent::__construct($name, $parent); @@ -280,8 +280,8 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition ->treatNullLike(['enabled' => true]) ->beforeNormalization() ->ifArray() - ->then(function ($v) { - $v['enabled'] = isset($v['enabled']) ? $v['enabled'] : true; + ->then(function (array $v) { + $v['enabled'] = $v['enabled'] ?? true; return $v; }) @@ -393,7 +393,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition protected function createNode() { if (null === $this->prototype) { - $node = new ArrayNode($this->name, $this->parent); + $node = new ArrayNode($this->name, $this->parent, $this->pathSeparator); $this->validateConcreteNode($node); @@ -404,7 +404,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition $node->addChild($child->getNode()); } } else { - $node = new PrototypedArrayNode($this->name, $this->parent); + $node = new PrototypedArrayNode($this->name, $this->parent, $this->pathSeparator); $this->validatePrototypeNode($node); @@ -412,11 +412,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition $node->setKeyAttribute($this->key, $this->removeKeyItem); } - if (false === $this->allowEmptyValue) { - @trigger_error(sprintf('Using %s::cannotBeEmpty() at path "%s" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.', __CLASS__, $node->getPath()), \E_USER_DEPRECATED); - } - - if (true === $this->atLeastOne) { + if (true === $this->atLeastOne || false === $this->allowEmptyValue) { $node->setMinNumberOfElements(1); } @@ -476,7 +472,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition } if (false === $this->allowEmptyValue) { - @trigger_error(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s". In 4.0 it will throw an exception.', $path), \E_USER_DEPRECATED); + throw new InvalidDefinitionException(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s".', $path)); } if (true === $this->atLeastOne) { @@ -519,4 +515,34 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition } } } + + /** + * @return NodeDefinition[] + */ + public function getChildNodeDefinitions() + { + return $this->children; + } + + /** + * Finds a node defined by the given $nodePath. + * + * @param string $nodePath The path of the node to find. e.g "doctrine.orm.mappings" + */ + public function find(string $nodePath): NodeDefinition + { + $firstPathSegment = (false === $pathSeparatorPos = strpos($nodePath, $this->pathSeparator)) + ? $nodePath + : substr($nodePath, 0, $pathSeparatorPos); + + if (null === $node = ($this->children[$firstPathSegment] ?? null)) { + throw new \RuntimeException(sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name)); + } + + if (false === $pathSeparatorPos) { + return $node; + } + + return $node->find(substr($nodePath, $pathSeparatorPos + \strlen($this->pathSeparator))); + } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php index 28e56579ada52427784017c49572f046dcc70d4d..d19324273bff57fcb9c9283ff104b7aac3434b43 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php @@ -24,7 +24,7 @@ class BooleanNodeDefinition extends ScalarNodeDefinition /** * {@inheritdoc} */ - public function __construct($name, NodeParentInterface $parent = null) + public function __construct(?string $name, NodeParentInterface $parent = null) { parent::__construct($name, $parent); @@ -38,7 +38,7 @@ class BooleanNodeDefinition extends ScalarNodeDefinition */ protected function instantiateNode() { - return new BooleanNode($this->name, $this->parent); + return new BooleanNode($this->name, $this->parent, $this->pathSeparator); } /** diff --git a/civicrm/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php b/civicrm/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..f30b8736cf3a348cb92f1c3d1966d789d84beaf6 --- /dev/null +++ b/civicrm/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +/** + * An interface that can be implemented by nodes which build other nodes. + * + * @author Roland Franssen <franssen.roland@gmail.com> + */ +interface BuilderAwareInterface +{ + /** + * Sets a custom children builder. + */ + public function setBuilder(NodeBuilder $builder); +} diff --git a/civicrm/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php index 817906f5076295ea9a9e660bd31630f5a387459f..9a9c096e3dcd338da9a3ab62aaa9cd1a5e9ed403 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php @@ -51,6 +51,6 @@ class EnumNodeDefinition extends ScalarNodeDefinition throw new \RuntimeException('You must call ->values() on enum nodes.'); } - return new EnumNode($this->name, $this->parent, $this->values); + return new EnumNode($this->name, $this->parent, $this->values, $this->pathSeparator); } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/ExprBuilder.php b/civicrm/vendor/symfony/config/Definition/Builder/ExprBuilder.php index 5db229dccab7f759039c635e75a9031f6042f99f..d102e56efc37a05b3e1ae91bbd88bfb32bbd1ba6 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/ExprBuilder.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/ExprBuilder.php @@ -37,7 +37,7 @@ class ExprBuilder */ public function always(\Closure $then = null) { - $this->ifPart = function ($v) { return true; }; + $this->ifPart = function () { return true; }; if (null !== $then) { $this->thenPart = $then; @@ -91,7 +91,7 @@ class ExprBuilder /** * Tests if the value is empty. * - * @return ExprBuilder + * @return $this */ public function ifEmpty() { @@ -168,7 +168,7 @@ class ExprBuilder */ public function thenEmptyArray() { - $this->thenPart = function ($v) { return []; }; + $this->thenPart = function () { return []; }; return $this; } @@ -200,7 +200,7 @@ class ExprBuilder */ public function thenUnset() { - $this->thenPart = function ($v) { throw new UnsetKeyException('Unsetting key.'); }; + $this->thenPart = function () { throw new UnsetKeyException('Unsetting key.'); }; return $this; } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php index c0bed462bf3850268a8cc5ff10daf733705cefff..7b74271ae498a134425b98255667a2f17112a73a 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php @@ -27,6 +27,6 @@ class FloatNodeDefinition extends NumericNodeDefinition */ protected function instantiateNode() { - return new FloatNode($this->name, $this->parent, $this->min, $this->max); + return new FloatNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator); } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php index f6c3c147f3e6ab37cb4e2dc7f678e3bc6626e0d7..0472a9870d9dcc7d4e10bd2c750bae2bb9d86485 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php @@ -27,6 +27,6 @@ class IntegerNodeDefinition extends NumericNodeDefinition */ protected function instantiateNode() { - return new IntegerNode($this->name, $this->parent, $this->min, $this->max); + return new IntegerNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator); } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/NodeBuilder.php b/civicrm/vendor/symfony/config/Definition/Builder/NodeBuilder.php index 2809cb6c6f601ac2cffd6d03e5d49c581af516e7..be059f5d17fceeb65d763e564741b06cb029572f 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/NodeBuilder.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/NodeBuilder.php @@ -179,7 +179,7 @@ class NodeBuilder implements NodeParentInterface */ public function append(NodeDefinition $node) { - if ($node instanceof ParentNodeDefinitionInterface) { + if ($node instanceof BuilderAwareInterface) { $builder = clone $this; $builder->setParent(null); $node->setBuilder($builder); diff --git a/civicrm/vendor/symfony/config/Definition/Builder/NodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/NodeDefinition.php index cc245d7489b0d6ff3c049bd6a93583794da5fab5..6cc9bc85cc84255ba753bf8d5f937b74b7b3043b 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/NodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/NodeDefinition.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Config\Definition\Builder; +use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException; use Symfony\Component\Config\Definition\NodeInterface; @@ -33,14 +34,11 @@ abstract class NodeDefinition implements NodeParentInterface protected $nullEquivalent; protected $trueEquivalent = true; protected $falseEquivalent = false; + protected $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR; protected $parent; protected $attributes = []; - /** - * @param string|null $name The name of the node - * @param NodeParentInterface|null $parent The parent - */ - public function __construct($name, NodeParentInterface $parent = null) + public function __construct(?string $name, NodeParentInterface $parent = null) { $this->parent = $parent; $this->name = $name; @@ -129,7 +127,9 @@ abstract class NodeDefinition implements NodeParentInterface } $node = $this->createNode(); - $node->setAttributes($this->attributes); + if ($node instanceof BaseNode) { + $node->setAttributes($this->attributes); + } return $node; } @@ -350,4 +350,26 @@ abstract class NodeDefinition implements NodeParentInterface * @throws InvalidDefinitionException When the definition is invalid */ abstract protected function createNode(); + + /** + * Set PathSeparator to use. + * + * @return $this + */ + public function setPathSeparator(string $separator) + { + if ($this instanceof ParentNodeDefinitionInterface) { + if (method_exists($this, 'getChildNodeDefinitions')) { + foreach ($this->getChildNodeDefinitions() as $child) { + $child->setPathSeparator($separator); + } + } else { + @trigger_error(sprintf('Not implementing the "%s::getChildNodeDefinitions()" method in "%s" is deprecated since Symfony 4.1.', ParentNodeDefinitionInterface::class, static::class), \E_USER_DEPRECATED); + } + } + + $this->pathSeparator = $separator; + + return $this; + } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php index 390b1136567e6ce3e175ffffc28ba6af92688388..c4bff1756fb0d420240eac94e1d519e724abbc0e 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php @@ -26,7 +26,7 @@ abstract class NumericNodeDefinition extends ScalarNodeDefinition /** * Ensures that the value is smaller than the given reference. * - * @param mixed $max + * @param int|float $max * * @return $this * @@ -45,7 +45,7 @@ abstract class NumericNodeDefinition extends ScalarNodeDefinition /** * Ensures that the value is bigger than the given reference. * - * @param mixed $min + * @param int|float $min * * @return $this * diff --git a/civicrm/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php b/civicrm/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php index 1bf2ad4bf6d9699f9a75dbc9271ead33745f3c78..c6328c29449b8b6d74415945ed10dd3748d742a3 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php @@ -15,8 +15,10 @@ namespace Symfony\Component\Config\Definition\Builder; * An interface that must be implemented by nodes which can have children. * * @author Victor Berchet <victor@suumit.com> + * + * @method NodeDefinition[] getChildNodeDefinitions() Gets the child node definitions - not implementing it is deprecated since Symfony 4.2 */ -interface ParentNodeDefinitionInterface +interface ParentNodeDefinitionInterface extends BuilderAwareInterface { /** * Returns a builder to add children nodes. @@ -41,9 +43,4 @@ interface ParentNodeDefinitionInterface * @return $this */ public function append(NodeDefinition $node); - - /** - * Sets a custom children builder. - */ - public function setBuilder(NodeBuilder $builder); } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php index 6170555ccf13945dbe572a45dc5caaa2106dd4ff..428f61290a063ec6a2fc852f64ae1ffa7e00e776 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php @@ -27,6 +27,6 @@ class ScalarNodeDefinition extends VariableNodeDefinition */ protected function instantiateNode() { - return new ScalarNode($this->name, $this->parent); + return new ScalarNode($this->name, $this->parent, $this->pathSeparator); } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/TreeBuilder.php b/civicrm/vendor/symfony/config/Definition/Builder/TreeBuilder.php index 384477c501082e944d6deeb7f4d91d2d1df853a3..359f590e7467c35dc39b9580bb0ae195bf1f2bf9 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/TreeBuilder.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/TreeBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Config\Definition\Builder; +use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException; use Symfony\Component\Config\Definition\NodeInterface; /** @@ -23,29 +24,49 @@ class TreeBuilder implements NodeParentInterface protected $tree; protected $root; - /** - * @deprecated since 3.4. To be removed in 4.0 - */ - protected $builder; + public function __construct(string $name = null, string $type = 'array', NodeBuilder $builder = null) + { + if (null === $name) { + @trigger_error('A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.', \E_USER_DEPRECATED); + } else { + $builder = $builder ?? new NodeBuilder(); + $this->root = $builder->node($name, $type)->setParent($this); + } + } /** * Creates the root node. * - * @param string $name The name of the root node - * @param string $type The type of the root node - * @param NodeBuilder $builder A custom node builder instance + * @param string $name The name of the root node + * @param string $type The type of the root node * * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array') * * @throws \RuntimeException When the node type is not supported + * + * @deprecated since Symfony 4.3, pass the root name to the constructor instead */ public function root($name, $type = 'array', NodeBuilder $builder = null) { - $builder = $builder ?: new NodeBuilder(); + @trigger_error(sprintf('The "%s()" method called for the "%s" configuration is deprecated since Symfony 4.3, pass the root name to the constructor instead.', __METHOD__, $name), \E_USER_DEPRECATED); + + $builder = $builder ?? new NodeBuilder(); return $this->root = $builder->node($name, $type)->setParent($this); } + /** + * @return NodeDefinition|ArrayNodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array') + */ + public function getRootNode(): NodeDefinition + { + if (null === $this->root) { + throw new \RuntimeException(sprintf('Calling "%s()" before creating the root node is not supported, migrate to the new constructor signature instead.', __METHOD__)); + } + + return $this->root; + } + /** * Builds the tree. * @@ -55,13 +76,31 @@ class TreeBuilder implements NodeParentInterface */ public function buildTree() { - if (null === $this->root) { - throw new \RuntimeException('The configuration tree has no root node.'); - } + $this->assertTreeHasRootNode(); if (null !== $this->tree) { return $this->tree; } return $this->tree = $this->root->getNode(true); } + + public function setPathSeparator(string $separator) + { + $this->assertTreeHasRootNode(); + + // unset last built as changing path separator changes all nodes + $this->tree = null; + + $this->root->setPathSeparator($separator); + } + + /** + * @throws \RuntimeException if root node is not defined + */ + private function assertTreeHasRootNode() + { + if (null === $this->root) { + throw new TreeWithoutRootNodeException('The configuration tree has no root node.'); + } + } } diff --git a/civicrm/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php b/civicrm/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php index 26565e1771d849a8a0abdbdff4a0386bc6e1a80f..39a564f4cdb76231013247da90961810c71d6112 100644 --- a/civicrm/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php +++ b/civicrm/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php @@ -27,7 +27,7 @@ class VariableNodeDefinition extends NodeDefinition */ protected function instantiateNode() { - return new VariableNode($this->name, $this->parent); + return new VariableNode($this->name, $this->parent, $this->pathSeparator); } /** diff --git a/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index 7f8639908dde41425ed98aa1f869707110d8a5d6..a6b6240c77a54c5a1b5f1cec8545477aaea63278 100644 --- a/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/civicrm/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -12,13 +12,14 @@ namespace Symfony\Component\Config\Definition\Dumper; use Symfony\Component\Config\Definition\ArrayNode; +use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\Definition\EnumNode; use Symfony\Component\Config\Definition\NodeInterface; use Symfony\Component\Config\Definition\PrototypedArrayNode; /** - * Dumps a XML reference configuration for the given configuration/node instance. + * Dumps an XML reference configuration for the given configuration/node instance. * * @author Wouter J <waldio.webdesign@gmail.com> */ @@ -41,24 +42,19 @@ class XmlReferenceDumper return $ref; } - /** - * @param int $depth - * @param bool $root If the node is the root node - * @param string $namespace The namespace of the node - */ - private function writeNode(NodeInterface $node, $depth = 0, $root = false, $namespace = null) + private function writeNode(NodeInterface $node, int $depth = 0, bool $root = false, string $namespace = null) { $rootName = ($root ? 'config' : $node->getName()); $rootNamespace = ($namespace ?: ($root ? 'http://example.org/schema/dic/'.$node->getName() : null)); // xml remapping if ($node->getParent()) { - $remapping = array_filter($node->getParent()->getXmlRemappings(), function ($mapping) use ($rootName) { + $remapping = array_filter($node->getParent()->getXmlRemappings(), function (array $mapping) use ($rootName) { return $rootName === $mapping[1]; }); if (\count($remapping)) { - list($singular) = current($remapping); + [$singular] = current($remapping); $rootName = $singular; } } @@ -96,7 +92,7 @@ class XmlReferenceDumper } if ($prototype instanceof PrototypedArrayNode) { - $prototype->setName($key); + $prototype->setName($key ?? ''); $children = [$key => $prototype]; } elseif ($prototype instanceof ArrayNode) { $children = $prototype->getChildren(); @@ -131,50 +127,52 @@ class XmlReferenceDumper // get attributes and elements foreach ($children as $child) { - if (!$child instanceof ArrayNode) { - // get attributes + if ($child instanceof ArrayNode) { + // get elements + $rootChildren[] = $child; - // metadata - $name = str_replace('_', '-', $child->getName()); - $value = '%%%%not_defined%%%%'; // use a string which isn't used in the normal world + continue; + } - // comments - $comments = []; - if ($info = $child->getInfo()) { - $comments[] = $info; - } + // get attributes - if ($example = $child->getExample()) { - $comments[] = 'Example: '.$example; - } + // metadata + $name = str_replace('_', '-', $child->getName()); + $value = '%%%%not_defined%%%%'; // use a string which isn't used in the normal world - if ($child->isRequired()) { - $comments[] = 'Required'; - } + // comments + $comments = []; + if ($child instanceof BaseNode && $info = $child->getInfo()) { + $comments[] = $info; + } - if ($child->isDeprecated()) { - $comments[] = sprintf('Deprecated (%s)', $child->getDeprecationMessage($child->getName(), $node->getPath())); - } + if ($child instanceof BaseNode && $example = $child->getExample()) { + $comments[] = 'Example: '.$example; + } - if ($child instanceof EnumNode) { - $comments[] = 'One of '.implode('; ', array_map('json_encode', $child->getValues())); - } + if ($child->isRequired()) { + $comments[] = 'Required'; + } - if (\count($comments)) { - $rootAttributeComments[$name] = implode(";\n", $comments); - } + if ($child instanceof BaseNode && $child->isDeprecated()) { + $comments[] = sprintf('Deprecated (%s)', $child->getDeprecationMessage($child->getName(), $node->getPath())); + } - // default values - if ($child->hasDefaultValue()) { - $value = $child->getDefaultValue(); - } + if ($child instanceof EnumNode) { + $comments[] = 'One of '.implode('; ', array_map('json_encode', $child->getValues())); + } - // append attribute - $rootAttributes[$name] = $value; - } else { - // get elements - $rootChildren[] = $child; + if (\count($comments)) { + $rootAttributeComments[$name] = implode(";\n", $comments); + } + + // default values + if ($child->hasDefaultValue()) { + $value = $child->getDefaultValue(); } + + // append attribute + $rootAttributes[$name] = $value; } } @@ -258,11 +256,8 @@ class XmlReferenceDumper /** * Outputs a single config reference line. - * - * @param string $text - * @param int $indent */ - private function writeLine($text, $indent = 0) + private function writeLine(string $text, int $indent = 0) { $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; @@ -274,10 +269,8 @@ class XmlReferenceDumper * Renders the string conversion of the value. * * @param mixed $value - * - * @return string */ - private function writeValue($value) + private function writeValue($value): string { if ('%%%%not_defined%%%%' === $value) { return ''; diff --git a/civicrm/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/civicrm/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php index ba355394602f7f8309c1869107b9e1b657222ca1..c455344d4b5c57e10b21579ff8e0261bc088227e 100644 --- a/civicrm/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php +++ b/civicrm/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php @@ -12,11 +12,13 @@ namespace Symfony\Component\Config\Definition\Dumper; use Symfony\Component\Config\Definition\ArrayNode; +use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\Definition\EnumNode; use Symfony\Component\Config\Definition\NodeInterface; use Symfony\Component\Config\Definition\PrototypedArrayNode; use Symfony\Component\Config\Definition\ScalarNode; +use Symfony\Component\Config\Definition\VariableNode; use Symfony\Component\Yaml\Inline; /** @@ -69,17 +71,16 @@ class YamlReferenceDumper return $ref; } - /** - * @param int $depth - * @param bool $prototypedArray - */ - private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, $depth = 0, $prototypedArray = false) + private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, int $depth = 0, bool $prototypedArray = false) { $comments = []; $default = ''; $defaultArray = null; $children = null; - $example = $node->getExample(); + $example = null; + if ($node instanceof BaseNode) { + $example = $node->getExample(); + } // defaults if ($node instanceof ArrayNode) { @@ -99,6 +100,9 @@ class YamlReferenceDumper } elseif ($node instanceof EnumNode) { $comments[] = 'One of '.implode('; ', array_map('json_encode', $node->getValues())); $default = $node->hasDefaultValue() ? Inline::dump($node->getDefaultValue()) : '~'; + } elseif (VariableNode::class === \get_class($node) && \is_array($example)) { + // If there is an array example, we are sure we dont need to print a default value + $default = ''; } else { $default = '~'; @@ -123,13 +127,13 @@ class YamlReferenceDumper } // deprecated? - if ($node->isDeprecated()) { + if ($node instanceof BaseNode && $node->isDeprecated()) { $comments[] = sprintf('Deprecated (%s)', $node->getDeprecationMessage($node->getName(), $parentNode ? $parentNode->getPath() : $node->getPath())); } // example if ($example && !\is_array($example)) { - $comments[] = 'Example: '.$example; + $comments[] = 'Example: '.Inline::dump($example); } $default = '' != (string) $default ? ' '.$default : ''; @@ -138,7 +142,7 @@ class YamlReferenceDumper $key = $prototypedArray ? '-' : $node->getName().':'; $text = rtrim(sprintf('%-21s%s %s', $key, $default, $comments), ' '); - if ($info = $node->getInfo()) { + if ($node instanceof BaseNode && $info = $node->getInfo()) { $this->writeLine(''); // indenting multi-line info $info = str_replace("\n", sprintf("\n%".($depth * 4).'s# ', ' '), $info); @@ -165,7 +169,7 @@ class YamlReferenceDumper $this->writeLine('# '.$message.':', $depth * 4 + 4); - $this->writeArray($example, $depth + 1); + $this->writeArray(array_map([Inline::class, 'dump'], $example), $depth + 1); } if ($children) { @@ -177,11 +181,8 @@ class YamlReferenceDumper /** * Outputs a single config reference line. - * - * @param string $text - * @param int $indent */ - private function writeLine($text, $indent = 0) + private function writeLine(string $text, int $indent = 0) { $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; @@ -189,7 +190,7 @@ class YamlReferenceDumper $this->reference .= sprintf($format, $text)."\n"; } - private function writeArray(array $array, $depth) + private function writeArray(array $array, int $depth) { $isIndexed = array_values($array) === $array; @@ -212,10 +213,7 @@ class YamlReferenceDumper } } - /** - * @return array - */ - private function getPrototypeChildren(PrototypedArrayNode $node) + private function getPrototypeChildren(PrototypedArrayNode $node): array { $prototype = $node->getPrototype(); $key = $node->getKeyAttribute(); diff --git a/civicrm/vendor/symfony/config/Definition/EnumNode.php b/civicrm/vendor/symfony/config/Definition/EnumNode.php index 15c8db3e66e52c94824410392cbab761684a51ac..822e6b57f16426029234e26923ccbd2c6000237a 100644 --- a/civicrm/vendor/symfony/config/Definition/EnumNode.php +++ b/civicrm/vendor/symfony/config/Definition/EnumNode.php @@ -22,14 +22,14 @@ class EnumNode extends ScalarNode { private $values; - public function __construct($name, NodeInterface $parent = null, array $values = []) + public function __construct(?string $name, NodeInterface $parent = null, array $values = [], string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) { $values = array_unique($values); if (empty($values)) { throw new \InvalidArgumentException('$values must contain at least one element.'); } - parent::__construct($name, $parent); + parent::__construct($name, $parent, $pathSeparator); $this->values = $values; } @@ -38,6 +38,9 @@ class EnumNode extends ScalarNode return $this->values; } + /** + * {@inheritdoc} + */ protected function finalizeValue($value) { $value = parent::finalizeValue($value); @@ -51,4 +54,12 @@ class EnumNode extends ScalarNode return $value; } + + /** + * {@inheritdoc} + */ + protected function allowPlaceholders(): bool + { + return false; + } } diff --git a/civicrm/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php b/civicrm/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php new file mode 100644 index 0000000000000000000000000000000000000000..04406fc90b416c91396e421a4125d217d2eedbc0 --- /dev/null +++ b/civicrm/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Exception; + +/** + * @author Roland Franssen <franssen.roland@gmail.com> + * + * @internal + */ +class TreeWithoutRootNodeException extends \RuntimeException +{ +} diff --git a/civicrm/vendor/symfony/config/Definition/FloatNode.php b/civicrm/vendor/symfony/config/Definition/FloatNode.php index 9eb8789950ecde9d36cab0003714fedd45a6138a..8e229ed4c59dc14db265c6efb6fd747539a29175 100644 --- a/civicrm/vendor/symfony/config/Definition/FloatNode.php +++ b/civicrm/vendor/symfony/config/Definition/FloatNode.php @@ -40,4 +40,12 @@ class FloatNode extends NumericNode throw $ex; } } + + /** + * {@inheritdoc} + */ + protected function getValidPlaceholderTypes(): array + { + return ['float']; + } } diff --git a/civicrm/vendor/symfony/config/Definition/IntegerNode.php b/civicrm/vendor/symfony/config/Definition/IntegerNode.php index 8ec068a84ecf98237f8f006ca311ebfa1b08f267..e8c6a81c303ea313aa20ef60df34b52c4863e62e 100644 --- a/civicrm/vendor/symfony/config/Definition/IntegerNode.php +++ b/civicrm/vendor/symfony/config/Definition/IntegerNode.php @@ -35,4 +35,12 @@ class IntegerNode extends NumericNode throw $ex; } } + + /** + * {@inheritdoc} + */ + protected function getValidPlaceholderTypes(): array + { + return ['int']; + } } diff --git a/civicrm/vendor/symfony/config/Definition/NumericNode.php b/civicrm/vendor/symfony/config/Definition/NumericNode.php index 439935e4559f8c978dedcea4cc3f532adedcb290..50d137c2d71fbfd9be01189459c64931a6015526 100644 --- a/civicrm/vendor/symfony/config/Definition/NumericNode.php +++ b/civicrm/vendor/symfony/config/Definition/NumericNode.php @@ -23,9 +23,13 @@ class NumericNode extends ScalarNode protected $min; protected $max; - public function __construct($name, NodeInterface $parent = null, $min = null, $max = null) + /** + * @param int|float|null $min + * @param int|float|null $max + */ + public function __construct(?string $name, NodeInterface $parent = null, $min = null, $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) { - parent::__construct($name, $parent); + parent::__construct($name, $parent, $pathSeparator); $this->min = $min; $this->max = $max; } diff --git a/civicrm/vendor/symfony/config/Definition/Processor.php b/civicrm/vendor/symfony/config/Definition/Processor.php index 0a935eeb7ff1d1deeb48a95e373ffe2ab84bcc51..e7b364864dad7e2e455fdfe2541166ba1e87d4d5 100644 --- a/civicrm/vendor/symfony/config/Definition/Processor.php +++ b/civicrm/vendor/symfony/config/Definition/Processor.php @@ -15,14 +15,15 @@ namespace Symfony\Component\Config\Definition; * This class is the entry point for config normalization/merging/finalization. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> + * + * @final since version 4.1 */ class Processor { /** * Processes an array of configurations. * - * @param NodeInterface $configTree The node tree describing the configuration - * @param array $configs An array of configuration items to process + * @param array $configs An array of configuration items to process * * @return array The processed configuration */ @@ -40,8 +41,7 @@ class Processor /** * Processes an array of configurations. * - * @param ConfigurationInterface $configuration The configuration class - * @param array $configs An array of configuration items to process + * @param array $configs An array of configuration items to process * * @return array The processed configuration */ @@ -86,10 +86,10 @@ class Processor if (isset($config[$key])) { if (\is_string($config[$key]) || !\is_int(key($config[$key]))) { // only one - return [$config[$key]]; + return [$config[$key]]; } - return $config[$key]; + return $config[$key]; } return []; diff --git a/civicrm/vendor/symfony/config/Definition/PrototypedArrayNode.php b/civicrm/vendor/symfony/config/Definition/PrototypedArrayNode.php index d18a109abc6a40640a9b29ed91bf72caa1e2d682..03822236772f81a377de989a09e2130619c14508 100644 --- a/civicrm/vendor/symfony/config/Definition/PrototypedArrayNode.php +++ b/civicrm/vendor/symfony/config/Definition/PrototypedArrayNode.php @@ -173,14 +173,7 @@ class PrototypedArrayNode extends ArrayNode } /** - * Finalizes the value of this node. - * - * @param mixed $value - * - * @return mixed The finalized value - * - * @throws UnsetKeyException - * @throws InvalidConfigurationException if the node doesn't have enough children + * {@inheritdoc} */ protected function finalizeValue($value) { @@ -208,13 +201,8 @@ class PrototypedArrayNode extends ArrayNode } /** - * Normalizes the value. - * - * @param mixed $value The value to normalize - * - * @return mixed The normalized value + * {@inheritdoc} * - * @throws InvalidConfigurationException * @throws DuplicateKeyException */ protected function normalizeValue($value) @@ -225,11 +213,11 @@ class PrototypedArrayNode extends ArrayNode $value = $this->remapXml($value); - $isAssoc = array_keys($value) !== range(0, \count($value) - 1); + $isList = array_is_list($value); $normalized = []; foreach ($value as $k => $v) { if (null !== $this->keyAttribute && \is_array($v)) { - if (!isset($v[$this->keyAttribute]) && \is_int($k) && !$isAssoc) { + if (!isset($v[$this->keyAttribute]) && \is_int($k) && $isList) { $ex = new InvalidConfigurationException(sprintf('The attribute "%s" must be set for path "%s".', $this->keyAttribute, $this->getPath())); $ex->setPath($this->getPath()); @@ -237,6 +225,10 @@ class PrototypedArrayNode extends ArrayNode } elseif (isset($v[$this->keyAttribute])) { $k = $v[$this->keyAttribute]; + if (\is_float($k)) { + $k = var_export($k, true); + } + // remove the key attribute when required if ($this->removeKeyAttribute) { unset($v[$this->keyAttribute]); @@ -267,7 +259,7 @@ class PrototypedArrayNode extends ArrayNode } $prototype = $this->getPrototypeForChild($k); - if (null !== $this->keyAttribute || $isAssoc) { + if (null !== $this->keyAttribute || !$isList) { $normalized[$k] = $prototype->normalize($v); } else { $normalized[] = $prototype->normalize($v); @@ -278,15 +270,7 @@ class PrototypedArrayNode extends ArrayNode } /** - * Merges values together. - * - * @param mixed $leftSide The left side to merge - * @param mixed $rightSide The right side to merge - * - * @return mixed The merged values - * - * @throws InvalidConfigurationException - * @throws \RuntimeException + * {@inheritdoc} */ protected function mergeValues($leftSide, $rightSide) { @@ -300,9 +284,10 @@ class PrototypedArrayNode extends ArrayNode return $rightSide; } + $isList = array_is_list($rightSide); foreach ($rightSide as $k => $v) { - // prototype, and key is irrelevant, append the element - if (null === $this->keyAttribute) { + // prototype, and key is irrelevant there are no named keys, append the element + if (null === $this->keyAttribute && $isList) { $leftSide[] = $v; continue; } @@ -363,13 +348,11 @@ class PrototypedArrayNode extends ArrayNode * Now, the key becomes 'name001' and the child node becomes 'value001' and * the prototype of child node 'name001' should be a ScalarNode instead of an ArrayNode instance. * - * @param string $key The key of the child node - * * @return mixed The prototype instance */ - private function getPrototypeForChild($key) + private function getPrototypeForChild(string $key) { - $prototype = isset($this->valuePrototypes[$key]) ? $this->valuePrototypes[$key] : $this->prototype; + $prototype = $this->valuePrototypes[$key] ?? $this->prototype; $prototype->setName($key); return $prototype; diff --git a/civicrm/vendor/symfony/config/Definition/ScalarNode.php b/civicrm/vendor/symfony/config/Definition/ScalarNode.php index 53c1ed29c299d4608333b946866199ac402e0eb1..5ad28ec4c53ab9fb60e30ccd9f17d37a6eea5d9c 100644 --- a/civicrm/vendor/symfony/config/Definition/ScalarNode.php +++ b/civicrm/vendor/symfony/config/Definition/ScalarNode.php @@ -48,6 +48,20 @@ class ScalarNode extends VariableNode */ protected function isValueEmpty($value) { + // assume environment variables are never empty (which in practice is likely to be true during runtime) + // not doing so breaks many configs that are valid today + if ($this->isHandlingPlaceholder()) { + return false; + } + return null === $value || '' === $value; } + + /** + * {@inheritdoc} + */ + protected function getValidPlaceholderTypes(): array + { + return ['bool', 'int', 'float', 'string']; + } } diff --git a/civicrm/vendor/symfony/config/Definition/VariableNode.php b/civicrm/vendor/symfony/config/Definition/VariableNode.php index 1a3442d9613db1ca1223c5f659449cb22b608728..5c616f66612b6e8aa9c43dcb5d86fa1e72e5ca77 100644 --- a/civicrm/vendor/symfony/config/Definition/VariableNode.php +++ b/civicrm/vendor/symfony/config/Definition/VariableNode.php @@ -81,6 +81,19 @@ class VariableNode extends BaseNode implements PrototypeNodeInterface */ protected function finalizeValue($value) { + // deny environment variables only when using custom validators + // this avoids ever passing an empty value to final validation closures + if (!$this->allowEmptyValue && $this->isHandlingPlaceholder() && $this->finalValidationClosures) { + @trigger_error(sprintf('Setting path "%s" to an environment variable is deprecated since Symfony 4.3. Remove "cannotBeEmpty()", "validate()" or include a prefix/suffix value instead.', $this->getPath()), \E_USER_DEPRECATED); +// $e = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an environment variable when empty values are not allowed by definition and are validated.', $this->getPath())); +// if ($hint = $this->getInfo()) { +// $e->addHint($hint); +// } +// $e->setPath($this->getPath()); +// +// throw $e; + } + if (!$this->allowEmptyValue && $this->isValueEmpty($value)) { $ex = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an empty value, but got %s.', $this->getPath(), json_encode($value))); if ($hint = $this->getInfo()) { @@ -120,6 +133,8 @@ class VariableNode extends BaseNode implements PrototypeNodeInterface * @param mixed $value * * @return bool + * + * @see finalizeValue() */ protected function isValueEmpty($value) { diff --git a/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php b/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php deleted file mode 100644 index 30df15be8b99146bcb770c74e8c3d0e91927c93b..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/config/DependencyInjection/ConfigCachePass.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\DependencyInjection; - -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use tagged iterator arguments instead.', ConfigCachePass::class), \E_USER_DEPRECATED); - -use Symfony\Component\DependencyInjection\Argument\IteratorArgument; -use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait; -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * Adds services tagged config_cache.resource_checker to the config_cache_factory service, ordering them by priority. - * - * @author Matthias Pigulla <mp@webfactory.de> - * @author Benjamin Klotz <bk@webfactory.de> - * - * @deprecated since version 3.4, to be removed in 4.0. Use tagged iterator arguments instead. - */ -class ConfigCachePass implements CompilerPassInterface -{ - use PriorityTaggedServiceTrait; - - private $factoryServiceId; - private $resourceCheckerTag; - - public function __construct($factoryServiceId = 'config_cache_factory', $resourceCheckerTag = 'config_cache.resource_checker') - { - $this->factoryServiceId = $factoryServiceId; - $this->resourceCheckerTag = $resourceCheckerTag; - } - - public function process(ContainerBuilder $container) - { - $resourceCheckers = $this->findAndSortTaggedServices($this->resourceCheckerTag, $container); - - if (empty($resourceCheckers)) { - return; - } - - $container->getDefinition($this->factoryServiceId)->replaceArgument(0, new IteratorArgument($resourceCheckers)); - } -} diff --git a/civicrm/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/civicrm/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php index 6a3b01cfbe097a49bf2bfc03728440b891794aa0..aa27f9869b7e21d0134c8440c59ca3fdd0f9fd5f 100644 --- a/civicrm/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php +++ b/civicrm/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php @@ -16,9 +16,9 @@ namespace Symfony\Component\Config\Exception; * * @author Fabien Potencier <fabien@symfony.com> */ -class FileLoaderImportCircularReferenceException extends FileLoaderLoadException +class FileLoaderImportCircularReferenceException extends LoaderLoadException { - public function __construct(array $resources, $code = null, $previous = null) + public function __construct(array $resources, ?int $code = 0, \Throwable $previous = null) { $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); diff --git a/civicrm/vendor/symfony/config/Exception/FileLoaderLoadException.php b/civicrm/vendor/symfony/config/Exception/FileLoaderLoadException.php index 82d90eb39b6efe067e0dc760bf3f496a22885007..2c815192dad0efd963b47e9d9db9424215456899 100644 --- a/civicrm/vendor/symfony/config/Exception/FileLoaderLoadException.php +++ b/civicrm/vendor/symfony/config/Exception/FileLoaderLoadException.php @@ -15,24 +15,26 @@ namespace Symfony\Component\Config\Exception; * Exception class for when a resource cannot be loaded or imported. * * @author Ryan Weaver <ryan@thatsquality.com> + * + * @deprecated since Symfony 4.2, use LoaderLoadException instead. */ class FileLoaderLoadException extends \Exception { /** - * @param string $resource The resource that could not be imported - * @param string $sourceResource The original resource importing the new resource - * @param int $code The error code - * @param \Exception $previous A previous exception - * @param string $type The type of resource + * @param string $resource The resource that could not be imported + * @param string|null $sourceResource The original resource importing the new resource + * @param int|null $code The error code + * @param \Throwable|null $previous A previous exception + * @param string|null $type The type of resource */ - public function __construct($resource, $sourceResource = null, $code = null, $previous = null, $type = null) + public function __construct(string $resource, string $sourceResource = null, ?int $code = 0, \Throwable $previous = null, string $type = null) { $message = ''; if ($previous) { // Include the previous exception, to help the user see what might be the underlying cause // Trim the trailing period of the previous message. We only want 1 period remove so no rtrim... - if ('.' === substr($previous->getMessage(), -1)) { + if (str_ends_with($previous->getMessage(), '.')) { $trimmedMessage = substr($previous->getMessage(), 0, -1); $message .= sprintf('%s', $trimmedMessage).' in '; } else { @@ -42,17 +44,17 @@ class FileLoaderLoadException extends \Exception // show tweaked trace to complete the human readable sentence if (null === $sourceResource) { - $message .= sprintf('(which is loaded in resource "%s")', $this->varToString($resource)); + $message .= sprintf('(which is loaded in resource "%s")', $resource); } else { - $message .= sprintf('(which is being imported from "%s")', $this->varToString($sourceResource)); + $message .= sprintf('(which is being imported from "%s")', $sourceResource); } $message .= '.'; // if there's no previous message, present it the default way } elseif (null === $sourceResource) { - $message .= sprintf('Cannot load resource "%s".', $this->varToString($resource)); + $message .= sprintf('Cannot load resource "%s".', $resource); } else { - $message .= sprintf('Cannot import resource "%s" from "%s".', $this->varToString($resource), $this->varToString($sourceResource)); + $message .= sprintf('Cannot import resource "%s" from "%s".', $resource, $sourceResource); } // Is the resource located inside a bundle? diff --git a/civicrm/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php b/civicrm/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php index 648cf0e70769050791b198711eade17f298c343a..3ee4b938f417a3a15126dd16b685142bcc376fd1 100644 --- a/civicrm/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php +++ b/civicrm/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php @@ -20,7 +20,7 @@ class FileLocatorFileNotFoundException extends \InvalidArgumentException { private $paths; - public function __construct($message = '', $code = 0, $previous = null, array $paths = []) + public function __construct(string $message = '', int $code = 0, \Throwable $previous = null, array $paths = []) { parent::__construct($message, $code, $previous); diff --git a/civicrm/vendor/symfony/config/Exception/LoaderLoadException.php b/civicrm/vendor/symfony/config/Exception/LoaderLoadException.php new file mode 100644 index 0000000000000000000000000000000000000000..41a959d38df8fc959299b0d4376cffbdf390fc17 --- /dev/null +++ b/civicrm/vendor/symfony/config/Exception/LoaderLoadException.php @@ -0,0 +1,21 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Exception; + +/** + * Exception class for when a resource cannot be loaded or imported. + * + * @author Ryan Weaver <ryan@thatsquality.com> + */ +class LoaderLoadException extends FileLoaderLoadException +{ +} diff --git a/civicrm/vendor/symfony/config/FileLocator.php b/civicrm/vendor/symfony/config/FileLocator.php index 5f315ba72e0a255320b51b9e6a2cc17e66385d51..685ec5b6991f2a12548e223165a96e0564ee031b 100644 --- a/civicrm/vendor/symfony/config/FileLocator.php +++ b/civicrm/vendor/symfony/config/FileLocator.php @@ -23,7 +23,7 @@ class FileLocator implements FileLocatorInterface protected $paths; /** - * @param string|array $paths A path or an array of paths where to look for resources + * @param string|string[] $paths A path or an array of paths where to look for resources */ public function __construct($paths = []) { @@ -76,12 +76,8 @@ class FileLocator implements FileLocatorInterface /** * Returns whether the file path is an absolute path. - * - * @param string $file A file path - * - * @return bool */ - private function isAbsolutePath($file) + private function isAbsolutePath(string $file): bool { if ('/' === $file[0] || '\\' === $file[0] || (\strlen($file) > 3 && ctype_alpha($file[0]) diff --git a/civicrm/vendor/symfony/config/LICENSE b/civicrm/vendor/symfony/config/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/config/LICENSE +++ b/civicrm/vendor/symfony/config/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/config/Loader/DelegatingLoader.php b/civicrm/vendor/symfony/config/Loader/DelegatingLoader.php index 452e81c58bf01110901f42e0dc20e0b1a57dca4a..fd5c8e957049b159a8306e75bf4f6a104988e3a5 100644 --- a/civicrm/vendor/symfony/config/Loader/DelegatingLoader.php +++ b/civicrm/vendor/symfony/config/Loader/DelegatingLoader.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Config\Loader; -use Symfony\Component\Config\Exception\FileLoaderLoadException; +use Symfony\Component\Config\Exception\LoaderLoadException; /** * DelegatingLoader delegates loading to other loaders using a loader resolver. @@ -34,7 +34,7 @@ class DelegatingLoader extends Loader public function load($resource, $type = null) { if (false === $loader = $this->resolver->resolve($resource, $type)) { - throw new FileLoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader->load($resource, $type); diff --git a/civicrm/vendor/symfony/config/Loader/FileLoader.php b/civicrm/vendor/symfony/config/Loader/FileLoader.php index 2f1d471bddc0e7ba9648576b1d094814a1ae146e..8aef0ffba40ed09be05c4eb81106faa471915b26 100644 --- a/civicrm/vendor/symfony/config/Loader/FileLoader.php +++ b/civicrm/vendor/symfony/config/Loader/FileLoader.php @@ -12,8 +12,8 @@ namespace Symfony\Component\Config\Loader; use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException; -use Symfony\Component\Config\Exception\FileLoaderLoadException; use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException; +use Symfony\Component\Config\Exception\LoaderLoadException; use Symfony\Component\Config\FileLocatorInterface; use Symfony\Component\Config\Resource\FileExistenceResource; use Symfony\Component\Config\Resource\GlobResource; @@ -59,23 +59,37 @@ abstract class FileLoader extends Loader /** * Imports a resource. * - * @param mixed $resource A Resource - * @param string|null $type The resource type or null if unknown - * @param bool $ignoreErrors Whether to ignore import errors or not - * @param string|null $sourceResource The original resource importing the new resource + * @param mixed $resource A Resource + * @param string|null $type The resource type or null if unknown + * @param bool $ignoreErrors Whether to ignore import errors or not + * @param string|null $sourceResource The original resource importing the new resource + * @param string|string[]|null $exclude Glob patterns to exclude from the import * * @return mixed * - * @throws FileLoaderLoadException + * @throws LoaderLoadException * @throws FileLoaderImportCircularReferenceException * @throws FileLocatorFileNotFoundException */ - public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null) + public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null/*, $exclude = null*/) { - if (\is_string($resource) && \strlen($resource) !== $i = strcspn($resource, '*?{[')) { + if (\func_num_args() < 5 && __CLASS__ !== static::class && !str_starts_with(static::class, 'Symfony\Component\\') && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) { + @trigger_error(sprintf('The "%s()" method will have a new "$exclude = null" argument in version 5.0, not defining it is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED); + } + $exclude = \func_num_args() >= 5 ? func_get_arg(4) : null; + + if (\is_string($resource) && \strlen($resource) !== ($i = strcspn($resource, '*?{[')) && !str_contains($resource, "\n")) { + $excluded = []; + foreach ((array) $exclude as $pattern) { + foreach ($this->glob($pattern, true, $_, false, true) as $path => $info) { + // normalize Windows slashes and remove trailing slashes + $excluded[rtrim(str_replace('\\', '/', $path), '/')] = true; + } + } + $ret = []; - $isSubpath = 0 !== $i && false !== strpos(substr($resource, 0, $i), '/'); - foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath) as $path => $info) { + $isSubpath = 0 !== $i && str_contains(substr($resource, 0, $i), '/'); + foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath, false, $excluded) as $path => $info) { if (null !== $res = $this->doImport($path, 'glob' === $type ? null : $type, $ignoreErrors, $sourceResource)) { $ret[] = $res; } @@ -83,7 +97,7 @@ abstract class FileLoader extends Loader } if ($isSubpath) { - return isset($ret[1]) ? $ret : (isset($ret[0]) ? $ret[0] : null); + return isset($ret[1]) ? $ret : ($ret[0] ?? null); } } @@ -93,12 +107,12 @@ abstract class FileLoader extends Loader /** * @internal */ - protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors = false) + protected function glob(string $pattern, bool $recursive, &$resource = null, bool $ignoreErrors = false, bool $forExclusion = false, array $excluded = []) { if (\strlen($pattern) === $i = strcspn($pattern, '*?{[')) { $prefix = $pattern; $pattern = ''; - } elseif (0 === $i || false === strpos(substr($pattern, 0, $i), '/')) { + } elseif (0 === $i || !str_contains(substr($pattern, 0, $i), '/')) { $prefix = '.'; $pattern = '/'.$pattern; } else { @@ -120,14 +134,12 @@ abstract class FileLoader extends Loader return; } - $resource = new GlobResource($prefix, $pattern, $recursive); + $resource = new GlobResource($prefix, $pattern, $recursive, $forExclusion, $excluded); - foreach ($resource as $path => $info) { - yield $path => $info; - } + yield from $resource; } - private function doImport($resource, $type = null, $ignoreErrors = false, $sourceResource = null) + private function doImport($resource, string $type = null, bool $ignoreErrors = false, $sourceResource = null) { try { $loader = $this->resolve($resource, $type); @@ -161,11 +173,11 @@ abstract class FileLoader extends Loader } catch (\Exception $e) { if (!$ignoreErrors) { // prevent embedded imports from nesting multiple exceptions - if ($e instanceof FileLoaderLoadException) { + if ($e instanceof LoaderLoadException) { throw $e; } - throw new FileLoaderLoadException($resource, $sourceResource, null, $e, $type); + throw new LoaderLoadException($resource, $sourceResource, 0, $e, $type); } } diff --git a/civicrm/vendor/symfony/config/Loader/Loader.php b/civicrm/vendor/symfony/config/Loader/Loader.php index d2f2ec90b9b033e93cb5b5a3939b0572b125d1eb..a83088e432da9d313903d163c3595581e7bee4ac 100644 --- a/civicrm/vendor/symfony/config/Loader/Loader.php +++ b/civicrm/vendor/symfony/config/Loader/Loader.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Config\Loader; -use Symfony\Component\Config\Exception\FileLoaderLoadException; +use Symfony\Component\Config\Exception\LoaderLoadException; /** * Loader is the abstract class used by all built-in loaders. @@ -59,7 +59,7 @@ abstract class Loader implements LoaderInterface * * @return $this|LoaderInterface * - * @throws FileLoaderLoadException If no loader is found + * @throws LoaderLoadException If no loader is found */ public function resolve($resource, $type = null) { @@ -70,7 +70,7 @@ abstract class Loader implements LoaderInterface $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type); if (false === $loader) { - throw new FileLoaderLoadException($resource, null, null, null, $type); + throw new LoaderLoadException($resource, null, 0, null, $type); } return $loader; diff --git a/civicrm/vendor/symfony/config/Loader/LoaderInterface.php b/civicrm/vendor/symfony/config/Loader/LoaderInterface.php index dfca9dd27bf0dfe7c0af2edbd3d90d13d1d86167..130296ea0a9b00e535a07889abcd56456e736e74 100644 --- a/civicrm/vendor/symfony/config/Loader/LoaderInterface.php +++ b/civicrm/vendor/symfony/config/Loader/LoaderInterface.php @@ -24,6 +24,8 @@ interface LoaderInterface * @param mixed $resource The resource * @param string|null $type The resource type or null if unknown * + * @return mixed + * * @throws \Exception If something went wrong */ public function load($resource, $type = null); diff --git a/civicrm/vendor/symfony/config/README.md b/civicrm/vendor/symfony/config/README.md index 0bbde55230a21e7225cde197420af171bf8c2547..10c2ddd05831b1213371ef35c3c83621b5ec1979 100644 --- a/civicrm/vendor/symfony/config/README.md +++ b/civicrm/vendor/symfony/config/README.md @@ -1,15 +1,15 @@ Config Component ================ -The Config component provides several classes to help you find, load, combine, -autofill and validate configuration values of any kind, whatever their source -may be (YAML, XML, INI files, or for instance a database). +The Config component helps find, load, combine, autofill and validate +configuration values of any kind, whatever their source may be (YAML, XML, INI +files, or for instance a database). Resources --------- - * [Documentation](https://symfony.com/doc/current/components/config.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/config.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php b/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php index f58d2a6df5f8a7f93e4b3d4b4b3de8fe1b4fe454..f04b767e7f704e294770a84760654d0f2ee7ed36 100644 --- a/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php +++ b/civicrm/vendor/symfony/config/Resource/ClassExistenceResource.php @@ -18,8 +18,10 @@ namespace Symfony\Component\Config\Resource; * The resource must be a fully-qualified class name. * * @author Fabien Potencier <fabien@symfony.com> + * + * @final since Symfony 4.3 */ -class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializable +class ClassExistenceResource implements SelfCheckingResourceInterface { private $resource; private $exists; @@ -32,17 +34,14 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ * @param string $resource The fully-qualified class name * @param bool|null $exists Boolean when the existency check has already been done */ - public function __construct($resource, $exists = null) + public function __construct(string $resource, bool $exists = null) { $this->resource = $resource; if (null !== $exists) { - $this->exists = [(bool) $exists, null]; + $this->exists = [$exists, null]; } } - /** - * {@inheritdoc} - */ public function __toString() { return $this->resource; @@ -112,22 +111,20 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ /** * @internal */ - public function serialize() + public function __sleep(): array { if (null === $this->exists) { $this->isFresh(0); } - return serialize([$this->resource, $this->exists]); + return ['resource', 'exists']; } /** * @internal */ - public function unserialize($serialized) + public function __wakeup() { - list($this->resource, $this->exists) = unserialize($serialized); - if (\is_bool($this->exists)) { $this->exists = [$this->exists, null]; } @@ -219,14 +216,14 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ } $props = [ - 'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null, - 'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null, + 'file' => $callerFrame['file'] ?? null, + 'line' => $callerFrame['line'] ?? null, 'trace' => \array_slice($trace, 1 + $i), ]; foreach ($props as $p => $v) { if (null !== $v) { - $r = new \ReflectionProperty('Exception', $p); + $r = new \ReflectionProperty(\Exception::class, $p); $r->setAccessible(true); $r->setValue($e, $v); } diff --git a/civicrm/vendor/symfony/config/Resource/ComposerResource.php b/civicrm/vendor/symfony/config/Resource/ComposerResource.php index 9fb304bea8f0602c8742811d4d15b59923e274b0..aee6f02b20979055d15f4ffeb0ce65bee0a9d8f0 100644 --- a/civicrm/vendor/symfony/config/Resource/ComposerResource.php +++ b/civicrm/vendor/symfony/config/Resource/ComposerResource.php @@ -15,8 +15,10 @@ namespace Symfony\Component\Config\Resource; * ComposerResource tracks the PHP version and Composer dependencies. * * @author Nicolas Grekas <p@tchwork.com> + * + * @final since Symfony 4.3 */ -class ComposerResource implements SelfCheckingResourceInterface, \Serializable +class ComposerResource implements SelfCheckingResourceInterface { private $vendors; @@ -33,9 +35,6 @@ class ComposerResource implements SelfCheckingResourceInterface, \Serializable return array_keys($this->vendors); } - /** - * {@inheritdoc} - */ public function __toString() { return __CLASS__; @@ -51,30 +50,14 @@ class ComposerResource implements SelfCheckingResourceInterface, \Serializable return array_values(self::$runtimeVendors) === array_values($this->vendors); } - /** - * @internal - */ - public function serialize() - { - return serialize($this->vendors); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - $this->vendors = unserialize($serialized); - } - private static function refresh() { self::$runtimeVendors = []; foreach (get_declared_classes() as $class) { - if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) { + if ('C' === $class[0] && str_starts_with($class, 'ComposerAutoloaderInit')) { $r = new \ReflectionClass($class); - $v = \dirname(\dirname($r->getFileName())); + $v = \dirname($r->getFileName(), 2); if (file_exists($v.'/composer/installed.json')) { self::$runtimeVendors[$v] = @filemtime($v.'/composer/installed.json'); } diff --git a/civicrm/vendor/symfony/config/Resource/DirectoryResource.php b/civicrm/vendor/symfony/config/Resource/DirectoryResource.php index e79b19ec2d7a0fa65c8a8e293988612e07cdaa01..a29bd5ee981391e0b1154d2026405a696bdaf1ce 100644 --- a/civicrm/vendor/symfony/config/Resource/DirectoryResource.php +++ b/civicrm/vendor/symfony/config/Resource/DirectoryResource.php @@ -15,8 +15,10 @@ namespace Symfony\Component\Config\Resource; * DirectoryResource represents a resources stored in a subdirectory tree. * * @author Fabien Potencier <fabien@symfony.com> + * + * @final since Symfony 4.3 */ -class DirectoryResource implements SelfCheckingResourceInterface, \Serializable +class DirectoryResource implements SelfCheckingResourceInterface { private $resource; private $pattern; @@ -27,7 +29,7 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable * * @throws \InvalidArgumentException */ - public function __construct($resource, $pattern = null) + public function __construct(string $resource, string $pattern = null) { $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false); $this->pattern = $pattern; @@ -37,9 +39,6 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable } } - /** - * {@inheritdoc} - */ public function __toString() { return md5(serialize([$this->resource, $this->pattern])); @@ -84,7 +83,7 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable // always monitor directories for changes, except the .. entries // (otherwise deleted files wouldn't get detected) - if ($file->isDir() && '/..' === substr($file, -3)) { + if ($file->isDir() && str_ends_with($file, '/..')) { continue; } @@ -103,20 +102,4 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable return true; } - - /** - * @internal - */ - public function serialize() - { - return serialize([$this->resource, $this->pattern]); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - list($this->resource, $this->pattern) = unserialize($serialized); - } } diff --git a/civicrm/vendor/symfony/config/Resource/FileExistenceResource.php b/civicrm/vendor/symfony/config/Resource/FileExistenceResource.php index 34047651b7022324cc3973375420eb8d867194d8..760c061bf49da019e9901ba4a06ad5e6865aea40 100644 --- a/civicrm/vendor/symfony/config/Resource/FileExistenceResource.php +++ b/civicrm/vendor/symfony/config/Resource/FileExistenceResource.php @@ -18,8 +18,10 @@ namespace Symfony\Component\Config\Resource; * The resource can be a file or a directory. * * @author Charles-Henri Bruyand <charleshenri.bruyand@gmail.com> + * + * @final since Symfony 4.3 */ -class FileExistenceResource implements SelfCheckingResourceInterface, \Serializable +class FileExistenceResource implements SelfCheckingResourceInterface { private $resource; @@ -28,15 +30,12 @@ class FileExistenceResource implements SelfCheckingResourceInterface, \Serializa /** * @param string $resource The file path to the resource */ - public function __construct($resource) + public function __construct(string $resource) { - $this->resource = (string) $resource; + $this->resource = $resource; $this->exists = file_exists($resource); } - /** - * {@inheritdoc} - */ public function __toString() { return $this->resource; @@ -57,20 +56,4 @@ class FileExistenceResource implements SelfCheckingResourceInterface, \Serializa { return file_exists($this->resource) === $this->exists; } - - /** - * @internal - */ - public function serialize() - { - return serialize([$this->resource, $this->exists]); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - list($this->resource, $this->exists) = unserialize($serialized); - } } diff --git a/civicrm/vendor/symfony/config/Resource/FileResource.php b/civicrm/vendor/symfony/config/Resource/FileResource.php index bee062377b6b26f8444820f941578bd80f747574..96d7d97317eb9868a98f465dea3cc3c3140d2405 100644 --- a/civicrm/vendor/symfony/config/Resource/FileResource.php +++ b/civicrm/vendor/symfony/config/Resource/FileResource.php @@ -17,8 +17,10 @@ namespace Symfony\Component\Config\Resource; * The resource can be a file or a directory. * * @author Fabien Potencier <fabien@symfony.com> + * + * @final since Symfony 4.3 */ -class FileResource implements SelfCheckingResourceInterface, \Serializable +class FileResource implements SelfCheckingResourceInterface { /** * @var string|false @@ -30,7 +32,7 @@ class FileResource implements SelfCheckingResourceInterface, \Serializable * * @throws \InvalidArgumentException */ - public function __construct($resource) + public function __construct(string $resource) { $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false); @@ -39,9 +41,6 @@ class FileResource implements SelfCheckingResourceInterface, \Serializable } } - /** - * {@inheritdoc} - */ public function __toString() { return $this->resource; @@ -62,20 +61,4 @@ class FileResource implements SelfCheckingResourceInterface, \Serializable { return false !== ($filemtime = @filemtime($this->resource)) && $filemtime <= $timestamp; } - - /** - * @internal - */ - public function serialize() - { - return serialize($this->resource); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - $this->resource = unserialize($serialized); - } } diff --git a/civicrm/vendor/symfony/config/Resource/GlobResource.php b/civicrm/vendor/symfony/config/Resource/GlobResource.php index 1aa3bcf693e229234d24b9e894538f4848ec0666..57e528462cc90757c68cfe8dec0b1684ac50d103 100644 --- a/civicrm/vendor/symfony/config/Resource/GlobResource.php +++ b/civicrm/vendor/symfony/config/Resource/GlobResource.php @@ -20,13 +20,18 @@ use Symfony\Component\Finder\Glob; * Only existence/removal is tracked (not mtimes.) * * @author Nicolas Grekas <p@tchwork.com> + * + * @final since Symfony 4.3 */ -class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, \Serializable +class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface { private $prefix; private $pattern; private $recursive; private $hash; + private $forExclusion; + private $excludedPrefixes; + private $globBrace; /** * @param string $prefix A directory prefix @@ -35,11 +40,15 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, * * @throws \InvalidArgumentException */ - public function __construct($prefix, $pattern, $recursive) + public function __construct(string $prefix, string $pattern, bool $recursive, bool $forExclusion = false, array $excludedPrefixes = []) { + ksort($excludedPrefixes); $this->prefix = realpath($prefix) ?: (file_exists($prefix) ? $prefix : false); $this->pattern = $pattern; $this->recursive = $recursive; + $this->forExclusion = $forExclusion; + $this->excludedPrefixes = $excludedPrefixes; + $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0; if (false === $this->prefix) { throw new \InvalidArgumentException(sprintf('The path "%s" does not exist.', $prefix)); @@ -51,12 +60,9 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, return $this->prefix; } - /** - * {@inheritdoc} - */ public function __toString() { - return 'glob.'.$this->prefix.$this->pattern.(int) $this->recursive; + return 'glob.'.$this->prefix.(int) $this->recursive.$this->pattern.(int) $this->forExclusion.implode("\0", $this->excludedPrefixes); } /** @@ -76,52 +82,88 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, /** * @internal */ - public function serialize() + public function __sleep(): array { if (null === $this->hash) { $this->hash = $this->computeHash(); } - return serialize([$this->prefix, $this->pattern, $this->recursive, $this->hash]); + return ['prefix', 'pattern', 'recursive', 'hash', 'forExclusion', 'excludedPrefixes']; } /** * @internal */ - public function unserialize($serialized) + public function __wakeup(): void { - list($this->prefix, $this->pattern, $this->recursive, $this->hash) = unserialize($serialized); + $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0; } + /** + * @return \Traversable + */ + #[\ReturnTypeWillChange] public function getIterator() { if (!file_exists($this->prefix) || (!$this->recursive && '' === $this->pattern)) { return; } + $prefix = str_replace('\\', '/', $this->prefix); + $paths = null; + + if ('' === $this->pattern && is_file($prefix)) { + $paths = [$this->prefix]; + } elseif (!str_starts_with($this->prefix, 'phar://') && !str_contains($this->pattern, '/**/')) { + if ($this->globBrace || !str_contains($this->pattern, '{')) { + $paths = glob($this->prefix.$this->pattern, \GLOB_NOSORT | $this->globBrace); + } elseif (!str_contains($this->pattern, '\\') || !preg_match('/\\\\[,{}]/', $this->pattern)) { + foreach ($this->expandGlob($this->pattern) as $p) { + $paths[] = glob($this->prefix.$p, \GLOB_NOSORT); + } + $paths = array_merge(...$paths); + } + } - if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/') && (\defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) { - $paths = glob($this->prefix.$this->pattern, \GLOB_NOSORT | (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0)); - sort($paths); + if (null !== $paths) { + natsort($paths); foreach ($paths as $path) { - if ($this->recursive && is_dir($path)) { - $files = iterator_to_array(new \RecursiveIteratorIterator( - new \RecursiveCallbackFilterIterator( - new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), - function (\SplFileInfo $file) { return '.' !== $file->getBasename()[0]; } - ), - \RecursiveIteratorIterator::LEAVES_ONLY - )); - uasort($files, function (\SplFileInfo $a, \SplFileInfo $b) { - return (string) $a > (string) $b ? 1 : -1; - }); - - foreach ($files as $path => $info) { - if ($info->isFile()) { - yield $path => $info; + if ($this->excludedPrefixes) { + $normalizedPath = str_replace('\\', '/', $path); + do { + if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) { + continue 2; } - } - } elseif (is_file($path)) { + } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath)); + } + + if (is_file($path)) { + yield $path => new \SplFileInfo($path); + } + if (!is_dir($path)) { + continue; + } + if ($this->forExclusion) { yield $path => new \SplFileInfo($path); + continue; + } + if (!$this->recursive || isset($this->excludedPrefixes[str_replace('\\', '/', $path)])) { + continue; + } + $files = iterator_to_array(new \RecursiveIteratorIterator( + new \RecursiveCallbackFilterIterator( + new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + function (\SplFileInfo $file, $path) { + return !isset($this->excludedPrefixes[str_replace('\\', '/', $path)]) && '.' !== $file->getBasename()[0]; + } + ), + \RecursiveIteratorIterator::LEAVES_ONLY + )); + uksort($files, 'strnatcmp'); + + foreach ($files as $path => $info) { + if ($info->isFile()) { + yield $path => $info; + } } } @@ -132,21 +174,38 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, throw new \LogicException(sprintf('Extended glob pattern "%s" cannot be used as the Finder component is not installed.', $this->pattern)); } + if (is_file($prefix = $this->prefix)) { + $prefix = \dirname($prefix); + $pattern = basename($prefix).$this->pattern; + } else { + $pattern = $this->pattern; + } + $finder = new Finder(); - $regex = Glob::toRegex($this->pattern); + $regex = Glob::toRegex($pattern); if ($this->recursive) { $regex = substr_replace($regex, '(/|$)', -2, 1); } - $prefixLen = \strlen($this->prefix); - foreach ($finder->followLinks()->sortByName()->in($this->prefix) as $path => $info) { - if (preg_match($regex, substr('\\' === \DIRECTORY_SEPARATOR ? str_replace('\\', '/', $path) : $path, $prefixLen)) && $info->isFile()) { - yield $path => $info; + $prefixLen = \strlen($prefix); + foreach ($finder->followLinks()->sortByName()->in($prefix) as $path => $info) { + $normalizedPath = str_replace('\\', '/', $path); + if (!preg_match($regex, substr($normalizedPath, $prefixLen)) || !$info->isFile()) { + continue; } + if ($this->excludedPrefixes) { + do { + if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) { + continue 2; + } + } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath)); + } + + yield $path => $info; } } - private function computeHash() + private function computeHash(): string { $hash = hash_init('md5'); @@ -156,4 +215,34 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, return hash_final($hash); } + + private function expandGlob(string $pattern): array + { + $segments = preg_split('/\{([^{}]*+)\}/', $pattern, -1, \PREG_SPLIT_DELIM_CAPTURE); + $paths = [$segments[0]]; + $patterns = []; + + for ($i = 1; $i < \count($segments); $i += 2) { + $patterns = []; + + foreach (explode(',', $segments[$i]) as $s) { + foreach ($paths as $p) { + $patterns[] = $p.$s.$segments[1 + $i]; + } + } + + $paths = $patterns; + } + + $j = 0; + foreach ($patterns as $i => $p) { + if (str_contains($p, '{')) { + $p = $this->expandGlob($p); + array_splice($paths, $i + $j, 1, $p); + $j += \count($p) - 1; + } + } + + return $paths; + } } diff --git a/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php b/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php index 79b21fbf4c218026c179400a48a4318042b41277..f966178955bd1845bee3ebf27f820718f01ce296 100644 --- a/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php +++ b/civicrm/vendor/symfony/config/Resource/ReflectionClassResource.php @@ -11,13 +11,17 @@ namespace Symfony\Component\Config\Resource; -use Symfony\Component\DependencyInjection\ServiceSubscriberInterface; +use Symfony\Component\DependencyInjection\ServiceSubscriberInterface as LegacyServiceSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Messenger\Handler\MessageSubscriberInterface; +use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * @author Nicolas Grekas <p@tchwork.com> + * + * @final since Symfony 4.3 */ -class ReflectionClassResource implements SelfCheckingResourceInterface, \Serializable +class ReflectionClassResource implements SelfCheckingResourceInterface { private $files = []; private $className; @@ -25,7 +29,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali private $excludedVendors = []; private $hash; - public function __construct(\ReflectionClass $classReflector, $excludedVendors = []) + public function __construct(\ReflectionClass $classReflector, array $excludedVendors = []) { $this->className = $classReflector->name; $this->classReflector = $classReflector; @@ -60,22 +64,14 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali /** * @internal */ - public function serialize() + public function __sleep(): array { if (null === $this->hash) { $this->hash = $this->computeHash(); $this->loadFiles($this->classReflector); } - return serialize([$this->files, $this->className, $this->hash]); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - list($this->files, $this->className, $this->hash) = unserialize($serialized); + return ['files', 'className', 'hash']; } private function loadFiles(\ReflectionClass $class) @@ -87,7 +83,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali $file = $class->getFileName(); if (false !== $file && file_exists($file)) { foreach ($this->excludedVendors as $vendor) { - if (0 === strpos($file, $vendor) && false !== strpbrk(substr($file, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { + if (str_starts_with($file, $vendor) && false !== strpbrk(substr($file, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { $file = false; break; } @@ -102,7 +98,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali } while ($class = $class->getParentClass()); } - private function computeHash() + private function computeHash(): string { if (null === $this->classReflector) { try { @@ -121,8 +117,17 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali return hash_final($hash); } - private function generateSignature(\ReflectionClass $class) + private function generateSignature(\ReflectionClass $class): iterable { + if (\PHP_VERSION_ID >= 80000) { + $attributes = []; + foreach ($class->getAttributes() as $a) { + $attributes[] = [$a->getName(), \PHP_VERSION_ID >= 80100 ? (string) $a : $a->getArguments()]; + } + yield print_r($attributes, true); + $attributes = []; + } + yield $class->getDocComment(); yield (int) $class->isFinal(); yield (int) $class->isAbstract(); @@ -139,6 +144,14 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali $defaults = $class->getDefaultProperties(); foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED) as $p) { + if (\PHP_VERSION_ID >= 80000) { + foreach ($p->getAttributes() as $a) { + $attributes[] = [$a->getName(), \PHP_VERSION_ID >= 80100 ? (string) $a : $a->getArguments()]; + } + yield print_r($attributes, true); + $attributes = []; + } + yield $p->getDocComment(); yield $p->isDefault() ? '<default>' : ''; yield $p->isPublic() ? 'public' : 'protected'; @@ -148,67 +161,84 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali } } - if (\defined('HHVM_VERSION')) { - foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) { - // workaround HHVM bug with variadics, see https://github.com/facebook/hhvm/issues/5762 - yield preg_replace('/^ @@.*/m', '', new ReflectionMethodHhvmWrapper($m->class, $m->name)); + $defined = \Closure::bind(static function ($c) { return \defined($c); }, null, $class->name); + + foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) { + if (\PHP_VERSION_ID >= 80000) { + foreach ($m->getAttributes() as $a) { + $attributes[] = [$a->getName(), \PHP_VERSION_ID >= 80100 ? (string) $a : $a->getArguments()]; + } + yield print_r($attributes, true); + $attributes = []; } - } else { - foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) { - $defaults = []; - $parametersWithUndefinedConstants = []; - foreach ($m->getParameters() as $p) { - if (!$p->isDefaultValueAvailable()) { - $defaults[$p->name] = null; - continue; + $defaults = []; + $parametersWithUndefinedConstants = []; + foreach ($m->getParameters() as $p) { + if (\PHP_VERSION_ID >= 80000) { + foreach ($p->getAttributes() as $a) { + $attributes[] = [$a->getName(), \PHP_VERSION_ID >= 80100 ? (string) $a : $a->getArguments()]; } + yield print_r($attributes, true); + $attributes = []; + } - if (!$p->isDefaultValueConstant() || \defined($p->getDefaultValueConstantName())) { - $defaults[$p->name] = $p->getDefaultValue(); + if (!$p->isDefaultValueAvailable()) { + $defaults[$p->name] = null; - continue; - } + continue; + } + + if (\PHP_VERSION_ID >= 80100) { + $defaults[$p->name] = (string) $p; - $defaults[$p->name] = $p->getDefaultValueConstantName(); - $parametersWithUndefinedConstants[$p->name] = true; + continue; } - if (!$parametersWithUndefinedConstants) { - yield preg_replace('/^ @@.*/m', '', $m); - } else { - $t = \PHP_VERSION_ID >= 70000 ? $m->getReturnType() : ''; - $stack = [ - $m->getDocComment(), - $m->getName(), - $m->isAbstract(), - $m->isFinal(), - $m->isStatic(), - $m->isPublic(), - $m->isPrivate(), - $m->isProtected(), - $m->returnsReference(), - $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t, - ]; - - foreach ($m->getParameters() as $p) { - if (!isset($parametersWithUndefinedConstants[$p->name])) { - $stack[] = (string) $p; - } else { - $t = \PHP_VERSION_ID >= 70000 ? $p->getType() : ''; - $stack[] = $p->isOptional(); - $stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t; - $stack[] = $p->isPassedByReference(); - $stack[] = \PHP_VERSION_ID >= 50600 ? $p->isVariadic() : ''; - $stack[] = $p->getName(); - } - } + if (!$p->isDefaultValueConstant() || $defined($p->getDefaultValueConstantName())) { + $defaults[$p->name] = $p->getDefaultValue(); + + continue; + } - yield implode(',', $stack); + $defaults[$p->name] = $p->getDefaultValueConstantName(); + $parametersWithUndefinedConstants[$p->name] = true; + } + + if (!$parametersWithUndefinedConstants) { + yield preg_replace('/^ @@.*/m', '', $m); + } else { + $t = $m->getReturnType(); + $stack = [ + $m->getDocComment(), + $m->getName(), + $m->isAbstract(), + $m->isFinal(), + $m->isStatic(), + $m->isPublic(), + $m->isPrivate(), + $m->isProtected(), + $m->returnsReference(), + $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t, + ]; + + foreach ($m->getParameters() as $p) { + if (!isset($parametersWithUndefinedConstants[$p->name])) { + $stack[] = (string) $p; + } else { + $t = $p->getType(); + $stack[] = $p->isOptional(); + $stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t; + $stack[] = $p->isPassedByReference(); + $stack[] = $p->isVariadic(); + $stack[] = $p->getName(); + } } - yield print_r($defaults, true); + yield implode(',', $stack); } + + yield print_r($defaults, true); } if ($class->isAbstract() || $class->isInterface() || $class->isTrait()) { @@ -217,40 +247,22 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali if (interface_exists(EventSubscriberInterface::class, false) && $class->isSubclassOf(EventSubscriberInterface::class)) { yield EventSubscriberInterface::class; - yield print_r(\call_user_func([$class->name, 'getSubscribedEvents']), true); + yield print_r($class->name::getSubscribedEvents(), true); } - if (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) { - yield ServiceSubscriberInterface::class; - yield print_r(\call_user_func([$class->name, 'getSubscribedServices']), true); + if (interface_exists(MessageSubscriberInterface::class, false) && $class->isSubclassOf(MessageSubscriberInterface::class)) { + yield MessageSubscriberInterface::class; + foreach ($class->name::getHandledMessages() as $key => $value) { + yield $key.print_r($value, true); + } } - } -} - -/** - * @internal - */ -class ReflectionMethodHhvmWrapper extends \ReflectionMethod -{ - public function getParameters() - { - $params = []; - foreach (parent::getParameters() as $i => $p) { - $params[] = new ReflectionParameterHhvmWrapper([$this->class, $this->name], $i); + if (interface_exists(LegacyServiceSubscriberInterface::class, false) && $class->isSubclassOf(LegacyServiceSubscriberInterface::class)) { + yield LegacyServiceSubscriberInterface::class; + yield print_r([$class->name, 'getSubscribedServices'](), true); + } elseif (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) { + yield ServiceSubscriberInterface::class; + yield print_r($class->name::getSubscribedServices(), true); } - - return $params; - } -} - -/** - * @internal - */ -class ReflectionParameterHhvmWrapper extends \ReflectionParameter -{ - public function getDefaultValue() - { - return [$this->isVariadic(), $this->isDefaultValueAvailable() ? parent::getDefaultValue() : null]; } } diff --git a/civicrm/vendor/symfony/config/Resource/ResourceInterface.php b/civicrm/vendor/symfony/config/Resource/ResourceInterface.php index d98fd427a25eb64e12805fa9d51ea9c9e535c2c2..9a0cd9a47fe72506d8a40d59a251ec9eb97dece9 100644 --- a/civicrm/vendor/symfony/config/Resource/ResourceInterface.php +++ b/civicrm/vendor/symfony/config/Resource/ResourceInterface.php @@ -26,8 +26,6 @@ interface ResourceInterface * to be identical for different ResourceInterface instances referring to the same * resource; and it should be unlikely to collide with that of other, unrelated * resource instances. - * - * @return string A string representation unique to the underlying Resource */ public function __toString(); } diff --git a/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php b/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php index 0538f3f4427242607e9c15aee9ce7bfe2b0c2024..d41b3c43c743e1661a0457c9a6582e75f065b364 100644 --- a/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php +++ b/civicrm/vendor/symfony/config/ResourceCheckerConfigCache.php @@ -37,7 +37,7 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface * @param string $file The absolute cache path * @param iterable|ResourceCheckerInterface[] $resourceCheckers The ResourceCheckers to use for the freshness check */ - public function __construct($file, $resourceCheckers = []) + public function __construct(string $file, iterable $resourceCheckers = []) { $this->file = $file; $this->resourceCheckers = $resourceCheckers; @@ -144,21 +144,18 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface /** * Gets the meta file path. - * - * @return string The meta file path */ - private function getMetaFile() + private function getMetaFile(): string { return $this->file.'.meta'; } - private function safelyUnserialize($file) + private function safelyUnserialize(string $file) { - $e = null; $meta = false; $content = file_get_contents($file); $signalingException = new \UnexpectedValueException(); - $prevUnserializeHandler = ini_set('unserialize_callback_func', ''); + $prevUnserializeHandler = ini_set('unserialize_callback_func', self::class.'::handleUnserializeCallback'); $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$prevErrorHandler, $signalingException) { if (__FILE__ === $file) { throw $signalingException; @@ -169,15 +166,23 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface try { $meta = unserialize($content); - } catch (\Error $e) { - } catch (\Exception $e) { - } - restore_error_handler(); - ini_set('unserialize_callback_func', $prevUnserializeHandler); - if (null !== $e && $e !== $signalingException) { - throw $e; + } catch (\Throwable $e) { + if ($e !== $signalingException) { + throw $e; + } + } finally { + restore_error_handler(); + ini_set('unserialize_callback_func', $prevUnserializeHandler); } return $meta; } + + /** + * @internal + */ + public static function handleUnserializeCallback($class) + { + trigger_error('Class not found: '.$class); + } } diff --git a/civicrm/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php b/civicrm/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php index c00fa7db1b037c81dcbea16836d63792bb8d98a7..0338635ff5a628abddff310ae9d6c420d93707d8 100644 --- a/civicrm/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php +++ b/civicrm/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php @@ -24,7 +24,7 @@ class ResourceCheckerConfigCacheFactory implements ConfigCacheFactoryInterface /** * @param iterable|ResourceCheckerInterface[] $resourceCheckers */ - public function __construct($resourceCheckers = []) + public function __construct(iterable $resourceCheckers = []) { $this->resourceCheckers = $resourceCheckers; } @@ -40,7 +40,7 @@ class ResourceCheckerConfigCacheFactory implements ConfigCacheFactoryInterface $cache = new ResourceCheckerConfigCache($file, $this->resourceCheckers); if (!$cache->isFresh()) { - \call_user_func($callback, $cache); + $callback($cache); } return $cache; diff --git a/civicrm/vendor/symfony/config/ResourceCheckerInterface.php b/civicrm/vendor/symfony/config/ResourceCheckerInterface.php index 612d77786446a492c417c5700868a900b49762b5..ac0d402495e7f72cfcd3dd02639b4cb5f451fc62 100644 --- a/civicrm/vendor/symfony/config/ResourceCheckerInterface.php +++ b/civicrm/vendor/symfony/config/ResourceCheckerInterface.php @@ -30,8 +30,6 @@ interface ResourceCheckerInterface * Queries the ResourceChecker whether it can validate a given * resource or not. * - * @param ResourceInterface $metadata The resource to be checked for freshness - * * @return bool True if the ResourceChecker can handle this resource type, false if not */ public function supports(ResourceInterface $metadata); @@ -39,8 +37,7 @@ interface ResourceCheckerInterface /** * Validates the resource. * - * @param ResourceInterface $resource The resource to be validated - * @param int $timestamp The timestamp at which the cache associated with this resource was created + * @param int $timestamp The timestamp at which the cache associated with this resource was created * * @return bool True if the resource has not changed since the given timestamp, false otherwise */ diff --git a/civicrm/vendor/symfony/config/Util/Exception/InvalidXmlException.php b/civicrm/vendor/symfony/config/Util/Exception/InvalidXmlException.php index a335bbd2eed7c2afcc3f85e75f35eb46c43392cb..155571cecb969d5c4e1e817e441dd627a7960a6e 100644 --- a/civicrm/vendor/symfony/config/Util/Exception/InvalidXmlException.php +++ b/civicrm/vendor/symfony/config/Util/Exception/InvalidXmlException.php @@ -1,4 +1,5 @@ <?php + /* * This file is part of the Symfony package. * diff --git a/civicrm/vendor/symfony/config/Util/XmlUtils.php b/civicrm/vendor/symfony/config/Util/XmlUtils.php index d833c428efe18fa32fe9166bfc50437a6cbbe304..e0324149440714ba75e5cda8a062b022ccc1258e 100644 --- a/civicrm/vendor/symfony/config/Util/XmlUtils.php +++ b/civicrm/vendor/symfony/config/Util/XmlUtils.php @@ -47,7 +47,7 @@ class XmlUtils public static function parse($content, $schemaOrCallable = null) { if (!\extension_loaded('dom')) { - throw new \RuntimeException('Extension DOM is required.'); + throw new \LogicException('Extension DOM is required.'); } $internalErrors = libxml_use_internal_errors(true); @@ -86,7 +86,7 @@ class XmlUtils $e = null; if (\is_callable($schemaOrCallable)) { try { - $valid = \call_user_func($schemaOrCallable, $dom, $internalErrors); + $valid = $schemaOrCallable($dom, $internalErrors); } catch (\Exception $e) { $valid = false; } @@ -236,15 +236,11 @@ class XmlUtils case 'null' === $lowercaseValue: return null; case ctype_digit($value): - $raw = $value; - $cast = (int) $value; - - return '0' == $value[0] ? octdec($value) : (((string) $raw === (string) $cast) ? $cast : $raw); case isset($value[1]) && '-' === $value[0] && ctype_digit(substr($value, 1)): $raw = $value; $cast = (int) $value; - return '0' == $value[1] ? octdec($value) : (((string) $raw === (string) $cast) ? $cast : $raw); + return self::isOctal($value) ? \intval($value, 8) : (($raw === (string) $cast) ? $cast : $raw); case 'true' === $lowercaseValue: return true; case 'false' === $lowercaseValue: @@ -281,4 +277,13 @@ class XmlUtils return $errors; } + + private static function isOctal(string $str): bool + { + if ('-' === $str[0]) { + $str = substr($str, 1); + } + + return $str === '0'.decoct(\intval($str, 8)); + } } diff --git a/civicrm/vendor/symfony/config/composer.json b/civicrm/vendor/symfony/config/composer.json index 5088bdd832a846ec54d9bed621376a9173b5e243..90c3f6bdf3f3259c37e280221e0dd269012a79c2 100644 --- a/civicrm/vendor/symfony/config/composer.json +++ b/civicrm/vendor/symfony/config/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/config", "type": "library", - "description": "Symfony Config Component", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,19 +16,21 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "require-dev": { - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0" + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "conflict": { - "symfony/finder": "<3.3", - "symfony/dependency-injection": "<3.3" + "symfony/finder": "<3.4" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" diff --git a/civicrm/vendor/symfony/config/phpunit.xml.dist b/civicrm/vendor/symfony/config/phpunit.xml.dist deleted file mode 100644 index 1cfdb3cdc67271a994db715a7c459921596af5da..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/config/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony Config Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Resources</directory> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/dependency-injection/Alias.php b/civicrm/vendor/symfony/dependency-injection/Alias.php index de14c5ea9512bcafe5bf3b49c934aa584a830d08..248eeefa06865c999c5c80a3024b89de6466906c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Alias.php +++ b/civicrm/vendor/symfony/dependency-injection/Alias.php @@ -11,21 +11,24 @@ namespace Symfony\Component\DependencyInjection; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; + class Alias { + private const DEFAULT_DEPRECATION_TEMPLATE = 'The "%alias_id%" service alias is deprecated. You should stop using it, as it will be removed in the future.'; + private $id; private $public; private $private; + private $deprecated; + private $deprecationTemplate; - /** - * @param string $id Alias identifier - * @param bool $public If this alias is public - */ - public function __construct($id, $public = true) + public function __construct(string $id, bool $public = true) { - $this->id = (string) $id; + $this->id = $id; $this->public = $public; $this->private = 2 > \func_num_args(); + $this->deprecated = false; } /** @@ -82,6 +85,46 @@ class Alias return $this->private; } + /** + * Whether this alias is deprecated, that means it should not be referenced + * anymore. + * + * @param bool $status Whether this alias is deprecated, defaults to true + * @param string $template Optional template message to use if the alias is deprecated + * + * @return $this + * + * @throws InvalidArgumentException when the message template is invalid + */ + public function setDeprecated($status = true, $template = null) + { + if (null !== $template) { + if (preg_match('#[\r\n]|\*/#', $template)) { + throw new InvalidArgumentException('Invalid characters found in deprecation template.'); + } + + if (!str_contains($template, '%alias_id%')) { + throw new InvalidArgumentException('The deprecation template must contain the "%alias_id%" placeholder.'); + } + + $this->deprecationTemplate = $template; + } + + $this->deprecated = (bool) $status; + + return $this; + } + + public function isDeprecated(): bool + { + return $this->deprecated; + } + + public function getDeprecationMessage(string $id): string + { + return str_replace('%alias_id%', $id, $this->deprecationTemplate ?: self::DEFAULT_DEPRECATION_TEMPLATE); + } + /** * Returns the Id of this alias. * diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/BoundArgument.php b/civicrm/vendor/symfony/dependency-injection/Argument/BoundArgument.php index a20698440c3cfb4ae6abd2561395e56daf065cdc..c2afe2cfa29200f319f3db9b23db96150aeb9bb3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Argument/BoundArgument.php +++ b/civicrm/vendor/symfony/dependency-injection/Argument/BoundArgument.php @@ -16,24 +16,36 @@ namespace Symfony\Component\DependencyInjection\Argument; */ final class BoundArgument implements ArgumentInterface { + public const SERVICE_BINDING = 0; + public const DEFAULTS_BINDING = 1; + public const INSTANCEOF_BINDING = 2; + private static $sequence = 0; private $value; private $identifier; private $used; + private $type; + private $file; - public function __construct($value) + public function __construct($value, bool $trackUsage = true, int $type = 0, string $file = null) { $this->value = $value; - $this->identifier = ++self::$sequence; + if ($trackUsage) { + $this->identifier = ++self::$sequence; + } else { + $this->used = true; + } + $this->type = $type; + $this->file = $file; } /** * {@inheritdoc} */ - public function getValues() + public function getValues(): array { - return [$this->value, $this->identifier, $this->used]; + return [$this->value, $this->identifier, $this->used, $this->type, $this->file]; } /** @@ -41,6 +53,10 @@ final class BoundArgument implements ArgumentInterface */ public function setValues(array $values) { - list($this->value, $this->identifier, $this->used) = $values; + if (5 === \count($values)) { + [$this->value, $this->identifier, $this->used, $this->type, $this->file] = $values; + } else { + [$this->value, $this->identifier, $this->used] = $values; + } } } diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/IteratorArgument.php b/civicrm/vendor/symfony/dependency-injection/Argument/IteratorArgument.php index 2d796d2d8f99292dcd2f87a10c00e2ccb758c434..d413678a147732537df8dbdb6cc193790888ce4b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Argument/IteratorArgument.php +++ b/civicrm/vendor/symfony/dependency-injection/Argument/IteratorArgument.php @@ -11,9 +11,6 @@ namespace Symfony\Component\DependencyInjection\Argument; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; - /** * Represents a collection of values to lazily iterate over. * @@ -21,35 +18,5 @@ use Symfony\Component\DependencyInjection\Reference; */ class IteratorArgument implements ArgumentInterface { - private $values; - - /** - * @param Reference[] $values - */ - public function __construct(array $values) - { - $this->setValues($values); - } - - /** - * @return array The values to lazily iterate over - */ - public function getValues() - { - return $this->values; - } - - /** - * @param Reference[] $values The service references to lazily iterate over - */ - public function setValues(array $values) - { - foreach ($values as $k => $v) { - if (null !== $v && !$v instanceof Reference) { - throw new InvalidArgumentException(sprintf('An IteratorArgument must hold only Reference instances, "%s" given.', \is_object($v) ? \get_class($v) : \gettype($v))); - } - } - - $this->values = $values; - } + use ReferenceSetArgumentTrait; } diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php b/civicrm/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..e3946ab394e7a85bb4ad8a2dbc6e9cdb4cda7535 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php @@ -0,0 +1,54 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * @author Titouan Galopin <galopintitouan@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + */ +trait ReferenceSetArgumentTrait +{ + private $values; + + /** + * @param Reference[] $values + */ + public function __construct(array $values) + { + $this->setValues($values); + } + + /** + * @return Reference[] The values in the set + */ + public function getValues() + { + return $this->values; + } + + /** + * @param Reference[] $values The service references to put in the set + */ + public function setValues(array $values) + { + foreach ($values as $k => $v) { + if (null !== $v && !$v instanceof Reference) { + throw new InvalidArgumentException(sprintf('A "%s" must hold only Reference instances, "%s" given.', __CLASS__, \is_object($v) ? \get_class($v) : \gettype($v))); + } + } + + $this->values = $values; + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php b/civicrm/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php index b00a36c34f542985c6922e2bd0d549eab342d29b..41fec786fd739de4b2a0331f60a11a084ede3a4d 100644 --- a/civicrm/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php +++ b/civicrm/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php @@ -28,14 +28,14 @@ class RewindableGenerator implements \IteratorAggregate, \Countable $this->count = $count; } - public function getIterator() + public function getIterator(): \Traversable { $g = $this->generator; return $g(); } - public function count() + public function count(): int { if (\is_callable($count = $this->count)) { $this->count = $count(); diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocator.php b/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocator.php new file mode 100644 index 0000000000000000000000000000000000000000..4f3c19eb30b99f039baab094890a8198546d7ed7 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocator.php @@ -0,0 +1,52 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +use Symfony\Component\DependencyInjection\ServiceLocator as BaseServiceLocator; + +/** + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +class ServiceLocator extends BaseServiceLocator +{ + private $factory; + private $serviceMap; + private $serviceTypes; + + public function __construct(\Closure $factory, array $serviceMap, array $serviceTypes = null) + { + $this->factory = $factory; + $this->serviceMap = $serviceMap; + $this->serviceTypes = $serviceTypes; + parent::__construct($serviceMap); + } + + /** + * {@inheritdoc} + * + * @return mixed + */ + public function get($id) + { + return isset($this->serviceMap[$id]) ? ($this->factory)(...$this->serviceMap[$id]) : parent::get($id); + } + + /** + * {@inheritdoc} + */ + public function getProvidedServices(): array + { + return $this->serviceTypes ?? $this->serviceTypes = array_map(function () { return '?'; }, $this->serviceMap); + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocatorArgument.php b/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocatorArgument.php new file mode 100644 index 0000000000000000000000000000000000000000..fcbf478c627f99f03e27f5a58dd642025ae70028 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Argument/ServiceLocatorArgument.php @@ -0,0 +1,44 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +use Symfony\Component\DependencyInjection\Reference; + +/** + * Represents a closure acting as a service locator. + * + * @author Nicolas Grekas <p@tchwork.com> + */ +class ServiceLocatorArgument implements ArgumentInterface +{ + use ReferenceSetArgumentTrait; + + private $taggedIteratorArgument; + + /** + * @param Reference[]|TaggedIteratorArgument $values + */ + public function __construct($values = []) + { + if ($values instanceof TaggedIteratorArgument) { + $this->taggedIteratorArgument = $values; + $this->values = []; + } else { + $this->setValues($values); + } + } + + public function getTaggedIteratorArgument(): ?TaggedIteratorArgument + { + return $this->taggedIteratorArgument; + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php b/civicrm/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php index f00e533919f9b2be7105764ee993493fdc952e59..1ba8de790b69e25b711121f75e91e88bc995d7df 100644 --- a/civicrm/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php +++ b/civicrm/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php @@ -19,19 +19,55 @@ namespace Symfony\Component\DependencyInjection\Argument; class TaggedIteratorArgument extends IteratorArgument { private $tag; + private $indexAttribute; + private $defaultIndexMethod; + private $defaultPriorityMethod; + private $needsIndexes = false; /** - * @param string $tag + * @param string $tag The name of the tag identifying the target services + * @param string|null $indexAttribute The name of the attribute that defines the key referencing each service in the tagged collection + * @param string|null $defaultIndexMethod The static method that should be called to get each service's key when their tag doesn't define the previous attribute + * @param bool $needsIndexes Whether indexes are required and should be generated when computing the map + * @param string|null $defaultPriorityMethod The static method that should be called to get each service's priority when their tag doesn't define the "priority" attribute */ - public function __construct($tag) + public function __construct(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, bool $needsIndexes = false, string $defaultPriorityMethod = null) { parent::__construct([]); - $this->tag = (string) $tag; + if (null === $indexAttribute && $needsIndexes) { + $indexAttribute = preg_match('/[^.]++$/', $tag, $m) ? $m[0] : $tag; + } + + $this->tag = $tag; + $this->indexAttribute = $indexAttribute; + $this->defaultIndexMethod = $defaultIndexMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Name' : null); + $this->needsIndexes = $needsIndexes; + $this->defaultPriorityMethod = $defaultPriorityMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Priority' : null); } public function getTag() { return $this->tag; } + + public function getIndexAttribute(): ?string + { + return $this->indexAttribute; + } + + public function getDefaultIndexMethod(): ?string + { + return $this->defaultIndexMethod; + } + + public function needsIndexes(): bool + { + return $this->needsIndexes; + } + + public function getDefaultPriorityMethod(): ?string + { + return $this->defaultPriorityMethod; + } } diff --git a/civicrm/vendor/symfony/dependency-injection/CHANGELOG.md b/civicrm/vendor/symfony/dependency-injection/CHANGELOG.md index a004161b963d9e303e9ddbbf3da63c56e76cb3be..ee8583b2622ebd9197a025b584be945c3743bb42 100644 --- a/civicrm/vendor/symfony/dependency-injection/CHANGELOG.md +++ b/civicrm/vendor/symfony/dependency-injection/CHANGELOG.md @@ -1,6 +1,126 @@ CHANGELOG ========= +4.4.0 +----- + + * added `CheckTypeDeclarationsPass` to check injected parameters type during compilation + * added support for opcache.preload by generating a preloading script in the cache folder + * added support for dumping the container in one file instead of many files + * deprecated support for short factories and short configurators in Yaml + * added `tagged_iterator` alias for `tagged` which might be deprecated in a future version + * deprecated passing an instance of `Symfony\Component\DependencyInjection\Parameter` as class name to `Symfony\Component\DependencyInjection\Definition` + * added support for binding iterable and tagged services + * made singly-implemented interfaces detection be scoped by file + * added ability to define a static priority method for tagged service + * added support for improved syntax to define method calls in Yaml + * made the `%env(base64:...)%` processor able to decode base64url + * added ability to choose behavior of decorations on non existent decorated services + +4.3.0 +----- + + * added `%env(trim:...)%` processor to trim a string value + * added `%env(default:param_name:...)%` processor to fallback to a parameter or to null when using `%env(default::...)%` + * added `%env(url:...)%` processor to convert an URL or DNS into an array of components + * added `%env(query_string:...)%` processor to convert a query string into an array of key values + * added support for deprecating aliases + * made `ContainerParametersResource` final and not implement `Serializable` anymore + * added `ReverseContainer`: a container that turns services back to their ids + * added ability to define an index for a tagged collection + * added ability to define an index for services in an injected service locator argument + * made `ServiceLocator` implement `ServiceProviderInterface` + * deprecated support for non-string default env() parameters + * added `%env(require:...)%` processor to `require()` a PHP file and use the value returned from it + +4.2.0 +----- + + * added `ContainerBuilder::registerAliasForArgument()` to support autowiring by type+name + * added support for binding by type+name + * added `ServiceSubscriberTrait` to ease implementing `ServiceSubscriberInterface` using methods' return types + * added `ServiceLocatorArgument` and `!service_locator` config tag for creating optimized service-locators + * added support for autoconfiguring bindings + * added `%env(key:...)%` processor to fetch a specific key from an array + * deprecated `ServiceSubscriberInterface`, use the same interface from the `Symfony\Contracts\Service` namespace instead + * deprecated `ResettableContainerInterface`, use `Symfony\Contracts\Service\ResetInterface` instead + +4.1.0 +----- + + * added support for variadics in named arguments + * added PSR-11 `ContainerBagInterface` and its `ContainerBag` implementation to access parameters as-a-service + * added support for service's decorators autowiring + * deprecated the `TypedReference::canBeAutoregistered()` and `TypedReference::getRequiringClass()` methods + * environment variables are validated when used in extension configuration + * deprecated support for auto-discovered extension configuration class which does not implement `ConfigurationInterface` + +4.0.0 +----- + + * Relying on service auto-registration while autowiring is not supported anymore. + Explicitly inject your dependencies or create services whose ids are + their fully-qualified class name. + + Before: + + ```php + namespace App\Controller; + + use App\Mailer; + + class DefaultController + { + public function __construct(Mailer $mailer) { + // ... + } + + // ... + } + ``` + ```yml + services: + App\Controller\DefaultController: + autowire: true + ``` + + After: + + ```php + // same PHP code + ``` + ```yml + services: + App\Controller\DefaultController: + autowire: true + + # or + # App\Controller\DefaultController: + # arguments: { $mailer: "@App\Mailer" } + + App\Mailer: + autowire: true + ``` + * removed autowiring services based on the types they implement + * added a third `$methodName` argument to the `getProxyFactoryCode()` method + of the `DumperInterface` + * removed support for autowiring types + * removed `Container::isFrozen` + * removed support for dumping an ucompiled container in `PhpDumper` + * removed support for generating a dumped `Container` without populating the method map + * removed support for case insensitive service identifiers + * removed the `DefinitionDecorator` class, replaced by `ChildDefinition` + * removed the `AutowireServiceResource` class and related `AutowirePass::createResourceForClass()` method + * removed `LoggingFormatter`, `Compiler::getLoggingFormatter()` and `addLogMessage()` class and methods, use the `ContainerBuilder::log()` method instead + * removed `FactoryReturnTypePass` + * removed `ContainerBuilder::addClassResource()`, use the `addObjectResource()` or the `getReflectionClass()` method instead. + * removed support for top-level anonymous services + * removed silent behavior for unused attributes and elements + * removed support for setting and accessing private services in `Container` + * removed support for setting pre-defined services in `Container` + * removed support for case insensitivity of parameter names + * removed `AutowireExceptionPass` and `AutowirePass::getAutowiringExceptions()`, use `Definition::addError()` and the `DefinitionErrorExceptionPass` instead + 3.4.0 ----- @@ -16,7 +136,6 @@ CHANGELOG * added `TaggedIteratorArgument` with YAML (`!tagged foo`) and XML (`<service type="tagged"/>`) support * deprecated `AutowireExceptionPass` and `AutowirePass::getAutowiringExceptions()`, use `Definition::addError()` and the `DefinitionErrorExceptionPass` instead - 3.3.0 ----- @@ -85,8 +204,8 @@ CHANGELOG 2.5.0 ----- -* added DecoratorServicePass and a way to override a service definition (Definition::setDecoratedService()) -* deprecated SimpleXMLElement class. + * added DecoratorServicePass and a way to override a service definition (Definition::setDecoratedService()) + * deprecated SimpleXMLElement class. 2.4.0 ----- diff --git a/civicrm/vendor/symfony/dependency-injection/ChildDefinition.php b/civicrm/vendor/symfony/dependency-injection/ChildDefinition.php index 123b387475bda98d09afc548f50f5a024b696516..5aefec6454827e174c5a215e0656641da7923ce3 100644 --- a/civicrm/vendor/symfony/dependency-injection/ChildDefinition.php +++ b/civicrm/vendor/symfony/dependency-injection/ChildDefinition.php @@ -27,7 +27,7 @@ class ChildDefinition extends Definition /** * @param string $parent The id of Definition instance to decorate */ - public function __construct($parent) + public function __construct(string $parent) { $this->parent = $parent; $this->setPrivate(false); @@ -97,7 +97,7 @@ class ChildDefinition extends Definition { if (\is_int($index)) { $this->arguments['index_'.$index] = $value; - } elseif (0 === strpos($index, '$')) { + } elseif (str_starts_with($index, '$')) { $this->arguments[$index] = $value; } else { throw new InvalidArgumentException('The argument must be an existing index or the name of a constructor\'s parameter.'); @@ -109,7 +109,7 @@ class ChildDefinition extends Definition /** * @internal */ - public function setAutoconfigured($autoconfigured) + public function setAutoconfigured($autoconfigured): self { throw new BadMethodCallException('A ChildDefinition cannot be autoconfigured.'); } @@ -117,10 +117,8 @@ class ChildDefinition extends Definition /** * @internal */ - public function setInstanceofConditionals(array $instanceof) + public function setInstanceofConditionals(array $instanceof): self { throw new BadMethodCallException('A ChildDefinition cannot have instanceof conditionals set on it.'); } } - -class_alias(ChildDefinition::class, DefinitionDecorator::class); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php index 863bab4731ada0127cb0fba0fda80e890d70c601..4fb467d965d8d4553823f5bb9b7a75eed70775df 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php @@ -12,10 +12,14 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; +use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\ExpressionLanguage; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\ExpressionLanguage\Expression; /** * @author Nicolas Grekas <p@tchwork.com> @@ -28,6 +32,10 @@ abstract class AbstractRecursivePass implements CompilerPassInterface protected $container; protected $currentId; + private $processExpressions = false; + private $expressionLanguage; + private $inExpression = false; + /** * {@inheritdoc} */ @@ -42,6 +50,21 @@ abstract class AbstractRecursivePass implements CompilerPassInterface } } + protected function enableExpressionProcessing() + { + $this->processExpressions = true; + } + + protected function inExpression(bool $reset = true): bool + { + $inExpression = $this->inExpression; + if ($reset) { + $this->inExpression = false; + } + + return $inExpression; + } + /** * Processes a value found in a definition tree. * @@ -63,6 +86,8 @@ abstract class AbstractRecursivePass implements CompilerPassInterface } } elseif ($value instanceof ArgumentInterface) { $value->setValues($this->processValue($value->getValues())); + } elseif ($value instanceof Expression && $this->processExpressions) { + $this->getExpressionLanguage()->compile((string) $value, ['this' => 'container']); } elseif ($value instanceof Definition) { $value->setArguments($this->processValue($value->getArguments())); $value->setProperties($this->processValue($value->getProperties())); @@ -106,23 +131,36 @@ abstract class AbstractRecursivePass implements CompilerPassInterface } if ($factory) { - list($class, $method) = $factory; + [$class, $method] = $factory; + + if ('__construct' === $method) { + throw new RuntimeException(sprintf('Invalid service "%s": "__construct()" cannot be used as a factory method.', $this->currentId)); + } + if ($class instanceof Reference) { - $class = $this->container->findDefinition((string) $class)->getClass(); + $factoryDefinition = $this->container->findDefinition((string) $class); + while ((null === $class = $factoryDefinition->getClass()) && $factoryDefinition instanceof ChildDefinition) { + $factoryDefinition = $this->container->findDefinition($factoryDefinition->getParent()); + } + } elseif ($class instanceof Definition) { + $class = $class->getClass(); } elseif (null === $class) { $class = $definition->getClass(); } - if ('__construct' === $method) { - throw new RuntimeException(sprintf('Invalid service "%s": "__construct()" cannot be used as a factory method.', $this->currentId)); - } return $this->getReflectionMethod(new Definition($class), $method); } - $class = $definition->getClass(); + while ((null === $class = $definition->getClass()) && $definition instanceof ChildDefinition) { + $definition = $this->container->findDefinition($definition->getParent()); + } try { if (!$r = $this->container->getReflectionClass($class)) { + if (null === $class) { + throw new RuntimeException(sprintf('Invalid service "%s": the class is not set.', $this->currentId)); + } + throw new RuntimeException(sprintf('Invalid service "%s": class "%s" does not exist.', $this->currentId, $class)); } } catch (\ReflectionException $e) { @@ -152,7 +190,11 @@ abstract class AbstractRecursivePass implements CompilerPassInterface return $this->getConstructor($definition, true); } - if (!$class = $definition->getClass()) { + while ((null === $class = $definition->getClass()) && $definition instanceof ChildDefinition) { + $definition = $this->container->findDefinition($definition->getParent()); + } + + if (null === $class) { throw new RuntimeException(sprintf('Invalid service "%s": the class is not set.', $this->currentId)); } @@ -161,6 +203,10 @@ abstract class AbstractRecursivePass implements CompilerPassInterface } if (!$r->hasMethod($method)) { + if ($r->hasMethod('__call') && ($r = $r->getMethod('__call')) && $r->isPublic()) { + return new \ReflectionMethod(static function (...$arguments) {}, '__invoke'); + } + throw new RuntimeException(sprintf('Invalid service "%s": method "%s()" does not exist.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method)); } @@ -171,4 +217,31 @@ abstract class AbstractRecursivePass implements CompilerPassInterface return $r; } + + private function getExpressionLanguage(): ExpressionLanguage + { + if (null === $this->expressionLanguage) { + if (!class_exists(ExpressionLanguage::class)) { + throw new LogicException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); + } + + $providers = $this->container->getExpressionLanguageProviders(); + $this->expressionLanguage = new ExpressionLanguage(null, $providers, function (string $arg): string { + if ('""' === substr_replace($arg, '', 1, -1)) { + $id = stripcslashes(substr($arg, 1, -1)); + $this->inExpression = true; + $arg = $this->processValue(new Reference($id)); + $this->inExpression = false; + if (!$arg instanceof Reference) { + throw new RuntimeException(sprintf('"%s::processValue()" must return a Reference when processing an expression, "%s" returned for service("%s").', static::class, \is_object($arg) ? \get_class($arg) : \gettype($arg), $id)); + } + $arg = sprintf('"%s"', $arg); + } + + return sprintf('$this->get(%s)', $arg); + }); + } + + return $this->expressionLanguage; + } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php index bff9d42079e121a701ef98769223b5b37888d841..92e4acacfba2fb356e1128fae086325b79a8041e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php @@ -12,13 +12,11 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; -use Symfony\Component\DependencyInjection\ExpressionLanguage; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\ExpressionLanguage\Expression; /** * Run this pass before passes that need to know more about the relation of @@ -28,6 +26,7 @@ use Symfony\Component\ExpressionLanguage\Expression; * retrieve the graph in other passes from the compiler. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> */ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements RepeatablePassInterface { @@ -36,16 +35,19 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe private $onlyConstructorArguments; private $hasProxyDumper; private $lazy; - private $expressionLanguage; private $byConstructor; + private $byFactory; + private $definitions; + private $aliases; /** * @param bool $onlyConstructorArguments Sets this Service Reference pass to ignore method calls */ - public function __construct($onlyConstructorArguments = false, $hasProxyDumper = true) + public function __construct(bool $onlyConstructorArguments = false, bool $hasProxyDumper = true) { - $this->onlyConstructorArguments = (bool) $onlyConstructorArguments; - $this->hasProxyDumper = (bool) $hasProxyDumper; + $this->onlyConstructorArguments = $onlyConstructorArguments; + $this->hasProxyDumper = $hasProxyDumper; + $this->enableExpressionProcessing(); } /** @@ -53,7 +55,7 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe */ public function setRepeatedPass(RepeatedPass $repeatedPass) { - // no-op for BC + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); } /** @@ -66,34 +68,37 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe $this->graph->clear(); $this->lazy = false; $this->byConstructor = false; + $this->byFactory = false; + $this->definitions = $container->getDefinitions(); + $this->aliases = $container->getAliases(); - foreach ($container->getAliases() as $id => $alias) { + foreach ($this->aliases as $id => $alias) { $targetId = $this->getDefinitionId((string) $alias); - $this->graph->connect($id, $alias, $targetId, $this->getDefinition($targetId), null); + $this->graph->connect($id, $alias, $targetId, null !== $targetId ? $this->container->getDefinition($targetId) : null, null); } - parent::process($container); + try { + parent::process($container); + } finally { + $this->aliases = $this->definitions = []; + } } protected function processValue($value, $isRoot = false) { $lazy = $this->lazy; + $inExpression = $this->inExpression(); if ($value instanceof ArgumentInterface) { - $this->lazy = true; + $this->lazy = !$this->byFactory || !$value instanceof IteratorArgument; parent::processValue($value->getValues()); $this->lazy = $lazy; return $value; } - if ($value instanceof Expression) { - $this->getExpressionLanguage()->compile((string) $value, ['this' => 'container']); - - return $value; - } if ($value instanceof Reference) { $targetId = $this->getDefinitionId((string) $value); - $targetDefinition = $this->getDefinition($targetId); + $targetDefinition = null !== $targetId ? $this->container->getDefinition($targetId) : null; $this->graph->connect( $this->currentId, @@ -106,6 +111,18 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe $this->byConstructor ); + if ($inExpression) { + $this->graph->connect( + '.internal.reference_in_expression', + null, + $targetId, + $targetDefinition, + $value, + $this->lazy || ($targetDefinition && $targetDefinition->isLazy()), + true + ); + } + return $value; } if (!$value instanceof Definition) { @@ -123,70 +140,60 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe $byConstructor = $this->byConstructor; $this->byConstructor = $isRoot || $byConstructor; + + $byFactory = $this->byFactory; + $this->byFactory = true; $this->processValue($value->getFactory()); + $this->byFactory = $byFactory; $this->processValue($value->getArguments()); - $this->byConstructor = $byConstructor; - if (!$this->onlyConstructorArguments) { - $this->processValue($value->getProperties()); - $this->processValue($value->getMethodCalls()); - $this->processValue($value->getConfigurator()); + $properties = $value->getProperties(); + $setters = $value->getMethodCalls(); + + // Any references before a "wither" are part of the constructor-instantiation graph + $lastWitherIndex = null; + foreach ($setters as $k => $call) { + if ($call[2] ?? false) { + $lastWitherIndex = $k; + } } - $this->lazy = $lazy; - return $value; - } + if (null !== $lastWitherIndex) { + $this->processValue($properties); + $setters = $properties = []; - /** - * Returns a service definition given the full name or an alias. - * - * @param string $id A full id or alias for a service definition - * - * @return Definition|null The definition related to the supplied id - */ - private function getDefinition($id) - { - return null === $id ? null : $this->container->getDefinition($id); - } + foreach ($value->getMethodCalls() as $k => $call) { + if (null === $lastWitherIndex) { + $setters[] = $call; + continue; + } - private function getDefinitionId($id) - { - while ($this->container->hasAlias($id)) { - $id = (string) $this->container->getAlias($id); + if ($lastWitherIndex === $k) { + $lastWitherIndex = null; + } + + $this->processValue($call); + } } - if (!$this->container->hasDefinition($id)) { - return null; + $this->byConstructor = $byConstructor; + + if (!$this->onlyConstructorArguments) { + $this->processValue($properties); + $this->processValue($setters); + $this->processValue($value->getConfigurator()); } + $this->lazy = $lazy; - return $this->container->normalizeId($id); + return $value; } - private function getExpressionLanguage() + private function getDefinitionId(string $id): ?string { - if (null === $this->expressionLanguage) { - if (!class_exists(ExpressionLanguage::class)) { - throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); - } - - $providers = $this->container->getExpressionLanguageProviders(); - $this->expressionLanguage = new ExpressionLanguage(null, $providers, function ($arg) { - if ('""' === substr_replace($arg, '', 1, -1)) { - $id = stripcslashes(substr($arg, 1, -1)); - $id = $this->getDefinitionId($id); - - $this->graph->connect( - $this->currentId, - $this->currentDefinition, - $id, - $this->getDefinition($id) - ); - } - - return sprintf('$this->get(%s)', $arg); - }); + while (isset($this->aliases[$id])) { + $id = (string) $this->aliases[$id]; } - return $this->expressionLanguage; + return isset($this->definitions[$id]) ? $id : null; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php deleted file mode 100644 index 6a755025e2f14d2e9040550b473d8451380bd9f3..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireExceptionPass.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -@trigger_error('The '.__NAMESPACE__.'\AutowireExceptionPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the DefinitionErrorExceptionPass class instead.', \E_USER_DEPRECATED); - -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * Throws autowire exceptions from AutowirePass for definitions that still exist. - * - * @deprecated since version 3.4, will be removed in 4.0. - * - * @author Ryan Weaver <ryan@knpuniversity.com> - */ -class AutowireExceptionPass implements CompilerPassInterface -{ - private $autowirePass; - private $inlineServicePass; - - public function __construct(AutowirePass $autowirePass, InlineServiceDefinitionsPass $inlineServicePass) - { - $this->autowirePass = $autowirePass; - $this->inlineServicePass = $inlineServicePass; - } - - public function process(ContainerBuilder $container) - { - // the pass should only be run once - if (null === $this->autowirePass || null === $this->inlineServicePass) { - return; - } - - $inlinedIds = $this->inlineServicePass->getInlinedServiceIds(); - $exceptions = $this->autowirePass->getAutowiringExceptions(); - - // free up references - $this->autowirePass = null; - $this->inlineServicePass = null; - - foreach ($exceptions as $exception) { - if ($this->doesServiceExistInTheContainer($exception->getServiceId(), $container, $inlinedIds)) { - throw $exception; - } - } - } - - private function doesServiceExistInTheContainer($serviceId, ContainerBuilder $container, array $inlinedIds) - { - if ($container->hasDefinition($serviceId)) { - return true; - } - - // was the service inlined? Of so, does its parent service exist? - if (isset($inlinedIds[$serviceId])) { - foreach ($inlinedIds[$serviceId] as $parentId) { - if ($this->doesServiceExistInTheContainer($parentId, $container, $inlinedIds)) { - return true; - } - } - } - - return false; - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php index b1dae2a4f40109242b621140263bccfb2f796e65..c88143d11450660f2c1f70f452f5e25301e440cb 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowirePass.php @@ -12,7 +12,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\Config\Resource\ClassExistenceResource; -use Symfony\Component\DependencyInjection\Config\AutowireServiceResource; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\AutowiringFailedException; @@ -28,33 +27,26 @@ use Symfony\Component\DependencyInjection\TypedReference; */ class AutowirePass extends AbstractRecursivePass { - private $definedTypes = []; private $types; private $ambiguousServiceTypes; - private $autowired = []; private $lastFailure; private $throwOnAutowiringException; - private $autowiringExceptions = []; - private $strictMode; - - /** - * @param bool $throwOnAutowireException Errors can be retrieved via Definition::getErrors() - */ - public function __construct($throwOnAutowireException = true) + private $decoratedClass; + private $decoratedId; + private $methodCalls; + private $defaultArgument; + private $getPreviousValue; + private $decoratedMethodIndex; + private $decoratedMethodArgumentIndex; + private $typesClone; + + public function __construct(bool $throwOnAutowireException = true) { $this->throwOnAutowiringException = $throwOnAutowireException; - } - - /** - * @deprecated since version 3.4, to be removed in 4.0. - * - * @return AutowiringFailedException[] - */ - public function getAutowiringExceptions() - { - @trigger_error('Calling AutowirePass::getAutowiringExceptions() is deprecated since Symfony 3.4 and will be removed in 4.0. Use Definition::getErrors() instead.', \E_USER_DEPRECATED); - - return $this->autowiringExceptions; + $this->defaultArgument = new class() { + public $value; + public $names; + }; } /** @@ -62,42 +54,21 @@ class AutowirePass extends AbstractRecursivePass */ public function process(ContainerBuilder $container) { - // clear out any possibly stored exceptions from before - $this->autowiringExceptions = []; - $this->strictMode = $container->hasParameter('container.autowiring.strict_mode') && $container->getParameter('container.autowiring.strict_mode'); - try { + $this->typesClone = clone $this; parent::process($container); } finally { - $this->definedTypes = []; - $this->types = null; - $this->ambiguousServiceTypes = null; - $this->autowired = []; + $this->decoratedClass = null; + $this->decoratedId = null; + $this->methodCalls = null; + $this->defaultArgument->names = null; + $this->getPreviousValue = null; + $this->decoratedMethodIndex = null; + $this->decoratedMethodArgumentIndex = null; + $this->typesClone = null; } } - /** - * Creates a resource to help know if this service has changed. - * - * @return AutowireServiceResource - * - * @deprecated since version 3.3, to be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead. - */ - public static function createResourceForClass(\ReflectionClass $reflectionClass) - { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', \E_USER_DEPRECATED); - - $metadata = []; - - foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflectionMethod) { - if (!$reflectionMethod->isStatic()) { - $metadata[$reflectionMethod->name] = self::getResourceMetadataForMethod($reflectionMethod); - } - } - - return new AutowireServiceResource($reflectionClass->name, $reflectionClass->getFileName(), $metadata); - } - /** * {@inheritdoc} */ @@ -110,20 +81,30 @@ class AutowirePass extends AbstractRecursivePass throw $e; } - $this->autowiringExceptions[] = $e; - $this->container->getDefinition($this->currentId)->addError($e->getMessage()); + $this->container->getDefinition($this->currentId)->addError($e->getMessageCallback() ?? $e->getMessage()); return parent::processValue($value, $isRoot); } } - private function doProcessValue($value, $isRoot = false) + /** + * @return mixed + */ + private function doProcessValue($value, bool $isRoot = false) { if ($value instanceof TypedReference) { - if ($ref = $this->getAutowiredReference($value, $value->getRequiringClass() ? sprintf('for "%s" in "%s"', $value->getType(), $value->getRequiringClass()) : '')) { + if ($ref = $this->getAutowiredReference($value)) { return $ref; } - $this->container->log($this, $this->createTypeNotFoundMessage($value, 'it')); + if (ContainerBuilder::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $value->getInvalidBehavior()) { + $message = $this->createTypeNotFoundMessageCallback($value, 'it'); + + // since the error message varies by referenced id and $this->currentId, so should the id of the dummy errored definition + $this->container->register($id = sprintf('.errored.%s.%s', $this->currentId, (string) $value), $value->getType()) + ->addError($message); + + return new TypedReference($id, $value->getType(), $value->getInvalidBehavior(), $value->getName()); + } } $value = parent::processValue($value, $isRoot); @@ -136,7 +117,7 @@ class AutowirePass extends AbstractRecursivePass return $value; } - $methodCalls = $value->getMethodCalls(); + $this->methodCalls = $value->getMethodCalls(); try { $constructor = $this->getConstructor($value, false); @@ -145,33 +126,40 @@ class AutowirePass extends AbstractRecursivePass } if ($constructor) { - array_unshift($methodCalls, [$constructor, $value->getArguments()]); + array_unshift($this->methodCalls, [$constructor, $value->getArguments()]); } - $methodCalls = $this->autowireCalls($reflectionClass, $methodCalls); + $this->methodCalls = $this->autowireCalls($reflectionClass, $isRoot); if ($constructor) { - list(, $arguments) = array_shift($methodCalls); + [, $arguments] = array_shift($this->methodCalls); if ($arguments !== $value->getArguments()) { $value->setArguments($arguments); } } - if ($methodCalls !== $value->getMethodCalls()) { - $value->setMethodCalls($methodCalls); + if ($this->methodCalls !== $value->getMethodCalls()) { + $value->setMethodCalls($this->methodCalls); } return $value; } - /** - * @return array - */ - private function autowireCalls(\ReflectionClass $reflectionClass, array $methodCalls) + private function autowireCalls(\ReflectionClass $reflectionClass, bool $isRoot): array { - foreach ($methodCalls as $i => $call) { - list($method, $arguments) = $call; + $this->decoratedId = null; + $this->decoratedClass = null; + $this->getPreviousValue = null; + + if ($isRoot && ($definition = $this->container->getDefinition($this->currentId)) && null !== ($this->decoratedId = $definition->innerServiceId) && $this->container->has($this->decoratedId)) { + $this->decoratedClass = $this->container->findDefinition($this->decoratedId)->getClass(); + } + + $patchedIndexes = []; + + foreach ($this->methodCalls as $i => $call) { + [$method, $arguments] = $call; if ($method instanceof \ReflectionFunctionAbstract) { $reflectionMethod = $method; @@ -187,14 +175,40 @@ class AutowirePass extends AbstractRecursivePass } } - $arguments = $this->autowireMethod($reflectionMethod, $arguments); + $arguments = $this->autowireMethod($reflectionMethod, $arguments, $i); if ($arguments !== $call[1]) { - $methodCalls[$i][1] = $arguments; + $this->methodCalls[$i][1] = $arguments; + $patchedIndexes[] = $i; + } + } + + // use named arguments to skip complex default values + foreach ($patchedIndexes as $i) { + $namedArguments = null; + $arguments = $this->methodCalls[$i][1]; + + foreach ($arguments as $j => $value) { + if ($namedArguments && !$value instanceof $this->defaultArgument) { + unset($arguments[$j]); + $arguments[$namedArguments[$j]] = $value; + } + if ($namedArguments || !$value instanceof $this->defaultArgument) { + continue; + } + + if (\PHP_VERSION_ID >= 80100 && (\is_array($value->value) ? $value->value : \is_object($value->value))) { + unset($arguments[$j]); + $namedArguments = $value->names; + } else { + $arguments[$j] = $value->value; + } } + + $this->methodCalls[$i][1] = $arguments; } - return $methodCalls; + return $this->methodCalls; } /** @@ -204,16 +218,19 @@ class AutowirePass extends AbstractRecursivePass * * @throws AutowiringFailedException */ - private function autowireMethod(\ReflectionFunctionAbstract $reflectionMethod, array $arguments) + private function autowireMethod(\ReflectionFunctionAbstract $reflectionMethod, array $arguments, int $methodIndex): array { $class = $reflectionMethod instanceof \ReflectionMethod ? $reflectionMethod->class : $this->currentId; $method = $reflectionMethod->name; $parameters = $reflectionMethod->getParameters(); - if (method_exists('ReflectionMethod', 'isVariadic') && $reflectionMethod->isVariadic()) { + if ($reflectionMethod->isVariadic()) { array_pop($parameters); } + $this->defaultArgument->names = new \ArrayObject(); foreach ($parameters as $index => $parameter) { + $this->defaultArgument->names[$index] = $parameter->name; + if (\array_key_exists($index, $arguments) && '' !== $arguments[$index]) { continue; } @@ -231,38 +248,62 @@ class AutowirePass extends AbstractRecursivePass // be false when isOptional() returns true. If the // argument *is* optional, allow it to be missing if ($parameter->isOptional()) { - continue; + --$index; + break; } $type = ProxyHelper::getTypeHint($reflectionMethod, $parameter, false); - $type = $type ? sprintf('is type-hinted "%s"', $type) : 'has no type-hint'; + $type = $type ? sprintf('is type-hinted "%s"', ltrim($type, '\\')) : 'has no type-hint'; throw new AutowiringFailedException($this->currentId, sprintf('Cannot autowire service "%s": argument "$%s" of method "%s()" %s, you should configure its value explicitly.', $this->currentId, $parameter->name, $class !== $this->currentId ? $class.'::'.$method : $method, $type)); } // specifically pass the default value - $arguments[$index] = $parameter->getDefaultValue(); + $arguments[$index] = clone $this->defaultArgument; + $arguments[$index]->value = $parameter->getDefaultValue(); continue; } - if (!$value = $this->getAutowiredReference($ref = new TypedReference($type, $type, !$parameter->isOptional() ? $class : ''), 'for '.sprintf('argument "$%s" of method "%s()"', $parameter->name, $class.'::'.$method))) { - $failureMessage = $this->createTypeNotFoundMessage($ref, sprintf('argument "$%s" of method "%s()"', $parameter->name, $class !== $this->currentId ? $class.'::'.$method : $method)); + $getValue = function () use ($type, $parameter, $class, $method) { + if (!$value = $this->getAutowiredReference($ref = new TypedReference($type, $type, ContainerBuilder::EXCEPTION_ON_INVALID_REFERENCE, $parameter->name))) { + $failureMessage = $this->createTypeNotFoundMessageCallback($ref, sprintf('argument "$%s" of method "%s()"', $parameter->name, $class !== $this->currentId ? $class.'::'.$method : $method)); + + if ($parameter->isDefaultValueAvailable()) { + $value = clone $this->defaultArgument; + $value->value = $parameter->getDefaultValue(); + } elseif (!$parameter->allowsNull()) { + throw new AutowiringFailedException($this->currentId, $failureMessage); + } + } + + return $value; + }; + + if ($this->decoratedClass && $isDecorated = is_a($this->decoratedClass, $type, true)) { + if ($this->getPreviousValue) { + // The inner service is injected only if there is only 1 argument matching the type of the decorated class + // across all arguments of all autowired methods. + // If a second matching argument is found, the default behavior is restored. + + $getPreviousValue = $this->getPreviousValue; + $this->methodCalls[$this->decoratedMethodIndex][1][$this->decoratedMethodArgumentIndex] = $getPreviousValue(); + $this->decoratedClass = null; // Prevent further checks + } else { + $arguments[$index] = new TypedReference($this->decoratedId, $this->decoratedClass); + $this->getPreviousValue = $getValue; + $this->decoratedMethodIndex = $methodIndex; + $this->decoratedMethodArgumentIndex = $index; - if ($parameter->isDefaultValueAvailable()) { - $value = $parameter->getDefaultValue(); - } elseif (!$parameter->allowsNull()) { - throw new AutowiringFailedException($this->currentId, $failureMessage); + continue; } - $this->container->log($this, $failureMessage); } - $arguments[$index] = $value; + $arguments[$index] = $getValue(); } if ($parameters && !isset($arguments[++$index])) { while (0 <= --$index) { - $parameter = $parameters[$index]; - if (!$parameter->isDefaultValueAvailable() || $parameter->getDefaultValue() !== $arguments[$index]) { + if (!$arguments[$index] instanceof $this->defaultArgument) { break; } unset($arguments[$index]); @@ -277,48 +318,33 @@ class AutowirePass extends AbstractRecursivePass } /** - * @return TypedReference|null A reference to the service matching the given type, if any + * Returns a reference to the service matching the given type, if any. */ - private function getAutowiredReference(TypedReference $reference, $deprecationMessage) + private function getAutowiredReference(TypedReference $reference): ?TypedReference { $this->lastFailure = null; $type = $reference->getType(); - if ($type !== $this->container->normalizeId($reference) || ($this->container->has($type) && !$this->container->findDefinition($type)->isAbstract())) { + if ($type !== (string) $reference) { return $reference; } - if (null === $this->types) { - $this->populateAvailableTypes($this->strictMode); - } - - if (isset($this->definedTypes[$type])) { - return new TypedReference($this->types[$type], $type); - } - - if (!$this->strictMode && isset($this->types[$type])) { - $message = 'Autowiring services based on the types they implement is deprecated since Symfony 3.3 and won\'t be supported in version 4.0.'; - if ($aliasSuggestion = $this->getAliasesSuggestionForType($type = $reference->getType(), $deprecationMessage)) { - $message .= ' '.$aliasSuggestion; - } else { - $message .= sprintf(' You should %s the "%s" service to "%s" instead.', isset($this->types[$this->types[$type]]) ? 'alias' : 'rename (or alias)', $this->types[$type], $type); + if (null !== $name = $reference->getName()) { + if ($this->container->has($alias = $type.' $'.$name) && !$this->container->findDefinition($alias)->isAbstract()) { + return new TypedReference($alias, $type, $reference->getInvalidBehavior()); } - @trigger_error($message, \E_USER_DEPRECATED); - - return new TypedReference($this->types[$type], $type); - } - - if (!$reference->canBeAutoregistered() || isset($this->types[$type]) || isset($this->ambiguousServiceTypes[$type])) { - return null; - } - - if (isset($this->autowired[$type])) { - return $this->autowired[$type] ? new TypedReference($this->autowired[$type], $type) : null; + if ($this->container->has($name) && !$this->container->findDefinition($name)->isAbstract()) { + foreach ($this->container->getAliases() as $id => $alias) { + if ($name === (string) $alias && str_starts_with($id, $type.' $')) { + return new TypedReference($name, $type, $reference->getInvalidBehavior()); + } + } + } } - if (!$this->strictMode) { - return $this->createAutowiredDefinition($type); + if ($this->container->has($type) && !$this->container->findDefinition($type)->isAbstract()) { + return new TypedReference($type, $type, $reference->getInvalidBehavior()); } return null; @@ -327,41 +353,27 @@ class AutowirePass extends AbstractRecursivePass /** * Populates the list of available types. */ - private function populateAvailableTypes($onlyAutowiringTypes = false) + private function populateAvailableTypes(ContainerBuilder $container) { $this->types = []; - if (!$onlyAutowiringTypes) { - $this->ambiguousServiceTypes = []; - } + $this->ambiguousServiceTypes = []; - foreach ($this->container->getDefinitions() as $id => $definition) { - $this->populateAvailableType($id, $definition, $onlyAutowiringTypes); + foreach ($container->getDefinitions() as $id => $definition) { + $this->populateAvailableType($container, $id, $definition); } } /** * Populates the list of available types for a given definition. - * - * @param string $id */ - private function populateAvailableType($id, Definition $definition, $onlyAutowiringTypes) + private function populateAvailableType(ContainerBuilder $container, string $id, Definition $definition) { // Never use abstract services if ($definition->isAbstract()) { return; } - foreach ($definition->getAutowiringTypes(false) as $type) { - $this->definedTypes[$type] = true; - $this->types[$type] = $id; - unset($this->ambiguousServiceTypes[$type]); - } - - if ($onlyAutowiringTypes) { - return; - } - - if (preg_match('/^\d+_[^~]++~[._a-zA-Z\d]{7}$/', $id) || $definition->isDeprecated() || !$reflectionClass = $this->container->getReflectionClass($definition->getClass(), false)) { + if ('' === $id || '.' === $id[0] || $definition->isDeprecated() || !$reflectionClass = $container->getReflectionClass($definition->getClass(), false)) { return; } @@ -376,16 +388,9 @@ class AutowirePass extends AbstractRecursivePass /** * Associates a type and a service id if applicable. - * - * @param string $type - * @param string $id */ - private function set($type, $id) + private function set(string $type, string $id) { - if (isset($this->definedTypes[$type])) { - return; - } - // is this already a type/class that is known to match multiple services? if (isset($this->ambiguousServiceTypes[$type])) { $this->ambiguousServiceTypes[$type][] = $id; @@ -408,62 +413,24 @@ class AutowirePass extends AbstractRecursivePass $this->ambiguousServiceTypes[$type][] = $id; } - /** - * Registers a definition for the type if possible or throws an exception. - * - * @param string $type - * - * @return TypedReference|null A reference to the registered definition - */ - private function createAutowiredDefinition($type) + private function createTypeNotFoundMessageCallback(TypedReference $reference, string $label): \Closure { - if (!($typeHint = $this->container->getReflectionClass($type, false)) || !$typeHint->isInstantiable()) { - return null; + if (null === $this->typesClone->container) { + $this->typesClone->container = new ContainerBuilder($this->container->getParameterBag()); + $this->typesClone->container->setAliases($this->container->getAliases()); + $this->typesClone->container->setDefinitions($this->container->getDefinitions()); + $this->typesClone->container->setResourceTracking(false); } - $currentId = $this->currentId; - $this->currentId = $type; - $this->autowired[$type] = $argumentId = sprintf('autowired.%s', $type); - $argumentDefinition = new Definition($type); - $argumentDefinition->setPublic(false); - $argumentDefinition->setAutowired(true); - try { - $originalThrowSetting = $this->throwOnAutowiringException; - $this->throwOnAutowiringException = true; - $this->processValue($argumentDefinition, true); - $this->container->setDefinition($argumentId, $argumentDefinition); - } catch (AutowiringFailedException $e) { - $this->autowired[$type] = false; - $this->lastFailure = $e->getMessage(); - $this->container->log($this, $this->lastFailure); - - return null; - } finally { - $this->throwOnAutowiringException = $originalThrowSetting; - $this->currentId = $currentId; - } - - @trigger_error(sprintf('Relying on service auto-registration for type "%s" is deprecated since Symfony 3.4 and won\'t be supported in 4.0. Create a service named "%s" instead.', $type, $type), \E_USER_DEPRECATED); - - $this->container->log($this, sprintf('Type "%s" has been auto-registered for service "%s".', $type, $this->currentId)); - - return new TypedReference($argumentId, $type); + return (function () use ($reference, $label, $currentId) { + return $this->createTypeNotFoundMessage($reference, $label, $currentId); + })->bindTo($this->typesClone); } - private function createTypeNotFoundMessage(TypedReference $reference, $label) + private function createTypeNotFoundMessage(TypedReference $reference, string $label, string $currentId): string { - $trackResources = $this->container->isTrackingResources(); - $this->container->setResourceTracking(false); - try { - if ($r = $this->container->getReflectionClass($type = $reference->getType(), false)) { - $alternatives = $this->createTypeAlternatives($reference); - } - } finally { - $this->container->setResourceTracking($trackResources); - } - - if (!$r) { + if (!$r = $this->container->getReflectionClass($type = $reference->getType(), false)) { // either $type does not exist or a parent class does not exist try { $resource = new ClassExistenceResource($type, false); @@ -476,6 +443,7 @@ class AutowirePass extends AbstractRecursivePass $message = sprintf('has type "%s" but this class %s.', $type, $parentMsg ? sprintf('is missing a parent class (%s)', $parentMsg) : 'was not found'); } else { + $alternatives = $this->createTypeAlternatives($this->container, $reference); $message = $this->container->has($type) ? 'this service is abstract' : 'no such service exists'; $message = sprintf('references %s "%s" but %s.%s', $r->isInterface() ? 'interface' : 'class', $type, $message, $alternatives); @@ -484,7 +452,7 @@ class AutowirePass extends AbstractRecursivePass } } - $message = sprintf('Cannot autowire service "%s": %s %s', $this->currentId, $label, $message); + $message = sprintf('Cannot autowire service "%s": %s %s', $currentId, $label, $message); if (null !== $this->lastFailure) { $message = $this->lastFailure."\n".$message; @@ -494,22 +462,23 @@ class AutowirePass extends AbstractRecursivePass return $message; } - private function createTypeAlternatives(TypedReference $reference) + private function createTypeAlternatives(ContainerBuilder $container, TypedReference $reference): string { // try suggesting available aliases first - if ($message = $this->getAliasesSuggestionForType($type = $reference->getType())) { + if ($message = $this->getAliasesSuggestionForType($container, $type = $reference->getType())) { return ' '.$message; } if (null === $this->ambiguousServiceTypes) { - $this->populateAvailableTypes(); + $this->populateAvailableTypes($container); } - if (isset($this->ambiguousServiceTypes[$type])) { + $servicesAndAliases = $container->getServiceIds(); + if (!$container->has($type) && false !== $key = array_search(strtolower($type), array_map('strtolower', $servicesAndAliases))) { + return sprintf(' Did you mean "%s"?', $servicesAndAliases[$key]); + } elseif (isset($this->ambiguousServiceTypes[$type])) { $message = sprintf('one of these existing services: "%s"', implode('", "', $this->ambiguousServiceTypes[$type])); } elseif (isset($this->types[$type])) { $message = sprintf('the existing "%s" service', $this->types[$type]); - } elseif ($reference->getRequiringClass() && !$reference->canBeAutoregistered() && !$this->strictMode) { - return ' It cannot be auto-registered because it is from a different root namespace.'; } else { return ''; } @@ -517,52 +486,17 @@ class AutowirePass extends AbstractRecursivePass return sprintf(' You should maybe alias this %s to %s.', class_exists($type, false) ? 'class' : 'interface', $message); } - /** - * @deprecated since version 3.3, to be removed in 4.0. - */ - private static function getResourceMetadataForMethod(\ReflectionMethod $method) - { - $methodArgumentsMetadata = []; - foreach ($method->getParameters() as $parameter) { - try { - if (method_exists($parameter, 'getType')) { - $type = $parameter->getType(); - if ($type && !$type->isBuiltin()) { - $class = new \ReflectionClass($type instanceof \ReflectionNamedType ? $type->getName() : (string) $type); - } else { - $class = null; - } - } else { - $class = $parameter->getClass(); - } - } catch (\ReflectionException $e) { - // type-hint is against a non-existent class - $class = false; - } - - $isVariadic = method_exists($parameter, 'isVariadic') && $parameter->isVariadic(); - $methodArgumentsMetadata[] = [ - 'class' => $class, - 'isOptional' => $parameter->isOptional(), - 'defaultValue' => ($parameter->isOptional() && !$isVariadic) ? $parameter->getDefaultValue() : null, - ]; - } - - return $methodArgumentsMetadata; - } - - private function getAliasesSuggestionForType($type, $extraContext = null) + private function getAliasesSuggestionForType(ContainerBuilder $container, string $type): ?string { $aliases = []; foreach (class_parents($type) + class_implements($type) as $parent) { - if ($this->container->has($parent) && !$this->container->findDefinition($parent)->isAbstract()) { + if ($container->has($parent) && !$container->findDefinition($parent)->isAbstract()) { $aliases[] = $parent; } } - $extraContext = $extraContext ? ' '.$extraContext : ''; if (1 < $len = \count($aliases)) { - $message = sprintf('Try changing the type-hint%s to one of its parents: ', $extraContext); + $message = 'Try changing the type-hint to one of its parents: '; for ($i = 0, --$len; $i < $len; ++$i) { $message .= sprintf('%s "%s", ', class_exists($aliases[$i], false) ? 'class' : 'interface', $aliases[$i]); } @@ -572,7 +506,7 @@ class AutowirePass extends AbstractRecursivePass } if ($aliases) { - return sprintf('Try changing the type-hint%s to "%s" instead.', $extraContext, $aliases[0]); + return sprintf('Try changing the type-hint to "%s" instead.', $aliases[0]); } return null; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php index efb9df7b94318c0d9a9501eb6a8775571caa3c81..4e80bb4f4c0510ec8ea5892da1936eb0f6062b4a 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php @@ -35,8 +35,9 @@ class AutowireRequiredMethodsPass extends AbstractRecursivePass } $alreadyCalledMethods = []; + $withers = []; - foreach ($value->getMethodCalls() as list($method)) { + foreach ($value->getMethodCalls() as [$method]) { $alreadyCalledMethods[strtolower($method)] = true; } @@ -50,7 +51,11 @@ class AutowireRequiredMethodsPass extends AbstractRecursivePass while (true) { if (false !== $doc = $r->getDocComment()) { if (false !== stripos($doc, '@required') && preg_match('#(?:^/\*\*|\n\s*+\*)\s*+@required(?:\s|\*/$)#i', $doc)) { - $value->addMethodCall($reflectionMethod->name); + if (preg_match('#(?:^/\*\*|\n\s*+\*)\s*+@return\s++static[\s\*]#i', $doc)) { + $withers[] = [$reflectionMethod->name, [], true]; + } else { + $value->addMethodCall($reflectionMethod->name, []); + } break; } if (false === stripos($doc, '@inheritdoc') || !preg_match('#(?:^/\*\*|\n\s*+\*)\s*+(?:\{@inheritdoc\}|@inheritdoc)(?:\s|\*/$)#i', $doc)) { @@ -65,6 +70,15 @@ class AutowireRequiredMethodsPass extends AbstractRecursivePass } } + if ($withers) { + // Prepend withers to prevent creating circular loops + $setters = $value->getMethodCalls(); + $value->setMethodCalls($withers); + foreach ($setters as $call) { + $value->addMethodCall($call[0], $call[1], $call[2] ?? false); + } + } + return $value; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php index 30a6f524ade46e84e48c13c8831c10ec691c567f..557e6af628165806bd1a2eb5af818b761ee8e7e4 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php @@ -24,7 +24,7 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass { private $throwExceptions; - public function __construct($throwExceptions = true) + public function __construct(bool $throwExceptions = true) { $this->throwExceptions = $throwExceptions; } @@ -39,7 +39,13 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass } $i = 0; + $hasNamedArgs = false; foreach ($value->getArguments() as $k => $v) { + if (\PHP_VERSION_ID >= 80000 && preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $k)) { + $hasNamedArgs = true; + continue; + } + if ($k !== $i++) { if (!\is_int($k)) { $msg = sprintf('Invalid constructor argument for service "%s": integer expected but found string "%s". Check your service definition.', $this->currentId, $k); @@ -57,11 +63,27 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass throw new RuntimeException($msg); } } + + if ($hasNamedArgs) { + $msg = sprintf('Invalid constructor argument for service "%s": cannot use positional argument after named argument. Check your service definition.', $this->currentId); + $value->addError($msg); + if ($this->throwExceptions) { + throw new RuntimeException($msg); + } + + break; + } } foreach ($value->getMethodCalls() as $methodCall) { $i = 0; + $hasNamedArgs = false; foreach ($methodCall[1] as $k => $v) { + if (\PHP_VERSION_ID >= 80000 && preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $k)) { + $hasNamedArgs = true; + continue; + } + if ($k !== $i++) { if (!\is_int($k)) { $msg = sprintf('Invalid argument for method call "%s" of service "%s": integer expected but found string "%s". Check your service definition.', $methodCall[0], $this->currentId, $k); @@ -79,6 +101,16 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass throw new RuntimeException($msg); } } + + if ($hasNamedArgs) { + $msg = sprintf('Invalid argument for method call "%s" of service "%s": cannot use positional argument after named argument. Check your service definition.', $methodCall[0], $this->currentId); + $value->addError($msg); + if ($this->throwExceptions) { + throw new RuntimeException($msg); + } + + break; + } } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php index 4b6d277fe997974ca2dfd699e32d2db5334eb57f..7abac908f5a016a3a2b32979f51624e1765d5cb8 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php @@ -14,6 +14,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\EnvParameterException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Loader\FileLoader; /** * This pass validates each definition individually only taking the information @@ -38,17 +39,17 @@ class CheckDefinitionValidityPass implements CompilerPassInterface { foreach ($container->getDefinitions() as $id => $definition) { // synthetic service is public - if ($definition->isSynthetic() && !($definition->isPublic() || $definition->isPrivate())) { + if ($definition->isSynthetic() && !$definition->isPublic()) { throw new RuntimeException(sprintf('A synthetic service ("%s") must be public.', $id)); } // non-synthetic, non-abstract service has class - if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass()) { + if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass() && (!$definition->getFactory() || !preg_match(FileLoader::ANONYMOUS_ID_REGEXP, $id))) { if ($definition->getFactory()) { throw new RuntimeException(sprintf('Please add the class to service "%s" even if it is constructed by a factory since we might need to add method calls based on compile-time checks.', $id)); } if (class_exists($id) || interface_exists($id, false)) { - if (0 === strpos($id, '\\') && 1 < substr_count($id, '\\')) { + if (str_starts_with($id, '\\') && 1 < substr_count($id, '\\')) { throw new RuntimeException(sprintf('The definition for "%s" has no class attribute, and appears to reference a class or interface. Please specify the class attribute explicitly or remove the leading backslash by renaming the service to "%s" to get rid of this error.', $id, substr($id, 1))); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php index 77b35f1866a9c8e1deac781a6737a6874cd18652..eef71587cdd46e81eba8064775b139dc95c3531f 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php @@ -11,6 +11,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\Reference; @@ -22,15 +23,66 @@ use Symfony\Component\DependencyInjection\Reference; */ class CheckExceptionOnInvalidReferenceBehaviorPass extends AbstractRecursivePass { + private $serviceLocatorContextIds = []; + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + $this->serviceLocatorContextIds = []; + foreach ($container->findTaggedServiceIds('container.service_locator_context') as $id => $tags) { + $this->serviceLocatorContextIds[$id] = $tags[0]['id']; + $container->getDefinition($id)->clearTag('container.service_locator_context'); + } + + try { + return parent::process($container); + } finally { + $this->serviceLocatorContextIds = []; + } + } + protected function processValue($value, $isRoot = false) { if (!$value instanceof Reference) { return parent::processValue($value, $isRoot); } - if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE === $value->getInvalidBehavior() && !$this->container->has($id = (string) $value)) { - throw new ServiceNotFoundException($id, $this->currentId); + if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE < $value->getInvalidBehavior() || $this->container->has($id = (string) $value)) { + return $value; + } + + $currentId = $this->currentId; + $graph = $this->container->getCompiler()->getServiceReferenceGraph(); + + if (isset($this->serviceLocatorContextIds[$currentId])) { + $currentId = $this->serviceLocatorContextIds[$currentId]; + $locator = $this->container->getDefinition($this->currentId)->getFactory()[0]; + + foreach ($locator->getArgument(0) as $k => $v) { + if ($v->getValues()[0] === $value) { + if ($k !== $id) { + $currentId = $k.'" in the container provided to "'.$currentId; + } + throw new ServiceNotFoundException($id, $currentId); + } + } + } + + if ('.' === $currentId[0] && $graph->hasNode($currentId)) { + foreach ($graph->getNode($currentId)->getInEdges() as $edge) { + if (!$edge->getValue() instanceof Reference || ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE < $edge->getValue()->getInvalidBehavior()) { + continue; + } + $sourceId = $edge->getSourceNode()->getId(); + + if ('.' !== $sourceId[0]) { + $currentId = $sourceId; + break; + } + } } - return $value; + throw new ServiceNotFoundException($id, $currentId); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php new file mode 100644 index 0000000000000000000000000000000000000000..ca10af65cd896420bf4e2bd7e85c3d17d39ddd0b --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php @@ -0,0 +1,329 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Container; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\InvalidParameterTypeException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\ExpressionLanguage; +use Symfony\Component\DependencyInjection\Parameter; +use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\ServiceLocator; +use Symfony\Component\ExpressionLanguage\Expression; + +/** + * Checks whether injected parameters are compatible with type declarations. + * + * This pass should be run after all optimization passes. + * + * It can be added either: + * * before removing passes to check all services even if they are not currently used, + * * after removing passes to check only services are used in the app. + * + * @author Nicolas Grekas <p@tchwork.com> + * @author Julien Maulny <jmaulny@darkmira.fr> + */ +final class CheckTypeDeclarationsPass extends AbstractRecursivePass +{ + private const SCALAR_TYPES = [ + 'int' => true, + 'float' => true, + 'bool' => true, + 'string' => true, + ]; + + private const BUILTIN_TYPES = [ + 'array' => true, + 'bool' => true, + 'callable' => true, + 'float' => true, + 'int' => true, + 'iterable' => true, + 'object' => true, + 'string' => true, + ]; + + private $autoload; + private $skippedIds; + + private $expressionLanguage; + + /** + * @param bool $autoload Whether services who's class in not loaded should be checked or not. + * Defaults to false to save loading code during compilation. + * @param array $skippedIds An array indexed by the service ids to skip + */ + public function __construct(bool $autoload = false, array $skippedIds = []) + { + $this->autoload = $autoload; + $this->skippedIds = $skippedIds; + } + + /** + * {@inheritdoc} + */ + protected function processValue($value, $isRoot = false) + { + if (isset($this->skippedIds[$this->currentId])) { + return $value; + } + + if (!$value instanceof Definition || $value->hasErrors() || $value->isDeprecated()) { + return parent::processValue($value, $isRoot); + } + + if (!$this->autoload) { + if (!$class = $value->getClass()) { + return parent::processValue($value, $isRoot); + } + if (!class_exists($class, false) && !interface_exists($class, false)) { + return parent::processValue($value, $isRoot); + } + } + + if (ServiceLocator::class === $value->getClass()) { + return parent::processValue($value, $isRoot); + } + + if ($constructor = $this->getConstructor($value, false)) { + $this->checkTypeDeclarations($value, $constructor, $value->getArguments()); + } + + foreach ($value->getMethodCalls() as $methodCall) { + try { + $reflectionMethod = $this->getReflectionMethod($value, $methodCall[0]); + } catch (RuntimeException $e) { + if ($value->getFactory()) { + continue; + } + + throw $e; + } + + $this->checkTypeDeclarations($value, $reflectionMethod, $methodCall[1]); + } + + return parent::processValue($value, $isRoot); + } + + /** + * @throws InvalidArgumentException When not enough parameters are defined for the method + */ + private function checkTypeDeclarations(Definition $checkedDefinition, \ReflectionFunctionAbstract $reflectionFunction, array $values): void + { + $numberOfRequiredParameters = $reflectionFunction->getNumberOfRequiredParameters(); + + if (\count($values) < $numberOfRequiredParameters) { + throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": "%s::%s()" requires %d arguments, %d passed.', $this->currentId, $reflectionFunction->class, $reflectionFunction->name, $numberOfRequiredParameters, \count($values))); + } + + $reflectionParameters = $reflectionFunction->getParameters(); + $checksCount = min($reflectionFunction->getNumberOfParameters(), \count($values)); + + $envPlaceholderUniquePrefix = $this->container->getParameterBag() instanceof EnvPlaceholderParameterBag ? $this->container->getParameterBag()->getEnvPlaceholderUniquePrefix() : null; + + for ($i = 0; $i < $checksCount; ++$i) { + if (!$reflectionParameters[$i]->hasType() || $reflectionParameters[$i]->isVariadic()) { + continue; + } + + $this->checkType($checkedDefinition, $values[$i], $reflectionParameters[$i], $envPlaceholderUniquePrefix); + } + + if ($reflectionFunction->isVariadic() && ($lastParameter = end($reflectionParameters))->hasType()) { + $variadicParameters = \array_slice($values, $lastParameter->getPosition()); + + foreach ($variadicParameters as $variadicParameter) { + $this->checkType($checkedDefinition, $variadicParameter, $lastParameter, $envPlaceholderUniquePrefix); + } + } + } + + /** + * @throws InvalidParameterTypeException When a parameter is not compatible with the declared type + */ + private function checkType(Definition $checkedDefinition, $value, \ReflectionParameter $parameter, ?string $envPlaceholderUniquePrefix, \ReflectionType $reflectionType = null): void + { + $reflectionType = $reflectionType ?? $parameter->getType(); + + if ($reflectionType instanceof \ReflectionUnionType) { + foreach ($reflectionType->getTypes() as $t) { + try { + $this->checkType($checkedDefinition, $value, $parameter, $envPlaceholderUniquePrefix, $t); + + return; + } catch (InvalidParameterTypeException $e) { + } + } + + throw new InvalidParameterTypeException($this->currentId, $e->getCode(), $parameter); + } + if ($reflectionType instanceof \ReflectionIntersectionType) { + foreach ($reflectionType->getTypes() as $t) { + $this->checkType($checkedDefinition, $value, $parameter, $envPlaceholderUniquePrefix, $t); + } + + return; + } + if (!$reflectionType instanceof \ReflectionNamedType) { + return; + } + + $type = $reflectionType->getName(); + + if ($value instanceof Reference) { + if (!$this->container->has($value = (string) $value)) { + return; + } + + if ('service_container' === $value && is_a($type, Container::class, true)) { + return; + } + + $value = $this->container->findDefinition($value); + } + + if ('self' === $type) { + $type = $parameter->getDeclaringClass()->getName(); + } + + if ('static' === $type) { + $type = $checkedDefinition->getClass(); + } + + $class = null; + + if ($value instanceof Definition) { + if ($value->getFactory()) { + return; + } + + $class = $value->getClass(); + + if ($class && isset(self::BUILTIN_TYPES[strtolower($class)])) { + $class = strtolower($class); + } elseif (!$class || (!$this->autoload && !class_exists($class, false) && !interface_exists($class, false))) { + return; + } + } elseif ($value instanceof Parameter) { + $value = $this->container->getParameter($value); + } elseif ($value instanceof Expression) { + try { + $value = $this->getExpressionLanguage()->evaluate($value, ['container' => $this->container]); + } catch (\Exception $e) { + // If a service from the expression cannot be fetched from the container, we skip the validation. + return; + } + } elseif (\is_string($value)) { + if ('%' === ($value[0] ?? '') && preg_match('/^%([^%]+)%$/', $value, $match)) { + $value = $this->container->getParameter(substr($value, 1, -1)); + } + + if ($envPlaceholderUniquePrefix && \is_string($value) && str_contains($value, 'env_')) { + // If the value is an env placeholder that is either mixed with a string or with another env placeholder, then its resolved value will always be a string, so we don't need to resolve it. + // We don't need to change the value because it is already a string. + if ('' === preg_replace('/'.$envPlaceholderUniquePrefix.'_\w+_[a-f0-9]{32}/U', '', $value, -1, $c) && 1 === $c) { + try { + $value = $this->container->resolveEnvPlaceholders($value, true); + } catch (\Exception $e) { + // If an env placeholder cannot be resolved, we skip the validation. + return; + } + } + } + } + + if (null === $value && $parameter->allowsNull()) { + return; + } + + if (null === $class) { + if ($value instanceof IteratorArgument) { + $class = RewindableGenerator::class; + } elseif ($value instanceof ServiceClosureArgument) { + $class = \Closure::class; + } elseif ($value instanceof ServiceLocatorArgument) { + $class = ServiceLocator::class; + } elseif (\is_object($value)) { + $class = \get_class($value); + } else { + $class = \gettype($value); + $class = ['integer' => 'int', 'double' => 'float', 'boolean' => 'bool'][$class] ?? $class; + } + } + + if (isset(self::SCALAR_TYPES[$type]) && isset(self::SCALAR_TYPES[$class])) { + return; + } + + if ('string' === $type && method_exists($class, '__toString')) { + return; + } + + if ('callable' === $type && (\Closure::class === $class || method_exists($class, '__invoke'))) { + return; + } + + if ('callable' === $type && \is_array($value) && isset($value[0]) && ($value[0] instanceof Reference || $value[0] instanceof Definition || \is_string($value[0]))) { + return; + } + + if ('iterable' === $type && (\is_array($value) || 'array' === $class || is_subclass_of($class, \Traversable::class))) { + return; + } + + if ($type === $class) { + return; + } + + if ('object' === $type && !isset(self::BUILTIN_TYPES[$class])) { + return; + } + + if ('mixed' === $type) { + return; + } + + if (is_a($class, $type, true)) { + return; + } + + if ('false' === $type) { + if (false === $value) { + return; + } + } elseif ($reflectionType->isBuiltin()) { + $checkFunction = sprintf('is_%s', $type); + if ($checkFunction($value)) { + return; + } + } + + throw new InvalidParameterTypeException($this->currentId, \is_object($value) ? $class : \gettype($value), $parameter); + } + + private function getExpressionLanguage(): ExpressionLanguage + { + if (null === $this->expressionLanguage) { + $this->expressionLanguage = new ExpressionLanguage(null, $this->container->getExpressionLanguageProviders()); + } + + return $this->expressionLanguage; + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php b/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php index 0eb9d03664375c1e85d27b186aa2a65e3e2096de..224ff6b1ea0c03893c8d1837c2703c4a0dfcd2bd 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/Compiler.php @@ -23,7 +23,6 @@ class Compiler { private $passConfig; private $log = []; - private $loggingFormatter; private $serviceReferenceGraph; public function __construct() @@ -52,68 +51,23 @@ class Compiler return $this->serviceReferenceGraph; } - /** - * Returns the logging formatter which can be used by compilation passes. - * - * @return LoggingFormatter - * - * @deprecated since version 3.3, to be removed in 4.0. Use the ContainerBuilder::log() method instead. - */ - public function getLoggingFormatter() - { - if (null === $this->loggingFormatter) { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->loggingFormatter = new LoggingFormatter(); - } - - return $this->loggingFormatter; - } - /** * Adds a pass to the PassConfig. * - * @param CompilerPassInterface $pass A compiler pass - * @param string $type The type of the pass + * @param string $type The type of the pass + * @param int $priority Used to sort the passes */ - public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) + public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0) { - if (\func_num_args() >= 3) { - $priority = func_get_arg(2); - } else { - if (__CLASS__ !== static::class) { - $r = new \ReflectionMethod($this, __FUNCTION__); - if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); - } - } - - $priority = 0; - } - $this->passConfig->addPass($pass, $type, $priority); } - /** - * Adds a log message. - * - * @param string $string The log message - * - * @deprecated since version 3.3, to be removed in 4.0. Use the ContainerBuilder::log() method instead. - */ - public function addLogMessage($string) - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->log[] = $string; - } - /** * @final */ - public function log(CompilerPassInterface $pass, $message) + public function log(CompilerPassInterface $pass, string $message) { - if (false !== strpos($message, "\n")) { + if (str_contains($message, "\n")) { $message = str_replace("\n", "\n".\get_class($pass).': ', trim($message)); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php index bf5f91578fa3fdff34a785aa41bd323c6e9915a2..3b8086d0931e6c38844e07a886d1c6fb73bf39ef 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php @@ -13,6 +13,10 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use Symfony\Component\DependencyInjection\Reference; /** * Overwrites a service but keeps the overridden one. @@ -36,14 +40,22 @@ class DecoratorServicePass implements CompilerPassInterface } $decoratingDefinitions = []; - foreach ($definitions as list($id, $definition)) { - list($inner, $renamedId) = $definition->getDecoratedService(); + $tagsToKeep = $container->hasParameter('container.behavior_describing_tags') + ? $container->getParameter('container.behavior_describing_tags') + : ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber']; + + foreach ($definitions as [$id, $definition]) { + $decoratedService = $definition->getDecoratedService(); + [$inner, $renamedId] = $decoratedService; + $invalidBehavior = $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; $definition->setDecoratedService(null); if (!$renamedId) { $renamedId = $id.'.inner'; } + $definition->innerServiceId = $renamedId; + $definition->decorationOnInvalid = $invalidBehavior; // we create a new alias/service for the service we are replacing // to be able to reference it in the new one @@ -51,27 +63,46 @@ class DecoratorServicePass implements CompilerPassInterface $alias = $container->getAlias($inner); $public = $alias->isPublic(); $private = $alias->isPrivate(); - $container->setAlias($renamedId, new Alias($container->normalizeId($alias), false)); - } else { + $container->setAlias($renamedId, new Alias((string) $alias, false)); + $decoratedDefinition = $container->findDefinition($alias); + } elseif ($container->hasDefinition($inner)) { $decoratedDefinition = $container->getDefinition($inner); $public = $decoratedDefinition->isPublic(); $private = $decoratedDefinition->isPrivate(); $decoratedDefinition->setPublic(false); $container->setDefinition($renamedId, $decoratedDefinition); $decoratingDefinitions[$inner] = $decoratedDefinition; + } elseif (ContainerInterface::IGNORE_ON_INVALID_REFERENCE === $invalidBehavior) { + $container->removeDefinition($id); + continue; + } elseif (ContainerInterface::NULL_ON_INVALID_REFERENCE === $invalidBehavior) { + $public = $definition->isPublic(); + $private = $definition->isPrivate(); + $decoratedDefinition = null; + } else { + throw new ServiceNotFoundException($inner, $id); + } + + if ($decoratedDefinition && $decoratedDefinition->isSynthetic()) { + throw new InvalidArgumentException(sprintf('A synthetic service cannot be decorated: service "%s" cannot decorate "%s".', $id, $inner)); } if (isset($decoratingDefinitions[$inner])) { $decoratingDefinition = $decoratingDefinitions[$inner]; - $definition->setTags(array_merge($decoratingDefinition->getTags(), $definition->getTags())); - $autowiringTypes = $decoratingDefinition->getAutowiringTypes(false); - if ($types = array_merge($autowiringTypes, $definition->getAutowiringTypes(false))) { - $definition->setAutowiringTypes($types); - } - $decoratingDefinition->setTags([]); - if ($autowiringTypes) { - $decoratingDefinition->setAutowiringTypes([]); + + $decoratingTags = $decoratingDefinition->getTags(); + $resetTags = []; + + // Behavior-describing tags must not be transferred out to decorators + foreach ($tagsToKeep as $containerTag) { + if (isset($decoratingTags[$containerTag])) { + $resetTags[$containerTag] = $decoratingTags[$containerTag]; + unset($decoratingTags[$containerTag]); + } } + + $definition->setTags(array_merge($decoratingTags, $definition->getTags())); + $decoratingDefinition->setTags($resetTags); $decoratingDefinitions[$inner] = $definition; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php index 73b5d1d57d5825fa2168ac7bf67f14b88d55f2a9..5ee0ff1f491cc003706ab9b7f1c4661f5b64e823 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php @@ -11,8 +11,10 @@ namespace Symfony\Component\DependencyInjection\Compiler; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Reference; /** * Throws an exception for any Definitions that have errors and still exist. @@ -26,10 +28,25 @@ class DefinitionErrorExceptionPass extends AbstractRecursivePass */ protected function processValue($value, $isRoot = false) { - if (!$value instanceof Definition || empty($value->getErrors())) { + if (!$value instanceof Definition || !$value->hasErrors()) { return parent::processValue($value, $isRoot); } + if ($isRoot && !$value->isPublic()) { + $graph = $this->container->getCompiler()->getServiceReferenceGraph(); + $runtimeException = false; + foreach ($graph->getNode($this->currentId)->getInEdges() as $edge) { + if (!$edge->getValue() instanceof Reference || ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE !== $edge->getValue()->getInvalidBehavior()) { + $runtimeException = false; + break; + } + $runtimeException = true; + } + if ($runtimeException) { + return parent::processValue($value, $isRoot); + } + } + // only show the first error so the user can focus on it $errors = $value->getErrors(); $message = reset($errors); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php deleted file mode 100644 index 67575c03f3f56d24a2f88768906f842ee97dbf10..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Reference; - -/** - * @author Guilhem N. <egetick@gmail.com> - * - * @deprecated since version 3.3, to be removed in 4.0. - */ -class FactoryReturnTypePass implements CompilerPassInterface -{ - private $resolveClassPass; - - public function __construct(ResolveClassPass $resolveClassPass = null) - { - if (null === $resolveClassPass) { - @trigger_error('The '.__CLASS__.' class is deprecated since Symfony 3.3 and will be removed in 4.0.', \E_USER_DEPRECATED); - } - $this->resolveClassPass = $resolveClassPass; - } - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - // works only since php 7.0 and hhvm 3.11 - if (!method_exists(\ReflectionMethod::class, 'getReturnType')) { - return; - } - $resolveClassPassChanges = null !== $this->resolveClassPass ? $this->resolveClassPass->getChanges() : []; - - foreach ($container->getDefinitions() as $id => $definition) { - $this->updateDefinition($container, $id, $definition, $resolveClassPassChanges); - } - } - - private function updateDefinition(ContainerBuilder $container, $id, Definition $definition, array $resolveClassPassChanges, array $previous = []) - { - // circular reference - if (isset($previous[$id])) { - return; - } - - $factory = $definition->getFactory(); - if (null === $factory || (!isset($resolveClassPassChanges[$id]) && null !== $definition->getClass())) { - return; - } - - $class = null; - if (\is_string($factory)) { - try { - $m = new \ReflectionFunction($factory); - if (false !== $m->getFileName() && file_exists($m->getFileName())) { - $container->fileExists($m->getFileName()); - } - } catch (\ReflectionException $e) { - return; - } - } else { - if ($factory[0] instanceof Reference) { - $previous[$id] = true; - $factoryId = $container->normalizeId($factory[0]); - $factoryDefinition = $container->findDefinition($factoryId); - $this->updateDefinition($container, $factoryId, $factoryDefinition, $resolveClassPassChanges, $previous); - $class = $factoryDefinition->getClass(); - } else { - $class = $factory[0]; - } - - if (!$m = $container->getReflectionClass($class, false)) { - return; - } - try { - $m = $m->getMethod($factory[1]); - } catch (\ReflectionException $e) { - return; - } - } - - $returnType = $m->getReturnType(); - if (null !== $returnType && !$returnType->isBuiltin()) { - $returnType = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType; - if (null !== $class) { - $declaringClass = $m->getDeclaringClass()->getName(); - if ('self' === strtolower($returnType)) { - $returnType = $declaringClass; - } elseif ('parent' === strtolower($returnType)) { - $returnType = get_parent_class($declaringClass) ?: null; - } - } - - if (null !== $returnType && (!isset($resolveClassPassChanges[$id]) || $returnType !== $resolveClassPassChanges[$id])) { - @trigger_error(sprintf('Relying on its factory\'s return-type to define the class of service "%s" is deprecated since Symfony 3.3 and won\'t work in 4.0. Set the "class" attribute to "%s" on the service definition instead.', $id, $returnType), \E_USER_DEPRECATED); - } - $definition->setClass($returnType); - } - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php index 9d8a02e7bd0344642faeec71383af7b8da5d26a7..7935983ff5c2eccf068f5e4edd3a2f517065cf6f 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php @@ -12,6 +12,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\Reference; @@ -23,31 +24,98 @@ use Symfony\Component\DependencyInjection\Reference; */ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements RepeatablePassInterface { + private $analyzingPass; + private $repeatedPass; private $cloningIds = []; - private $inlinedServiceIds = []; + private $connectedIds = []; + private $notInlinedIds = []; + private $inlinedIds = []; + private $notInlinableIds = []; + private $graph; + + public function __construct(AnalyzeServiceReferencesPass $analyzingPass = null) + { + $this->analyzingPass = $analyzingPass; + } /** * {@inheritdoc} */ public function setRepeatedPass(RepeatedPass $repeatedPass) { - // no-op for BC + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); + $this->repeatedPass = $repeatedPass; } - /** - * Returns an array of all services inlined by this pass. - * - * The key is the inlined service id and its value is the list of services it was inlined into. - * - * @deprecated since version 3.4, to be removed in 4.0. - * - * @return array - */ - public function getInlinedServiceIds() + public function process(ContainerBuilder $container) { - @trigger_error('Calling InlineServiceDefinitionsPass::getInlinedServiceIds() is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED); + $this->container = $container; + if ($this->analyzingPass) { + $analyzedContainer = new ContainerBuilder(); + $analyzedContainer->setAliases($container->getAliases()); + $analyzedContainer->setDefinitions($container->getDefinitions()); + foreach ($container->getExpressionLanguageProviders() as $provider) { + $analyzedContainer->addExpressionLanguageProvider($provider); + } + } else { + $analyzedContainer = $container; + } + try { + $remainingInlinedIds = []; + $this->connectedIds = $this->notInlinedIds = $container->getDefinitions(); + do { + if ($this->analyzingPass) { + $analyzedContainer->setDefinitions(array_intersect_key($analyzedContainer->getDefinitions(), $this->connectedIds)); + $this->analyzingPass->process($analyzedContainer); + } + $this->graph = $analyzedContainer->getCompiler()->getServiceReferenceGraph(); + $notInlinedIds = $this->notInlinedIds; + $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; + + foreach ($analyzedContainer->getDefinitions() as $id => $definition) { + if (!$this->graph->hasNode($id)) { + continue; + } + foreach ($this->graph->getNode($id)->getOutEdges() as $edge) { + if (isset($notInlinedIds[$edge->getSourceNode()->getId()])) { + $this->currentId = $id; + $this->processValue($definition, true); + break; + } + } + } + + foreach ($this->inlinedIds as $id => $isPublicOrNotShared) { + if ($isPublicOrNotShared) { + $remainingInlinedIds[$id] = $id; + } else { + $container->removeDefinition($id); + $analyzedContainer->removeDefinition($id); + } + } + } while ($this->inlinedIds && $this->analyzingPass); + + if ($this->inlinedIds && $this->repeatedPass) { + $this->repeatedPass->setRepeat(); + } + + foreach ($remainingInlinedIds as $id) { + if (isset($this->notInlinableIds[$id])) { + continue; + } + + $definition = $container->getDefinition($id); - return $this->inlinedServiceIds; + if (!$definition->isShared() && !$definition->isPublic()) { + $container->removeDefinition($id); + } + } + } finally { + $this->container = null; + $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; + $this->notInlinableIds = []; + $this->graph = null; + } } /** @@ -56,7 +124,7 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements Repe protected function processValue($value, $isRoot = false) { if ($value instanceof ArgumentInterface) { - // Reference found in ArgumentInterface::getValues() are not inlineable + // References found in ArgumentInterface::getValues() are not inlineable return $value; } @@ -67,18 +135,23 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements Repe $value = clone $value; } - if (!$value instanceof Reference || !$this->container->hasDefinition($id = $this->container->normalizeId($value))) { + if (!$value instanceof Reference) { return parent::processValue($value, $isRoot); + } elseif (!$this->container->hasDefinition($id = (string) $value)) { + return $value; } $definition = $this->container->getDefinition($id); - if (!$this->isInlineableDefinition($id, $definition, $this->container->getCompiler()->getServiceReferenceGraph())) { + if (!$this->isInlineableDefinition($id, $definition)) { + $this->notInlinableIds[$id] = true; + return $value; } $this->container->log($this, sprintf('Inlined service "%s" to "%s".', $id, $this->currentId)); - $this->inlinedServiceIds[$id][] = $this->currentId; + $this->inlinedIds[$id] = $definition->isPublic() || !$definition->isShared(); + $this->notInlinedIds[$this->currentId] = true; if ($definition->isShared()) { return $definition; @@ -101,53 +174,64 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements Repe /** * Checks if the definition is inlineable. - * - * @return bool If the definition is inlineable */ - private function isInlineableDefinition($id, Definition $definition, ServiceReferenceGraph $graph) + private function isInlineableDefinition(string $id, Definition $definition): bool { - if ($definition->getErrors() || $definition->isDeprecated() || $definition->isLazy() || $definition->isSynthetic()) { + if ($definition->hasErrors() || $definition->isDeprecated() || $definition->isLazy() || $definition->isSynthetic() || $definition->hasTag('container.do_not_inline')) { return false; } if (!$definition->isShared()) { + if (!$this->graph->hasNode($id)) { + return true; + } + + foreach ($this->graph->getNode($id)->getInEdges() as $edge) { + $srcId = $edge->getSourceNode()->getId(); + $this->connectedIds[$srcId] = true; + if ($edge->isWeak() || $edge->isLazy()) { + return !$this->connectedIds[$id] = true; + } + } + return true; } - if ($definition->isPublic() || $definition->isPrivate()) { + if ($definition->isPublic()) { return false; } - if (!$graph->hasNode($id)) { + if (!$this->graph->hasNode($id)) { return true; } if ($this->currentId == $id) { return false; } + $this->connectedIds[$id] = true; - $ids = []; - $isReferencedByConstructor = false; - foreach ($graph->getNode($id)->getInEdges() as $edge) { - $isReferencedByConstructor = $isReferencedByConstructor || $edge->isReferencedByConstructor(); + $srcIds = []; + $srcCount = 0; + foreach ($this->graph->getNode($id)->getInEdges() as $edge) { + $srcId = $edge->getSourceNode()->getId(); + $this->connectedIds[$srcId] = true; if ($edge->isWeak() || $edge->isLazy()) { return false; } - $ids[] = $edge->getSourceNode()->getId(); + $srcIds[$srcId] = true; + ++$srcCount; } - if (!$ids) { - return true; - } + if (1 !== \count($srcIds)) { + $this->notInlinedIds[$id] = true; - if (\count(array_unique($ids)) > 1) { return false; } - if (\count($ids) > 1 && \is_array($factory = $definition->getFactory()) && ($factory[0] instanceof Reference || $factory[0] instanceof Definition)) { + if ($srcCount > 1 && \is_array($factory = $definition->getFactory()) && ($factory[0] instanceof Reference || $factory[0] instanceof Definition)) { return false; } - return $this->container->getDefinition($ids[0])->isShared(); + return $this->container->getDefinition($srcId)->isShared(); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php b/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php deleted file mode 100644 index 0d91f00f7eb5aad8e9bb934d63ae7d3a5ce6835f..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/LoggingFormatter.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -@trigger_error('The '.__NAMESPACE__.'\LoggingFormatter class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', \E_USER_DEPRECATED); - -/** - * Used to format logging messages during the compilation. - * - * @author Johannes M. Schmitt <schmittjoh@gmail.com> - * - * @deprecated since version 3.3, to be removed in 4.0. Use the ContainerBuilder::log() method instead. - */ -class LoggingFormatter -{ - public function formatRemoveService(CompilerPassInterface $pass, $id, $reason) - { - return $this->format($pass, sprintf('Removed service "%s"; reason: %s.', $id, $reason)); - } - - public function formatInlineService(CompilerPassInterface $pass, $id, $target) - { - return $this->format($pass, sprintf('Inlined service "%s" to "%s".', $id, $target)); - } - - public function formatUpdateReference(CompilerPassInterface $pass, $serviceId, $oldDestId, $newDestId) - { - return $this->format($pass, sprintf('Changed reference of service "%s" previously pointing to "%s" to "%s".', $serviceId, $oldDestId, $newDestId)); - } - - public function formatResolveInheritance(CompilerPassInterface $pass, $childId, $parentId) - { - return $this->format($pass, sprintf('Resolving inheritance for "%s" (parent: %s).', $childId, $parentId)); - } - - public function formatUnusedAutowiringPatterns(CompilerPassInterface $pass, $id, array $patterns) - { - return $this->format($pass, sprintf('Autowiring\'s patterns "%s" for service "%s" don\'t match any method.', implode('", "', $patterns), $id)); - } - - public function format(CompilerPassInterface $pass, $message) - { - return sprintf('%s: %s', \get_class($pass), $message); - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php index caa1fd225167294715a96b0d27c50185be738094..0d20899e9c462c6d0cd49bda240a0774dde1a3ec 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php @@ -11,6 +11,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; +use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; @@ -37,6 +38,7 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface $definitions = $container->getDefinitions(); $aliases = $container->getAliases(); $exprLangProviders = $container->getExpressionLanguageProviders(); + $configAvailable = class_exists(BaseNode::class); foreach ($container->getExtensions() as $extension) { if ($extension instanceof PrependExtensionInterface) { @@ -53,6 +55,9 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface if ($resolvingBag instanceof EnvPlaceholderParameterBag && $extension instanceof Extension) { // create a dedicated bag so that we can track env vars per-extension $resolvingBag = new MergeExtensionConfigurationParameterBag($resolvingBag); + if ($configAvailable) { + BaseNode::setPlaceholderUniquePrefix($resolvingBag->getEnvPlaceholderUniquePrefix()); + } } $config = $resolvingBag->resolveValue($config); @@ -128,9 +133,14 @@ class MergeExtensionConfigurationParameterBag extends EnvPlaceholderParameterBag /** * {@inheritdoc} */ - public function getEnvPlaceholders() + public function getEnvPlaceholders(): array + { + return $this->processedEnvPlaceholders ?? parent::getEnvPlaceholders(); + } + + public function getUnusedEnvPlaceholders(): array { - return null !== $this->processedEnvPlaceholders ? $this->processedEnvPlaceholders : parent::getEnvPlaceholders(); + return null === $this->processedEnvPlaceholders ? [] : array_diff_key(parent::getEnvPlaceholders(), $this->processedEnvPlaceholders); } } @@ -153,7 +163,7 @@ class MergeExtensionConfigurationContainerBuilder extends ContainerBuilder /** * {@inheritdoc} */ - public function addCompilerPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) + public function addCompilerPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0): self { throw new LogicException(sprintf('You cannot add compiler pass "%s" from extension "%s". Compiler passes must be registered before the container is compiled.', \get_class($pass), $this->extensionClass)); } @@ -169,7 +179,7 @@ class MergeExtensionConfigurationContainerBuilder extends ContainerBuilder /** * {@inheritdoc} */ - public function compile($resolveEnvPlaceholders = false) + public function compile(bool $resolveEnvPlaceholders = false) { throw new LogicException(sprintf('Cannot compile the container in extension "%s".', $this->extensionClass)); } @@ -191,7 +201,7 @@ class MergeExtensionConfigurationContainerBuilder extends ContainerBuilder } foreach ($bag->getEnvPlaceholders() as $env => $placeholders) { - if (false === strpos($env, ':')) { + if (!str_contains($env, ':')) { continue; } foreach ($placeholders as $placeholder) { diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php b/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php index d95b21988ca7190173065ba96d43cf4ea405466a..f02a88fcb089b262e7df2054d2a0b0bfc0fec15c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/PassConfig.php @@ -22,11 +22,11 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; */ class PassConfig { - const TYPE_AFTER_REMOVING = 'afterRemoving'; - const TYPE_BEFORE_OPTIMIZATION = 'beforeOptimization'; - const TYPE_BEFORE_REMOVING = 'beforeRemoving'; - const TYPE_OPTIMIZE = 'optimization'; - const TYPE_REMOVE = 'removing'; + public const TYPE_AFTER_REMOVING = 'afterRemoving'; + public const TYPE_BEFORE_OPTIMIZATION = 'beforeOptimization'; + public const TYPE_BEFORE_REMOVING = 'beforeRemoving'; + public const TYPE_OPTIMIZE = 'optimization'; + public const TYPE_REMOVE = 'removing'; private $mergePass; private $afterRemovingPasses = []; @@ -41,7 +41,7 @@ class PassConfig $this->beforeOptimizationPasses = [ 100 => [ - $resolveClassPass = new ResolveClassPass(), + new ResolveClassPass(), new ResolveInstanceofConditionalsPass(), new RegisterEnvVarProcessorsPass(), ], @@ -49,17 +49,17 @@ class PassConfig ]; $this->optimizationPasses = [[ + new ValidateEnvPlaceholdersPass(), new ResolveChildDefinitionsPass(), - new ServiceLocatorTagPass(), new RegisterServiceSubscribersPass(), - new DecoratorServicePass(), new ResolveParameterPlaceHoldersPass(false, false), new ResolveFactoryClassPass(), - new FactoryReturnTypePass($resolveClassPass), - new CheckDefinitionValidityPass(), new ResolveNamedArgumentsPass(), new AutowireRequiredMethodsPass(), new ResolveBindingsPass(), + new ServiceLocatorTagPass(), + new DecoratorServicePass(), + new CheckDefinitionValidityPass(), new AutowirePass(false), new ResolveTaggedIteratorArgumentPass(), new ResolveServiceSubscribersPass(), @@ -81,14 +81,15 @@ class PassConfig new RemovePrivateAliasesPass(), new ReplaceAliasByActualDefinitionPass(), new RemoveAbstractDefinitionsPass(), - new RepeatedPass([ - new AnalyzeServiceReferencesPass(), - new InlineServiceDefinitionsPass(), - new AnalyzeServiceReferencesPass(), - new RemoveUnusedDefinitionsPass(), - ]), - new DefinitionErrorExceptionPass(), + new RemoveUnusedDefinitionsPass(), + new AnalyzeServiceReferencesPass(), new CheckExceptionOnInvalidReferenceBehaviorPass(), + new InlineServiceDefinitionsPass(new AnalyzeServiceReferencesPass()), + new AnalyzeServiceReferencesPass(), + new DefinitionErrorExceptionPass(), + ]]; + + $this->afterRemovingPasses = [[ new ResolveHotPathPass(), ]]; } @@ -113,26 +114,13 @@ class PassConfig /** * Adds a pass. * - * @param CompilerPassInterface $pass A Compiler pass - * @param string $type The pass type + * @param string $type The pass type + * @param int $priority Used to sort the passes * * @throws InvalidArgumentException when a pass type doesn't exist */ - public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) + public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_OPTIMIZATION, int $priority = 0) { - if (\func_num_args() >= 3) { - $priority = func_get_arg(2); - } else { - if (__CLASS__ !== static::class) { - $r = new \ReflectionMethod($this, __FUNCTION__); - if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); - } - } - - $priority = 0; - } - $property = $type.'Passes'; if (!isset($this->$property)) { throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type)); @@ -268,7 +256,7 @@ class PassConfig * * @return CompilerPassInterface[] */ - private function sortPasses(array $passes) + private function sortPasses(array $passes): array { if (0 === \count($passes)) { return []; @@ -277,6 +265,6 @@ class PassConfig krsort($passes); // Flatten the array - return \call_user_func_array('array_merge', $passes); + return array_merge(...$passes); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php b/civicrm/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php index c7e12536eade6888fca9f74848d820e1ca4f87ef..f558927e487871021d36af33834faa09432d4632 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php @@ -11,8 +11,11 @@ namespace Symfony\Component\DependencyInjection\Compiler; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\TypedReference; /** * Trait that allows a generic method to find and sort service by priority option in the tag. @@ -31,24 +34,141 @@ trait PriorityTaggedServiceTrait * @see https://bugs.php.net/53710 * @see https://bugs.php.net/60926 * - * @param string $tagName + * @param string|TaggedIteratorArgument $tagName * * @return Reference[] */ - private function findAndSortTaggedServices($tagName, ContainerBuilder $container) + private function findAndSortTaggedServices($tagName, ContainerBuilder $container): array { + $indexAttribute = $defaultIndexMethod = $needsIndexes = $defaultPriorityMethod = null; + + if ($tagName instanceof TaggedIteratorArgument) { + $indexAttribute = $tagName->getIndexAttribute(); + $defaultIndexMethod = $tagName->getDefaultIndexMethod(); + $needsIndexes = $tagName->needsIndexes(); + $defaultPriorityMethod = $tagName->getDefaultPriorityMethod() ?? 'getDefaultPriority'; + $tagName = $tagName->getTag(); + } + + $i = 0; $services = []; foreach ($container->findTaggedServiceIds($tagName, true) as $serviceId => $attributes) { - $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0; - $services[$priority][] = new Reference($serviceId); + $defaultPriority = null; + $defaultIndex = null; + $class = $container->getDefinition($serviceId)->getClass(); + $class = $container->getParameterBag()->resolveValue($class) ?: null; + + foreach ($attributes as $attribute) { + $index = $priority = null; + + if (isset($attribute['priority'])) { + $priority = $attribute['priority']; + } elseif (null === $defaultPriority && $defaultPriorityMethod && $class) { + $defaultPriority = PriorityTaggedServiceUtil::getDefaultPriority($container, $serviceId, $class, $defaultPriorityMethod, $tagName); + } + $priority = $priority ?? $defaultPriority ?? $defaultPriority = 0; + + if (null === $indexAttribute && !$defaultIndexMethod && !$needsIndexes) { + $services[] = [$priority, ++$i, null, $serviceId, null]; + continue 2; + } + + if (null !== $indexAttribute && isset($attribute[$indexAttribute])) { + $index = $attribute[$indexAttribute]; + } elseif (null === $defaultIndex && $defaultPriorityMethod && $class) { + $defaultIndex = PriorityTaggedServiceUtil::getDefaultIndex($container, $serviceId, $class, $defaultIndexMethod ?? 'getDefaultName', $tagName, $indexAttribute); + } + $index = $index ?? $defaultIndex ?? $defaultIndex = $serviceId; + + $services[] = [$priority, ++$i, $index, $serviceId, $class]; + } + } + + uasort($services, static function ($a, $b) { return $b[0] <=> $a[0] ?: $a[1] <=> $b[1]; }); + + $refs = []; + foreach ($services as [, , $index, $serviceId, $class]) { + if (!$class) { + $reference = new Reference($serviceId); + } elseif ($index === $serviceId) { + $reference = new TypedReference($serviceId, $class); + } else { + $reference = new TypedReference($serviceId, $class, ContainerBuilder::EXCEPTION_ON_INVALID_REFERENCE, $index); + } + + if (null === $index) { + $refs[] = $reference; + } else { + $refs[$index] = $reference; + } + } + + return $refs; + } +} + +/** + * @internal + */ +class PriorityTaggedServiceUtil +{ + /** + * Gets the index defined by the default index method. + */ + public static function getDefaultIndex(ContainerBuilder $container, string $serviceId, string $class, string $defaultIndexMethod, string $tagName, ?string $indexAttribute): ?string + { + if (!($r = $container->getReflectionClass($class)) || !$r->hasMethod($defaultIndexMethod)) { + return null; + } + + if (null !== $indexAttribute) { + $service = $class !== $serviceId ? sprintf('service "%s"', $serviceId) : 'on the corresponding service'; + $message = [sprintf('Either method "%s::%s()" should ', $class, $defaultIndexMethod), sprintf(' or tag "%s" on %s is missing attribute "%s".', $tagName, $service, $indexAttribute)]; + } else { + $message = [sprintf('Method "%s::%s()" should ', $class, $defaultIndexMethod), '.']; + } + + if (!($rm = $r->getMethod($defaultIndexMethod))->isStatic()) { + throw new InvalidArgumentException(implode('be static', $message)); + } + + if (!$rm->isPublic()) { + throw new InvalidArgumentException(implode('be public', $message)); + } + + $defaultIndex = $rm->invoke(null); + + if (!\is_string($defaultIndex)) { + throw new InvalidArgumentException(implode(sprintf('return a string (got "%s")', \gettype($defaultIndex)), $message)); + } + + return $defaultIndex; + } + + /** + * Gets the priority defined by the default priority method. + */ + public static function getDefaultPriority(ContainerBuilder $container, string $serviceId, string $class, string $defaultPriorityMethod, string $tagName): ?int + { + if (!($r = $container->getReflectionClass($class)) || !$r->hasMethod($defaultPriorityMethod)) { + return null; } - if ($services) { - krsort($services); - $services = \call_user_func_array('array_merge', $services); + if (!($rm = $r->getMethod($defaultPriorityMethod))->isStatic()) { + throw new InvalidArgumentException(sprintf('Either method "%s::%s()" should be static or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, $tagName, $serviceId)); + } + + if (!$rm->isPublic()) { + throw new InvalidArgumentException(sprintf('Either method "%s::%s()" should be public or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, $tagName, $serviceId)); + } + + $defaultPriority = $rm->invoke(null); + + if (!\is_int($defaultPriority)) { + throw new InvalidArgumentException(sprintf('Method "%s::%s()" should return an integer (got "%s") or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, \gettype($defaultPriority), $tagName, $serviceId)); } - return $services; + return $defaultPriority; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php index b4d0d0550613130530af2f0cc4afdb2c2bb788d3..251889ebedb3a1d97202850c3af71299cd9a318e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php @@ -11,14 +11,12 @@ namespace Symfony\Component\DependencyInjection\Compiler; -use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\EnvVarProcessor; use Symfony\Component\DependencyInjection\EnvVarProcessorInterface; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\DependencyInjection\ServiceLocator; /** * Creates the container.env_var_processors_locator service. @@ -27,7 +25,7 @@ use Symfony\Component\DependencyInjection\ServiceLocator; */ class RegisterEnvVarProcessorsPass implements CompilerPassInterface { - private static $allowedTypes = ['array', 'bool', 'float', 'int', 'string']; + private const ALLOWED_TYPES = ['array', 'bool', 'float', 'int', 'string']; public function process(ContainerBuilder $container) { @@ -41,7 +39,7 @@ class RegisterEnvVarProcessorsPass implements CompilerPassInterface throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, EnvVarProcessorInterface::class)); } foreach ($class::getProvidedTypes() as $prefix => $type) { - $processors[$prefix] = new ServiceClosureArgument(new Reference($id)); + $processors[$prefix] = new Reference($id); $types[$prefix] = self::validateProvidedTypes($type, $class); } } @@ -56,20 +54,19 @@ class RegisterEnvVarProcessorsPass implements CompilerPassInterface } if ($processors) { - $container->register('container.env_var_processors_locator', ServiceLocator::class) + $container->setAlias('container.env_var_processors_locator', (string) ServiceLocatorTagPass::register($container, $processors)) ->setPublic(true) - ->setArguments([$processors]) ; } } - private static function validateProvidedTypes($types, $class) + private static function validateProvidedTypes(string $types, string $class): array { $types = explode('|', $types); foreach ($types as $type) { - if (!\in_array($type, self::$allowedTypes)) { - throw new InvalidArgumentException(sprintf('Invalid type "%s" returned by "%s::getProvidedTypes()", expected one of "%s".', $type, $class, implode('", "', self::$allowedTypes))); + if (!\in_array($type, self::ALLOWED_TYPES)) { + throw new InvalidArgumentException(sprintf('Invalid type "%s" returned by "%s::getProvidedTypes()", expected one of "%s".', $type, $class, implode('", "', self::ALLOWED_TYPES))); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php new file mode 100644 index 0000000000000000000000000000000000000000..571eab3ef895f884c7f873c3f082c7a7ed24820a --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php @@ -0,0 +1,66 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; + +/** + * @author Nicolas Grekas <p@tchwork.com> + */ +class RegisterReverseContainerPass implements CompilerPassInterface +{ + private $beforeRemoving; + private $serviceId; + private $tagName; + + public function __construct(bool $beforeRemoving, string $serviceId = 'reverse_container', string $tagName = 'container.reversible') + { + $this->beforeRemoving = $beforeRemoving; + $this->serviceId = $serviceId; + $this->tagName = $tagName; + } + + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->serviceId)) { + return; + } + + $refType = $this->beforeRemoving ? ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE : ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + $services = []; + foreach ($container->findTaggedServiceIds($this->tagName) as $id => $tags) { + $services[$id] = new Reference($id, $refType); + } + + if ($this->beforeRemoving) { + // prevent inlining of the reverse container + $services[$this->serviceId] = new Reference($this->serviceId, $refType); + } + $locator = $container->getDefinition($this->serviceId)->getArgument(1); + + if ($locator instanceof Reference) { + $locator = $container->getDefinition((string) $locator); + } + if ($locator instanceof Definition) { + foreach ($services as $id => $ref) { + $services[$id] = new ServiceClosureArgument($ref); + } + $locator->replaceArgument(0, $services); + } else { + $locator->setValues($services); + } + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php index bf1387c04ed171b62fe6f9f7f23912cb26ff961e..b6d1ede4c5834a06e50a07373a5acc2d8a5f1cc8 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php @@ -11,12 +11,15 @@ namespace Symfony\Component\DependencyInjection\Compiler; +use Psr\Container\ContainerInterface as PsrContainerInterface; +use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\DependencyInjection\ServiceSubscriberInterface; use Symfony\Component\DependencyInjection\TypedReference; +use Symfony\Contracts\Service\ServiceProviderInterface; +use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * Compiler pass to register tagged services that require a service locator. @@ -65,7 +68,6 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass $class = $r->name; $subscriberMap = []; - $declaringClass = (new \ReflectionMethod($class, 'getSubscribedServices'))->class; foreach ($class::getSubscribedServices() as $key => $type) { if (!\is_string($type) || !preg_match('/^\??[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+$/', $type)) { @@ -75,8 +77,9 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass $type = substr($type, 1); $optionalBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE; } - if (\is_int($key)) { + if (\is_int($name = $key)) { $key = $type; + $name = null; } if (!isset($serviceMap[$key])) { if (!$autowire) { @@ -85,7 +88,20 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass $serviceMap[$key] = new Reference($type); } - $subscriberMap[$key] = new TypedReference($this->container->normalizeId($serviceMap[$key]), $type, $declaringClass, $optionalBehavior ?: ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE); + if ($name) { + if (false !== $i = strpos($name, '::get')) { + $name = lcfirst(substr($name, 5 + $i)); + } elseif (str_contains($name, '::')) { + $name = null; + } + } + + if (null !== $name && !$this->container->has($name) && !$this->container->has($type.' $'.$name)) { + $camelCaseName = lcfirst(str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $name)))); + $name = $this->container->has($type.' $'.$camelCaseName) ? $camelCaseName : $name; + } + + $subscriberMap[$key] = new TypedReference((string) $serviceMap[$key], $type, $optionalBehavior ?: ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $name); unset($serviceMap[$key]); } @@ -94,7 +110,14 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass throw new InvalidArgumentException(sprintf('Service %s not exist in the map returned by "%s::getSubscribedServices()" for service "%s".', $message, $class, $this->currentId)); } - $value->addTag('container.service_subscriber.locator', ['id' => (string) ServiceLocatorTagPass::register($this->container, $subscriberMap, $this->currentId)]); + $locatorRef = ServiceLocatorTagPass::register($this->container, $subscriberMap, $this->currentId); + + $value->addTag('container.service_subscriber.locator', ['id' => (string) $locatorRef]); + + $value->setBindings([ + PsrContainerInterface::class => new BoundArgument($locatorRef, false), + ServiceProviderInterface::class => new BoundArgument($locatorRef, false), + ] + $value->getBindings()); return parent::processValue($value); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php index 03d9e1d8a59abcd8dce9db354051b38de1becd08..75b36d227eab3fea21848a3ab7fd08aca202e071 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php @@ -28,7 +28,7 @@ class RemovePrivateAliasesPass implements CompilerPassInterface public function process(ContainerBuilder $container) { foreach ($container->getAliases() as $id => $alias) { - if ($alias->isPublic() || $alias->isPrivate()) { + if ($alias->isPublic()) { continue; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php index a1013f66c00b0f73af8d33e83e94ecef57679235..8f3a1c2d24c0dc05fc8e43aadb16ed82628438f3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php @@ -12,22 +12,24 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; /** * Removes unused service definitions from the container. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> */ -class RemoveUnusedDefinitionsPass implements RepeatablePassInterface +class RemoveUnusedDefinitionsPass extends AbstractRecursivePass implements RepeatablePassInterface { - private $repeatedPass; + private $connectedIds = []; /** * {@inheritdoc} */ public function setRepeatedPass(RepeatedPass $repeatedPass) { - $this->repeatedPass = $repeatedPass; + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); } /** @@ -35,51 +37,62 @@ class RemoveUnusedDefinitionsPass implements RepeatablePassInterface */ public function process(ContainerBuilder $container) { - $graph = $container->getCompiler()->getServiceReferenceGraph(); + try { + $this->enableExpressionProcessing(); + $this->container = $container; + $connectedIds = []; + $aliases = $container->getAliases(); - $hasChanged = false; - foreach ($container->getDefinitions() as $id => $definition) { - if ($definition->isPublic() || $definition->isPrivate()) { - continue; + foreach ($aliases as $id => $alias) { + if ($alias->isPublic()) { + $this->connectedIds[] = (string) $aliases[$id]; + } } - if ($graph->hasNode($id)) { - $edges = $graph->getNode($id)->getInEdges(); - $referencingAliases = []; - $sourceIds = []; - foreach ($edges as $edge) { - if ($edge->isWeak()) { - continue; - } - $node = $edge->getSourceNode(); - $sourceIds[] = $node->getId(); + foreach ($container->getDefinitions() as $id => $definition) { + if ($definition->isPublic()) { + $connectedIds[$id] = true; + $this->processValue($definition); + } + } - if ($node->isAlias()) { - $referencingAliases[] = $node->getValue(); + while ($this->connectedIds) { + $ids = $this->connectedIds; + $this->connectedIds = []; + foreach ($ids as $id) { + if (!isset($connectedIds[$id]) && $container->hasDefinition($id)) { + $connectedIds[$id] = true; + $this->processValue($container->getDefinition($id)); } } - $isReferenced = (\count(array_unique($sourceIds)) - \count($referencingAliases)) > 0; - } else { - $referencingAliases = []; - $isReferenced = false; } - if (1 === \count($referencingAliases) && false === $isReferenced) { - $container->setDefinition((string) reset($referencingAliases), $definition); - $definition->setPublic(!$definition->isPrivate()); - $definition->setPrivate(reset($referencingAliases)->isPrivate()); - $container->removeDefinition($id); - $container->log($this, sprintf('Removed service "%s"; reason: replaces alias %s.', $id, reset($referencingAliases))); - } elseif (0 === \count($referencingAliases) && false === $isReferenced) { - $container->removeDefinition($id); - $container->resolveEnvPlaceholders(serialize($definition)); - $container->log($this, sprintf('Removed service "%s"; reason: unused.', $id)); - $hasChanged = true; + foreach ($container->getDefinitions() as $id => $definition) { + if (!isset($connectedIds[$id])) { + $container->removeDefinition($id); + $container->resolveEnvPlaceholders(!$definition->hasErrors() ? serialize($definition) : $definition); + $container->log($this, sprintf('Removed service "%s"; reason: unused.', $id)); + } } + } finally { + $this->container = null; + $this->connectedIds = []; } + } - if ($hasChanged) { - $this->repeatedPass->setRepeat(); + /** + * {@inheritdoc} + */ + protected function processValue($value, $isRoot = false) + { + if (!$value instanceof Reference) { + return parent::processValue($value, $isRoot); } + + if (ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior()) { + $this->connectedIds[] = (string) $value; + } + + return $value; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php index 2b88bfb917a0fe8128cbb2bde6edc9847f2ab144..11a5b0d54ffa9951a7c7c91690959de06bb19e7c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatablePassInterface.php @@ -16,6 +16,8 @@ namespace Symfony\Component\DependencyInjection\Compiler; * RepeatedPass. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> + * + * @deprecated since Symfony 4.2. */ interface RepeatablePassInterface extends CompilerPassInterface { diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php index 3da1a0d5be8e3d18f3748d0cf9bf7a187e486169..bc155cf0af15f8ecc5e997773d615a5154941c67 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/RepeatedPass.php @@ -11,6 +11,8 @@ namespace Symfony\Component\DependencyInjection\Compiler; +@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2.', RepeatedPass::class), \E_USER_DEPRECATED); + use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -18,6 +20,8 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; * A pass that might be run repeatedly. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> + * + * @deprecated since Symfony 4.2. */ class RepeatedPass implements CompilerPassInterface { diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php index 472bf9415ad69cc63b48b97681dc1ebe2b81d8c4..99810963612d16c3b97b35660a169ef605c59727 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php @@ -13,6 +13,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\Reference; /** @@ -36,7 +37,7 @@ class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass $seenAliasTargets = []; $replacements = []; foreach ($container->getAliases() as $definitionId => $target) { - $targetId = $container->normalizeId($target); + $targetId = (string) $target; // Special case: leave this target alone if ('service_container' === $targetId) { continue; @@ -53,10 +54,14 @@ class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass $seenAliasTargets[$targetId] = true; try { $definition = $container->getDefinition($targetId); - } catch (InvalidArgumentException $e) { - throw new InvalidArgumentException(sprintf('Unable to replace alias "%s" with actual definition "%s".', $definitionId, $targetId), null, $e); + } catch (ServiceNotFoundException $e) { + if ('' !== $e->getId() && '@' === $e->getId()[0]) { + throw new ServiceNotFoundException($e->getId(), $e->getSourceId(), null, [substr($e->getId(), 1)]); + } + + throw $e; } - if ($definition->isPublic() || $definition->isPrivate()) { + if ($definition->isPublic()) { continue; } // Remove private definition and schedule for replacement @@ -77,7 +82,7 @@ class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass */ protected function processValue($value, $isRoot = false) { - if ($value instanceof Reference && isset($this->replacements[$referenceId = $this->container->normalizeId($value)])) { + if ($value instanceof Reference && isset($this->replacements[$referenceId = (string) $value])) { // Perform the replacement $newId = $this->replacements[$referenceId]; $value = new Reference($newId, $value->getInvalidBehavior()); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php index 065dbb4b40a1be35a95fe5ff1a9d02b2493b6024..97b613f655481aea0c6637453e8e1b3c77a3b593 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php @@ -12,6 +12,8 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\BoundArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -39,8 +41,39 @@ class ResolveBindingsPass extends AbstractRecursivePass try { parent::process($container); - foreach ($this->unusedBindings as list($key, $serviceId)) { - $message = sprintf('Unused binding "%s" in service "%s".', $key, $serviceId); + foreach ($this->unusedBindings as [$key, $serviceId, $bindingType, $file]) { + $argumentType = $argumentName = $message = null; + + if (str_contains($key, ' ')) { + [$argumentType, $argumentName] = explode(' ', $key, 2); + } elseif ('$' === $key[0]) { + $argumentName = $key; + } else { + $argumentType = $key; + } + + if ($argumentType) { + $message .= sprintf('of type "%s" ', $argumentType); + } + + if ($argumentName) { + $message .= sprintf('named "%s" ', $argumentName); + } + + if (BoundArgument::DEFAULTS_BINDING === $bindingType) { + $message .= 'under "_defaults"'; + } elseif (BoundArgument::INSTANCEOF_BINDING === $bindingType) { + $message .= 'under "_instanceof"'; + } else { + $message .= sprintf('for service "%s"', $serviceId); + } + + if ($file) { + $message .= sprintf(' in file "%s"', $file); + } + + $message = sprintf('A binding is configured for an argument %s, but no corresponding argument has been found. It may be unused and should be removed, or it may have a typo.', $message); + if ($this->errorMessages) { $message .= sprintf("\nCould be related to%s:", 1 < \count($this->errorMessages) ? ' one of' : ''); } @@ -61,9 +94,14 @@ class ResolveBindingsPass extends AbstractRecursivePass */ protected function processValue($value, $isRoot = false) { - if ($value instanceof TypedReference && $value->getType() === $this->container->normalizeId($value)) { + if ($value instanceof TypedReference && $value->getType() === (string) $value) { // Already checked $bindings = $this->container->getDefinition($this->currentId)->getBindings(); + $name = $value->getName(); + + if (isset($name, $bindings[$name = $value.' $'.$name])) { + return $this->getBindingValue($bindings[$name]); + } if (isset($bindings[$value->getType()])) { return $this->getBindingValue($bindings[$value->getType()]); @@ -76,21 +114,32 @@ class ResolveBindingsPass extends AbstractRecursivePass return parent::processValue($value, $isRoot); } + $bindingNames = []; + foreach ($bindings as $key => $binding) { - list($bindingValue, $bindingId, $used) = $binding->getValues(); + [$bindingValue, $bindingId, $used, $bindingType, $file] = $binding->getValues(); if ($used) { $this->usedBindings[$bindingId] = true; unset($this->unusedBindings[$bindingId]); } elseif (!isset($this->usedBindings[$bindingId])) { - $this->unusedBindings[$bindingId] = [$key, $this->currentId]; + $this->unusedBindings[$bindingId] = [$key, $this->currentId, $bindingType, $file]; + } + + if (preg_match('/^(?:(?:array|bool|float|int|string|iterable|([^ $]++)) )\$/', $key, $m)) { + $bindingNames[substr($key, \strlen($m[0]))] = $binding; } - if (isset($key[0]) && '$' === $key[0]) { + if (!isset($m[1])) { continue; } - if (null !== $bindingValue && !$bindingValue instanceof Reference && !$bindingValue instanceof Definition) { - throw new InvalidArgumentException(sprintf('Invalid value for binding key "%s" for service "%s": expected null, an instance of "%s" or an instance of "%s", "%s" given.', $key, $this->currentId, Reference::class, Definition::class, \gettype($bindingValue))); + if (is_subclass_of($m[1], \UnitEnum::class)) { + $bindingNames[substr($key, \strlen($m[0]))] = $binding; + continue; + } + + if (null !== $bindingValue && !$bindingValue instanceof Reference && !$bindingValue instanceof Definition && !$bindingValue instanceof TaggedIteratorArgument && !$bindingValue instanceof ServiceLocatorArgument) { + throw new InvalidArgumentException(sprintf('Invalid value for binding key "%s" for service "%s": expected "%s", "%s", "%s", "%s" or null, "%s" given.', $key, $this->currentId, Reference::class, Definition::class, TaggedIteratorArgument::class, ServiceLocatorArgument::class, \gettype($bindingValue))); } } @@ -112,7 +161,7 @@ class ResolveBindingsPass extends AbstractRecursivePass } foreach ($calls as $i => $call) { - list($method, $arguments) = $call; + [$method, $arguments] = $call; if ($method instanceof \ReflectionFunctionAbstract) { $reflectionMethod = $method; @@ -132,19 +181,31 @@ class ResolveBindingsPass extends AbstractRecursivePass continue; } + $typeHint = ProxyHelper::getTypeHint($reflectionMethod, $parameter); + + if ($typeHint && \array_key_exists($k = ltrim($typeHint, '\\').' $'.$parameter->name, $bindings)) { + $arguments[$key] = $this->getBindingValue($bindings[$k]); + + continue; + } + if (\array_key_exists('$'.$parameter->name, $bindings)) { $arguments[$key] = $this->getBindingValue($bindings['$'.$parameter->name]); continue; } - $typeHint = ProxyHelper::getTypeHint($reflectionMethod, $parameter, true); + if ($typeHint && '\\' === $typeHint[0] && isset($bindings[$typeHint = substr($typeHint, 1)])) { + $arguments[$key] = $this->getBindingValue($bindings[$typeHint]); - if (!isset($bindings[$typeHint])) { continue; } - $arguments[$key] = $this->getBindingValue($bindings[$typeHint]); + if (isset($bindingNames[$parameter->name])) { + $bindingKey = array_search($binding, $bindings, true); + $argumentType = substr($bindingKey, 0, strpos($bindingKey, ' ')); + $this->errorMessages[] = sprintf('Did you forget to add the type "%s" to argument "$%s" of method "%s::%s()"?', $argumentType, $parameter->name, $reflectionMethod->class, $reflectionMethod->name); + } } if ($arguments !== $call[1]) { @@ -154,7 +215,7 @@ class ResolveBindingsPass extends AbstractRecursivePass } if ($constructor) { - list(, $arguments) = array_pop($calls); + [, $arguments] = array_pop($calls); if ($arguments !== $value->getArguments()) { $value->setArguments($arguments); @@ -168,9 +229,12 @@ class ResolveBindingsPass extends AbstractRecursivePass return parent::processValue($value, $isRoot); } + /** + * @return mixed + */ private function getBindingValue(BoundArgument $binding) { - list($bindingValue, $bindingId) = $binding->getValues(); + [$bindingValue, $bindingId] = $binding->getValues(); $this->usedBindings[$bindingId] = true; unset($this->unusedBindings[$bindingId]); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php index 539395a43742ec1bcadeb35d130f2e6bf05b7a04..de59dafd2151bcaf57551f4d95da0da6053689b9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php @@ -12,6 +12,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\ExceptionInterface; use Symfony\Component\DependencyInjection\Exception\RuntimeException; @@ -52,11 +53,9 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass /** * Resolves the definition. * - * @return Definition - * * @throws RuntimeException When the definition is invalid */ - private function resolveDefinition(ChildDefinition $definition) + private function resolveDefinition(ChildDefinition $definition): Definition { try { return $this->doResolveDefinition($definition); @@ -71,7 +70,7 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass } } - private function doResolveDefinition(ChildDefinition $definition) + private function doResolveDefinition(ChildDefinition $definition): Definition { if (!$this->container->has($parent = $definition->getParent())) { throw new RuntimeException(sprintf('Parent definition "%s" does not exist.', $parent)); @@ -102,9 +101,6 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass $def->setArguments($parentDef->getArguments()); $def->setMethodCalls($parentDef->getMethodCalls()); $def->setProperties($parentDef->getProperties()); - if ($parentDef->getAutowiringTypes(false)) { - $def->setAutowiringTypes($parentDef->getAutowiringTypes(false)); - } if ($parentDef->isDeprecated()) { $def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%')); } @@ -118,6 +114,8 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass $def->setBindings($definition->getBindings() + $parentDef->getBindings()); + $def->setSynthetic($definition->isSynthetic()); + // overwrite with values specified in the decorator $changes = $definition->getChanges(); if (isset($changes['class'])) { @@ -154,7 +152,7 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass if (null === $decoratedService) { $def->setDecoratedService($decoratedService); } else { - $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2]); + $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2], $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE); } } @@ -162,7 +160,7 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass foreach ($definition->getArguments() as $k => $v) { if (is_numeric($k)) { $def->addArgument($v); - } elseif (0 === strpos($k, 'index_')) { + } elseif (str_starts_with($k, 'index_')) { $def->replaceArgument((int) substr($k, \strlen('index_')), $v); } else { $def->setArgument($k, $v); @@ -179,10 +177,8 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls)); } - // merge autowiring types - foreach ($definition->getAutowiringTypes(false) as $autowiringType) { - $def->addAutowiringType($autowiringType); - } + $def->addError($parentDef); + $def->addError($definition); // these attributes are always taken from the child $def->setAbstract($definition->isAbstract()); @@ -191,8 +187,12 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass // and it's not legal on an instanceof $def->setAutoconfigured($definition->isAutoconfigured()); + if (!$def->hasTag('proxy')) { + foreach ($parentDef->getTag('proxy') as $v) { + $def->addTag('proxy', $v); + } + } + return $def; } } - -class_alias(ResolveChildDefinitionsPass::class, ResolveDefinitionTemplatesPass::class); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php index b1c1b4f884e01431bdebb08fb6d3475d1f7f2150..e67a2a8ed78ec17692adc1c992689997c98986f9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php @@ -20,8 +20,6 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; */ class ResolveClassPass implements CompilerPassInterface { - private $changes = []; - /** * {@inheritdoc} */ @@ -33,24 +31,10 @@ class ResolveClassPass implements CompilerPassInterface } if (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)++$/', $id)) { if ($definition instanceof ChildDefinition && !class_exists($id)) { - throw new InvalidArgumentException(sprintf('Service definition "%s" has a parent but no class, and its name looks like a FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.', $id)); + throw new InvalidArgumentException(sprintf('Service definition "%s" has a parent but no class, and its name looks like an FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.', $id)); } - $this->changes[strtolower($id)] = $id; $definition->setClass($id); } } } - - /** - * @internal - * - * @deprecated since 3.3, to be removed in 4.0. - */ - public function getChanges() - { - $changes = $this->changes; - $this->changes = []; - - return $changes; - } } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php deleted file mode 100644 index 79fca8d5ecbf6b693e62b093ba0cf9cf50ce630d..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -@trigger_error('The '.__NAMESPACE__.'\ResolveDefinitionTemplatesPass class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the ResolveChildDefinitionsPass class instead.', \E_USER_DEPRECATED); - -class_exists(ResolveChildDefinitionsPass::class); - -if (false) { - /** - * This definition decorates another definition. - * - * @author Johannes M. Schmitt <schmittjoh@gmail.com> - * - * @deprecated The ResolveDefinitionTemplatesPass class is deprecated since version 3.4 and will be removed in 4.0. Use the ResolveChildDefinitionsPass class instead. - */ - class ResolveDefinitionTemplatesPass extends AbstractRecursivePass - { - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php index 4e025113acdb8326aee95a8b9536fec25e7685c5..bfdd91c417f97fcaab243bc18ef6fd0dadac1e2b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php @@ -26,7 +26,7 @@ class ResolveHotPathPass extends AbstractRecursivePass private $tagName; private $resolvedIds = []; - public function __construct($tagName = 'container.hot_path') + public function __construct(string $tagName = 'container.hot_path') { $this->tagName = $tagName; } @@ -55,7 +55,7 @@ class ResolveHotPathPass extends AbstractRecursivePass if ($value instanceof Definition && $isRoot && (isset($this->resolvedIds[$this->currentId]) || !$value->hasTag($this->tagName) || $value->isDeprecated())) { return $value->isDeprecated() ? $value->clearTag($this->tagName) : $value; } - if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->has($id = $this->container->normalizeId($value))) { + if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->has($id = (string) $value)) { $definition = $this->container->findDefinition($id); if (!$definition->hasTag($this->tagName) && !$definition->isDeprecated()) { $this->resolvedIds[$id] = true; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php index 6268ed9ed048cba4d3faec66ce37c80a66a1c61f..37ad34954d3a4d4c88bd62158a0aa5a753ba3875 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php @@ -33,9 +33,12 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface if ($definition->getArguments()) { throw new InvalidArgumentException(sprintf('Autoconfigured instanceof for type "%s" defines arguments but these are not supported and should be removed.', $interface)); } - if ($definition->getMethodCalls()) { - throw new InvalidArgumentException(sprintf('Autoconfigured instanceof for type "%s" defines method calls but these are not supported and should be removed.', $interface)); - } + } + + $tagsToKeep = []; + + if ($container->hasParameter('container.behavior_describing_tags')) { + $tagsToKeep = $container->getParameter('container.behavior_describing_tags'); } foreach ($container->getDefinitions() as $id => $definition) { @@ -43,11 +46,15 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface // don't apply "instanceof" to children: it will be applied to their parent continue; } - $container->setDefinition($id, $this->processDefinition($container, $id, $definition)); + $container->setDefinition($id, $this->processDefinition($container, $id, $definition, $tagsToKeep)); + } + + if ($container->hasParameter('container.behavior_describing_tags')) { + $container->getParameterBag()->remove('container.behavior_describing_tags'); } } - private function processDefinition(ContainerBuilder $container, $id, Definition $definition) + private function processDefinition(ContainerBuilder $container, string $id, Definition $definition, array $tagsToKeep): Definition { $instanceofConditionals = $definition->getInstanceofConditionals(); $autoconfiguredInstanceof = $definition->isAutoconfigured() ? $container->getAutoconfiguredInstanceof() : []; @@ -64,10 +71,12 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface $definition->setInstanceofConditionals([]); $parent = $shared = null; $instanceofTags = []; + $instanceofCalls = []; + $instanceofBindings = []; $reflectionClass = null; foreach ($conditionals as $interface => $instanceofDefs) { - if ($interface !== $class && !(null === $reflectionClass ? $reflectionClass = ($container->getReflectionClass($class, false) ?: false) : $reflectionClass)) { + if ($interface !== $class && !($reflectionClass ?? $reflectionClass = $container->getReflectionClass($class, false) ?: false)) { continue; } @@ -78,11 +87,19 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface foreach ($instanceofDefs as $key => $instanceofDef) { /** @var ChildDefinition $instanceofDef */ $instanceofDef = clone $instanceofDef; - $instanceofDef->setAbstract(true)->setParent($parent ?: 'abstract.instanceof.'.$id); - $parent = 'instanceof.'.$interface.'.'.$key.'.'.$id; + $instanceofDef->setAbstract(true)->setParent($parent ?: '.abstract.instanceof.'.$id); + $parent = '.instanceof.'.$interface.'.'.$key.'.'.$id; $container->setDefinition($parent, $instanceofDef); $instanceofTags[] = $instanceofDef->getTags(); + $instanceofBindings = $instanceofDef->getBindings() + $instanceofBindings; + + foreach ($instanceofDef->getMethodCalls() as $methodCall) { + $instanceofCalls[] = $methodCall; + } + $instanceofDef->setTags([]); + $instanceofDef->setMethodCalls([]); + $instanceofDef->setBindings([]); if (isset($instanceofDef->getChanges()['shared'])) { $shared = $instanceofDef->isShared(); @@ -92,13 +109,14 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface if ($parent) { $bindings = $definition->getBindings(); - $abstract = $container->setDefinition('abstract.instanceof.'.$id, $definition); + $abstract = $container->setDefinition('.abstract.instanceof.'.$id, $definition); // cast Definition to ChildDefinition $definition->setBindings([]); $definition = serialize($definition); $definition = substr_replace($definition, '53', 2, 2); $definition = substr_replace($definition, 'Child', 44, 0); + /** @var ChildDefinition $definition */ $definition = unserialize($definition); $definition->setParent($parent); @@ -106,19 +124,23 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface $definition->setShared($shared); } + // Don't add tags to service decorators $i = \count($instanceofTags); while (0 <= --$i) { foreach ($instanceofTags[$i] as $k => $v) { - foreach ($v as $v) { - if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) { - continue; + if (null === $definition->getDecoratedService() || \in_array($k, $tagsToKeep, true)) { + foreach ($v as $v) { + if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) { + continue; + } + $definition->addTag($k, $v); } - $definition->addTag($k, $v); } } } - $definition->setBindings($bindings); + $definition->setMethodCalls(array_merge($instanceofCalls, $definition->getMethodCalls())); + $definition->setBindings($bindings + $instanceofBindings); // reset fields with "merge" behavior $abstract @@ -133,7 +155,7 @@ class ResolveInstanceofConditionalsPass implements CompilerPassInterface return $definition; } - private function mergeConditionals(array $autoconfiguredInstanceof, array $instanceofConditionals, ContainerBuilder $container) + private function mergeConditionals(array $autoconfiguredInstanceof, array $instanceofConditionals, ContainerBuilder $container): array { // make each value an array of ChildDefinition $conditionals = array_map(function ($childDef) { return [$childDef]; }, $autoconfiguredInstanceof); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php index f1a1475aeb4ab6b9211e43a17d872473b1566e50..948de421f74cbf44a23b9ecaeab067f2c40bab83 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php @@ -17,7 +17,9 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\TypedReference; /** * Emulates the invalid behavior if the reference is not found within the @@ -29,6 +31,7 @@ class ResolveInvalidReferencesPass implements CompilerPassInterface { private $container; private $signalingException; + private $currentId; /** * Process the ContainerBuilder to resolve invalid references. @@ -39,7 +42,9 @@ class ResolveInvalidReferencesPass implements CompilerPassInterface $this->signalingException = new RuntimeException('Invalid reference.'); try { - $this->processValue($container->getDefinitions(), 1); + foreach ($container->getDefinitions() as $this->currentId => $definition) { + $this->processValue($definition); + } } finally { $this->container = $this->signalingException = null; } @@ -48,9 +53,11 @@ class ResolveInvalidReferencesPass implements CompilerPassInterface /** * Processes arguments to determine invalid references. * + * @return mixed + * * @throws RuntimeException When an invalid reference is found */ - private function processValue($value, $rootLevel = 0, $level = 0) + private function processValue($value, int $rootLevel = 0, int $level = 0) { if ($value instanceof ServiceClosureArgument) { $value->setValues($this->processValue($value->getValues(), 1, 1)); @@ -90,11 +97,29 @@ class ResolveInvalidReferencesPass implements CompilerPassInterface $value = array_values($value); } } elseif ($value instanceof Reference) { - if ($this->container->has($value)) { + if ($this->container->has($id = (string) $value)) { return $value; } + + $currentDefinition = $this->container->getDefinition($this->currentId); + + // resolve decorated service behavior depending on decorator service + if ($currentDefinition->innerServiceId === $id && ContainerInterface::NULL_ON_INVALID_REFERENCE === $currentDefinition->decorationOnInvalid) { + return null; + } + $invalidBehavior = $value->getInvalidBehavior(); + if (ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $invalidBehavior && $value instanceof TypedReference && !$this->container->has($id)) { + $e = new ServiceNotFoundException($id, $this->currentId); + + // since the error message varies by $id and $this->currentId, so should the id of the dummy errored definition + $this->container->register($id = sprintf('.errored.%s.%s', $this->currentId, $id), $value->getType()) + ->addError($e->getMessage()); + + return new TypedReference($id, $value->getType(), $value->getInvalidBehavior()); + } + // resolve invalid behavior if (ContainerInterface::NULL_ON_INVALID_REFERENCE === $invalidBehavior) { $value = null; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php index 225014f1e4224d795da2abfe85d1f0503231b766..ab8ac1d0b677a92a63e0114b6bb0a30b4674aae5 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php @@ -36,7 +36,7 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass $calls[] = ['__construct', $value->getArguments()]; foreach ($calls as $i => $call) { - list($method, $arguments) = $call; + [$method, $arguments] = $call; $parameters = null; $resolvedArguments = []; @@ -53,10 +53,20 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass $parameters = $r->getParameters(); } + if (isset($key[0]) && '$' !== $key[0] && !class_exists($key) && !interface_exists($key, false)) { + throw new InvalidArgumentException(sprintf('Invalid service "%s": did you forget to add the "$" prefix to argument "%s"?', $this->currentId, $key)); + } + if (isset($key[0]) && '$' === $key[0]) { foreach ($parameters as $j => $p) { if ($key === '$'.$p->name) { - $resolvedArguments[$j] = $argument; + if ($p->isVariadic() && \is_array($argument)) { + foreach ($argument as $variadicArgument) { + $resolvedArguments[$j++] = $variadicArgument; + } + } else { + $resolvedArguments[$j] = $argument; + } continue 2; } @@ -88,7 +98,7 @@ class ResolveNamedArgumentsPass extends AbstractRecursivePass } } - list(, $arguments) = array_pop($calls); + [, $arguments] = array_pop($calls); if ($arguments !== $value->getArguments()) { $value->setArguments($arguments); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php index 32eb6a3a76f3e37341d15cc31ede0cf8b022fdd3..d31c54661c0b438f706861ba4a12af78cda302eb 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -85,6 +85,11 @@ class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass if (isset($changes['file'])) { $value->setFile($this->bag->resolveValue($value->getFile())); } + $tags = $value->getTags(); + if (isset($tags['proxy'])) { + $tags['proxy'] = $this->bag->resolveValue($tags['proxy']); + $value->setTags($tags); + } } $value = parent::processValue($value, $isRoot); diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php index 2559dcf10c00e638a4a957a731cecfc536da288f..7764dde9659a74638f63e102ecc5bef757322854 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php @@ -30,7 +30,9 @@ class ResolveReferencesToAliasesPass extends AbstractRecursivePass parent::process($container); foreach ($container->getAliases() as $id => $alias) { - $aliasId = $container->normalizeId($alias); + $aliasId = (string) $alias; + $this->currentId = $id; + if ($aliasId !== $defId = $this->getDefinitionId($aliasId, $container)) { $container->setAlias($id, $defId)->setPublic($alias->isPublic())->setPrivate($alias->isPrivate()); } @@ -42,34 +44,39 @@ class ResolveReferencesToAliasesPass extends AbstractRecursivePass */ protected function processValue($value, $isRoot = false) { - if ($value instanceof Reference) { - $defId = $this->getDefinitionId($id = $this->container->normalizeId($value), $this->container); - - if ($defId !== $id) { - return new Reference($defId, $value->getInvalidBehavior()); - } + if (!$value instanceof Reference) { + return parent::processValue($value, $isRoot); } - return parent::processValue($value); + $defId = $this->getDefinitionId($id = (string) $value, $this->container); + + return $defId !== $id ? new Reference($defId, $value->getInvalidBehavior()) : $value; } - /** - * Resolves an alias into a definition id. - * - * @param string $id The definition or alias id to resolve - * - * @return string The definition id with aliases resolved - */ - private function getDefinitionId($id, ContainerBuilder $container) + private function getDefinitionId(string $id, ContainerBuilder $container): string { + if (!$container->hasAlias($id)) { + return $id; + } + + $alias = $container->getAlias($id); + + if ($alias->isDeprecated()) { + $referencingDefinition = $container->hasDefinition($this->currentId) ? $container->getDefinition($this->currentId) : $container->getAlias($this->currentId); + if (!$referencingDefinition->isDeprecated()) { + @trigger_error(sprintf('%s. It is being referenced by the "%s" %s.', rtrim($alias->getDeprecationMessage($id), '. '), $this->currentId, $container->hasDefinition($this->currentId) ? 'service' : 'alias'), \E_USER_DEPRECATED); + } + } + $seen = []; - while ($container->hasAlias($id)) { + do { if (isset($seen[$id])) { throw new ServiceCircularReferenceException($id, array_merge(array_keys($seen), [$id])); } + $seen[$id] = true; - $id = $container->normalizeId($container->getAlias($id)); - } + $id = (string) $container->getAlias($id); + } while ($container->hasAlias($id)); return $id; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php index ccc80a443e420ca550ff199d587b3afaaea9dce6..399f349046a369a25b163347558ac6877aa06fe9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php @@ -14,6 +14,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Psr\Container\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Contracts\Service\ServiceProviderInterface; /** * Compiler pass to inject their service locator to service subscribers. @@ -26,7 +27,7 @@ class ResolveServiceSubscribersPass extends AbstractRecursivePass protected function processValue($value, $isRoot = false) { - if ($value instanceof Reference && $this->serviceLocator && ContainerInterface::class === $this->container->normalizeId($value)) { + if ($value instanceof Reference && $this->serviceLocator && \in_array((string) $value, [ContainerInterface::class, ServiceProviderInterface::class], true)) { return new Reference($this->serviceLocator); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php index 009cee9bf5c1dda8424bca6e00f74d54839916cf..a4305722f7cb5e29e592c82d3d3ac1e458529978 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php @@ -31,7 +31,7 @@ class ResolveTaggedIteratorArgumentPass extends AbstractRecursivePass return parent::processValue($value, $isRoot); } - $value->setValues($this->findAndSortTaggedServices($value->getTag(), $this->container)); + $value->setValues($this->findAndSortTaggedServices($value, $this->container)); return $value; } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php index a7427c5a5bd664c60b949df2158ee93919721408..5fdbe5686dbfa81017a0f4101e9592f568df5c81 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php @@ -13,6 +13,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -26,8 +27,18 @@ use Symfony\Component\DependencyInjection\ServiceLocator; */ final class ServiceLocatorTagPass extends AbstractRecursivePass { + use PriorityTaggedServiceTrait; + protected function processValue($value, $isRoot = false) { + if ($value instanceof ServiceLocatorArgument) { + if ($value->getTaggedIteratorArgument()) { + $value->setValues($this->findAndSortTaggedServices($value->getTaggedIteratorArgument(), $this->container)); + } + + return self::register($this->container, $value->getValues()); + } + if (!$value instanceof Definition || !$value->hasTag('container.service_locator')) { return parent::processValue($value, $isRoot); } @@ -65,7 +76,7 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass $value->setArguments($arguments); - $id = 'service_locator.'.ContainerBuilder::hash($value); + $id = '.service_locator.'.ContainerBuilder::hash($value); if ($isRoot) { if ($id !== $this->currentId) { @@ -82,11 +93,8 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass /** * @param Reference[] $refMap - * @param string|null $callerId - * - * @return Reference */ - public static function register(ContainerBuilder $container, array $refMap, $callerId = null) + public static function register(ContainerBuilder $container, array $refMap, string $callerId = null): Reference { foreach ($refMap as $id => $ref) { if (!$ref instanceof Reference) { @@ -105,7 +113,7 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass $locator->setBindings($container->getDefinition($callerId)->getBindings()); } - if (!$container->hasDefinition($id = 'service_locator.'.ContainerBuilder::hash($locator))) { + if (!$container->hasDefinition($id = '.service_locator.'.ContainerBuilder::hash($locator))) { $container->setDefinition($id, $locator); } @@ -117,6 +125,7 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass $container->register($id .= '.'.$callerId, ServiceLocator::class) ->setPublic(false) ->setFactory([new Reference($locatorId), 'withContext']) + ->addTag('container.service_locator_context', ['id' => $callerId]) ->addArgument($callerId) ->addArgument(new Reference('service_container')); } diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php index e419e297e8f1ef66f25582b20e33d0bf9bf41864..308abc656611dee5dc41d3d68ed01d30461d9f2e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php @@ -21,7 +21,7 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * - * @final since version 3.4 + * @final */ class ServiceReferenceGraph { @@ -30,14 +30,7 @@ class ServiceReferenceGraph */ private $nodes = []; - /** - * Checks if the graph has a specific node. - * - * @param string $id Id to check - * - * @return bool - */ - public function hasNode($id) + public function hasNode(string $id): bool { return isset($this->nodes[$id]); } @@ -45,13 +38,9 @@ class ServiceReferenceGraph /** * Gets a node by identifier. * - * @param string $id The id to retrieve - * - * @return ServiceReferenceGraphNode - * * @throws InvalidArgumentException if no node matches the supplied identifier */ - public function getNode($id) + public function getNode(string $id): ServiceReferenceGraphNode { if (!isset($this->nodes[$id])) { throw new InvalidArgumentException(sprintf('There is no node with id "%s".', $id)); @@ -65,7 +54,7 @@ class ServiceReferenceGraph * * @return ServiceReferenceGraphNode[] */ - public function getNodes() + public function getNodes(): array { return $this->nodes; } @@ -83,19 +72,9 @@ class ServiceReferenceGraph /** * Connects 2 nodes together in the Graph. - * - * @param string $sourceId - * @param mixed $sourceValue - * @param string $destId - * @param mixed $destValue - * @param string $reference */ - public function connect($sourceId, $sourceValue, $destId, $destValue = null, $reference = null/*, bool $lazy = false, bool $weak = false, bool $byConstructor = false*/) + public function connect(?string $sourceId, $sourceValue, ?string $destId, $destValue = null, $reference = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) { - $lazy = \func_num_args() >= 6 ? func_get_arg(5) : false; - $weak = \func_num_args() >= 7 ? func_get_arg(6) : false; - $byConstructor = \func_num_args() >= 8 ? func_get_arg(7) : false; - if (null === $sourceId || null === $destId) { return; } @@ -108,15 +87,7 @@ class ServiceReferenceGraph $destNode->addInEdge($edge); } - /** - * Creates a graph node. - * - * @param string $id - * @param mixed $value - * - * @return ServiceReferenceGraphNode - */ - private function createNode($id, $value) + private function createNode(string $id, $value): ServiceReferenceGraphNode { if (isset($this->nodes[$id]) && $this->nodes[$id]->getValue() === $value) { return $this->nodes[$id]; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php index 911e7a5f5facf19c992d8066ac799cfb447e2be8..986145606c90097e0bf1f237d18154c51335f8fb 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php @@ -27,13 +27,7 @@ class ServiceReferenceGraphEdge private $weak; private $byConstructor; - /** - * @param mixed $value - * @param bool $lazy - * @param bool $weak - * @param bool $byConstructor - */ - public function __construct(ServiceReferenceGraphNode $sourceNode, ServiceReferenceGraphNode $destNode, $value = null, $lazy = false, $weak = false, $byConstructor = false) + public function __construct(ServiceReferenceGraphNode $sourceNode, ServiceReferenceGraphNode $destNode, $value = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) { $this->sourceNode = $sourceNode; $this->destNode = $destNode; @@ -46,7 +40,7 @@ class ServiceReferenceGraphEdge /** * Returns the value of the edge. * - * @return string + * @return mixed */ public function getValue() { diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php index 50140b5fffd678d11377793ec23be63a5f5173f9..fec142426e0589ff48363c13b16913a32676abb0 100644 --- a/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php @@ -32,7 +32,7 @@ class ServiceReferenceGraphNode * @param string $id The node identifier * @param mixed $value The node value */ - public function __construct($id, $value) + public function __construct(string $id, $value) { $this->id = $id; $this->value = $value; diff --git a/civicrm/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php b/civicrm/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php new file mode 100644 index 0000000000000000000000000000000000000000..3fb2af1bf07a0fa19a4b777c6e00dc2d99b9f9b5 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php @@ -0,0 +1,116 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\Config\Definition\BaseNode; +use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException; +use Symfony\Component\Config\Definition\Processor; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface; +use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; + +/** + * Validates environment variable placeholders used in extension configuration with dummy values. + * + * @author Roland Franssen <franssen.roland@gmail.com> + */ +class ValidateEnvPlaceholdersPass implements CompilerPassInterface +{ + private const TYPE_FIXTURES = ['array' => [], 'bool' => false, 'float' => 0.0, 'int' => 0, 'string' => '']; + + private $extensionConfig = []; + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + $this->extensionConfig = []; + + if (!class_exists(BaseNode::class) || !$extensions = $container->getExtensions()) { + return; + } + + $resolvingBag = $container->getParameterBag(); + if (!$resolvingBag instanceof EnvPlaceholderParameterBag) { + return; + } + + $defaultBag = new ParameterBag($resolvingBag->all()); + $envTypes = $resolvingBag->getProvidedTypes(); + foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { + $values = []; + if (false === $i = strpos($env, ':')) { + $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : self::TYPE_FIXTURES['string']; + $defaultType = null !== $default ? self::getType($default) : 'string'; + $values[$defaultType] = $default; + } else { + $prefix = substr($env, 0, $i); + foreach ($envTypes[$prefix] ?? ['string'] as $type) { + $values[$type] = self::TYPE_FIXTURES[$type] ?? null; + } + } + foreach ($placeholders as $placeholder) { + BaseNode::setPlaceholder($placeholder, $values); + } + } + + $processor = new Processor(); + + foreach ($extensions as $name => $extension) { + if (!$extension instanceof ConfigurationExtensionInterface || !$config = array_filter($container->getExtensionConfig($name))) { + // this extension has no semantic configuration or was not called + continue; + } + + $config = $resolvingBag->resolveValue($config); + + if (null === $configuration = $extension->getConfiguration($config, $container)) { + continue; + } + + try { + $this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config); + } catch (TreeWithoutRootNodeException $e) { + } + } + + $resolvingBag->clearUnusedEnvPlaceholders(); + } + + /** + * @internal + */ + public function getExtensionConfig(): array + { + try { + return $this->extensionConfig; + } finally { + $this->extensionConfig = []; + } + } + + private static function getType($value): string + { + switch ($type = \gettype($value)) { + case 'boolean': + return 'bool'; + case 'double': + return 'float'; + case 'integer': + return 'int'; + } + + return $type; + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php b/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php deleted file mode 100644 index 68c1e3f6a24915fbbaf86968702025dcc29d552f..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/Config/AutowireServiceResource.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Config; - -@trigger_error('The '.__NAMESPACE__.'\AutowireServiceResource class is deprecated since Symfony 3.3 and will be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.', \E_USER_DEPRECATED); - -use Symfony\Component\Config\Resource\SelfCheckingResourceInterface; -use Symfony\Component\DependencyInjection\Compiler\AutowirePass; - -/** - * @deprecated since version 3.3, to be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead. - */ -class AutowireServiceResource implements SelfCheckingResourceInterface, \Serializable -{ - private $class; - private $filePath; - private $autowiringMetadata = []; - - public function __construct($class, $path, array $autowiringMetadata) - { - $this->class = $class; - $this->filePath = $path; - $this->autowiringMetadata = $autowiringMetadata; - } - - public function isFresh($timestamp) - { - if (!file_exists($this->filePath)) { - return false; - } - - // has the file *not* been modified? Definitely fresh - if (@filemtime($this->filePath) <= $timestamp) { - return true; - } - - try { - $reflectionClass = new \ReflectionClass($this->class); - } catch (\ReflectionException $e) { - // the class does not exist anymore! - return false; - } - - return (array) $this === (array) AutowirePass::createResourceForClass($reflectionClass); - } - - public function __toString() - { - return 'service.autowire.'.$this->class; - } - - /** - * @internal - */ - public function serialize() - { - return serialize([$this->class, $this->filePath, $this->autowiringMetadata]); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - if (\PHP_VERSION_ID >= 70000) { - list($this->class, $this->filePath, $this->autowiringMetadata) = unserialize($serialized, ['allowed_classes' => false]); - } else { - list($this->class, $this->filePath, $this->autowiringMetadata) = unserialize($serialized); - } - } - - /** - * @deprecated Implemented for compatibility with Symfony 2.8 - */ - public function getResource() - { - return $this->filePath; - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php b/civicrm/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php index 7560c3356d978ebead02b361ea412f6b1da92c11..d2a74eb50f701f7da01c0b14fc9843ee29f6809a 100644 --- a/civicrm/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php +++ b/civicrm/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php @@ -17,8 +17,10 @@ use Symfony\Component\Config\Resource\ResourceInterface; * Tracks container parameters. * * @author Maxime Steinhausser <maxime.steinhausser@gmail.com> + * + * @final since Symfony 4.3 */ -class ContainerParametersResource implements ResourceInterface, \Serializable +class ContainerParametersResource implements ResourceInterface { private $parameters; @@ -30,30 +32,11 @@ class ContainerParametersResource implements ResourceInterface, \Serializable $this->parameters = $parameters; } - /** - * {@inheritdoc} - */ public function __toString() { return 'container_parameters_'.md5(serialize($this->parameters)); } - /** - * @internal - */ - public function serialize() - { - return serialize($this->parameters); - } - - /** - * @internal - */ - public function unserialize($serialized) - { - $this->parameters = unserialize($serialized); - } - /** * @return array Tracked parameters */ diff --git a/civicrm/vendor/symfony/dependency-injection/Container.php b/civicrm/vendor/symfony/dependency-injection/Container.php index e9d53023d9dae16a51e7927a03489b7f8c77f92b..24a90fbd9da2b708fe75098dacc30f262c14f9a0 100644 --- a/civicrm/vendor/symfony/dependency-injection/Container.php +++ b/civicrm/vendor/symfony/dependency-injection/Container.php @@ -11,14 +11,22 @@ namespace Symfony\Component\DependencyInjection; +use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\Argument\ServiceLocator as ArgumentServiceLocator; use Symfony\Component\DependencyInjection\Exception\EnvNotFoundException; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Contracts\Service\ResetInterface; + +// Help opcache.preload discover always-needed symbols +class_exists(RewindableGenerator::class); +class_exists(ArgumentServiceLocator::class); /** * Container is a dependency injection container. @@ -41,31 +49,22 @@ class Container implements ResettableContainerInterface { protected $parameterBag; protected $services = []; + protected $privates = []; protected $fileMap = []; protected $methodMap = []; + protected $factories = []; protected $aliases = []; protected $loading = []; protected $resolving = []; protected $syntheticIds = []; - /** - * @internal - */ - protected $privates = []; - - /** - * @internal - */ - protected $normalizedIds = []; - - private $underscoreMap = ['_' => '', '.' => '_', '\\' => '_']; private $envCache = []; private $compiled = false; private $getEnv; public function __construct(ParameterBagInterface $parameterBag = null) { - $this->parameterBag = $parameterBag ?: new EnvPlaceholderParameterBag(); + $this->parameterBag = $parameterBag ?? new EnvPlaceholderParameterBag(); } /** @@ -95,20 +94,6 @@ class Container implements ResettableContainerInterface return $this->compiled; } - /** - * Returns true if the container parameter bag are frozen. - * - * @deprecated since version 3.3, to be removed in 4.0. - * - * @return bool true if the container parameter bag are frozen, false otherwise - */ - public function isFrozen() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->parameterBag instanceof FrozenParameterBag; - } - /** * Gets the service container parameter bag. * @@ -124,7 +109,7 @@ class Container implements ResettableContainerInterface * * @param string $name The parameter name * - * @return mixed The parameter value + * @return array|bool|string|int|float|\UnitEnum|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -148,8 +133,8 @@ class Container implements ResettableContainerInterface /** * Sets a parameter. * - * @param string $name The parameter name - * @param mixed $value The parameter value + * @param string $name The parameter name + * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value */ public function setParameter($name, $value) { @@ -174,27 +159,20 @@ class Container implements ResettableContainerInterface $initialize(); } - $id = $this->normalizeId($id); - if ('service_container' === $id) { throw new InvalidArgumentException('You cannot set service "service_container".'); } - if (isset($this->privates[$id]) || !(isset($this->fileMap[$id]) || isset($this->methodMap[$id]))) { - if (!isset($this->privates[$id]) && !isset($this->getRemovedIds()[$id])) { + if (!(isset($this->fileMap[$id]) || isset($this->methodMap[$id]))) { + if (isset($this->syntheticIds[$id]) || !isset($this->getRemovedIds()[$id])) { // no-op } elseif (null === $service) { - @trigger_error(sprintf('The "%s" service is private, unsetting it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); - unset($this->privates[$id]); + throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot unset it.', $id)); } else { - @trigger_error(sprintf('The "%s" service is private, replacing it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot replace it.', $id)); } } elseif (isset($this->services[$id])) { - if (null === $service) { - @trigger_error(sprintf('The "%s" service is already initialized, unsetting it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); - } else { - @trigger_error(sprintf('The "%s" service is already initialized, replacing it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); - } + throw new InvalidArgumentException(sprintf('The "%s" service is already initialized, you cannot replace it.', $id)); } if (isset($this->aliases[$id])) { @@ -219,47 +197,22 @@ class Container implements ResettableContainerInterface */ public function has($id) { - for ($i = 2;;) { - if (isset($this->privates[$id])) { - @trigger_error(sprintf('The "%s" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); - } - if (isset($this->aliases[$id])) { - $id = $this->aliases[$id]; - } - if (isset($this->services[$id])) { - return true; - } - if ('service_container' === $id) { - return true; - } - - if (isset($this->fileMap[$id]) || isset($this->methodMap[$id])) { - return true; - } - - if (--$i && $id !== $normalizedId = $this->normalizeId($id)) { - $id = $normalizedId; - continue; - } - - // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, - // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) - if (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class && method_exists($this, 'get'.strtr($id, $this->underscoreMap).'Service')) { - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); - - return true; - } - - return false; + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + if (isset($this->services[$id])) { + return true; } + if ('service_container' === $id) { + return true; + } + + return isset($this->fileMap[$id]) || isset($this->methodMap[$id]); } /** * Gets a service. * - * If a service is defined both through a set() method and - * with a get{$id}Service() method, the former has always precedence. - * * @param string $id The service identifier * @param int $invalidBehavior The behavior when the service does not exist * @@ -273,57 +226,42 @@ class Container implements ResettableContainerInterface */ public function get($id, $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) { - // Attempt to retrieve the service by checking first aliases then - // available services. Service IDs are case insensitive, however since - // this method can be called thousands of times during a request, avoid - // calling $this->normalizeId($id) unless necessary. - for ($i = 2;;) { - if (isset($this->privates[$id])) { - @trigger_error(sprintf('The "%s" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead.', $id), \E_USER_DEPRECATED); - } - if (isset($this->aliases[$id])) { - $id = $this->aliases[$id]; - } + $service = $this->services[$id] + ?? $this->services[$id = $this->aliases[$id] ?? $id] + ?? ('service_container' === $id ? $this : ($this->factories[$id] ?? [$this, 'make'])($id, $invalidBehavior)); - // Re-use shared service instance if it exists. - if (isset($this->services[$id])) { - return $this->services[$id]; - } - if ('service_container' === $id) { - return $this; - } - - if (isset($this->loading[$id])) { - throw new ServiceCircularReferenceException($id, array_merge(array_keys($this->loading), [$id])); - } - - $this->loading[$id] = true; + if (!\is_object($service) && null !== $service) { + @trigger_error(sprintf('Non-object services are deprecated since Symfony 4.4, please fix the "%s" service which is of type "%s" right now.', $id, \gettype($service)), \E_USER_DEPRECATED); + } - try { - if (isset($this->fileMap[$id])) { - return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->load($this->fileMap[$id]); - } elseif (isset($this->methodMap[$id])) { - return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$this->methodMap[$id]}(); - } elseif (--$i && $id !== $normalizedId = $this->normalizeId($id)) { - unset($this->loading[$id]); - $id = $normalizedId; - continue; - } elseif (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class && method_exists($this, $method = 'get'.strtr($id, $this->underscoreMap).'Service')) { - // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, - // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); + return $service; + } - return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$method}(); - } + /** + * Creates a service. + * + * As a separate method to allow "get()" to use the really fast `??` operator. + */ + private function make(string $id, int $invalidBehavior) + { + if (isset($this->loading[$id])) { + throw new ServiceCircularReferenceException($id, array_merge(array_keys($this->loading), [$id])); + } - break; - } catch (\Exception $e) { - unset($this->services[$id]); + $this->loading[$id] = true; - throw $e; - } finally { - unset($this->loading[$id]); + try { + if (isset($this->fileMap[$id])) { + return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->load($this->fileMap[$id]); + } elseif (isset($this->methodMap[$id])) { + return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$this->methodMap[$id]}(); } + } catch (\Exception $e) { + unset($this->services[$id]); + + throw $e; + } finally { + unset($this->loading[$id]); } if (/* self::EXCEPTION_ON_INVALID_REFERENCE */ 1 === $invalidBehavior) { @@ -339,14 +277,19 @@ class Container implements ResettableContainerInterface $alternatives = []; foreach ($this->getServiceIds() as $knownId) { + if ('' === $knownId || '.' === $knownId[0]) { + continue; + } $lev = levenshtein($id, $knownId); - if ($lev <= \strlen($id) / 3 || false !== strpos($knownId, $id)) { + if ($lev <= \strlen($id) / 3 || str_contains($knownId, $id)) { $alternatives[] = $knownId; } } throw new ServiceNotFoundException($id, null, null, $alternatives); } + + return null; } /** @@ -358,12 +301,6 @@ class Container implements ResettableContainerInterface */ public function initialized($id) { - $id = $this->normalizeId($id); - - if (isset($this->privates[$id])) { - @trigger_error(sprintf('Checking for the initialization of the "%s" private service is deprecated since Symfony 3.4 and won\'t be supported anymore in Symfony 4.0.', $id), \E_USER_DEPRECATED); - } - if (isset($this->aliases[$id])) { $id = $this->aliases[$id]; } @@ -380,7 +317,18 @@ class Container implements ResettableContainerInterface */ public function reset() { - $this->services = []; + $services = $this->services + $this->privates; + $this->services = $this->factories = $this->privates = []; + + foreach ($services as $service) { + try { + if ($service instanceof ResetInterface) { + $service->reset(); + } + } catch (\Throwable $e) { + continue; + } + } } /** @@ -390,22 +338,7 @@ class Container implements ResettableContainerInterface */ public function getServiceIds() { - $ids = []; - - if (!$this->methodMap && !$this instanceof ContainerBuilder && __CLASS__ !== static::class) { - // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, - // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) - @trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); - - foreach (get_class_methods($this) as $method) { - if (preg_match('/^get(.+)Service$/', $method, $match)) { - $ids[] = self::underscore($match[1]); - } - } - } - $ids[] = 'service_container'; - - return array_map('strval', array_unique(array_merge($ids, array_keys($this->methodMap), array_keys($this->fileMap), array_keys($this->aliases), array_keys($this->services)))); + return array_map('strval', array_unique(array_merge(['service_container'], array_keys($this->fileMap), array_keys($this->methodMap), array_keys($this->aliases), array_keys($this->services)))); } /** @@ -471,9 +404,7 @@ class Container implements ResettableContainerInterface $this->set($id, new ServiceLocator([])); } if (!$this->getEnv) { - $this->getEnv = new \ReflectionMethod($this, __FUNCTION__); - $this->getEnv->setAccessible(true); - $this->getEnv = $this->getEnv->getClosure($this); + $this->getEnv = \Closure::fromCallable([$this, 'getEnv']); } $processors = $this->get($id); @@ -495,29 +426,32 @@ class Container implements ResettableContainerInterface } /** - * Returns the case sensitive id used at registration time. - * - * @param string $id + * @param string|false $registry + * @param string|bool $load * - * @return string + * @return mixed * * @internal */ - public function normalizeId($id) + final protected function getService($registry, string $id, ?string $method, $load) { - if (!\is_string($id)) { - $id = (string) $id; + if ('service_container' === $id) { + return $this; } - if (isset($this->normalizedIds[$normalizedId = strtolower($id)])) { - $normalizedId = $this->normalizedIds[$normalizedId]; - if ($id !== $normalizedId) { - @trigger_error(sprintf('Service identifiers will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.3.', $id, $normalizedId), \E_USER_DEPRECATED); - } - } else { - $normalizedId = $this->normalizedIds[$normalizedId] = $id; + if (\is_string($load)) { + throw new RuntimeException($load); + } + if (null === $method) { + return false !== $registry ? $this->{$registry}[$id] ?? null : null; + } + if (false !== $registry) { + return $this->{$registry}[$id] ?? $this->{$registry}[$id] = $load ? $this->load($method) : $this->{$method}(); + } + if (!$load) { + return $this->{$method}(); } - return $normalizedId; + return ($factory = $this->factories[$id] ?? $this->factories['service_container'][$id] ?? null) ? $factory() : $this->load($method); } private function __clone() diff --git a/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php b/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php index 97617cb04ef22f5903d20cd82f5bd14e2e8e45a3..f97a57406ae62399341ff95472f0fa48946d9450 100644 --- a/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php +++ b/civicrm/vendor/symfony/dependency-injection/ContainerBuilder.php @@ -23,6 +23,8 @@ use Symfony\Component\Config\Resource\ResourceInterface; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocator; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Compiler\Compiler; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\PassConfig; @@ -39,7 +41,6 @@ use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\RealServiceInst use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; -use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher; use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; @@ -125,7 +126,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface private $removedBindingIds = []; - private static $internalTypes = [ + private const INTERNAL_TYPES = [ 'int' => true, 'float' => true, 'string' => true, @@ -143,7 +144,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface { parent::__construct($parameterBag); - $this->trackResources = interface_exists('Symfony\Component\Config\Resource\ResourceInterface'); + $this->trackResources = interface_exists(ResourceInterface::class); $this->setDefinition('service_container', (new Definition(ContainerInterface::class))->setSynthetic(true)->setPublic(true)); $this->setAlias(PsrContainerInterface::class, new Alias('service_container', false)); $this->setAlias(ContainerInterface::class, new Alias('service_container', false)); @@ -325,39 +326,20 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this; } - /** - * Adds the given class hierarchy as resources. - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. Use addObjectResource() or getReflectionClass() instead. - */ - public function addClassResource(\ReflectionClass $class) - { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the addObjectResource() or the getReflectionClass() method instead.', \E_USER_DEPRECATED); - - return $this->addObjectResource($class->name); - } - /** * Retrieves the requested reflection class and registers it for resource tracking. * - * @param string $class - * @param bool $throw - * - * @return \ReflectionClass|null - * * @throws \ReflectionException when a parent class/interface/trait is not found and $throw is true * * @final */ - public function getReflectionClass($class, $throw = true) + public function getReflectionClass(?string $class, bool $throw = true): ?\ReflectionClass { if (!$class = $this->getParameterBag()->resolveValue($class)) { return null; } - if (isset(self::$internalTypes[$class])) { + if (isset(self::INTERNAL_TYPES[$class])) { return null; } @@ -380,7 +362,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface if ($this->trackResources) { if (!$classReflector) { - $this->addResource($resource ?: new ClassExistenceResource($class, false)); + $this->addResource($resource ?? new ClassExistenceResource($class, false)); } elseif (!$classReflector->isInternal()) { $path = $classReflector->getFileName(); @@ -401,11 +383,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * @param bool|string $trackContents Whether to track contents of the given resource. If a string is passed, * it will be used as pattern for tracking contents of the requested directory * - * @return bool - * * @final */ - public function fileExists($path, $trackContents = true) + public function fileExists(string $path, $trackContents = true): bool { $exists = file_exists($path); @@ -463,27 +443,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Adds a compiler pass. * - * @param CompilerPassInterface $pass A compiler pass - * @param string $type The type of compiler pass - * @param int $priority Used to sort the passes + * @param string $type The type of compiler pass + * @param int $priority Used to sort the passes * * @return $this */ - public function addCompilerPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) + public function addCompilerPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0) { - if (\func_num_args() >= 3) { - $priority = func_get_arg(2); - } else { - if (__CLASS__ !== static::class) { - $r = new \ReflectionMethod($this, __FUNCTION__); - if (__CLASS__ !== $r->getDeclaringClass()->getName()) { - @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), \E_USER_DEPRECATED); - } - } - - $priority = 0; - } - $this->getCompiler()->addPass($pass, $type, $priority); $this->addObjectResource($pass); @@ -525,7 +491,11 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function set($id, $service) { - $id = $this->normalizeId($id); + if (!\is_object($service) && null !== $service) { + @trigger_error(sprintf('Non-object services are deprecated since Symfony 4.4, setting the "%s" service to a value of type "%s" should be avoided.', $id, \gettype($service)), \E_USER_DEPRECATED); + } + + $id = (string) $id; if ($this->isCompiled() && (isset($this->definitions[$id]) && !$this->definitions[$id]->isSynthetic())) { // setting a synthetic service on a compiled container is alright @@ -544,7 +514,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function removeDefinition($id) { - if (isset($this->definitions[$id = $this->normalizeId($id)])) { + if (isset($this->definitions[$id = (string) $id])) { unset($this->definitions[$id]); $this->removedIds[$id] = true; } @@ -559,7 +529,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function has($id) { - $id = $this->normalizeId($id); + $id = (string) $id; return isset($this->definitions[$id]) || isset($this->aliasDefinitions[$id]) || parent::has($id); } @@ -581,17 +551,21 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function get($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) { - if ($this->isCompiled() && isset($this->removedIds[$id = $this->normalizeId($id)])) { - @trigger_error(sprintf('Fetching the "%s" private service or alias is deprecated since Symfony 3.4 and will fail in 4.0. Make it public instead.', $id), \E_USER_DEPRECATED); + if ($this->isCompiled() && isset($this->removedIds[$id = (string) $id]) && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $invalidBehavior) { + return parent::get($id); + } + + $service = $this->doGet($id, $invalidBehavior); + + if (!\is_object($service) && null !== $service) { + @trigger_error(sprintf('Non-object services are deprecated since Symfony 4.4, please fix the "%s" service which is of type "%s" right now.', $id, \gettype($service)), \E_USER_DEPRECATED); } - return $this->doGet($id, $invalidBehavior); + return $service; } - private function doGet($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, array &$inlineServices = null, $isConstructorArgument = false) + private function doGet(string $id, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, array &$inlineServices = null, bool $isConstructorArgument = false) { - $id = $this->normalizeId($id); - if (isset($inlineServices[$id])) { return $inlineServices[$id]; } @@ -613,19 +587,29 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } if (!isset($this->definitions[$id]) && isset($this->aliasDefinitions[$id])) { - return $this->doGet((string) $this->aliasDefinitions[$id], $invalidBehavior, $inlineServices, $isConstructorArgument); + $alias = $this->aliasDefinitions[$id]; + + if ($alias->isDeprecated()) { + @trigger_error($alias->getDeprecationMessage($id), \E_USER_DEPRECATED); + } + + return $this->doGet((string) $alias, $invalidBehavior, $inlineServices, $isConstructorArgument); } try { $definition = $this->getDefinition($id); } catch (ServiceNotFoundException $e) { - if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) { + if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE < $invalidBehavior) { return null; } throw $e; } + if ($definition->hasErrors() && $e = $definition->getErrors()) { + throw new RuntimeException(reset($e)); + } + if ($isConstructorArgument) { $this->loading[$id] = true; } @@ -760,19 +744,8 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * Set to "true" when you want to use the current ContainerBuilder * directly, keep to "false" when the container is dumped instead. */ - public function compile(/*$resolveEnvPlaceholders = false*/) + public function compile(bool $resolveEnvPlaceholders = false) { - if (1 <= \func_num_args()) { - $resolveEnvPlaceholders = func_get_arg(0); - } else { - if (__CLASS__ !== static::class) { - $r = new \ReflectionMethod($this, __FUNCTION__); - if (__CLASS__ !== $r->getDeclaringClass()->getName() && (1 > $r->getNumberOfParameters() || 'resolveEnvPlaceholders' !== $r->getParameters()[0]->name)) { - @trigger_error(sprintf('The %s::compile() method expects a first "$resolveEnvPlaceholders" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), \E_USER_DEPRECATED); - } - } - $resolveEnvPlaceholders = false; - } $compiler = $this->getCompiler(); if ($this->trackResources) { @@ -863,14 +836,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function setAlias($alias, $id) { - $alias = $this->normalizeId($alias); + $alias = (string) $alias; - if ('' === $alias || '\\' === substr($alias, -1) || \strlen($alias) !== strcspn($alias, "\0\r\n'")) { + if ('' === $alias || '\\' === $alias[-1] || \strlen($alias) !== strcspn($alias, "\0\r\n'")) { throw new InvalidArgumentException(sprintf('Invalid alias id: "%s".', $alias)); } if (\is_string($id)) { - $id = new Alias($this->normalizeId($id)); + $id = new Alias($id); } elseif (!$id instanceof Alias) { throw new InvalidArgumentException('$id must be a string, or an Alias object.'); } @@ -891,7 +864,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function removeAlias($alias) { - if (isset($this->aliasDefinitions[$alias = $this->normalizeId($alias)])) { + if (isset($this->aliasDefinitions[$alias = (string) $alias])) { unset($this->aliasDefinitions[$alias]); $this->removedIds[$alias] = true; } @@ -906,12 +879,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function hasAlias($id) { - return isset($this->aliasDefinitions[$this->normalizeId($id)]); + return isset($this->aliasDefinitions[$id = (string) $id]); } /** - * Gets all defined aliases. - * * @return Alias[] An array of aliases */ public function getAliases() @@ -930,7 +901,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function getAlias($id) { - $id = $this->normalizeId($id); + $id = (string) $id; if (!isset($this->aliasDefinitions[$id])) { throw new InvalidArgumentException(sprintf('The service alias "%s" does not exist.', $id)); @@ -1007,8 +978,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Sets a service definition. * - * @param string $id The service identifier - * @param Definition $definition A Definition instance + * @param string $id The service identifier * * @return Definition the service definition * @@ -1020,9 +990,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface throw new BadMethodCallException('Adding definition to a compiled container is not allowed.'); } - $id = $this->normalizeId($id); + $id = (string) $id; - if ('' === $id || '\\' === substr($id, -1) || \strlen($id) !== strcspn($id, "\0\r\n'")) { + if ('' === $id || '\\' === $id[-1] || \strlen($id) !== strcspn($id, "\0\r\n'")) { throw new InvalidArgumentException(sprintf('Invalid service id: "%s".', $id)); } @@ -1040,7 +1010,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function hasDefinition($id) { - return isset($this->definitions[$this->normalizeId($id)]); + return isset($this->definitions[(string) $id]); } /** @@ -1054,7 +1024,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function getDefinition($id) { - $id = $this->normalizeId($id); + $id = (string) $id; if (!isset($this->definitions[$id])) { throw new ServiceNotFoundException($id); @@ -1076,7 +1046,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function findDefinition($id) { - $id = $this->normalizeId($id); + $id = (string) $id; $seen = []; while (isset($this->aliasDefinitions[$id])) { @@ -1099,17 +1069,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Creates a service for a service definition. * - * @param Definition $definition A service definition instance - * @param string $id The service identifier - * @param bool $tryProxy Whether to try proxying the service with a lazy proxy - * * @return mixed The service described by the service definition * * @throws RuntimeException When the factory definition is incomplete * @throws RuntimeException When the service is a synthetic service * @throws InvalidArgumentException When configure callable is not callable */ - private function createService(Definition $definition, array &$inlineServices, $isConstructorArgument = false, $id = null, $tryProxy = true) + private function createService(Definition $definition, array &$inlineServices, bool $isConstructorArgument = false, string $id = null, bool $tryProxy = true) { if (null === $id && isset($inlineServices[$h = spl_object_hash($definition)])) { return $inlineServices[$h]; @@ -1161,7 +1127,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } if (null !== $factory) { - $service = \call_user_func_array($factory, $arguments); + $service = $factory(...$arguments); if (!$definition->isDeprecated() && \is_array($factory) && \is_string($factory[0])) { $r = new \ReflectionClass($factory[0]); @@ -1171,20 +1137,24 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } } } else { - $r = new \ReflectionClass($class = $parameterBag->resolveValue($definition->getClass())); + $r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass())); $service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs(array_values($arguments)); - // don't trigger deprecations for internal uses - // @deprecated since version 3.3, to be removed in 4.0 along with the deprecated class - $deprecationAllowlist = ['event_dispatcher' => ContainerAwareEventDispatcher::class]; - if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ") && (!isset($deprecationAllowlist[$id]) || $deprecationAllowlist[$id] !== $class)) { + if (!$definition->isDeprecated() && 0 < strpos($r->getDocComment(), "\n * @deprecated ")) { @trigger_error(sprintf('The "%s" service relies on the deprecated "%s" class. It should either be deprecated or its implementation upgraded.', $id, $r->name), \E_USER_DEPRECATED); } } - if ($tryProxy || !$definition->isLazy()) { - // share only if proxying failed, or if not a proxy + $lastWitherIndex = null; + foreach ($definition->getMethodCalls() as $k => $call) { + if ($call[2] ?? false) { + $lastWitherIndex = $k; + } + } + + if (null === $lastWitherIndex && ($tryProxy || !$definition->isLazy())) { + // share only if proxying failed, or if not a proxy, and if no withers are found $this->shareService($definition, $service, $id, $inlineServices); } @@ -1193,8 +1163,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface $service->$name = $value; } - foreach ($definition->getMethodCalls() as $call) { - $this->callMethod($service, $call, $inlineServices); + foreach ($definition->getMethodCalls() as $k => $call) { + $service = $this->callMethod($service, $call, $inlineServices); + + if ($lastWitherIndex === $k && ($tryProxy || !$definition->isLazy())) { + // share only if proxying failed, or if not a proxy, and this is the last wither + $this->shareService($definition, $service, $id, $inlineServices); + } } if ($callable = $definition->getConfigurator()) { @@ -1212,7 +1187,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface throw new InvalidArgumentException(sprintf('The configure callable for class "%s" is not a callable.', \get_class($service))); } - \call_user_func($callable, $service); + $callable($service); } return $service; @@ -1231,7 +1206,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->doResolveServices($value); } - private function doResolveServices($value, array &$inlineServices = [], $isConstructorArgument = false) + private function doResolveServices($value, array &$inlineServices = [], bool $isConstructorArgument = false) { if (\is_array($value)) { foreach ($value as $k => $v) { @@ -1243,7 +1218,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->resolveServices($reference); }; } elseif ($value instanceof IteratorArgument) { - $value = new RewindableGenerator(function () use ($value) { + $value = new RewindableGenerator(function () use ($value, &$inlineServices) { foreach ($value->getValues() as $k => $v) { foreach (self::getServiceConditionals($v) as $s) { if (!$this->has($s)) { @@ -1251,14 +1226,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } } foreach (self::getInitializedConditionals($v) as $s) { - if (!$this->doGet($s, ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE)) { + if (!$this->doGet($s, ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE, $inlineServices)) { continue 2; } } - yield $k => $this->resolveServices($v); + yield $k => $this->doResolveServices($v, $inlineServices); } - }, function () use ($value) { + }, function () use ($value): int { $count = 0; foreach ($value->getValues() as $v) { foreach (self::getServiceConditionals($v) as $s) { @@ -1277,6 +1252,15 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $count; }); + } elseif ($value instanceof ServiceLocatorArgument) { + $refs = $types = []; + foreach ($value->getValues() as $k => $v) { + if ($v) { + $refs[$k] = [$v]; + $types[$k] = $v instanceof TypedReference ? $v->getType() : '?'; + } + } + $value = new ServiceLocator(\Closure::fromCallable([$this, 'resolveServices']), $refs, $types); } elseif ($value instanceof Reference) { $value = $this->doGet((string) $value, $value->getInvalidBehavior(), $inlineServices, $isConstructorArgument); } elseif ($value instanceof Definition) { @@ -1379,6 +1363,25 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->autoconfiguredInstanceof[$interface]; } + /** + * Registers an autowiring alias that only binds to a specific argument name. + * + * The argument name is derived from $name if provided (from $id otherwise) + * using camel case: "foo.bar" or "foo_bar" creates an alias bound to + * "$fooBar"-named arguments with $type as type-hint. Such arguments will + * receive the service $id when autowiring is used. + */ + public function registerAliasForArgument(string $id, string $type, string $name = null): Alias + { + $name = lcfirst(str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $name ?? $id)))); + + if (!preg_match('/^[a-zA-Z_\x7f-\xff]/', $name)) { + throw new InvalidArgumentException(sprintf('Invalid argument name "%s" for service "%s": the first character must be a letter.', $name, $id)); + } + + return $this->setAlias($type.' $'.$name, $id); + } + /** * Returns an array of ChildDefinition[] keyed by interface. * @@ -1411,6 +1414,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface $value = $bag->resolveValue($value); } + if ($value instanceof Definition) { + $value = (array) $value; + } + if (\is_array($value)) { $result = []; foreach ($value as $k => $v) { @@ -1475,50 +1482,20 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->envCounters; } - /** - * @internal - */ - public function getNormalizedIds() - { - $normalizedIds = []; - - foreach ($this->normalizedIds as $k => $v) { - if ($v !== (string) $k) { - $normalizedIds[$k] = $v; - } - } - - return $normalizedIds; - } - /** * @final */ - public function log(CompilerPassInterface $pass, $message) + public function log(CompilerPassInterface $pass, string $message) { $this->getCompiler()->log($pass, $this->resolveEnvPlaceholders($message)); } - /** - * {@inheritdoc} - */ - public function normalizeId($id) - { - if (!\is_string($id)) { - $id = (string) $id; - } - - return isset($this->definitions[$id]) || isset($this->aliasDefinitions[$id]) || isset($this->removedIds[$id]) ? $id : parent::normalizeId($id); - } - /** * Gets removed binding ids. * - * @return array - * * @internal */ - public function getRemovedBindingIds() + public function getRemovedBindingIds(): array { return $this->removedBindingIds; } @@ -1526,15 +1503,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Removes bindings for a service. * - * @param string $id The service identifier - * * @internal */ - public function removeBindings($id) + public function removeBindings(string $id) { if ($this->hasDefinition($id)) { foreach ($this->getDefinition($id)->getBindings() as $key => $binding) { - list(, $bindingId) = $binding->getValues(); + [, $bindingId] = $binding->getValues(); $this->removedBindingIds[(int) $bindingId] = true; } } @@ -1545,11 +1520,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @param mixed $value An array of conditionals to return * - * @return array An array of Service conditionals - * - * @internal since version 3.4 + * @internal */ - public static function getServiceConditionals($value) + public static function getServiceConditionals($value): array { $services = []; @@ -1569,11 +1542,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @param mixed $value An array of conditionals to return * - * @return array An array of uninitialized conditionals - * * @internal */ - public static function getInitializedConditionals($value) + public static function getInitializedConditionals($value): array { $services = []; @@ -1599,7 +1570,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface { $hash = substr(base64_encode(hash('sha256', serialize($value), true)), 0, 7); - return str_replace(['/', '+'], ['.', '_'], strtolower($hash)); + return str_replace(['/', '+'], ['.', '_'], $hash); } /** @@ -1614,11 +1585,15 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $value; } - foreach ($bag->getEnvPlaceholders() as $env => $placeholders) { - if (isset($placeholders[$value])) { - $bag = new ParameterBag($bag->all()); + $envPlaceholders = $bag->getEnvPlaceholders(); + if (isset($envPlaceholders[$name][$value])) { + $bag = new ParameterBag($bag->all()); - return $bag->unescapeValue($bag->get("env($name)")); + return $bag->unescapeValue($bag->get("env($name)")); + } + foreach ($envPlaceholders as $env => $placeholders) { + if (isset($placeholders[$value])) { + return $this->getEnv($env); } } @@ -1630,31 +1605,32 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } } - private function callMethod($service, $call, array &$inlineServices) + private function callMethod($service, array $call, array &$inlineServices) { foreach (self::getServiceConditionals($call[1]) as $s) { if (!$this->has($s)) { - return; + return $service; } } foreach (self::getInitializedConditionals($call[1]) as $s) { if (!$this->doGet($s, ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE, $inlineServices)) { - return; + return $service; } } - \call_user_func_array([$service, $call[0]], $this->doResolveServices($this->getParameterBag()->unescapeValue($this->getParameterBag()->resolveValue($call[1])), $inlineServices)); + $result = $service->{$call[0]}(...$this->doResolveServices($this->getParameterBag()->unescapeValue($this->getParameterBag()->resolveValue($call[1])), $inlineServices)); + + return empty($call[2]) ? $service : $result; } /** * Shares a given service in the container. * - * @param mixed $service - * @param string|null $id + * @param mixed $service */ - private function shareService(Definition $definition, $service, $id, array &$inlineServices) + private function shareService(Definition $definition, $service, ?string $id, array &$inlineServices) { - $inlineServices[null !== $id ? $id : spl_object_hash($definition)] = $service; + $inlineServices[$id ?? spl_object_hash($definition)] = $service; if (null !== $id && $definition->isShared()) { $this->services[$id] = $service; @@ -1662,11 +1638,11 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } } - private function getExpressionLanguage() + private function getExpressionLanguage(): ExpressionLanguage { if (null === $this->expressionLanguage) { - if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) { - throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); + if (!class_exists(\Symfony\Component\ExpressionLanguage\ExpressionLanguage::class)) { + throw new LogicException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); } $this->expressionLanguage = new ExpressionLanguage(null, $this->expressionLanguageProviders); } @@ -1674,17 +1650,17 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->expressionLanguage; } - private function inVendors($path) + private function inVendors(string $path): bool { if (null === $this->vendors) { - $resource = new ComposerResource(); - $this->vendors = $resource->getVendors(); - $this->addResource($resource); + $this->vendors = (new ComposerResource())->getVendors(); } $path = realpath($path) ?: $path; foreach ($this->vendors as $vendor) { - if (0 === strpos($path, $vendor) && false !== strpbrk(substr($path, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { + if (str_starts_with($path, $vendor) && false !== strpbrk(substr($path, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { + $this->addResource(new FileResource($vendor.'/composer/installed.json')); + return true; } } diff --git a/civicrm/vendor/symfony/dependency-injection/ContainerInterface.php b/civicrm/vendor/symfony/dependency-injection/ContainerInterface.php index c5ab4c2eda7d73d3572b1d2493069ce5ee36a68b..e47e7f9fb888e0eab76358a505455475d2b7a6c6 100644 --- a/civicrm/vendor/symfony/dependency-injection/ContainerInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/ContainerInterface.php @@ -24,10 +24,11 @@ use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; */ interface ContainerInterface extends PsrContainerInterface { - const EXCEPTION_ON_INVALID_REFERENCE = 1; - const NULL_ON_INVALID_REFERENCE = 2; - const IGNORE_ON_INVALID_REFERENCE = 3; - const IGNORE_ON_UNINITIALIZED_REFERENCE = 4; + public const RUNTIME_EXCEPTION_ON_INVALID_REFERENCE = 0; + public const EXCEPTION_ON_INVALID_REFERENCE = 1; + public const NULL_ON_INVALID_REFERENCE = 2; + public const IGNORE_ON_INVALID_REFERENCE = 3; + public const IGNORE_ON_UNINITIALIZED_REFERENCE = 4; /** * Sets a service. @@ -53,8 +54,6 @@ interface ContainerInterface extends PsrContainerInterface public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE); /** - * Returns true if the given service is defined. - * * @param string $id The service identifier * * @return bool true if the service is defined, false otherwise @@ -75,7 +74,7 @@ interface ContainerInterface extends PsrContainerInterface * * @param string $name The parameter name * - * @return mixed The parameter value + * @return array|bool|string|int|float|\UnitEnum|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -93,8 +92,8 @@ interface ContainerInterface extends PsrContainerInterface /** * Sets a parameter. * - * @param string $name The parameter name - * @param mixed $value The parameter value + * @param string $name The parameter name + * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value */ public function setParameter($name, $value); } diff --git a/civicrm/vendor/symfony/dependency-injection/Definition.php b/civicrm/vendor/symfony/dependency-injection/Definition.php index c3a94f5c3c4d1fc4d1a7887ed20c0b1900557bbc..34ddbbbdd838b929581e83c77355e5f5a594bc45 100644 --- a/civicrm/vendor/symfony/dependency-injection/Definition.php +++ b/civicrm/vendor/symfony/dependency-injection/Definition.php @@ -22,6 +22,8 @@ use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException; */ class Definition { + private const DEFAULT_DEPRECATION_TEMPLATE = 'The "%service_id%" service is deprecated. You should stop using it, as it will be removed in the future.'; + private $class; private $file; private $factory; @@ -41,14 +43,25 @@ class Definition private $lazy = false; private $decoratedService; private $autowired = false; - private $autowiringTypes = []; private $changes = []; private $bindings = []; private $errors = []; protected $arguments = []; - private static $defaultDeprecationTemplate = 'The "%service_id%" service is deprecated. You should stop using it, as it will soon be removed.'; + /** + * @internal + * + * Used to store the name of the inner id when using service decoration together with autowiring + */ + public $innerServiceId; + + /** + * @internal + * + * Used to store the behavior to follow when using service decoration and the decorated service is invalid + */ + public $decorationOnInvalid; /** * @param string|null $class The service class @@ -89,7 +102,7 @@ class Definition /** * Sets a factory. * - * @param string|array $factory A PHP function or an array containing a class/Reference and a method to call + * @param string|array|Reference|null $factory A PHP function, reference or an array containing a class/Reference and a method to call * * @return $this */ @@ -97,8 +110,10 @@ class Definition { $this->changes['factory'] = true; - if (\is_string($factory) && false !== strpos($factory, '::')) { + if (\is_string($factory) && str_contains($factory, '::')) { $factory = explode('::', $factory, 2); + } elseif ($factory instanceof Reference) { + $factory = [$factory, '__invoke']; } $this->factory = $factory; @@ -119,26 +134,33 @@ class Definition /** * Sets the service that this service is decorating. * - * @param string|null $id The decorated service id, use null to remove decoration - * @param string|null $renamedId The new decorated service id - * @param int $priority The priority of decoration + * @param string|null $id The decorated service id, use null to remove decoration + * @param string|null $renamedId The new decorated service id + * @param int $priority The priority of decoration + * @param int $invalidBehavior The behavior to adopt when decorated is invalid * * @return $this * * @throws InvalidArgumentException in case the decorated service id and the new decorated service id are equals */ - public function setDecoratedService($id, $renamedId = null, $priority = 0) + public function setDecoratedService($id, $renamedId = null, $priority = 0/*, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE*/) { if ($renamedId && $id === $renamedId) { throw new InvalidArgumentException(sprintf('The decorated service inner name for "%s" must be different than the service name itself.', $id)); } + $invalidBehavior = 3 < \func_num_args() ? (int) func_get_arg(3) : ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + $this->changes['decorated_service'] = true; if (null === $id) { $this->decoratedService = null; } else { $this->decoratedService = [$id, $renamedId, (int) $priority]; + + if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) { + $this->decoratedService[] = $invalidBehavior; + } } return $this; @@ -163,6 +185,13 @@ class Definition */ public function setClass($class) { + if ($class instanceof Parameter) { + @trigger_error(sprintf('Passing an instance of %s as class name to %s in deprecated in Symfony 4.4 and will result in a TypeError in 5.0. Please pass the string "%%%s%%" instead.', Parameter::class, __CLASS__, (string) $class), \E_USER_DEPRECATED); + } + if (null !== $class && !\is_string($class)) { + @trigger_error(sprintf('The class name passed to %s is expected to be a string. Passing a %s is deprecated in Symfony 4.4 and will result in a TypeError in 5.0.', __CLASS__, \is_object($class) ? \get_class($class) : \gettype($class)), \E_USER_DEPRECATED); + } + $this->changes['class'] = true; $this->class = $class; @@ -324,7 +353,7 @@ class Definition { $this->calls = []; foreach ($calls as $call) { - $this->addMethodCall($call[0], $call[1]); + $this->addMethodCall($call[0], $call[1], $call[2] ?? false); } return $this; @@ -333,19 +362,20 @@ class Definition /** * Adds a method to call after service initialization. * - * @param string $method The method name to call - * @param array $arguments An array of arguments to pass to the method call + * @param string $method The method name to call + * @param array $arguments An array of arguments to pass to the method call + * @param bool $returnsClone Whether the call returns the service instance or not * * @return $this * * @throws InvalidArgumentException on empty $method param */ - public function addMethodCall($method, array $arguments = []) + public function addMethodCall($method, array $arguments = []/*, bool $returnsClone = false*/) { if (empty($method)) { throw new InvalidArgumentException('Method name cannot be empty.'); } - $this->calls[] = [$method, $arguments]; + $this->calls[] = 2 < \func_num_args() && func_get_arg(2) ? [$method, $arguments, true] : [$method, $arguments]; return $this; } @@ -362,7 +392,6 @@ class Definition foreach ($this->calls as $i => $call) { if ($call[0] === $method) { unset($this->calls[$i]); - break; } } @@ -476,7 +505,7 @@ class Definition */ public function getTag($name) { - return isset($this->tags[$name]) ? $this->tags[$name] : []; + return $this->tags[$name] ?? []; } /** @@ -736,7 +765,7 @@ class Definition throw new InvalidArgumentException('Invalid characters found in deprecation template.'); } - if (false === strpos($template, '%service_id%')) { + if (!str_contains($template, '%service_id%')) { throw new InvalidArgumentException('The deprecation template must contain the "%service_id%" placeholder.'); } @@ -770,13 +799,13 @@ class Definition */ public function getDeprecationMessage($id) { - return str_replace('%service_id%', $id, $this->deprecationTemplate ?: self::$defaultDeprecationTemplate); + return str_replace('%service_id%', $id, $this->deprecationTemplate ?: self::DEFAULT_DEPRECATION_TEMPLATE); } /** * Sets a configurator to call after the service is fully initialized. * - * @param string|array $configurator A PHP callable + * @param string|array|Reference|null $configurator A PHP function, reference or an array containing a class/Reference and a method to call * * @return $this */ @@ -784,8 +813,10 @@ class Definition { $this->changes['configurator'] = true; - if (\is_string($configurator) && false !== strpos($configurator, '::')) { + if (\is_string($configurator) && str_contains($configurator, '::')) { $configurator = explode('::', $configurator, 2); + } elseif ($configurator instanceof Reference) { + $configurator = [$configurator, '__invoke']; } $this->configurator = $configurator; @@ -803,28 +834,6 @@ class Definition return $this->configurator; } - /** - * Sets types that will default to this definition. - * - * @param string[] $types - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function setAutowiringTypes(array $types) - { - @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', \E_USER_DEPRECATED); - - $this->autowiringTypes = []; - - foreach ($types as $type) { - $this->autowiringTypes[$type] = true; - } - - return $this; - } - /** * Is the definition autowired? * @@ -851,78 +860,10 @@ class Definition return $this; } - /** - * Gets autowiring types that will default to this definition. - * - * @return string[] - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function getAutowiringTypes(/*$triggerDeprecation = true*/) - { - if (1 > \func_num_args() || func_get_arg(0)) { - @trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', \E_USER_DEPRECATED); - } - - return array_keys($this->autowiringTypes); - } - - /** - * Adds a type that will default to this definition. - * - * @param string $type - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function addAutowiringType($type) - { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); - - $this->autowiringTypes[$type] = true; - - return $this; - } - - /** - * Removes a type. - * - * @param string $type - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function removeAutowiringType($type) - { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); - - unset($this->autowiringTypes[$type]); - - return $this; - } - - /** - * Will this definition default for the given type? - * - * @param string $type - * - * @return bool - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function hasAutowiringType($type) - { - @trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), \E_USER_DEPRECATED); - - return isset($this->autowiringTypes[$type]); - } - /** * Gets bindings. * - * @return array + * @return array|BoundArgument[] */ public function getBindings() { @@ -941,6 +882,10 @@ class Definition public function setBindings(array $bindings) { foreach ($bindings as $key => $binding) { + if (0 < strpos($key, '$') && $key !== $k = preg_replace('/[ \t]*\$/', ' $', $key)) { + unset($bindings[$key]); + $bindings[$key = $k] = $binding; + } if (!$binding instanceof BoundArgument) { $bindings[$key] = new BoundArgument($binding); } @@ -954,11 +899,19 @@ class Definition /** * Add an error that occurred when building this Definition. * - * @param string $error + * @param string|\Closure|self $error + * + * @return $this */ public function addError($error) { - $this->errors[] = $error; + if ($error instanceof self) { + $this->errors = array_merge($this->errors, $error->errors); + } else { + $this->errors[] = $error; + } + + return $this; } /** @@ -968,6 +921,19 @@ class Definition */ public function getErrors() { + foreach ($this->errors as $i => $error) { + if ($error instanceof \Closure) { + $this->errors[$i] = (string) $error(); + } elseif (!\is_string($error)) { + $this->errors[$i] = (string) $error; + } + } + return $this->errors; } + + public function hasErrors(): bool + { + return (bool) $this->errors; + } } diff --git a/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php b/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php deleted file mode 100644 index 4753c2aa93db604e394c768b932390ca5106babe..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/DefinitionDecorator.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -@trigger_error('The '.__NAMESPACE__.'\DefinitionDecorator class is deprecated since Symfony 3.3 and will be removed in 4.0. Use the Symfony\Component\DependencyInjection\ChildDefinition class instead.', \E_USER_DEPRECATED); - -class_exists(ChildDefinition::class); - -if (false) { - /** - * This definition decorates another definition. - * - * @author Johannes M. Schmitt <schmittjoh@gmail.com> - * - * @deprecated The DefinitionDecorator class is deprecated since version 3.3 and will be removed in 4.0. Use the Symfony\Component\DependencyInjection\ChildDefinition class instead. - */ - class DefinitionDecorator extends Definition - { - } -} diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php b/civicrm/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php index 0591e024f5753c855e71e128001e35b00d35f5a6..09836cd302d1f597aef7e3071f0119654fa57240 100644 --- a/civicrm/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php @@ -84,12 +84,7 @@ class GraphvizDumper extends Dumper return $this->container->resolveEnvPlaceholders($this->startDot().$this->addNodes().$this->addEdges().$this->endDot(), '__ENV_%s__'); } - /** - * Returns all nodes. - * - * @return string A string representation of all nodes - */ - private function addNodes() + private function addNodes(): string { $code = ''; foreach ($this->nodes as $id => $node) { @@ -101,12 +96,7 @@ class GraphvizDumper extends Dumper return $code; } - /** - * Returns all edges. - * - * @return string A string representation of all edges - */ - private function addEdges() + private function addEdges(): string { $code = ''; foreach ($this->edges as $id => $edges) { @@ -120,15 +110,8 @@ class GraphvizDumper extends Dumper /** * Finds all edges belonging to a specific service id. - * - * @param string $id The service id used to find edges - * @param array $arguments An array of arguments - * @param bool $required - * @param string $name - * - * @return array An array of edges */ - private function findEdges($id, array $arguments, $required, $name, $lazy = false) + private function findEdges(string $id, array $arguments, bool $required, string $name, bool $lazy = false): array { $edges = []; foreach ($arguments as $argument) { @@ -166,12 +149,7 @@ class GraphvizDumper extends Dumper return $edges; } - /** - * Finds all nodes. - * - * @return array An array of all nodes - */ - private function findNodes() + private function findNodes(): array { $nodes = []; @@ -206,7 +184,7 @@ class GraphvizDumper extends Dumper return $nodes; } - private function cloneContainer() + private function cloneContainer(): ContainerBuilder { $parameterBag = new ParameterBag($this->container->getParameterBag()->all()); @@ -221,12 +199,7 @@ class GraphvizDumper extends Dumper return $container; } - /** - * Returns the start dot. - * - * @return string The string representation of a start dot - */ - private function startDot() + private function startDot(): string { return sprintf("digraph sc {\n %s\n node [%s];\n edge [%s];\n\n", $this->addOptions($this->options['graph']), @@ -235,24 +208,12 @@ class GraphvizDumper extends Dumper ); } - /** - * Returns the end dot. - * - * @return string - */ - private function endDot() + private function endDot(): string { return "}\n"; } - /** - * Adds attributes. - * - * @param array $attributes An array of attributes - * - * @return string A comma separated list of attributes - */ - private function addAttributes(array $attributes) + private function addAttributes(array $attributes): string { $code = []; foreach ($attributes as $k => $v) { @@ -262,14 +223,7 @@ class GraphvizDumper extends Dumper return $code ? ', '.implode(', ', $code) : ''; } - /** - * Adds options. - * - * @param array $options An array of options - * - * @return string A space separated list of options - */ - private function addOptions(array $options) + private function addOptions(array $options): string { $code = []; foreach ($options as $k => $v) { @@ -279,26 +233,12 @@ class GraphvizDumper extends Dumper return implode(' ', $code); } - /** - * Dotizes an identifier. - * - * @param string $id The identifier to dotize - * - * @return string A dotized string - */ - private function dotize($id) + private function dotize(string $id): string { - return strtolower(preg_replace('/\W/i', '_', $id)); + return preg_replace('/\W/i', '_', $id); } - /** - * Compiles an array of aliases for a specified service id. - * - * @param string $id A service id - * - * @return array An array of aliases - */ - private function getAliases($id) + private function getAliases(string $id): array { $aliases = []; foreach ($this->container->getAliases() as $alias => $origin) { diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php index 8605d755b31c6233e90c637e656ccb4fe22ae0e8..e2abcc2b94d49437ebbf65d24c6299c38cc184e4 100644 --- a/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/PhpDumper.php @@ -11,26 +11,35 @@ namespace Symfony\Component\DependencyInjection\Dumper; +use Composer\Autoload\ClassLoader; +use Symfony\Component\Debug\DebugClassLoader as LegacyDebugClassLoader; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocator; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Compiler\AnalyzeServiceReferencesPass; use Symfony\Component\DependencyInjection\Compiler\CheckCircularReferencesPass; +use Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphNode; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\EnvParameterException; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\ExpressionLanguage; use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface as ProxyDumper; use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\NullDumper; +use Symfony\Component\DependencyInjection\Loader\FileLoader; use Symfony\Component\DependencyInjection\Parameter; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\ServiceLocator as BaseServiceLocator; use Symfony\Component\DependencyInjection\TypedReference; use Symfony\Component\DependencyInjection\Variable; +use Symfony\Component\ErrorHandler\DebugClassLoader; use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\HttpKernel\Kernel; @@ -45,12 +54,12 @@ class PhpDumper extends Dumper /** * Characters that might appear in the generated variable name as first character. */ - const FIRST_CHARS = 'abcdefghijklmnopqrstuvwxyz'; + public const FIRST_CHARS = 'abcdefghijklmnopqrstuvwxyz'; /** * Characters that might appear in the generated variable name as any but the first character. */ - const NON_FIRST_CHARS = 'abcdefghijklmnopqrstuvwxyz0123456789_'; + public const NON_FIRST_CHARS = 'abcdefghijklmnopqrstuvwxyz0123456789_'; private $definitionVariables; private $referenceVariables; @@ -67,9 +76,18 @@ class PhpDumper extends Dumper private $namespace; private $asFiles; private $hotPathTag; + private $inlineFactories; private $inlineRequires; private $inlinedRequires = []; private $circularReferences = []; + private $singleUsePrivateIds = []; + private $preload = []; + private $addThrow = false; + private $addGetService = false; + private $locatedIds = []; + private $serviceLocatorTag; + private $exportedVariables = []; + private $baseClass; /** * @var ProxyDumper @@ -82,7 +100,7 @@ class PhpDumper extends Dumper public function __construct(ContainerBuilder $container) { if (!$container->isCompiled()) { - @trigger_error('Dumping an uncompiled ContainerBuilder is deprecated since Symfony 3.3 and will not be supported anymore in 4.0. Compile the container beforehand.', \E_USER_DEPRECATED); + throw new LogicException('Cannot dump an uncompiled container.'); } parent::__construct($container); @@ -112,8 +130,10 @@ class PhpDumper extends Dumper */ public function dump(array $options = []) { + $this->locatedIds = []; $this->targetDirRegex = null; $this->inlinedRequires = []; + $this->exportedVariables = []; $options = array_merge([ 'class' => 'ProjectServiceContainer', 'base_class' => 'Container', @@ -121,22 +141,28 @@ class PhpDumper extends Dumper 'as_files' => false, 'debug' => true, 'hot_path_tag' => 'container.hot_path', + 'inline_factories_parameter' => 'container.dumper.inline_factories', 'inline_class_loader_parameter' => 'container.dumper.inline_class_loader', + 'preload_classes' => [], + 'service_locator_tag' => 'container.service_locator', 'build_time' => time(), ], $options); + $this->addThrow = $this->addGetService = false; $this->namespace = $options['namespace']; $this->asFiles = $options['as_files']; $this->hotPathTag = $options['hot_path_tag']; + $this->inlineFactories = $this->asFiles && $options['inline_factories_parameter'] && $this->container->hasParameter($options['inline_factories_parameter']) && $this->container->getParameter($options['inline_factories_parameter']); $this->inlineRequires = $options['inline_class_loader_parameter'] && $this->container->hasParameter($options['inline_class_loader_parameter']) && $this->container->getParameter($options['inline_class_loader_parameter']); + $this->serviceLocatorTag = $options['service_locator_tag']; - if (0 !== strpos($baseClass = $options['base_class'], '\\') && 'Container' !== $baseClass) { + if (!str_starts_with($baseClass = $options['base_class'], '\\') && 'Container' !== $baseClass) { $baseClass = sprintf('%s\%s', $options['namespace'] ? '\\'.$options['namespace'] : '', $baseClass); - $baseClassWithNamespace = $baseClass; + $this->baseClass = $baseClass; } elseif ('Container' === $baseClass) { - $baseClassWithNamespace = Container::class; + $this->baseClass = Container::class; } else { - $baseClassWithNamespace = $baseClass; + $this->baseClass = $baseClass; } $this->initializeMethodNamesMap('Container' === $baseClass ? Container::class : $baseClass); @@ -154,20 +180,7 @@ class PhpDumper extends Dumper } } - (new AnalyzeServiceReferencesPass(false, !$this->getProxyDumper() instanceof NullDumper))->process($this->container); - $checkedNodes = []; - $this->circularReferences = []; - foreach ($this->container->getCompiler()->getServiceReferenceGraph()->getNodes() as $id => $node) { - if (!$node->getValue() instanceof Definition) { - continue; - } - if (!isset($checkedNodes[$id])) { - $this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes); - } - } - $this->container->getCompiler()->getServiceReferenceGraph()->clear(); - $checkedNodes = []; - + $this->analyzeReferences(); $this->docStar = $options['debug'] ? '*' : ''; if (!empty($options['file']) && is_dir($dir = \dirname($options['file']))) { @@ -195,25 +208,49 @@ class PhpDumper extends Dumper } } + $proxyClasses = $this->inlineFactories ? $this->generateProxyClasses() : null; + + if ($options['preload_classes']) { + $this->preload = array_combine($options['preload_classes'], $options['preload_classes']); + } + $code = - $this->startClass($options['class'], $baseClass, $baseClassWithNamespace). - $this->addServices(). - $this->addDefaultParametersMethod(). - $this->endClass() + $this->startClass($options['class'], $baseClass). + $this->addServices($services). + $this->addDeprecatedAliases(). + $this->addDefaultParametersMethod() ; + $proxyClasses = $proxyClasses ?? $this->generateProxyClasses(); + + if ($this->addGetService) { + $code = preg_replace( + "/(\r?\n\r?\n public function __construct.+?\\{\r?\n)/s", + "\n private \$getService;$1 \$this->getService = \\Closure::fromCallable([\$this, 'getService']);\n", + $code, + 1 + ); + } + if ($this->asFiles) { $fileStart = <<<EOF <?php use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; // This file has been auto-generated by the Symfony Dependency Injection Component for internal use. EOF; $files = []; - if ($ids = array_keys($this->container->getRemovedIds())) { + $ids = $this->container->getRemovedIds(); + foreach ($this->container->getDefinitions() as $id => $definition) { + if (!$definition->isPublic()) { + $ids[$id] = true; + } + } + if ($ids = array_keys($ids)) { sort($ids); $c = "<?php\n\nreturn [\n"; foreach ($ids as $id) { @@ -222,12 +259,23 @@ EOF; $files['removed-ids.php'] = $c."];\n"; } - foreach ($this->generateServiceFiles() as $file => $c) { - $files[$file] = $fileStart.$c; + if (!$this->inlineFactories) { + foreach ($this->generateServiceFiles($services) as $file => $c) { + $files[$file] = $fileStart.$c; + } + foreach ($proxyClasses as $file => $c) { + $files[$file] = "<?php\n".$c; + } } - foreach ($this->generateProxyClasses() as $file => $c) { - $files[$file] = "<?php\n".$c; + + $code .= $this->endClass(); + + if ($this->inlineFactories) { + foreach ($proxyClasses as $c) { + $code .= $c; + } } + $files[$options['class'].'.php'] = $code; $hash = ucfirst(strtr(ContainerBuilder::hash($files), '._', 'xx')); $code = []; @@ -240,6 +288,45 @@ EOF; $namespaceLine = $this->namespace ? "\nnamespace {$this->namespace};\n" : ''; $time = $options['build_time']; $id = hash('crc32', $hash.$time); + $this->asFiles = false; + + if ($this->preload && null !== $autoloadFile = $this->getAutoloadFile()) { + $autoloadFile = trim($this->export($autoloadFile), '()\\'); + + $code[$options['class'].'.preload.php'] = <<<EOF +<?php + +// This file has been auto-generated by the Symfony Dependency Injection Component +// You can reference it in the "opcache.preload" php.ini setting on PHP >= 7.4 when preloading is desired + +use Symfony\Component\DependencyInjection\Dumper\Preloader; + +if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) { + return; +} + +require $autoloadFile; +require __DIR__.'/Container{$hash}/{$options['class']}.php'; + +\$classes = []; + +EOF; + + foreach ($this->preload as $class) { + if (!$class || str_contains($class, '$')) { + continue; + } + if (!(class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false)) || ((new \ReflectionClass($class))->isUserDefined() && !\in_array($class, ['Attribute', 'JsonException', 'ReturnTypeWillChange', 'Stringable', 'UnhandledMatchError', 'ValueError'], true))) { + $code[$options['class'].'.preload.php'] .= sprintf("\$classes[] = '%s';\n", $class); + } + } + + $code[$options['class'].'.preload.php'] .= <<<'EOF' + +Preloader::preload($classes); + +EOF; + } $code[$options['class'].'.php'] = <<<EOF <?php @@ -266,7 +353,8 @@ return new \\Container{$hash}\\{$options['class']}([ EOF; } else { - foreach ($this->generateProxyClasses() as $c) { + $code .= $this->endClass(); + foreach ($proxyClasses as $c) { $code .= $c; } } @@ -274,6 +362,9 @@ EOF; $this->targetDirRegex = null; $this->inlinedRequires = []; $this->circularReferences = []; + $this->locatedIds = []; + $this->exportedVariables = []; + $this->preload = []; $unusedEnvs = []; foreach ($this->container->getEnvCounters() as $env => $use) { @@ -290,10 +381,8 @@ EOF; /** * Retrieves the currently set proxy dumper or instantiates one. - * - * @return ProxyDumper */ - private function getProxyDumper() + private function getProxyDumper(): ProxyDumper { if (!$this->proxyDumper) { $this->proxyDumper = new NullDumper(); @@ -302,58 +391,99 @@ EOF; return $this->proxyDumper; } - private function analyzeCircularReferences($sourceId, array $edges, &$checkedNodes, &$currentPath = [], $byConstructor = true) + private function analyzeReferences() { - $checkedNodes[$sourceId] = true; - $currentPath[$sourceId] = $byConstructor; - - foreach ($edges as $edge) { - $node = $edge->getDestNode(); - $id = $node->getId(); - - if (!$node->getValue() instanceof Definition || $sourceId === $id || $edge->isLazy() || $edge->isWeak()) { - // no-op - } elseif (isset($currentPath[$id])) { - $this->addCircularReferences($id, $currentPath, $edge->isReferencedByConstructor()); - } elseif (!isset($checkedNodes[$id])) { - $this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes, $currentPath, $edge->isReferencedByConstructor()); - } elseif (isset($this->circularReferences[$id])) { - $this->connectCircularReferences($id, $currentPath, $edge->isReferencedByConstructor()); + (new AnalyzeServiceReferencesPass(false, !$this->getProxyDumper() instanceof NullDumper))->process($this->container); + $checkedNodes = []; + $this->circularReferences = []; + $this->singleUsePrivateIds = []; + foreach ($this->container->getCompiler()->getServiceReferenceGraph()->getNodes() as $id => $node) { + if (!$node->getValue() instanceof Definition) { + continue; } - } - unset($currentPath[$sourceId]); - } - private function connectCircularReferences($sourceId, &$currentPath, $byConstructor, &$subPath = []) - { - $currentPath[$sourceId] = $subPath[$sourceId] = $byConstructor; - - foreach ($this->circularReferences[$sourceId] as $id => $byConstructor) { - if (isset($currentPath[$id])) { - $this->addCircularReferences($id, $currentPath, $byConstructor); - } elseif (!isset($subPath[$id]) && isset($this->circularReferences[$id])) { - $this->connectCircularReferences($id, $currentPath, $byConstructor, $subPath); + if ($this->isSingleUsePrivateNode($node)) { + $this->singleUsePrivateIds[$id] = $id; } + + $this->collectCircularReferences($id, $node->getOutEdges(), $checkedNodes); } - unset($currentPath[$sourceId], $subPath[$sourceId]); + + $this->container->getCompiler()->getServiceReferenceGraph()->clear(); + $this->singleUsePrivateIds = array_diff_key($this->singleUsePrivateIds, $this->circularReferences); } - private function addCircularReferences($id, $currentPath, $byConstructor) + private function collectCircularReferences(string $sourceId, array $edges, array &$checkedNodes, array &$loops = [], array $path = [], bool $byConstructor = true): void { - $currentPath[$id] = $byConstructor; - $circularRefs = []; + $path[$sourceId] = $byConstructor; + $checkedNodes[$sourceId] = true; + foreach ($edges as $edge) { + $node = $edge->getDestNode(); + $id = $node->getId(); + if ($sourceId === $id || !$node->getValue() instanceof Definition || $edge->isLazy() || $edge->isWeak()) { + continue; + } - foreach (array_reverse($currentPath) as $parentId => $v) { - $byConstructor = $byConstructor && $v; - $circularRefs[] = $parentId; + if (isset($path[$id])) { + $loop = null; + $loopByConstructor = $edge->isReferencedByConstructor(); + $pathInLoop = [$id, []]; + foreach ($path as $k => $pathByConstructor) { + if (null !== $loop) { + $loop[] = $k; + $pathInLoop[1][$k] = $pathByConstructor; + $loops[$k][] = &$pathInLoop; + $loopByConstructor = $loopByConstructor && $pathByConstructor; + } elseif ($k === $id) { + $loop = []; + } + } + $this->addCircularReferences($id, $loop, $loopByConstructor); + } elseif (!isset($checkedNodes[$id])) { + $this->collectCircularReferences($id, $node->getOutEdges(), $checkedNodes, $loops, $path, $edge->isReferencedByConstructor()); + } elseif (isset($loops[$id])) { + // we already had detected loops for this edge + // let's check if we have a common ancestor in one of the detected loops + foreach ($loops[$id] as [$first, $loopPath]) { + if (!isset($path[$first])) { + continue; + } + // We have a common ancestor, let's fill the current path + $fillPath = null; + foreach ($loopPath as $k => $pathByConstructor) { + if (null !== $fillPath) { + $fillPath[$k] = $pathByConstructor; + } elseif ($k === $id) { + $fillPath = $path; + $fillPath[$k] = $pathByConstructor; + } + } - if ($parentId === $id) { - break; + // we can now build the loop + $loop = null; + $loopByConstructor = $edge->isReferencedByConstructor(); + foreach ($fillPath as $k => $pathByConstructor) { + if (null !== $loop) { + $loop[] = $k; + $loopByConstructor = $loopByConstructor && $pathByConstructor; + } elseif ($k === $first) { + $loop = []; + } + } + $this->addCircularReferences($first, $loop, true); + break; + } } } + unset($path[$sourceId]); + } - $currentId = $id; - foreach ($circularRefs as $parentId) { + private function addCircularReferences(string $sourceId, array $currentPath, bool $byConstructor) + { + $currentId = $sourceId; + $currentPath = array_reverse($currentPath); + $currentPath[] = $currentId; + foreach ($currentPath as $parentId) { if (empty($this->circularReferences[$parentId][$currentId])) { $this->circularReferences[$parentId][$currentId] = $byConstructor; } @@ -362,7 +492,7 @@ EOF; } } - private function collectLineage($class, array &$lineage) + private function collectLineage(string $class, array &$lineage) { if (isset($lineage[$class])) { return; @@ -370,17 +500,19 @@ EOF; if (!$r = $this->container->getReflectionClass($class, false)) { return; } - if ($this->container instanceof $class) { + if (is_a($class, $this->baseClass, true)) { return; } $file = $r->getFileName(); - if (') : eval()\'d code' === substr($file, -17)) { + if (str_ends_with($file, ') : eval()\'d code')) { $file = substr($file, 0, strrpos($file, '(', -17)); } if (!$file || $this->doExport($file) === $exportedFile = $this->export($file)) { return; } + $lineage[$class] = substr($exportedFile, 1, -1); + if ($parent = $r->getParentClass()) { $this->collectLineage($parent->name, $lineage); } @@ -393,14 +525,16 @@ EOF; $this->collectLineage($parent->name, $lineage); } + unset($lineage[$class]); $lineage[$class] = substr($exportedFile, 1, -1); } - private function generateProxyClasses() + private function generateProxyClasses(): array { + $proxyClasses = []; $alreadyGenerated = []; $definitions = $this->container->getDefinitions(); - $strip = '' === $this->docStar && method_exists('Symfony\Component\HttpKernel\Kernel', 'stripComments'); + $strip = '' === $this->docStar && method_exists(Kernel::class, 'stripComments'); $proxyDumper = $this->getProxyDumper(); ksort($definitions); foreach ($definitions as $definition) { @@ -416,39 +550,56 @@ EOF; if ("\n" === $proxyCode = "\n".$proxyDumper->getProxyCode($definition)) { continue; } + + if ($this->inlineRequires) { + $lineage = []; + $this->collectLineage($class, $lineage); + + $code = ''; + foreach (array_diff_key(array_flip($lineage), $this->inlinedRequires) as $file => $class) { + if ($this->inlineFactories) { + $this->inlinedRequires[$file] = true; + } + $code .= sprintf("include_once %s;\n", $file); + } + + $proxyCode = $code.$proxyCode; + } + if ($strip) { $proxyCode = "<?php\n".$proxyCode; $proxyCode = substr(Kernel::stripComments($proxyCode), 5); } - yield sprintf('%s.php', explode(' ', $proxyCode, 3)[1]) => $proxyCode; + + $proxyClasses[sprintf('%s.php', explode(' ', $this->inlineRequires ? substr($proxyCode, \strlen($code)) : $proxyCode, 3)[1])] = $proxyCode; } + + return $proxyClasses; } - /** - * Generates the require_once statement for service includes. - * - * @return string - */ - private function addServiceInclude($cId, Definition $definition) + private function addServiceInclude(string $cId, Definition $definition): string { $code = ''; - if ($this->inlineRequires && !$this->isHotPath($definition)) { + if ($this->inlineRequires && (!$this->isHotPath($definition) || $this->getProxyDumper()->isProxyCandidate($definition))) { $lineage = []; foreach ($this->inlinedDefinitions as $def) { - if (!$def->isDeprecated() && \is_string($class = \is_array($factory = $def->getFactory()) && \is_string($factory[0]) ? $factory[0] : $def->getClass())) { - $this->collectLineage($class, $lineage); + if (!$def->isDeprecated()) { + foreach ($this->getClasses($def) as $class) { + $this->collectLineage($class, $lineage); + } } } - foreach ($this->serviceCalls as $id => list($callCount, $behavior)) { + foreach ($this->serviceCalls as $id => [$callCount, $behavior]) { if ('service_container' !== $id && $id !== $cId && ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE !== $behavior && $this->container->has($id) && $this->isTrivialInstance($def = $this->container->findDefinition($id)) - && \is_string($class = \is_array($factory = $def->getFactory()) && \is_string($factory[0]) ? $factory[0] : $def->getClass()) ) { - $this->collectLineage($class, $lineage); + foreach ($this->getClasses($def) as $class) { + $this->collectLineage($class, $lineage); + } } } @@ -459,7 +610,9 @@ EOF; foreach ($this->inlinedDefinitions as $def) { if ($file = $def->getFile()) { - $code .= sprintf(" include_once %s;\n", $this->dumpValue($file)); + $file = $this->dumpValue($file); + $file = '(' === $file[0] ? substr($file, 1, -1) : $file; + $code .= sprintf(" include_once %s;\n", $file); } } @@ -471,29 +624,29 @@ EOF; } /** - * Generates the service instance. - * - * @param string $id - * @param bool $isSimpleInstance - * - * @return string - * * @throws InvalidArgumentException * @throws RuntimeException */ - private function addServiceInstance($id, Definition $definition, $isSimpleInstance) + private function addServiceInstance(string $id, Definition $definition, bool $isSimpleInstance): string { $class = $this->dumpValue($definition->getClass()); - if (0 === strpos($class, "'") && false === strpos($class, '$') && !preg_match('/^\'(?:\\\{2})?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\{2}[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*\'$/', $class)) { + if (str_starts_with($class, "'") && !str_contains($class, '$') && !preg_match('/^\'(?:\\\{2})?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\{2}[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*\'$/', $class)) { throw new InvalidArgumentException(sprintf('"%s" is not a valid class name for the "%s" service.', $class, $id)); } $isProxyCandidate = $this->getProxyDumper()->isProxyCandidate($definition); $instantiation = ''; - if (!$isProxyCandidate && $definition->isShared()) { - $instantiation = sprintf('$this->services[%s] = %s', $this->doExport($id), $isSimpleInstance ? '' : '$instance'); + $lastWitherIndex = null; + foreach ($definition->getMethodCalls() as $k => $call) { + if ($call[2] ?? false) { + $lastWitherIndex = $k; + } + } + + if (!$isProxyCandidate && $definition->isShared() && !isset($this->singleUsePrivateIds[$id]) && null === $lastWitherIndex) { + $instantiation = sprintf('$this->%s[%s] = %s', $this->container->getDefinition($id)->isPublic() ? 'services' : 'privates', $this->doExport($id), $isSimpleInstance ? '' : '$instance'); } elseif (!$isSimpleInstance) { $instantiation = '$instance'; } @@ -505,16 +658,14 @@ EOF; $instantiation .= ' = '; } - return $this->addNewInstance($definition, $return, $instantiation, $id); + return $this->addNewInstance($definition, ' '.$return.$instantiation, $id); } - /** - * Checks if the definition is a trivial instance. - * - * @return bool - */ - private function isTrivialInstance(Definition $definition) + private function isTrivialInstance(Definition $definition): bool { + if ($definition->hasErrors()) { + return true; + } if ($definition->isSynthetic() || $definition->getFile() || $definition->getMethodCalls() || $definition->getProperties() || $definition->getConfigurator()) { return false; } @@ -551,29 +702,38 @@ EOF; return true; } - /** - * Adds method calls to a service definition. - * - * @param string $variableName - * - * @return string - */ - private function addServiceMethodCalls(Definition $definition, $variableName = 'instance') + private function addServiceMethodCalls(Definition $definition, string $variableName, ?string $sharedNonLazyId): string { + $lastWitherIndex = null; + foreach ($definition->getMethodCalls() as $k => $call) { + if ($call[2] ?? false) { + $lastWitherIndex = $k; + } + } + $calls = ''; - foreach ($definition->getMethodCalls() as $call) { + foreach ($definition->getMethodCalls() as $k => $call) { $arguments = []; - foreach ($call[1] as $value) { - $arguments[] = $this->dumpValue($value); + foreach ($call[1] as $i => $value) { + $arguments[] = (\is_string($i) ? $i.': ' : '').$this->dumpValue($value); } - $calls .= $this->wrapServiceConditionals($call[1], sprintf(" \$%s->%s(%s);\n", $variableName, $call[0], implode(', ', $arguments))); + $witherAssignation = ''; + + if ($call[2] ?? false) { + if (null !== $sharedNonLazyId && $lastWitherIndex === $k) { + $witherAssignation = sprintf('$this->%s[\'%s\'] = ', $definition->isPublic() ? 'services' : 'privates', $sharedNonLazyId); + } + $witherAssignation .= sprintf('$%s = ', $variableName); + } + + $calls .= $this->wrapServiceConditionals($call[1], sprintf(" %s\$%s->%s(%s);\n", $witherAssignation, $variableName, $call[0], implode(', ', $arguments))); } return $calls; } - private function addServiceProperties(Definition $definition, $variableName = 'instance') + private function addServiceProperties(Definition $definition, string $variableName = 'instance'): string { $code = ''; foreach ($definition->getProperties() as $name => $value) { @@ -583,14 +743,7 @@ EOF; return $code; } - /** - * Adds configurator definition. - * - * @param string $variableName - * - * @return string - */ - private function addServiceConfigurator(Definition $definition, $variableName = 'instance') + private function addServiceConfigurator(Definition $definition, string $variableName = 'instance'): string { if (!$callable = $definition->getConfigurator()) { return ''; @@ -604,30 +757,22 @@ EOF; } $class = $this->dumpValue($callable[0]); - // If the class is a string we can optimize call_user_func away - if (0 === strpos($class, "'") && false === strpos($class, '$')) { + // If the class is a string we can optimize away + if (str_starts_with($class, "'") && !str_contains($class, '$')) { return sprintf(" %s::%s(\$%s);\n", $this->dumpLiteralClass($class), $callable[1], $variableName); } - if (0 === strpos($class, 'new ')) { + if (str_starts_with($class, 'new ')) { return sprintf(" (%s)->%s(\$%s);\n", $this->dumpValue($callable[0]), $callable[1], $variableName); } - return sprintf(" \\call_user_func([%s, '%s'], \$%s);\n", $this->dumpValue($callable[0]), $callable[1], $variableName); + return sprintf(" [%s, '%s'](\$%s);\n", $this->dumpValue($callable[0]), $callable[1], $variableName); } return sprintf(" %s(\$%s);\n", $callable, $variableName); } - /** - * Adds a service. - * - * @param string $id - * @param string &$file - * - * @return string - */ - private function addService($id, Definition $definition, &$file = null) + private function addService(string $id, Definition $definition): array { $this->definitionVariables = new \SplObjectStorage(); $this->referenceVariables = []; @@ -638,7 +783,7 @@ EOF; if ($class = $definition->getClass()) { $class = $class instanceof Parameter ? '%'.$class.'%' : $this->container->resolveEnvPlaceholders($class); - $return[] = sprintf(0 === strpos($class, '%') ? '@return object A %1$s instance' : '@return \%s', ltrim($class, '\\')); + $return[] = sprintf(str_starts_with($class, '%') ? '@return object A %1$s instance' : '@return \%s', ltrim($class, '\\')); } elseif ($definition->getFactory()) { $factory = $definition->getFactory(); if (\is_string($factory)) { @@ -651,7 +796,7 @@ EOF; } if ($definition->isDeprecated()) { - if ($return && 0 === strpos($return[\count($return) - 1], '@return')) { + if ($return && str_starts_with($return[\count($return) - 1], '@return')) { $return[] = ''; } @@ -671,12 +816,13 @@ EOF; $lazyInitialization = ''; } - $asFile = $this->asFiles && $definition->isShared() && !$this->isHotPath($definition); + $asFile = $this->asFiles && !$this->inlineFactories && !$this->isHotPath($definition); $methodName = $this->generateMethodName($id); if ($asFile) { $file = $methodName.'.php'; $code = " // Returns the $public '$id'$shared$autowired service.\n\n"; } else { + $file = null; $code = <<<EOF /*{$this->docStar} @@ -693,21 +839,32 @@ EOF; EOF; } - $this->serviceCalls = []; - $this->inlinedDefinitions = $this->getDefinitionsFromArguments([$definition], null, $this->serviceCalls); + if ($definition->hasErrors() && $e = $definition->getErrors()) { + $this->addThrow = true; - $code .= $this->addServiceInclude($id, $definition); + $code .= sprintf(" \$this->throw(%s);\n", $this->export(reset($e))); + } else { + $this->serviceCalls = []; + $this->inlinedDefinitions = $this->getDefinitionsFromArguments([$definition], null, $this->serviceCalls); - if ($this->getProxyDumper()->isProxyCandidate($definition)) { - $factoryCode = $asFile ? "\$this->load('%s.php', false)" : '$this->%s(false)'; - $code .= $this->getProxyDumper()->getProxyFactoryCode($definition, $id, sprintf($factoryCode, $methodName, $this->doExport($id))); - } + if ($definition->isDeprecated()) { + $code .= sprintf(" @trigger_error(%s, E_USER_DEPRECATED);\n\n", $this->export($definition->getDeprecationMessage($id))); + } else { + foreach ($this->inlinedDefinitions as $def) { + foreach ($this->getClasses($def) as $class) { + $this->preload[$class] = $class; + } + } + } - if ($definition->isDeprecated()) { - $code .= sprintf(" @trigger_error(%s, E_USER_DEPRECATED);\n\n", $this->export($definition->getDeprecationMessage($id))); - } + if ($this->getProxyDumper()->isProxyCandidate($definition)) { + $factoryCode = $asFile ? ($definition->isShared() ? "\$this->load('%s.php', false)" : '$this->factories[%2$s](false)') : '$this->%s(false)'; + $code .= $this->getProxyDumper()->getProxyFactoryCode($definition, $id, sprintf($factoryCode, $methodName, $this->doExport($id))); + } - $code .= $this->addInlineService($id, $definition); + $code .= $this->addServiceInclude($id, $definition); + $code .= $this->addInlineService($id, $definition); + } if ($asFile) { $code = implode("\n", array_map(function ($line) { return $line ? substr($line, 8) : $line; }, explode("\n", $code))); @@ -718,10 +875,10 @@ EOF; $this->definitionVariables = $this->inlinedDefinitions = null; $this->referenceVariables = $this->serviceCalls = null; - return $code; + return [$file, $code]; } - private function addInlineVariables($id, Definition $definition, array $arguments, $forConstructor) + private function addInlineVariables(string $id, Definition $definition, array $arguments, bool $forConstructor): string { $code = ''; @@ -729,7 +886,7 @@ EOF; if (\is_array($argument)) { $code .= $this->addInlineVariables($id, $definition, $argument, $forConstructor); } elseif ($argument instanceof Reference) { - $code .= $this->addInlineReference($id, $definition, $this->container->normalizeId($argument), $forConstructor); + $code .= $this->addInlineReference($id, $definition, $argument, $forConstructor); } elseif ($argument instanceof Definition) { $code .= $this->addInlineService($id, $definition, $argument, $forConstructor); } @@ -738,13 +895,13 @@ EOF; return $code; } - private function addInlineReference($id, Definition $definition, $targetId, $forConstructor) + private function addInlineReference(string $id, Definition $definition, string $targetId, bool $forConstructor): string { while ($this->container->hasAlias($targetId)) { $targetId = (string) $this->container->getAlias($targetId); } - list($callCount, $behavior) = $this->serviceCalls[$targetId]; + [$callCount, $behavior] = $this->serviceCalls[$targetId]; if ($id === $targetId) { return $this->addInlineService($id, $definition, $definition); @@ -754,6 +911,10 @@ EOF; return ''; } + if ($this->container->hasDefinition($targetId) && ($def = $this->container->getDefinition($targetId)) && !$def->isShared()) { + return ''; + } + $hasSelfRef = isset($this->circularReferences[$id][$targetId]) && !isset($this->definitionVariables[$definition]); if ($hasSelfRef && !$forConstructor && !$forConstructor = !$this->circularReferences[$id][$targetId]) { @@ -784,19 +945,19 @@ EOF; EOTXT , - 'services', + $this->container->getDefinition($id)->isPublic() ? 'services' : 'privates', $this->doExport($id) ); return $code; } - private function addInlineService($id, Definition $definition, Definition $inlineDef = null, $forConstructor = true) + private function addInlineService(string $id, Definition $definition, Definition $inlineDef = null, bool $forConstructor = true): string { $code = ''; if ($isSimpleInstance = $isRootInstance = null === $inlineDef) { - foreach ($this->serviceCalls as $targetId => list($callCount, $behavior, $byConstructor)) { + foreach ($this->serviceCalls as $targetId => [$callCount, $behavior, $byConstructor]) { if ($byConstructor && isset($this->circularReferences[$id][$targetId]) && !$this->circularReferences[$id][$targetId]) { $code .= $this->addInlineReference($id, $definition, $targetId, $forConstructor); } @@ -827,7 +988,7 @@ EOTXT if ('instance' === $name) { $code .= $this->addServiceInstance($id, $definition, $isSimpleInstance); } else { - $code .= $this->addNewInstance($inlineDef, '$'.$name, ' = ', $id); + $code .= $this->addNewInstance($inlineDef, ' $'.$name.' = ', $id); } if ('' !== $inline = $this->addInlineVariables($id, $definition, $arguments, false)) { @@ -837,7 +998,7 @@ EOTXT } $code .= $this->addServiceProperties($inlineDef, $name); - $code .= $this->addServiceMethodCalls($inlineDef, $name); + $code .= $this->addServiceMethodCalls($inlineDef, $name, !$this->getProxyDumper()->isProxyCandidate($inlineDef) && $inlineDef->isShared() && !isset($this->singleUsePrivateIds[$id]) ? $id : null); $code .= $this->addServiceConfigurator($inlineDef, $name); } @@ -848,54 +1009,84 @@ EOTXT return $code; } - /** - * Adds multiple services. - * - * @return string - */ - private function addServices() + private function addServices(array &$services = null): string { $publicServices = $privateServices = ''; $definitions = $this->container->getDefinitions(); ksort($definitions); foreach ($definitions as $id => $definition) { - if ($definition->isSynthetic() || ($this->asFiles && $definition->isShared() && !$this->isHotPath($definition))) { + if (!$definition->isSynthetic()) { + $services[$id] = $this->addService($id, $definition); + } else { + $services[$id] = null; + + foreach ($this->getClasses($definition) as $class) { + $this->preload[$class] = $class; + } + } + } + + foreach ($definitions as $id => $definition) { + if (!([$file, $code] = $services[$id]) || null !== $file) { continue; } if ($definition->isPublic()) { - $publicServices .= $this->addService($id, $definition); - } else { - $privateServices .= $this->addService($id, $definition); + $publicServices .= $code; + } elseif (!$this->isTrivialInstance($definition) || isset($this->locatedIds[$id])) { + $privateServices .= $code; } } return $publicServices.$privateServices; } - private function generateServiceFiles() + private function generateServiceFiles(array $services): iterable { $definitions = $this->container->getDefinitions(); ksort($definitions); foreach ($definitions as $id => $definition) { - if (!$definition->isSynthetic() && $definition->isShared() && !$this->isHotPath($definition)) { - $code = $this->addService($id, $definition, $file); + if (([$file, $code] = $services[$id]) && null !== $file && ($definition->isPublic() || !$this->isTrivialInstance($definition) || isset($this->locatedIds[$id]))) { + if (!$definition->isShared()) { + $i = strpos($code, "\n\ninclude_once "); + if (false !== $i && false !== $i = strpos($code, "\n\n", 2 + $i)) { + $code = [substr($code, 0, 2 + $i), substr($code, 2 + $i)]; + } else { + $code = ["\n", $code]; + } + $code[1] = implode("\n", array_map(function ($line) { return $line ? ' '.$line : $line; }, explode("\n", $code[1]))); + $factory = sprintf('$this->factories%s[%s]', $definition->isPublic() ? '' : "['service_container']", $this->doExport($id)); + $lazyloadInitialization = $definition->isLazy() ? '$lazyLoad = true' : ''; + + $code[1] = sprintf("%s = function (%s) {\n%s};\n\nreturn %1\$s();\n", $factory, $lazyloadInitialization, $code[1]); + $code = $code[0].$code[1]; + } + yield $file => $code; } } } - private function addNewInstance(Definition $definition, $return, $instantiation, $id) + private function addNewInstance(Definition $definition, string $return = '', string $id = null): string { - $class = $this->dumpValue($definition->getClass()); - $return = ' '.$return.$instantiation; + $tail = $return ? ";\n" : ''; + + if (BaseServiceLocator::class === $definition->getClass() && $definition->hasTag($this->serviceLocatorTag)) { + $arguments = []; + foreach ($definition->getArgument(0) as $k => $argument) { + $arguments[$k] = $argument->getValues()[0]; + } + + return $return.$this->dumpValue(new ServiceLocatorArgument($arguments)).$tail; + } $arguments = []; - foreach ($definition->getArguments() as $value) { - $arguments[] = $this->dumpValue($value); + foreach ($definition->getArguments() as $i => $value) { + $arguments[] = (\is_string($i) ? $i.': ' : '').$this->dumpValue($value); } if (null !== $definition->getFactory()) { $callable = $definition->getFactory(); + if (\is_array($callable)) { if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $callable[1])) { throw new RuntimeException(sprintf('Cannot dump definition because of invalid factory method (%s).', $callable[1] ?: 'n/a')); @@ -903,48 +1094,38 @@ EOTXT if ($callable[0] instanceof Reference || ($callable[0] instanceof Definition && $this->definitionVariables->contains($callable[0]))) { - return $return.sprintf("%s->%s(%s);\n", $this->dumpValue($callable[0]), $callable[1], $arguments ? implode(', ', $arguments) : ''); + return $return.sprintf('%s->%s(%s)', $this->dumpValue($callable[0]), $callable[1], $arguments ? implode(', ', $arguments) : '').$tail; } $class = $this->dumpValue($callable[0]); - // If the class is a string we can optimize call_user_func away - if (0 === strpos($class, "'") && false === strpos($class, '$')) { + // If the class is a string we can optimize away + if (str_starts_with($class, "'") && !str_contains($class, '$')) { if ("''" === $class) { - throw new RuntimeException(sprintf('Cannot dump definition: The "%s" service is defined to be created by a factory but is missing the service reference, did you forget to define the factory service id or class?', $id)); + throw new RuntimeException(sprintf('Cannot dump definition: %s service is defined to be created by a factory but is missing the service reference, did you forget to define the factory service id or class?', $id ? 'The "'.$id.'"' : 'inline')); } - return $return.sprintf("%s::%s(%s);\n", $this->dumpLiteralClass($class), $callable[1], $arguments ? implode(', ', $arguments) : ''); + return $return.sprintf('%s::%s(%s)', $this->dumpLiteralClass($class), $callable[1], $arguments ? implode(', ', $arguments) : '').$tail; } - if (0 === strpos($class, 'new ')) { - return $return.sprintf("(%s)->%s(%s);\n", $class, $callable[1], $arguments ? implode(', ', $arguments) : ''); + if (str_starts_with($class, 'new ')) { + return $return.sprintf('(%s)->%s(%s)', $class, $callable[1], $arguments ? implode(', ', $arguments) : '').$tail; } - return $return.sprintf("\\call_user_func([%s, '%s']%s);\n", $class, $callable[1], $arguments ? ', '.implode(', ', $arguments) : ''); + return $return.sprintf("[%s, '%s'](%s)", $class, $callable[1], $arguments ? implode(', ', $arguments) : '').$tail; } - return $return.sprintf("%s(%s);\n", $this->dumpLiteralClass($this->dumpValue($callable)), $arguments ? implode(', ', $arguments) : ''); + return $return.sprintf('%s(%s)', $this->dumpLiteralClass($this->dumpValue($callable)), $arguments ? implode(', ', $arguments) : '').$tail; } - if (false !== strpos($class, '$')) { - return sprintf(" \$class = %s;\n\n%snew \$class(%s);\n", $class, $return, implode(', ', $arguments)); + if (null === $class = $definition->getClass()) { + throw new RuntimeException('Cannot dump definitions which have no class nor factory.'); } - return $return.sprintf("new %s(%s);\n", $this->dumpLiteralClass($class), implode(', ', $arguments)); + return $return.sprintf('new %s(%s)', $this->dumpLiteralClass($this->dumpValue($class)), implode(', ', $arguments)).$tail; } - /** - * Adds the class headers. - * - * @param string $class Class name - * @param string $baseClass The name of the base class - * @param string $baseClassWithNamespace Fully qualified base class name - * - * @return string - */ - private function startClass($class, $baseClass, $baseClassWithNamespace) + private function startClass(string $class, string $baseClass): string { - $bagClass = $this->container->isCompiled() ? 'use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;' : 'use Symfony\Component\DependencyInjection\ParameterBag\\ParameterBag;'; $namespaceLine = !$this->asFiles && $this->namespace ? "\nnamespace {$this->namespace};\n" : ''; $code = <<<EOF @@ -956,100 +1137,74 @@ use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; -$bagClass +use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; /*{$this->docStar} * This class has been auto-generated * by the Symfony Dependency Injection Component. * - * @final since Symfony 3.3 + * @final */ class $class extends $baseClass { private \$parameters = []; - private \$targetDirs = []; public function __construct() { EOF; - if (null !== $this->targetDirRegex) { - $dir = $this->asFiles ? '$this->targetDirs[0] = \\dirname($containerDir)' : '__DIR__'; - $code .= <<<EOF - \$dir = {$dir}; - for (\$i = 1; \$i <= {$this->targetDirMaxMatches}; ++\$i) { - \$this->targetDirs[\$i] = \$dir = \\dirname(\$dir); - } - -EOF; - } if ($this->asFiles) { $code = str_replace('$parameters', "\$buildParameters;\n private \$containerDir;\n private \$parameters", $code); $code = str_replace('__construct()', '__construct(array $buildParameters = [], $containerDir = __DIR__)', $code); $code .= " \$this->buildParameters = \$buildParameters;\n"; $code .= " \$this->containerDir = \$containerDir;\n"; - } - if ($this->container->isCompiled()) { - if (Container::class !== $baseClassWithNamespace) { - $r = $this->container->getReflectionClass($baseClassWithNamespace, false); - if (null !== $r - && (null !== $constructor = $r->getConstructor()) - && 0 === $constructor->getNumberOfRequiredParameters() - && Container::class !== $constructor->getDeclaringClass()->name - ) { - $code .= " parent::__construct();\n"; - $code .= " \$this->parameterBag = null;\n\n"; - } + if (null !== $this->targetDirRegex) { + $code = str_replace('$parameters', "\$targetDir;\n private \$parameters", $code); + $code .= ' $this->targetDir = \\dirname($containerDir);'."\n"; } + } - if ($this->container->getParameterBag()->all()) { - $code .= " \$this->parameters = \$this->getDefaultParameters();\n\n"; + if (Container::class !== $this->baseClass) { + $r = $this->container->getReflectionClass($this->baseClass, false); + if (null !== $r + && (null !== $constructor = $r->getConstructor()) + && 0 === $constructor->getNumberOfRequiredParameters() + && Container::class !== $constructor->getDeclaringClass()->name + ) { + $code .= " parent::__construct();\n"; + $code .= " \$this->parameterBag = null;\n\n"; } + } - $code .= " \$this->services = [];\n"; - } else { - $arguments = $this->container->getParameterBag()->all() ? 'new ParameterBag($this->getDefaultParameters())' : null; - $code .= " parent::__construct($arguments);\n"; + if ($this->container->getParameterBag()->all()) { + $code .= " \$this->parameters = \$this->getDefaultParameters();\n\n"; } + $code .= " \$this->services = \$this->privates = [];\n"; - $code .= $this->addNormalizedIds(); $code .= $this->addSyntheticIds(); $code .= $this->addMethodMap(); - $code .= $this->asFiles ? $this->addFileMap() : ''; - $code .= $this->addPrivateServices(); + $code .= $this->asFiles && !$this->inlineFactories ? $this->addFileMap() : ''; $code .= $this->addAliases(); $code .= $this->addInlineRequires(); - $code .= <<<'EOF' + $code .= <<<EOF } -EOF; - $code .= $this->addRemovedIds(); - - if ($this->container->isCompiled()) { - $code .= <<<EOF - - public function compile() + public function compile(): void { throw new LogicException('You cannot compile a dumped container that was already compiled.'); } - public function isCompiled() + public function isCompiled(): bool { return true; } - public function isFrozen() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), E_USER_DEPRECATED); - - return true; - } - EOF; - } + $code .= $this->addRemovedIds(); - if ($this->asFiles) { + if ($this->asFiles && !$this->inlineFactories) { $code .= <<<EOF protected function load(\$file, \$lazyLoad = true) @@ -1065,10 +1220,10 @@ EOF; if (!$proxyDumper->isProxyCandidate($definition)) { continue; } - if ($this->asFiles) { + if ($this->asFiles && !$this->inlineFactories) { $proxyLoader = '$this->load("{$class}.php")'; - } elseif ($this->namespace) { - $proxyLoader = 'class_alias("'.$this->namespace.'\\\\{$class}", $class, false)'; + } elseif ($this->namespace || $this->inlineFactories) { + $proxyLoader = 'class_alias(__NAMESPACE__."\\\\$class", $class, false)'; } else { $proxyLoader = ''; } @@ -1089,31 +1244,7 @@ EOF; return $code; } - /** - * Adds the normalizedIds property definition. - * - * @return string - */ - private function addNormalizedIds() - { - $code = ''; - $normalizedIds = $this->container->getNormalizedIds(); - ksort($normalizedIds); - foreach ($normalizedIds as $id => $normalizedId) { - if ($this->container->has($normalizedId)) { - $code .= ' '.$this->doExport($id).' => '.$this->doExport($normalizedId).",\n"; - } - } - - return $code ? " \$this->normalizedIds = [\n".$code." ];\n" : ''; - } - - /** - * Adds the syntheticIds definition. - * - * @return string - */ - private function addSyntheticIds() + private function addSyntheticIds(): string { $code = ''; $definitions = $this->container->getDefinitions(); @@ -1127,14 +1258,15 @@ EOF; return $code ? " \$this->syntheticIds = [\n{$code} ];\n" : ''; } - /** - * Adds the removedIds definition. - * - * @return string - */ - private function addRemovedIds() + private function addRemovedIds(): string { - if (!$ids = $this->container->getRemovedIds()) { + $ids = $this->container->getRemovedIds(); + foreach ($this->container->getDefinitions() as $id => $definition) { + if (!$definition->isPublic()) { + $ids[$id] = true; + } + } + if (!$ids) { return ''; } if ($this->asFiles) { @@ -1144,7 +1276,7 @@ EOF; $ids = array_keys($ids); sort($ids); foreach ($ids as $id) { - if (preg_match('/^\d+_[^~]++~[._a-zA-Z\d]{7}$/', $id)) { + if (preg_match(FileLoader::ANONYMOUS_ID_REGEXP, $id)) { continue; } $code .= ' '.$this->doExport($id)." => true,\n"; @@ -1155,7 +1287,7 @@ EOF; return <<<EOF - public function getRemovedIds() + public function getRemovedIds(): array { return {$code}; } @@ -1163,37 +1295,35 @@ EOF; EOF; } - /** - * Adds the methodMap property definition. - * - * @return string - */ - private function addMethodMap() + private function addMethodMap(): string { $code = ''; $definitions = $this->container->getDefinitions(); ksort($definitions); foreach ($definitions as $id => $definition) { - if (!$definition->isSynthetic() && (!$this->asFiles || !$definition->isShared() || $this->isHotPath($definition))) { + if (!$definition->isSynthetic() && $definition->isPublic() && (!$this->asFiles || $this->inlineFactories || $this->isHotPath($definition))) { $code .= ' '.$this->doExport($id).' => '.$this->doExport($this->generateMethodName($id)).",\n"; } } + $aliases = $this->container->getAliases(); + foreach ($aliases as $alias => $id) { + if (!$id->isDeprecated()) { + continue; + } + $code .= ' '.$this->doExport($alias).' => '.$this->doExport($this->generateMethodName($alias)).",\n"; + } + return $code ? " \$this->methodMap = [\n{$code} ];\n" : ''; } - /** - * Adds the fileMap property definition. - * - * @return string - */ - private function addFileMap() + private function addFileMap(): string { $code = ''; $definitions = $this->container->getDefinitions(); ksort($definitions); foreach ($definitions as $id => $definition) { - if (!$definition->isSynthetic() && $definition->isShared() && !$this->isHotPath($definition)) { + if (!$definition->isSynthetic() && $definition->isPublic() && !$this->isHotPath($definition)) { $code .= sprintf(" %s => '%s.php',\n", $this->doExport($id), $this->generateMethodName($id)); } } @@ -1201,67 +1331,63 @@ EOF; return $code ? " \$this->fileMap = [\n{$code} ];\n" : ''; } - /** - * Adds the privates property definition. - * - * @return string - */ - private function addPrivateServices() + private function addAliases(): string { - $code = ''; + if (!$aliases = $this->container->getAliases()) { + return "\n \$this->aliases = [];\n"; + } - $aliases = $this->container->getAliases(); + $code = " \$this->aliases = [\n"; ksort($aliases); - foreach ($aliases as $id => $alias) { - if ($alias->isPrivate()) { - $code .= ' '.$this->doExport($id)." => true,\n"; + foreach ($aliases as $alias => $id) { + if ($id->isDeprecated()) { + continue; } - } - $definitions = $this->container->getDefinitions(); - ksort($definitions); - foreach ($definitions as $id => $definition) { - if (!$definition->isPublic()) { - $code .= ' '.$this->doExport($id)." => true,\n"; + $id = (string) $id; + while (isset($aliases[$id])) { + $id = (string) $aliases[$id]; } + $code .= ' '.$this->doExport($alias).' => '.$this->doExport($id).",\n"; } - if (empty($code)) { - return ''; - } - - $out = " \$this->privates = [\n"; - $out .= $code; - $out .= " ];\n"; - - return $out; + return $code." ];\n"; } - /** - * Adds the aliases property definition. + private function addDeprecatedAliases(): string + { + $code = ''; + $aliases = $this->container->getAliases(); + foreach ($aliases as $alias => $definition) { + if (!$definition->isDeprecated()) { + continue; + } + $public = $definition->isPublic() ? 'public' : 'private'; + $id = (string) $definition; + $methodNameAlias = $this->generateMethodName($alias); + $idExported = $this->export($id); + $messageExported = $this->export($definition->getDeprecationMessage($alias)); + $code .= <<<EOF + + /*{$this->docStar} + * Gets the $public '$alias' alias. * - * @return string + * @return object The "$id" service. */ - private function addAliases() + protected function {$methodNameAlias}() { - if (!$aliases = $this->container->getAliases()) { - return $this->container->isCompiled() ? "\n \$this->aliases = [];\n" : ''; - } + @trigger_error($messageExported, E_USER_DEPRECATED); - $code = " \$this->aliases = [\n"; - ksort($aliases); - foreach ($aliases as $alias => $id) { - $id = $this->container->normalizeId($id); - while (isset($aliases[$id])) { - $id = $this->container->normalizeId($aliases[$id]); - } - $code .= ' '.$this->doExport($alias).' => '.$this->doExport($id).",\n"; + return \$this->get($idExported); + } + +EOF; } - return $code." ];\n"; + return $code; } - private function addInlineRequires() + private function addInlineRequires(): string { if (!$this->hotPathTag || !$this->inlineRequires) { return ''; @@ -1271,10 +1397,15 @@ EOF; foreach ($this->container->findTaggedServiceIds($this->hotPathTag) as $id => $tags) { $definition = $this->container->getDefinition($id); + + if ($this->getProxyDumper()->isProxyCandidate($definition)) { + continue; + } + $inlinedDefinitions = $this->getDefinitionsFromArguments([$definition]); foreach ($inlinedDefinitions as $def) { - if (\is_string($class = \is_array($factory = $def->getFactory()) && \is_string($factory[0]) ? $factory[0] : $def->getClass())) { + foreach ($this->getClasses($def) as $class) { $this->collectLineage($class, $lineage); } } @@ -1292,12 +1423,7 @@ EOF; return $code ? sprintf("\n \$this->privates['service_container'] = function () {%s\n };\n", $code) : ''; } - /** - * Adds default parameters method. - * - * @return string - */ - private function addDefaultParametersMethod() + private function addDefaultParametersMethod(): string { if (!$this->container->getParameterBag()->all()) { return ''; @@ -1305,43 +1431,37 @@ EOF; $php = []; $dynamicPhp = []; - $normalizedParams = []; foreach ($this->container->getParameterBag()->all() as $key => $value) { if ($key !== $resolvedKey = $this->container->resolveEnvPlaceholders($key)) { throw new InvalidArgumentException(sprintf('Parameter name cannot use env parameters: "%s".', $resolvedKey)); } - if ($key !== $lcKey = strtolower($key)) { - $normalizedParams[] = sprintf(' %s => %s,', $this->export($lcKey), $this->export($key)); - } - $export = $this->exportParameters([$value]); + $hasEnum = false; + $export = $this->exportParameters([$value], '', 12, $hasEnum); $export = explode('0 => ', substr(rtrim($export, " ]\n"), 2, -1), 2); - if (preg_match("/\\\$this->(?:getEnv\('(?:\w++:)*+\w++'\)|targetDirs\[\d++\])/", $export[1])) { + if ($hasEnum || preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $export[1])) { $dynamicPhp[$key] = sprintf('%scase %s: $value = %s; break;', $export[0], $this->export($key), $export[1]); } else { $php[] = sprintf('%s%s => %s,', $export[0], $this->export($key), $export[1]); } } - $parameters = sprintf("[\n%s\n%s]", implode("\n", $php), str_repeat(' ', 8)); - $code = ''; - if ($this->container->isCompiled()) { - $code .= <<<'EOF' + $code = <<<'EOF' + /** + * @return array|bool|float|int|string|\UnitEnum|null + */ public function getParameter($name) { $name = (string) $name; if (isset($this->buildParameters[$name])) { return $this->buildParameters[$name]; } - if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) { - $name = $this->normalizeParameterName($name); - if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) { - throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); - } + if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) { + throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); } if (isset($this->loadedDynamicParameters[$name])) { return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name); @@ -1350,23 +1470,22 @@ EOF; return $this->parameters[$name]; } - public function hasParameter($name) + public function hasParameter($name): bool { $name = (string) $name; if (isset($this->buildParameters[$name])) { return true; } - $name = $this->normalizeParameterName($name); return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters); } - public function setParameter($name, $value) + public function setParameter($name, $value): void { throw new LogicException('Impossible to call set() on a frozen ParameterBag.'); } - public function getParameterBag() + public function getParameterBag(): ParameterBagInterface { if (null === $this->parameterBag) { $parameters = $this->parameters; @@ -1383,13 +1502,13 @@ EOF; } EOF; - if (!$this->asFiles) { - $code = preg_replace('/^.*buildParameters.*\n.*\n.*\n/m', '', $code); - } + if (!$this->asFiles) { + $code = preg_replace('/^.*buildParameters.*\n.*\n.*\n/m', '', $code); + } - if ($dynamicPhp) { - $loadedDynamicParameters = $this->exportParameters(array_combine(array_keys($dynamicPhp), array_fill(0, \count($dynamicPhp), false)), '', 8); - $getDynamicParameter = <<<'EOF' + if ($dynamicPhp) { + $loadedDynamicParameters = $this->exportParameters(array_combine(array_keys($dynamicPhp), array_fill(0, \count($dynamicPhp), false)), '', 8); + $getDynamicParameter = <<<'EOF' switch ($name) { %s default: throw new InvalidArgumentException(sprintf('The dynamic parameter "%%s" must be defined.', $name)); @@ -1398,64 +1517,23 @@ EOF; return $this->dynamicParameters[$name] = $value; EOF; - $getDynamicParameter = sprintf($getDynamicParameter, implode("\n", $dynamicPhp)); - } else { - $loadedDynamicParameters = '[]'; - $getDynamicParameter = str_repeat(' ', 8).'throw new InvalidArgumentException(sprintf(\'The dynamic parameter "%s" must be defined.\', $name));'; - } + $getDynamicParameter = sprintf($getDynamicParameter, implode("\n", $dynamicPhp)); + } else { + $loadedDynamicParameters = '[]'; + $getDynamicParameter = str_repeat(' ', 8).'throw new InvalidArgumentException(sprintf(\'The dynamic parameter "%s" must be defined.\', $name));'; + } - $code .= <<<EOF + $code .= <<<EOF private \$loadedDynamicParameters = {$loadedDynamicParameters}; private \$dynamicParameters = []; - /*{$this->docStar} - * Computes a dynamic parameter. - * - * @param string \$name The name of the dynamic parameter to load - * - * @return mixed The value of the dynamic parameter - * - * @throws InvalidArgumentException When the dynamic parameter does not exist - */ - private function getDynamicParameter(\$name) + private function getDynamicParameter(string \$name) { {$getDynamicParameter} } - -EOF; - - $code .= ' private $normalizedParameterNames = '.($normalizedParams ? sprintf("[\n%s\n ];", implode("\n", $normalizedParams)) : '[];')."\n"; - $code .= <<<'EOF' - - private function normalizeParameterName($name) - { - if (isset($this->normalizedParameterNames[$normalizedName = strtolower($name)]) || isset($this->parameters[$normalizedName]) || array_key_exists($normalizedName, $this->parameters)) { - $normalizedName = isset($this->normalizedParameterNames[$normalizedName]) ? $this->normalizedParameterNames[$normalizedName] : $normalizedName; - if ((string) $name !== $normalizedName) { - @trigger_error(sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), E_USER_DEPRECATED); - } - } else { - $normalizedName = $this->normalizedParameterNames[$normalizedName] = (string) $name; - } - - return $normalizedName; - } - -EOF; - } elseif ($dynamicPhp) { - throw new RuntimeException('You cannot dump a not-frozen container with dynamic parameters.'); - } - - $code .= <<<EOF - - /*{$this->docStar} - * Gets the default parameters. - * - * @return array An array of the default parameters - */ - protected function getDefaultParameters() + protected function getDefaultParameters(): array { return $parameters; } @@ -1466,21 +1544,14 @@ EOF; } /** - * Exports parameters. - * - * @param string $path - * @param int $indent - * - * @return string - * * @throws InvalidArgumentException */ - private function exportParameters(array $parameters, $path = '', $indent = 12) + private function exportParameters(array $parameters, string $path = '', int $indent = 12, bool &$hasEnum = false): string { $php = []; foreach ($parameters as $key => $value) { if (\is_array($value)) { - $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4); + $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4, $hasEnum); } elseif ($value instanceof ArgumentInterface) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain special arguments. "%s" found in "%s".', \get_class($value), $path.'/'.$key)); } elseif ($value instanceof Variable) { @@ -1491,6 +1562,9 @@ EOF; throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain references to other services (reference to service "%s" found in "%s").', $value, $path.'/'.$key)); } elseif ($value instanceof Expression) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain expressions. Expression "%s" found in "%s".', $value, $path.'/'.$key)); + } elseif ($value instanceof \UnitEnum) { + $hasEnum = true; + $value = sprintf('\%s::%s', \get_class($value), $value->name); } else { $value = $this->export($value); } @@ -1501,28 +1575,27 @@ EOF; return sprintf("[\n%s\n%s]", implode("\n", $php), str_repeat(' ', $indent - 4)); } - /** - * Ends the class definition. - * - * @return string - */ - private function endClass() + private function endClass(): string + { + if ($this->addThrow) { + return <<<'EOF' + + protected function throw($message) { + throw new RuntimeException($message); + } +} + +EOF; + } + return <<<'EOF' } EOF; } - /** - * Wraps the service conditionals. - * - * @param string $value - * @param string $code - * - * @return string - */ - private function wrapServiceConditionals($value, $code) + private function wrapServiceConditionals($value, string $code): string { if (!$condition = $this->getServiceConditionals($value)) { return $code; @@ -1534,21 +1607,14 @@ EOF; return sprintf(" if (%s) {\n%s }\n", $condition, $code); } - /** - * Get the conditions to execute for conditional services. - * - * @param string $value - * - * @return string|null - */ - private function getServiceConditionals($value) + private function getServiceConditionals($value): string { $conditions = []; foreach (ContainerBuilder::getInitializedConditionals($value) as $service) { if (!$this->container->hasDefinition($service)) { return 'false'; } - $conditions[] = sprintf('isset($this->services[%s])', $this->doExport($service)); + $conditions[] = sprintf('isset($this->%s[%s])', $this->container->getDefinition($service)->isPublic() ? 'services' : 'privates', $this->doExport($service)); } foreach (ContainerBuilder::getServiceConditionals($value) as $service) { if ($this->container->hasDefinition($service) && !$this->container->getDefinition($service)->isPublic()) { @@ -1565,7 +1631,7 @@ EOF; return implode(' && ', $conditions); } - private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage $definitions = null, array &$calls = [], $byConstructor = null) + private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage $definitions = null, array &$calls = [], bool $byConstructor = null): \SplObjectStorage { if (null === $definitions) { $definitions = new \SplObjectStorage(); @@ -1575,7 +1641,7 @@ EOF; if (\is_array($argument)) { $this->getDefinitionsFromArguments($argument, $definitions, $calls, $byConstructor); } elseif ($argument instanceof Reference) { - $id = $this->container->normalizeId($argument); + $id = (string) $argument; while ($this->container->hasAlias($id)) { $id = (string) $this->container->getAlias($id); @@ -1605,16 +1671,9 @@ EOF; } /** - * Dumps values. - * - * @param mixed $value - * @param bool $interpolate - * - * @return string - * * @throws RuntimeException */ - private function dumpValue($value, $interpolate = true) + private function dumpValue($value, bool $interpolate = true): string { if (\is_array($value)) { if ($value && $interpolate && false !== $param = array_search($value, $this->container->getParameterBag()->all(), true)) { @@ -1635,13 +1694,14 @@ EOF; $value = $value->getValues()[0]; $code = $this->dumpValue($value, $interpolate); + $returnedType = ''; if ($value instanceof TypedReference) { - $code = sprintf('$f = function (\\%s $v%s) { return $v; }; return $f(%s);', $value->getType(), ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $value->getInvalidBehavior() ? ' = null' : '', $code); - } else { - $code = sprintf('return %s;', $code); + $returnedType = sprintf(': %s\%s', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $value->getInvalidBehavior() ? '' : '?', $value->getType()); } - return sprintf("function () {\n %s\n }", $code); + $code = sprintf('return %s;', $code); + + return sprintf("function ()%s {\n %s\n }", $returnedType, $code); } if ($value instanceof IteratorArgument) { @@ -1673,10 +1733,43 @@ EOF; return implode("\n", $code); } + + if ($value instanceof ServiceLocatorArgument) { + $serviceMap = ''; + $serviceTypes = ''; + foreach ($value->getValues() as $k => $v) { + if (!$v) { + continue; + } + $id = (string) $v; + while ($this->container->hasAlias($id)) { + $id = (string) $this->container->getAlias($id); + } + $definition = $this->container->getDefinition($id); + $load = !($definition->hasErrors() && $e = $definition->getErrors()) ? $this->asFiles && !$this->inlineFactories && !$this->isHotPath($definition) : reset($e); + $serviceMap .= sprintf("\n %s => [%s, %s, %s, %s],", + $this->export($k), + $this->export($definition->isShared() ? ($definition->isPublic() ? 'services' : 'privates') : false), + $this->doExport($id), + $this->export(ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE !== $v->getInvalidBehavior() && !\is_string($load) ? $this->generateMethodName($id).($load ? '.php' : '') : null), + $this->export($load) + ); + $serviceTypes .= sprintf("\n %s => %s,", $this->export($k), $this->export($v instanceof TypedReference ? $v->getType() : '?')); + $this->locatedIds[$id] = true; + } + $this->addGetService = true; + + return sprintf('new \%s($this->getService, [%s%s], [%s%s])', ServiceLocator::class, $serviceMap, $serviceMap ? "\n " : '', $serviceTypes, $serviceTypes ? "\n " : ''); + } } finally { - list($this->definitionVariables, $this->referenceVariables) = $scope; + [$this->definitionVariables, $this->referenceVariables] = $scope; } } elseif ($value instanceof Definition) { + if ($value->hasErrors() && $e = $value->getErrors()) { + $this->addThrow = true; + + return sprintf('$this->throw(%s)', $this->export(reset($e))); + } if (null !== $this->definitionVariables && $this->definitionVariables->contains($value)) { return $this->dumpValue($this->definitionVariables[$value], $interpolate); } @@ -1690,54 +1783,11 @@ EOF; throw new RuntimeException('Cannot dump definitions which have a configurator.'); } - $arguments = []; - foreach ($value->getArguments() as $argument) { - $arguments[] = $this->dumpValue($argument); - } - - if (null !== $value->getFactory()) { - $factory = $value->getFactory(); - - if (\is_string($factory)) { - return sprintf('%s(%s)', $this->dumpLiteralClass($this->dumpValue($factory)), implode(', ', $arguments)); - } - - if (\is_array($factory)) { - if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $factory[1])) { - throw new RuntimeException(sprintf('Cannot dump definition because of invalid factory method (%s).', $factory[1] ?: 'n/a')); - } - - $class = $this->dumpValue($factory[0]); - if (\is_string($factory[0])) { - return sprintf('%s::%s(%s)', $this->dumpLiteralClass($class), $factory[1], implode(', ', $arguments)); - } - - if ($factory[0] instanceof Definition) { - if (0 === strpos($class, 'new ')) { - return sprintf('(%s)->%s(%s)', $class, $factory[1], implode(', ', $arguments)); - } - - return sprintf("\\call_user_func([%s, '%s']%s)", $class, $factory[1], \count($arguments) > 0 ? ', '.implode(', ', $arguments) : ''); - } - - if ($factory[0] instanceof Reference) { - return sprintf('%s->%s(%s)', $class, $factory[1], implode(', ', $arguments)); - } - } - - throw new RuntimeException('Cannot dump definition because of invalid factory.'); - } - - $class = $value->getClass(); - if (null === $class) { - throw new RuntimeException('Cannot dump definitions which have no class nor factory.'); - } - - return sprintf('new %s(%s)', $this->dumpLiteralClass($this->dumpValue($class)), implode(', ', $arguments)); + return $this->addNewInstance($value); } elseif ($value instanceof Variable) { return '$'.$value; } elseif ($value instanceof Reference) { - $id = $this->container->normalizeId($value); + $id = (string) $value; while ($this->container->hasAlias($id)) { $id = (string) $this->container->getAlias($id); @@ -1766,6 +1816,8 @@ EOF; return $code; } + } elseif ($value instanceof \UnitEnum) { + return sprintf('\%s::%s', \get_class($value), $value->name); } elseif (\is_object($value) || \is_resource($value)) { throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.'); } @@ -1776,38 +1828,25 @@ EOF; /** * Dumps a string to a literal (aka PHP Code) class value. * - * @param string $class - * - * @return string - * * @throws RuntimeException */ - private function dumpLiteralClass($class) + private function dumpLiteralClass(string $class): string { - if (false !== strpos($class, '$')) { + if (str_contains($class, '$')) { return sprintf('${($_ = %s) && false ?: "_"}', $class); } - if (0 !== strpos($class, "'") || !preg_match('/^\'(?:\\\{2})?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\{2}[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*\'$/', $class)) { + if (!str_starts_with($class, "'") || !preg_match('/^\'(?:\\\{2})?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\{2}[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*\'$/', $class)) { throw new RuntimeException(sprintf('Cannot dump definition because of invalid class name (%s).', $class ?: 'n/a')); } $class = substr(str_replace('\\\\', '\\', $class), 1, -1); - return 0 === strpos($class, '\\') ? $class : '\\'.$class; + return str_starts_with($class, '\\') ? $class : '\\'.$class; } - /** - * Dumps a parameter. - * - * @param string $name - * - * @return string - */ - private function dumpParameter($name) + private function dumpParameter(string $name): string { - $name = (string) $name; - - if ($this->container->isCompiled() && $this->container->hasParameter($name)) { + if ($this->container->hasParameter($name)) { $value = $this->container->getParameter($name); $dumpedValue = $this->dumpValue($value, false); @@ -1815,7 +1854,7 @@ EOF; return $dumpedValue; } - if (!preg_match("/\\\$this->(?:getEnv\('(?:\w++:)*+\w++'\)|targetDirs\[\d++\])/", $dumpedValue)) { + if (!preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $dumpedValue)) { return sprintf('$this->parameters[%s]', $this->doExport($name)); } } @@ -1823,20 +1862,11 @@ EOF; return sprintf('$this->getParameter(%s)', $this->doExport($name)); } - /** - * Gets a service call. - * - * @param string $id - * @param Reference $reference - * - * @return string - */ - private function getServiceCall($id, Reference $reference = null) + private function getServiceCall(string $id, Reference $reference = null): string { while ($this->container->hasAlias($id)) { $id = (string) $this->container->getAlias($id); } - $id = $this->container->normalizeId($id); if ('service_container' === $id) { return '$this'; @@ -1851,35 +1881,47 @@ EOF; return $code; } } elseif ($this->isTrivialInstance($definition)) { - $code = substr($this->addNewInstance($definition, '', '', $id), 8, -2); - if ($definition->isShared()) { - $code = sprintf('$this->services[%s] = %s', $this->doExport($id), $code); + if ($definition->hasErrors() && $e = $definition->getErrors()) { + $this->addThrow = true; + + return sprintf('$this->throw(%s)', $this->export(reset($e))); + } + $code = $this->addNewInstance($definition, '', $id); + if ($definition->isShared() && !isset($this->singleUsePrivateIds[$id])) { + $code = sprintf('$this->%s[%s] = %s', $definition->isPublic() ? 'services' : 'privates', $this->doExport($id), $code); } $code = "($code)"; - } elseif ($this->asFiles && $definition->isShared() && !$this->isHotPath($definition)) { + } elseif ($this->asFiles && !$this->inlineFactories && !$this->isHotPath($definition)) { $code = sprintf("\$this->load('%s.php')", $this->generateMethodName($id)); + if (!$definition->isShared()) { + $factory = sprintf('$this->factories%s[%s]', $definition->isPublic() ? '' : "['service_container']", $this->doExport($id)); + $code = sprintf('(isset(%s) ? %1$s() : %s)', $factory, $code); + } } else { $code = sprintf('$this->%s()', $this->generateMethodName($id)); } - } elseif (null !== $reference && ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE === $reference->getInvalidBehavior()) { + if ($definition->isShared() && !isset($this->singleUsePrivateIds[$id])) { + $code = sprintf('($this->%s[%s] ?? %s)', $definition->isPublic() ? 'services' : 'privates', $this->doExport($id), $code); + } + + return $code; + } + if (null !== $reference && ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE === $reference->getInvalidBehavior()) { return 'null'; - } elseif (null !== $reference && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $reference->getInvalidBehavior()) { + } + if (null !== $reference && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE < $reference->getInvalidBehavior()) { $code = sprintf('$this->get(%s, /* ContainerInterface::NULL_ON_INVALID_REFERENCE */ %d)', $this->doExport($id), ContainerInterface::NULL_ON_INVALID_REFERENCE); } else { $code = sprintf('$this->get(%s)', $this->doExport($id)); } - // The following is PHP 5.5 syntax for what could be written as "(\$this->services['$id'] ?? $code)" on PHP>=7.0 - - return sprintf("\${(\$_ = isset(\$this->services[%s]) ? \$this->services[%1\$s] : %s) && false ?: '_'}", $this->doExport($id), $code); + return sprintf('($this->services[%s] ?? %s)', $this->doExport($id), $code); } /** * Initializes the method names map to avoid conflicts with the Container methods. - * - * @param string $class the container base class */ - private function initializeMethodNamesMap($class) + private function initializeMethodNamesMap(string $class) { $this->serviceIdToMethodNameMap = []; $this->usedMethodNames = []; @@ -1892,15 +1934,9 @@ EOF; } /** - * Convert a service id to a valid PHP method name. - * - * @param string $id - * - * @return string - * * @throws InvalidArgumentException */ - private function generateMethodName($id) + private function generateMethodName(string $id): string { if (isset($this->serviceIdToMethodNameMap[$id])) { return $this->serviceIdToMethodNameMap[$id]; @@ -1923,12 +1959,7 @@ EOF; return $methodName; } - /** - * Returns the next name to use. - * - * @return string - */ - private function getNextVariableName() + private function getNextVariableName(): string { $firstChars = self::FIRST_CHARS; $firstCharsLength = \strlen($firstChars); @@ -1961,11 +1992,11 @@ EOF; } } - private function getExpressionLanguage() + private function getExpressionLanguage(): ExpressionLanguage { if (null === $this->expressionLanguage) { - if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) { - throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); + if (!class_exists(\Symfony\Component\ExpressionLanguage\ExpressionLanguage::class)) { + throw new LogicException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); } $providers = $this->container->getExpressionLanguageProviders(); $this->expressionLanguage = new ExpressionLanguage(null, $providers, function ($arg) { @@ -1988,23 +2019,55 @@ EOF; return $this->expressionLanguage; } - private function isHotPath(Definition $definition) + private function isHotPath(Definition $definition): bool { return $this->hotPathTag && $definition->hasTag($this->hotPathTag) && !$definition->isDeprecated(); } + private function isSingleUsePrivateNode(ServiceReferenceGraphNode $node): bool + { + if ($node->getValue()->isPublic()) { + return false; + } + $ids = []; + foreach ($node->getInEdges() as $edge) { + if (!$value = $edge->getSourceNode()->getValue()) { + continue; + } + if ($edge->isLazy() || !$value instanceof Definition || !$value->isShared()) { + return false; + } + $ids[$edge->getSourceNode()->getId()] = true; + } + + return 1 === \count($ids); + } + + /** + * @return mixed + */ private function export($value) { if (null !== $this->targetDirRegex && \is_string($value) && preg_match($this->targetDirRegex, $value, $matches, \PREG_OFFSET_CAPTURE)) { $suffix = $matches[0][1] + \strlen($matches[0][0]); $matches[0][1] += \strlen($matches[1][0]); $prefix = $matches[0][1] ? $this->doExport(substr($value, 0, $matches[0][1]), true).'.' : ''; - $suffix = isset($value[$suffix]) ? '.'.$this->doExport(substr($value, $suffix), true) : ''; + + if ('\\' === \DIRECTORY_SEPARATOR && isset($value[$suffix])) { + $cookie = '\\'.random_int(100000, \PHP_INT_MAX); + $suffix = '.'.$this->doExport(str_replace('\\', $cookie, substr($value, $suffix)), true); + $suffix = str_replace('\\'.$cookie, "'.\\DIRECTORY_SEPARATOR.'", $suffix); + } else { + $suffix = isset($value[$suffix]) ? '.'.$this->doExport(substr($value, $suffix), true) : ''; + } + $dirname = $this->asFiles ? '$this->containerDir' : '__DIR__'; $offset = 2 + $this->targetDirMaxMatches - \count($matches); - if ($this->asFiles || 0 < $offset) { - $dirname = sprintf('$this->targetDirs[%d]', $offset); + if (0 < $offset) { + $dirname = sprintf('\dirname(__DIR__, %d)', $offset + (int) $this->asFiles); + } elseif ($this->asFiles) { + $dirname = "\$this->targetDir.''"; // empty string concatenation on purpose } if ($prefix || $suffix) { @@ -2017,9 +2080,16 @@ EOF; return $this->doExport($value, true); } - private function doExport($value, $resolveEnv = false) + /** + * @return mixed + */ + private function doExport($value, bool $resolveEnv = false) { - if (\is_string($value) && false !== strpos($value, "\n")) { + $shouldCacheValue = $resolveEnv && \is_string($value); + if ($shouldCacheValue && isset($this->exportedVariables[$value])) { + return $this->exportedVariables[$value]; + } + if (\is_string($value) && str_contains($value, "\n")) { $cleanParts = explode("\n", $value); $cleanParts = array_map(function ($part) { return var_export($part, true); }, $cleanParts); $export = implode('."\n".', $cleanParts); @@ -2029,7 +2099,7 @@ EOF; if ($resolveEnv && "'" === $export[0] && $export !== $resolvedExport = $this->container->resolveEnvPlaceholders($export, "'.\$this->getEnv('string:%s').'")) { $export = $resolvedExport; - if (".''" === substr($export, -3)) { + if (str_ends_with($export, ".''")) { $export = substr($export, 0, -3); if ("'" === $export[1]) { $export = substr_replace($export, '', 18, 7); @@ -2040,6 +2110,68 @@ EOF; } } + if ($shouldCacheValue) { + $this->exportedVariables[$value] = $export; + } + return $export; } + + private function getAutoloadFile(): ?string + { + $file = null; + + foreach (spl_autoload_functions() as $autoloader) { + if (!\is_array($autoloader)) { + continue; + } + + if ($autoloader[0] instanceof DebugClassLoader || $autoloader[0] instanceof LegacyDebugClassLoader) { + $autoloader = $autoloader[0]->getClassLoader(); + } + + if (!\is_array($autoloader) || !$autoloader[0] instanceof ClassLoader || !$autoloader[0]->findFile(__CLASS__)) { + continue; + } + + foreach (get_declared_classes() as $class) { + if (str_starts_with($class, 'ComposerAutoloaderInit') && $class::getLoader() === $autoloader[0]) { + $file = \dirname((new \ReflectionClass($class))->getFileName(), 2).'/autoload.php'; + + if (null !== $this->targetDirRegex && preg_match($this->targetDirRegex.'A', $file)) { + return $file; + } + } + } + } + + return $file; + } + + private function getClasses(Definition $definition): array + { + $classes = []; + + while ($definition instanceof Definition) { + if ($class = $definition->getClass()) { + $classes[] = trim($class, '\\'); + } + $factory = $definition->getFactory(); + + if (!\is_array($factory)) { + $factory = [$factory]; + } + + if (\is_string($factory[0])) { + if (false !== $i = strrpos($factory[0], '::')) { + $factory[0] = substr($factory[0], 0, $i); + } + $classes[] = trim($factory[0], '\\'); + } + + $definition = $factory[0]; + } + + return $classes; + } } diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/Preloader.php b/civicrm/vendor/symfony/dependency-injection/Dumper/Preloader.php new file mode 100644 index 0000000000000000000000000000000000000000..158900bc7b30e112893a33039e4025b76bb574d2 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/Preloader.php @@ -0,0 +1,107 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Dumper; + +/** + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +class Preloader +{ + public static function preload(array $classes) + { + set_error_handler(function ($t, $m, $f, $l) { + if (error_reporting() & $t) { + if (__FILE__ !== $f) { + throw new \ErrorException($m, 0, $t, $f, $l); + } + + throw new \ReflectionException($m); + } + }); + + $prev = []; + $preloaded = []; + + try { + while ($prev !== $classes) { + $prev = $classes; + foreach ($classes as $c) { + if (!isset($preloaded[$c])) { + self::doPreload($c, $preloaded); + } + } + $classes = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits()); + } + } finally { + restore_error_handler(); + } + } + + private static function doPreload(string $class, array &$preloaded): void + { + if (isset($preloaded[$class]) || \in_array($class, ['self', 'static', 'parent'], true)) { + return; + } + + $preloaded[$class] = true; + + try { + $r = new \ReflectionClass($class); + + if ($r->isInternal()) { + return; + } + + $r->getConstants(); + $r->getDefaultProperties(); + + if (\PHP_VERSION_ID >= 70400) { + foreach ($r->getProperties(\ReflectionProperty::IS_PUBLIC) as $p) { + self::preloadType($p->getType(), $preloaded); + } + } + + foreach ($r->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) { + foreach ($m->getParameters() as $p) { + if ($p->isDefaultValueAvailable() && $p->isDefaultValueConstant()) { + $c = $p->getDefaultValueConstantName(); + + if ($i = strpos($c, '::')) { + self::doPreload(substr($c, 0, $i), $preloaded); + } + } + + self::preloadType($p->getType(), $preloaded); + } + + self::preloadType($m->getReturnType(), $preloaded); + } + } catch (\Throwable $e) { + // ignore missing classes + } + } + + private static function preloadType(?\ReflectionType $t, array &$preloaded): void + { + if (!$t) { + return; + } + + foreach (($t instanceof \ReflectionUnionType || $t instanceof \ReflectionIntersectionType) ? $t->getTypes() : [$t] as $t) { + if (!$t->isBuiltin()) { + self::doPreload($t instanceof \ReflectionNamedType ? $t->getName() : $t, $preloaded); + } + } + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/civicrm/vendor/symfony/dependency-injection/Dumper/XmlDumper.php index eff421ec4e71fc9c3885cb2d9ce159e907eb936d..17cf2c1a74a689e1d4b67388df43ac891f0bb1fd 100644 --- a/civicrm/vendor/symfony/dependency-injection/Dumper/XmlDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/XmlDumper.php @@ -14,6 +14,7 @@ namespace Symfony\Component\DependencyInjection\Dumper; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; @@ -83,17 +84,14 @@ class XmlDumper extends Dumper if (\count($methodcall[1])) { $this->convertParameters($methodcall[1], 'argument', $call); } + if ($methodcall[2] ?? false) { + $call->setAttribute('returns-clone', 'true'); + } $parent->appendChild($call); } } - /** - * Adds a service. - * - * @param Definition $definition - * @param string $id - */ - private function addService($definition, $id, \DOMElement $parent) + private function addService(Definition $definition, ?string $id, \DOMElement $parent) { $service = $this->document->createElement('service'); if (null !== $id) { @@ -118,9 +116,15 @@ class XmlDumper extends Dumper if ($definition->isLazy()) { $service->setAttribute('lazy', 'true'); } - if (null !== $decorated = $definition->getDecoratedService()) { - list($decorated, $renamedId, $priority) = $decorated; + if (null !== $decoratedService = $definition->getDecoratedService()) { + [$decorated, $renamedId, $priority] = $decoratedService; $service->setAttribute('decorates', $decorated); + + $decorationOnInvalid = $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + if (\in_array($decorationOnInvalid, [ContainerInterface::IGNORE_ON_INVALID_REFERENCE, ContainerInterface::NULL_ON_INVALID_REFERENCE], true)) { + $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE === $decorationOnInvalid ? 'null' : 'ignore'; + $service->setAttribute('decoration-on-invalid', $invalidBehavior); + } if (null !== $renamedId) { $service->setAttribute('decoration-inner-name', $renamedId); } @@ -134,7 +138,7 @@ class XmlDumper extends Dumper $tag = $this->document->createElement('tag'); $tag->setAttribute('name', $name); foreach ($attributes as $key => $value) { - $tag->setAttribute($key, $value); + $tag->setAttribute($key, $value ?? ''); } $service->appendChild($tag); } @@ -184,13 +188,6 @@ class XmlDumper extends Dumper $service->setAttribute('autowire', 'true'); } - foreach ($definition->getAutowiringTypes(false) as $autowiringTypeValue) { - $autowiringType = $this->document->createElement('autowiring-type'); - $autowiringType->appendChild($this->document->createTextNode($autowiringTypeValue)); - - $service->appendChild($autowiringType); - } - if ($definition->isAutoconfigured()) { $service->setAttribute('autoconfigure', 'true'); } @@ -217,12 +214,7 @@ class XmlDumper extends Dumper $parent->appendChild($service); } - /** - * Adds a service alias. - * - * @param string $alias - */ - private function addServiceAlias($alias, Alias $id, \DOMElement $parent) + private function addServiceAlias(string $alias, Alias $id, \DOMElement $parent) { $service = $this->document->createElement('service'); $service->setAttribute('id', $alias); @@ -230,6 +222,14 @@ class XmlDumper extends Dumper if (!$id->isPrivate()) { $service->setAttribute('public', $id->isPublic() ? 'true' : 'false'); } + + if ($id->isDeprecated()) { + $deprecated = $this->document->createElement('deprecated'); + $deprecated->appendChild($this->document->createTextNode($id->getDeprecationMessage('%alias_id%'))); + + $service->appendChild($deprecated); + } + $parent->appendChild($service); } @@ -255,13 +255,7 @@ class XmlDumper extends Dumper $parent->appendChild($services); } - /** - * Converts parameters. - * - * @param string $type - * @param string $keyAttribute - */ - private function convertParameters(array $parameters, $type, \DOMElement $parent, $keyAttribute = 'key') + private function convertParameters(array $parameters, string $type, \DOMElement $parent, string $keyAttribute = 'key') { $withKeys = array_keys($parameters) !== range(0, \count($parameters) - 1); foreach ($parameters as $key => $value) { @@ -270,20 +264,35 @@ class XmlDumper extends Dumper $element->setAttribute($keyAttribute, $key); } - if ($value instanceof ServiceClosureArgument) { - $value = $value->getValues()[0]; - } - if (\is_array($value)) { + if (\is_array($tag = $value)) { $element->setAttribute('type', 'collection'); $this->convertParameters($value, $type, $element, 'key'); - } elseif ($value instanceof TaggedIteratorArgument) { - $element->setAttribute('type', 'tagged'); - $element->setAttribute('tag', $value->getTag()); + } elseif ($value instanceof TaggedIteratorArgument || ($value instanceof ServiceLocatorArgument && $tag = $value->getTaggedIteratorArgument())) { + $element->setAttribute('type', $value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator'); + $element->setAttribute('tag', $tag->getTag()); + + if (null !== $tag->getIndexAttribute()) { + $element->setAttribute('index-by', $tag->getIndexAttribute()); + + if (null !== $tag->getDefaultIndexMethod()) { + $element->setAttribute('default-index-method', $tag->getDefaultIndexMethod()); + } + if (null !== $tag->getDefaultPriorityMethod()) { + $element->setAttribute('default-priority-method', $tag->getDefaultPriorityMethod()); + } + } } elseif ($value instanceof IteratorArgument) { $element->setAttribute('type', 'iterator'); $this->convertParameters($value->getValues(), $type, $element, 'key'); - } elseif ($value instanceof Reference) { + } elseif ($value instanceof ServiceLocatorArgument) { + $element->setAttribute('type', 'service_locator'); + $this->convertParameters($value->getValues(), $type, $element, 'key'); + } elseif ($value instanceof Reference || $value instanceof ServiceClosureArgument) { $element->setAttribute('type', 'service'); + if ($value instanceof ServiceClosureArgument) { + $element->setAttribute('type', 'service_closure'); + $value = $value->getValues()[0]; + } $element->setAttribute('id', (string) $value); $behavior = $value->getInvalidBehavior(); if (ContainerInterface::NULL_ON_INVALID_REFERENCE == $behavior) { @@ -300,6 +309,13 @@ class XmlDumper extends Dumper $element->setAttribute('type', 'expression'); $text = $this->document->createTextNode(self::phpToXml((string) $value)); $element->appendChild($text); + } elseif (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { + $element->setAttribute('type', 'binary'); + $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); + $element->appendChild($text); + } elseif ($value instanceof \UnitEnum) { + $element->setAttribute('type', 'constant'); + $element->appendChild($this->document->createTextNode(self::phpToXml($value))); } else { if (\in_array($value, ['null', 'true', 'false'], true)) { $element->setAttribute('type', 'string'); @@ -318,10 +334,8 @@ class XmlDumper extends Dumper /** * Escapes arguments. - * - * @return array */ - private function escape(array $arguments) + private function escape(array $arguments): array { $args = []; foreach ($arguments as $k => $v) { @@ -342,11 +356,9 @@ class XmlDumper extends Dumper * * @param mixed $value Value to convert * - * @return string - * * @throws RuntimeException When trying to dump object or resource */ - public static function phpToXml($value) + public static function phpToXml($value): string { switch (true) { case null === $value: @@ -357,6 +369,8 @@ class XmlDumper extends Dumper return 'false'; case $value instanceof Parameter: return '%'.$value.'%'; + case $value instanceof \UnitEnum: + return sprintf('%s::%s', \get_class($value), $value->name); case \is_object($value) || \is_resource($value): throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.'); default: diff --git a/civicrm/vendor/symfony/dependency-injection/Dumper/YamlDumper.php b/civicrm/vendor/symfony/dependency-injection/Dumper/YamlDumper.php index 1e795c7daf3bfe17afa9b70f9705b8d5e6bcf05b..e053d3b6cdf314d7ab58b5a5279a5dcd86861031 100644 --- a/civicrm/vendor/symfony/dependency-injection/Dumper/YamlDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/Dumper/YamlDumper.php @@ -15,9 +15,11 @@ use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Parameter; use Symfony\Component\DependencyInjection\Reference; @@ -43,8 +45,8 @@ class YamlDumper extends Dumper */ public function dump(array $options = []) { - if (!class_exists('Symfony\Component\Yaml\Dumper')) { - throw new RuntimeException('Unable to dump the container as the Symfony Yaml Component is not installed.'); + if (!class_exists(\Symfony\Component\Yaml\Dumper::class)) { + throw new LogicException('Unable to dump the container as the Symfony Yaml Component is not installed.'); } if (null === $this->dumper) { @@ -54,14 +56,7 @@ class YamlDumper extends Dumper return $this->container->resolveEnvPlaceholders($this->addParameters()."\n".$this->addServices()); } - /** - * Adds a service. - * - * @param string $id - * - * @return string - */ - private function addService($id, Definition $definition) + private function addService(string $id, Definition $definition): string { $code = " $id:\n"; if ($class = $definition->getClass()) { @@ -108,14 +103,6 @@ class YamlDumper extends Dumper $code .= " autowire: true\n"; } - $autowiringTypesCode = ''; - foreach ($definition->getAutowiringTypes(false) as $autowiringType) { - $autowiringTypesCode .= sprintf(" - %s\n", $this->dumper->dump($autowiringType)); - } - if ($autowiringTypesCode) { - $code .= sprintf(" autowiring_types:\n%s", $autowiringTypesCode); - } - if ($definition->isAutoconfigured()) { $code .= " autoconfigure: true\n"; } @@ -144,8 +131,8 @@ class YamlDumper extends Dumper $code .= " shared: false\n"; } - if (null !== $decorated = $definition->getDecoratedService()) { - list($decorated, $renamedId, $priority) = $decorated; + if (null !== $decoratedService = $definition->getDecoratedService()) { + [$decorated, $renamedId, $priority] = $decoratedService; $code .= sprintf(" decorates: %s\n", $decorated); if (null !== $renamedId) { $code .= sprintf(" decoration_inner_name: %s\n", $renamedId); @@ -153,6 +140,12 @@ class YamlDumper extends Dumper if (0 !== $priority) { $code .= sprintf(" decoration_priority: %s\n", $priority); } + + $decorationOnInvalid = $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + if (\in_array($decorationOnInvalid, [ContainerInterface::IGNORE_ON_INVALID_REFERENCE, ContainerInterface::NULL_ON_INVALID_REFERENCE])) { + $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE === $decorationOnInvalid ? 'null' : 'ignore'; + $code .= sprintf(" decoration_on_invalid: %s\n", $invalidBehavior); + } } if ($callable = $definition->getFactory()) { @@ -166,28 +159,18 @@ class YamlDumper extends Dumper return $code; } - /** - * Adds a service alias. - * - * @param string $alias - * - * @return string - */ - private function addServiceAlias($alias, Alias $id) + private function addServiceAlias(string $alias, Alias $id): string { - if ($id->isPrivate()) { + $deprecated = $id->isDeprecated() ? sprintf(" deprecated: %s\n", $id->getDeprecationMessage('%alias_id%')) : ''; + + if (!$id->isDeprecated() && $id->isPrivate()) { return sprintf(" %s: '@%s'\n", $alias, $id); } - return sprintf(" %s:\n alias: %s\n public: %s\n", $alias, $id, $id->isPublic() ? 'true' : 'false'); + return sprintf(" %s:\n alias: %s\n public: %s\n%s", $alias, $id, $id->isPublic() ? 'true' : 'false', $deprecated); } - /** - * Adds services. - * - * @return string - */ - private function addServices() + private function addServices(): string { if (!$this->container->getDefinitions()) { return ''; @@ -209,12 +192,7 @@ class YamlDumper extends Dumper return $code; } - /** - * Adds parameters. - * - * @return string - */ - private function addParameters() + private function addParameters(): string { if (!$this->container->getParameterBag()->all()) { return ''; @@ -229,6 +207,8 @@ class YamlDumper extends Dumper * Dumps callable to YAML format. * * @param mixed $callable + * + * @return mixed */ private function dumpCallable($callable) { @@ -246,8 +226,6 @@ class YamlDumper extends Dumper /** * Dumps the value to YAML format. * - * @param mixed $value - * * @return mixed * * @throws RuntimeException When trying to dump object or resource @@ -256,13 +234,36 @@ class YamlDumper extends Dumper { if ($value instanceof ServiceClosureArgument) { $value = $value->getValues()[0]; + + return new TaggedValue('service_closure', $this->getServiceCall((string) $value, $value)); } if ($value instanceof ArgumentInterface) { - if ($value instanceof TaggedIteratorArgument) { - return new TaggedValue('tagged', $value->getTag()); + $tag = $value; + + if ($value instanceof TaggedIteratorArgument || ($value instanceof ServiceLocatorArgument && $tag = $value->getTaggedIteratorArgument())) { + if (null === $tag->getIndexAttribute()) { + $content = $tag->getTag(); + } else { + $content = [ + 'tag' => $tag->getTag(), + 'index_by' => $tag->getIndexAttribute(), + ]; + + if (null !== $tag->getDefaultIndexMethod()) { + $content['default_index_method'] = $tag->getDefaultIndexMethod(); + } + if (null !== $tag->getDefaultPriorityMethod()) { + $content['default_priority_method'] = $tag->getDefaultPriorityMethod(); + } + } + + return new TaggedValue($value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator', $content); } + if ($value instanceof IteratorArgument) { $tag = 'iterator'; + } elseif ($value instanceof ServiceLocatorArgument) { + $tag = 'service_locator'; } else { throw new RuntimeException(sprintf('Unspecified Yaml tag for type "%s".', \get_class($value))); } @@ -285,6 +286,8 @@ class YamlDumper extends Dumper return $this->getExpressionCall((string) $value); } elseif ($value instanceof Definition) { return new TaggedValue('service', (new Parser())->parse("_:\n".$this->addService('_', $value), Yaml::PARSE_CUSTOM_TAGS)['_']['_']); + } elseif ($value instanceof \UnitEnum) { + return new TaggedValue('php/const', sprintf('%s::%s', \get_class($value), $value->name)); } elseif (\is_object($value) || \is_resource($value)) { throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.'); } @@ -292,18 +295,11 @@ class YamlDumper extends Dumper return $value; } - /** - * Gets the service call. - * - * @param string $id - * @param Reference $reference - * - * @return string - */ - private function getServiceCall($id, Reference $reference = null) + private function getServiceCall(string $id, Reference $reference = null): string { if (null !== $reference) { switch ($reference->getInvalidBehavior()) { + case ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE: break; case ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE: break; case ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE: return sprintf('@!%s', $id); default: return sprintf('@?%s', $id); @@ -313,37 +309,23 @@ class YamlDumper extends Dumper return sprintf('@%s', $id); } - /** - * Gets parameter call. - * - * @param string $id - * - * @return string - */ - private function getParameterCall($id) + private function getParameterCall(string $id): string { return sprintf('%%%s%%', $id); } - private function getExpressionCall($expression) + private function getExpressionCall(string $expression): string { return sprintf('@=%s', $expression); } - /** - * Prepares parameters. - * - * @param bool $escape - * - * @return array - */ - private function prepareParameters(array $parameters, $escape = true) + private function prepareParameters(array $parameters, bool $escape = true): array { $filtered = []; foreach ($parameters as $key => $value) { if (\is_array($value)) { $value = $this->prepareParameters($value, $escape); - } elseif ($value instanceof Reference || \is_string($value) && 0 === strpos($value, '@')) { + } elseif ($value instanceof Reference || \is_string($value) && str_starts_with($value, '@')) { $value = '@'.$value; } @@ -353,12 +335,7 @@ class YamlDumper extends Dumper return $escape ? $this->escape($filtered) : $filtered; } - /** - * Escapes arguments. - * - * @return array - */ - private function escape(array $arguments) + private function escape(array $arguments): array { $args = []; foreach ($arguments as $k => $v) { diff --git a/civicrm/vendor/symfony/dependency-injection/EnvVarLoaderInterface.php b/civicrm/vendor/symfony/dependency-injection/EnvVarLoaderInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..0c547f8a5fae20922a26594c58e783d0749f9747 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/EnvVarLoaderInterface.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +/** + * EnvVarLoaderInterface objects return key/value pairs that are added to the list of available env vars. + * + * @author Nicolas Grekas <p@tchwork.com> + */ +interface EnvVarLoaderInterface +{ + /** + * @return string[] Key/value pairs that can be accessed using the regular "%env()%" syntax + */ + public function loadEnvVars(): array; +} diff --git a/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php b/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php index 065673dc19980639ce0f38ae6dfce8706fbf0e2a..3441febfcf378ec4b6d89b376d67fc6fcccd0b70 100644 --- a/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php +++ b/civicrm/vendor/symfony/dependency-injection/EnvVarProcessor.php @@ -11,8 +11,8 @@ namespace Symfony\Component\DependencyInjection; -use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\DependencyInjection\Exception\EnvNotFoundException; +use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** @@ -21,10 +21,16 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; class EnvVarProcessor implements EnvVarProcessorInterface { private $container; + private $loaders; + private $loadedVars = []; - public function __construct(ContainerInterface $container) + /** + * @param EnvVarLoaderInterface[] $loaders + */ + public function __construct(ContainerInterface $container, \Traversable $loaders = null) { $this->container = $container; + $this->loaders = $loaders ?? new \ArrayIterator(); } /** @@ -36,12 +42,19 @@ class EnvVarProcessor implements EnvVarProcessorInterface 'base64' => 'string', 'bool' => 'bool', 'const' => 'bool|int|float|string|array', + 'csv' => 'array', 'file' => 'string', 'float' => 'float', 'int' => 'int', 'json' => 'array', + 'key' => 'bool|int|float|string|array', + 'url' => 'array', + 'query_string' => 'array', 'resolve' => 'string', + 'default' => 'bool|int|float|string|array', 'string' => 'string', + 'trim' => 'string', + 'require' => 'bool|int|float|string|array', ]; } @@ -52,35 +65,124 @@ class EnvVarProcessor implements EnvVarProcessorInterface { $i = strpos($name, ':'); - if ('file' === $prefix) { + if ('key' === $prefix) { + if (false === $i) { + throw new RuntimeException(sprintf('Invalid env "key:%s": a key specifier should be provided.', $name)); + } + + $next = substr($name, $i + 1); + $key = substr($name, 0, $i); + $array = $getEnv($next); + + if (!\is_array($array)) { + throw new RuntimeException(sprintf('Resolved value of "%s" did not result in an array value.', $next)); + } + + if (!isset($array[$key]) && !\array_key_exists($key, $array)) { + throw new EnvNotFoundException(sprintf('Key "%s" not found in "%s" (resolved from "%s").', $key, json_encode($array), $next)); + } + + return $array[$key]; + } + + if ('default' === $prefix) { + if (false === $i) { + throw new RuntimeException(sprintf('Invalid env "default:%s": a fallback parameter should be provided.', $name)); + } + + $next = substr($name, $i + 1); + $default = substr($name, 0, $i); + + if ('' !== $default && !$this->container->hasParameter($default)) { + throw new RuntimeException(sprintf('Invalid env fallback in "default:%s": parameter "%s" not found.', $name, $default)); + } + + try { + $env = $getEnv($next); + + if ('' !== $env && null !== $env) { + return $env; + } + } catch (EnvNotFoundException $e) { + // no-op + } + + return '' === $default ? null : $this->container->getParameter($default); + } + + if ('file' === $prefix || 'require' === $prefix) { if (!is_scalar($file = $getEnv($name))) { throw new RuntimeException(sprintf('Invalid file name: env var "%s" is non-scalar.', $name)); } if (!file_exists($file)) { - throw new RuntimeException(sprintf('Env "file:%s" not found: "%s" does not exist.', $name, $file)); + throw new EnvNotFoundException(sprintf('File "%s" not found (resolved from "%s").', $file, $name)); } - return file_get_contents($file); + if ('file' === $prefix) { + return file_get_contents($file); + } else { + return require $file; + } } if (false !== $i || 'string' !== $prefix) { - if (null === $env = $getEnv($name)) { - return null; - } + $env = $getEnv($name); } elseif (isset($_ENV[$name])) { $env = $_ENV[$name]; - } elseif (isset($_SERVER[$name]) && 0 !== strpos($name, 'HTTP_')) { + } elseif (isset($_SERVER[$name]) && !str_starts_with($name, 'HTTP_')) { $env = $_SERVER[$name]; } elseif (false === ($env = getenv($name)) || null === $env) { // null is a possible value because of thread safety issues - if (!$this->container->hasParameter("env($name)")) { - throw new EnvNotFoundException($name); + foreach ($this->loadedVars as $vars) { + if (false !== $env = ($vars[$name] ?? false)) { + break; + } } - if (null === $env = $this->container->getParameter("env($name)")) { - return null; + if (false === $env || null === $env) { + $loaders = $this->loaders; + $this->loaders = new \ArrayIterator(); + + try { + $i = 0; + $ended = true; + $count = $loaders instanceof \Countable ? $loaders->count() : 0; + foreach ($loaders as $loader) { + if (\count($this->loadedVars) > $i++) { + continue; + } + $this->loadedVars[] = $vars = $loader->loadEnvVars(); + if (false !== $env = $vars[$name] ?? false) { + $ended = false; + break; + } + } + if ($ended || $count === $i) { + $loaders = $this->loaders; + } + } catch (ParameterCircularReferenceException $e) { + // skip loaders that need an env var that is not defined + } finally { + $this->loaders = $loaders; + } + } + + if (false === $env || null === $env) { + if (!$this->container->hasParameter("env($name)")) { + throw new EnvNotFoundException(sprintf('Environment variable not found: "%s".', $name)); + } + + $env = $this->container->getParameter("env($name)"); } } + if (null === $env) { + if (!isset($this->getProvidedTypes()[$prefix])) { + throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix)); + } + + return null; + } + if (!is_scalar($env)) { throw new RuntimeException(sprintf('Non-scalar env var "%s" cannot be cast to "%s".', $name, $prefix)); } @@ -90,11 +192,11 @@ class EnvVarProcessor implements EnvVarProcessorInterface } if ('bool' === $prefix) { - return (bool) self::phpize($env); + return (bool) (filter_var($env, \FILTER_VALIDATE_BOOLEAN) ?: filter_var($env, \FILTER_VALIDATE_INT) ?: filter_var($env, \FILTER_VALIDATE_FLOAT)); } if ('int' === $prefix) { - if (!is_numeric($env = self::phpize($env))) { + if (false === $env = filter_var($env, \FILTER_VALIDATE_INT) ?: filter_var($env, \FILTER_VALIDATE_FLOAT)) { throw new RuntimeException(sprintf('Non-numeric env var "%s" cannot be cast to int.', $name)); } @@ -102,7 +204,7 @@ class EnvVarProcessor implements EnvVarProcessorInterface } if ('float' === $prefix) { - if (!is_numeric($env = self::phpize($env))) { + if (false === $env = filter_var($env, \FILTER_VALIDATE_FLOAT)) { throw new RuntimeException(sprintf('Non-numeric env var "%s" cannot be cast to float.', $name)); } @@ -118,7 +220,7 @@ class EnvVarProcessor implements EnvVarProcessorInterface } if ('base64' === $prefix) { - return base64_decode($env); + return base64_decode(strtr($env, '-_', '+/')); } if ('json' === $prefix) { @@ -128,19 +230,56 @@ class EnvVarProcessor implements EnvVarProcessorInterface throw new RuntimeException(sprintf('Invalid JSON in env var "%s": ', $name).json_last_error_msg()); } - if (!\is_array($env)) { - throw new RuntimeException(sprintf('Invalid JSON env var "%s": array expected, "%s" given.', $name, \gettype($env))); + if (null !== $env && !\is_array($env)) { + throw new RuntimeException(sprintf('Invalid JSON env var "%s": array or null expected, "%s" given.', $name, \gettype($env))); } return $env; } + if ('url' === $prefix) { + $parsedEnv = parse_url($env); + + if (false === $parsedEnv) { + throw new RuntimeException(sprintf('Invalid URL in env var "%s".', $name)); + } + if (!isset($parsedEnv['scheme'], $parsedEnv['host'])) { + throw new RuntimeException(sprintf('Invalid URL env var "%s": schema and host expected, "%s" given.', $name, $env)); + } + $parsedEnv += [ + 'port' => null, + 'user' => null, + 'pass' => null, + 'path' => null, + 'query' => null, + 'fragment' => null, + ]; + + // remove the '/' separator + $parsedEnv['path'] = '/' === ($parsedEnv['path'] ?? '/') ? '' : substr($parsedEnv['path'], 1); + + return $parsedEnv; + } + + if ('query_string' === $prefix) { + $queryString = parse_url($env, \PHP_URL_QUERY) ?: $env; + parse_str($queryString, $result); + + return $result; + } + if ('resolve' === $prefix) { - return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($name) { + return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($name, $getEnv) { if (!isset($match[1])) { return '%'; } - $value = $this->container->getParameter($match[1]); + + if (str_starts_with($match[1], 'env(') && str_ends_with($match[1], ')') && 'env()' !== $match[1]) { + $value = $getEnv(substr($match[1], 4, -1)); + } else { + $value = $this->container->getParameter($match[1]); + } + if (!is_scalar($value)) { throw new RuntimeException(sprintf('Parameter "%s" found when resolving env var "%s" must be scalar, "%s" given.', $match[1], $name, \gettype($value))); } @@ -149,15 +288,14 @@ class EnvVarProcessor implements EnvVarProcessorInterface }, $env); } - throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix)); - } + if ('csv' === $prefix) { + return str_getcsv($env, ',', '"', \PHP_VERSION_ID >= 70400 ? '' : '\\'); + } - private static function phpize($value) - { - if (!class_exists(XmlUtils::class)) { - throw new RuntimeException('The Symfony Config component is required to cast env vars to "bool", "int" or "float".'); + if ('trim' === $prefix) { + return trim($env); } - return XmlUtils::phpize($value); + throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix)); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/AutowiringFailedException.php b/civicrm/vendor/symfony/dependency-injection/Exception/AutowiringFailedException.php index 145cd8cbdcf2424d082e7f43c6b564167807e420..0006f5621cbf20d50730c88ff29692ddc8c51b00 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/AutowiringFailedException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/AutowiringFailedException.php @@ -17,12 +17,54 @@ namespace Symfony\Component\DependencyInjection\Exception; class AutowiringFailedException extends RuntimeException { private $serviceId; + private $messageCallback; - public function __construct($serviceId, $message = '', $code = 0, \Exception $previous = null) + public function __construct(string $serviceId, $message = '', int $code = 0, \Throwable $previous = null) { $this->serviceId = $serviceId; - parent::__construct($message, $code, $previous); + if ($message instanceof \Closure + && (\function_exists('xdebug_is_enabled') ? xdebug_is_enabled() : \function_exists('xdebug_info')) + ) { + $message = $message(); + } + + if (!$message instanceof \Closure) { + parent::__construct($message, $code, $previous); + + return; + } + + $this->messageCallback = $message; + parent::__construct('', $code, $previous); + + $this->message = new class($this->message, $this->messageCallback) { + private $message; + private $messageCallback; + + public function __construct(&$message, &$messageCallback) + { + $this->message = &$message; + $this->messageCallback = &$messageCallback; + } + + public function __toString(): string + { + $messageCallback = $this->messageCallback; + $this->messageCallback = null; + + try { + return $this->message = $messageCallback(); + } catch (\Throwable $e) { + return $this->message = $e->getMessage(); + } + } + }; + } + + public function getMessageCallback(): ?\Closure + { + return $this->messageCallback; } public function getServiceId() diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/EnvNotFoundException.php b/civicrm/vendor/symfony/dependency-injection/Exception/EnvNotFoundException.php index 577095e88b493062e71e6a8bb33b24812fe9650c..04ac84800abc179fc8ab2caca51d0b21b294fb8b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/EnvNotFoundException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/EnvNotFoundException.php @@ -18,8 +18,4 @@ namespace Symfony\Component\DependencyInjection\Exception; */ class EnvNotFoundException extends InvalidArgumentException { - public function __construct($name) - { - parent::__construct(sprintf('Environment variable not found: "%s".', $name)); - } } diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/EnvParameterException.php b/civicrm/vendor/symfony/dependency-injection/Exception/EnvParameterException.php index 3839a4633be4057c9f18691dd21a2c1d3c80c765..48b5e486ae71d8cf1ab26f9fb153e697f81a76d9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/EnvParameterException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/EnvParameterException.php @@ -18,7 +18,7 @@ namespace Symfony\Component\DependencyInjection\Exception; */ class EnvParameterException extends InvalidArgumentException { - public function __construct(array $envs, \Exception $previous = null, $message = 'Incompatible use of dynamic environment variables "%s" found in parameters.') + public function __construct(array $envs, \Throwable $previous = null, string $message = 'Incompatible use of dynamic environment variables "%s" found in parameters.') { parent::__construct(sprintf($message, implode('", "', $envs)), 0, $previous); } diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php b/civicrm/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php index 5bec478695f6f2d4f546d84a6c9cfafd7f40dd5c..6202df76e72d896814e0ce9dccdc8b90e8d30127 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/ExceptionInterface.php @@ -19,6 +19,6 @@ use Psr\Container\ContainerExceptionInterface; * @author Fabien Potencier <fabien@symfony.com> * @author Bulat Shakirzyanov <bulat@theopenskyproject.com> */ -interface ExceptionInterface extends ContainerExceptionInterface +interface ExceptionInterface extends ContainerExceptionInterface, \Throwable { } diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php b/civicrm/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php new file mode 100644 index 0000000000000000000000000000000000000000..2a11626fe2bf0fd107e2fb7e1a9615988e8bb68b --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php @@ -0,0 +1,35 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Exception; + +/** + * Thrown when trying to inject a parameter into a constructor/method with an incompatible type. + * + * @author Nicolas Grekas <p@tchwork.com> + * @author Julien Maulny <jmaulny@darkmira.fr> + */ +class InvalidParameterTypeException extends InvalidArgumentException +{ + public function __construct(string $serviceId, string $type, \ReflectionParameter $parameter) + { + $acceptedType = $parameter->getType(); + $acceptedType = $acceptedType instanceof \ReflectionNamedType ? $acceptedType->getName() : (string) $acceptedType; + $this->code = $type; + + $function = $parameter->getDeclaringFunction(); + $functionName = $function instanceof \ReflectionMethod + ? sprintf('%s::%s', $function->getDeclaringClass()->getName(), $function->getName()) + : $function->getName(); + + parent::__construct(sprintf('Invalid definition for service "%s": argument %d of "%s()" accepts "%s", "%s" passed.', $serviceId, 1 + $parameter->getPosition(), $functionName, $acceptedType, $type)); + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php b/civicrm/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php index 29151765dc5b64af0ea42da2dbb857bc58460ee0..2450ccb5c797fdc8dfc2f049bffa7b975fb8b8b3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php @@ -20,7 +20,7 @@ class ParameterCircularReferenceException extends RuntimeException { private $parameters; - public function __construct($parameters, \Exception $previous = null) + public function __construct(array $parameters, \Throwable $previous = null) { parent::__construct(sprintf('Circular reference detected for parameter "%s" ("%s" > "%s").', $parameters[0], implode('" > "', $parameters), $parameters[0]), 0, $previous); diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php b/civicrm/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php index b08f2e8559776c18cb63ce75574f75f062982671..8af993b8a4898d96ab1704ae49057182ec72c598 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php @@ -11,12 +11,14 @@ namespace Symfony\Component\DependencyInjection\Exception; +use Psr\Container\NotFoundExceptionInterface; + /** * This exception is thrown when a non-existent parameter is used. * * @author Fabien Potencier <fabien@symfony.com> */ -class ParameterNotFoundException extends InvalidArgumentException +class ParameterNotFoundException extends InvalidArgumentException implements NotFoundExceptionInterface { private $key; private $sourceId; @@ -25,14 +27,14 @@ class ParameterNotFoundException extends InvalidArgumentException private $nonNestedAlternative; /** - * @param string $key The requested parameter key - * @param string $sourceId The service id that references the non-existent parameter - * @param string $sourceKey The parameter key that references the non-existent parameter - * @param \Exception $previous The previous exception - * @param string[] $alternatives Some parameter name alternatives - * @param string|null $nonNestedAlternative The alternative parameter name when the user expected dot notation for nested parameters + * @param string $key The requested parameter key + * @param string|null $sourceId The service id that references the non-existent parameter + * @param string|null $sourceKey The parameter key that references the non-existent parameter + * @param \Throwable|null $previous The previous exception + * @param string[] $alternatives Some parameter name alternatives + * @param string|null $nonNestedAlternative The alternative parameter name when the user expected dot notation for nested parameters */ - public function __construct($key, $sourceId = null, $sourceKey = null, \Exception $previous = null, array $alternatives = [], $nonNestedAlternative = null) + public function __construct(string $key, string $sourceId = null, string $sourceKey = null, \Throwable $previous = null, array $alternatives = [], string $nonNestedAlternative = null) { $this->key = $key; $this->sourceId = $sourceId; diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php b/civicrm/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php index 26e3fb34bf3cb4c4834fda2b4ed1dc4b0f2a6184..a38671bcf24bdf8881142a0f3cbfb8a90b8a0b73 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php @@ -21,7 +21,7 @@ class ServiceCircularReferenceException extends RuntimeException private $serviceId; private $path; - public function __construct($serviceId, array $path, \Exception $previous = null) + public function __construct(string $serviceId, array $path, \Throwable $previous = null) { parent::__construct(sprintf('Circular reference detected for service "%s", path: "%s".', $serviceId, implode(' -> ', $path)), 0, $previous); diff --git a/civicrm/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php b/civicrm/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php index 280dabf33fc512933e3d12e346fe06f79702cfa7..f91afae397d94ade6296f6c20e299a0386e92085 100644 --- a/civicrm/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php +++ b/civicrm/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php @@ -24,7 +24,7 @@ class ServiceNotFoundException extends InvalidArgumentException implements NotFo private $sourceId; private $alternatives; - public function __construct($id, $sourceId = null, \Exception $previous = null, array $alternatives = [], $msg = null) + public function __construct(string $id, string $sourceId = null, \Throwable $previous = null, array $alternatives = [], string $msg = null) { if (null !== $msg) { // no-op diff --git a/civicrm/vendor/symfony/dependency-injection/ExpressionLanguage.php b/civicrm/vendor/symfony/dependency-injection/ExpressionLanguage.php index 0c1780b8b1aacfbf5b0f7b633efb1f099a508c64..961c737e8d5c5ed680b584eb0ebff52c44dcaf00 100644 --- a/civicrm/vendor/symfony/dependency-injection/ExpressionLanguage.php +++ b/civicrm/vendor/symfony/dependency-injection/ExpressionLanguage.php @@ -11,8 +11,13 @@ namespace Symfony\Component\DependencyInjection; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\ExpressionLanguage\ExpressionLanguage as BaseExpressionLanguage; +if (!class_exists(BaseExpressionLanguage::class)) { + return; +} + /** * Adds some function to the default ExpressionLanguage. * @@ -25,7 +30,7 @@ class ExpressionLanguage extends BaseExpressionLanguage /** * {@inheritdoc} */ - public function __construct($cache = null, array $providers = [], callable $serviceCompiler = null) + public function __construct(CacheItemPoolInterface $cache = null, array $providers = [], callable $serviceCompiler = null) { // prepend the default provider to let users override it easily array_unshift($providers, new ExpressionLanguageProvider($serviceCompiler)); diff --git a/civicrm/vendor/symfony/dependency-injection/Extension/Extension.php b/civicrm/vendor/symfony/dependency-injection/Extension/Extension.php index 00fa9dc8da500d0632f342f37559e36fed9292e5..01c1e0014647ce3215adda8f8dd3f812d737614b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Extension/Extension.php +++ b/civicrm/vendor/symfony/dependency-injection/Extension/Extension.php @@ -66,7 +66,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn public function getAlias() { $className = static::class; - if ('Extension' != substr($className, -9)) { + if (!str_ends_with($className, 'Extension')) { throw new BadMethodCallException('This extension does not follow the naming convention; you must overwrite the getAlias() method.'); } $classBaseName = substr(strrchr($className, '\\'), 1, -9); @@ -81,21 +81,32 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn { $class = static::class; - if (false !== strpos($class, "\0")) { + if (str_contains($class, "\0")) { return null; // ignore anonymous classes } $class = substr_replace($class, '\Configuration', strrpos($class, '\\')); $class = $container->getReflectionClass($class); - $constructor = $class ? $class->getConstructor() : null; - return $class && (!$constructor || !$constructor->getNumberOfRequiredParameters()) ? $class->newInstance() : null; + if (!$class) { + return null; + } + + if (!$class->implementsInterface(ConfigurationInterface::class)) { + @trigger_error(sprintf('Not implementing "%s" in the extension configuration class "%s" is deprecated since Symfony 4.1.', ConfigurationInterface::class, $class->getName()), \E_USER_DEPRECATED); + //throw new LogicException(sprintf('The extension configuration class "%s" must implement "%s".', $class->getName(), ConfigurationInterface::class)); + + return null; + } + + if (!($constructor = $class->getConstructor()) || !$constructor->getNumberOfRequiredParameters()) { + return $class->newInstance(); + } + + return null; } - /** - * @return array - */ - final protected function processConfiguration(ConfigurationInterface $configuration, array $configs) + final protected function processConfiguration(ConfigurationInterface $configuration, array $configs): array { $processor = new Processor(); @@ -105,7 +116,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn /** * @internal */ - final public function getProcessedConfigs() + final public function getProcessedConfigs(): array { try { return $this->processedConfigs; diff --git a/civicrm/vendor/symfony/dependency-injection/LICENSE b/civicrm/vendor/symfony/dependency-injection/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/dependency-injection/LICENSE +++ b/civicrm/vendor/symfony/dependency-injection/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php index 417ab908a39c67e5bd9a5a1cbc7a243dd7ec0321..96104e4ad66af8f0ac926270c3a2e8e0d7821190 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php @@ -25,10 +25,8 @@ interface InstantiatorInterface /** * Instantiates a proxy object. * - * @param ContainerInterface $container The container from which the service is being requested - * @param Definition $definition The definition of the requested service - * @param string $id Identifier of the requested service - * @param callable $realInstantiator Zero-argument callback that is capable of producing the real service instance + * @param string $id Identifier of the requested service + * @param callable $realInstantiator Zero-argument callback that is capable of producing the real service instance * * @return object */ diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php index 532e768684f30ccbd4430508aeb966e3b8b1a84d..2e36704080e6d75103fa447ecd3c0cce1bc83c2f 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php @@ -28,6 +28,6 @@ class RealServiceInstantiator implements InstantiatorInterface */ public function instantiateProxy(ContainerInterface $container, Definition $definition, $id, $realInstantiator) { - return \call_user_func($realInstantiator); + return $realInstantiator(); } } diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php index 3946eafafde00c1ecf92225277254b3e6408813a..f592e6cf196c28131161b240721bf4ad2b0d2433 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php @@ -30,11 +30,12 @@ interface DumperInterface /** * Generates the code to be used to instantiate a proxy in the dumped factory code. * - * @param string $id Service identifier + * @param string $id Service identifier + * @param string $factoryCode The code to execute to create the service * * @return string */ - public function getProxyFactoryCode(Definition $definition, $id/**, $factoryCode = null */); + public function getProxyFactoryCode(Definition $definition, $id, $factoryCode); /** * Generates the code for the lazy proxy. diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php index 67f9fae94dbf8ca659d6f46995082a2e68400759..ebc6a5dc2bb5ff4693a177e7ef325c67a91dc821 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php @@ -18,14 +18,14 @@ use Symfony\Component\DependencyInjection\Definition; * * @author Marco Pivetta <ocramius@gmail.com> * - * @final since version 3.3 + * @final */ class NullDumper implements DumperInterface { /** * {@inheritdoc} */ - public function isProxyCandidate(Definition $definition) + public function isProxyCandidate(Definition $definition): bool { return false; } @@ -33,7 +33,7 @@ class NullDumper implements DumperInterface /** * {@inheritdoc} */ - public function getProxyFactoryCode(Definition $definition, $id, $factoryCode = null) + public function getProxyFactoryCode(Definition $definition, $id, $factoryCode = null): string { return ''; } @@ -41,7 +41,7 @@ class NullDumper implements DumperInterface /** * {@inheritdoc} */ - public function getProxyCode(Definition $definition) + public function getProxyCode(Definition $definition): string { return ''; } diff --git a/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php index bfa65f56f0a442cc0ea8bdd0e32b04f323401633..32b94df04bd95324bb02bd2a33aa93bd785e1b9d 100644 --- a/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php +++ b/civicrm/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php @@ -21,42 +21,43 @@ class ProxyHelper /** * @return string|null The FQCN or builtin name of the type hint, or null when the type hint references an invalid self|parent context */ - public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionParameter $p = null, $noBuiltin = false) + public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionParameter $p = null, bool $noBuiltin = false): ?string { if ($p instanceof \ReflectionParameter) { - if (method_exists($p, 'getType')) { - $type = $p->getType(); - } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $p, $type)) { - $name = $type = $type[1]; - - if ('callable' === $name || 'array' === $name) { - return $noBuiltin ? null : $name; - } - } + $type = $p->getType(); } else { - $type = method_exists($r, 'getReturnType') ? $r->getReturnType() : null; + $type = $r->getReturnType(); } if (!$type) { return null; } $types = []; + $glue = '|'; + if ($type instanceof \ReflectionUnionType) { + $reflectionTypes = $type->getTypes(); + } elseif ($type instanceof \ReflectionIntersectionType) { + $reflectionTypes = $type->getTypes(); + $glue = '&'; + } elseif ($type instanceof \ReflectionNamedType) { + $reflectionTypes = [$type]; + } else { + return null; + } - foreach ($type instanceof \ReflectionUnionType ? $type->getTypes() : [$type] as $type) { - $name = $type instanceof \ReflectionNamedType ? $type->getName() : (string) $type; - - if (!\is_string($type) && $type->isBuiltin()) { + foreach ($reflectionTypes as $type) { + if ($type->isBuiltin()) { if (!$noBuiltin) { - $types[] = $name; + $types[] = $type->getName(); } continue; } - $lcName = strtolower($name); + $lcName = strtolower($type->getName()); $prefix = $noBuiltin ? '' : '\\'; if ('self' !== $lcName && 'parent' !== $lcName) { - $types[] = '' !== $prefix ? $prefix.$name : $name; + $types[] = $prefix.$type->getName(); continue; } if (!$r instanceof \ReflectionMethod) { @@ -69,6 +70,6 @@ class ProxyHelper } } - return $types ? implode('|', $types) : null; + return $types ? implode($glue, $types) : null; } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/ClosureLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/ClosureLoader.php index 183cacc4d61f4eb6a8fed0d430815a10479bc856..939dd7cb7c4a05d5a55010119bf7cb3dbfa82909 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/ClosureLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/ClosureLoader.php @@ -35,7 +35,7 @@ class ClosureLoader extends Loader */ public function load($resource, $type = null) { - \call_user_func($resource, $this->container); + $resource($this->container); } /** diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php index 428683ef4cec83ebebd636f4cdec6142696e709a..a983b502423f57e8ee04fb6639d6657d2d7750d9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php @@ -20,7 +20,7 @@ use Symfony\Component\ExpressionLanguage\Expression; abstract class AbstractConfigurator { - const FACTORY = 'unknown'; + public const FACTORY = 'unknown'; /** @internal */ protected $definition; @@ -28,12 +28,25 @@ abstract class AbstractConfigurator public function __call($method, $args) { if (method_exists($this, 'set'.$method)) { - return \call_user_func_array([$this, 'set'.$method], $args); + return $this->{'set'.$method}(...$args); } throw new \BadMethodCallException(sprintf('Call to undefined method "%s::%s()".', static::class, $method)); } + /** + * @return array + */ + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } + /** * Checks that a value is valid, optionally replacing Definition and Reference configurators by their configure value. * diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php index 0a565787fdf10e01986dd60c3e633f2d3d466874..38e2dd06d963835de0d615592cda4922d37f1379 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php @@ -20,7 +20,7 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator protected $id; private $defaultTags = []; - public function __construct(ServicesConfigurator $parent, Definition $definition, $id = null, array $defaultTags = []) + public function __construct(ServicesConfigurator $parent, Definition $definition, string $id = null, array $defaultTags = []) { $this->parent = $parent; $this->definition = $definition; @@ -32,8 +32,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator { // default tags should be added last foreach ($this->defaultTags as $name => $attributes) { - foreach ($attributes as $attributes) { - $this->definition->addTag($name, $attributes); + foreach ($attributes as $attribute) { + $this->definition->addTag($name, $attribute); } } $this->defaultTags = []; @@ -41,13 +41,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator /** * Registers a service. - * - * @param string $id - * @param string|null $class - * - * @return ServiceConfigurator */ - final public function set($id, $class = null) + final public function set(?string $id, string $class = null): ServiceConfigurator { $this->__destruct(); @@ -56,13 +51,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator /** * Creates an alias. - * - * @param string $id - * @param string $referencedId - * - * @return AliasConfigurator */ - final public function alias($id, $referencedId) + final public function alias(string $id, string $referencedId): AliasConfigurator { $this->__destruct(); @@ -71,13 +61,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator /** * Registers a PSR-4 namespace using a glob pattern. - * - * @param string $namespace - * @param string $resource - * - * @return PrototypeConfigurator */ - final public function load($namespace, $resource) + final public function load(string $namespace, string $resource): PrototypeConfigurator { $this->__destruct(); @@ -87,13 +72,9 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator /** * Gets an already defined service definition. * - * @param string $id - * - * @return ServiceConfigurator - * * @throws ServiceNotFoundException if the service definition does not exist */ - final public function get($id) + final public function get(string $id): ServiceConfigurator { $this->__destruct(); @@ -102,13 +83,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator /** * Registers a service. - * - * @param string $id - * @param string|null $class - * - * @return ServiceConfigurator */ - final public function __invoke($id, $class = null) + final public function __invoke(string $id, string $class = null): ServiceConfigurator { $this->__destruct(); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php index cb00f58c049d45e98dc2fb26c9207db02ca2538e..650a9568dfdd7918bee4375d015bfcc61b91787a 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php @@ -18,10 +18,11 @@ use Symfony\Component\DependencyInjection\Alias; */ class AliasConfigurator extends AbstractServiceConfigurator { - const FACTORY = 'alias'; - + use Traits\DeprecateTrait; use Traits\PublicTrait; + public const FACTORY = 'alias'; + public function __construct(ServicesConfigurator $parent, Alias $alias) { $this->parent = $parent; diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php index f2e5ccf8b03b5f157bd4eee09d4053707e0b9545..73d8f5591cf4ade7d06d6e9e06f5629d9a0e96b6 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php @@ -12,10 +12,12 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Symfony\Component\ExpressionLanguage\Expression; @@ -24,15 +26,16 @@ use Symfony\Component\ExpressionLanguage\Expression; */ class ContainerConfigurator extends AbstractConfigurator { - const FACTORY = 'container'; + public const FACTORY = 'container'; private $container; private $loader; private $instanceof; private $path; private $file; + private $anonymousCount = 0; - public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, $path, $file) + public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file) { $this->container = $container; $this->loader = $loader; @@ -41,71 +44,65 @@ class ContainerConfigurator extends AbstractConfigurator $this->file = $file; } - final public function extension($namespace, array $config) + final public function extension(string $namespace, array $config) { if (!$this->container->hasExtension($namespace)) { - $extensions = array_filter(array_map(function ($ext) { return $ext->getAlias(); }, $this->container->getExtensions())); + $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $namespace, $this->file, $namespace, $extensions ? implode('", "', $extensions) : 'none')); } $this->container->loadFromExtension($namespace, static::processValue($config)); } - final public function import($resource, $type = null, $ignoreErrors = false) + final public function import(string $resource, string $type = null, $ignoreErrors = false) { $this->loader->setCurrentDir(\dirname($this->path)); $this->loader->import($resource, $type, $ignoreErrors, $this->file); } - /** - * @return ParametersConfigurator - */ - final public function parameters() + final public function parameters(): ParametersConfigurator { return new ParametersConfigurator($this->container); } - /** - * @return ServicesConfigurator - */ - final public function services() + final public function services(): ServicesConfigurator { - return new ServicesConfigurator($this->container, $this->loader, $this->instanceof); + return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount); } } /** * Creates a service reference. - * - * @param string $id - * - * @return ReferenceConfigurator */ -function ref($id) +function ref(string $id): ReferenceConfigurator { return new ReferenceConfigurator($id); } /** * Creates an inline service. - * - * @param string|null $class - * - * @return InlineServiceConfigurator */ -function inline($class = null) +function inline(string $class = null): InlineServiceConfigurator { return new InlineServiceConfigurator(new Definition($class)); } /** - * Creates a lazy iterator. + * Creates a service locator. * * @param ReferenceConfigurator[] $values + */ +function service_locator(array $values): ServiceLocatorArgument +{ + return new ServiceLocatorArgument(AbstractConfigurator::processValue($values, true)); +} + +/** + * Creates a lazy iterator. * - * @return IteratorArgument + * @param ReferenceConfigurator[] $values */ -function iterator(array $values) +function iterator(array $values): IteratorArgument { return new IteratorArgument(AbstractConfigurator::processValue($values, true)); } @@ -113,23 +110,35 @@ function iterator(array $values) /** * Creates a lazy iterator by tag name. * - * @param string $tag - * - * @return TaggedIteratorArgument + * @deprecated since Symfony 4.4, to be removed in 5.0, use "tagged_iterator" instead. */ -function tagged($tag) +function tagged(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null): TaggedIteratorArgument { - return new TaggedIteratorArgument($tag); + @trigger_error(__NAMESPACE__.'\tagged() is deprecated since Symfony 4.4 and will be removed in 5.0, use '.__NAMESPACE__.'\tagged_iterator() instead.', \E_USER_DEPRECATED); + + return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod); +} + +/** + * Creates a lazy iterator by tag name. + */ +function tagged_iterator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): TaggedIteratorArgument +{ + return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, false, $defaultPriorityMethod); +} + +/** + * Creates a service locator by tag name. + */ +function tagged_locator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null): ServiceLocatorArgument +{ + return new ServiceLocatorArgument(new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, true)); } /** * Creates an expression. - * - * @param string $expression an expression - * - * @return Expression */ -function expr($expression) +function expr(string $expression): Expression { return new Expression($expression); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php index 662ba95d1ba6d36a9559efb454ba39971678ed9a..49a92e5ce3a76a5d7191f870c63bf4ad49a54144 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php @@ -11,40 +11,45 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; +use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; /** * @author Nicolas Grekas <p@tchwork.com> - * - * @method InstanceofConfigurator instanceof(string $fqcn) */ class DefaultsConfigurator extends AbstractServiceConfigurator { - const FACTORY = 'defaults'; - use Traits\AutoconfigureTrait; use Traits\AutowireTrait; use Traits\BindTrait; use Traits\PublicTrait; + public const FACTORY = 'defaults'; + + private $path; + + public function __construct(ServicesConfigurator $parent, Definition $definition, string $path = null) + { + parent::__construct($parent, $definition, null, []); + + $this->path = $path; + } + /** * Adds a tag for this definition. * - * @param string $name The tag name - * @param array $attributes An array of attributes - * * @return $this * * @throws InvalidArgumentException when an invalid tag name or attribute is provided */ - final public function tag($name, array $attributes = []) + final public function tag(string $name, array $attributes = []): self { - if (!\is_string($name) || '' === $name) { + if ('' === $name) { throw new InvalidArgumentException('The tag name in "_defaults" must be a non-empty string.'); } foreach ($attributes as $attribute => $value) { - if (!is_scalar($value) && null !== $value) { + if (null !== $value && !is_scalar($value)) { throw new InvalidArgumentException(sprintf('Tag "%s", attribute "%s" in "_defaults" must be of a scalar-type.', $name, $attribute)); } } @@ -56,12 +61,8 @@ class DefaultsConfigurator extends AbstractServiceConfigurator /** * Defines an instanceof-conditional to be applied to following service definitions. - * - * @param string $fqcn - * - * @return InstanceofConfigurator */ - final protected function setInstanceof($fqcn) + final public function instanceof(string $fqcn): InstanceofConfigurator { return $this->parent->instanceof($fqcn); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php index 362b374e5597072df302f7479fcc518949a2dc40..32a703d29d6405c433bdba178a157d385cf5d8e7 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php @@ -18,8 +18,6 @@ use Symfony\Component\DependencyInjection\Definition; */ class InlineServiceConfigurator extends AbstractConfigurator { - const FACTORY = 'inline'; - use Traits\ArgumentTrait; use Traits\AutowireTrait; use Traits\BindTrait; @@ -29,6 +27,12 @@ class InlineServiceConfigurator extends AbstractConfigurator use Traits\ParentTrait; use Traits\TagTrait; + public const FACTORY = 'inline'; + + private $id = '[inline]'; + private $allowParent = true; + private $path = null; + public function __construct(Definition $definition) { $this->definition = $definition; diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php index 629874d19cd14b89996bdbff25fab1db14860e30..fbba62304d28e478414619a297dad648bde1e1b3 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php @@ -11,16 +11,15 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; +use Symfony\Component\DependencyInjection\Definition; + /** * @author Nicolas Grekas <p@tchwork.com> - * - * @method InstanceofConfigurator instanceof(string $fqcn) */ class InstanceofConfigurator extends AbstractServiceConfigurator { - const FACTORY = 'instanceof'; - use Traits\AutowireTrait; + use Traits\BindTrait; use Traits\CallTrait; use Traits\ConfiguratorTrait; use Traits\LazyTrait; @@ -29,14 +28,21 @@ class InstanceofConfigurator extends AbstractServiceConfigurator use Traits\ShareTrait; use Traits\TagTrait; + public const FACTORY = 'instanceof'; + + private $path; + + public function __construct(ServicesConfigurator $parent, Definition $definition, string $id, string $path = null) + { + parent::__construct($parent, $definition, $id, []); + + $this->path = $path; + } + /** * Defines an instanceof-conditional to be applied to following service definitions. - * - * @param string $fqcn - * - * @return self */ - final protected function setInstanceof($fqcn) + final public function instanceof(string $fqcn): self { return $this->parent->instanceof($fqcn); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php index 9585b1a4b5c34e6eed6f5df11130321ffe0de743..f0cf177d7baebc565a04d7b4f441fee6a202aa6d 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php @@ -12,13 +12,15 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\ExpressionLanguage\Expression; /** * @author Nicolas Grekas <p@tchwork.com> */ class ParametersConfigurator extends AbstractConfigurator { - const FACTORY = 'parameters'; + public const FACTORY = 'parameters'; private $container; @@ -30,13 +32,14 @@ class ParametersConfigurator extends AbstractConfigurator /** * Creates a parameter. * - * @param string $name - * @param mixed $value - * * @return $this */ - final public function set($name, $value) + final public function set(string $name, $value): self { + if ($value instanceof Expression) { + throw new InvalidArgumentException(sprintf('Using an expression in parameter "%s" is not allowed.', $name)); + } + $this->container->setParameter($name, static::processValue($value, true)); return $this; @@ -45,12 +48,9 @@ class ParametersConfigurator extends AbstractConfigurator /** * Creates a parameter. * - * @param string $name - * @param mixed $value - * * @return $this */ - final public function __invoke($name, $value) + final public function __invoke(string $name, $value): self { return $this->set($name, $value); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php index 3d844798d431a9bd6f5b9498b294e77a31daed9b..e1b3702aaf24f83481997348d5c35ff9e592b2f7 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php @@ -19,8 +19,6 @@ use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; */ class PrototypeConfigurator extends AbstractServiceConfigurator { - const FACTORY = 'load'; - use Traits\AbstractTrait; use Traits\ArgumentTrait; use Traits\AutoconfigureTrait; @@ -37,12 +35,14 @@ class PrototypeConfigurator extends AbstractServiceConfigurator use Traits\ShareTrait; use Traits\TagTrait; + public const FACTORY = 'load'; + private $loader; private $resource; - private $exclude; + private $excludes; private $allowParent; - public function __construct(ServicesConfigurator $parent, PhpFileLoader $loader, Definition $defaults, $namespace, $resource, $allowParent) + public function __construct(ServicesConfigurator $parent, PhpFileLoader $loader, Definition $defaults, string $namespace, string $resource, bool $allowParent) { $definition = new Definition(); if (!$defaults->isPublic() || !$defaults->isPrivate()) { @@ -66,21 +66,21 @@ class PrototypeConfigurator extends AbstractServiceConfigurator parent::__destruct(); if ($this->loader) { - $this->loader->registerClasses($this->definition, $this->id, $this->resource, $this->exclude); + $this->loader->registerClasses($this->definition, $this->id, $this->resource, $this->excludes); } $this->loader = null; } /** - * Excludes files from registration using a glob pattern. + * Excludes files from registration using glob patterns. * - * @param string $exclude + * @param string[]|string $excludes * * @return $this */ - final public function exclude($exclude) + final public function exclude($excludes): self { - $this->exclude = $exclude; + $this->excludes = (array) $excludes; return $this; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php index 1585c0872a69407014b7f34920e42262ab8770d5..fa042538ce2a3fd71410cffeab0126336d2eabea 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php @@ -24,7 +24,7 @@ class ReferenceConfigurator extends AbstractConfigurator /** @internal */ protected $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; - public function __construct($id) + public function __construct(string $id) { $this->id = $id; } @@ -32,7 +32,7 @@ class ReferenceConfigurator extends AbstractConfigurator /** * @return $this */ - final public function ignoreOnInvalid() + final public function ignoreOnInvalid(): self { $this->invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE; @@ -42,7 +42,7 @@ class ReferenceConfigurator extends AbstractConfigurator /** * @return $this */ - final public function nullOnInvalid() + final public function nullOnInvalid(): self { $this->invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE; @@ -52,13 +52,16 @@ class ReferenceConfigurator extends AbstractConfigurator /** * @return $this */ - final public function ignoreOnUninitialized() + final public function ignoreOnUninitialized(): self { $this->invalidBehavior = ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE; return $this; } + /** + * @return string + */ public function __toString() { return $this->id; diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php index 897dedaac58e107645a901d17eb82137d3c5cb11..1dbc0a9a2441ff99293eee2a68cd71e260f1f0bb 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php @@ -20,8 +20,6 @@ use Symfony\Component\DependencyInjection\Definition; */ class ServiceConfigurator extends AbstractServiceConfigurator { - const FACTORY = 'services'; - use Traits\AbstractTrait; use Traits\ArgumentTrait; use Traits\AutoconfigureTrait; @@ -42,15 +40,19 @@ class ServiceConfigurator extends AbstractServiceConfigurator use Traits\SyntheticTrait; use Traits\TagTrait; + public const FACTORY = 'services'; + private $container; private $instanceof; private $allowParent; + private $path; - public function __construct(ContainerBuilder $container, array $instanceof, $allowParent, ServicesConfigurator $parent, Definition $definition, $id, array $defaultTags) + public function __construct(ContainerBuilder $container, array $instanceof, bool $allowParent, ServicesConfigurator $parent, Definition $definition, ?string $id, array $defaultTags, string $path = null) { $this->container = $container; $this->instanceof = $instanceof; $this->allowParent = $allowParent; + $this->path = $path; parent::__construct($parent, $definition, $id, $defaultTags); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php index b6ccbc63b4e81223dce7dd36c2431a8202bc0e46..511858f7a1b11d35001c2f1a84f7497b8741ac9a 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php @@ -20,88 +20,88 @@ use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; /** * @author Nicolas Grekas <p@tchwork.com> - * - * @method InstanceofConfigurator instanceof($fqcn) */ class ServicesConfigurator extends AbstractConfigurator { - const FACTORY = 'services'; + public const FACTORY = 'services'; private $defaults; private $container; private $loader; private $instanceof; + private $path; + private $anonymousHash; + private $anonymousCount; - public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof) + public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path = null, int &$anonymousCount = 0) { $this->defaults = new Definition(); $this->container = $container; $this->loader = $loader; $this->instanceof = &$instanceof; + $this->path = $path; + $this->anonymousHash = ContainerBuilder::hash($path ?: mt_rand()); + $this->anonymousCount = &$anonymousCount; $instanceof = []; } /** * Defines a set of defaults for following service definitions. - * - * @return DefaultsConfigurator */ - final public function defaults() + final public function defaults(): DefaultsConfigurator { - return new DefaultsConfigurator($this, $this->defaults = new Definition()); + return new DefaultsConfigurator($this, $this->defaults = new Definition(), $this->path); } /** * Defines an instanceof-conditional to be applied to following service definitions. - * - * @param string $fqcn - * - * @return InstanceofConfigurator */ - final protected function setInstanceof($fqcn) + final public function instanceof(string $fqcn): InstanceofConfigurator { $this->instanceof[$fqcn] = $definition = new ChildDefinition(''); - return new InstanceofConfigurator($this, $definition, $fqcn); + return new InstanceofConfigurator($this, $definition, $fqcn, $this->path); } /** * Registers a service. * - * @param string $id - * @param string|null $class - * - * @return ServiceConfigurator + * @param string|null $id The service id, or null to create an anonymous service + * @param string|null $class The class of the service, or null when $id is also the class name */ - final public function set($id, $class = null) + final public function set(?string $id, string $class = null): ServiceConfigurator { $defaults = $this->defaults; $allowParent = !$defaults->getChanges() && empty($this->instanceof); $definition = new Definition(); - if (!$defaults->isPublic() || !$defaults->isPrivate()) { + + if (null === $id) { + if (!$class) { + throw new \LogicException('Anonymous services must have a class name.'); + } + + $id = sprintf('.%d_%s', ++$this->anonymousCount, preg_replace('/^.*\\\\/', '', $class).'~'.$this->anonymousHash); + $definition->setPublic(false); + } elseif (!$defaults->isPublic() || !$defaults->isPrivate()) { $definition->setPublic($defaults->isPublic() && !$defaults->isPrivate()); } + $definition->setAutowired($defaults->isAutowired()); $definition->setAutoconfigured($defaults->isAutoconfigured()); // deep clone, to avoid multiple process of the same instance in the passes $definition->setBindings(unserialize(serialize($defaults->getBindings()))); $definition->setChanges([]); - $configurator = new ServiceConfigurator($this->container, $this->instanceof, $allowParent, $this, $definition, $id, $defaults->getTags()); + $configurator = new ServiceConfigurator($this->container, $this->instanceof, $allowParent, $this, $definition, $id, $defaults->getTags(), $this->path); return null !== $class ? $configurator->class($class) : $configurator; } /** * Creates an alias. - * - * @param string $id - * @param string $referencedId - * - * @return AliasConfigurator */ - final public function alias($id, $referencedId) + final public function alias(string $id, string $referencedId): AliasConfigurator { $ref = static::processValue($referencedId, true); $alias = new Alias((string) $ref); @@ -115,13 +115,8 @@ class ServicesConfigurator extends AbstractConfigurator /** * Registers a PSR-4 namespace using a glob pattern. - * - * @param string $namespace - * @param string $resource - * - * @return PrototypeConfigurator */ - final public function load($namespace, $resource) + final public function load(string $namespace, string $resource): PrototypeConfigurator { $allowParent = !$this->defaults->getChanges() && empty($this->instanceof); @@ -131,13 +126,9 @@ class ServicesConfigurator extends AbstractConfigurator /** * Gets an already defined service definition. * - * @param string $id - * - * @return ServiceConfigurator - * * @throws ServiceNotFoundException if the service definition does not exist */ - final public function get($id) + final public function get(string $id): ServiceConfigurator { $allowParent = !$this->defaults->getChanges() && empty($this->instanceof); $definition = $this->container->getDefinition($id); @@ -147,14 +138,14 @@ class ServicesConfigurator extends AbstractConfigurator /** * Registers a service. - * - * @param string $id - * @param string|null $class - * - * @return ServiceConfigurator */ - final public function __invoke($id, $class = null) + final public function __invoke(string $id, string $class = null): ServiceConfigurator { return $this->set($id, $class); } + + public function __destruct() + { + $this->loader->registerAliasesForSinglyImplementedInterfaces(); + } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php index f69a7a5be109da2383f238b0af49ff1c5eccc084..82ba21d7bdd2e3540adb60f1abca98aad28eb27b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php @@ -11,20 +11,15 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; -/** - * @method $this abstract(bool $abstract = true) - */ trait AbstractTrait { /** * Whether this definition is abstract, that means it merely serves as a * template for other definitions. * - * @param bool $abstract - * * @return $this */ - final protected function setAbstract($abstract = true) + final public function abstract(bool $abstract = true): self { $this->definition->setAbstract($abstract); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php index 7ec8c51d478e87973de9aca17c7ebc408f5c1939..5c9a475609881bfda558ac937ae31f37057141aa 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php @@ -16,11 +16,9 @@ trait ArgumentTrait /** * Sets the arguments to pass to the service constructor/factory method. * - * @param array $arguments An array of arguments - * * @return $this */ - final public function args(array $arguments) + final public function args(array $arguments): self { $this->definition->setArguments(static::processValue($arguments, true)); @@ -35,7 +33,7 @@ trait ArgumentTrait * * @return $this */ - final public function arg($key, $value) + final public function arg($key, $value): self { $this->definition->setArgument($key, static::processValue($value, true)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php index 42a692353e9dc5dfd4bdcc6d323983be00129758..836f45872eb0e2968723b37dcd8c12c3573c0e6e 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php @@ -19,13 +19,11 @@ trait AutoconfigureTrait /** * Sets whether or not instanceof conditionals should be prepended with a global set. * - * @param bool $autoconfigured - * * @return $this * * @throws InvalidArgumentException when a parent is already set */ - final public function autoconfigure($autoconfigured = true) + final public function autoconfigure(bool $autoconfigured = true): self { if ($autoconfigured && $this->definition instanceof ChildDefinition) { throw new InvalidArgumentException(sprintf('The service "%s" cannot have a "parent" and also have "autoconfigure". Try disabling autoconfiguration for the service.', $this->id)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php index 3d4b2e854b4c7eb7afb9ec01649bfd3825863bc8..2837a0201d11b2e5c0b739b74cce234da61725df 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php @@ -16,11 +16,9 @@ trait AutowireTrait /** * Enables/disables autowiring. * - * @param bool $autowired - * * @return $this */ - final public function autowire($autowired = true) + final public function autowire(bool $autowired = true): self { $this->definition->setAutowired($autowired); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php index 4511ed659d4e51ff50dd7f206110fae640c18f90..3021e07088ddd77ab767df032a6cc8fdbb576498 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php @@ -11,8 +11,9 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\Argument\BoundArgument; +use Symfony\Component\DependencyInjection\Loader\Configurator\DefaultsConfigurator; +use Symfony\Component\DependencyInjection\Loader\Configurator\InstanceofConfigurator; trait BindTrait { @@ -23,19 +24,17 @@ trait BindTrait * injected in the matching parameters (of the constructor, of methods * called and of controller actions). * - * @param string $nameOrFqcn A parameter name with its "$" prefix, or a FQCN + * @param string $nameOrFqcn A parameter name with its "$" prefix, or an FQCN * @param mixed $valueOrRef The value or reference to bind * * @return $this */ - final public function bind($nameOrFqcn, $valueOrRef) + final public function bind(string $nameOrFqcn, $valueOrRef): self { $valueOrRef = static::processValue($valueOrRef, true); - if (isset($nameOrFqcn[0]) && '$' !== $nameOrFqcn[0] && !$valueOrRef instanceof Reference) { - throw new InvalidArgumentException(sprintf('Invalid binding for service "%s": named arguments must start with a "$", and FQCN must map to references. Neither applies to binding "%s".', $this->id, $nameOrFqcn)); - } $bindings = $this->definition->getBindings(); - $bindings[$nameOrFqcn] = $valueOrRef; + $type = $this instanceof DefaultsConfigurator ? BoundArgument::DEFAULTS_BINDING : ($this instanceof InstanceofConfigurator ? BoundArgument::INSTANCEOF_BINDING : BoundArgument::SERVICE_BINDING); + $bindings[$nameOrFqcn] = new BoundArgument($valueOrRef, true, $type, $this->path ?? null); $this->definition->setBindings($bindings); return $this; diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php index 8e6b17a19d289325a70ac92f02bb39828ae3382a..28f92d274fe118f02ebaebf419a4e2360a10ed38 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php @@ -18,16 +18,17 @@ trait CallTrait /** * Adds a method to call after service initialization. * - * @param string $method The method name to call - * @param array $arguments An array of arguments to pass to the method call + * @param string $method The method name to call + * @param array $arguments An array of arguments to pass to the method call + * @param bool $returnsClone Whether the call returns the service instance or not * * @return $this * * @throws InvalidArgumentException on empty $method param */ - final public function call($method, array $arguments = []) + final public function call(string $method, array $arguments = [], bool $returnsClone = false): self { - $this->definition->addMethodCall($method, static::processValue($arguments, true)); + $this->definition->addMethodCall($method, static::processValue($arguments, true), $returnsClone); return $this; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php index ae5b1c0a3d0c582302553c399708c86ea396bbaa..20da791aaae08551b783a13d7b2f7816360f6f65 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php @@ -11,19 +11,14 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; -/** - * @method $this class(string $class) - */ trait ClassTrait { /** * Sets the service class. * - * @param string $class The service class - * * @return $this */ - final protected function setClass($class) + final public function class(?string $class): self { $this->definition->setClass($class); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php index a38283b0e739b29770dc4e989ff5c9b17aa6bfe4..25d363c9a638be0447642874bbab613940d42d2f 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php @@ -20,7 +20,7 @@ trait ConfiguratorTrait * * @return $this */ - final public function configurator($configurator) + final public function configurator($configurator): self { $this->definition->setConfigurator(static::processValue($configurator, true)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php index 173ad15f0695113fbc0449913a9b4a5b613d6080..222cf758132e71bd282a0075adc21546b7312846 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php @@ -11,6 +11,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; trait DecorateTrait @@ -18,17 +19,18 @@ trait DecorateTrait /** * Sets the service that this service is decorating. * - * @param string|null $id The decorated service id, use null to remove decoration - * @param string|null $renamedId The new decorated service id - * @param int $priority The priority of decoration + * @param string|null $id The decorated service id, use null to remove decoration + * @param string|null $renamedId The new decorated service id + * @param int $priority The priority of decoration + * @param int $invalidBehavior The behavior to adopt when decorated is invalid * * @return $this * * @throws InvalidArgumentException in case the decorated service id and the new decorated service id are equals */ - final public function decorate($id, $renamedId = null, $priority = 0) + final public function decorate(?string $id, string $renamedId = null, int $priority = 0, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE): self { - $this->definition->setDecoratedService($id, $renamedId, $priority); + $this->definition->setDecoratedService($id, $renamedId, $priority, $invalidBehavior); return $this; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php index b14a6557eee96fd5b2ad772063de5181a2e89a54..b2d5b0eb78f5b655038ff9ed1668d2b7f9d652aa 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php @@ -24,7 +24,7 @@ trait DeprecateTrait * * @throws InvalidArgumentException when the message template is invalid */ - final public function deprecate($template = null) + final public function deprecate(string $template = null): self { $this->definition->setDeprecated(true, $template); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php index 0d50fb747f77e643b1bafc986851234c03246442..9968d77ae916d5fc1b43eeb7b6887c7f9f820a1b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php @@ -12,22 +12,23 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Loader\Configurator\ReferenceConfigurator; trait FactoryTrait { /** * Sets a factory. * - * @param string|array $factory A PHP callable reference + * @param string|array|ReferenceConfigurator $factory A PHP callable reference * * @return $this */ - final public function factory($factory) + final public function factory($factory): self { if (\is_string($factory) && 1 === substr_count($factory, ':')) { $factoryParts = explode(':', $factory); - throw new InvalidArgumentException(sprintf('Invalid factory "%s": the `service:method` notation is not available when using PHP-based DI configuration. Use "[ref(\'%s\'), \'%s\']" instead.', $factory, $factoryParts[0], $factoryParts[1])); + throw new InvalidArgumentException(sprintf('Invalid factory "%s": the "service:method" notation is not available when using PHP-based DI configuration. Use "[ref(\'%s\'), \'%s\']" instead.', $factory, $factoryParts[0], $factoryParts[1])); } $this->definition->setFactory(static::processValue($factory, true)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php index 895f5304c3e74baad667ad4c8041b39cd8e36ee7..5f42aef8fd65dd01375e59a1d2810b6a7db57335 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php @@ -16,11 +16,9 @@ trait FileTrait /** * Sets a file to require before creating the service. * - * @param string $file A full pathname to include - * * @return $this */ - final public function file($file) + final public function file(string $file): self { $this->definition->setFile($file); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php index d7ea8b27f5ea38b30b1cf88973d038afa6e2f756..2829defb596e605481ce1f8ffc55866265e596e7 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php @@ -16,13 +16,16 @@ trait LazyTrait /** * Sets the lazy flag of this service. * - * @param bool $lazy + * @param bool|string $lazy A FQCN to derivate the lazy proxy from or `true` to make it extend from the definition's class * * @return $this */ - final public function lazy($lazy = true) + final public function lazy($lazy = true): self { - $this->definition->setLazy($lazy); + $this->definition->setLazy((bool) $lazy); + if (\is_string($lazy)) { + $this->definition->addTag('proxy', ['interface' => $lazy]); + } return $this; } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php index 43f1223e324a646300f2bc3b6fd84b244ccca577..7488a38ca2009be3b2611eb24ccad4f457fbea4b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php @@ -14,21 +14,16 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -/** - * @method $this parent(string $parent) - */ trait ParentTrait { /** * Sets the Definition to inherit from. * - * @param string $parent - * * @return $this * * @throws InvalidArgumentException when parent cannot be set */ - final protected function setParent($parent) + final public function parent(string $parent): self { if (!$this->allowParent) { throw new InvalidArgumentException(sprintf('A parent cannot be defined when either "_instanceof" or "_defaults" are also defined for service prototype "%s".', $this->id)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php index d5d938708e0a85a696c2fdbe9a2b5d828dcb5a76..10fdcfb82ff6915f9c80b79e81ac54cd057f9a39 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php @@ -16,12 +16,9 @@ trait PropertyTrait /** * Sets a specific property. * - * @param string $name - * @param mixed $value - * * @return $this */ - final public function property($name, $value) + final public function property(string $name, $value): self { $this->definition->setProperty($name, static::processValue($value, true)); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php index 8f7f79f1cc21846664fd19f85f614055606feb71..f15756c1b5270c880d022b8aa2f7faa90e0e11bf 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php @@ -11,16 +11,12 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; -/** - * @method $this public() - * @method $this private() - */ trait PublicTrait { /** * @return $this */ - final protected function setPublic() + final public function public(): self { $this->definition->setPublic(true); @@ -30,7 +26,7 @@ trait PublicTrait /** * @return $this */ - final protected function setPrivate() + final public function private(): self { $this->definition->setPublic(false); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php index 1c2f97b59761cacce1c9616cc4c41c95b21a5ccd..16fde0f2943d4545c191de917dcf8f8074f520e7 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php @@ -16,11 +16,9 @@ trait ShareTrait /** * Sets if the service must be shared or not. * - * @param bool $shared Whether the service must be shared or not - * * @return $this */ - final public function share($shared = true) + final public function share(bool $shared = true): self { $this->definition->setShared($shared); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php index 81eceff43d86d004a8e3e44de1d5ab71ea5cd1fb..cb08b1133abcdc00b266d327e6c4e87c50401fc8 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php @@ -17,11 +17,9 @@ trait SyntheticTrait * Sets whether this definition is synthetic, that is not constructed by the * container, but dynamically injected. * - * @param bool $synthetic - * * @return $this */ - final public function synthetic($synthetic = true) + final public function synthetic(bool $synthetic = true): self { $this->definition->setSynthetic($synthetic); diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php index d17339f88b692840884ea6c145707f19e0e8b637..f4d5f002cf87d9845a4f0f55e14b5714de75afcc 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php @@ -18,14 +18,11 @@ trait TagTrait /** * Adds a tag for this definition. * - * @param string $name The tag name - * @param array $attributes An array of attributes - * * @return $this */ - final public function tag($name, array $attributes = []) + final public function tag(string $name, array $attributes = []): self { - if (!\is_string($name) || '' === $name) { + if ('' === $name) { throw new InvalidArgumentException(sprintf('The tag name for service "%s" must be a non-empty string.', $this->id)); } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php index a57cac3b5ee9977f946d0cfc97f817cd3b5ae0c5..15d50a38102e6ab6d11e074bd95bd23e75b3a570 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php @@ -49,6 +49,6 @@ class DirectoryLoader extends FileLoader return true; } - return null === $type && \is_string($resource) && '/' === substr($resource, -1); + return null === $type && \is_string($resource) && str_ends_with($resource, '/'); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/FileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/FileLoader.php index 749dd4d06b9f42a18d10fd1c32a7d26cbc12e2c9..d5a6e2e55667f2bd4f794d3aba83877023d4106a 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/FileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/FileLoader.php @@ -11,8 +11,11 @@ namespace Symfony\Component\DependencyInjection\Loader; +use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException; +use Symfony\Component\Config\Exception\LoaderLoadException; use Symfony\Component\Config\FileLocatorInterface; use Symfony\Component\Config\Loader\FileLoader as BaseFileLoader; +use Symfony\Component\Config\Loader\Loader; use Symfony\Component\Config\Resource\GlobResource; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -26,9 +29,14 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; */ abstract class FileLoader extends BaseFileLoader { + public const ANONYMOUS_ID_REGEXP = '/^\.\d+_[^~]*+~[._a-zA-Z\d]{7}$/'; + protected $container; protected $isLoadingInstanceof = false; protected $instanceof = []; + protected $interfaces = []; + protected $singlyImplemented = []; + protected $autoRegisterAliasesForSinglyImplementedInterfaces = true; public function __construct(ContainerBuilder $container, FileLocatorInterface $locator) { @@ -37,32 +45,66 @@ abstract class FileLoader extends BaseFileLoader parent::__construct($locator); } + /** + * {@inheritdoc} + * + * @param bool|string $ignoreErrors Whether errors should be ignored; pass "not_found" to ignore only when the loaded resource is not found + * @param string|string[]|null $exclude Glob patterns to exclude from the import + */ + public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null/*, $exclude = null*/) + { + $args = \func_get_args(); + + if ($ignoreNotFound = 'not_found' === $ignoreErrors) { + $args[2] = false; + } elseif (!\is_bool($ignoreErrors)) { + @trigger_error(sprintf('Invalid argument $ignoreErrors provided to %s::import(): boolean or "not_found" expected, %s given.', static::class, \gettype($ignoreErrors)), \E_USER_DEPRECATED); + $args[2] = (bool) $ignoreErrors; + } + + try { + parent::import(...$args); + } catch (LoaderLoadException $e) { + if (!$ignoreNotFound || !($prev = $e->getPrevious()) instanceof FileLocatorFileNotFoundException) { + throw $e; + } + + foreach ($prev->getTrace() as $frame) { + if ('import' === ($frame['function'] ?? null) && is_a($frame['class'] ?? '', Loader::class, true)) { + break; + } + } + + if (__FILE__ !== $frame['file']) { + throw $e; + } + } + } + /** * Registers a set of classes as services using PSR-4 for discovery. * - * @param Definition $prototype A definition to use as template - * @param string $namespace The namespace prefix of classes in the scanned directory - * @param string $resource The directory to look for classes, glob-patterns allowed - * @param string $exclude A globed path of files to exclude + * @param Definition $prototype A definition to use as template + * @param string $namespace The namespace prefix of classes in the scanned directory + * @param string $resource The directory to look for classes, glob-patterns allowed + * @param string|string[]|null $exclude A globbed path of files to exclude or an array of globbed paths of files to exclude */ public function registerClasses(Definition $prototype, $namespace, $resource, $exclude = null) { - if ('\\' !== substr($namespace, -1)) { + if (!str_ends_with($namespace, '\\')) { throw new InvalidArgumentException(sprintf('Namespace prefix must end with a "\\": "%s".', $namespace)); } if (!preg_match('/^(?:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+\\\\)++$/', $namespace)) { throw new InvalidArgumentException(sprintf('Namespace is not a valid PSR-4 prefix: "%s".', $namespace)); } - $classes = $this->findClasses($namespace, $resource, $exclude); + $classes = $this->findClasses($namespace, $resource, (array) $exclude); // prepare for deep cloning $serializedPrototype = serialize($prototype); - $interfaces = []; - $singlyImplemented = []; foreach ($classes as $class => $errorMessage) { if (interface_exists($class, false)) { - $interfaces[] = $class; + $this->interfaces[] = $class; } else { $this->setDefinition($class, $definition = unserialize($serializedPrototype)); if (null !== $errorMessage) { @@ -71,16 +113,25 @@ abstract class FileLoader extends BaseFileLoader continue; } foreach (class_implements($class, false) as $interface) { - $singlyImplemented[$interface] = isset($singlyImplemented[$interface]) ? false : $class; + $this->singlyImplemented[$interface] = ($this->singlyImplemented[$interface] ?? $class) !== $class ? false : $class; } } } - foreach ($interfaces as $interface) { - if (!empty($singlyImplemented[$interface])) { - $this->container->setAlias($interface, $singlyImplemented[$interface]) - ->setPublic(false); + + if ($this->autoRegisterAliasesForSinglyImplementedInterfaces) { + $this->registerAliasesForSinglyImplementedInterfaces(); + } + } + + public function registerAliasesForSinglyImplementedInterfaces() + { + foreach ($this->interfaces as $interface) { + if (!empty($this->singlyImplemented[$interface]) && !$this->container->has($interface)) { + $this->container->setAlias($interface, $this->singlyImplemented[$interface])->setPublic(false); } } + + $this->interfaces = $this->singlyImplemented = []; } /** @@ -102,33 +153,33 @@ abstract class FileLoader extends BaseFileLoader } } - private function findClasses($namespace, $pattern, $excludePattern) + private function findClasses(string $namespace, string $pattern, array $excludePatterns): array { $parameterBag = $this->container->getParameterBag(); $excludePaths = []; $excludePrefix = null; - if ($excludePattern) { - $excludePattern = $parameterBag->unescapeValue($parameterBag->resolveValue($excludePattern)); - foreach ($this->glob($excludePattern, true, $resource, true) as $path => $info) { + $excludePatterns = $parameterBag->unescapeValue($parameterBag->resolveValue($excludePatterns)); + foreach ($excludePatterns as $excludePattern) { + foreach ($this->glob($excludePattern, true, $resource, true, true) as $path => $info) { if (null === $excludePrefix) { $excludePrefix = $resource->getPrefix(); } - // normalize Windows slashes - $excludePaths[str_replace('\\', '/', $path)] = true; + // normalize Windows slashes and remove trailing slashes + $excludePaths[rtrim(str_replace('\\', '/', $path), '/')] = true; } } $pattern = $parameterBag->unescapeValue($parameterBag->resolveValue($pattern)); $classes = []; - $extRegexp = \defined('HHVM_VERSION') ? '/\\.(?:php|hh)$/' : '/\\.php$/'; + $extRegexp = '/\\.php$/'; $prefixLen = null; - foreach ($this->glob($pattern, true, $resource) as $path => $info) { + foreach ($this->glob($pattern, true, $resource, false, false, $excludePaths) as $path => $info) { if (null === $prefixLen) { $prefixLen = \strlen($resource->getPrefix()); - if ($excludePrefix && 0 !== strpos($excludePrefix, $resource->getPrefix())) { + if ($excludePrefix && !str_starts_with($excludePrefix, $resource->getPrefix())) { throw new InvalidArgumentException(sprintf('Invalid "exclude" pattern when importing classes for "%s": make sure your "exclude" pattern (%s) is a subset of the "resource" pattern (%s).', $namespace, $excludePattern, $pattern)); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php index 6c07c67345406c8fddb0eafc62e0f320378abe74..db2ed51b66fee488770bd0ee6a89d2d3ced104f9 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/IniFileLoader.php @@ -66,8 +66,10 @@ class IniFileLoader extends FileLoader * Note that the following features are not supported: * * strings with escaped quotes are not supported "foo\"bar"; * * string concatenation ("foo" "bar"). + * + * @return mixed */ - private function phpize($value) + private function phpize(string $value) { // trim on the right as comments removal keep whitespaces if ($value !== $v = rtrim($value)) { diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php index ddb671ff261145f55039873453b82c293c1052ef..2ace5d5754cd31b0efabcfdad88134b5ba55ac72 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php @@ -23,6 +23,8 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura */ class PhpFileLoader extends FileLoader { + protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; + /** * {@inheritdoc} */ @@ -41,10 +43,15 @@ class PhpFileLoader extends FileLoader return include $path; }, $this, ProtectedPhpFileLoader::class); - $callback = $load($path); + try { + $callback = $load($path); - if ($callback instanceof \Closure) { - $callback(new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource), $this->container, $this); + if (\is_object($callback) && \is_callable($callback)) { + $callback(new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource), $this->container, $this); + } + } finally { + $this->instanceof = []; + $this->registerAliasesForSinglyImplementedInterfaces(); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php index 0ff54ee66e8743b11e71b5f438e80c69a0875d9b..fdf4fa1f4c8875f36042bf79cee85d30956d9234 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php @@ -15,6 +15,8 @@ use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -22,6 +24,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\Expression; @@ -32,7 +35,9 @@ use Symfony\Component\ExpressionLanguage\Expression; */ class XmlFileLoader extends FileLoader { - const NS = 'http://symfony.com/schema/dic/services'; + public const NS = 'http://symfony.com/schema/dic/services'; + + protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; /** * {@inheritdoc} @@ -48,7 +53,7 @@ class XmlFileLoader extends FileLoader $defaults = $this->getServiceDefaults($xml, $path); // anonymous services - $this->processAnonymousServices($xml, $path, $defaults); + $this->processAnonymousServices($xml, $path); // imports $this->parseImports($xml, $path); @@ -64,6 +69,7 @@ class XmlFileLoader extends FileLoader $this->parseDefinitions($xml, $path, $defaults); } finally { $this->instanceof = []; + $this->registerAliasesForSinglyImplementedInterfaces(); } } @@ -83,24 +89,14 @@ class XmlFileLoader extends FileLoader return 'xml' === $type; } - /** - * Parses parameters. - * - * @param string $file - */ - private function parseParameters(\DOMDocument $xml, $file) + private function parseParameters(\DOMDocument $xml, string $file) { if ($parameters = $this->getChildren($xml->documentElement, 'parameters')) { $this->container->getParameterBag()->add($this->getArgumentsAsPhp($parameters[0], 'parameter', $file)); } } - /** - * Parses imports. - * - * @param string $file - */ - private function parseImports(\DOMDocument $xml, $file) + private function parseImports(\DOMDocument $xml, string $file) { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); @@ -112,16 +108,11 @@ class XmlFileLoader extends FileLoader $defaultDirectory = \dirname($file); foreach ($imports as $import) { $this->setCurrentDir($defaultDirectory); - $this->import($import->getAttribute('resource'), XmlUtils::phpize($import->getAttribute('type')) ?: null, (bool) XmlUtils::phpize($import->getAttribute('ignore-errors')), $file); + $this->import($import->getAttribute('resource'), XmlUtils::phpize($import->getAttribute('type')) ?: null, XmlUtils::phpize($import->getAttribute('ignore-errors')) ?: false, $file); } } - /** - * Parses multiple definitions. - * - * @param string $file - */ - private function parseDefinitions(\DOMDocument $xml, $file, $defaults) + private function parseDefinitions(\DOMDocument $xml, string $file, array $defaults) { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); @@ -142,7 +133,14 @@ class XmlFileLoader extends FileLoader foreach ($services as $service) { if (null !== $definition = $this->parseDefinition($service, $file, $defaults)) { if ('prototype' === $service->tagName) { - $this->registerClasses($definition, (string) $service->getAttribute('namespace'), (string) $service->getAttribute('resource'), (string) $service->getAttribute('exclude')); + $excludes = array_column($this->getChildren($service, 'exclude'), 'nodeValue'); + if ($service->hasAttribute('exclude')) { + if (\count($excludes) > 0) { + throw new InvalidArgumentException('You cannot use both the attribute "exclude" and <exclude> tags at the same time.'); + } + $excludes = [$service->getAttribute('exclude')]; + } + $this->registerClasses($definition, (string) $service->getAttribute('namespace'), (string) $service->getAttribute('resource'), $excludes); } else { $this->setDefinition((string) $service->getAttribute('id'), $definition); } @@ -152,10 +150,8 @@ class XmlFileLoader extends FileLoader /** * Get service defaults. - * - * @return array */ - private function getServiceDefaults(\DOMDocument $xml, $file) + private function getServiceDefaults(\DOMDocument $xml, string $file): array { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); @@ -163,9 +159,15 @@ class XmlFileLoader extends FileLoader if (null === $defaultsNode = $xpath->query('//container:services/container:defaults')->item(0)) { return []; } + + $bindings = []; + foreach ($this->getArgumentsAsPhp($defaultsNode, 'bind', $file) as $argument => $value) { + $bindings[$argument] = new BoundArgument($value, true, BoundArgument::DEFAULTS_BINDING, $file); + } + $defaults = [ 'tags' => $this->getChildren($defaultsNode, 'tag'), - 'bind' => array_map(function ($v) { return new BoundArgument($v); }, $this->getArgumentsAsPhp($defaultsNode, 'bind', $file)), + 'bind' => $bindings, ]; foreach ($defaults['tags'] as $tag) { @@ -189,23 +191,23 @@ class XmlFileLoader extends FileLoader /** * Parses an individual Definition. - * - * @param string $file - * - * @return Definition|null */ - private function parseDefinition(\DOMElement $service, $file, array $defaults) + private function parseDefinition(\DOMElement $service, string $file, array $defaults): ?Definition { if ($alias = $service->getAttribute('alias')) { $this->validateAlias($service, $file); - $this->container->setAlias((string) $service->getAttribute('id'), $alias = new Alias($alias)); + $this->container->setAlias($service->getAttribute('id'), $alias = new Alias($alias)); if ($publicAttr = $service->getAttribute('public')) { $alias->setPublic(XmlUtils::phpize($publicAttr)); } elseif (isset($defaults['public'])) { $alias->setPublic($defaults['public']); } + if ($deprecated = $this->getChildren($service, 'deprecated')) { + $alias->setDeprecated(true, $deprecated[0]->nodeValue ?: null); + } + return null; } @@ -251,10 +253,17 @@ class XmlFileLoader extends FileLoader $definition->setChanges([]); } - foreach (['class', 'public', 'shared', 'synthetic', 'lazy', 'abstract'] as $key) { + foreach (['class', 'public', 'shared', 'synthetic', 'abstract'] as $key) { if ($value = $service->getAttribute($key)) { $method = 'set'.$key; - $definition->$method(XmlUtils::phpize($value)); + $definition->$method($value = XmlUtils::phpize($value)); + } + } + + if ($value = $service->getAttribute('lazy')) { + $definition->setLazy((bool) $value = XmlUtils::phpize($value)); + if (\is_string($value)) { + $definition->addTag('proxy', ['interface' => $value]); } } @@ -292,7 +301,7 @@ class XmlFileLoader extends FileLoader $class = $factory->hasAttribute('class') ? $factory->getAttribute('class') : null; } - $definition->setFactory([$class, $factory->getAttribute('method')]); + $definition->setFactory([$class, $factory->getAttribute('method') ?: '__invoke']); } } @@ -307,12 +316,12 @@ class XmlFileLoader extends FileLoader $class = $configurator->getAttribute('class'); } - $definition->setConfigurator([$class, $configurator->getAttribute('method')]); + $definition->setConfigurator([$class, $configurator->getAttribute('method') ?: '__invoke']); } } foreach ($this->getChildren($service, 'call') as $call) { - $definition->addMethodCall($call->getAttribute('method'), $this->getArgumentsAsPhp($call, 'argument', $file)); + $definition->addMethodCall($call->getAttribute('method'), $this->getArgumentsAsPhp($call, 'argument', $file), XmlUtils::phpize($call->getAttribute('returns-clone'))); } $tags = $this->getChildren($service, 'tag'); @@ -328,7 +337,7 @@ class XmlFileLoader extends FileLoader continue; } - if (false !== strpos($name, '-') && false === strpos($name, '_') && !\array_key_exists($normalizedName = str_replace('-', '_', $name), $parameters)) { + if (str_contains($name, '-') && !str_contains($name, '_') && !\array_key_exists($normalizedName = str_replace('-', '_', $name), $parameters)) { $parameters[$normalizedName] = XmlUtils::phpize($node->nodeValue); } // keep not normalized key @@ -336,17 +345,18 @@ class XmlFileLoader extends FileLoader } if ('' === $tag->getAttribute('name')) { - throw new InvalidArgumentException(sprintf('The tag name for service "%s" in "%s" must be a non-empty string.', (string) $service->getAttribute('id'), $file)); + throw new InvalidArgumentException(sprintf('The tag name for service "%s" in "%s" must be a non-empty string.', $service->getAttribute('id'), $file)); } $definition->addTag($tag->getAttribute('name'), $parameters); } - foreach ($this->getChildren($service, 'autowiring-type') as $type) { - $definition->addAutowiringType($type->textContent); + $bindings = $this->getArgumentsAsPhp($service, 'bind', $file); + $bindingType = $this->isLoadingInstanceof ? BoundArgument::INSTANCEOF_BINDING : BoundArgument::SERVICE_BINDING; + foreach ($bindings as $argument => $value) { + $bindings[$argument] = new BoundArgument($value, true, $bindingType, $file); } - $bindings = $this->getArgumentsAsPhp($service, 'bind', $file); if (isset($defaults['bind'])) { // deep clone, to avoid multiple process of the same instance in the passes $bindings = array_merge(unserialize(serialize($defaults['bind'])), $bindings); @@ -355,25 +365,33 @@ class XmlFileLoader extends FileLoader $definition->setBindings($bindings); } - if ($value = $service->getAttribute('decorates')) { + if ($decorates = $service->getAttribute('decorates')) { + $decorationOnInvalid = $service->getAttribute('decoration-on-invalid') ?: 'exception'; + if ('exception' === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + } elseif ('ignore' === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE; + } elseif ('null' === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE; + } else { + throw new InvalidArgumentException(sprintf('Invalid value "%s" for attribute "decoration-on-invalid" on service "%s". Did you mean "exception", "ignore" or "null" in "%s"?', $decorationOnInvalid, $service->getAttribute('id'), $file)); + } + $renameId = $service->hasAttribute('decoration-inner-name') ? $service->getAttribute('decoration-inner-name') : null; $priority = $service->hasAttribute('decoration-priority') ? $service->getAttribute('decoration-priority') : 0; - $definition->setDecoratedService($value, $renameId, $priority); + + $definition->setDecoratedService($decorates, $renameId, $priority, $invalidBehavior); } return $definition; } /** - * Parses a XML file to a \DOMDocument. - * - * @param string $file Path to a file - * - * @return \DOMDocument + * Parses an XML file to a \DOMDocument. * * @throws InvalidArgumentException When loading of XML file returns error */ - private function parseFileToDOM($file) + private function parseFileToDOM(string $file): \DOMDocument { try { $dom = XmlUtils::loadFile($file, [$this, 'validateSchema']); @@ -388,11 +406,8 @@ class XmlFileLoader extends FileLoader /** * Processes anonymous services. - * - * @param string $file - * @param array $defaults */ - private function processAnonymousServices(\DOMDocument $xml, $file, $defaults) + private function processAnonymousServices(\DOMDocument $xml, string $file) { $definitions = []; $count = 0; @@ -406,11 +421,11 @@ class XmlFileLoader extends FileLoader foreach ($nodes as $node) { if ($services = $this->getChildren($node, 'service')) { // give it a unique name - $id = sprintf('%d_%s', ++$count, preg_replace('/^.*\\\\/', '', $services[0]->getAttribute('class')).$suffix); + $id = sprintf('.%d_%s', ++$count, preg_replace('/^.*\\\\/', '', $services[0]->getAttribute('class')).$suffix); $node->setAttribute('id', $id); $node->setAttribute('service', $id); - $definitions[$id] = [$services[0], $file, false]; + $definitions[$id] = [$services[0], $file]; $services[0]->setAttribute('id', $id); // anonymous services are always private @@ -423,39 +438,20 @@ class XmlFileLoader extends FileLoader // anonymous services "in the wild" if (false !== $nodes = $xpath->query('//container:services/container:service[not(@id)]')) { foreach ($nodes as $node) { - @trigger_error(sprintf('Top-level anonymous services are deprecated since Symfony 3.4, the "id" attribute will be required in version 4.0 in %s at line %d.', $file, $node->getLineNo()), \E_USER_DEPRECATED); - - // give it a unique name - $id = sprintf('%d_%s', ++$count, preg_replace('/^.*\\\\/', '', $node->getAttribute('class')).$suffix); - $node->setAttribute('id', $id); - $definitions[$id] = [$node, $file, true]; + throw new InvalidArgumentException(sprintf('Top-level services must have "id" attribute, none found in "%s" at line %d.', $file, $node->getLineNo())); } } // resolve definitions uksort($definitions, 'strnatcmp'); - foreach (array_reverse($definitions) as $id => list($domElement, $file, $wild)) { - if (null !== $definition = $this->parseDefinition($domElement, $file, $wild ? $defaults : [])) { + foreach (array_reverse($definitions) as $id => [$domElement, $file]) { + if (null !== $definition = $this->parseDefinition($domElement, $file, [])) { $this->setDefinition($id, $definition); } - - if (true === $wild) { - $tmpDomElement = new \DOMElement('_services', null, self::NS); - $domElement->parentNode->replaceChild($tmpDomElement, $domElement); - $tmpDomElement->setAttribute('id', $id); - } } } - /** - * Returns arguments as valid php types. - * - * @param string $name - * @param string $file - * - * @return mixed - */ - private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $isChildDefinition = false) + private function getArgumentsAsPhp(\DOMElement $node, string $name, string $file, bool $isChildDefinition = false): array { $arguments = []; foreach ($this->getChildren($node, $name) as $arg) { @@ -491,15 +487,12 @@ class XmlFileLoader extends FileLoader if ('' === $arg->getAttribute('id')) { throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="service" has no or empty "id" attribute in "%s".', $name, $file)); } - if ($arg->hasAttribute('strict')) { - @trigger_error(sprintf('The "strict" attribute used when referencing the "%s" service is deprecated since Symfony 3.3 and will be removed in 4.0.', $arg->getAttribute('id')), \E_USER_DEPRECATED); - } $arguments[$key] = new Reference($arg->getAttribute('id'), $invalidBehavior); break; case 'expression': if (!class_exists(Expression::class)) { - throw new \LogicException(sprintf('The type="expression" attribute cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".')); + throw new \LogicException('The type="expression" attribute cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".'); } $arguments[$key] = new Expression($arg->nodeValue); @@ -515,11 +508,42 @@ class XmlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="iterator" only accepts collections of type="service" references in "%s".', $name, $file)); } break; + case 'service_closure': + if ('' === $arg->getAttribute('id')) { + throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="service_closure" has no or empty "id" attribute in "%s".', $name, $file)); + } + + $arguments[$key] = new ServiceClosureArgument(new Reference($arg->getAttribute('id'), $invalidBehavior)); + break; + case 'service_locator': + $arg = $this->getArgumentsAsPhp($arg, $name, $file); + try { + $arguments[$key] = new ServiceLocatorArgument($arg); + } catch (InvalidArgumentException $e) { + throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="service_locator" only accepts maps of type="service" references in "%s".', $name, $file)); + } + break; case 'tagged': + case 'tagged_iterator': + case 'tagged_locator': + $type = $arg->getAttribute('type'); + $forLocator = 'tagged_locator' === $type; + if (!$arg->getAttribute('tag')) { - throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="tagged" has no or empty "tag" attribute in "%s".', $name, $file)); + throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="%s" has no or empty "tag" attribute in "%s".', $name, $type, $file)); + } + + $arguments[$key] = new TaggedIteratorArgument($arg->getAttribute('tag'), $arg->getAttribute('index-by') ?: null, $arg->getAttribute('default-index-method') ?: null, $forLocator, $arg->getAttribute('default-priority-method') ?: null); + + if ($forLocator) { + $arguments[$key] = new ServiceLocatorArgument($arguments[$key]); } - $arguments[$key] = new TaggedIteratorArgument($arg->getAttribute('tag')); + break; + case 'binary': + if (false === $value = base64_decode($arg->nodeValue)) { + throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="binary" is not a valid base64 encoded string.', $name)); + } + $arguments[$key] = $value; break; case 'string': $arguments[$key] = $arg->nodeValue; @@ -538,11 +562,9 @@ class XmlFileLoader extends FileLoader /** * Get child elements by name. * - * @param mixed $name - * * @return \DOMElement[] */ - private function getChildren(\DOMNode $node, $name) + private function getChildren(\DOMNode $node, string $name): array { $children = []; foreach ($node->childNodes as $child) { @@ -600,6 +622,8 @@ class XmlFileLoader extends FileLoader array_shift($parts); $locationstart = 'phar:///'; } + } elseif ('\\' === \DIRECTORY_SEPARATOR && str_starts_with($location, '\\\\')) { + $locationstart = ''; } $drive = '\\' === \DIRECTORY_SEPARATOR ? array_shift($parts).'/' : ''; $location = $locationstart.$drive.implode('/', array_map('rawurlencode', $parts)); @@ -620,14 +644,13 @@ $imports EOF ; - if (\LIBXML_VERSION < 20900) { + if ($this->shouldEnableEntityLoader()) { $disableEntities = libxml_disable_entity_loader(false); $valid = @$dom->schemaValidateSource($source); libxml_disable_entity_loader($disableEntities); } else { $valid = @$dom->schemaValidateSource($source); } - foreach ($tmpfiles as $tmpfile) { @unlink($tmpfile); } @@ -635,22 +658,50 @@ EOF return $valid; } - /** - * Validates an alias. - * - * @param string $file - */ - private function validateAlias(\DOMElement $alias, $file) + private function shouldEnableEntityLoader(): bool + { + // Version prior to 8.0 can be enabled without deprecation + if (\PHP_VERSION_ID < 80000) { + return true; + } + + static $dom, $schema; + if (null === $dom) { + $dom = new \DOMDocument(); + $dom->loadXML('<?xml version="1.0"?><test/>'); + + $tmpfile = tempnam(sys_get_temp_dir(), 'symfony'); + register_shutdown_function(static function () use ($tmpfile) { + @unlink($tmpfile); + }); + $schema = '<?xml version="1.0" encoding="utf-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <xsd:include schemaLocation="file:///'.str_replace('\\', '/', $tmpfile).'" /> +</xsd:schema>'; + file_put_contents($tmpfile, '<?xml version="1.0" encoding="utf-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <xsd:element name="test" type="testType" /> + <xsd:complexType name="testType"/> +</xsd:schema>'); + } + + return !@$dom->schemaValidateSource($schema); + } + + private function validateAlias(\DOMElement $alias, string $file) { foreach ($alias->attributes as $name => $node) { if (!\in_array($name, ['alias', 'id', 'public'])) { - @trigger_error(sprintf('Using the attribute "%s" is deprecated for the service "%s" which is defined as an alias in "%s". Allowed attributes for service aliases are "alias", "id" and "public". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $name, $alias->getAttribute('id'), $file), \E_USER_DEPRECATED); + throw new InvalidArgumentException(sprintf('Invalid attribute "%s" defined for alias "%s" in "%s".', $name, $alias->getAttribute('id'), $file)); } } foreach ($alias->childNodes as $child) { - if ($child instanceof \DOMElement && self::NS === $child->namespaceURI) { - @trigger_error(sprintf('Using the element "%s" is deprecated for the service "%s" which is defined as an alias in "%s". The XmlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported elements.', $child->localName, $alias->getAttribute('id'), $file), \E_USER_DEPRECATED); + if (!$child instanceof \DOMElement || self::NS !== $child->namespaceURI) { + continue; + } + if (!\in_array($child->localName, ['deprecated'], true)) { + throw new InvalidArgumentException(sprintf('Invalid child element "%s" defined for alias "%s" in "%s".', $child->localName, $alias->getAttribute('id'), $file)); } } } @@ -658,11 +709,9 @@ EOF /** * Validates an extension. * - * @param string $file - * * @throws InvalidArgumentException When no extension is found corresponding to a tag */ - private function validateExtensions(\DOMDocument $dom, $file) + private function validateExtensions(\DOMDocument $dom, string $file) { foreach ($dom->documentElement->childNodes as $node) { if (!$node instanceof \DOMElement || 'http://symfony.com/schema/dic/services' === $node->namespaceURI) { @@ -671,8 +720,8 @@ EOF // can it be handled by an extension? if (!$this->container->hasExtension($node->namespaceURI)) { - $extensionNamespaces = array_filter(array_map(function ($ext) { return $ext->getNamespace(); }, $this->container->getExtensions())); - throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $node->tagName, $file, $node->namespaceURI, $extensionNamespaces ? sprintf('"%s"', implode('", "', $extensionNamespaces)) : 'none')); + $extensionNamespaces = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getNamespace(); }, $this->container->getExtensions())); + throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $node->tagName, $file, $node->namespaceURI, $extensionNamespaces ? implode('", "', $extensionNamespaces) : 'none')); } } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php b/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php index e598bc4ce4b2ee5adbb1f26c337ce63ae4c33ddd..f15fc3492bd344707797442c658c3f7359caf5d6 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php +++ b/civicrm/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php @@ -15,6 +15,8 @@ use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -22,6 +24,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Yaml\Exception\ParseException; @@ -36,7 +39,7 @@ use Symfony\Component\Yaml\Yaml; */ class YamlFileLoader extends FileLoader { - private static $serviceKeywords = [ + private const SERVICE_KEYWORDS = [ 'alias' => 'alias', 'parent' => 'parent', 'class' => 'class', @@ -56,13 +59,13 @@ class YamlFileLoader extends FileLoader 'decorates' => 'decorates', 'decoration_inner_name' => 'decoration_inner_name', 'decoration_priority' => 'decoration_priority', + 'decoration_on_invalid' => 'decoration_on_invalid', 'autowire' => 'autowire', - 'autowiring_types' => 'autowiring_types', 'autoconfigure' => 'autoconfigure', 'bind' => 'bind', ]; - private static $prototypeKeywords = [ + private const PROTOTYPE_KEYWORDS = [ 'resource' => 'resource', 'namespace' => 'namespace', 'exclude' => 'exclude', @@ -83,7 +86,7 @@ class YamlFileLoader extends FileLoader 'bind' => 'bind', ]; - private static $instanceofKeywords = [ + private const INSTANCEOF_KEYWORDS = [ 'shared' => 'shared', 'lazy' => 'lazy', 'public' => 'public', @@ -92,9 +95,10 @@ class YamlFileLoader extends FileLoader 'calls' => 'calls', 'tags' => 'tags', 'autowire' => 'autowire', + 'bind' => 'bind', ]; - private static $defaultsKeywords = [ + private const DEFAULTS_KEYWORDS = [ 'public' => 'public', 'tags' => 'tags', 'autowire' => 'autowire', @@ -107,6 +111,8 @@ class YamlFileLoader extends FileLoader private $anonymousServicesCount; private $anonymousServicesSuffix; + protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; + /** * {@inheritdoc} */ @@ -148,6 +154,7 @@ class YamlFileLoader extends FileLoader $this->parseDefinitions($content, $path); } finally { $this->instanceof = []; + $this->registerAliasesForSinglyImplementedInterfaces(); } } @@ -167,12 +174,7 @@ class YamlFileLoader extends FileLoader return \in_array($type, ['yaml', 'yml'], true); } - /** - * Parses all imports. - * - * @param string $file - */ - private function parseImports(array $content, $file) + private function parseImports(array $content, string $file) { if (!isset($content['imports'])) { return; @@ -192,16 +194,11 @@ class YamlFileLoader extends FileLoader } $this->setCurrentDir($defaultDirectory); - $this->import($import['resource'], isset($import['type']) ? $import['type'] : null, isset($import['ignore_errors']) ? (bool) $import['ignore_errors'] : false, $file); + $this->import($import['resource'], $import['type'] ?? null, $import['ignore_errors'] ?? false, $file); } } - /** - * Parses definitions. - * - * @param string $file - */ - private function parseDefinitions(array $content, $file) + private function parseDefinitions(array $content, string $file) { if (!isset($content['services'])) { return; @@ -224,7 +221,7 @@ class YamlFileLoader extends FileLoader if (!$service || !\is_array($service)) { throw new InvalidArgumentException(sprintf('Type definition "%s" must be a non-empty array within "_instanceof" in "%s". Check your YAML syntax.', $id, $file)); } - if (\is_string($service) && 0 === strpos($service, '@')) { + if (\is_string($service) && str_starts_with($service, '@')) { throw new InvalidArgumentException(sprintf('Type definition "%s" cannot be an alias within "_instanceof" in "%s". Check your YAML syntax.', $id, $file)); } $this->parseDefinition($id, $service, $file, []); @@ -239,13 +236,9 @@ class YamlFileLoader extends FileLoader } /** - * @param string $file - * - * @return array - * * @throws InvalidArgumentException */ - private function parseDefaults(array &$content, $file) + private function parseDefaults(array &$content, string $file): array { if (!\array_key_exists('_defaults', $content['services'])) { return []; @@ -258,8 +251,8 @@ class YamlFileLoader extends FileLoader } foreach ($defaults as $key => $default) { - if (!isset(self::$defaultsKeywords[$key])) { - throw new InvalidArgumentException(sprintf('The configuration key "%s" cannot be used to define a default value in "%s". Allowed keys are "%s".', $key, $file, implode('", "', self::$defaultsKeywords))); + if (!isset(self::DEFAULTS_KEYWORDS[$key])) { + throw new InvalidArgumentException(sprintf('The configuration key "%s" cannot be used to define a default value in "%s". Allowed keys are "%s".', $key, $file, implode('", "', self::DEFAULTS_KEYWORDS))); } } @@ -296,19 +289,18 @@ class YamlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('Parameter "bind" in "_defaults" must be an array in "%s". Check your YAML syntax.', $file)); } - $defaults['bind'] = array_map(function ($v) { return new BoundArgument($v); }, $this->resolveServices($defaults['bind'], $file)); + foreach ($this->resolveServices($defaults['bind'], $file) as $argument => $value) { + $defaults['bind'][$argument] = new BoundArgument($value, true, BoundArgument::DEFAULTS_BINDING, $file); + } } return $defaults; } - /** - * @return bool - */ - private function isUsingShortSyntax(array $service) + private function isUsingShortSyntax(array $service): bool { foreach ($service as $key => $value) { - if (\is_string($key) && ('' === $key || '$' !== $key[0])) { + if (\is_string($key) && ('' === $key || ('$' !== $key[0] && !str_contains($key, '\\')))) { return false; } } @@ -319,18 +311,17 @@ class YamlFileLoader extends FileLoader /** * Parses a definition. * - * @param string $id - * @param array|string $service - * @param string $file + * @param array|string|null $service * * @throws InvalidArgumentException When tags are invalid */ - private function parseDefinition($id, $service, $file, array $defaults) + private function parseDefinition(string $id, $service, string $file, array $defaults) { if (preg_match('/^_[a-zA-Z0-9_]*$/', $id)) { - @trigger_error(sprintf('Service names that start with an underscore are deprecated since Symfony 3.3 and will be reserved in 4.0. Rename the "%s" service or define it in XML instead.', $id), \E_USER_DEPRECATED); + throw new InvalidArgumentException(sprintf('Service names that start with an underscore are reserved. Rename the "%s" service or define it in XML instead.', $id)); } - if (\is_string($service) && 0 === strpos($service, '@')) { + + if (\is_string($service) && str_starts_with($service, '@')) { $this->container->setAlias($id, $alias = new Alias(substr($service, 1))); if (isset($defaults['public'])) { $alias->setPublic($defaults['public']); @@ -362,8 +353,12 @@ class YamlFileLoader extends FileLoader } foreach ($service as $key => $value) { - if (!\in_array($key, ['alias', 'public'])) { - @trigger_error(sprintf('The configuration key "%s" is unsupported for the service "%s" which is defined as an alias in "%s". Allowed configuration keys for service aliases are "alias" and "public". The YamlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $key, $id, $file), \E_USER_DEPRECATED); + if (!\in_array($key, ['alias', 'public', 'deprecated'])) { + throw new InvalidArgumentException(sprintf('The configuration key "%s" is unsupported for the service "%s" which is defined as an alias in "%s". Allowed configuration keys for service aliases are "alias", "public" and "deprecated".', $key, $id, $file)); + } + + if ('deprecated' === $key) { + $alias->setDeprecated(true, $value); } } @@ -391,6 +386,10 @@ class YamlFileLoader extends FileLoader } } + if ('' !== $service['parent'] && '@' === $service['parent'][0]) { + throw new InvalidArgumentException(sprintf('The value of the "parent" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $id, $service['parent'], substr($service['parent'], 1))); + } + $definition = new ChildDefinition($service['parent']); } else { $definition = new Definition(); @@ -421,7 +420,10 @@ class YamlFileLoader extends FileLoader } if (isset($service['lazy'])) { - $definition->setLazy($service['lazy']); + $definition->setLazy((bool) $service['lazy']); + if (\is_string($service['lazy'])) { + $definition->addTag('proxy', ['interface' => $service['lazy']]); + } } if (isset($service['public'])) { @@ -461,23 +463,53 @@ class YamlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('Parameter "calls" must be an array for service "%s" in "%s". Check your YAML syntax.', $id, $file)); } - foreach ($service['calls'] as $call) { - if (isset($call['method'])) { + foreach ($service['calls'] as $k => $call) { + if (!\is_array($call) && (!\is_string($k) || !$call instanceof TaggedValue)) { + throw new InvalidArgumentException(sprintf('Invalid method call for service "%s": expected map or array, "%s" given in "%s".', $id, $call instanceof TaggedValue ? '!'.$call->getTag() : \gettype($call), $file)); + } + + if (\is_string($k)) { + throw new InvalidArgumentException(sprintf('Invalid method call for service "%s", did you forgot a leading dash before "%s: ..." in "%s"?', $id, $k, $file)); + } + + if (isset($call['method']) && \is_string($call['method'])) { $method = $call['method']; - $args = isset($call['arguments']) ? $this->resolveServices($call['arguments'], $file) : []; + $args = $call['arguments'] ?? []; + $returnsClone = $call['returns_clone'] ?? false; } else { - $method = $call[0]; - $args = isset($call[1]) ? $this->resolveServices($call[1], $file) : []; + if (1 === \count($call) && \is_string(key($call))) { + $method = key($call); + $args = $call[$method]; + + if ($args instanceof TaggedValue) { + if ('returns_clone' !== $args->getTag()) { + throw new InvalidArgumentException(sprintf('Unsupported tag "!%s", did you mean "!returns_clone" for service "%s" in "%s"?', $args->getTag(), $id, $file)); + } + + $returnsClone = true; + $args = $args->getValue(); + } else { + $returnsClone = false; + } + } elseif (empty($call[0])) { + throw new InvalidArgumentException(sprintf('Invalid call for service "%s": the method must be defined as the first index of an array or as the only key of a map in "%s".', $id, $file)); + } else { + $method = $call[0]; + $args = $call[1] ?? []; + $returnsClone = $call[2] ?? false; + } } if (!\is_array($args)) { throw new InvalidArgumentException(sprintf('The second parameter for function call "%s" must be an array of its arguments for service "%s" in "%s". Check your YAML syntax.', $method, $id, $file)); } - $definition->addMethodCall($method, $args); + + $args = $this->resolveServices($args, $file); + $definition->addMethodCall($method, $args, $returnsClone); } } - $tags = isset($service['tags']) ? $service['tags'] : []; + $tags = $service['tags'] ?? []; if (!\is_array($tags)) { throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in "%s". Check your YAML syntax.', $id, $file)); } @@ -510,38 +542,34 @@ class YamlFileLoader extends FileLoader $definition->addTag($name, $tag); } - if (isset($service['decorates'])) { - if ('' !== $service['decorates'] && '@' === $service['decorates'][0]) { - throw new InvalidArgumentException(sprintf('The value of the "decorates" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $id, $service['decorates'], substr($service['decorates'], 1))); + if (null !== $decorates = $service['decorates'] ?? null) { + if ('' !== $decorates && '@' === $decorates[0]) { + throw new InvalidArgumentException(sprintf('The value of the "decorates" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $id, $service['decorates'], substr($decorates, 1))); + } + + $decorationOnInvalid = \array_key_exists('decoration_on_invalid', $service) ? $service['decoration_on_invalid'] : 'exception'; + if ('exception' === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + } elseif ('ignore' === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE; + } elseif (null === $decorationOnInvalid) { + $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE; + } elseif ('null' === $decorationOnInvalid) { + throw new InvalidArgumentException(sprintf('Invalid value "%s" for attribute "decoration_on_invalid" on service "%s". Did you mean null (without quotes) in "%s"?', $decorationOnInvalid, $id, $file)); + } else { + throw new InvalidArgumentException(sprintf('Invalid value "%s" for attribute "decoration_on_invalid" on service "%s". Did you mean "exception", "ignore" or null in "%s"?', $decorationOnInvalid, $id, $file)); } - $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null; - $priority = isset($service['decoration_priority']) ? $service['decoration_priority'] : 0; - $definition->setDecoratedService($service['decorates'], $renameId, $priority); + $renameId = $service['decoration_inner_name'] ?? null; + $priority = $service['decoration_priority'] ?? 0; + + $definition->setDecoratedService($decorates, $renameId, $priority, $invalidBehavior); } if (isset($service['autowire'])) { $definition->setAutowired($service['autowire']); } - if (isset($service['autowiring_types'])) { - if (\is_string($service['autowiring_types'])) { - $definition->addAutowiringType($service['autowiring_types']); - } else { - if (!\is_array($service['autowiring_types'])) { - throw new InvalidArgumentException(sprintf('Parameter "autowiring_types" must be a string or an array for service "%s" in "%s". Check your YAML syntax.', $id, $file)); - } - - foreach ($service['autowiring_types'] as $autowiringType) { - if (!\is_string($autowiringType)) { - throw new InvalidArgumentException(sprintf('A "autowiring_types" attribute must be of type string for service "%s" in "%s". Check your YAML syntax.', $id, $file)); - } - - $definition->addAutowiringType($autowiringType); - } - } - } - if (isset($defaults['bind']) || isset($service['bind'])) { // deep clone, to avoid multiple process of the same instance in the passes $bindings = isset($defaults['bind']) ? unserialize(serialize($defaults['bind'])) : []; @@ -552,6 +580,12 @@ class YamlFileLoader extends FileLoader } $bindings = array_merge($bindings, $this->resolveServices($service['bind'], $file)); + $bindingType = $this->isLoadingInstanceof ? BoundArgument::INSTANCEOF_BINDING : BoundArgument::SERVICE_BINDING; + foreach ($bindings as $argument => $value) { + if (!$value instanceof BoundArgument) { + $bindings[$argument] = new BoundArgument($value, true, $bindingType, $file); + } + } } $definition->setBindings($bindings); @@ -573,8 +607,8 @@ class YamlFileLoader extends FileLoader if (!\is_string($service['resource'])) { throw new InvalidArgumentException(sprintf('A "resource" attribute must be of type string for service "%s" in "%s". Check your YAML syntax.', $id, $file)); } - $exclude = isset($service['exclude']) ? $service['exclude'] : null; - $namespace = isset($service['namespace']) ? $service['namespace'] : $id; + $exclude = $service['exclude'] ?? null; + $namespace = $service['namespace'] ?? $id; $this->registerClasses($definition, $namespace, $service['resource'], $exclude); } else { $this->setDefinition($id, $definition); @@ -584,25 +618,28 @@ class YamlFileLoader extends FileLoader /** * Parses a callable. * - * @param string|array $callable A callable - * @param string $parameter A parameter (e.g. 'factory' or 'configurator') - * @param string $id A service identifier - * @param string $file A parsed file + * @param string|array $callable A callable reference * * @throws InvalidArgumentException When errors occur * - * @return string|array A parsed callable + * @return string|array|Reference A parsed callable */ - private function parseCallable($callable, $parameter, $id, $file) + private function parseCallable($callable, string $parameter, string $id, string $file) { if (\is_string($callable)) { if ('' !== $callable && '@' === $callable[0]) { - throw new InvalidArgumentException(sprintf('The value of the "%s" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $parameter, $id, $callable, substr($callable, 1))); + if (!str_contains($callable, ':')) { + return [$this->resolveServices($callable, $file), '__invoke']; + } + + throw new InvalidArgumentException(sprintf('The value of the "%s" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s" in "%s").', $parameter, $id, $callable, substr($callable, 1), $file)); } - if (false !== strpos($callable, ':') && false === strpos($callable, '::')) { + if (str_contains($callable, ':') && !str_contains($callable, '::')) { $parts = explode(':', $callable); + @trigger_error(sprintf('Using short %s syntax for service "%s" is deprecated since Symfony 4.4, use "[\'@%s\', \'%s\']" instead.', $parameter, $id, ...$parts), \E_USER_DEPRECATED); + return [$this->resolveServices('@'.$parts[0], $file), $parts[1]]; } @@ -635,7 +672,7 @@ class YamlFileLoader extends FileLoader */ protected function loadFile($file) { - if (!class_exists('Symfony\Component\Yaml\Parser')) { + if (!class_exists(\Symfony\Component\Yaml\Parser::class)) { throw new RuntimeException('Unable to load YAML config files as the Symfony Yaml Component is not installed.'); } @@ -651,18 +688,10 @@ class YamlFileLoader extends FileLoader $this->yamlParser = new YamlParser(); } - $prevErrorHandler = set_error_handler(function ($level, $message, $script, $line) use ($file, &$prevErrorHandler) { - $message = \E_USER_DEPRECATED === $level ? preg_replace('/ on line \d+/', ' in "'.$file.'"$0', $message) : $message; - - return $prevErrorHandler ? $prevErrorHandler($level, $message, $script, $line) : false; - }); - try { $configuration = $this->yamlParser->parseFile($file, Yaml::PARSE_CONSTANT | Yaml::PARSE_CUSTOM_TAGS); } catch (ParseException $e) { throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML: ', $file).$e->getMessage(), 0, $e); - } finally { - restore_error_handler(); } return $this->validate($configuration, $file); @@ -671,14 +700,9 @@ class YamlFileLoader extends FileLoader /** * Validates a YAML file. * - * @param mixed $content - * @param string $file - * - * @return array - * * @throws InvalidArgumentException When service file is not valid */ - private function validate($content, $file) + private function validate($content, string $file): ?array { if (null === $content) { return $content; @@ -694,7 +718,7 @@ class YamlFileLoader extends FileLoader } if (!$this->container->hasExtension($namespace)) { - $extensionNamespaces = array_filter(array_map(function ($ext) { return $ext->getAlias(); }, $this->container->getExtensions())); + $extensionNamespaces = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $namespace, $file, $namespace, $extensionNamespaces ? sprintf('"%s"', implode('", "', $extensionNamespaces)) : 'none')); } } @@ -705,13 +729,9 @@ class YamlFileLoader extends FileLoader /** * Resolves services. * - * @param mixed $value - * @param string $file - * @param bool $isParameter - * * @return array|string|Reference|ArgumentInterface */ - private function resolveServices($value, $file, $isParameter = false) + private function resolveServices($value, string $file, bool $isParameter = false) { if ($value instanceof TaggedValue) { $argument = $value->getValue(); @@ -726,12 +746,48 @@ class YamlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('"!iterator" tag only accepts arrays of "@service" references in "%s".', $file)); } } - if ('tagged' === $value->getTag()) { - if (!\is_string($argument) || !$argument) { - throw new InvalidArgumentException(sprintf('"!tagged" tag only accepts non empty string in "%s".', $file)); + if ('service_closure' === $value->getTag()) { + $argument = $this->resolveServices($argument, $file, $isParameter); + + if (!$argument instanceof Reference) { + throw new InvalidArgumentException(sprintf('"!service_closure" tag only accepts service references in "%s".', $file)); + } + + return new ServiceClosureArgument($argument); + } + if ('service_locator' === $value->getTag()) { + if (!\is_array($argument)) { + throw new InvalidArgumentException(sprintf('"!service_locator" tag only accepts maps in "%s".', $file)); + } + + $argument = $this->resolveServices($argument, $file, $isParameter); + + try { + return new ServiceLocatorArgument($argument); + } catch (InvalidArgumentException $e) { + throw new InvalidArgumentException(sprintf('"!service_locator" tag only accepts maps of "@service" references in "%s".', $file)); + } + } + if (\in_array($value->getTag(), ['tagged', 'tagged_iterator', 'tagged_locator'], true)) { + $forLocator = 'tagged_locator' === $value->getTag(); + + if (\is_array($argument) && isset($argument['tag']) && $argument['tag']) { + if ($diff = array_diff(array_keys($argument), ['tag', 'index_by', 'default_index_method', 'default_priority_method'])) { + throw new InvalidArgumentException(sprintf('"!%s" tag contains unsupported key "%s"; supported ones are "tag", "index_by", "default_index_method", and "default_priority_method".', $value->getTag(), implode('", "', $diff))); + } + + $argument = new TaggedIteratorArgument($argument['tag'], $argument['index_by'] ?? null, $argument['default_index_method'] ?? null, $forLocator, $argument['default_priority_method'] ?? null); + } elseif (\is_string($argument) && $argument) { + $argument = new TaggedIteratorArgument($argument, null, null, $forLocator); + } else { + throw new InvalidArgumentException(sprintf('"!%s" tags only accept a non empty string or an array with a key "tag" in "%s".', $value->getTag(), $file)); } - return new TaggedIteratorArgument($argument); + if ($forLocator) { + $argument = new ServiceLocatorArgument($argument); + } + + return $argument; } if ('service' === $value->getTag()) { if ($isParameter) { @@ -743,7 +799,7 @@ class YamlFileLoader extends FileLoader $instanceof = $this->instanceof; $this->instanceof = []; - $id = sprintf('%d_%s', ++$this->anonymousServicesCount, preg_replace('/^.*\\\\/', '', isset($argument['class']) ? $argument['class'] : '').$this->anonymousServicesSuffix); + $id = sprintf('.%d_%s', ++$this->anonymousServicesCount, preg_replace('/^.*\\\\/', '', $argument['class'] ?? '').$this->anonymousServicesSuffix); $this->parseDefinition($id, $argument, $file, []); if (!$this->container->hasDefinition($id)) { @@ -765,20 +821,24 @@ class YamlFileLoader extends FileLoader foreach ($value as $k => $v) { $value[$k] = $this->resolveServices($v, $file, $isParameter); } - } elseif (\is_string($value) && 0 === strpos($value, '@=')) { + } elseif (\is_string($value) && str_starts_with($value, '@=')) { + if ($isParameter) { + throw new InvalidArgumentException(sprintf('Using expressions in parameters is not allowed in "%s".', $file)); + } + if (!class_exists(Expression::class)) { - throw new \LogicException(sprintf('The "@=" expression syntax cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".')); + throw new \LogicException('The "@=" expression syntax cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".'); } return new Expression(substr($value, 2)); - } elseif (\is_string($value) && 0 === strpos($value, '@')) { - if (0 === strpos($value, '@@')) { + } elseif (\is_string($value) && str_starts_with($value, '@')) { + if (str_starts_with($value, '@@')) { $value = substr($value, 1); $invalidBehavior = null; - } elseif (0 === strpos($value, '@!')) { + } elseif (str_starts_with($value, '@!')) { $value = substr($value, 2); $invalidBehavior = ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE; - } elseif (0 === strpos($value, '@?')) { + } elseif (str_starts_with($value, '@?')) { $value = substr($value, 2); $invalidBehavior = ContainerInterface::IGNORE_ON_INVALID_REFERENCE; } else { @@ -786,11 +846,6 @@ class YamlFileLoader extends FileLoader $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; } - if ('=' === substr($value, -1)) { - @trigger_error(sprintf('The "=" suffix that used to disable strict references in Symfony 2.x is deprecated since Symfony 3.3 and will be unsupported in 4.0. Remove it in "%s".', $value), \E_USER_DEPRECATED); - $value = substr($value, 0, -1); - } - if (null !== $invalidBehavior) { $value = new Reference($value, $invalidBehavior); } @@ -799,9 +854,6 @@ class YamlFileLoader extends FileLoader return $value; } - /** - * Loads from Extensions. - */ private function loadFromExtensions(array $content) { foreach ($content as $namespace => $values) { @@ -817,30 +869,19 @@ class YamlFileLoader extends FileLoader } } - /** - * Checks the keywords used to define a service. - * - * @param string $id The service name - * @param array $definition The service definition to check - * @param string $file The loaded YAML file - */ - private function checkDefinition($id, array $definition, $file) + private function checkDefinition(string $id, array $definition, string $file) { - if ($throw = $this->isLoadingInstanceof) { - $keywords = self::$instanceofKeywords; - } elseif ($throw = (isset($definition['resource']) || isset($definition['namespace']))) { - $keywords = self::$prototypeKeywords; + if ($this->isLoadingInstanceof) { + $keywords = self::INSTANCEOF_KEYWORDS; + } elseif (isset($definition['resource']) || isset($definition['namespace'])) { + $keywords = self::PROTOTYPE_KEYWORDS; } else { - $keywords = self::$serviceKeywords; + $keywords = self::SERVICE_KEYWORDS; } foreach ($definition as $key => $value) { if (!isset($keywords[$key])) { - if ($throw) { - throw new InvalidArgumentException(sprintf('The configuration key "%s" is unsupported for definition "%s" in "%s". Allowed configuration keys are "%s".', $key, $id, $file, implode('", "', $keywords))); - } - - @trigger_error(sprintf('The configuration key "%s" is unsupported for service definition "%s" in "%s". Allowed configuration keys are "%s". The YamlFileLoader object will raise an exception instead in Symfony 4.0 when detecting an unsupported service configuration key.', $key, $id, $file, implode('", "', $keywords)), \E_USER_DEPRECATED); + throw new InvalidArgumentException(sprintf('The configuration key "%s" is unsupported for definition "%s" in "%s". Allowed configuration keys are "%s".', $key, $id, $file, implode('", "', $keywords))); } } } diff --git a/civicrm/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd b/civicrm/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd index 3a55a7df676c74c4d97075ba954425e0fc1de05a..65466e9768daf79e31e05d434689b5e7fc32560c 100644 --- a/civicrm/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd +++ b/civicrm/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd @@ -78,7 +78,7 @@ ]]></xsd:documentation> </xsd:annotation> <xsd:attribute name="resource" type="xsd:string" use="required" /> - <xsd:attribute name="ignore-errors" type="boolean" /> + <xsd:attribute name="ignore-errors" type="ignore_errors" /> <xsd:attribute name="type" type="xsd:string" /> </xsd:complexType> @@ -117,7 +117,6 @@ <xsd:element name="call" type="call" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="tag" type="tag" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" /> - <xsd:element name="autowiring-type" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="bind" type="bind" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="id" type="xsd:string" /> @@ -125,11 +124,12 @@ <xsd:attribute name="shared" type="boolean" /> <xsd:attribute name="public" type="boolean" /> <xsd:attribute name="synthetic" type="boolean" /> - <xsd:attribute name="lazy" type="boolean" /> + <xsd:attribute name="lazy" type="xsd:string" /> <xsd:attribute name="abstract" type="boolean" /> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="parent" type="xsd:string" /> <xsd:attribute name="decorates" type="xsd:string" /> + <xsd:attribute name="decoration-on-invalid" type="invalid_decorated_service_sequence" /> <xsd:attribute name="decoration-inner-name" type="xsd:string" /> <xsd:attribute name="decoration-priority" type="xsd:integer" /> <xsd:attribute name="autowire" type="boolean" /> @@ -142,11 +142,12 @@ <xsd:element name="call" type="call" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="tag" type="tag" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="bind" type="bind" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="id" type="xsd:string" use="required" /> <xsd:attribute name="shared" type="boolean" /> <xsd:attribute name="public" type="boolean" /> - <xsd:attribute name="lazy" type="boolean" /> + <xsd:attribute name="lazy" type="xsd:string" /> <xsd:attribute name="autowire" type="boolean" /> <xsd:attribute name="autoconfigure" type="boolean" /> </xsd:complexType> @@ -161,13 +162,14 @@ <xsd:element name="tag" type="tag" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="bind" type="bind" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="exclude" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="namespace" type="xsd:string" use="required" /> <xsd:attribute name="resource" type="xsd:string" use="required" /> <xsd:attribute name="exclude" type="xsd:string" /> <xsd:attribute name="shared" type="boolean" /> <xsd:attribute name="public" type="boolean" /> - <xsd:attribute name="lazy" type="boolean" /> + <xsd:attribute name="lazy" type="xsd:string" /> <xsd:attribute name="abstract" type="boolean" /> <xsd:attribute name="parent" type="xsd:string" /> <xsd:attribute name="autowire" type="boolean" /> @@ -207,7 +209,6 @@ <xsd:attribute name="key" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="on-invalid" type="invalid_sequence" /> - <xsd:attribute name="strict" type="boolean" /> <xsd:attribute name="tag" type="xsd:string" /> </xsd:complexType> @@ -221,6 +222,7 @@ <xsd:attribute name="key" type="xsd:string" use="required" /> <xsd:attribute name="on-invalid" type="invalid_sequence" /> <xsd:attribute name="method" type="xsd:string" /> + <xsd:attribute name="tag" type="xsd:string" /> </xsd:complexType> <xsd:complexType name="argument" mixed="true"> @@ -233,8 +235,10 @@ <xsd:attribute name="key" type="xsd:string" /> <xsd:attribute name="index" type="xsd:integer" /> <xsd:attribute name="on-invalid" type="invalid_sequence" /> - <xsd:attribute name="strict" type="boolean" /> <xsd:attribute name="tag" type="xsd:string" /> + <xsd:attribute name="index-by" type="xsd:string" /> + <xsd:attribute name="default-index-method" type="xsd:string" /> + <xsd:attribute name="default-priority-method" type="xsd:string" /> </xsd:complexType> <xsd:complexType name="call"> @@ -242,6 +246,7 @@ <xsd:element name="argument" type="argument" maxOccurs="unbounded" /> </xsd:choice> <xsd:attribute name="method" type="xsd:string" /> + <xsd:attribute name="returns-clone" type="boolean" /> </xsd:complexType> <xsd:simpleType name="parameter_type"> @@ -249,6 +254,7 @@ <xsd:enumeration value="collection" /> <xsd:enumeration value="string" /> <xsd:enumeration value="constant" /> + <xsd:enumeration value="binary" /> </xsd:restriction> </xsd:simpleType> @@ -259,8 +265,20 @@ <xsd:enumeration value="expression" /> <xsd:enumeration value="string" /> <xsd:enumeration value="constant" /> + <xsd:enumeration value="binary" /> <xsd:enumeration value="iterator" /> + <xsd:enumeration value="service_closure" /> + <xsd:enumeration value="service_locator" /> + <!-- "tagged" is an alias of "tagged_iterator", using "tagged_iterator" is preferred. --> <xsd:enumeration value="tagged" /> + <xsd:enumeration value="tagged_iterator" /> + <xsd:enumeration value="tagged_locator" /> + </xsd:restriction> + </xsd:simpleType> + + <xsd:simpleType name="ignore_errors"> + <xsd:restriction base="xsd:string"> + <xsd:pattern value="(true|false|not_found)" /> </xsd:restriction> </xsd:simpleType> @@ -273,6 +291,14 @@ </xsd:restriction> </xsd:simpleType> + <xsd:simpleType name="invalid_decorated_service_sequence"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="null" /> + <xsd:enumeration value="ignore" /> + <xsd:enumeration value="exception" /> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="boolean"> <xsd:restriction base="xsd:string"> <xsd:pattern value="(%.+%|true|false)" /> diff --git a/civicrm/vendor/symfony/dependency-injection/Parameter.php b/civicrm/vendor/symfony/dependency-injection/Parameter.php index cac6f6c4c2264d653e614db308b9f01ebeac0e36..d484ac0f947eba69100a2c7e88ea8bd453736605 100644 --- a/civicrm/vendor/symfony/dependency-injection/Parameter.php +++ b/civicrm/vendor/symfony/dependency-injection/Parameter.php @@ -20,10 +20,7 @@ class Parameter { private $id; - /** - * @param string $id The parameter key - */ - public function __construct($id) + public function __construct(string $id) { $this->id = $id; } @@ -33,6 +30,6 @@ class Parameter */ public function __toString() { - return (string) $this->id; + return $this->id; } } diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php new file mode 100644 index 0000000000000000000000000000000000000000..966122765f320a983216ff4d337a46ecb8844847 --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php @@ -0,0 +1,55 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\ParameterBag; + +use Symfony\Component\DependencyInjection\Container; + +/** + * @author Nicolas Grekas <p@tchwork.com> + */ +class ContainerBag extends FrozenParameterBag implements ContainerBagInterface +{ + private $container; + + public function __construct(Container $container) + { + $this->container = $container; + } + + /** + * {@inheritdoc} + */ + public function all() + { + return $this->container->getParameterBag()->all(); + } + + /** + * {@inheritdoc} + * + * @return array|bool|string|int|float|\UnitEnum|null + */ + public function get($name) + { + return $this->container->getParameter($name); + } + + /** + * {@inheritdoc} + * + * @return bool + */ + public function has($name) + { + return $this->container->hasParameter($name); + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..1c1227a3e1d8390221693d06e77f82fea3f3c1dd --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php @@ -0,0 +1,57 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\ParameterBag; + +use Psr\Container\ContainerInterface; +use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; + +/** + * ContainerBagInterface is the interface implemented by objects that manage service container parameters. + * + * @author Nicolas Grekas <p@tchwork.com> + */ +interface ContainerBagInterface extends ContainerInterface +{ + /** + * Gets the service container parameters. + * + * @return array An array of parameters + */ + public function all(); + + /** + * Replaces parameter placeholders (%name%) by their values. + * + * @param mixed $value A value + * + * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist + */ + public function resolveValue($value); + + /** + * Escape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function escapeValue($value); + + /** + * Unescape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function unescapeValue($value); +} diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php index c4e369b010d83b5cb6e13486905fcd3a563a0926..22f6812093c9f7295f2a90cd2b64cdc039678daf 100644 --- a/civicrm/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php @@ -19,15 +19,19 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; */ class EnvPlaceholderParameterBag extends ParameterBag { + private $envPlaceholderUniquePrefix; private $envPlaceholders = []; + private $unusedEnvPlaceholders = []; private $providedTypes = []; + private static $counter = 0; + /** * {@inheritdoc} */ public function get($name) { - if (0 === strpos($name, 'env(') && ')' === substr($name, -1) && 'env()' !== $name) { + if (str_starts_with($name, 'env(') && str_ends_with($name, ')') && 'env()' !== $name) { $env = substr($name, 4, -1); if (isset($this->envPlaceholders[$env])) { @@ -35,20 +39,28 @@ class EnvPlaceholderParameterBag extends ParameterBag return $placeholder; // return first result } } - if (!preg_match('/^(?:\w++:)*+\w++$/', $env)) { + if (isset($this->unusedEnvPlaceholders[$env])) { + foreach ($this->unusedEnvPlaceholders[$env] as $placeholder) { + return $placeholder; // return first result + } + } + if (!preg_match('/^(?:\w*+:)*+\w++$/', $env)) { throw new InvalidArgumentException(sprintf('Invalid "%s" name: only "word" characters are allowed.', $name)); } if ($this->has($name)) { $defaultValue = parent::get($name); - if (null !== $defaultValue && !is_scalar($defaultValue)) { + if (null !== $defaultValue && !is_scalar($defaultValue)) { // !is_string in 5.0 + //throw new RuntimeException(sprintf('The default value of an env() parameter must be a string or null, but "%s" given to "%s".', \gettype($defaultValue), $name)); throw new RuntimeException(sprintf('The default value of an env() parameter must be scalar or null, but "%s" given to "%s".', \gettype($defaultValue), $name)); + } elseif (is_scalar($defaultValue) && !\is_string($defaultValue)) { + @trigger_error(sprintf('A non-string default value of an env() parameter is deprecated since 4.3, cast "%s" to string instead.', $name), \E_USER_DEPRECATED); } } - $uniqueName = md5($name.uniqid(mt_rand(), true)); - $placeholder = sprintf('env_%s_%s', str_replace(':', '_', $env), $uniqueName); + $uniqueName = md5($name.'_'.self::$counter++); + $placeholder = sprintf('%s_%s_%s', $this->getEnvPlaceholderUniquePrefix(), str_replace(':', '_', $env), $uniqueName); $this->envPlaceholders[$env][$placeholder] = $placeholder; return $placeholder; @@ -57,6 +69,20 @@ class EnvPlaceholderParameterBag extends ParameterBag return parent::get($name); } + /** + * Gets the common env placeholder prefix for env vars created by this bag. + */ + public function getEnvPlaceholderUniquePrefix(): string + { + if (null === $this->envPlaceholderUniquePrefix) { + $reproducibleEntropy = unserialize(serialize($this->parameters)); + array_walk_recursive($reproducibleEntropy, function (&$v) { $v = null; }); + $this->envPlaceholderUniquePrefix = 'env_'.substr(md5(serialize($reproducibleEntropy)), -16); + } + + return $this->envPlaceholderUniquePrefix; + } + /** * Returns the map of env vars used in the resolved parameter values to their placeholders. * @@ -67,6 +93,16 @@ class EnvPlaceholderParameterBag extends ParameterBag return $this->envPlaceholders; } + public function getUnusedEnvPlaceholders(): array + { + return $this->unusedEnvPlaceholders; + } + + public function clearUnusedEnvPlaceholders() + { + $this->unusedEnvPlaceholders = []; + } + /** * Merges the env placeholders of another EnvPlaceholderParameterBag. */ @@ -79,6 +115,14 @@ class EnvPlaceholderParameterBag extends ParameterBag $this->envPlaceholders[$env] += $placeholders; } } + + if ($newUnusedPlaceholders = $bag->getUnusedEnvPlaceholders()) { + $this->unusedEnvPlaceholders += $newUnusedPlaceholders; + + foreach ($newUnusedPlaceholders as $env => $placeholders) { + $this->unusedEnvPlaceholders[$env] += $placeholders; + } + } } /** @@ -114,9 +158,15 @@ class EnvPlaceholderParameterBag extends ParameterBag continue; } if (is_numeric($default = $this->parameters[$name])) { + if (!\is_string($default)) { + @trigger_error(sprintf('A non-string default value of env parameter "%s" is deprecated since 4.3, cast it to string instead.', $env), \E_USER_DEPRECATED); + } $this->parameters[$name] = (string) $default; - } elseif (null !== $default && !is_scalar($default)) { + } elseif (null !== $default && !is_scalar($default)) { // !is_string in 5.0 + //throw new RuntimeException(sprintf('The default value of env parameter "%s" must be a string or null, "%s" given.', $env, \gettype($default))); throw new RuntimeException(sprintf('The default value of env parameter "%s" must be scalar or null, "%s" given.', $env, \gettype($default))); + } elseif (is_scalar($default) && !\is_string($default)) { + @trigger_error(sprintf('A non-string default value of env parameter "%s" is deprecated since 4.3, cast it to string instead.', $env), \E_USER_DEPRECATED); } } } diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php index 24dc8035fec60fa268ed540d6f92e9c2542afdf4..7a9f3814e9394258cb97597212df745ee63fc82c 100644 --- a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php @@ -25,18 +25,13 @@ class ParameterBag implements ParameterBagInterface protected $parameters = []; protected $resolved = false; - private $normalizedNames = []; - - /** - * @param array $parameters An array of parameters - */ public function __construct(array $parameters = []) { $this->add($parameters); } /** - * Clears all parameters. + * {@inheritdoc} */ public function clear() { @@ -44,9 +39,7 @@ class ParameterBag implements ParameterBagInterface } /** - * Adds parameters to the service container parameters. - * - * @param array $parameters An array of parameters + * {@inheritdoc} */ public function add(array $parameters) { @@ -68,7 +61,7 @@ class ParameterBag implements ParameterBagInterface */ public function get($name) { - $name = $this->normalizeName($name); + $name = (string) $name; if (!\array_key_exists($name, $this->parameters)) { if (!$name) { @@ -78,13 +71,13 @@ class ParameterBag implements ParameterBagInterface $alternatives = []; foreach ($this->parameters as $key => $parameterValue) { $lev = levenshtein($name, $key); - if ($lev <= \strlen($name) / 3 || false !== strpos($key, $name)) { + if ($lev <= \strlen($name) / 3 || str_contains($key, $name)) { $alternatives[] = $key; } } $nonNestedAlternative = null; - if (!\count($alternatives) && false !== strpos($name, '.')) { + if (!\count($alternatives) && str_contains($name, '.')) { $namePartsLength = array_map('strlen', explode('.', $name)); $key = substr($name, 0, -1 * (1 + array_pop($namePartsLength))); while (\count($namePartsLength)) { @@ -106,14 +99,11 @@ class ParameterBag implements ParameterBagInterface } /** - * Sets a service container parameter. - * - * @param string $name The parameter name - * @param mixed $value The parameter value + * {@inheritdoc} */ public function set($name, $value) { - $this->parameters[$this->normalizeName($name)] = $value; + $this->parameters[(string) $name] = $value; } /** @@ -121,17 +111,15 @@ class ParameterBag implements ParameterBagInterface */ public function has($name) { - return \array_key_exists($this->normalizeName($name), $this->parameters); + return \array_key_exists((string) $name, $this->parameters); } /** - * Removes a parameter. - * - * @param string $name The parameter name + * {@inheritdoc} */ public function remove($name) { - unset($this->parameters[$this->normalizeName($name)]); + unset($this->parameters[(string) $name]); } /** @@ -208,13 +196,12 @@ class ParameterBag implements ParameterBagInterface // a non-string in a parameter value if (preg_match('/^%([^%\s]+)%$/', $value, $match)) { $key = $match[1]; - $lcKey = strtolower($key); // strtolower() to be removed in 4.0 - if (isset($resolving[$lcKey])) { + if (isset($resolving[$key])) { throw new ParameterCircularReferenceException(array_keys($resolving)); } - $resolving[$lcKey] = true; + $resolving[$key] = true; return $this->resolved ? $this->get($key) : $this->resolveValue($this->get($key), $resolving); } @@ -226,8 +213,7 @@ class ParameterBag implements ParameterBagInterface } $key = $match[1]; - $lcKey = strtolower($key); // strtolower() to be removed in 4.0 - if (isset($resolving[$lcKey])) { + if (isset($resolving[$key])) { throw new ParameterCircularReferenceException(array_keys($resolving)); } @@ -238,7 +224,7 @@ class ParameterBag implements ParameterBagInterface } $resolved = (string) $resolved; - $resolving[$lcKey] = true; + $resolving[$key] = true; return $this->isResolved() ? $resolved : $this->resolveString($resolved, $resolving); }, $value); @@ -290,18 +276,4 @@ class ParameterBag implements ParameterBagInterface return $value; } - - private function normalizeName($name) - { - if (isset($this->normalizedNames[$normalizedName = strtolower($name)])) { - $normalizedName = $this->normalizedNames[$normalizedName]; - if ((string) $name !== $normalizedName) { - @trigger_error(sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), \E_USER_DEPRECATED); - } - } else { - $normalizedName = $this->normalizedNames[$normalizedName] = (string) $name; - } - - return $normalizedName; - } } diff --git a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php index 7386df06481a7c649f47e77d7581aeacd3f99469..cbba67cd330a4c5785e48acccd202028eb866d55 100644 --- a/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php @@ -15,7 +15,7 @@ use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; /** - * ParameterBagInterface. + * ParameterBagInterface is the interface implemented by objects that manage service container parameters. * * @author Fabien Potencier <fabien@symfony.com> */ @@ -31,8 +31,6 @@ interface ParameterBagInterface /** * Adds parameters to the service container parameters. * - * @param array $parameters An array of parameters - * * @throws LogicException if the parameter can not be added */ public function add(array $parameters); @@ -49,7 +47,7 @@ interface ParameterBagInterface * * @param string $name The parameter name * - * @return mixed The parameter value + * @return array|bool|string|int|float|\UnitEnum|null * * @throws ParameterNotFoundException if the parameter is not defined */ @@ -65,8 +63,8 @@ interface ParameterBagInterface /** * Sets a service container parameter. * - * @param string $name The parameter name - * @param mixed $value The parameter value + * @param string $name The parameter name + * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value * * @throws LogicException if the parameter can not be set */ diff --git a/civicrm/vendor/symfony/dependency-injection/README.md b/civicrm/vendor/symfony/dependency-injection/README.md index cb2d4a11c58869c32458d198a6c5dbe713b66814..fa6719a7998f16a834d3a3393d7c0589f993aa63 100644 --- a/civicrm/vendor/symfony/dependency-injection/README.md +++ b/civicrm/vendor/symfony/dependency-injection/README.md @@ -7,8 +7,8 @@ way objects are constructed in your application. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/dependency_injection.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/dependency_injection.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/dependency-injection/Reference.php b/civicrm/vendor/symfony/dependency-injection/Reference.php index 82906d2b7524c3b6654f5adf68ce9a58c685807d..c13cf6fe4cc868b612b7988e227e6ddaf0f27d02 100644 --- a/civicrm/vendor/symfony/dependency-injection/Reference.php +++ b/civicrm/vendor/symfony/dependency-injection/Reference.php @@ -21,15 +21,9 @@ class Reference private $id; private $invalidBehavior; - /** - * @param string $id The service identifier - * @param int $invalidBehavior The behavior when the service does not exist - * - * @see Container - */ - public function __construct($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) + public function __construct(string $id, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) { - $this->id = (string) $id; + $this->id = $id; $this->invalidBehavior = $invalidBehavior; } diff --git a/civicrm/vendor/symfony/dependency-injection/ResettableContainerInterface.php b/civicrm/vendor/symfony/dependency-injection/ResettableContainerInterface.php index b74e676245714878541ec7a2a3fcf167630c4773..b9714d25098feec2b31c44d34f81c1e00b5ef5eb 100644 --- a/civicrm/vendor/symfony/dependency-injection/ResettableContainerInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/ResettableContainerInterface.php @@ -11,14 +11,18 @@ namespace Symfony\Component\DependencyInjection; +use Symfony\Contracts\Service\ResetInterface; + /** * ResettableContainerInterface defines additional resetting functionality * for containers, allowing to release shared services when the container is * not needed anymore. * * @author Christophe Coevoet <stof@notk.org> + * + * @deprecated since Symfony 4.2, use "Symfony\Contracts\Service\ResetInterface" instead. */ -interface ResettableContainerInterface extends ContainerInterface +interface ResettableContainerInterface extends ContainerInterface, ResetInterface { /** * Resets shared services from the container. diff --git a/civicrm/vendor/symfony/dependency-injection/ReverseContainer.php b/civicrm/vendor/symfony/dependency-injection/ReverseContainer.php new file mode 100644 index 0000000000000000000000000000000000000000..076e624c2e5ceb6968854324ec24b11a4e6ce65c --- /dev/null +++ b/civicrm/vendor/symfony/dependency-injection/ReverseContainer.php @@ -0,0 +1,85 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +use Psr\Container\ContainerInterface; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; + +/** + * Turns public and "container.reversible" services back to their ids. + * + * @author Nicolas Grekas <p@tchwork.com> + */ +final class ReverseContainer +{ + private $serviceContainer; + private $reversibleLocator; + private $tagName; + private $getServiceId; + + public function __construct(Container $serviceContainer, ContainerInterface $reversibleLocator, string $tagName = 'container.reversible') + { + $this->serviceContainer = $serviceContainer; + $this->reversibleLocator = $reversibleLocator; + $this->tagName = $tagName; + $this->getServiceId = \Closure::bind(function ($service): ?string { + return array_search($service, $this->services, true) ?: array_search($service, $this->privates, true) ?: null; + }, $serviceContainer, Container::class); + } + + /** + * Returns the id of the passed object when it exists as a service. + * + * To be reversible, services need to be either public or be tagged with "container.reversible". + * + * @param object $service + */ + public function getId($service): ?string + { + if ($this->serviceContainer === $service) { + return 'service_container'; + } + + if (null === $id = ($this->getServiceId)($service)) { + return null; + } + + if ($this->serviceContainer->has($id) || $this->reversibleLocator->has($id)) { + return $id; + } + + return null; + } + + /** + * @return object + * + * @throws ServiceNotFoundException When the service is not reversible + */ + public function getService(string $id) + { + if ($this->serviceContainer->has($id)) { + return $this->serviceContainer->get($id); + } + + if ($this->reversibleLocator->has($id)) { + return $this->reversibleLocator->get($id); + } + + if (isset($this->serviceContainer->getRemovedIds()[$id])) { + throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service is private and cannot be accessed by reference. You should either make it public, or tag it as "%s".', $id, $this->tagName)); + } + + // will throw a ServiceNotFoundException + $this->serviceContainer->get($id); + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php b/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php index 80be44ebaa561eedd3ca2c132bfdbf8cd708cbf3..bdd1041014cb550fb24d26a47aba23e753be3497 100644 --- a/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php +++ b/civicrm/vendor/symfony/dependency-injection/ServiceLocator.php @@ -11,59 +11,54 @@ namespace Symfony\Component\DependencyInjection; -use Psr\Container\ContainerInterface as PsrContainerInterface; +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\NotFoundExceptionInterface; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use Symfony\Contracts\Service\ServiceLocatorTrait; +use Symfony\Contracts\Service\ServiceProviderInterface; +use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * @author Robin Chalas <robin.chalas@gmail.com> * @author Nicolas Grekas <p@tchwork.com> */ -class ServiceLocator implements PsrContainerInterface +class ServiceLocator implements ServiceProviderInterface { - private $factories; - private $loading = []; - private $externalId; - private $container; - - /** - * @param callable[] $factories - */ - public function __construct(array $factories) - { - $this->factories = $factories; + use ServiceLocatorTrait { + get as private doGet; } - /** - * {@inheritdoc} - */ - public function has($id) - { - return isset($this->factories[$id]); - } + private $externalId; + private $container; /** * {@inheritdoc} + * + * @return mixed */ public function get($id) { - if (!isset($this->factories[$id])) { - throw new ServiceNotFoundException($id, end($this->loading) ?: null, null, [], $this->createServiceNotFoundMessage($id)); + if (!$this->externalId) { + return $this->doGet($id); } - if (isset($this->loading[$id])) { - $ids = array_values($this->loading); - $ids = \array_slice($this->loading, array_search($id, $ids)); - $ids[] = $id; + try { + return $this->doGet($id); + } catch (RuntimeException $e) { + $what = sprintf('service "%s" required by "%s"', $id, $this->externalId); + $message = preg_replace('/service "\.service_locator\.[^"]++"/', $what, $e->getMessage()); - throw new ServiceCircularReferenceException($id, $ids); - } + if ($e->getMessage() === $message) { + $message = sprintf('Cannot resolve %s: %s', $what, $message); + } - $this->loading[$id] = $id; - try { - return $this->factories[$id](); - } finally { - unset($this->loading[$id]); + $r = new \ReflectionProperty($e, 'message'); + $r->setAccessible(true); + $r->setValue($e, $message); + + throw $e; } } @@ -74,8 +69,10 @@ class ServiceLocator implements PsrContainerInterface /** * @internal + * + * @return static */ - public function withContext($externalId, Container $container) + public function withContext(string $externalId, Container $container) { $locator = clone $this; $locator->externalId = $externalId; @@ -84,14 +81,16 @@ class ServiceLocator implements PsrContainerInterface return $locator; } - private function createServiceNotFoundMessage($id) + private function createNotFoundException(string $id): NotFoundExceptionInterface { if ($this->loading) { - return sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', end($this->loading), $id, $this->formatAlternatives()); + $msg = sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', end($this->loading), $id, $this->formatAlternatives()); + + return new ServiceNotFoundException($id, end($this->loading) ?: null, null, [], $msg); } - $class = debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT | \DEBUG_BACKTRACE_IGNORE_ARGS, 3); - $class = isset($class[2]['object']) ? \get_class($class[2]['object']) : null; + $class = debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT | \DEBUG_BACKTRACE_IGNORE_ARGS, 4); + $class = isset($class[3]['object']) ? \get_class($class[3]['object']) : null; $externalId = $this->externalId ?: $class; $msg = []; @@ -127,10 +126,15 @@ class ServiceLocator implements PsrContainerInterface $msg[] = 'Try using dependency injection instead.'; } - return implode(' ', $msg); + return new ServiceNotFoundException($id, end($this->loading) ?: null, null, [], implode(' ', $msg)); + } + + private function createCircularReferenceException(string $id, array $path): ContainerExceptionInterface + { + return new ServiceCircularReferenceException($id, $path); } - private function formatAlternatives(array $alternatives = null, $separator = 'and') + private function formatAlternatives(array $alternatives = null, string $separator = 'and'): string { $format = '"%s"%s'; if (null === $alternatives) { diff --git a/civicrm/vendor/symfony/dependency-injection/ServiceSubscriberInterface.php b/civicrm/vendor/symfony/dependency-injection/ServiceSubscriberInterface.php index 10c238754421de2eedefbb1f2af90b09725ee86c..a3b6ba790718e85a2995673d33873613a2e1dd37 100644 --- a/civicrm/vendor/symfony/dependency-injection/ServiceSubscriberInterface.php +++ b/civicrm/vendor/symfony/dependency-injection/ServiceSubscriberInterface.php @@ -11,40 +11,13 @@ namespace Symfony\Component\DependencyInjection; +use Symfony\Contracts\Service\ServiceSubscriberInterface as BaseServiceSubscriberInterface; + /** - * A ServiceSubscriber exposes its dependencies via the static {@link getSubscribedServices} method. - * - * The getSubscribedServices method returns an array of service types required by such instances, - * optionally keyed by the service names used internally. Service types that start with an interrogation - * mark "?" are optional, while the other ones are mandatory service dependencies. - * - * The injected service locators SHOULD NOT allow access to any other services not specified by the method. - * - * It is expected that ServiceSubscriber instances consume PSR-11-based service locators internally. - * This interface does not dictate any injection method for these service locators, although constructor - * injection is recommended. + * {@inheritdoc} * - * @author Nicolas Grekas <p@tchwork.com> + * @deprecated since Symfony 4.2, use Symfony\Contracts\Service\ServiceSubscriberInterface instead. */ -interface ServiceSubscriberInterface +interface ServiceSubscriberInterface extends BaseServiceSubscriberInterface { - /** - * Returns an array of service types required by such instances, optionally keyed by the service names used internally. - * - * For mandatory dependencies: - * - * * ['logger' => 'Psr\Log\LoggerInterface'] means the objects use the "logger" name - * internally to fetch a service which must implement Psr\Log\LoggerInterface. - * * ['Psr\Log\LoggerInterface'] is a shortcut for - * * ['Psr\Log\LoggerInterface' => 'Psr\Log\LoggerInterface'] - * - * otherwise: - * - * * ['logger' => '?Psr\Log\LoggerInterface'] denotes an optional dependency - * * ['?Psr\Log\LoggerInterface'] is a shortcut for - * * ['Psr\Log\LoggerInterface' => '?Psr\Log\LoggerInterface'] - * - * @return array The required service types, optionally keyed by service names - */ - public static function getSubscribedServices(); } diff --git a/civicrm/vendor/symfony/dependency-injection/TypedReference.php b/civicrm/vendor/symfony/dependency-injection/TypedReference.php index aad78e806b6b61448c85b1036f3c3292df95ed9a..3ec4035b9f226c084a2db809da7a68c21e9e3b7b 100644 --- a/civicrm/vendor/symfony/dependency-injection/TypedReference.php +++ b/civicrm/vendor/symfony/dependency-injection/TypedReference.php @@ -19,19 +19,27 @@ namespace Symfony\Component\DependencyInjection; class TypedReference extends Reference { private $type; + private $name; private $requiringClass; /** - * @param string $id The service identifier - * @param string $type The PHP type of the identified service - * @param string $requiringClass The class of the service that requires the referenced type - * @param int $invalidBehavior The behavior when the service does not exist + * @param string $id The service identifier + * @param string $type The PHP type of the identified service + * @param int $invalidBehavior The behavior when the service does not exist + * @param string|null $name The name of the argument targeting the service */ - public function __construct($id, $type, $requiringClass = '', $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) + public function __construct(string $id, string $type, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $name = null) { + if (\is_string($invalidBehavior ?? '') || \is_int($name)) { + @trigger_error(sprintf('Passing the $requiringClass as 3rd argument for "%s()" is deprecated since Symfony 4.1. It should be removed, moving all following arguments 1 to the left.', __METHOD__), \E_USER_DEPRECATED); + + $this->requiringClass = $invalidBehavior; + $invalidBehavior = 3 < \func_num_args() ? func_get_arg(3) : ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + } else { + $this->name = $type === $id ? $name : null; + } parent::__construct($id, $invalidBehavior); $this->type = $type; - $this->requiringClass = $requiringClass; } public function getType() @@ -39,13 +47,28 @@ class TypedReference extends Reference return $this->type; } + public function getName(): ?string + { + return $this->name; + } + + /** + * @deprecated since Symfony 4.1 + */ public function getRequiringClass() { - return $this->requiringClass; + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1.', __METHOD__), \E_USER_DEPRECATED); + + return $this->requiringClass ?? ''; } + /** + * @deprecated since Symfony 4.1 + */ public function canBeAutoregistered() { + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1.', __METHOD__), \E_USER_DEPRECATED); + return $this->requiringClass && (false !== $i = strpos($this->type, '\\')) && 0 === strncasecmp($this->type, $this->requiringClass, 1 + $i); } } diff --git a/civicrm/vendor/symfony/dependency-injection/Variable.php b/civicrm/vendor/symfony/dependency-injection/Variable.php index 9654ee4ddc6d8a60d03120883538be03698d421e..21d33ebb28faf2f6d18dfd4ebc5f8bd2c6c7d69b 100644 --- a/civicrm/vendor/symfony/dependency-injection/Variable.php +++ b/civicrm/vendor/symfony/dependency-injection/Variable.php @@ -28,14 +28,14 @@ class Variable { private $name; - /** - * @param string $name - */ - public function __construct($name) + public function __construct(string $name) { $this->name = $name; } + /** + * @return string + */ public function __toString() { return $this->name; diff --git a/civicrm/vendor/symfony/dependency-injection/composer.json b/civicrm/vendor/symfony/dependency-injection/composer.json index eee41ce0221ca666d191890d56f30f6414171655..ab08cb1cd964c2f8298f5d13501d5842133063aa 100644 --- a/civicrm/vendor/symfony/dependency-injection/composer.json +++ b/civicrm/vendor/symfony/dependency-injection/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/dependency-injection", "type": "library", - "description": "Symfony DependencyInjection Component", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,13 +16,15 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": ">=7.1.3", + "psr/container": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2" }, "require-dev": { - "symfony/yaml": "~3.4|~4.0", - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0" + "symfony/yaml": "^4.4.26|^5.0", + "symfony/config": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/yaml": "", @@ -32,13 +34,14 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3|>=5.0", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "symfony/yaml": "<4.4.26" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" }, "autoload": { "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" }, diff --git a/civicrm/vendor/symfony/dependency-injection/phpunit.xml.dist b/civicrm/vendor/symfony/dependency-injection/phpunit.xml.dist deleted file mode 100644 index 21dee2a801afd464a4c8df82afc540e2781eccb1..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/dependency-injection/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony DependencyInjection Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Resources</directory> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/config/.gitignore b/civicrm/vendor/symfony/deprecation-contracts/.gitignore similarity index 100% rename from civicrm/vendor/symfony/config/.gitignore rename to civicrm/vendor/symfony/deprecation-contracts/.gitignore diff --git a/civicrm/vendor/symfony/deprecation-contracts/CHANGELOG.md b/civicrm/vendor/symfony/deprecation-contracts/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..7932e26132d319374a768a73230e78c12535987c --- /dev/null +++ b/civicrm/vendor/symfony/deprecation-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/civicrm/vendor/symfony/deprecation-contracts/LICENSE b/civicrm/vendor/symfony/deprecation-contracts/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..406242ff28554c50aa30f065a034902bf2bf340d --- /dev/null +++ b/civicrm/vendor/symfony/deprecation-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-2022 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/symfony/deprecation-contracts/README.md b/civicrm/vendor/symfony/deprecation-contracts/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4957933a6cc50402853ba29e6a7ce00d3e597470 --- /dev/null +++ b/civicrm/vendor/symfony/deprecation-contracts/README.md @@ -0,0 +1,26 @@ +Symfony Deprecation Contracts +============================= + +A generic function and convention to trigger deprecation notices. + +This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices. + +By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component, +the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments. + +The function requires at least 3 arguments: + - the name of the Composer package that is triggering the deprecation + - the version of the package that introduced the deprecation + - the message of the deprecation + - more arguments can be provided: they will be inserted in the message using `printf()` formatting + +Example: +```php +trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin'); +``` + +This will generate the following message: +`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` + +While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty +`function trigger_deprecation() {}` in your application. diff --git a/civicrm/vendor/symfony/deprecation-contracts/composer.json b/civicrm/vendor/symfony/deprecation-contracts/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..cc7cc12372f438aa7eab8ae2e1fc326c35f31451 --- /dev/null +++ b/civicrm/vendor/symfony/deprecation-contracts/composer.json @@ -0,0 +1,35 @@ +{ + "name": "symfony/deprecation-contracts", + "type": "library", + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/civicrm/vendor/symfony/deprecation-contracts/function.php b/civicrm/vendor/symfony/deprecation-contracts/function.php new file mode 100644 index 0000000000000000000000000000000000000000..d4371504a03d7b1ff8055ac7d4cdb3670adcff2f --- /dev/null +++ b/civicrm/vendor/symfony/deprecation-contracts/function.php @@ -0,0 +1,27 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('trigger_deprecation')) { + /** + * Triggers a silenced deprecation notice. + * + * @param string $package The name of the Composer package that is triggering the deprecation + * @param string $version The version of the package that introduced the deprecation + * @param string $message The message of the deprecation + * @param mixed ...$args Values to insert in the message using printf() formatting + * + * @author Nicolas Grekas <p@tchwork.com> + */ + function trigger_deprecation(string $package, string $version, string $message, ...$args): void + { + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); + } +} diff --git a/civicrm/vendor/symfony/dependency-injection/.gitignore b/civicrm/vendor/symfony/event-dispatcher-contracts/.gitignore similarity index 100% rename from civicrm/vendor/symfony/dependency-injection/.gitignore rename to civicrm/vendor/symfony/event-dispatcher-contracts/.gitignore diff --git a/civicrm/vendor/symfony/event-dispatcher-contracts/Event.php b/civicrm/vendor/symfony/event-dispatcher-contracts/Event.php new file mode 100644 index 0000000000000000000000000000000000000000..84f60f3ed0460ca1b1be1ba742b81c1a2a136e40 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher-contracts/Event.php @@ -0,0 +1,96 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\EventDispatcher; + +use Psr\EventDispatcher\StoppableEventInterface; + +if (interface_exists(StoppableEventInterface::class)) { + /** + * Event is the base class for classes containing event data. + * + * This class contains no event data. It is used by events that do not pass + * state information to an event handler when an event is raised. + * + * You can call the method stopPropagation() to abort the execution of + * further listeners in your event listener. + * + * @author Guilherme Blanco <guilhermeblanco@hotmail.com> + * @author Jonathan Wage <jonwage@gmail.com> + * @author Roman Borschel <roman@code-factory.org> + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + */ + class Event implements StoppableEventInterface + { + private $propagationStopped = false; + + /** + * Returns whether further event listeners should be triggered. + */ + public function isPropagationStopped(): bool + { + return $this->propagationStopped; + } + + /** + * Stops the propagation of the event to further event listeners. + * + * If multiple event listeners are connected to the same event, no + * further event listener will be triggered once any trigger calls + * stopPropagation(). + */ + public function stopPropagation(): void + { + $this->propagationStopped = true; + } + } +} else { + /** + * Event is the base class for classes containing event data. + * + * This class contains no event data. It is used by events that do not pass + * state information to an event handler when an event is raised. + * + * You can call the method stopPropagation() to abort the execution of + * further listeners in your event listener. + * + * @author Guilherme Blanco <guilhermeblanco@hotmail.com> + * @author Jonathan Wage <jonwage@gmail.com> + * @author Roman Borschel <roman@code-factory.org> + * @author Bernhard Schussek <bschussek@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + */ + class Event + { + private $propagationStopped = false; + + /** + * Returns whether further event listeners should be triggered. + */ + public function isPropagationStopped(): bool + { + return $this->propagationStopped; + } + + /** + * Stops the propagation of the event to further event listeners. + * + * If multiple event listeners are connected to the same event, no + * further event listener will be triggered once any trigger calls + * stopPropagation(). + */ + public function stopPropagation(): void + { + $this->propagationStopped = true; + } + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php b/civicrm/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..2d470af92006c4915440e95a6c90fedeb05b3f00 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php @@ -0,0 +1,58 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\EventDispatcher; + +use Psr\EventDispatcher\EventDispatcherInterface as PsrEventDispatcherInterface; + +if (interface_exists(PsrEventDispatcherInterface::class)) { + /** + * Allows providing hooks on domain-specific lifecycles by dispatching events. + */ + interface EventDispatcherInterface extends PsrEventDispatcherInterface + { + /** + * Dispatches an event to all registered listeners. + * + * For BC with Symfony 4, the $eventName argument is not declared explicitly on the + * signature of the method. Implementations that are not bound by this BC constraint + * MUST declare it explicitly, as allowed by PHP. + * + * @param object $event The event to pass to the event handlers/listeners + * @param string|null $eventName The name of the event to dispatch. If not supplied, + * the class of $event should be used instead. + * + * @return object The passed $event MUST be returned + */ + public function dispatch($event/*, string $eventName = null*/); + } +} else { + /** + * Allows providing hooks on domain-specific lifecycles by dispatching events. + */ + interface EventDispatcherInterface + { + /** + * Dispatches an event to all registered listeners. + * + * For BC with Symfony 4, the $eventName argument is not declared explicitly on the + * signature of the method. Implementations that are not bound by this BC constraint + * MUST declare it explicitly, as allowed by PHP. + * + * @param object $event The event to pass to the event handlers/listeners + * @param string|null $eventName The name of the event to dispatch. If not supplied, + * the class of $event should be used instead. + * + * @return object The passed $event MUST be returned + */ + public function dispatch($event/*, string $eventName = null*/); + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher-contracts/LICENSE b/civicrm/vendor/symfony/event-dispatcher-contracts/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..74cdc2dbf6dbec4aea949b7bd47e3ee1e8c421e7 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2022 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/symfony/event-dispatcher-contracts/README.md b/civicrm/vendor/symfony/event-dispatcher-contracts/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b1ab4c00ceae2b153571cb7f110afa14f0d37cd1 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher-contracts/README.md @@ -0,0 +1,9 @@ +Symfony EventDispatcher Contracts +================================= + +A set of abstractions extracted out of the Symfony components. + +Can be used to build on semantics that the Symfony components proved useful - and +that already have battle tested implementations. + +See https://github.com/symfony/contracts/blob/main/README.md for more information. diff --git a/civicrm/vendor/symfony/event-dispatcher-contracts/composer.json b/civicrm/vendor/symfony/event-dispatcher-contracts/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..9d4bd7bea7ab965890f861c809c60ebc8c860e43 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher-contracts/composer.json @@ -0,0 +1,38 @@ +{ + "name": "symfony/event-dispatcher-contracts", + "type": "library", + "description": "Generic abstractions related to dispatching event", + "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "autoload": { + "psr-4": { "Symfony\\Contracts\\EventDispatcher\\": "" } + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher/CHANGELOG.md b/civicrm/vendor/symfony/event-dispatcher/CHANGELOG.md index c6aa5389ac724812183ba3defea3e9466c2fca78..4a3ea066efd30e6c0cfa4b011da353f8998c63d5 100644 --- a/civicrm/vendor/symfony/event-dispatcher/CHANGELOG.md +++ b/civicrm/vendor/symfony/event-dispatcher/CHANGELOG.md @@ -1,24 +1,49 @@ CHANGELOG ========= +4.4.0 +----- + + * `AddEventAliasesPass` has been added, allowing applications and bundles to extend the event alias mapping used by `RegisterListenersPass`. + * Made the `event` attribute of the `kernel.event_listener` tag optional for FQCN events. + +4.3.0 +----- + + * The signature of the `EventDispatcherInterface::dispatch()` method should be updated to `dispatch($event, string $eventName = null)`, not doing so is deprecated + * deprecated the `Event` class, use `Symfony\Contracts\EventDispatcher\Event` instead + +4.1.0 +----- + + * added support for invokable event listeners tagged with `kernel.event_listener` by default + * The `TraceableEventDispatcher::getOrphanedEvents()` method has been added. + * The `TraceableEventDispatcherInterface` has been deprecated. + +4.0.0 +----- + + * removed the `ContainerAwareEventDispatcher` class + * added the `reset()` method to the `TraceableEventDispatcherInterface` + 3.4.0 ----- - * Implementing `TraceableEventDispatcherInterface` without the `reset()` method has been deprecated. + * Implementing `TraceableEventDispatcherInterface` without the `reset()` method has been deprecated. 3.3.0 ----- - * The ContainerAwareEventDispatcher class has been deprecated. Use EventDispatcher with closure factories instead. + * The ContainerAwareEventDispatcher class has been deprecated. Use EventDispatcher with closure factories instead. 3.0.0 ----- - * The method `getListenerPriority($eventName, $listener)` has been added to the - `EventDispatcherInterface`. - * The methods `Event::setDispatcher()`, `Event::getDispatcher()`, `Event::setName()` - and `Event::getName()` have been removed. - The event dispatcher and the event name are passed to the listener call. + * The method `getListenerPriority($eventName, $listener)` has been added to the + `EventDispatcherInterface`. + * The methods `Event::setDispatcher()`, `Event::getDispatcher()`, `Event::setName()` + and `Event::getName()` have been removed. + The event dispatcher and the event name are passed to the listener call. 2.5.0 ----- diff --git a/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php b/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php deleted file mode 100644 index cbb9b12a6a9c8618917068038a13aa7c175b95ee..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php +++ /dev/null @@ -1,198 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\EventDispatcher; - -use PHPUnit\Framework\MockObject\MockObject; -use Symfony\Component\DependencyInjection\ContainerInterface; - -/** - * Lazily loads listeners and subscribers from the dependency injection - * container. - * - * @author Fabien Potencier <fabien@symfony.com> - * @author Bernhard Schussek <bschussek@gmail.com> - * @author Jordan Alliot <jordan.alliot@gmail.com> - * - * @deprecated since 3.3, to be removed in 4.0. Use EventDispatcher with closure factories instead. - */ -class ContainerAwareEventDispatcher extends EventDispatcher -{ - private $container; - - /** - * The service IDs of the event listeners and subscribers. - */ - private $listenerIds = []; - - /** - * The services registered as listeners. - */ - private $listeners = []; - - public function __construct(ContainerInterface $container) - { - $this->container = $container; - - $class = static::class; - if ($this instanceof \PHPUnit_Framework_MockObject_MockObject || $this instanceof MockObject || $this instanceof \Prophecy\Doubler\DoubleInterface) { - $class = get_parent_class($class); - } - if (__CLASS__ !== $class) { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); - } - } - - /** - * Adds a service as event listener. - * - * @param string $eventName Event for which the listener is added - * @param array $callback The service ID of the listener service & the method - * name that has to be called - * @param int $priority The higher this value, the earlier an event listener - * will be triggered in the chain. - * Defaults to 0. - * - * @throws \InvalidArgumentException - */ - public function addListenerService($eventName, $callback, $priority = 0) - { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); - - if (!\is_array($callback) || 2 !== \count($callback)) { - throw new \InvalidArgumentException('Expected an ["service", "method"] argument.'); - } - - $this->listenerIds[$eventName][] = [$callback[0], $callback[1], $priority]; - } - - public function removeListener($eventName, $listener) - { - $this->lazyLoad($eventName); - - if (isset($this->listenerIds[$eventName])) { - foreach ($this->listenerIds[$eventName] as $i => list($serviceId, $method)) { - $key = $serviceId.'.'.$method; - if (isset($this->listeners[$eventName][$key]) && $listener === [$this->listeners[$eventName][$key], $method]) { - unset($this->listeners[$eventName][$key]); - if (empty($this->listeners[$eventName])) { - unset($this->listeners[$eventName]); - } - unset($this->listenerIds[$eventName][$i]); - if (empty($this->listenerIds[$eventName])) { - unset($this->listenerIds[$eventName]); - } - } - } - } - - parent::removeListener($eventName, $listener); - } - - /** - * {@inheritdoc} - */ - public function hasListeners($eventName = null) - { - if (null === $eventName) { - return $this->listenerIds || $this->listeners || parent::hasListeners(); - } - - if (isset($this->listenerIds[$eventName])) { - return true; - } - - return parent::hasListeners($eventName); - } - - /** - * {@inheritdoc} - */ - public function getListeners($eventName = null) - { - if (null === $eventName) { - foreach ($this->listenerIds as $serviceEventName => $args) { - $this->lazyLoad($serviceEventName); - } - } else { - $this->lazyLoad($eventName); - } - - return parent::getListeners($eventName); - } - - /** - * {@inheritdoc} - */ - public function getListenerPriority($eventName, $listener) - { - $this->lazyLoad($eventName); - - return parent::getListenerPriority($eventName, $listener); - } - - /** - * Adds a service as event subscriber. - * - * @param string $serviceId The service ID of the subscriber service - * @param string $class The service's class name (which must implement EventSubscriberInterface) - */ - public function addSubscriberService($serviceId, $class) - { - @trigger_error(sprintf('The %s class is deprecated since Symfony 3.3 and will be removed in 4.0. Use EventDispatcher with closure factories instead.', __CLASS__), \E_USER_DEPRECATED); - - foreach ($class::getSubscribedEvents() as $eventName => $params) { - if (\is_string($params)) { - $this->listenerIds[$eventName][] = [$serviceId, $params, 0]; - } elseif (\is_string($params[0])) { - $this->listenerIds[$eventName][] = [$serviceId, $params[0], isset($params[1]) ? $params[1] : 0]; - } else { - foreach ($params as $listener) { - $this->listenerIds[$eventName][] = [$serviceId, $listener[0], isset($listener[1]) ? $listener[1] : 0]; - } - } - } - } - - public function getContainer() - { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 as its class will be removed in 4.0. Inject the container or the services you need in your listeners/subscribers instead.', \E_USER_DEPRECATED); - - return $this->container; - } - - /** - * Lazily loads listeners for this event from the dependency injection - * container. - * - * @param string $eventName The name of the event to dispatch. The name of - * the event is the name of the method that is - * invoked on listeners. - */ - protected function lazyLoad($eventName) - { - if (isset($this->listenerIds[$eventName])) { - foreach ($this->listenerIds[$eventName] as list($serviceId, $method, $priority)) { - $listener = $this->container->get($serviceId); - - $key = $serviceId.'.'.$method; - if (!isset($this->listeners[$eventName][$key])) { - $this->addListener($eventName, [$listener, $method], $priority); - } elseif ($this->listeners[$eventName][$key] !== $listener) { - parent::removeListener($eventName, [$this->listeners[$eventName][$key], $method]); - $this->addListener($eventName, [$listener, $method], $priority); - } - - $this->listeners[$eventName][$key] = $listener; - } - } - } -} diff --git a/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php b/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php index 017459723d92d0bd5c9f317f48aa9b4020460b72..56116cf44f5cc57d08eb4861e3b524ef1d7a0554 100644 --- a/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php +++ b/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php @@ -11,11 +11,17 @@ namespace Symfony\Component\EventDispatcher\Debug; +use Psr\EventDispatcher\StoppableEventInterface; use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; +use Symfony\Component\EventDispatcher\LegacyEventProxy; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Stopwatch\Stopwatch; +use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; /** * Collects some data about event listeners. @@ -32,13 +38,18 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface private $callStack; private $dispatcher; private $wrappedListeners; + private $orphanedEvents; + private $requestStack; + private $currentRequestHash = ''; - public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $stopwatch, LoggerInterface $logger = null) + public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $stopwatch, LoggerInterface $logger = null, RequestStack $requestStack = null) { - $this->dispatcher = $dispatcher; + $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); $this->stopwatch = $stopwatch; $this->logger = $logger; $this->wrappedListeners = []; + $this->orphanedEvents = []; + $this->requestStack = $requestStack; } /** @@ -64,7 +75,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface { if (isset($this->wrappedListeners[$eventName])) { foreach ($this->wrappedListeners[$eventName] as $index => $wrappedListener) { - if ($wrappedListener->getWrappedListener() === $listener) { + if ($wrappedListener->getWrappedListener() === $listener || ($listener instanceof \Closure && $wrappedListener->getWrappedListener() == $listener)) { $listener = $wrappedListener; unset($this->wrappedListeners[$eventName][$index]); break; @@ -99,8 +110,8 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface // we might have wrapped listeners for the event (if called while dispatching) // in that case get the priority by wrapper if (isset($this->wrappedListeners[$eventName])) { - foreach ($this->wrappedListeners[$eventName] as $index => $wrappedListener) { - if ($wrappedListener->getWrappedListener() === $listener) { + foreach ($this->wrappedListeners[$eventName] as $wrappedListener) { + if ($wrappedListener->getWrappedListener() === $listener || ($listener instanceof \Closure && $wrappedListener->getWrappedListener() == $listener)) { return $this->dispatcher->getListenerPriority($eventName, $wrappedListener); } } @@ -119,37 +130,52 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} + * + * @param string|null $eventName */ - public function dispatch($eventName, Event $event = null) + public function dispatch($event/*, string $eventName = null*/) { if (null === $this->callStack) { $this->callStack = new \SplObjectStorage(); } - if (null === $event) { - $event = new Event(); + $currentRequestHash = $this->currentRequestHash = $this->requestStack && ($request = $this->requestStack->getCurrentRequest()) ? spl_object_hash($request) : ''; + $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; + + if (\is_object($event)) { + $eventName = $eventName ?? \get_class($event); + } else { + @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as first argument is deprecated since Symfony 4.3, pass it second and provide the event object first instead.', EventDispatcherInterface::class), \E_USER_DEPRECATED); + $swap = $event; + $event = $eventName ?? new Event(); + $eventName = $swap; + + if (!$event instanceof Event) { + throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an instance of "%s", "%s" given.', EventDispatcherInterface::class, Event::class, \is_object($event) ? \get_class($event) : \gettype($event))); + } } - if (null !== $this->logger && $event->isPropagationStopped()) { + if (null !== $this->logger && ($event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface) && $event->isPropagationStopped()) { $this->logger->debug(sprintf('The "%s" event is already stopped. No listeners have been called.', $eventName)); } $this->preProcess($eventName); try { - $this->preDispatch($eventName, $event); + $this->beforeDispatch($eventName, $event); try { $e = $this->stopwatch->start($eventName, 'section'); try { - $this->dispatcher->dispatch($eventName, $event); + $this->dispatcher->dispatch($event, $eventName); } finally { if ($e->isStarted()) { $e->stop(); } } } finally { - $this->postDispatch($eventName, $event); + $this->afterDispatch($eventName, $event); } } finally { + $this->currentRequestHash = $currentRequestHash; $this->postProcess($eventName); } @@ -158,18 +184,22 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} + * + * @param Request|null $request The request to get listeners for */ - public function getCalledListeners() + public function getCalledListeners(/* Request $request = null */) { if (null === $this->callStack) { return []; } + $hash = 1 <= \func_num_args() && null !== ($request = func_get_arg(0)) ? spl_object_hash($request) : null; $called = []; foreach ($this->callStack as $listener) { - list($eventName) = $this->callStack->getInfo(); - - $called[] = $listener->getInfo($eventName); + [$eventName, $requestHash] = $this->callStack->getInfo(); + if (null === $hash || $hash === $requestHash) { + $called[] = $listener->getInfo($eventName); + } } return $called; @@ -177,8 +207,10 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} + * + * @param Request|null $request The request to get listeners for */ - public function getNotCalledListeners() + public function getNotCalledListeners(/* Request $request = null */) { try { $allListeners = $this->getListeners(); @@ -191,11 +223,16 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface return []; } + $hash = 1 <= \func_num_args() && null !== ($request = func_get_arg(0)) ? spl_object_hash($request) : null; $calledListeners = []; if (null !== $this->callStack) { foreach ($this->callStack as $calledListener) { - $calledListeners[] = $calledListener->getWrappedListener(); + [, $requestHash] = $this->callStack->getInfo(); + + if (null === $hash || $hash === $requestHash) { + $calledListeners[] = $calledListener->getWrappedListener(); + } } } @@ -216,9 +253,27 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface return $notCalled; } + /** + * @param Request|null $request The request to get orphaned events for + */ + public function getOrphanedEvents(/* Request $request = null */): array + { + if (1 <= \func_num_args() && null !== $request = func_get_arg(0)) { + return $this->orphanedEvents[spl_object_hash($request)] ?? []; + } + + if (!$this->orphanedEvents) { + return []; + } + + return array_merge(...array_values($this->orphanedEvents)); + } + public function reset() { $this->callStack = null; + $this->orphanedEvents = []; + $this->currentRequestHash = ''; } /** @@ -231,42 +286,62 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface */ public function __call($method, $arguments) { - return \call_user_func_array([$this->dispatcher, $method], $arguments); + return $this->dispatcher->{$method}(...$arguments); } /** * Called before dispatching the event. * - * @param string $eventName The event name - * @param Event $event The event + * @param object $event */ - protected function preDispatch($eventName, Event $event) + protected function beforeDispatch(string $eventName, $event) { + $this->preDispatch($eventName, $event instanceof Event ? $event : new LegacyEventProxy($event)); } /** * Called after dispatching the event. * - * @param string $eventName The event name - * @param Event $event The event + * @param object $event + */ + protected function afterDispatch(string $eventName, $event) + { + $this->postDispatch($eventName, $event instanceof Event ? $event : new LegacyEventProxy($event)); + } + + /** + * @deprecated since Symfony 4.3, will be removed in 5.0, use beforeDispatch instead + */ + protected function preDispatch($eventName, Event $event) + { + } + + /** + * @deprecated since Symfony 4.3, will be removed in 5.0, use afterDispatch instead */ protected function postDispatch($eventName, Event $event) { } - private function preProcess($eventName) + private function preProcess(string $eventName) { + if (!$this->dispatcher->hasListeners($eventName)) { + $this->orphanedEvents[$this->currentRequestHash][] = $eventName; + + return; + } + foreach ($this->dispatcher->getListeners($eventName) as $listener) { $priority = $this->getListenerPriority($eventName, $listener); $wrappedListener = new WrappedListener($listener instanceof WrappedListener ? $listener->getWrappedListener() : $listener, null, $this->stopwatch, $this); $this->wrappedListeners[$eventName][] = $wrappedListener; $this->dispatcher->removeListener($eventName, $listener); $this->dispatcher->addListener($eventName, $wrappedListener, $priority); - $this->callStack->attach($wrappedListener, [$eventName]); + $this->callStack->attach($wrappedListener, [$eventName, $this->currentRequestHash]); } } - private function postProcess($eventName) + private function postProcess(string $eventName) { unset($this->wrappedListeners[$eventName]); $skipped = false; diff --git a/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php b/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php index f0212753be5918bce203b5cc1ab4b159e7869d41..4fedb9a413a3bd1fdbcbb83c276e5e889195d6d6 100644 --- a/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php +++ b/civicrm/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php @@ -12,25 +12,31 @@ namespace Symfony\Component\EventDispatcher\Debug; use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Contracts\Service\ResetInterface; /** - * @author Fabien Potencier <fabien@symfony.com> + * @deprecated since Symfony 4.1 * - * @method reset() Resets the trace. + * @author Fabien Potencier <fabien@symfony.com> */ -interface TraceableEventDispatcherInterface extends EventDispatcherInterface +interface TraceableEventDispatcherInterface extends EventDispatcherInterface, ResetInterface { /** * Gets the called listeners. * + * @param Request|null $request The request to get listeners for + * * @return array An array of called listeners */ - public function getCalledListeners(); + public function getCalledListeners(/* Request $request = null */); /** * Gets the not called listeners. * + * @param Request|null $request The request to get listeners for + * * @return array An array of not called listeners */ - public function getNotCalledListeners(); + public function getNotCalledListeners(/* Request $request = null */); } diff --git a/civicrm/vendor/symfony/event-dispatcher/Debug/WrappedListener.php b/civicrm/vendor/symfony/event-dispatcher/Debug/WrappedListener.php index de2b850953c3d2cd12d8fa9d489a163bd630a9fe..9b910e6677e05947adccf1cc2cee11632d3a61e5 100644 --- a/civicrm/vendor/symfony/event-dispatcher/Debug/WrappedListener.php +++ b/civicrm/vendor/symfony/event-dispatcher/Debug/WrappedListener.php @@ -11,17 +11,23 @@ namespace Symfony\Component\EventDispatcher\Debug; +use Psr\EventDispatcher\StoppableEventInterface; use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\LegacyEventProxy; use Symfony\Component\Stopwatch\Stopwatch; use Symfony\Component\VarDumper\Caster\ClassStub; +use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; /** * @author Fabien Potencier <fabien@symfony.com> + * + * @final since Symfony 4.3: the "Event" type-hint on __invoke() will be replaced by "object" in 5.0 */ class WrappedListener { private $listener; + private $optimizedListener; private $name; private $called; private $stoppedPropagation; @@ -32,9 +38,10 @@ class WrappedListener private $priority; private static $hasClassStub; - public function __construct($listener, $name, Stopwatch $stopwatch, EventDispatcherInterface $dispatcher = null) + public function __construct($listener, ?string $name, Stopwatch $stopwatch, EventDispatcherInterface $dispatcher = null) { $this->listener = $listener; + $this->optimizedListener = $listener instanceof \Closure ? $listener : (\is_callable($listener) ? \Closure::fromCallable($listener) : null); $this->stopwatch = $stopwatch; $this->dispatcher = $dispatcher; $this->called = false; @@ -45,7 +52,7 @@ class WrappedListener $this->pretty = $this->name.'::'.$listener[1]; } elseif ($listener instanceof \Closure) { $r = new \ReflectionFunction($listener); - if (false !== strpos($r->name, '{closure}')) { + if (str_contains($r->name, '{closure}')) { $this->pretty = $this->name = 'closure'; } elseif ($class = $r->getClosureScopeClass()) { $this->name = $class->name; @@ -105,6 +112,10 @@ class WrappedListener public function __invoke(Event $event, $eventName, EventDispatcherInterface $dispatcher) { + if ($event instanceof LegacyEventProxy) { + $event = $event->getEvent(); + } + $dispatcher = $this->dispatcher ?: $dispatcher; $this->called = true; @@ -112,13 +123,13 @@ class WrappedListener $e = $this->stopwatch->start($this->name, 'event_listener'); - \call_user_func($this->listener, $event, $eventName, $dispatcher); + ($this->optimizedListener ?? $this->listener)($event, $eventName, $dispatcher); if ($e->isStarted()) { $e->stop(); } - if ($event->isPropagationStopped()) { + if (($event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface) && $event->isPropagationStopped()) { $this->stoppedPropagation = true; } } diff --git a/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php b/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php new file mode 100644 index 0000000000000000000000000000000000000000..c4ea50f7868ed50e14ec1ea22954d71d8e14688e --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php @@ -0,0 +1,42 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\EventDispatcher\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; + +/** + * This pass allows bundles to extend the list of event aliases. + * + * @author Alexander M. Turek <me@derrabus.de> + */ +class AddEventAliasesPass implements CompilerPassInterface +{ + private $eventAliases; + private $eventAliasesParameter; + + public function __construct(array $eventAliases, string $eventAliasesParameter = 'event_dispatcher.event_aliases') + { + $this->eventAliases = $eventAliases; + $this->eventAliasesParameter = $eventAliasesParameter; + } + + public function process(ContainerBuilder $container): void + { + $eventAliases = $container->hasParameter($this->eventAliasesParameter) ? $container->getParameter($this->eventAliasesParameter) : []; + + $container->setParameter( + $this->eventAliasesParameter, + array_merge($eventAliases, $this->eventAliases) + ); + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php b/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php index 2951c1ee45aa85c4c08b8cb89ef5955969364a29..1c4e12ec86493f92684a28ed30736dceb84cbf7c 100644 --- a/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php +++ b/civicrm/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php @@ -16,8 +16,10 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\EventDispatcher\Event as LegacyEvent; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Contracts\EventDispatcher\Event; /** * Compiler pass to register tagged services for an event dispatcher. @@ -27,20 +29,17 @@ class RegisterListenersPass implements CompilerPassInterface protected $dispatcherService; protected $listenerTag; protected $subscriberTag; + protected $eventAliasesParameter; private $hotPathEvents = []; private $hotPathTagName; - /** - * @param string $dispatcherService Service name of the event dispatcher in processed container - * @param string $listenerTag Tag name used for listener - * @param string $subscriberTag Tag name used for subscribers - */ - public function __construct($dispatcherService = 'event_dispatcher', $listenerTag = 'kernel.event_listener', $subscriberTag = 'kernel.event_subscriber') + public function __construct(string $dispatcherService = 'event_dispatcher', string $listenerTag = 'kernel.event_listener', string $subscriberTag = 'kernel.event_subscriber', string $eventAliasesParameter = 'event_dispatcher.event_aliases') { $this->dispatcherService = $dispatcherService; $this->listenerTag = $listenerTag; $this->subscriberTag = $subscriberTag; + $this->eventAliasesParameter = $eventAliasesParameter; } public function setHotPathEvents(array $hotPathEvents, $tagName = 'container.hot_path') @@ -57,22 +56,39 @@ class RegisterListenersPass implements CompilerPassInterface return; } + $aliases = []; + + if ($container->hasParameter($this->eventAliasesParameter)) { + $aliases = $container->getParameter($this->eventAliasesParameter); + } + $definition = $container->findDefinition($this->dispatcherService); foreach ($container->findTaggedServiceIds($this->listenerTag, true) as $id => $events) { foreach ($events as $event) { - $priority = isset($event['priority']) ? $event['priority'] : 0; + $priority = $event['priority'] ?? 0; if (!isset($event['event'])) { - throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag)); + if ($container->getDefinition($id)->hasTag($this->subscriberTag)) { + continue; + } + + $event['method'] = $event['method'] ?? '__invoke'; + $event['event'] = $this->getEventFromTypeDeclaration($container, $id, $event['method']); } + $event['event'] = $aliases[$event['event']] ?? $event['event']; + if (!isset($event['method'])) { $event['method'] = 'on'.preg_replace_callback([ - '/(?<=\b)[a-z]/i', + '/(?<=\b|_)[a-z]/i', '/[^a-z0-9]/i', ], function ($matches) { return strtoupper($matches[0]); }, $event['event']); $event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']); + + if (null !== ($class = $container->getDefinition($id)->getClass()) && ($r = $container->getReflectionClass($class, false)) && !$r->hasMethod($event['method']) && $r->hasMethod('__invoke')) { + $event['method'] = '__invoke'; + } } $definition->addMethodCall('addListener', [$event['event'], [new ServiceClosureArgument(new Reference($id)), $event['method']], $priority]); @@ -99,6 +115,7 @@ class RegisterListenersPass implements CompilerPassInterface } $class = $r->name; + ExtractingEventDispatcher::$aliases = $aliases; ExtractingEventDispatcher::$subscriber = $class; $extractingDispatcher->addSubscriber($extractingDispatcher); foreach ($extractingDispatcher->listeners as $args) { @@ -110,8 +127,27 @@ class RegisterListenersPass implements CompilerPassInterface } } $extractingDispatcher->listeners = []; + ExtractingEventDispatcher::$aliases = []; } } + + private function getEventFromTypeDeclaration(ContainerBuilder $container, string $id, string $method): string + { + if ( + null === ($class = $container->getDefinition($id)->getClass()) + || !($r = $container->getReflectionClass($class, false)) + || !$r->hasMethod($method) + || 1 > ($m = $r->getMethod($method))->getNumberOfParameters() + || !($type = $m->getParameters()[0]->getType()) instanceof \ReflectionNamedType + || $type->isBuiltin() + || Event::class === ($name = $type->getName()) + || LegacyEvent::class === $name + ) { + throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag)); + } + + return $name; + } } /** @@ -121,6 +157,7 @@ class ExtractingEventDispatcher extends EventDispatcher implements EventSubscrib { public $listeners = []; + public static $aliases = []; public static $subscriber; public function addListener($eventName, $listener, $priority = 0) @@ -128,10 +165,14 @@ class ExtractingEventDispatcher extends EventDispatcher implements EventSubscrib $this->listeners[] = [$eventName, $listener[1], $priority]; } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { - $callback = [self::$subscriber, 'getSubscribedEvents']; + $events = []; + + foreach ([self::$subscriber, 'getSubscribedEvents']() as $eventName => $params) { + $events[self::$aliases[$eventName] ?? $eventName] = $params; + } - return $callback(); + return $events; } } diff --git a/civicrm/vendor/symfony/event-dispatcher/Event.php b/civicrm/vendor/symfony/event-dispatcher/Event.php index 9c56b2f55b8a70c8986de919fd3a8311f9f05dd7..307c4be5de0c2ff126834043eb4324b5c6fc92f3 100644 --- a/civicrm/vendor/symfony/event-dispatcher/Event.php +++ b/civicrm/vendor/symfony/event-dispatcher/Event.php @@ -12,32 +12,16 @@ namespace Symfony\Component\EventDispatcher; /** - * Event is the base class for classes containing event data. - * - * This class contains no event data. It is used by events that do not pass - * state information to an event handler when an event is raised. - * - * You can call the method stopPropagation() to abort the execution of - * further listeners in your event listener. - * - * @author Guilherme Blanco <guilhermeblanco@hotmail.com> - * @author Jonathan Wage <jonwage@gmail.com> - * @author Roman Borschel <roman@code-factory.org> - * @author Bernhard Schussek <bschussek@gmail.com> + * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead */ class Event { - /** - * @var bool Whether no further event listeners should be triggered - */ private $propagationStopped = false; /** - * Returns whether further event listeners should be triggered. - * - * @see Event::stopPropagation() - * * @return bool Whether propagation was already stopped for this event + * + * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead */ public function isPropagationStopped() { @@ -45,11 +29,7 @@ class Event } /** - * Stops the propagation of the event to further event listeners. - * - * If multiple event listeners are connected to the same event, no - * further event listener will be triggered once any trigger calls - * stopPropagation(). + * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead */ public function stopPropagation() { diff --git a/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php b/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php index 207790f06b0f9742c553fdd4caf11fd40b5a98db..4a8f6c6f121de08fd21b54346d063efc736d2ca0 100644 --- a/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php +++ b/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php @@ -11,6 +11,10 @@ namespace Symfony\Component\EventDispatcher; +use Psr\EventDispatcher\StoppableEventInterface; +use Symfony\Component\EventDispatcher\Debug\WrappedListener; +use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; + /** * The EventDispatcherInterface is the central point of Symfony's event listener system. * @@ -30,18 +34,43 @@ class EventDispatcher implements EventDispatcherInterface { private $listeners = []; private $sorted = []; + private $optimized; + + public function __construct() + { + if (__CLASS__ === static::class) { + $this->optimized = []; + } + } /** * {@inheritdoc} + * + * @param string|null $eventName */ - public function dispatch($eventName, Event $event = null) + public function dispatch($event/*, string $eventName = null*/) { - if (null === $event) { - $event = new Event(); + $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; + + if (\is_object($event)) { + $eventName = $eventName ?? \get_class($event); + } elseif (\is_string($event) && (null === $eventName || $eventName instanceof ContractsEvent || $eventName instanceof Event)) { + @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as the first argument is deprecated since Symfony 4.3, pass it as the second argument and provide the event object as the first argument instead.', EventDispatcherInterface::class), \E_USER_DEPRECATED); + $swap = $event; + $event = $eventName ?? new Event(); + $eventName = $swap; + } else { + throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an object, "%s" given.', EventDispatcherInterface::class, \is_object($event) ? \get_class($event) : \gettype($event))); } - if ($listeners = $this->getListeners($eventName)) { - $this->doDispatch($listeners, $eventName, $event); + if (null !== $this->optimized && null !== $eventName) { + $listeners = $this->optimized[$eventName] ?? (empty($this->listeners[$eventName]) ? [] : $this->optimizeListeners($eventName)); + } else { + $listeners = $this->getListeners($eventName); + } + + if ($listeners) { + $this->callListeners($listeners, $eventName, $event); } return $event; @@ -82,17 +111,18 @@ class EventDispatcher implements EventDispatcherInterface return null; } - if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) { + if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure && 2 >= \count($listener)) { $listener[0] = $listener[0](); + $listener[1] = $listener[1] ?? '__invoke'; } - foreach ($this->listeners[$eventName] as $priority => $listeners) { - foreach ($listeners as $k => $v) { - if ($v !== $listener && \is_array($v) && isset($v[0]) && $v[0] instanceof \Closure) { + foreach ($this->listeners[$eventName] as $priority => &$listeners) { + foreach ($listeners as &$v) { + if ($v !== $listener && \is_array($v) && isset($v[0]) && $v[0] instanceof \Closure && 2 >= \count($v)) { $v[0] = $v[0](); - $this->listeners[$eventName][$priority][$k] = $v; + $v[1] = $v[1] ?? '__invoke'; } - if ($v === $listener) { + if ($v === $listener || ($listener instanceof \Closure && $v == $listener)) { return $priority; } } @@ -125,7 +155,7 @@ class EventDispatcher implements EventDispatcherInterface public function addListener($eventName, $listener, $priority = 0) { $this->listeners[$eventName][$priority][] = $listener; - unset($this->sorted[$eventName]); + unset($this->sorted[$eventName], $this->optimized[$eventName]); } /** @@ -137,25 +167,23 @@ class EventDispatcher implements EventDispatcherInterface return; } - if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) { + if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure && 2 >= \count($listener)) { $listener[0] = $listener[0](); + $listener[1] = $listener[1] ?? '__invoke'; } - foreach ($this->listeners[$eventName] as $priority => $listeners) { - foreach ($listeners as $k => $v) { - if ($v !== $listener && \is_array($v) && isset($v[0]) && $v[0] instanceof \Closure) { + foreach ($this->listeners[$eventName] as $priority => &$listeners) { + foreach ($listeners as $k => &$v) { + if ($v !== $listener && \is_array($v) && isset($v[0]) && $v[0] instanceof \Closure && 2 >= \count($v)) { $v[0] = $v[0](); + $v[1] = $v[1] ?? '__invoke'; } - if ($v === $listener) { - unset($listeners[$k], $this->sorted[$eventName]); - } else { - $listeners[$k] = $v; + if ($v === $listener || ($listener instanceof \Closure && $v == $listener)) { + unset($listeners[$k], $this->sorted[$eventName], $this->optimized[$eventName]); } } - if ($listeners) { - $this->listeners[$eventName][$priority] = $listeners; - } else { + if (!$listeners) { unset($this->listeners[$eventName][$priority]); } } @@ -170,10 +198,10 @@ class EventDispatcher implements EventDispatcherInterface if (\is_string($params)) { $this->addListener($eventName, [$subscriber, $params]); } elseif (\is_string($params[0])) { - $this->addListener($eventName, [$subscriber, $params[0]], isset($params[1]) ? $params[1] : 0); + $this->addListener($eventName, [$subscriber, $params[0]], $params[1] ?? 0); } else { foreach ($params as $listener) { - $this->addListener($eventName, [$subscriber, $listener[0]], isset($listener[1]) ? $listener[1] : 0); + $this->addListener($eventName, [$subscriber, $listener[0]], $listener[1] ?? 0); } } } @@ -203,7 +231,29 @@ class EventDispatcher implements EventDispatcherInterface * * @param callable[] $listeners The event listeners * @param string $eventName The name of the event to dispatch - * @param Event $event The event object to pass to the event handlers/listeners + * @param object $event The event object to pass to the event handlers/listeners + */ + protected function callListeners(iterable $listeners, string $eventName, $event) + { + if ($event instanceof Event) { + $this->doDispatch($listeners, $eventName, $event); + + return; + } + + $stoppable = $event instanceof ContractsEvent || $event instanceof StoppableEventInterface; + + foreach ($listeners as $listener) { + if ($stoppable && $event->isPropagationStopped()) { + break; + } + // @deprecated: the ternary operator is part of a BC layer and should be removed in 5.0 + $listener($listener instanceof WrappedListener ? new LegacyEventProxy($event) : $event, $eventName, $this); + } + } + + /** + * @deprecated since Symfony 4.3, use callListeners() instead */ protected function doDispatch($listeners, $eventName, Event $event) { @@ -211,28 +261,54 @@ class EventDispatcher implements EventDispatcherInterface if ($event->isPropagationStopped()) { break; } - \call_user_func($listener, $event, $eventName, $this); + $listener($event, $eventName, $this); } } /** * Sorts the internal list of listeners for the given event by priority. - * - * @param string $eventName The name of the event */ - private function sortListeners($eventName) + private function sortListeners(string $eventName) { krsort($this->listeners[$eventName]); $this->sorted[$eventName] = []; - foreach ($this->listeners[$eventName] as $priority => $listeners) { - foreach ($listeners as $k => $listener) { - if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) { + foreach ($this->listeners[$eventName] as &$listeners) { + foreach ($listeners as $k => &$listener) { + if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure && 2 >= \count($listener)) { $listener[0] = $listener[0](); - $this->listeners[$eventName][$priority][$k] = $listener; + $listener[1] = $listener[1] ?? '__invoke'; } $this->sorted[$eventName][] = $listener; } } } + + /** + * Optimizes the internal list of listeners for the given event by priority. + */ + private function optimizeListeners(string $eventName): array + { + krsort($this->listeners[$eventName]); + $this->optimized[$eventName] = []; + + foreach ($this->listeners[$eventName] as &$listeners) { + foreach ($listeners as &$listener) { + $closure = &$this->optimized[$eventName][]; + if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure && 2 >= \count($listener)) { + $closure = static function (...$args) use (&$listener, &$closure) { + if ($listener[0] instanceof \Closure) { + $listener[0] = $listener[0](); + $listener[1] = $listener[1] ?? '__invoke'; + } + ($closure = \Closure::fromCallable($listener))(...$args); + }; + } else { + $closure = $listener instanceof \Closure || $listener instanceof WrappedListener ? $listener : \Closure::fromCallable($listener); + } + } + } + + return $this->optimized[$eventName]; + } } diff --git a/civicrm/vendor/symfony/event-dispatcher/EventDispatcherInterface.php b/civicrm/vendor/symfony/event-dispatcher/EventDispatcherInterface.php index bde753a12fca0583ff7fdb71f3905bb8c20a1bfd..ceaa62aeb0472101e83e561634f8a67bd4ca89ad 100644 --- a/civicrm/vendor/symfony/event-dispatcher/EventDispatcherInterface.php +++ b/civicrm/vendor/symfony/event-dispatcher/EventDispatcherInterface.php @@ -11,6 +11,8 @@ namespace Symfony\Component\EventDispatcher; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as ContractsEventDispatcherInterface; + /** * The EventDispatcherInterface is the central point of Symfony's event listener system. * Listeners are registered on the manager and events are dispatched through the @@ -18,21 +20,8 @@ namespace Symfony\Component\EventDispatcher; * * @author Bernhard Schussek <bschussek@gmail.com> */ -interface EventDispatcherInterface +interface EventDispatcherInterface extends ContractsEventDispatcherInterface { - /** - * Dispatches an event to all registered listeners. - * - * @param string $eventName The name of the event to dispatch. The name of - * the event is the name of the method that is - * invoked on listeners. - * @param Event|null $event The event to pass to the event handlers/listeners - * If not supplied, an empty Event instance is created - * - * @return Event - */ - public function dispatch($eventName, Event $event = null); - /** * Adds an event listener that listens on the specified events. * diff --git a/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php b/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php index 741590b1bf3a3d8971ebbc5dc2985aad5ae1f8d1..a0fc96dfe2aff1dc6bf0b48d8836a67170c6b925 100644 --- a/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php +++ b/civicrm/vendor/symfony/event-dispatcher/EventSubscriberInterface.php @@ -43,7 +43,7 @@ interface EventSubscriberInterface * The code must not depend on runtime state as it will only be called at compile time. * All logic depending on runtime state must be put into the individual methods handling the events. * - * @return array The event names to listen to + * @return array<string, mixed> The event names to listen to */ public static function getSubscribedEvents(); } diff --git a/civicrm/vendor/symfony/event-dispatcher/GenericEvent.php b/civicrm/vendor/symfony/event-dispatcher/GenericEvent.php index f005e3a3db0762e55c1274b59b56d3cb0035e8c1..23333bc21284fb4bf84f7ad7073f7d732475d869 100644 --- a/civicrm/vendor/symfony/event-dispatcher/GenericEvent.php +++ b/civicrm/vendor/symfony/event-dispatcher/GenericEvent.php @@ -123,6 +123,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * * @throws \InvalidArgumentException if key does not exist in $this->args */ + #[\ReturnTypeWillChange] public function offsetGet($key) { return $this->getArgument($key); @@ -133,7 +134,10 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * * @param string $key Array key to set * @param mixed $value Value + * + * @return void */ + #[\ReturnTypeWillChange] public function offsetSet($key, $value) { $this->setArgument($key, $value); @@ -143,7 +147,10 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * ArrayAccess for unset argument. * * @param string $key Array key + * + * @return void */ + #[\ReturnTypeWillChange] public function offsetUnset($key) { if ($this->hasArgument($key)) { @@ -158,6 +165,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * * @return bool */ + #[\ReturnTypeWillChange] public function offsetExists($key) { return $this->hasArgument($key); @@ -168,6 +176,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * * @return \ArrayIterator */ + #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->arguments); diff --git a/civicrm/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php b/civicrm/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php index b3cf56c502dba3a7f80fea3241b766024348c3d7..75a7d7318187b41766e6bb4e56800d0a249c9ecf 100644 --- a/civicrm/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php +++ b/civicrm/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php @@ -22,15 +22,26 @@ class ImmutableEventDispatcher implements EventDispatcherInterface public function __construct(EventDispatcherInterface $dispatcher) { - $this->dispatcher = $dispatcher; + $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); } /** * {@inheritdoc} + * + * @param string|null $eventName */ - public function dispatch($eventName, Event $event = null) + public function dispatch($event/*, string $eventName = null*/) { - return $this->dispatcher->dispatch($eventName, $event); + $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; + + if (is_scalar($event)) { + // deprecated + $swap = $event; + $event = $eventName ?? new Event(); + $eventName = $swap; + } + + return $this->dispatcher->dispatch($event, $eventName); } /** diff --git a/civicrm/vendor/symfony/event-dispatcher/LICENSE b/civicrm/vendor/symfony/event-dispatcher/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/event-dispatcher/LICENSE +++ b/civicrm/vendor/symfony/event-dispatcher/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php b/civicrm/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php new file mode 100644 index 0000000000000000000000000000000000000000..8ee6cba1b5112ca9805881b457efcad5afaa4b86 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php @@ -0,0 +1,147 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\EventDispatcher; + +use Psr\EventDispatcher\StoppableEventInterface; +use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as ContractsEventDispatcherInterface; + +/** + * A helper class to provide BC/FC with the legacy signature of EventDispatcherInterface::dispatch(). + * + * This class should be deprecated in Symfony 5.1 + * + * @author Nicolas Grekas <p@tchwork.com> + */ +final class LegacyEventDispatcherProxy implements EventDispatcherInterface +{ + private $dispatcher; + + public static function decorate(?ContractsEventDispatcherInterface $dispatcher): ?ContractsEventDispatcherInterface + { + if (null === $dispatcher) { + return null; + } + $r = new \ReflectionMethod($dispatcher, 'dispatch'); + $param2 = $r->getParameters()[1] ?? null; + + if (!$param2 || !$param2->hasType() || $param2->getType()->isBuiltin()) { + return $dispatcher; + } + + @trigger_error(sprintf('The signature of the "%s::dispatch()" method should be updated to "dispatch($event, string $eventName = null)", not doing so is deprecated since Symfony 4.3.', $r->class), \E_USER_DEPRECATED); + + $self = new self(); + $self->dispatcher = $dispatcher; + + return $self; + } + + /** + * {@inheritdoc} + * + * @param string|null $eventName + * + * @return object + */ + public function dispatch($event/*, string $eventName = null*/) + { + $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; + + if (\is_object($event)) { + $eventName = $eventName ?? \get_class($event); + } elseif (\is_string($event) && (null === $eventName || $eventName instanceof ContractsEvent || $eventName instanceof Event)) { + @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as the first argument is deprecated since Symfony 4.3, pass it as the second argument and provide the event object as the first argument instead.', ContractsEventDispatcherInterface::class), \E_USER_DEPRECATED); + $swap = $event; + $event = $eventName ?? new Event(); + $eventName = $swap; + } else { + throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an object, "%s" given.', ContractsEventDispatcherInterface::class, \is_object($event) ? \get_class($event) : \gettype($event))); + } + + $listeners = $this->getListeners($eventName); + $stoppable = $event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface; + + foreach ($listeners as $listener) { + if ($stoppable && $event->isPropagationStopped()) { + break; + } + $listener($event, $eventName, $this); + } + + return $event; + } + + /** + * {@inheritdoc} + */ + public function addListener($eventName, $listener, $priority = 0) + { + return $this->dispatcher->addListener($eventName, $listener, $priority); + } + + /** + * {@inheritdoc} + */ + public function addSubscriber(EventSubscriberInterface $subscriber) + { + return $this->dispatcher->addSubscriber($subscriber); + } + + /** + * {@inheritdoc} + */ + public function removeListener($eventName, $listener) + { + return $this->dispatcher->removeListener($eventName, $listener); + } + + /** + * {@inheritdoc} + */ + public function removeSubscriber(EventSubscriberInterface $subscriber) + { + return $this->dispatcher->removeSubscriber($subscriber); + } + + /** + * {@inheritdoc} + */ + public function getListeners($eventName = null): array + { + return $this->dispatcher->getListeners($eventName); + } + + /** + * {@inheritdoc} + */ + public function getListenerPriority($eventName, $listener): ?int + { + return $this->dispatcher->getListenerPriority($eventName, $listener); + } + + /** + * {@inheritdoc} + */ + public function hasListeners($eventName = null): bool + { + return $this->dispatcher->hasListeners($eventName); + } + + /** + * Proxies all method calls to the original event dispatcher. + */ + public function __call($method, $arguments) + { + return $this->dispatcher->{$method}(...$arguments); + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher/LegacyEventProxy.php b/civicrm/vendor/symfony/event-dispatcher/LegacyEventProxy.php new file mode 100644 index 0000000000000000000000000000000000000000..45ee251d6a98dc2450fa77186528455811ce8287 --- /dev/null +++ b/civicrm/vendor/symfony/event-dispatcher/LegacyEventProxy.php @@ -0,0 +1,62 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\EventDispatcher; + +use Psr\EventDispatcher\StoppableEventInterface; +use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; + +/** + * @internal to be removed in 5.0. + */ +final class LegacyEventProxy extends Event +{ + private $event; + + /** + * @param object $event + */ + public function __construct($event) + { + $this->event = $event; + } + + /** + * @return object $event + */ + public function getEvent() + { + return $this->event; + } + + public function isPropagationStopped(): bool + { + if (!$this->event instanceof ContractsEvent && !$this->event instanceof StoppableEventInterface) { + return false; + } + + return $this->event->isPropagationStopped(); + } + + public function stopPropagation() + { + if (!$this->event instanceof ContractsEvent) { + return; + } + + $this->event->stopPropagation(); + } + + public function __call($name, $args) + { + return $this->event->{$name}(...$args); + } +} diff --git a/civicrm/vendor/symfony/event-dispatcher/README.md b/civicrm/vendor/symfony/event-dispatcher/README.md index e0d38eed017f8f46eac131d33e05ac2bdac4929b..dcdb68d218115930279b622e813932b10f4a7fda 100644 --- a/civicrm/vendor/symfony/event-dispatcher/README.md +++ b/civicrm/vendor/symfony/event-dispatcher/README.md @@ -8,8 +8,8 @@ them. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/event_dispatcher.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/event_dispatcher.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/event-dispatcher/composer.json b/civicrm/vendor/symfony/event-dispatcher/composer.json index 408022f6bf3e45ad2a026622ab592a5aef56f3f8..55c2716a63bd1d86cbfbb928585f4d38e46480f7 100644 --- a/civicrm/vendor/symfony/event-dispatcher/composer.json +++ b/civicrm/vendor/symfony/event-dispatcher/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/event-dispatcher", "type": "library", - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,18 +16,26 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "psr/log": "~1.0" + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "psr/log": "^1|^2|^3" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "suggest": { "symfony/dependency-injection": "", diff --git a/civicrm/vendor/symfony/event-dispatcher/phpunit.xml.dist b/civicrm/vendor/symfony/event-dispatcher/phpunit.xml.dist deleted file mode 100644 index f2eb1692cdbbab8633d66aa8b109e017821ed3d8..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/event-dispatcher/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony EventDispatcher Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Resources</directory> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/filesystem/.gitignore b/civicrm/vendor/symfony/filesystem/.gitignore deleted file mode 100644 index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/filesystem/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/ -composer.lock -phpunit.xml diff --git a/civicrm/vendor/symfony/filesystem/CHANGELOG.md b/civicrm/vendor/symfony/filesystem/CHANGELOG.md index d01f5f45e1a7dbd03323e3ef5565cf049f0cbe1d..0b633ef2a7726fb7b4120633a990ff2a74eaa676 100644 --- a/civicrm/vendor/symfony/filesystem/CHANGELOG.md +++ b/civicrm/vendor/symfony/filesystem/CHANGELOG.md @@ -1,6 +1,23 @@ CHANGELOG ========= +4.4.0 +----- + + * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0 + +4.3.0 +----- + + * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0 + * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0 + +4.0.0 +----- + + * removed `LockHandler` + * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed. + 3.4.0 ----- diff --git a/civicrm/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/civicrm/vendor/symfony/filesystem/Exception/ExceptionInterface.php index 8f4f10aac70925334ddb7a14ab3ee79cd19de680..fc438d9f313853eada7be7a3a7afc2fc898ec7bf 100644 --- a/civicrm/vendor/symfony/filesystem/Exception/ExceptionInterface.php +++ b/civicrm/vendor/symfony/filesystem/Exception/ExceptionInterface.php @@ -16,6 +16,6 @@ namespace Symfony\Component\Filesystem\Exception; * * @author Romain Neutron <imprec@gmail.com> */ -interface ExceptionInterface +interface ExceptionInterface extends \Throwable { } diff --git a/civicrm/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/civicrm/vendor/symfony/filesystem/Exception/FileNotFoundException.php index bcc8fe81fcef4159ef6042cb1bd023109f7e26c6..48b6408095a13f524f47cadd5347934ad807a3bc 100644 --- a/civicrm/vendor/symfony/filesystem/Exception/FileNotFoundException.php +++ b/civicrm/vendor/symfony/filesystem/Exception/FileNotFoundException.php @@ -19,7 +19,7 @@ namespace Symfony\Component\Filesystem\Exception; */ class FileNotFoundException extends IOException { - public function __construct($message = null, $code = 0, \Exception $previous = null, $path = null) + public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null) { if (null === $message) { if (null === $path) { diff --git a/civicrm/vendor/symfony/filesystem/Exception/IOException.php b/civicrm/vendor/symfony/filesystem/Exception/IOException.php index 144e0e602bdfe15d9ba0268b3c55e775f058f8ab..fea26e4ddc40c87e2f43f031bc073784a3eb6dad 100644 --- a/civicrm/vendor/symfony/filesystem/Exception/IOException.php +++ b/civicrm/vendor/symfony/filesystem/Exception/IOException.php @@ -22,7 +22,7 @@ class IOException extends \RuntimeException implements IOExceptionInterface { private $path; - public function __construct($message, $code = 0, \Exception $previous = null, $path = null) + public function __construct(string $message, int $code = 0, \Throwable $previous = null, string $path = null) { $this->path = $path; diff --git a/civicrm/vendor/symfony/filesystem/Exception/InvalidArgumentException.php b/civicrm/vendor/symfony/filesystem/Exception/InvalidArgumentException.php new file mode 100644 index 0000000000000000000000000000000000000000..abadc200297635622b72635608b02ec9ce6e5c9a --- /dev/null +++ b/civicrm/vendor/symfony/filesystem/Exception/InvalidArgumentException.php @@ -0,0 +1,19 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Filesystem\Exception; + +/** + * @author Christian Flothmann <christian.flothmann@sensiolabs.de> + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/civicrm/vendor/symfony/filesystem/Filesystem.php b/civicrm/vendor/symfony/filesystem/Filesystem.php index 96b2e96009f43563f3ade23e360b6fa24a9d760b..fd1dbf39b2e06f3be866dfd5a04e1eeddb9bbc9f 100644 --- a/civicrm/vendor/symfony/filesystem/Filesystem.php +++ b/civicrm/vendor/symfony/filesystem/Filesystem.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Filesystem; use Symfony\Component\Filesystem\Exception\FileNotFoundException; +use Symfony\Component\Filesystem\Exception\InvalidArgumentException; use Symfony\Component\Filesystem\Exception\IOException; /** @@ -58,7 +59,7 @@ class Filesystem } // Stream context created to allow files overwrite when using FTP stream wrapper - disabled by default - if (false === $target = @fopen($targetFile, 'w', null, stream_context_create(['ftp' => ['overwrite' => true]]))) { + if (false === $target = @fopen($targetFile, 'w', false, stream_context_create(['ftp' => ['overwrite' => true]]))) { throw new IOException(sprintf('Failed to copy "%s" to "%s" because target file could not be opened for writing.', $originFile, $targetFile), 0, null, $originFile); } @@ -179,7 +180,7 @@ class Filesystem if (!self::box('rmdir', $file) && file_exists($file)) { throw new IOException(sprintf('Failed to remove directory "%s": ', $file).self::$lastError); } - } elseif (!self::box('unlink', $file) && (false !== strpos(self::$lastError, 'Permission denied') || file_exists($file))) { + } elseif (!self::box('unlink', $file) && (str_contains(self::$lastError, 'Permission denied') || file_exists($file))) { throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError); } } @@ -250,7 +251,7 @@ class Filesystem $this->chgrp(new \FilesystemIterator($file), $group, true); } if (is_link($file) && \function_exists('lchgrp')) { - if (true !== @lchgrp($file, $group) || (\defined('HHVM_VERSION') && !posix_getgrnam($group))) { + if (true !== @lchgrp($file, $group)) { throw new IOException(sprintf('Failed to chgrp file "%s".', $file), 0, null, $file); } } else { @@ -293,13 +294,9 @@ class Filesystem /** * Tells whether a file exists and is readable. * - * @param string $filename Path to the file - * - * @return bool - * * @throws IOException When windows path is longer than 258 characters */ - private function isReadable($filename) + private function isReadable(string $filename): bool { $maxPathLength = \PHP_MAXPATHLEN - 2; @@ -321,6 +318,8 @@ class Filesystem */ public function symlink($originDir, $targetDir, $copyOnWindows = false) { + self::assertFunctionExists('symlink'); + if ('\\' === \DIRECTORY_SEPARATOR) { $originDir = strtr($originDir, '/', '\\'); $targetDir = strtr($targetDir, '/', '\\'); @@ -357,6 +356,8 @@ class Filesystem */ public function hardlink($originFile, $targetFiles) { + self::assertFunctionExists('link'); + if (!$this->exists($originFile)) { throw new FileNotFoundException(null, 0, null, $originFile); } @@ -380,14 +381,12 @@ class Filesystem } /** - * @param string $origin - * @param string $target * @param string $linkType Name of the link type, typically 'symbolic' or 'hard' */ - private function linkException($origin, $target, $linkType) + private function linkException(string $origin, string $target, string $linkType) { if (self::$lastError) { - if ('\\' === \DIRECTORY_SEPARATOR && false !== strpos(self::$lastError, 'error code(1314)')) { + if ('\\' === \DIRECTORY_SEPARATOR && str_contains(self::$lastError, 'error code(1314)')) { throw new IOException(sprintf('Unable to create "%s" link due to error code 1314: \'A required privilege is not held by the client\'. Do you have the required Administrator-rights?', $linkType), 0, null, $target); } } @@ -421,14 +420,14 @@ class Filesystem return null; } - if ('\\' === \DIRECTORY_SEPARATOR) { + if ('\\' === \DIRECTORY_SEPARATOR && \PHP_VERSION_ID < 70410) { $path = readlink($path); } return realpath($path); } - if ('\\' === \DIRECTORY_SEPARATOR) { + if ('\\' === \DIRECTORY_SEPARATOR && \PHP_VERSION_ID < 70400) { return realpath($path); } @@ -445,8 +444,12 @@ class Filesystem */ public function makePathRelative($endPath, $startPath) { - if (!$this->isAbsolutePath($endPath) || !$this->isAbsolutePath($startPath)) { - @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); + if (!$this->isAbsolutePath($startPath)) { + throw new InvalidArgumentException(sprintf('The start path "%s" is not absolute.', $startPath)); + } + + if (!$this->isAbsolutePath($endPath)) { + throw new InvalidArgumentException(sprintf('The end path "%s" is not absolute.', $endPath)); } // Normalize separators on Windows @@ -461,11 +464,11 @@ class Filesystem : [$path, null]; }; - $splitPath = function ($path, $absolute) { + $splitPath = function ($path) { $result = []; foreach (explode('/', trim($path, '/')) as $segment) { - if ('..' === $segment && ($absolute || \count($result))) { + if ('..' === $segment) { array_pop($result); } elseif ('.' !== $segment && '' !== $segment) { $result[] = $segment; @@ -475,11 +478,11 @@ class Filesystem return $result; }; - list($endPath, $endDriveLetter) = $splitDriveLetter($endPath); - list($startPath, $startDriveLetter) = $splitDriveLetter($startPath); + [$endPath, $endDriveLetter] = $splitDriveLetter($endPath); + [$startPath, $startDriveLetter] = $splitDriveLetter($startPath); - $startPathArr = $splitPath($startPath, static::isAbsolutePath($startPath)); - $endPathArr = $splitPath($endPath, static::isAbsolutePath($endPath)); + $startPathArr = $splitPath($startPath); + $endPathArr = $splitPath($endPath); if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) { // End path is on another drive, so no relative path exists @@ -535,6 +538,10 @@ class Filesystem $originDir = rtrim($originDir, '/\\'); $originDirLen = \strlen($originDir); + if (!$this->exists($originDir)) { + throw new IOException(sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir); + } + // Iterate in destination folder to remove obsolete entries if ($this->exists($targetDir) && isset($options['delete']) && $options['delete']) { $deleteIterator = $iterator; @@ -551,41 +558,32 @@ class Filesystem } } - $copyOnWindows = false; - if (isset($options['copy_on_windows'])) { - $copyOnWindows = $options['copy_on_windows']; - } + $copyOnWindows = $options['copy_on_windows'] ?? false; if (null === $iterator) { $flags = $copyOnWindows ? \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS : \FilesystemIterator::SKIP_DOTS; $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($originDir, $flags), \RecursiveIteratorIterator::SELF_FIRST); } - if ($this->exists($originDir)) { - $this->mkdir($targetDir); - } + $this->mkdir($targetDir); + $filesCreatedWhileMirroring = []; foreach ($iterator as $file) { + if ($file->getPathname() === $targetDir || $file->getRealPath() === $targetDir || isset($filesCreatedWhileMirroring[$file->getRealPath()])) { + continue; + } + $target = $targetDir.substr($file->getPathname(), $originDirLen); + $filesCreatedWhileMirroring[$target] = true; - if ($copyOnWindows) { - if (is_file($file)) { - $this->copy($file, $target, isset($options['override']) ? $options['override'] : false); - } elseif (is_dir($file)) { - $this->mkdir($target); - } else { - throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); - } + if (!$copyOnWindows && is_link($file)) { + $this->symlink($file->getLinkTarget(), $target); + } elseif (is_dir($file)) { + $this->mkdir($target); + } elseif (is_file($file)) { + $this->copy($file, $target, $options['override'] ?? false); } else { - if (is_link($file)) { - $this->symlink($file->getLinkTarget(), $target); - } elseif (is_dir($file)) { - $this->mkdir($target); - } elseif (is_file($file)) { - $this->copy($file, $target, isset($options['override']) ? $options['override'] : false); - } else { - throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); - } + throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); } } } @@ -599,6 +597,10 @@ class Filesystem */ public function isAbsolutePath($file) { + if (null === $file) { + @trigger_error(sprintf('Calling "%s()" with a null in the $file argument is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED); + } + return '' !== (string) $file && (strspn($file, '/\\', 0, 1) || (\strlen($file) > 3 && ctype_alpha($file[0]) && ':' === $file[1] @@ -619,7 +621,7 @@ class Filesystem */ public function tempnam($dir, $prefix) { - list($scheme, $hierarchy) = $this->getSchemeAndHierarchy($dir); + [$scheme, $hierarchy] = $this->getSchemeAndHierarchy($dir); // If no scheme or scheme is "file" or "gs" (Google Cloud) create temp file in local filesystem if (null === $scheme || 'file' === $scheme || 'gs' === $scheme) { @@ -663,101 +665,106 @@ class Filesystem /** * Atomically dumps content into a file. * - * @param string $filename The file to be written to - * @param string $content The data to write into the file + * @param string $filename The file to be written to + * @param string|resource $content The data to write into the file * * @throws IOException if the file cannot be written to */ public function dumpFile($filename, $content) { + if (\is_array($content)) { + @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED); + } + $dir = \dirname($filename); if (!is_dir($dir)) { $this->mkdir($dir); } - if (!is_writable($dir)) { - throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, null, $dir); - } - // Will create a temp file with 0600 access rights // when the filesystem supports chmod. $tmpFile = $this->tempnam($dir, basename($filename)); - if (false === @file_put_contents($tmpFile, $content)) { - throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename); - } + try { + if (false === @file_put_contents($tmpFile, $content)) { + throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename); + } - @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask()); + @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask()); - $this->rename($tmpFile, $filename, true); + $this->rename($tmpFile, $filename, true); + } finally { + if (file_exists($tmpFile)) { + @unlink($tmpFile); + } + } } /** * Appends content to an existing file. * - * @param string $filename The file to which to append content - * @param string $content The content to append + * @param string $filename The file to which to append content + * @param string|resource $content The content to append * * @throws IOException If the file is not writable */ public function appendToFile($filename, $content) { + if (\is_array($content)) { + @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED); + } + $dir = \dirname($filename); if (!is_dir($dir)) { $this->mkdir($dir); } - if (!is_writable($dir)) { - throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, null, $dir); - } - if (false === @file_put_contents($filename, $content, \FILE_APPEND)) { throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename); } } - /** - * @param mixed $files - * - * @return array|\Traversable - */ - private function toIterable($files) + private function toIterable($files): iterable { - return \is_array($files) || $files instanceof \Traversable ? $files : [$files]; + return is_iterable($files) ? $files : [$files]; } /** * Gets a 2-tuple of scheme (may be null) and hierarchical part of a filename (e.g. file:///tmp -> [file, tmp]). - * - * @param string $filename The filename to be parsed - * - * @return array The filename scheme and hierarchical part */ - private function getSchemeAndHierarchy($filename) + private function getSchemeAndHierarchy(string $filename): array { $components = explode('://', $filename, 2); return 2 === \count($components) ? [$components[0], $components[1]] : [null, $components[0]]; } + private static function assertFunctionExists(string $func): void + { + if (!\function_exists($func)) { + throw new IOException(sprintf('Unable to perform filesystem operation because the "%s()" function has been disabled.', $func)); + } + } + /** - * @param callable $func + * @param mixed ...$args * * @return mixed */ - private static function box($func) + private static function box(string $func, ...$args) { + self::assertFunctionExists($func); + self::$lastError = null; set_error_handler(__CLASS__.'::handleError'); try { - $result = \call_user_func_array($func, \array_slice(\func_get_args(), 1)); + $result = $func(...$args); restore_error_handler(); return $result; } catch (\Throwable $e) { - } catch (\Exception $e) { } restore_error_handler(); @@ -767,7 +774,7 @@ class Filesystem /** * @internal */ - public static function handleError($type, $msg) + public static function handleError(int $type, string $msg) { self::$lastError = $msg; } diff --git a/civicrm/vendor/symfony/filesystem/LICENSE b/civicrm/vendor/symfony/filesystem/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/filesystem/LICENSE +++ b/civicrm/vendor/symfony/filesystem/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/filesystem/LockHandler.php b/civicrm/vendor/symfony/filesystem/LockHandler.php deleted file mode 100644 index 2aacfa719b6bbd6116e955c84f1ca22f4fde50b8..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/filesystem/LockHandler.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem; - -use Symfony\Component\Filesystem\Exception\IOException; -use Symfony\Component\Lock\Store\FlockStore; -use Symfony\Component\Lock\Store\SemaphoreStore; - -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), \E_USER_DEPRECATED); - -/** - * LockHandler class provides a simple abstraction to lock anything by means of - * a file lock. - * - * A locked file is created based on the lock name when calling lock(). Other - * lock handlers will not be able to lock the same name until it is released - * (explicitly by calling release() or implicitly when the instance holding the - * lock is destroyed). - * - * @author Grégoire Pineau <lyrixx@lyrixx.info> - * @author Romain Neutron <imprec@gmail.com> - * @author Nicolas Grekas <p@tchwork.com> - * - * @deprecated since version 3.4, to be removed in 4.0. Use Symfony\Component\Lock\Store\SemaphoreStore or Symfony\Component\Lock\Store\FlockStore instead. - */ -class LockHandler -{ - private $file; - private $handle; - - /** - * @param string $name The lock name - * @param string|null $lockPath The directory to store the lock. Default values will use temporary directory - * - * @throws IOException If the lock directory could not be created or is not writable - */ - public function __construct($name, $lockPath = null) - { - $lockPath = $lockPath ?: sys_get_temp_dir(); - - if (!is_dir($lockPath)) { - $fs = new Filesystem(); - $fs->mkdir($lockPath); - } - - if (!is_writable($lockPath)) { - throw new IOException(sprintf('The directory "%s" is not writable.', $lockPath), 0, null, $lockPath); - } - - $this->file = sprintf('%s/sf.%s.%s.lock', $lockPath, preg_replace('/[^a-z0-9\._-]+/i', '-', $name), hash('sha256', $name)); - } - - /** - * Lock the resource. - * - * @param bool $blocking Wait until the lock is released - * - * @return bool Returns true if the lock was acquired, false otherwise - * - * @throws IOException If the lock file could not be created or opened - */ - public function lock($blocking = false) - { - if ($this->handle) { - return true; - } - - $error = null; - - // Silence error reporting - set_error_handler(function ($errno, $msg) use (&$error) { - $error = $msg; - }); - - if (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) { - if ($this->handle = fopen($this->file, 'x')) { - chmod($this->file, 0666); - } elseif (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) { - usleep(100); // Give some time for chmod() to complete - $this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r'); - } - } - restore_error_handler(); - - if (!$this->handle) { - throw new IOException($error, 0, null, $this->file); - } - - // On Windows, even if PHP doc says the contrary, LOCK_NB works, see - // https://bugs.php.net/54129 - if (!flock($this->handle, \LOCK_EX | ($blocking ? 0 : \LOCK_NB))) { - fclose($this->handle); - $this->handle = null; - - return false; - } - - return true; - } - - /** - * Release the resource. - */ - public function release() - { - if ($this->handle) { - flock($this->handle, \LOCK_UN | \LOCK_NB); - fclose($this->handle); - $this->handle = null; - } - } -} diff --git a/civicrm/vendor/symfony/filesystem/README.md b/civicrm/vendor/symfony/filesystem/README.md index cb03d43c15dd25fabc83feb7b129b7037c6c6c8b..f2f6d45f7386eb45295f9d882de83af60aeeb021 100644 --- a/civicrm/vendor/symfony/filesystem/README.md +++ b/civicrm/vendor/symfony/filesystem/README.md @@ -6,8 +6,8 @@ The Filesystem component provides basic utilities for the filesystem. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/filesystem.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/filesystem.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/filesystem/composer.json b/civicrm/vendor/symfony/filesystem/composer.json index ee48b0b2385c013322765a16839d45c21247d424..c943180d0c3b200154da68fbc7db6d7536bf885d 100644 --- a/civicrm/vendor/symfony/filesystem/composer.json +++ b/civicrm/vendor/symfony/filesystem/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/filesystem", "type": "library", - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,8 +16,9 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" }, diff --git a/civicrm/vendor/symfony/filesystem/phpunit.xml.dist b/civicrm/vendor/symfony/filesystem/phpunit.xml.dist deleted file mode 100644 index 5515fff1ac944fbe1f73b96c4c1f4ad191738102..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/filesystem/phpunit.xml.dist +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony Filesystem Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/finder/.gitignore b/civicrm/vendor/symfony/finder/.gitignore deleted file mode 100644 index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/finder/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/ -composer.lock -phpunit.xml diff --git a/civicrm/vendor/symfony/finder/CHANGELOG.md b/civicrm/vendor/symfony/finder/CHANGELOG.md index 53c34be860c565ecd4e088479246cb9a0d269f9a..2045184e833312bb0121215de46f5da8cca9769e 100644 --- a/civicrm/vendor/symfony/finder/CHANGELOG.md +++ b/civicrm/vendor/symfony/finder/CHANGELOG.md @@ -1,6 +1,25 @@ CHANGELOG ========= +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + 3.4.0 ----- diff --git a/civicrm/vendor/symfony/finder/Comparator/DateComparator.php b/civicrm/vendor/symfony/finder/Comparator/DateComparator.php index 3de43ef4b8ddb757ee0d977d1679175c349e63e1..ae22c6cbec8969041c2d1b96629404fd3731172f 100644 --- a/civicrm/vendor/symfony/finder/Comparator/DateComparator.php +++ b/civicrm/vendor/symfony/finder/Comparator/DateComparator.php @@ -23,7 +23,7 @@ class DateComparator extends Comparator * * @throws \InvalidArgumentException If the test is not understood */ - public function __construct($test) + public function __construct(string $test) { if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); @@ -36,7 +36,7 @@ class DateComparator extends Comparator throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); } - $operator = isset($matches[1]) ? $matches[1] : '=='; + $operator = $matches[1] ?? '=='; if ('since' === $operator || 'after' === $operator) { $operator = '>'; } diff --git a/civicrm/vendor/symfony/finder/Comparator/NumberComparator.php b/civicrm/vendor/symfony/finder/Comparator/NumberComparator.php index f62c0e5740f69f51d4d7b315faa55b0ac5bc6270..657118fb6b029769e7e7b3cf692cee7c350270f0 100644 --- a/civicrm/vendor/symfony/finder/Comparator/NumberComparator.php +++ b/civicrm/vendor/symfony/finder/Comparator/NumberComparator.php @@ -39,10 +39,10 @@ class NumberComparator extends Comparator * * @throws \InvalidArgumentException If the test is not understood */ - public function __construct($test) + public function __construct(?string $test) { - if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test)); + if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); } $target = $matches[2]; @@ -74,6 +74,6 @@ class NumberComparator extends Comparator } $this->setTarget($target); - $this->setOperator(isset($matches[1]) ? $matches[1] : '=='); + $this->setOperator($matches[1] ?? '=='); } } diff --git a/civicrm/vendor/symfony/finder/Exception/ExceptionInterface.php b/civicrm/vendor/symfony/finder/Exception/DirectoryNotFoundException.php similarity index 54% rename from civicrm/vendor/symfony/finder/Exception/ExceptionInterface.php rename to civicrm/vendor/symfony/finder/Exception/DirectoryNotFoundException.php index 161e9686d2b70f4d89d241008f0edf7f9f3be9af..c6cc0f2736370cf796d7e2d34c6f1efff85db3a6 100644 --- a/civicrm/vendor/symfony/finder/Exception/ExceptionInterface.php +++ b/civicrm/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -12,14 +12,8 @@ namespace Symfony\Component\Finder\Exception; /** - * @author Jean-François Simon <contact@jfsimon.fr> - * - * @deprecated since 3.3, to be removed in 4.0. + * @author Andreas Erhard <andreas.erhard@i-med.ac.at> */ -interface ExceptionInterface +class DirectoryNotFoundException extends \InvalidArgumentException { - /** - * @return \Symfony\Component\Finder\Adapter\AdapterInterface - */ - public function getAdapter(); } diff --git a/civicrm/vendor/symfony/finder/Finder.php b/civicrm/vendor/symfony/finder/Finder.php index 186cb322985079e45ae315c8ab38167efa9583f9..e1194ed695e233991d1fcbd6d06145dfb7564616 100644 --- a/civicrm/vendor/symfony/finder/Finder.php +++ b/civicrm/vendor/symfony/finder/Finder.php @@ -13,12 +13,14 @@ namespace Symfony\Component\Finder; use Symfony\Component\Finder\Comparator\DateComparator; use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; use Symfony\Component\Finder\Iterator\CustomFilterIterator; use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; use Symfony\Component\Finder\Iterator\SortableIterator; @@ -37,8 +39,9 @@ use Symfony\Component\Finder\Iterator\SortableIterator; */ class Finder implements \IteratorAggregate, \Countable { - const IGNORE_VCS_FILES = 1; - const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_FILES = 1; + public const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_IGNORED_FILES = 4; private $mode = 0; private $names = []; @@ -48,6 +51,7 @@ class Finder implements \IteratorAggregate, \Countable private $depths = []; private $sizes = []; private $followLinks = false; + private $reverseSorting = false; private $sort = false; private $ignore = 0; private $dirs = []; @@ -107,17 +111,20 @@ class Finder implements \IteratorAggregate, \Countable * * $finder->depth('> 1') // the Finder will start matching at level 1. * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) * - * @param string|int $level The depth level expression + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels * * @return $this * * @see DepthRangeFilterIterator * @see NumberComparator */ - public function depth($level) + public function depth($levels) { - $this->depths[] = new Comparator\NumberComparator($level); + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } return $this; } @@ -131,8 +138,9 @@ class Finder implements \IteratorAggregate, \Countable * $finder->date('until 2 days ago'); * $finder->date('> now - 2 hours'); * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); * - * @param string $date A date range string + * @param string|string[] $dates A date range string or an array of date ranges * * @return $this * @@ -140,9 +148,11 @@ class Finder implements \IteratorAggregate, \Countable * @see DateRangeFilterIterator * @see DateComparator */ - public function date($date) + public function date($dates) { - $this->dates[] = new Comparator\DateComparator($date); + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } return $this; } @@ -155,16 +165,17 @@ class Finder implements \IteratorAggregate, \Countable * $finder->name('*.php') * $finder->name('/\.php$/') // same as above * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) * - * @param string $pattern A pattern (a regexp, a glob, or a string) + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns * * @return $this * * @see FilenameFilterIterator */ - public function name($pattern) + public function name($patterns) { - $this->names[] = $pattern; + $this->names = array_merge($this->names, (array) $patterns); return $this; } @@ -172,15 +183,15 @@ class Finder implements \IteratorAggregate, \Countable /** * Adds rules that files must not match. * - * @param string $pattern A pattern (a regexp, a glob, or a string) + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns * * @return $this * * @see FilenameFilterIterator */ - public function notName($pattern) + public function notName($patterns) { - $this->notNames[] = $pattern; + $this->notNames = array_merge($this->notNames, (array) $patterns); return $this; } @@ -192,16 +203,17 @@ class Finder implements \IteratorAggregate, \Countable * * $finder->contains('Lorem ipsum') * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) * - * @param string $pattern A pattern (string or regexp) + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns * * @return $this * * @see FilecontentFilterIterator */ - public function contains($pattern) + public function contains($patterns) { - $this->contains[] = $pattern; + $this->contains = array_merge($this->contains, (array) $patterns); return $this; } @@ -213,16 +225,17 @@ class Finder implements \IteratorAggregate, \Countable * * $finder->notContains('Lorem ipsum') * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) * - * @param string $pattern A pattern (string or regexp) + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns * * @return $this * * @see FilecontentFilterIterator */ - public function notContains($pattern) + public function notContains($patterns) { - $this->notContains[] = $pattern; + $this->notContains = array_merge($this->notContains, (array) $patterns); return $this; } @@ -234,18 +247,19 @@ class Finder implements \IteratorAggregate, \Countable * * $finder->path('some/special/dir') * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) * * Use only / as dirname separator. * - * @param string $pattern A pattern (a regexp or a string) + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns * * @return $this * * @see FilenameFilterIterator */ - public function path($pattern) + public function path($patterns) { - $this->paths[] = $pattern; + $this->paths = array_merge($this->paths, (array) $patterns); return $this; } @@ -257,18 +271,19 @@ class Finder implements \IteratorAggregate, \Countable * * $finder->notPath('some/special/dir') * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) * * Use only / as dirname separator. * - * @param string $pattern A pattern (a regexp or a string) + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns * * @return $this * * @see FilenameFilterIterator */ - public function notPath($pattern) + public function notPath($patterns) { - $this->notPaths[] = $pattern; + $this->notPaths = array_merge($this->notPaths, (array) $patterns); return $this; } @@ -279,17 +294,20 @@ class Finder implements \IteratorAggregate, \Countable * $finder->size('> 10K'); * $finder->size('<= 1Ki'); * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) * - * @param string|int $size A size range string or an integer + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges * * @return $this * * @see SizeRangeFilterIterator * @see NumberComparator */ - public function size($size) + public function size($sizes) { - $this->sizes[] = new Comparator\NumberComparator($size); + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } return $this; } @@ -358,6 +376,24 @@ class Finder implements \IteratorAggregate, \Countable return $this; } + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored) + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + /** * Adds VCS patterns. * @@ -397,13 +433,20 @@ class Finder implements \IteratorAggregate, \Countable * * This can be slow as all the matching files and directories must be retrieved for comparison. * + * @param bool $useNaturalSort Whether to use natural sort or not, disabled by default + * * @return $this * * @see SortableIterator */ - public function sortByName() + public function sortByName(/* bool $useNaturalSort = false */) { - $this->sort = Iterator\SortableIterator::SORT_BY_NAME; + if (\func_num_args() < 1 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) { + @trigger_error(sprintf('The "%s()" method will have a new "bool $useNaturalSort = false" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); + } + $useNaturalSort = 0 < \func_num_args() && func_get_arg(0); + + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; return $this; } @@ -442,6 +485,18 @@ class Finder implements \IteratorAggregate, \Countable return $this; } + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting() + { + $this->reverseSorting = true; + + return $this; + } + /** * Sorts files and directories by the last inode changed time. * @@ -532,7 +587,7 @@ class Finder implements \IteratorAggregate, \Countable * * @return $this * - * @throws \InvalidArgumentException if one of the directories does not exist + * @throws DirectoryNotFoundException if one of the directories does not exist */ public function in($dirs) { @@ -545,7 +600,7 @@ class Finder implements \IteratorAggregate, \Countable sort($glob); $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob)); } else { - throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir)); + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); } } @@ -563,6 +618,7 @@ class Finder implements \IteratorAggregate, \Countable * * @throws \LogicException if the in() method has not been called */ + #[\ReturnTypeWillChange] public function getIterator() { if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { @@ -570,18 +626,30 @@ class Finder implements \IteratorAggregate, \Countable } if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { - return $this->searchInDirectory($this->dirs[0]); + $iterator = $this->searchInDirectory($this->dirs[0]); + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; } $iterator = new \AppendIterator(); foreach ($this->dirs as $dir) { - $iterator->append($this->searchInDirectory($dir)); + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); } foreach ($this->iterators as $it) { $iterator->append($it); } + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + return $iterator; } @@ -602,10 +670,11 @@ class Finder implements \IteratorAggregate, \Countable $this->iterators[] = $iterator->getIterator(); } elseif ($iterator instanceof \Iterator) { $this->iterators[] = $iterator; - } elseif ($iterator instanceof \Traversable || \is_array($iterator)) { + } elseif (is_iterable($iterator)) { $it = new \ArrayIterator(); foreach ($iterator as $file) { - $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file)); + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; } $this->iterators[] = $it; } else { @@ -634,17 +703,13 @@ class Finder implements \IteratorAggregate, \Countable * * @return int */ + #[\ReturnTypeWillChange] public function count() { return iterator_count($this->getIterator()); } - /** - * @param string $dir - * - * @return \Iterator - */ - private function searchInDirectory($dir) + private function searchInDirectory(string $dir): \Iterator { $exclude = $this->exclude; $notPaths = $this->notPaths; @@ -657,6 +722,14 @@ class Finder implements \IteratorAggregate, \Countable $notPaths[] = '#(^|/)\..+(/|$)#'; } + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $gitignoreFilePath = sprintf('%s/.gitignore', $dir); + if (!is_readable($gitignoreFilePath)) { + throw new \RuntimeException(sprintf('The "ignoreVCSIgnored" option cannot be used by the Finder as the "%s" file is not readable.', $gitignoreFilePath)); + } + $notPaths = array_merge($notPaths, [Gitignore::toRegex(file_get_contents($gitignoreFilePath))]); + } + $minDepth = 0; $maxDepth = \PHP_INT_MAX; @@ -725,11 +798,6 @@ class Finder implements \IteratorAggregate, \Countable $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); } - if ($this->sort) { - $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort); - $iterator = $iteratorAggregate->getIterator(); - } - return $iterator; } @@ -737,12 +805,8 @@ class Finder implements \IteratorAggregate, \Countable * Normalizes given directory names by removing trailing slashes. * * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper - * - * @param string $dir - * - * @return string */ - private function normalizeDir($dir) + private function normalizeDir(string $dir): string { if ('/' === $dir) { return $dir; diff --git a/civicrm/vendor/symfony/finder/Gitignore.php b/civicrm/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000000000000000000000000000000000000..491f588ee2b236cc28ef8d8649beae82c840a3f0 --- /dev/null +++ b/civicrm/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,83 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Michael VoÅ™ÃÅ¡ek <vorismi3@fel.cvut.cz> + * @author Ahmed Abdou <mail@ahmd.io> + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * Format specification: https://git-scm.com/docs/gitignore#_pattern_format + */ + public static function toRegex(string $gitignoreFileContent): string + { + $gitignoreFileContent = preg_replace('~(?<!\\\\)#[^\n\r]*~', '', $gitignoreFileContent); + $gitignoreLines = preg_split('~\r\n?|\n~', $gitignoreFileContent); + + $res = self::lineToRegex(''); + foreach ($gitignoreLines as $i => $line) { + $line = preg_replace('~(?<!\\\\)[ \t]+$~', '', $line); + + if ('!' === substr($line, 0, 1)) { + $line = substr($line, 1); + $isNegative = true; + } else { + $isNegative = false; + } + + if ('' !== $line) { + if ($isNegative) { + $res = '(?!'.self::lineToRegex($line).'$)'.$res; + } else { + $res = '(?:'.$res.'|'.self::lineToRegex($line).')'; + } + } + } + + return '~^(?:'.$res.')~s'; + } + + private static function lineToRegex(string $gitignoreLine): string + { + if ('' === $gitignoreLine) { + return '$f'; // always false + } + + $slashPos = strpos($gitignoreLine, '/'); + if (false !== $slashPos && \strlen($gitignoreLine) - 1 !== $slashPos) { + if (0 === $slashPos) { + $gitignoreLine = substr($gitignoreLine, 1); + } + $isAbsolute = true; + } else { + $isAbsolute = false; + } + + $regex = preg_quote(str_replace('\\', '', $gitignoreLine), '~'); + $regex = preg_replace_callback('~\\\\\[((?:\\\\!)?)([^\[\]]*)\\\\\]~', function (array $matches): string { + return '['.('' !== $matches[1] ? '^' : '').str_replace('\\-', '-', $matches[2]).']'; + }, $regex); + $regex = preg_replace('~(?:(?:\\\\\*){2,}(/?))+~', '(?:(?:(?!//).(?<!//))+$1)?', $regex); + $regex = preg_replace('~\\\\\*~', '[^/]*', $regex); + $regex = preg_replace('~\\\\\?~', '[^/]', $regex); + + return ($isAbsolute ? '' : '(?:[^/]+/)*') + .$regex + .(!str_ends_with($gitignoreLine, '/') ? '(?:$|/)' : ''); + } +} diff --git a/civicrm/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/CustomFilterIterator.php index 896f7e912f087563a55b7592a48a6123918b7285..f85cb7bffb772982461f027d4a0c71601dce137f 100644 --- a/civicrm/vendor/symfony/finder/Iterator/CustomFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -19,7 +19,7 @@ namespace Symfony\Component\Finder\Iterator; * * @author Fabien Potencier <fabien@symfony.com> */ -class CustomFilterIterator extends FilterIterator +class CustomFilterIterator extends \FilterIterator { private $filters = []; @@ -46,12 +46,13 @@ class CustomFilterIterator extends FilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { $fileinfo = $this->current(); foreach ($this->filters as $filter) { - if (false === \call_user_func($filter, $fileinfo)) { + if (false === $filter($fileinfo)) { return false; } } diff --git a/civicrm/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php index 8a47321a3c3709911149637621fab481241b6163..90616f471b1f76d5dd857b297f5ca8546e9a1a16 100644 --- a/civicrm/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -18,7 +18,7 @@ use Symfony\Component\Finder\Comparator\DateComparator; * * @author Fabien Potencier <fabien@symfony.com> */ -class DateRangeFilterIterator extends FilterIterator +class DateRangeFilterIterator extends \FilterIterator { private $comparators = []; @@ -38,6 +38,7 @@ class DateRangeFilterIterator extends FilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { $fileinfo = $this->current(); diff --git a/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php index d9bbeb48f17f6370f256715082e909496db5928e..e96fefd961b160027d92d1105e4d98e4926cab9d 100644 --- a/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -16,7 +16,7 @@ namespace Symfony\Component\Finder\Iterator; * * @author Fabien Potencier <fabien@symfony.com> */ -class DepthRangeFilterIterator extends FilterIterator +class DepthRangeFilterIterator extends \FilterIterator { private $minDepth = 0; @@ -25,7 +25,7 @@ class DepthRangeFilterIterator extends FilterIterator * @param int $minDepth The min depth * @param int $maxDepth The max depth */ - public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = \PHP_INT_MAX) + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) { $this->minDepth = $minDepth; $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); @@ -38,6 +38,7 @@ class DepthRangeFilterIterator extends FilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { return $this->getInnerIterator()->getDepth() >= $this->minDepth; diff --git a/civicrm/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php index 60bc4e814c9d287d22fca01c8222dfd971f900fd..cf9e678771da9242b9887d1ba250305396d40de4 100644 --- a/civicrm/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -16,7 +16,7 @@ namespace Symfony\Component\Finder\Iterator; * * @author Fabien Potencier <fabien@symfony.com> */ -class ExcludeDirectoryFilterIterator extends FilterIterator implements \RecursiveIterator +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator { private $iterator; private $isRecursive; @@ -34,7 +34,7 @@ class ExcludeDirectoryFilterIterator extends FilterIterator implements \Recursiv $patterns = []; foreach ($directories as $directory) { $directory = rtrim($directory, '/'); - if (!$this->isRecursive || false !== strpos($directory, '/')) { + if (!$this->isRecursive || str_contains($directory, '/')) { $patterns[] = preg_quote($directory, '#'); } else { $this->excludedDirs[$directory] = true; @@ -52,6 +52,7 @@ class ExcludeDirectoryFilterIterator extends FilterIterator implements \Recursiv * * @return bool True if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { @@ -68,11 +69,19 @@ class ExcludeDirectoryFilterIterator extends FilterIterator implements \Recursiv return true; } + /** + * @return bool + */ + #[\ReturnTypeWillChange] public function hasChildren() { return $this->isRecursive && $this->iterator->hasChildren(); } + /** + * @return self + */ + #[\ReturnTypeWillChange] public function getChildren() { $children = new self($this->iterator->getChildren(), []); diff --git a/civicrm/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php index e9811d4a03ee6b2a65180fd92eaa9bdab08e3ec7..d054cefb9fff9ed9b6bf606c63c1a2da10441c05 100644 --- a/civicrm/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -16,10 +16,10 @@ namespace Symfony\Component\Finder\Iterator; * * @author Fabien Potencier <fabien@symfony.com> */ -class FileTypeFilterIterator extends FilterIterator +class FileTypeFilterIterator extends \FilterIterator { - const ONLY_FILES = 1; - const ONLY_DIRECTORIES = 2; + public const ONLY_FILES = 1; + public const ONLY_DIRECTORIES = 2; private $mode; @@ -27,7 +27,7 @@ class FileTypeFilterIterator extends FilterIterator * @param \Iterator $iterator The Iterator to filter * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) */ - public function __construct(\Iterator $iterator, $mode) + public function __construct(\Iterator $iterator, int $mode) { $this->mode = $mode; @@ -39,6 +39,7 @@ class FileTypeFilterIterator extends FilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { $fileinfo = $this->current(); diff --git a/civicrm/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php index 81594b87740481b0ada8ca7114468e5687f638d0..41eb767f7a651048d3453382f0abf5c875080598 100644 --- a/civicrm/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -24,6 +24,7 @@ class FilecontentFilterIterator extends MultiplePcreFilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { if (!$this->matchRegexps && !$this->noMatchRegexps) { diff --git a/civicrm/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/FilenameFilterIterator.php index e168cd8ffa798a8529bbcd02af72cabecd333c1e..8365756c1520918743d79d073262200ebc54345b 100644 --- a/civicrm/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -25,6 +25,7 @@ class FilenameFilterIterator extends MultiplePcreFilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { return $this->isAccepted($this->current()->getFilename()); diff --git a/civicrm/vendor/symfony/finder/Iterator/FilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/FilterIterator.php deleted file mode 100644 index c16dd8fa9e4a0b15fb2e4e57c8fda9401ffa62b8..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/finder/Iterator/FilterIterator.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * This iterator just overrides the rewind method in order to correct a PHP bug, - * which existed before version 5.5.23/5.6.7. - * - * @see https://bugs.php.net/68557 - * - * @author Alex Bogomazov - * - * @deprecated since 3.4, to be removed in 4.0. - */ -abstract class FilterIterator extends \FilterIterator -{ - /** - * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after - * rewind in some cases. - * - * @see FilterIterator::rewind() - */ - public function rewind() - { - if (\PHP_VERSION_ID > 50607 || (\PHP_VERSION_ID > 50523 && \PHP_VERSION_ID < 50600)) { - parent::rewind(); - - return; - } - - $iterator = $this; - while ($iterator instanceof \OuterIterator) { - $innerIterator = $iterator->getInnerIterator(); - - if ($innerIterator instanceof RecursiveDirectoryIterator) { - // this condition is necessary for iterators to work properly with non-local filesystems like ftp - if ($innerIterator->isRewindable()) { - $innerIterator->next(); - $innerIterator->rewind(); - } - } elseif ($innerIterator instanceof \FilesystemIterator) { - $innerIterator->next(); - $innerIterator->rewind(); - } - - $iterator = $innerIterator; - } - - parent::rewind(); - } -} diff --git a/civicrm/vendor/symfony/finder/Iterator/LazyIterator.php b/civicrm/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000000000000000000000000000000000000..32cc37ff14adcd5fc99b5df14280d4f188d40889 --- /dev/null +++ b/civicrm/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé <jeremy@derusse.com> + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory; + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/civicrm/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php index ee365a58b084f60e9f6311075cb529b41d4ffa8f..e185d13001c99e7dbb6c300252f32935d5b3484e 100644 --- a/civicrm/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -16,7 +16,7 @@ namespace Symfony\Component\Finder\Iterator; * * @author Fabien Potencier <fabien@symfony.com> */ -abstract class MultiplePcreFilterIterator extends FilterIterator +abstract class MultiplePcreFilterIterator extends \FilterIterator { protected $matchRegexps = []; protected $noMatchRegexps = []; @@ -83,7 +83,13 @@ abstract class MultiplePcreFilterIterator extends FilterIterator */ protected function isRegex($str) { - if (preg_match('/^(.{3,}?)[imsxuADU]*$/', $str, $m)) { + $availableModifiers = 'imsxuADU'; + + if (\PHP_VERSION_ID >= 80200) { + $availableModifiers .= 'n'; + } + + if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { $start = substr($m[1], 0, 1); $end = substr($m[1], -1); diff --git a/civicrm/vendor/symfony/finder/Iterator/PathFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/PathFilterIterator.php index 3fda557be366baa1d10e05734d138eec71402045..f4aaa1fb0027d3d81d5b073d9e8c0dcc138f37cd 100644 --- a/civicrm/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -24,6 +24,7 @@ class PathFilterIterator extends MultiplePcreFilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { $filename = $this->current()->getRelativePathname(); diff --git a/civicrm/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/civicrm/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php index 63764d407d30fc669a7ab2815db77087a3a571ce..8508ab707b9a30201acb0728a525cb678f75d52f 100644 --- a/civicrm/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -37,13 +37,9 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator private $directorySeparator = '/'; /** - * @param string $path - * @param int $flags - * @param bool $ignoreUnreadableDirs - * * @throws \RuntimeException */ - public function __construct($path, $flags, $ignoreUnreadableDirs = false) + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) { if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { throw new \RuntimeException('This iterator only support returning current as fileinfo.'); @@ -62,12 +58,13 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator * * @return SplFileInfo File information */ + #[\ReturnTypeWillChange] public function current() { // the logic here avoids redoing the same work in all iterations if (null === $subPathname = $this->subPath) { - $subPathname = $this->subPath = (string) $this->getSubPath(); + $subPathname = $this->subPath = $this->getSubPath(); } if ('' !== $subPathname) { $subPathname .= $this->directorySeparator; @@ -86,6 +83,7 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator * * @throws AccessDeniedException */ + #[\ReturnTypeWillChange] public function getChildren() { try { @@ -113,18 +111,16 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator /** * Do nothing for non rewindable stream. + * + * @return void */ + #[\ReturnTypeWillChange] public function rewind() { if (false === $this->isRewindable()) { return; } - // @see https://bugs.php.net/68557 - if (\PHP_VERSION_ID < 50523 || \PHP_VERSION_ID >= 50600 && \PHP_VERSION_ID < 50607) { - parent::next(); - } - parent::rewind(); } @@ -139,11 +135,6 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator return $this->rewindable; } - // workaround for an HHVM bug, should be removed when https://github.com/facebook/hhvm/issues/7281 is fixed - if ('' === $this->getPath()) { - return $this->rewindable = false; - } - if (false !== $stream = @opendir($this->getPath())) { $infos = stream_get_meta_data($stream); closedir($stream); diff --git a/civicrm/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/civicrm/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php index 4e521c8c9040c9fb90fc94344194b4c82ff02f09..4078f3692e052922535eea6612f45ae06b4a4904 100644 --- a/civicrm/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -18,7 +18,7 @@ use Symfony\Component\Finder\Comparator\NumberComparator; * * @author Fabien Potencier <fabien@symfony.com> */ -class SizeRangeFilterIterator extends FilterIterator +class SizeRangeFilterIterator extends \FilterIterator { private $comparators = []; @@ -38,6 +38,7 @@ class SizeRangeFilterIterator extends FilterIterator * * @return bool true if the value should be kept, false otherwise */ + #[\ReturnTypeWillChange] public function accept() { $fileinfo = $this->current(); diff --git a/civicrm/vendor/symfony/finder/Iterator/SortableIterator.php b/civicrm/vendor/symfony/finder/Iterator/SortableIterator.php index e67997d117a933e7e5906168da359afc74ff9173..adc7e999db8b48fec18af6a1fad36ab251cd9721 100644 --- a/civicrm/vendor/symfony/finder/Iterator/SortableIterator.php +++ b/civicrm/vendor/symfony/finder/Iterator/SortableIterator.php @@ -18,62 +18,83 @@ namespace Symfony\Component\Finder\Iterator; */ class SortableIterator implements \IteratorAggregate { - const SORT_BY_NAME = 1; - const SORT_BY_TYPE = 2; - const SORT_BY_ACCESSED_TIME = 3; - const SORT_BY_CHANGED_TIME = 4; - const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NONE = 0; + public const SORT_BY_NAME = 1; + public const SORT_BY_TYPE = 2; + public const SORT_BY_ACCESSED_TIME = 3; + public const SORT_BY_CHANGED_TIME = 4; + public const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NAME_NATURAL = 6; private $iterator; private $sort; /** - * @param \Traversable $iterator The Iterator to filter - * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) * * @throws \InvalidArgumentException */ - public function __construct(\Traversable $iterator, $sort) + public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false) { $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; if (self::SORT_BY_NAME === $sort) { - $this->sort = static function ($a, $b) { - return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + $this->sort = static function ($a, $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function ($a, $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_TYPE === $sort) { - $this->sort = static function ($a, $b) { + $this->sort = static function ($a, $b) use ($order) { if ($a->isDir() && $b->isFile()) { - return -1; + return -$order; } elseif ($a->isFile() && $b->isDir()) { - return 1; + return $order; } - return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = static function ($a, $b) { - return $a->getATime() - $b->getATime(); + $this->sort = static function ($a, $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); }; } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = static function ($a, $b) { - return $a->getCTime() - $b->getCTime(); + $this->sort = static function ($a, $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); }; } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = static function ($a, $b) { - return $a->getMTime() - $b->getMTime(); + $this->sort = static function ($a, $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; } elseif (\is_callable($sort)) { - $this->sort = $sort; + $this->sort = $reverseOrder ? static function ($a, $b) use ($sort) { return -$sort($a, $b); } : $sort; } else { throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); } } + /** + * @return \Traversable + */ + #[\ReturnTypeWillChange] public function getIterator() { + if (1 === $this->sort) { + return $this->iterator; + } + $array = iterator_to_array($this->iterator, true); - uasort($array, $this->sort); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } return new \ArrayIterator($array); } diff --git a/civicrm/vendor/symfony/finder/LICENSE b/civicrm/vendor/symfony/finder/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/finder/LICENSE +++ b/civicrm/vendor/symfony/finder/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/finder/README.md b/civicrm/vendor/symfony/finder/README.md index 0b19c752572d8e842b784e5a48c7729f95ea7485..22bdeb9bcf853eb4e4ccf9ca017cd5e0f90b1d3c 100644 --- a/civicrm/vendor/symfony/finder/README.md +++ b/civicrm/vendor/symfony/finder/README.md @@ -7,8 +7,8 @@ interface. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/finder.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/finder/SplFileInfo.php b/civicrm/vendor/symfony/finder/SplFileInfo.php index 0f4e025b22bd20362736c83160694ffd6f547c36..62c9faa6e9147b7d93755ebd2b710420e805fcc6 100644 --- a/civicrm/vendor/symfony/finder/SplFileInfo.php +++ b/civicrm/vendor/symfony/finder/SplFileInfo.php @@ -26,7 +26,7 @@ class SplFileInfo extends \SplFileInfo * @param string $relativePath The relative path * @param string $relativePathname The relative path name */ - public function __construct($file, $relativePath, $relativePathname) + public function __construct(string $file, string $relativePath, string $relativePathname) { parent::__construct($file); $this->relativePath = $relativePath; @@ -57,6 +57,13 @@ class SplFileInfo extends \SplFileInfo return $this->relativePathname; } + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, \PATHINFO_FILENAME); + } + /** * Returns the contents of the file. * diff --git a/civicrm/vendor/symfony/finder/composer.json b/civicrm/vendor/symfony/finder/composer.json index b0895524be520981efc1dc258082de35b6afe87b..5ccd80cd4a9ac97ed36fe5aaa875f17ec7165aba 100644 --- a/civicrm/vendor/symfony/finder/composer.json +++ b/civicrm/vendor/symfony/finder/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/finder", "type": "library", - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,7 +16,8 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" }, diff --git a/civicrm/vendor/symfony/finder/phpunit.xml.dist b/civicrm/vendor/symfony/finder/phpunit.xml.dist deleted file mode 100644 index 078847af96add0b0afa41c11b0ac06144d0bfc82..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/finder/phpunit.xml.dist +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony Finder Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/polyfill-ctype/Ctype.php b/civicrm/vendor/symfony/polyfill-ctype/Ctype.php index 58414dc73bd45b931b73a05a040d9ca23a61acf6..ba75a2c95fc4c05575dca9a716ef0d8360c6693d 100644 --- a/civicrm/vendor/symfony/polyfill-ctype/Ctype.php +++ b/civicrm/vendor/symfony/polyfill-ctype/Ctype.php @@ -25,13 +25,13 @@ final class Ctype * * @see https://php.net/ctype-alnum * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_alnum($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); } @@ -41,13 +41,13 @@ final class Ctype * * @see https://php.net/ctype-alpha * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_alpha($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); } @@ -57,13 +57,13 @@ final class Ctype * * @see https://php.net/ctype-cntrl * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_cntrl($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); } @@ -73,13 +73,13 @@ final class Ctype * * @see https://php.net/ctype-digit * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_digit($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); } @@ -89,13 +89,13 @@ final class Ctype * * @see https://php.net/ctype-graph * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_graph($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); } @@ -105,13 +105,13 @@ final class Ctype * * @see https://php.net/ctype-lower * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_lower($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); } @@ -121,13 +121,13 @@ final class Ctype * * @see https://php.net/ctype-print * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_print($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); } @@ -137,13 +137,13 @@ final class Ctype * * @see https://php.net/ctype-punct * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_punct($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); } @@ -153,13 +153,13 @@ final class Ctype * * @see https://php.net/ctype-space * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_space($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); } @@ -169,13 +169,13 @@ final class Ctype * * @see https://php.net/ctype-upper * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_upper($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); } @@ -185,13 +185,13 @@ final class Ctype * * @see https://php.net/ctype-xdigit * - * @param string|int $text + * @param mixed $text * * @return bool */ public static function ctype_xdigit($text) { - $text = self::convert_int_to_char_for_ctype($text); + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); } @@ -204,11 +204,12 @@ final class Ctype * (negative values have 256 added in order to allow characters in the Extended ASCII range). * Any other integer is interpreted as a string containing the decimal digits of the integer. * - * @param string|int $int + * @param mixed $int + * @param string $function * * @return mixed */ - private static function convert_int_to_char_for_ctype($int) + private static function convert_int_to_char_for_ctype($int, $function) { if (!\is_int($int)) { return $int; @@ -218,6 +219,10 @@ final class Ctype return (string) $int; } + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + if ($int < 0) { $int += 256; } diff --git a/civicrm/vendor/symfony/polyfill-ctype/README.md b/civicrm/vendor/symfony/polyfill-ctype/README.md index 8add1ab0096e7e7ca60829b87266d2c5a884ac26..b144d03c3c6b5a78d0539f79fe7ddd95a6be16cf 100644 --- a/civicrm/vendor/symfony/polyfill-ctype/README.md +++ b/civicrm/vendor/symfony/polyfill-ctype/README.md @@ -4,7 +4,7 @@ Symfony Polyfill / Ctype This component provides `ctype_*` functions to users who run php versions without the ctype extension. More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/civicrm/vendor/symfony/polyfill-ctype/bootstrap.php b/civicrm/vendor/symfony/polyfill-ctype/bootstrap.php index 8d6fc4beccaf4a1ba46a30fe0847b76be08a1c15..d54524b31b4b3873d18b9615ed661c1c239144a6 100644 --- a/civicrm/vendor/symfony/polyfill-ctype/bootstrap.php +++ b/civicrm/vendor/symfony/polyfill-ctype/bootstrap.php @@ -11,6 +11,10 @@ use Symfony\Polyfill\Ctype as p; +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + if (!function_exists('ctype_alnum')) { function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } } diff --git a/civicrm/vendor/symfony/polyfill-ctype/bootstrap80.php b/civicrm/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 0000000000000000000000000000000000000000..ab2f8611dacaaa93e8431c7fe9b246c376a9dcab --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/civicrm/vendor/symfony/polyfill-ctype/composer.json b/civicrm/vendor/symfony/polyfill-ctype/composer.json index afb2a443e903379c696996c2cc5c11d6fb911d1b..ee5c931cd1c575886f343ebafe4f23d6cb1eff85 100644 --- a/civicrm/vendor/symfony/polyfill-ctype/composer.json +++ b/civicrm/vendor/symfony/polyfill-ctype/composer.json @@ -16,7 +16,10 @@ } ], "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, @@ -28,7 +31,11 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } } } diff --git a/civicrm/vendor/symfony/polyfill-php80/LICENSE b/civicrm/vendor/symfony/polyfill-php80/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..5593b1d84f74a170e02b3e58408dc189ea838434 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/symfony/polyfill-php80/Php80.php b/civicrm/vendor/symfony/polyfill-php80/Php80.php new file mode 100644 index 0000000000000000000000000000000000000000..362dd1a9596dde63ee3005474875af806f461b0a --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Php80.php @@ -0,0 +1,115 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Ion Bazan <ion.bazan@gmail.com> + * @author Nico Oelgart <nicoswd@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Php80 +{ + public static function fdiv(float $dividend, float $divisor): float + { + return @($dividend / $divisor); + } + + public static function get_debug_type($value): string + { + switch (true) { + case null === $value: return 'null'; + case \is_bool($value): return 'bool'; + case \is_string($value): return 'string'; + case \is_array($value): return 'array'; + case \is_int($value): return 'int'; + case \is_float($value): return 'float'; + case \is_object($value): break; + case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; + default: + if (null === $type = @get_resource_type($value)) { + return 'unknown'; + } + + if ('Unknown' === $type) { + $type = 'closed'; + } + + return "resource ($type)"; + } + + $class = \get_class($value); + + if (false === strpos($class, '@')) { + return $class; + } + + return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; + } + + public static function get_resource_id($res): int + { + if (!\is_resource($res) && null === @get_resource_type($res)) { + throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); + } + + return (int) $res; + } + + public static function preg_last_error_msg(): string + { + switch (preg_last_error()) { + case \PREG_INTERNAL_ERROR: + return 'Internal error'; + case \PREG_BAD_UTF8_ERROR: + return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + case \PREG_BAD_UTF8_OFFSET_ERROR: + return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; + case \PREG_BACKTRACK_LIMIT_ERROR: + return 'Backtrack limit exhausted'; + case \PREG_RECURSION_LIMIT_ERROR: + return 'Recursion limit exhausted'; + case \PREG_JIT_STACKLIMIT_ERROR: + return 'JIT stack limit exhausted'; + case \PREG_NO_ERROR: + return 'No error'; + default: + return 'Unknown error'; + } + } + + public static function str_contains(string $haystack, string $needle): bool + { + return '' === $needle || false !== strpos($haystack, $needle); + } + + public static function str_starts_with(string $haystack, string $needle): bool + { + return 0 === strncmp($haystack, $needle, \strlen($needle)); + } + + public static function str_ends_with(string $haystack, string $needle): bool + { + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/PhpToken.php b/civicrm/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000000000000000000000000000000000000..fe6e6910562e57fe06d08125c7eb45f302f89994 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,103 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton <info@ensostudio.ru> + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/README.md b/civicrm/vendor/symfony/polyfill-php80/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3816c559d5703046ca57e23916e091dfabc9a77e --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/README.md @@ -0,0 +1,25 @@ +Symfony Polyfill / Php80 +======================== + +This component provides features added to PHP 8.0 core: + +- [`Stringable`](https://php.net/stringable) interface +- [`fdiv`](https://php.net/fdiv) +- [`ValueError`](https://php.net/valueerror) class +- [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class +- `FILTER_VALIDATE_BOOL` constant +- [`get_debug_type`](https://php.net/get_debug_type) +- [`PhpToken`](https://php.net/phptoken) class +- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) +- [`str_contains`](https://php.net/str_contains) +- [`str_starts_with`](https://php.net/str_starts_with) +- [`str_ends_with`](https://php.net/str_ends_with) +- [`get_resource_id`](https://php.net/get_resource_id) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php new file mode 100644 index 0000000000000000000000000000000000000000..7ea6d2772dcaa175ec17ec39b852553fd189b5cc --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php @@ -0,0 +1,22 @@ +<?php + +#[Attribute(Attribute::TARGET_CLASS)] +final class Attribute +{ + public const TARGET_CLASS = 1; + public const TARGET_FUNCTION = 2; + public const TARGET_METHOD = 4; + public const TARGET_PROPERTY = 8; + public const TARGET_CLASS_CONSTANT = 16; + public const TARGET_PARAMETER = 32; + public const TARGET_ALL = 63; + public const IS_REPEATABLE = 64; + + /** @var int */ + public $flags; + + public function __construct(int $flags = self::TARGET_ALL) + { + $this->flags = $flags; + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000000000000000000000000000000000000..72f10812b36de72bfd50b4c60919ce646fef57f8 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,7 @@ +<?php + +if (\PHP_VERSION_ID < 80000 && \extension_loaded('tokenizer')) { + class PhpToken extends Symfony\Polyfill\Php80\PhpToken + { + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php new file mode 100644 index 0000000000000000000000000000000000000000..77e037cb58d5acc48e5eb675c337fc2acff1d3f3 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php @@ -0,0 +1,11 @@ +<?php + +if (\PHP_VERSION_ID < 80000) { + interface Stringable + { + /** + * @return string + */ + public function __toString(); + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php new file mode 100644 index 0000000000000000000000000000000000000000..37937cbfae105a4f357acf202a923cf23589ef17 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -0,0 +1,7 @@ +<?php + +if (\PHP_VERSION_ID < 80000) { + class UnhandledMatchError extends Error + { + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php new file mode 100644 index 0000000000000000000000000000000000000000..a3a9b88b09657f6d263f956ca918144d8716cb43 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -0,0 +1,7 @@ +<?php + +if (\PHP_VERSION_ID < 80000) { + class ValueError extends Error + { + } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/bootstrap.php b/civicrm/vendor/symfony/polyfill-php80/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..e5f7dbc1a4584765f310d6ea19ecb938708bf4a9 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/bootstrap.php @@ -0,0 +1,42 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php80 as p; + +if (\PHP_VERSION_ID >= 80000) { + return; +} + +if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) { + define('FILTER_VALIDATE_BOOL', \FILTER_VALIDATE_BOOLEAN); +} + +if (!function_exists('fdiv')) { + function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); } +} +if (!function_exists('preg_last_error_msg')) { + function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } +} +if (!function_exists('str_contains')) { + function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_starts_with')) { + function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_ends_with')) { + function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('get_debug_type')) { + function get_debug_type($value): string { return p\Php80::get_debug_type($value); } +} +if (!function_exists('get_resource_id')) { + function get_resource_id($resource): int { return p\Php80::get_resource_id($resource); } +} diff --git a/civicrm/vendor/symfony/polyfill-php80/composer.json b/civicrm/vendor/symfony/polyfill-php80/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..cd3e9b65f464a6b4952a5454100894c8cff7692e --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php80/composer.json @@ -0,0 +1,40 @@ +{ + "name": "symfony/polyfill-php80", + "type": "library", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/civicrm/vendor/symfony/polyfill-php81/LICENSE b/civicrm/vendor/symfony/polyfill-php81/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..efb17f98e7dd39a40a4f94f1f14189d07b5bdd8a --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2021 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/symfony/polyfill-php81/Php81.php b/civicrm/vendor/symfony/polyfill-php81/Php81.php new file mode 100644 index 0000000000000000000000000000000000000000..f0507b765c2dbbb4c42077a52cfe11c46eb6159d --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/Php81.php @@ -0,0 +1,37 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php81; + +/** + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Php81 +{ + public static function array_is_list(array $array): bool + { + if ([] === $array || $array === array_values($array)) { + return true; + } + + $nextKey = -1; + + foreach ($array as $k => $v) { + if ($k !== ++$nextKey) { + return false; + } + } + + return true; + } +} diff --git a/civicrm/vendor/symfony/polyfill-php81/README.md b/civicrm/vendor/symfony/polyfill-php81/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7d8dd190789840852fd0c657067bf36874355e4b --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/README.md @@ -0,0 +1,17 @@ +Symfony Polyfill / Php81 +======================== + +This component provides features added to PHP 8.1 core: + +- [`array_is_list`](https://php.net/array_is_list) +- [`enum_exists`](https://php.net/enum-exists) +- [`MYSQLI_REFRESH_REPLICA`](https://php.net/mysqli.constants#constantmysqli-refresh-replica) constant +- [`ReturnTypeWillChange`](https://wiki.php.net/rfc/internal_method_return_types) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/civicrm/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php b/civicrm/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php new file mode 100644 index 0000000000000000000000000000000000000000..f4cad34f646cac25f0712b3ddfc4c6ebdc75fe4c --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php @@ -0,0 +1,11 @@ +<?php + +if (\PHP_VERSION_ID < 80100) { + #[Attribute(Attribute::TARGET_METHOD)] + final class ReturnTypeWillChange + { + public function __construct() + { + } + } +} diff --git a/civicrm/vendor/symfony/polyfill-php81/bootstrap.php b/civicrm/vendor/symfony/polyfill-php81/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..9f872e02f0a0e491a2c0a6f1a4c0fe6aa210cb8c --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/bootstrap.php @@ -0,0 +1,28 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php81 as p; + +if (\PHP_VERSION_ID >= 80100) { + return; +} + +if (defined('MYSQLI_REFRESH_SLAVE') && !defined('MYSQLI_REFRESH_REPLICA')) { + define('MYSQLI_REFRESH_REPLICA', 64); +} + +if (!function_exists('array_is_list')) { + function array_is_list(array $array): bool { return p\Php81::array_is_list($array); } +} + +if (!function_exists('enum_exists')) { + function enum_exists(string $enum, bool $autoload = true): bool { return $autoload && class_exists($enum) && false; } +} diff --git a/civicrm/vendor/symfony/polyfill-php81/composer.json b/civicrm/vendor/symfony/polyfill-php81/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..014da788e38fd2e42e07e8865e3e2daea0fda41f --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php81/composer.json @@ -0,0 +1,36 @@ +{ + "name": "symfony/polyfill-php81", + "type": "library", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/civicrm/vendor/symfony/process/.gitignore b/civicrm/vendor/symfony/process/.gitignore deleted file mode 100644 index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/process/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/ -composer.lock -phpunit.xml diff --git a/civicrm/vendor/symfony/process/CHANGELOG.md b/civicrm/vendor/symfony/process/CHANGELOG.md index c5cdb9944164baa2c123b262b57ef33e37b0bc34..69d4cbd77b22ab8d2233b00605e79ec86c3f1c2b 100644 --- a/civicrm/vendor/symfony/process/CHANGELOG.md +++ b/civicrm/vendor/symfony/process/CHANGELOG.md @@ -1,6 +1,45 @@ CHANGELOG ========= +4.4.0 +----- + + * deprecated `Process::inheritEnvironmentVariables()`: env variables are always inherited. + * added `Process::getLastOutputTime()` method + +4.2.0 +----- + + * added the `Process::fromShellCommandline()` to run commands in a shell wrapper + * deprecated passing a command as string when creating a `Process` instance + * deprecated the `Process::setCommandline()` and the `PhpProcess::setPhpBinary()` methods + * added the `Process::waitUntil()` method to wait for the process only for a + specific output, then continue the normal execution of your application + +4.1.0 +----- + + * added the `Process::isTtySupported()` method that allows to check for TTY support + * made `PhpExecutableFinder` look for the `PHP_BINARY` env var when searching the php binary + * added the `ProcessSignaledException` class to properly catch signaled process errors + +4.0.0 +----- + + * environment variables will always be inherited + * added a second `array $env = []` argument to the `start()`, `run()`, + `mustRun()`, and `restart()` methods of the `Process` class + * added a second `array $env = []` argument to the `start()` method of the + `PhpProcess` class + * the `ProcessUtils::escapeArgument()` method has been removed + * the `areEnvironmentVariablesInherited()`, `getOptions()`, and `setOptions()` + methods of the `Process` class have been removed + * support for passing `proc_open()` options has been removed + * removed the `ProcessBuilder` class, use the `Process` class instead + * removed the `getEnhanceWindowsCompatibility()` and `setEnhanceWindowsCompatibility()` methods of the `Process` class + * passing a not existing working directory to the constructor of the `Symfony\Component\Process\Process` class is not + supported anymore + 3.4.0 ----- diff --git a/civicrm/vendor/symfony/process/Exception/ExceptionInterface.php b/civicrm/vendor/symfony/process/Exception/ExceptionInterface.php index 75c1c9e5d800500d07f2790f21eb45a26439f3cd..bd4a60403ba7b161871f5bf3c728ada27fb1d0e2 100644 --- a/civicrm/vendor/symfony/process/Exception/ExceptionInterface.php +++ b/civicrm/vendor/symfony/process/Exception/ExceptionInterface.php @@ -16,6 +16,6 @@ namespace Symfony\Component\Process\Exception; * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ -interface ExceptionInterface +interface ExceptionInterface extends \Throwable { } diff --git a/civicrm/vendor/symfony/process/Exception/ProcessSignaledException.php b/civicrm/vendor/symfony/process/Exception/ProcessSignaledException.php new file mode 100644 index 0000000000000000000000000000000000000000..d4d322756f39b85737ff9b4adab714aeca70ebb9 --- /dev/null +++ b/civicrm/vendor/symfony/process/Exception/ProcessSignaledException.php @@ -0,0 +1,41 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +use Symfony\Component\Process\Process; + +/** + * Exception that is thrown when a process has been signaled. + * + * @author Sullivan Senechal <soullivaneuh@gmail.com> + */ +final class ProcessSignaledException extends RuntimeException +{ + private $process; + + public function __construct(Process $process) + { + $this->process = $process; + + parent::__construct(sprintf('The process has been signaled with signal "%s".', $process->getTermSignal())); + } + + public function getProcess(): Process + { + return $this->process; + } + + public function getSignal(): int + { + return $this->getProcess()->getTermSignal(); + } +} diff --git a/civicrm/vendor/symfony/process/Exception/ProcessTimedOutException.php b/civicrm/vendor/symfony/process/Exception/ProcessTimedOutException.php index fef4a8ae867b85c5b4728af1098891bcc00ef5a6..94391a4596327749ad4583e0a01c0d8406d6394e 100644 --- a/civicrm/vendor/symfony/process/Exception/ProcessTimedOutException.php +++ b/civicrm/vendor/symfony/process/Exception/ProcessTimedOutException.php @@ -20,13 +20,13 @@ use Symfony\Component\Process\Process; */ class ProcessTimedOutException extends RuntimeException { - const TYPE_GENERAL = 1; - const TYPE_IDLE = 2; + public const TYPE_GENERAL = 1; + public const TYPE_IDLE = 2; private $process; private $timeoutType; - public function __construct(Process $process, $timeoutType) + public function __construct(Process $process, int $timeoutType) { $this->process = $process; $this->timeoutType = $timeoutType; diff --git a/civicrm/vendor/symfony/process/InputStream.php b/civicrm/vendor/symfony/process/InputStream.php index ef38dd7bfd41c9b8a0cdcb4afd3006c10a6cedd1..4f8f71331aafcf9a8c69cafbc0c77eedf06f2d4d 100644 --- a/civicrm/vendor/symfony/process/InputStream.php +++ b/civicrm/vendor/symfony/process/InputStream.php @@ -66,6 +66,10 @@ class InputStream implements \IteratorAggregate return !$this->open; } + /** + * @return \Traversable + */ + #[\ReturnTypeWillChange] public function getIterator() { $this->open = true; @@ -78,9 +82,7 @@ class InputStream implements \IteratorAggregate $current = array_shift($this->input); if ($current instanceof \Iterator) { - foreach ($current as $cur) { - yield $cur; - } + yield from $current; } else { yield $current; } diff --git a/civicrm/vendor/symfony/process/LICENSE b/civicrm/vendor/symfony/process/LICENSE index 9e936ec0448b8549e5edf08e5ac5f01491a8bfc8..88bf75bb4d6a2898be0558b61cfe48996d33ffbf 100644 --- a/civicrm/vendor/symfony/process/LICENSE +++ b/civicrm/vendor/symfony/process/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2020 Fabien Potencier +Copyright (c) 2004-2022 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/symfony/process/PhpExecutableFinder.php b/civicrm/vendor/symfony/process/PhpExecutableFinder.php index b9a8015655b73077483f9b1ac1244c0f6cba4c44..92e0262ad7c95589bab8d265a7e2b5f08ceff90c 100644 --- a/civicrm/vendor/symfony/process/PhpExecutableFinder.php +++ b/civicrm/vendor/symfony/process/PhpExecutableFinder.php @@ -35,21 +35,35 @@ class PhpExecutableFinder */ public function find($includeArgs = true) { - $args = $this->findArguments(); - $args = $includeArgs && $args ? ' '.implode(' ', $args) : ''; + if ($php = getenv('PHP_BINARY')) { + if (!is_executable($php)) { + $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v'; + if ($php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) { + if (!is_executable($php)) { + return false; + } + } else { + return false; + } + } + + if (@is_dir($php)) { + return false; + } - // HHVM support - if (\defined('HHVM_VERSION')) { - return (getenv('PHP_BINARY') ?: \PHP_BINARY).$args; + return $php; } + $args = $this->findArguments(); + $args = $includeArgs && $args ? ' '.implode(' ', $args) : ''; + // PHP_BINARY return the current sapi executable - if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) { + if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cgi-fcgi', 'cli', 'cli-server', 'phpdbg'], true)) { return \PHP_BINARY.$args; } if ($php = getenv('PHP_PATH')) { - if (!@is_executable($php)) { + if (!@is_executable($php) || @is_dir($php)) { return false; } @@ -57,12 +71,12 @@ class PhpExecutableFinder } if ($php = getenv('PHP_PEAR_PHP_BIN')) { - if (@is_executable($php)) { + if (@is_executable($php) && !@is_dir($php)) { return $php; } } - if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php'))) { + if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php')) && !@is_dir($php)) { return $php; } @@ -82,10 +96,7 @@ class PhpExecutableFinder public function findArguments() { $arguments = []; - - if (\defined('HHVM_VERSION')) { - $arguments[] = '--php'; - } elseif ('phpdbg' === \PHP_SAPI) { + if ('phpdbg' === \PHP_SAPI) { $arguments[] = '-qrr'; } diff --git a/civicrm/vendor/symfony/process/PhpProcess.php b/civicrm/vendor/symfony/process/PhpProcess.php index a29c0db287e4175fab554d386ec3b1896434711f..dc064e0b8f4178c61420def4333907573cfd9ef2 100644 --- a/civicrm/vendor/symfony/process/PhpProcess.php +++ b/civicrm/vendor/symfony/process/PhpProcess.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Process; +use Symfony\Component\Process\Exception\LogicException; use Symfony\Component\Process\Exception\RuntimeException; /** @@ -29,15 +30,14 @@ class PhpProcess extends Process * @param string|null $cwd The working directory or null to use the working dir of the current PHP process * @param array|null $env The environment variables or null to use the same environment as the current PHP process * @param int $timeout The timeout in seconds - * @param array $options An array of options for proc_open + * @param array|null $php Path to the PHP binary to use with any additional arguments */ - public function __construct($script, $cwd = null, array $env = null, $timeout = 60, array $options = null) + public function __construct(string $script, string $cwd = null, array $env = null, int $timeout = 60, array $php = null) { - $executableFinder = new PhpExecutableFinder(); - if (false === $php = $executableFinder->find(false)) { - $php = null; - } else { - $php = array_merge([$php], $executableFinder->findArguments()); + if (null === $php) { + $executableFinder = new PhpExecutableFinder(); + $php = $executableFinder->find(false); + $php = false === $php ? null : array_merge([$php], $executableFinder->findArguments()); } if ('phpdbg' === \PHP_SAPI) { $file = tempnam(sys_get_temp_dir(), 'dbg'); @@ -46,30 +46,38 @@ class PhpProcess extends Process $php[] = $file; $script = null; } - if (null !== $options) { - @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), \E_USER_DEPRECATED); - } - parent::__construct($php, $cwd, $env, $script, $timeout, $options); + parent::__construct($php, $cwd, $env, $script, $timeout); + } + + /** + * {@inheritdoc} + */ + public static function fromShellCommandline(string $command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60) + { + throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class)); } /** * Sets the path to the PHP binary to use. + * + * @deprecated since Symfony 4.2, use the $php argument of the constructor instead. */ public function setPhpBinary($php) { + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the $php argument of the constructor instead.', __METHOD__), \E_USER_DEPRECATED); + $this->setCommandLine($php); } /** * {@inheritdoc} */ - public function start(callable $callback = null/*, array $env = []*/) + public function start(callable $callback = null, array $env = []) { if (null === $this->getCommandLine()) { throw new RuntimeException('Unable to find the PHP executable.'); } - $env = 1 < \func_num_args() ? func_get_arg(1) : null; parent::start($callback, $env); } diff --git a/civicrm/vendor/symfony/process/Pipes/AbstractPipes.php b/civicrm/vendor/symfony/process/Pipes/AbstractPipes.php index cdffaaffe4aee6492b7e34fabff603c4183a9c8a..ab65866c2ba06ef12f469babe0c0ca61cc757529 100644 --- a/civicrm/vendor/symfony/process/Pipes/AbstractPipes.php +++ b/civicrm/vendor/symfony/process/Pipes/AbstractPipes.php @@ -47,17 +47,17 @@ abstract class AbstractPipes implements PipesInterface public function close() { foreach ($this->pipes as $pipe) { - fclose($pipe); + if (\is_resource($pipe)) { + fclose($pipe); + } } $this->pipes = []; } /** * Returns true if a system call has been interrupted. - * - * @return bool */ - protected function hasSystemCallBeenInterrupted() + protected function hasSystemCallBeenInterrupted(): bool { $lastError = $this->lastError; $this->lastError = null; @@ -88,11 +88,9 @@ abstract class AbstractPipes implements PipesInterface /** * Writes input to stdin. * - * @return array|null - * * @throws InvalidArgumentException When an input iterator yields a non supported value */ - protected function write() + protected function write(): ?array { if (!isset($this->pipes[0])) { return null; @@ -137,7 +135,7 @@ abstract class AbstractPipes implements PipesInterface } if ($input) { - for (;;) { + while (true) { $data = fread($input, self::CHUNK_SIZE); if (!isset($data[0])) { break; @@ -175,7 +173,7 @@ abstract class AbstractPipes implements PipesInterface /** * @internal */ - public function handleError($type, $msg) + public function handleError(int $type, string $msg) { $this->lastError = $msg; } diff --git a/civicrm/vendor/symfony/process/Pipes/PipesInterface.php b/civicrm/vendor/symfony/process/Pipes/PipesInterface.php index 52bbe76b8f67b76ebd83fa5d1b82a7c7c26371e1..50eb5c47e1641b288915008e105cdc091fbcd3ee 100644 --- a/civicrm/vendor/symfony/process/Pipes/PipesInterface.php +++ b/civicrm/vendor/symfony/process/Pipes/PipesInterface.php @@ -20,21 +20,19 @@ namespace Symfony\Component\Process\Pipes; */ interface PipesInterface { - const CHUNK_SIZE = 16384; + public const CHUNK_SIZE = 16384; /** * Returns an array of descriptors for the use of proc_open. - * - * @return array */ - public function getDescriptors(); + public function getDescriptors(): array; /** * Returns an array of filenames indexed by their related stream in case these pipes use temporary files. * * @return string[] */ - public function getFiles(); + public function getFiles(): array; /** * Reads data in file handles and pipes. @@ -44,21 +42,17 @@ interface PipesInterface * * @return string[] An array of read data indexed by their fd */ - public function readAndWrite($blocking, $close = false); + public function readAndWrite(bool $blocking, bool $close = false): array; /** * Returns if the current state has open file handles or pipes. - * - * @return bool */ - public function areOpen(); + public function areOpen(): bool; /** * Returns if pipes are able to read output. - * - * @return bool */ - public function haveReadSupport(); + public function haveReadSupport(): bool; /** * Closes file handles and pipes. diff --git a/civicrm/vendor/symfony/process/Pipes/UnixPipes.php b/civicrm/vendor/symfony/process/Pipes/UnixPipes.php index 5784a315bd9984352cf45e0778d203ce0b318543..58a8da07c7493eeb11d6dc8757e68d5aa44f2489 100644 --- a/civicrm/vendor/symfony/process/Pipes/UnixPipes.php +++ b/civicrm/vendor/symfony/process/Pipes/UnixPipes.php @@ -26,15 +26,28 @@ class UnixPipes extends AbstractPipes private $ptyMode; private $haveReadSupport; - public function __construct($ttyMode, $ptyMode, $input, $haveReadSupport) + public function __construct(?bool $ttyMode, bool $ptyMode, $input, bool $haveReadSupport) { - $this->ttyMode = (bool) $ttyMode; - $this->ptyMode = (bool) $ptyMode; - $this->haveReadSupport = (bool) $haveReadSupport; + $this->ttyMode = $ttyMode; + $this->ptyMode = $ptyMode; + $this->haveReadSupport = $haveReadSupport; parent::__construct($input); } + /** + * @return array + */ + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } + public function __destruct() { $this->close(); @@ -43,7 +56,7 @@ class UnixPipes extends AbstractPipes /** * {@inheritdoc} */ - public function getDescriptors() + public function getDescriptors(): array { if (!$this->haveReadSupport) { $nullstream = fopen('/dev/null', 'c'); @@ -81,7 +94,7 @@ class UnixPipes extends AbstractPipes /** * {@inheritdoc} */ - public function getFiles() + public function getFiles(): array { return []; } @@ -89,7 +102,7 @@ class UnixPipes extends AbstractPipes /** * {@inheritdoc} */ - public function readAndWrite($blocking, $close = false) + public function readAndWrite(bool $blocking, bool $close = false): array { $this->unblock(); $w = $this->write(); @@ -138,7 +151,7 @@ class UnixPipes extends AbstractPipes /** * {@inheritdoc} */ - public function haveReadSupport() + public function haveReadSupport(): bool { return $this->haveReadSupport; } @@ -146,7 +159,7 @@ class UnixPipes extends AbstractPipes /** * {@inheritdoc} */ - public function areOpen() + public function areOpen(): bool { return (bool) $this->pipes; } diff --git a/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php b/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php index 36ea57e5bc083f261b3293d00684289ff6677593..69768f3d8a7cd450c1ee1c5c83c13871819687b6 100644 --- a/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php +++ b/civicrm/vendor/symfony/process/Pipes/WindowsPipes.php @@ -35,9 +35,9 @@ class WindowsPipes extends AbstractPipes ]; private $haveReadSupport; - public function __construct($input, $haveReadSupport) + public function __construct($input, bool $haveReadSupport) { - $this->haveReadSupport = (bool) $haveReadSupport; + $this->haveReadSupport = $haveReadSupport; if ($this->haveReadSupport) { // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big. @@ -71,7 +71,7 @@ class WindowsPipes extends AbstractPipes } $this->lockHandles[$pipe] = $h; - if (!fclose(fopen($file, 'w')) || !$h = fopen($file, 'r')) { + if (!($h = fopen($file, 'w')) || !fclose($h) || !$h = fopen($file, 'r')) { flock($this->lockHandles[$pipe], \LOCK_UN); fclose($this->lockHandles[$pipe]); unset($this->lockHandles[$pipe]); @@ -88,6 +88,19 @@ class WindowsPipes extends AbstractPipes parent::__construct($input); } + /** + * @return array + */ + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); + } + public function __destruct() { $this->close(); @@ -96,7 +109,7 @@ class WindowsPipes extends AbstractPipes /** * {@inheritdoc} */ - public function getDescriptors() + public function getDescriptors(): array { if (!$this->haveReadSupport) { $nullstream = fopen('NUL', 'c'); @@ -121,7 +134,7 @@ class WindowsPipes extends AbstractPipes /** * {@inheritdoc} */ - public function getFiles() + public function getFiles(): array { return $this->files; } @@ -129,7 +142,7 @@ class WindowsPipes extends AbstractPipes /** * {@inheritdoc} */ - public function readAndWrite($blocking, $close = false) + public function readAndWrite(bool $blocking, bool $close = false): array { $this->unblock(); $w = $this->write(); @@ -164,7 +177,7 @@ class WindowsPipes extends AbstractPipes /** * {@inheritdoc} */ - public function haveReadSupport() + public function haveReadSupport(): bool { return $this->haveReadSupport; } @@ -172,7 +185,7 @@ class WindowsPipes extends AbstractPipes /** * {@inheritdoc} */ - public function areOpen() + public function areOpen(): bool { return $this->pipes && $this->fileHandles; } diff --git a/civicrm/vendor/symfony/process/Process.php b/civicrm/vendor/symfony/process/Process.php index 91ce2c4987a9b2efcc5f5d9fefb02c4d64f34925..09cd9602a1c396bdc4cbf201aaa7da0ded8aecc0 100644 --- a/civicrm/vendor/symfony/process/Process.php +++ b/civicrm/vendor/symfony/process/Process.php @@ -14,6 +14,7 @@ namespace Symfony\Component\Process; use Symfony\Component\Process\Exception\InvalidArgumentException; use Symfony\Component\Process\Exception\LogicException; use Symfony\Component\Process\Exception\ProcessFailedException; +use Symfony\Component\Process\Exception\ProcessSignaledException; use Symfony\Component\Process\Exception\ProcessTimedOutException; use Symfony\Component\Process\Exception\RuntimeException; use Symfony\Component\Process\Pipes\PipesInterface; @@ -29,51 +30,47 @@ use Symfony\Component\Process\Pipes\WindowsPipes; */ class Process implements \IteratorAggregate { - const ERR = 'err'; - const OUT = 'out'; + public const ERR = 'err'; + public const OUT = 'out'; - const STATUS_READY = 'ready'; - const STATUS_STARTED = 'started'; - const STATUS_TERMINATED = 'terminated'; + public const STATUS_READY = 'ready'; + public const STATUS_STARTED = 'started'; + public const STATUS_TERMINATED = 'terminated'; - const STDIN = 0; - const STDOUT = 1; - const STDERR = 2; + public const STDIN = 0; + public const STDOUT = 1; + public const STDERR = 2; // Timeout Precision in seconds. - const TIMEOUT_PRECISION = 0.2; + public const TIMEOUT_PRECISION = 0.2; - const ITER_NON_BLOCKING = 1; // By default, iterating over outputs is a blocking call, use this flag to make it non-blocking - const ITER_KEEP_OUTPUT = 2; // By default, outputs are cleared while iterating, use this flag to keep them in memory - const ITER_SKIP_OUT = 4; // Use this flag to skip STDOUT while iterating - const ITER_SKIP_ERR = 8; // Use this flag to skip STDERR while iterating + public const ITER_NON_BLOCKING = 1; // By default, iterating over outputs is a blocking call, use this flag to make it non-blocking + public const ITER_KEEP_OUTPUT = 2; // By default, outputs are cleared while iterating, use this flag to keep them in memory + public const ITER_SKIP_OUT = 4; // Use this flag to skip STDOUT while iterating + public const ITER_SKIP_ERR = 8; // Use this flag to skip STDERR while iterating private $callback; private $hasCallback = false; private $commandline; private $cwd; - private $env; + private $env = []; private $input; private $starttime; private $lastOutputTime; private $timeout; private $idleTimeout; - private $options = ['suppress_errors' => true]; private $exitcode; private $fallbackStatus = []; private $processInformation; private $outputDisabled = false; private $stdout; private $stderr; - private $enhanceWindowsCompatibility = true; - private $enhanceSigchildCompatibility; private $process; private $status = self::STATUS_READY; private $incrementalOutputOffset = 0; private $incrementalErrorOutputOffset = 0; private $tty = false; private $pty; - private $inheritEnv = false; private $useFileHandles = false; /** @var PipesInterface */ @@ -132,22 +129,25 @@ class Process implements \IteratorAggregate ]; /** - * @param string|array $commandline The command line to run - * @param string|null $cwd The working directory or null to use the working dir of the current PHP process - * @param array|null $env The environment variables or null to use the same environment as the current PHP process - * @param mixed|null $input The input as stream resource, scalar or \Traversable, or null for no input - * @param int|float|null $timeout The timeout in seconds or null to disable - * @param array $options An array of options for proc_open + * @param array $command The command to run and its arguments listed as separate entries + * @param string|null $cwd The working directory or null to use the working dir of the current PHP process + * @param array|null $env The environment variables or null to use the same environment as the current PHP process + * @param mixed $input The input as stream resource, scalar or \Traversable, or null for no input + * @param int|float|null $timeout The timeout in seconds or null to disable * - * @throws RuntimeException When proc_open is not installed + * @throws LogicException When proc_open is not installed */ - public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = null) + public function __construct($command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60) { if (!\function_exists('proc_open')) { - throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.'); + throw new LogicException('The Process class relies on proc_open, which is not available on your PHP installation.'); } - $this->commandline = $commandline; + if (!\is_array($command)) { + @trigger_error(sprintf('Passing a command as string when creating a "%s" instance is deprecated since Symfony 4.2, pass it as an array of its arguments instead, or use the "Process::fromShellCommandline()" constructor if you need features provided by the shell.', __CLASS__), \E_USER_DEPRECATED); + } + + $this->commandline = $command; $this->cwd = $cwd; // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started @@ -165,11 +165,50 @@ class Process implements \IteratorAggregate $this->setTimeout($timeout); $this->useFileHandles = '\\' === \DIRECTORY_SEPARATOR; $this->pty = false; - $this->enhanceSigchildCompatibility = '\\' !== \DIRECTORY_SEPARATOR && $this->isSigchildEnabled(); - if (null !== $options) { - @trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), \E_USER_DEPRECATED); - $this->options = array_replace($this->options, $options); - } + } + + /** + * Creates a Process instance as a command-line to be run in a shell wrapper. + * + * Command-lines are parsed by the shell of your OS (/bin/sh on Unix-like, cmd.exe on Windows.) + * This allows using e.g. pipes or conditional execution. In this mode, signals are sent to the + * shell wrapper and not to your commands. + * + * In order to inject dynamic values into command-lines, we strongly recommend using placeholders. + * This will save escaping values, which is not portable nor secure anyway: + * + * $process = Process::fromShellCommandline('my_command "${:MY_VAR}"'); + * $process->run(null, ['MY_VAR' => $theValue]); + * + * @param string $command The command line to pass to the shell of the OS + * @param string|null $cwd The working directory or null to use the working dir of the current PHP process + * @param array|null $env The environment variables or null to use the same environment as the current PHP process + * @param mixed $input The input as stream resource, scalar or \Traversable, or null for no input + * @param int|float|null $timeout The timeout in seconds or null to disable + * + * @return static + * + * @throws LogicException When proc_open is not installed + */ + public static function fromShellCommandline(string $command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60) + { + $process = new static([], $cwd, $env, $input, $timeout); + $process->commandline = $command; + + return $process; + } + + /** + * @return array + */ + public function __sleep() + { + throw new \BadMethodCallException('Cannot serialize '.__CLASS__); + } + + public function __wakeup() + { + throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); } public function __destruct() @@ -197,15 +236,16 @@ class Process implements \IteratorAggregate * * @return int The exit status code * - * @throws RuntimeException When process can't be launched - * @throws RuntimeException When process stopped after receiving signal - * @throws LogicException In case a callback is provided and output has been disabled + * @throws RuntimeException When process can't be launched + * @throws RuntimeException When process is already running + * @throws ProcessTimedOutException When process timed out + * @throws ProcessSignaledException When process stopped after receiving signal + * @throws LogicException In case a callback is provided and output has been disabled * - * @final since version 3.3 + * @final */ - public function run($callback = null/*, array $env = []*/) + public function run(callable $callback = null, array $env = []): int { - $env = 1 < \func_num_args() ? func_get_arg(1) : null; $this->start($callback, $env); return $this->wait(); @@ -219,18 +259,12 @@ class Process implements \IteratorAggregate * * @return $this * - * @throws RuntimeException if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled * @throws ProcessFailedException if the process didn't terminate successfully * - * @final since version 3.3 + * @final */ - public function mustRun(callable $callback = null/*, array $env = []*/) + public function mustRun(callable $callback = null, array $env = []): self { - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); - } - $env = 1 < \func_num_args() ? func_get_arg(1) : null; - if (0 !== $this->run($callback, $env)) { throw new ProcessFailedException($this); } @@ -257,29 +291,23 @@ class Process implements \IteratorAggregate * @throws RuntimeException When process is already running * @throws LogicException In case a callback is provided and output has been disabled */ - public function start(callable $callback = null/*, array $env = [*/) + public function start(callable $callback = null, array $env = []) { if ($this->isRunning()) { throw new RuntimeException('Process is already running.'); } - if (2 <= \func_num_args()) { - $env = func_get_arg(1); - } else { - if (__CLASS__ !== static::class) { - $r = new \ReflectionMethod($this, __FUNCTION__); - if (__CLASS__ !== $r->getDeclaringClass()->getName() && (2 > $r->getNumberOfParameters() || 'env' !== $r->getParameters()[1]->name)) { - @trigger_error(sprintf('The %s::start() method expects a second "$env" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), \E_USER_DEPRECATED); - } - } - $env = null; - } $this->resetProcessData(); $this->starttime = $this->lastOutputTime = microtime(true); $this->callback = $this->buildCallback($callback); $this->hasCallback = null !== $callback; $descriptors = $this->getDescriptors(); - $inheritEnv = $this->inheritEnv; + + if ($this->env) { + $env += '\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($this->env, $env, 'strcasecmp') : $this->env; + } + + $env += '\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($this->getDefaultEnv(), $env, 'strcasecmp') : $this->getDefaultEnv(); if (\is_array($commandline = $this->commandline)) { $commandline = implode(' ', array_map([$this, 'escapeArgument'], $commandline)); @@ -288,28 +316,16 @@ class Process implements \IteratorAggregate // exec is mandatory to deal with sending a signal to the process $commandline = 'exec '.$commandline; } - } - - if (null === $env) { - $env = $this->env; } else { - if ($this->env) { - $env += $this->env; - } - $inheritEnv = true; + $commandline = $this->replacePlaceholders($commandline, $env); } - if (null !== $env && $inheritEnv) { - $env += $this->getDefaultEnv(); - } elseif (null !== $env) { - @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', \E_USER_DEPRECATED); - } else { - $env = $this->getDefaultEnv(); - } - if ('\\' === \DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) { - $this->options['bypass_shell'] = true; + $options = ['suppress_errors' => true]; + + if ('\\' === \DIRECTORY_SEPARATOR) { + $options['bypass_shell'] = true; $commandline = $this->prepareWindowsCommandLine($commandline, $env); - } elseif (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + } elseif (!$this->useFileHandles && $this->isSigchildEnabled()) { // last exit code is output on the fourth pipe and caught to work around --enable-sigchild $descriptors[3] = ['pipe', 'w']; @@ -321,22 +337,19 @@ class Process implements \IteratorAggregate // @see : https://bugs.php.net/69442 $ptsWorkaround = fopen(__FILE__, 'r'); } - if (\defined('HHVM_VERSION')) { - $envPairs = $env; - } else { - $envPairs = []; - foreach ($env as $k => $v) { - if (false !== $v) { - $envPairs[] = $k.'='.$v; - } + + $envPairs = []; + foreach ($env as $k => $v) { + if (false !== $v && false === \in_array($k, ['argc', 'argv', 'ARGC', 'ARGV'], true)) { + $envPairs[] = $k.'='.$v; } } if (!is_dir($this->cwd)) { - @trigger_error('The provided cwd does not exist. Command is currently ran against getcwd(). This behavior is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED); + throw new RuntimeException(sprintf('The provided cwd "%s" does not exist.', $this->cwd)); } - $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options); + $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $options); if (!\is_resource($this->process)) { throw new RuntimeException('Unable to launch a new process.'); @@ -370,14 +383,13 @@ class Process implements \IteratorAggregate * * @see start() * - * @final since version 3.3 + * @final */ - public function restart(callable $callback = null/*, array $env = []*/) + public function restart(callable $callback = null, array $env = []): self { if ($this->isRunning()) { throw new RuntimeException('Process is already running.'); } - $env = 1 < \func_num_args() ? func_get_arg(1) : null; $process = clone $this; $process->start($callback, $env); @@ -396,9 +408,9 @@ class Process implements \IteratorAggregate * * @return int The exitcode of the process * - * @throws RuntimeException When process timed out - * @throws RuntimeException When process stopped after receiving signal - * @throws LogicException When process is not yet started + * @throws ProcessTimedOutException When process timed out + * @throws ProcessSignaledException When process stopped after receiving signal + * @throws LogicException When process is not yet started */ public function wait(callable $callback = null) { @@ -409,7 +421,7 @@ class Process implements \IteratorAggregate if (null !== $callback) { if (!$this->processPipes->haveReadSupport()) { $this->stop(0); - throw new \LogicException('Pass the callback to the Process::start method or enableOutput to use a callback with Process::wait.'); + throw new LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::wait".'); } $this->callback = $this->buildCallback($callback); } @@ -426,12 +438,58 @@ class Process implements \IteratorAggregate } if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) { - throw new RuntimeException(sprintf('The process has been signaled with signal "%s".', $this->processInformation['termsig'])); + throw new ProcessSignaledException($this); } return $this->exitcode; } + /** + * Waits until the callback returns true. + * + * The callback receives the type of output (out or err) and some bytes + * from the output in real-time while writing the standard input to the process. + * It allows to have feedback from the independent process during execution. + * + * @throws RuntimeException When process timed out + * @throws LogicException When process is not yet started + * @throws ProcessTimedOutException In case the timeout was reached + */ + public function waitUntil(callable $callback): bool + { + $this->requireProcessIsStarted(__FUNCTION__); + $this->updateStatus(false); + + if (!$this->processPipes->haveReadSupport()) { + $this->stop(0); + throw new LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::waitUntil".'); + } + $callback = $this->buildCallback($callback); + + $ready = false; + while (true) { + $this->checkTimeout(); + $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen(); + $output = $this->processPipes->readAndWrite($running, '\\' !== \DIRECTORY_SEPARATOR || !$running); + + foreach ($output as $type => $data) { + if (3 !== $type) { + $ready = $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data) || $ready; + } elseif (!isset($this->fallbackStatus['signaled'])) { + $this->fallbackStatus['exitcode'] = (int) $data; + } + } + if ($ready) { + return true; + } + if (!$running) { + return false; + } + + usleep(1000); + } + } + /** * Returns the Pid (process identifier), if applicable. * @@ -564,6 +622,7 @@ class Process implements \IteratorAggregate * * @return \Generator */ + #[\ReturnTypeWillChange] public function getIterator($flags = 0) { $this->readPipesForOutput(__FUNCTION__, false); @@ -688,15 +747,9 @@ class Process implements \IteratorAggregate * Returns the exit code returned by the process. * * @return int|null The exit status code, null if the Process is not terminated - * - * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled */ public function getExitCode() { - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); - } - $this->updateStatus(false); return $this->exitcode; @@ -719,7 +772,7 @@ class Process implements \IteratorAggregate return null; } - return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error'; + return self::$exitCodes[$exitcode] ?? 'Unknown error'; } /** @@ -739,17 +792,12 @@ class Process implements \IteratorAggregate * * @return bool * - * @throws RuntimeException In case --enable-sigchild is activated - * @throws LogicException In case the process is not terminated + * @throws LogicException In case the process is not terminated */ public function hasBeenSignaled() { $this->requireProcessIsTerminated(__FUNCTION__); - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); - } - return $this->processInformation['signaled']; } @@ -767,7 +815,7 @@ class Process implements \IteratorAggregate { $this->requireProcessIsTerminated(__FUNCTION__); - if ($this->isSigchildEnabled() && (!$this->enhanceSigchildCompatibility || -1 === $this->processInformation['termsig'])) { + if ($this->isSigchildEnabled() && -1 === $this->processInformation['termsig']) { throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); } @@ -870,7 +918,7 @@ class Process implements \IteratorAggregate { $timeoutMicro = microtime(true) + $timeout; if ($this->isRunning()) { - // given `SIGTERM` may not be defined and that `proc_terminate` uses the constant value and not the constant itself, we use the same here + // given SIGTERM may not be defined and that "proc_terminate" uses the constant value and not the constant itself, we use the same here $this->doSignal(15, false); do { usleep(1000); @@ -899,10 +947,8 @@ class Process implements \IteratorAggregate * Adds a line to the STDOUT stream. * * @internal - * - * @param string $line The line to append */ - public function addOutput($line) + public function addOutput(string $line) { $this->lastOutputTime = microtime(true); @@ -915,10 +961,8 @@ class Process implements \IteratorAggregate * Adds a line to the STDERR stream. * * @internal - * - * @param string $line The line to append */ - public function addErrorOutput($line) + public function addErrorOutput(string $line) { $this->lastOutputTime = microtime(true); @@ -927,6 +971,14 @@ class Process implements \IteratorAggregate fseek($this->stderr, $this->incrementalErrorOutputOffset); } + /** + * Gets the last output time in seconds. + */ + public function getLastOutputTime(): ?float + { + return $this->lastOutputTime; + } + /** * Gets the command line to be executed. * @@ -943,9 +995,13 @@ class Process implements \IteratorAggregate * @param string|array $commandline The command to execute * * @return $this + * + * @deprecated since Symfony 4.2. */ public function setCommandLine($commandline) { + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); + $this->commandline = $commandline; return $this; @@ -1026,16 +1082,9 @@ class Process implements \IteratorAggregate if ('\\' === \DIRECTORY_SEPARATOR && $tty) { throw new RuntimeException('TTY mode is not supported on Windows platform.'); } - if ($tty) { - static $isTtySupported; - if (null === $isTtySupported) { - $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes); - } - - if (!$isTtySupported) { - throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.'); - } + if ($tty && !self::isTtySupported()) { + throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.'); } $this->tty = (bool) $tty; @@ -1120,25 +1169,12 @@ class Process implements \IteratorAggregate /** * Sets the environment variables. * - * Each environment variable value should be a string. - * If it is an array, the variable is ignored. - * If it is false or null, it will be removed when - * env vars are otherwise inherited. - * - * That happens in PHP when 'argv' is registered into - * the $_ENV array for instance. - * - * @param array $env The new environment variables + * @param array<string|\Stringable> $env The new environment variables * * @return $this */ public function setEnv(array $env) { - // Process can not handle env values that are arrays - $env = array_filter($env, function ($value) { - return !\is_array($value); - }); - $this->env = $env; return $this; @@ -1176,140 +1212,26 @@ class Process implements \IteratorAggregate return $this; } - /** - * Gets the options for proc_open. - * - * @return array The current options - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function getOptions() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); - - return $this->options; - } - - /** - * Sets the options for proc_open. - * - * @param array $options The new options - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function setOptions(array $options) - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0.', __METHOD__), \E_USER_DEPRECATED); - - $this->options = $options; - - return $this; - } - - /** - * Gets whether or not Windows compatibility is enabled. - * - * This is true by default. - * - * @return bool - * - * @deprecated since version 3.3, to be removed in 4.0. Enhanced Windows compatibility will always be enabled. - */ - public function getEnhanceWindowsCompatibility() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); - - return $this->enhanceWindowsCompatibility; - } - - /** - * Sets whether or not Windows compatibility is enabled. - * - * @param bool $enhance - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. Enhanced Windows compatibility will always be enabled. - */ - public function setEnhanceWindowsCompatibility($enhance) - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Enhanced Windows compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); - - $this->enhanceWindowsCompatibility = (bool) $enhance; - - return $this; - } - - /** - * Returns whether sigchild compatibility mode is activated or not. - * - * @return bool - * - * @deprecated since version 3.3, to be removed in 4.0. Sigchild compatibility will always be enabled. - */ - public function getEnhanceSigchildCompatibility() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); - - return $this->enhanceSigchildCompatibility; - } - - /** - * Activates sigchild compatibility mode. - * - * Sigchild compatibility mode is required to get the exit code and - * determine the success of a process when PHP has been compiled with - * the --enable-sigchild option - * - * @param bool $enhance - * - * @return $this - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function setEnhanceSigchildCompatibility($enhance) - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), \E_USER_DEPRECATED); - - $this->enhanceSigchildCompatibility = (bool) $enhance; - - return $this; - } - /** * Sets whether environment variables will be inherited or not. * * @param bool $inheritEnv * * @return $this + * + * @deprecated since Symfony 4.4, env variables are always inherited */ public function inheritEnvironmentVariables($inheritEnv = true) { + @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.4, env variables are always inherited.', __METHOD__), \E_USER_DEPRECATED); + if (!$inheritEnv) { - @trigger_error('Not inheriting environment variables is deprecated since Symfony 3.3 and will always happen in 4.0. Set "Process::inheritEnvironmentVariables()" to true instead.', \E_USER_DEPRECATED); + throw new InvalidArgumentException('Not inheriting environment variables is not supported.'); } - $this->inheritEnv = (bool) $inheritEnv; - return $this; } - /** - * Returns whether environment variables will be inherited or not. - * - * @return bool - * - * @deprecated since version 3.3, to be removed in 4.0. Environment variables will always be inherited. - */ - public function areEnvironmentVariablesInherited() - { - @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Environment variables will always be inherited.', __METHOD__), \E_USER_DEPRECATED); - - return $this->inheritEnv; - } - /** * Performs a check between the timeout definition and the time the process started. * @@ -1337,6 +1259,20 @@ class Process implements \IteratorAggregate } } + /** + * Returns whether TTY is supported on the current operating system. + */ + public static function isTtySupported(): bool + { + static $isTtySupported; + + if (null === $isTtySupported) { + $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes); + } + + return $isTtySupported; + } + /** * Returns whether PTY is supported on the current operating system. * @@ -1359,10 +1295,8 @@ class Process implements \IteratorAggregate /** * Creates the descriptors needed by the proc_open. - * - * @return array */ - private function getDescriptors() + private function getDescriptors(): array { if ($this->input instanceof \Iterator) { $this->input->rewind(); @@ -1389,25 +1323,21 @@ class Process implements \IteratorAggregate protected function buildCallback(callable $callback = null) { if ($this->outputDisabled) { - return function ($type, $data) use ($callback) { - if (null !== $callback) { - \call_user_func($callback, $type, $data); - } + return function ($type, $data) use ($callback): bool { + return null !== $callback && $callback($type, $data); }; } $out = self::OUT; - return function ($type, $data) use ($callback, $out) { + return function ($type, $data) use ($callback, $out): bool { if ($out == $type) { $this->addOutput($data); } else { $this->addErrorOutput($data); } - if (null !== $callback) { - \call_user_func($callback, $type, $data); - } + return null !== $callback && $callback($type, $data); }; } @@ -1427,7 +1357,7 @@ class Process implements \IteratorAggregate $this->readPipes($running && $blocking, '\\' !== \DIRECTORY_SEPARATOR || !$running); - if ($this->fallbackStatus && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + if ($this->fallbackStatus && $this->isSigchildEnabled()) { $this->processInformation = $this->fallbackStatus + $this->processInformation; } @@ -1447,14 +1377,14 @@ class Process implements \IteratorAggregate return self::$sigchild; } - if (!\function_exists('phpinfo') || \defined('HHVM_VERSION')) { + if (!\function_exists('phpinfo')) { return self::$sigchild = false; } ob_start(); phpinfo(\INFO_GENERAL); - return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild'); + return self::$sigchild = str_contains(ob_get_clean(), '--enable-sigchild'); } /** @@ -1465,7 +1395,7 @@ class Process implements \IteratorAggregate * * @throws LogicException in case output has been disabled or process is not started */ - private function readPipesForOutput($caller, $blocking = false) + private function readPipesForOutput(string $caller, bool $blocking = false) { if ($this->outputDisabled) { throw new LogicException('Output has been disabled.'); @@ -1479,13 +1409,9 @@ class Process implements \IteratorAggregate /** * Validates and returns the filtered timeout. * - * @param int|float|null $timeout - * - * @return float|null - * * @throws InvalidArgumentException if the given timeout is a negative number */ - private function validateTimeout($timeout) + private function validateTimeout(?float $timeout): ?float { $timeout = (float) $timeout; @@ -1504,7 +1430,7 @@ class Process implements \IteratorAggregate * @param bool $blocking Whether to use blocking calls or not * @param bool $close Whether to close file handles or not */ - private function readPipes($blocking, $close) + private function readPipes(bool $blocking, bool $close) { $result = $this->processPipes->readAndWrite($blocking, $close); @@ -1523,7 +1449,7 @@ class Process implements \IteratorAggregate * * @return int The exitcode */ - private function close() + private function close(): int { $this->processPipes->close(); if (\is_resource($this->process)) { @@ -1536,7 +1462,7 @@ class Process implements \IteratorAggregate if ($this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) { // if process has been signaled, no exitcode but a valid termsig, apply Unix convention $this->exitcode = 128 + $this->processInformation['termsig']; - } elseif ($this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + } elseif ($this->isSigchildEnabled()) { $this->processInformation['signaled'] = true; $this->processInformation['termsig'] = -1; } @@ -1560,8 +1486,8 @@ class Process implements \IteratorAggregate $this->exitcode = null; $this->fallbackStatus = []; $this->processInformation = null; - $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b'); - $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b'); + $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+'); + $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+'); $this->process = null; $this->latestSignal = null; $this->status = self::STATUS_READY; @@ -1575,13 +1501,11 @@ class Process implements \IteratorAggregate * @param int $signal A valid POSIX signal (see https://php.net/pcntl.constants) * @param bool $throwException Whether to throw exception in case signal failed * - * @return bool True if the signal was sent successfully, false otherwise - * * @throws LogicException In case the process is not running * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed * @throws RuntimeException In case of failure */ - private function doSignal($signal, $throwException) + private function doSignal(int $signal, bool $throwException): bool { if (null === $pid = $this->getPid()) { if ($throwException) { @@ -1601,7 +1525,7 @@ class Process implements \IteratorAggregate return false; } } else { - if (!$this->enhanceSigchildCompatibility || !$this->isSigchildEnabled()) { + if (!$this->isSigchildEnabled()) { $ok = @proc_terminate($this->process, $signal); } elseif (\function_exists('posix_kill')) { $ok = @posix_kill($pid, $signal); @@ -1610,14 +1534,14 @@ class Process implements \IteratorAggregate } if (!$ok) { if ($throwException) { - throw new RuntimeException(sprintf('Error while sending signal `%s`.', $signal)); + throw new RuntimeException(sprintf('Error while sending signal "%s".', $signal)); } return false; } } - $this->latestSignal = (int) $signal; + $this->latestSignal = $signal; $this->fallbackStatus['signaled'] = true; $this->fallbackStatus['exitcode'] = -1; $this->fallbackStatus['termsig'] = $this->latestSignal; @@ -1625,7 +1549,7 @@ class Process implements \IteratorAggregate return true; } - private function prepareWindowsCommandLine($cmd, array &$env) + private function prepareWindowsCommandLine(string $cmd, array &$env): string { $uid = uniqid('', true); $varCount = 0; @@ -1645,7 +1569,7 @@ class Process implements \IteratorAggregate if (isset($varCache[$m[0]])) { return $varCache[$m[0]]; } - if (false !== strpos($value = $m[1], "\0")) { + if (str_contains($value = $m[1], "\0")) { $value = str_replace("\0", '?', $value); } if (false === strpbrk($value, "\"%!\n")) { @@ -1674,11 +1598,9 @@ class Process implements \IteratorAggregate /** * Ensures the process is running or terminated, throws a LogicException if the process has a not started. * - * @param string $functionName The function name that was called - * * @throws LogicException if the process has not run */ - private function requireProcessIsStarted($functionName) + private function requireProcessIsStarted(string $functionName) { if (!$this->isStarted()) { throw new LogicException(sprintf('Process must be started before calling "%s()".', $functionName)); @@ -1686,13 +1608,11 @@ class Process implements \IteratorAggregate } /** - * Ensures the process is terminated, throws a LogicException if the process has a status different than `terminated`. - * - * @param string $functionName The function name that was called + * Ensures the process is terminated, throws a LogicException if the process has a status different than "terminated". * * @throws LogicException if the process is not yet terminated */ - private function requireProcessIsTerminated($functionName) + private function requireProcessIsTerminated(string $functionName) { if (!$this->isTerminated()) { throw new LogicException(sprintf('Process must be terminated before calling "%s()".', $functionName)); @@ -1701,20 +1621,16 @@ class Process implements \IteratorAggregate /** * Escapes a string to be used as a shell argument. - * - * @param string $argument The argument that will be escaped - * - * @return string The escaped argument */ - private function escapeArgument($argument) + private function escapeArgument(?string $argument): string { + if ('' === $argument || null === $argument) { + return '""'; + } if ('\\' !== \DIRECTORY_SEPARATOR) { return "'".str_replace("'", "'\\''", $argument)."'"; } - if ('' === $argument = (string) $argument) { - return '""'; - } - if (false !== strpos($argument, "\0")) { + if (str_contains($argument, "\0")) { $argument = str_replace("\0", '?', $argument); } if (!preg_match('/[\/()%!^"<>&|\s]/', $argument)) { @@ -1725,22 +1641,22 @@ class Process implements \IteratorAggregate return '"'.str_replace(['"', '^', '%', '!', "\n"], ['""', '"^^"', '"^%"', '"^!"', '!LF!'], $argument).'"'; } - private function getDefaultEnv() + private function replacePlaceholders(string $commandline, array $env) { - $env = []; - - foreach ($_SERVER as $k => $v) { - if (\is_string($v) && false !== $v = getenv($k)) { - $env[$k] = $v; + return preg_replace_callback('/"\$\{:([_a-zA-Z]++[_a-zA-Z0-9]*+)\}"/', function ($matches) use ($commandline, $env) { + if (!isset($env[$matches[1]]) || false === $env[$matches[1]]) { + throw new InvalidArgumentException(sprintf('Command line is missing a value for parameter "%s": ', $matches[1]).$commandline); } - } - foreach ($_ENV as $k => $v) { - if (\is_string($v)) { - $env[$k] = $v; - } - } + return $this->escapeArgument($env[$matches[1]]); + }, $commandline); + } + + private function getDefaultEnv(): array + { + $env = getenv(); + $env = ('\\' === \DIRECTORY_SEPARATOR ? array_intersect_ukey($env, $_SERVER, 'strcasecmp') : array_intersect_key($env, $_SERVER)) ?: $env; - return $env; + return $_ENV + ('\\' === \DIRECTORY_SEPARATOR ? array_diff_ukey($env, $_ENV, 'strcasecmp') : $env); } } diff --git a/civicrm/vendor/symfony/process/ProcessBuilder.php b/civicrm/vendor/symfony/process/ProcessBuilder.php deleted file mode 100644 index 6a8e1ef83d7522a466592ca8d46601d4a7ea5f37..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/process/ProcessBuilder.php +++ /dev/null @@ -1,280 +0,0 @@ -<?php - -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier <fabien@symfony.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Process; - -@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use the Process class instead.', ProcessBuilder::class), \E_USER_DEPRECATED); - -use Symfony\Component\Process\Exception\InvalidArgumentException; -use Symfony\Component\Process\Exception\LogicException; - -/** - * @author Kris Wallsmith <kris@symfony.com> - * - * @deprecated since version 3.4, to be removed in 4.0. Use the Process class instead. - */ -class ProcessBuilder -{ - private $arguments; - private $cwd; - private $env = []; - private $input; - private $timeout = 60; - private $options; - private $inheritEnv = true; - private $prefix = []; - private $outputDisabled = false; - - /** - * @param string[] $arguments An array of arguments - */ - public function __construct(array $arguments = []) - { - $this->arguments = $arguments; - } - - /** - * Creates a process builder instance. - * - * @param string[] $arguments An array of arguments - * - * @return static - */ - public static function create(array $arguments = []) - { - return new static($arguments); - } - - /** - * Adds an unescaped argument to the command string. - * - * @param string $argument A command argument - * - * @return $this - */ - public function add($argument) - { - $this->arguments[] = $argument; - - return $this; - } - - /** - * Adds a prefix to the command string. - * - * The prefix is preserved when resetting arguments. - * - * @param string|array $prefix A command prefix or an array of command prefixes - * - * @return $this - */ - public function setPrefix($prefix) - { - $this->prefix = \is_array($prefix) ? $prefix : [$prefix]; - - return $this; - } - - /** - * Sets the arguments of the process. - * - * Arguments must not be escaped. - * Previous arguments are removed. - * - * @param string[] $arguments - * - * @return $this - */ - public function setArguments(array $arguments) - { - $this->arguments = $arguments; - - return $this; - } - - /** - * Sets the working directory. - * - * @param string|null $cwd The working directory - * - * @return $this - */ - public function setWorkingDirectory($cwd) - { - $this->cwd = $cwd; - - return $this; - } - - /** - * Sets whether environment variables will be inherited or not. - * - * @param bool $inheritEnv - * - * @return $this - */ - public function inheritEnvironmentVariables($inheritEnv = true) - { - $this->inheritEnv = $inheritEnv; - - return $this; - } - - /** - * Sets an environment variable. - * - * Setting a variable overrides its previous value. Use `null` to unset a - * defined environment variable. - * - * @param string $name The variable name - * @param string|null $value The variable value - * - * @return $this - */ - public function setEnv($name, $value) - { - $this->env[$name] = $value; - - return $this; - } - - /** - * Adds a set of environment variables. - * - * Already existing environment variables with the same name will be - * overridden by the new values passed to this method. Pass `null` to unset - * a variable. - * - * @param array $variables The variables - * - * @return $this - */ - public function addEnvironmentVariables(array $variables) - { - $this->env = array_replace($this->env, $variables); - - return $this; - } - - /** - * Sets the input of the process. - * - * @param resource|string|int|float|bool|\Traversable|null $input The input content - * - * @return $this - * - * @throws InvalidArgumentException In case the argument is invalid - */ - public function setInput($input) - { - $this->input = ProcessUtils::validateInput(__METHOD__, $input); - - return $this; - } - - /** - * Sets the process timeout. - * - * To disable the timeout, set this value to null. - * - * @param float|null $timeout - * - * @return $this - * - * @throws InvalidArgumentException - */ - public function setTimeout($timeout) - { - if (null === $timeout) { - $this->timeout = null; - - return $this; - } - - $timeout = (float) $timeout; - - if ($timeout < 0) { - throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); - } - - $this->timeout = $timeout; - - return $this; - } - - /** - * Adds a proc_open option. - * - * @param string $name The option name - * @param string $value The option value - * - * @return $this - */ - public function setOption($name, $value) - { - $this->options[$name] = $value; - - return $this; - } - - /** - * Disables fetching output and error output from the underlying process. - * - * @return $this - */ - public function disableOutput() - { - $this->outputDisabled = true; - - return $this; - } - - /** - * Enables fetching output and error output from the underlying process. - * - * @return $this - */ - public function enableOutput() - { - $this->outputDisabled = false; - - return $this; - } - - /** - * Creates a Process instance and returns it. - * - * @return Process - * - * @throws LogicException In case no arguments have been provided - */ - public function getProcess() - { - if (0 === \count($this->prefix) && 0 === \count($this->arguments)) { - throw new LogicException('You must add() command arguments before calling getProcess().'); - } - - $arguments = array_merge($this->prefix, $this->arguments); - $process = new Process($arguments, $this->cwd, $this->env, $this->input, $this->timeout, $this->options); - // to preserve the BC with symfony <3.3, we convert the array structure - // to a string structure to avoid the prefixing with the exec command - $process->setCommandLine($process->getCommandLine()); - - if ($this->inheritEnv) { - $process->inheritEnvironmentVariables(); - } - if ($this->outputDisabled) { - $process->disableOutput(); - } - - return $process; - } -} diff --git a/civicrm/vendor/symfony/process/ProcessUtils.php b/civicrm/vendor/symfony/process/ProcessUtils.php index 1c02768845b119835e4aa888ac59b3b9ea5adc32..eb39a4a9e314580991460403ca2f715a0322979b 100644 --- a/civicrm/vendor/symfony/process/ProcessUtils.php +++ b/civicrm/vendor/symfony/process/ProcessUtils.php @@ -29,55 +29,6 @@ class ProcessUtils { } - /** - * Escapes a string to be used as a shell argument. - * - * @param string $argument The argument that will be escaped - * - * @return string The escaped argument - * - * @deprecated since version 3.3, to be removed in 4.0. Use a command line array or give env vars to the `Process::start/run()` method instead. - */ - public static function escapeArgument($argument) - { - @trigger_error('The '.__METHOD__.'() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use a command line array or give env vars to the Process::start/run() method instead.', \E_USER_DEPRECATED); - - //Fix for PHP bug #43784 escapeshellarg removes % from given string - //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows - //@see https://bugs.php.net/43784 - //@see https://bugs.php.net/49446 - if ('\\' === \DIRECTORY_SEPARATOR) { - if ('' === $argument) { - return escapeshellarg($argument); - } - - $escapedArgument = ''; - $quote = false; - foreach (preg_split('/(")/', $argument, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE) as $part) { - if ('"' === $part) { - $escapedArgument .= '\\"'; - } elseif (self::isSurroundedBy($part, '%')) { - // Avoid environment variable expansion - $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%'; - } else { - // escape trailing backslash - if ('\\' === substr($part, -1)) { - $part .= '\\'; - } - $quote = true; - $escapedArgument .= $part; - } - } - if ($quote) { - $escapedArgument = '"'.$escapedArgument.'"'; - } - - return $escapedArgument; - } - - return "'".str_replace("'", "'\\''", $argument)."'"; - } - /** * Validates and normalizes a Process input. * @@ -115,9 +66,4 @@ class ProcessUtils return $input; } - - private static function isSurroundedBy($arg, $char) - { - return 2 < \strlen($arg) && $char === $arg[0] && $char === $arg[\strlen($arg) - 1]; - } } diff --git a/civicrm/vendor/symfony/process/README.md b/civicrm/vendor/symfony/process/README.md index b7ca5b4254942c813ac60733057a47b1be072ec5..afce5e45eee343bbb40b1034a70cece6c308a5ec 100644 --- a/civicrm/vendor/symfony/process/README.md +++ b/civicrm/vendor/symfony/process/README.md @@ -6,8 +6,8 @@ The Process component executes commands in sub-processes. Resources --------- - * [Documentation](https://symfony.com/doc/current/components/process.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) + * [Documentation](https://symfony.com/doc/current/components/process.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/civicrm/vendor/symfony/process/composer.json b/civicrm/vendor/symfony/process/composer.json index f88f5214103307bc6bae465f4acb621c45fb7ca8..c0f7599f21d479d5b840388aa4a258cfba27b376 100644 --- a/civicrm/vendor/symfony/process/composer.json +++ b/civicrm/vendor/symfony/process/composer.json @@ -1,7 +1,7 @@ { "name": "symfony/process", "type": "library", - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", @@ -16,7 +16,8 @@ } ], "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" }, diff --git a/civicrm/vendor/symfony/process/phpunit.xml.dist b/civicrm/vendor/symfony/process/phpunit.xml.dist deleted file mode 100644 index c32f25101efefc33617af9610ab57c544e1fc2d4..0000000000000000000000000000000000000000 --- a/civicrm/vendor/symfony/process/phpunit.xml.dist +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - failOnRisky="true" - failOnWarning="true" -> - <php> - <ini name="error_reporting" value="-1" /> - </php> - - <testsuites> - <testsuite name="Symfony Process Component Test Suite"> - <directory>./Tests/</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist> - <directory>./</directory> - <exclude> - <directory>./Tests</directory> - <directory>./vendor</directory> - </exclude> - </whitelist> - </filter> -</phpunit> diff --git a/civicrm/vendor/symfony/event-dispatcher/.gitignore b/civicrm/vendor/symfony/service-contracts/.gitignore similarity index 100% rename from civicrm/vendor/symfony/event-dispatcher/.gitignore rename to civicrm/vendor/symfony/service-contracts/.gitignore diff --git a/civicrm/vendor/symfony/service-contracts/Attribute/Required.php b/civicrm/vendor/symfony/service-contracts/Attribute/Required.php new file mode 100644 index 0000000000000000000000000000000000000000..9df851189a43f4f5db7703e189acd1022cca2c1e --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/Attribute/Required.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service\Attribute; + +/** + * A required dependency. + * + * This attribute indicates that a property holds a required dependency. The annotated property or method should be + * considered during the instantiation process of the containing class. + * + * @author Alexander M. Turek <me@derrabus.de> + */ +#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)] +final class Required +{ +} diff --git a/civicrm/vendor/symfony/service-contracts/Attribute/SubscribedService.php b/civicrm/vendor/symfony/service-contracts/Attribute/SubscribedService.php new file mode 100644 index 0000000000000000000000000000000000000000..10d1bc38e8bf5a8ab9bea1ce21c82f56eb47ad74 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/Attribute/SubscribedService.php @@ -0,0 +1,33 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service\Attribute; + +use Symfony\Contracts\Service\ServiceSubscriberTrait; + +/** + * Use with {@see ServiceSubscriberTrait} to mark a method's return type + * as a subscribed service. + * + * @author Kevin Bond <kevinbond@gmail.com> + */ +#[\Attribute(\Attribute::TARGET_METHOD)] +final class SubscribedService +{ + /** + * @param string|null $key The key to use for the service + * If null, use "ClassName::methodName" + */ + public function __construct( + public ?string $key = null + ) { + } +} diff --git a/civicrm/vendor/symfony/service-contracts/CHANGELOG.md b/civicrm/vendor/symfony/service-contracts/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..7932e26132d319374a768a73230e78c12535987c --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/civicrm/vendor/symfony/service-contracts/LICENSE b/civicrm/vendor/symfony/service-contracts/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..74cdc2dbf6dbec4aea949b7bd47e3ee1e8c421e7 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2022 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/symfony/service-contracts/README.md b/civicrm/vendor/symfony/service-contracts/README.md new file mode 100644 index 0000000000000000000000000000000000000000..41e054a101cf47251bbdf87a618195d29636cb93 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/README.md @@ -0,0 +1,9 @@ +Symfony Service Contracts +========================= + +A set of abstractions extracted out of the Symfony components. + +Can be used to build on semantics that the Symfony components proved useful - and +that already have battle tested implementations. + +See https://github.com/symfony/contracts/blob/main/README.md for more information. diff --git a/civicrm/vendor/symfony/service-contracts/ResetInterface.php b/civicrm/vendor/symfony/service-contracts/ResetInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..1af1075eeeca74a5f4ba29377019059c9195ce7e --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/ResetInterface.php @@ -0,0 +1,30 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +/** + * Provides a way to reset an object to its initial state. + * + * When calling the "reset()" method on an object, it should be put back to its + * initial state. This usually means clearing any internal buffers and forwarding + * the call to internal dependencies. All properties of the object should be put + * back to the same state it had when it was first ready to use. + * + * This method could be called, for example, to recycle objects that are used as + * services, so that they can be used to handle several requests in the same + * process loop (note that we advise making your services stateless instead of + * implementing this interface when possible.) + */ +interface ResetInterface +{ + public function reset(); +} diff --git a/civicrm/vendor/symfony/service-contracts/ServiceLocatorTrait.php b/civicrm/vendor/symfony/service-contracts/ServiceLocatorTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..74dfa4362e467f9b919ec803a54bdcc0d57150f6 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/ServiceLocatorTrait.php @@ -0,0 +1,128 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\NotFoundExceptionInterface; + +// Help opcache.preload discover always-needed symbols +class_exists(ContainerExceptionInterface::class); +class_exists(NotFoundExceptionInterface::class); + +/** + * A trait to help implement ServiceProviderInterface. + * + * @author Robin Chalas <robin.chalas@gmail.com> + * @author Nicolas Grekas <p@tchwork.com> + */ +trait ServiceLocatorTrait +{ + private $factories; + private $loading = []; + private $providedTypes; + + /** + * @param callable[] $factories + */ + public function __construct(array $factories) + { + $this->factories = $factories; + } + + /** + * {@inheritdoc} + * + * @return bool + */ + public function has(string $id) + { + return isset($this->factories[$id]); + } + + /** + * {@inheritdoc} + * + * @return mixed + */ + public function get(string $id) + { + if (!isset($this->factories[$id])) { + throw $this->createNotFoundException($id); + } + + if (isset($this->loading[$id])) { + $ids = array_values($this->loading); + $ids = \array_slice($this->loading, array_search($id, $ids)); + $ids[] = $id; + + throw $this->createCircularReferenceException($id, $ids); + } + + $this->loading[$id] = $id; + try { + return $this->factories[$id]($this); + } finally { + unset($this->loading[$id]); + } + } + + /** + * {@inheritdoc} + */ + public function getProvidedServices(): array + { + if (null === $this->providedTypes) { + $this->providedTypes = []; + + foreach ($this->factories as $name => $factory) { + if (!\is_callable($factory)) { + $this->providedTypes[$name] = '?'; + } else { + $type = (new \ReflectionFunction($factory))->getReturnType(); + + $this->providedTypes[$name] = $type ? ($type->allowsNull() ? '?' : '').($type instanceof \ReflectionNamedType ? $type->getName() : $type) : '?'; + } + } + } + + return $this->providedTypes; + } + + private function createNotFoundException(string $id): NotFoundExceptionInterface + { + if (!$alternatives = array_keys($this->factories)) { + $message = 'is empty...'; + } else { + $last = array_pop($alternatives); + if ($alternatives) { + $message = sprintf('only knows about the "%s" and "%s" services.', implode('", "', $alternatives), $last); + } else { + $message = sprintf('only knows about the "%s" service.', $last); + } + } + + if ($this->loading) { + $message = sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', end($this->loading), $id, $message); + } else { + $message = sprintf('Service "%s" not found: the current service locator %s', $id, $message); + } + + return new class($message) extends \InvalidArgumentException implements NotFoundExceptionInterface { + }; + } + + private function createCircularReferenceException(string $id, array $path): ContainerExceptionInterface + { + return new class(sprintf('Circular reference detected for service "%s", path: "%s".', $id, implode(' -> ', $path))) extends \RuntimeException implements ContainerExceptionInterface { + }; + } +} diff --git a/civicrm/vendor/symfony/service-contracts/ServiceProviderInterface.php b/civicrm/vendor/symfony/service-contracts/ServiceProviderInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..c60ad0bd4bf26818c5610436793a909171e04e65 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/ServiceProviderInterface.php @@ -0,0 +1,36 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +use Psr\Container\ContainerInterface; + +/** + * A ServiceProviderInterface exposes the identifiers and the types of services provided by a container. + * + * @author Nicolas Grekas <p@tchwork.com> + * @author Mateusz Sip <mateusz.sip@gmail.com> + */ +interface ServiceProviderInterface extends ContainerInterface +{ + /** + * Returns an associative array of service types keyed by the identifiers provided by the current container. + * + * Examples: + * + * * ['logger' => 'Psr\Log\LoggerInterface'] means the object provides a service named "logger" that implements Psr\Log\LoggerInterface + * * ['foo' => '?'] means the container provides service name "foo" of unspecified type + * * ['bar' => '?Bar\Baz'] means the container provides a service "bar" of type Bar\Baz|null + * + * @return string[] The provided service types, keyed by service names + */ + public function getProvidedServices(): array; +} diff --git a/civicrm/vendor/symfony/service-contracts/ServiceSubscriberInterface.php b/civicrm/vendor/symfony/service-contracts/ServiceSubscriberInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..098ab908cdfc752f7d6572745a7ecd0e39ae4f8c --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/ServiceSubscriberInterface.php @@ -0,0 +1,53 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +/** + * A ServiceSubscriber exposes its dependencies via the static {@link getSubscribedServices} method. + * + * The getSubscribedServices method returns an array of service types required by such instances, + * optionally keyed by the service names used internally. Service types that start with an interrogation + * mark "?" are optional, while the other ones are mandatory service dependencies. + * + * The injected service locators SHOULD NOT allow access to any other services not specified by the method. + * + * It is expected that ServiceSubscriber instances consume PSR-11-based service locators internally. + * This interface does not dictate any injection method for these service locators, although constructor + * injection is recommended. + * + * @author Nicolas Grekas <p@tchwork.com> + */ +interface ServiceSubscriberInterface +{ + /** + * Returns an array of service types required by such instances, optionally keyed by the service names used internally. + * + * For mandatory dependencies: + * + * * ['logger' => 'Psr\Log\LoggerInterface'] means the objects use the "logger" name + * internally to fetch a service which must implement Psr\Log\LoggerInterface. + * * ['loggers' => 'Psr\Log\LoggerInterface[]'] means the objects use the "loggers" name + * internally to fetch an iterable of Psr\Log\LoggerInterface instances. + * * ['Psr\Log\LoggerInterface'] is a shortcut for + * * ['Psr\Log\LoggerInterface' => 'Psr\Log\LoggerInterface'] + * + * otherwise: + * + * * ['logger' => '?Psr\Log\LoggerInterface'] denotes an optional dependency + * * ['loggers' => '?Psr\Log\LoggerInterface[]'] denotes an optional iterable dependency + * * ['?Psr\Log\LoggerInterface'] is a shortcut for + * * ['Psr\Log\LoggerInterface' => '?Psr\Log\LoggerInterface'] + * + * @return string[] The required service types, optionally keyed by service names + */ + public static function getSubscribedServices(); +} diff --git a/civicrm/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/civicrm/vendor/symfony/service-contracts/ServiceSubscriberTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..16e3eb2c19757dc9593f897bf8ef2198f67a78ab --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/ServiceSubscriberTrait.php @@ -0,0 +1,109 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +use Psr\Container\ContainerInterface; +use Symfony\Contracts\Service\Attribute\SubscribedService; + +/** + * Implementation of ServiceSubscriberInterface that determines subscribed services from + * method return types. Service ids are available as "ClassName::methodName". + * + * @author Kevin Bond <kevinbond@gmail.com> + */ +trait ServiceSubscriberTrait +{ + /** @var ContainerInterface */ + protected $container; + + /** + * {@inheritdoc} + */ + public static function getSubscribedServices(): array + { + $services = method_exists(get_parent_class(self::class) ?: '', __FUNCTION__) ? parent::getSubscribedServices() : []; + $attributeOptIn = false; + + if (\PHP_VERSION_ID >= 80000) { + foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { + if (self::class !== $method->getDeclaringClass()->name) { + continue; + } + + if (!$attribute = $method->getAttributes(SubscribedService::class)[0] ?? null) { + continue; + } + + if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { + throw new \LogicException(sprintf('Cannot use "%s" on method "%s::%s()" (can only be used on non-static, non-abstract methods with no parameters).', SubscribedService::class, self::class, $method->name)); + } + + if (!$returnType = $method->getReturnType()) { + throw new \LogicException(sprintf('Cannot use "%s" on methods without a return type in "%s::%s()".', SubscribedService::class, $method->name, self::class)); + } + + $serviceId = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType; + + if ($returnType->allowsNull()) { + $serviceId = '?'.$serviceId; + } + + $services[$attribute->newInstance()->key ?? self::class.'::'.$method->name] = $serviceId; + $attributeOptIn = true; + } + } + + if (!$attributeOptIn) { + foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { + if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { + continue; + } + + if (self::class !== $method->getDeclaringClass()->name) { + continue; + } + + if (!($returnType = $method->getReturnType()) instanceof \ReflectionNamedType) { + continue; + } + + if ($returnType->isBuiltin()) { + continue; + } + + if (\PHP_VERSION_ID >= 80000) { + trigger_deprecation('symfony/service-contracts', '2.5', 'Using "%s" in "%s" without using the "%s" attribute on any method is deprecated.', ServiceSubscriberTrait::class, self::class, SubscribedService::class); + } + + $services[self::class.'::'.$method->name] = '?'.($returnType instanceof \ReflectionNamedType ? $returnType->getName() : $returnType); + } + } + + return $services; + } + + /** + * @required + * + * @return ContainerInterface|null + */ + public function setContainer(ContainerInterface $container) + { + $this->container = $container; + + if (method_exists(get_parent_class(self::class) ?: '', __FUNCTION__)) { + return parent::setContainer($container); + } + + return null; + } +} diff --git a/civicrm/vendor/symfony/service-contracts/composer.json b/civicrm/vendor/symfony/service-contracts/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..f0586370103670d8c6fed5912026745c0f658c41 --- /dev/null +++ b/civicrm/vendor/symfony/service-contracts/composer.json @@ -0,0 +1,42 @@ +{ + "name": "symfony/service-contracts", + "type": "library", + "description": "Generic abstractions related to writing services", + "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "autoload": { + "psr-4": { "Symfony\\Contracts\\Service\\": "" } + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/civicrm/xml/schema/Activity/Activity.xml b/civicrm/xml/schema/Activity/Activity.xml index cf4fce76fbf7f56b2f2bf9912598832d02e521d5..c6f33a984636f1c5a7e499d69a00f60d98d8366c 100644 --- a/civicrm/xml/schema/Activity/Activity.xml +++ b/civicrm/xml/schema/Activity/Activity.xml @@ -36,7 +36,7 @@ <name>source_record_id</name> <type>int unsigned</type> <title>Source Record</title> - <comment>Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry.</comment> + <comment>Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Entity table is discovered by filtering by the appropriate activity_type_id.</comment> <readonly>true</readonly> <add>2.0</add> </field> @@ -217,7 +217,7 @@ <name>parent_id</name> <title>Parent Activity ID</title> <type>int unsigned</type> - <comment>Parent meeting ID (if this is a follow-up item). This is not currently implemented</comment> + <comment>Parent meeting ID (if this is a follow-up item).</comment> <readonly>true</readonly> <html> <label>Parent Activity</label> diff --git a/civicrm/xml/schema/Core/UFField.xml b/civicrm/xml/schema/Core/UFField.xml index 0a2aa118ee5d17b3fb651b2cd1b9ff59a0db9269..5620cd66fddd3bef2a79f03623f8a233e4befe7b 100644 --- a/civicrm/xml/schema/Core/UFField.xml +++ b/civicrm/xml/schema/Core/UFField.xml @@ -54,7 +54,7 @@ <required>true</required> <comment>Name for CiviCRM field which is being exposed for sharing.</comment> <pseudoconstant> - <callback>CRM_Core_BAO_UFField::getAvailableFieldTitles</callback> + <callback>CRM_Core_BAO_UFField::getAvailableFieldOptions</callback> </pseudoconstant> <add>1.1</add> </field> diff --git a/civicrm/xml/schema/Core/UFMatch.xml b/civicrm/xml/schema/Core/UFMatch.xml index 289f6bf92586b2b58f9206ef9af122963b12c6c7..1fed6fe263079bebe38c543f82ab210b0ae9cae5 100644 --- a/civicrm/xml/schema/Core/UFMatch.xml +++ b/civicrm/xml/schema/Core/UFMatch.xml @@ -4,6 +4,7 @@ <base>CRM/Core</base> <class>UFMatch</class> <name>civicrm_uf_match</name> + <title>User Account</title> <comment>The mapping from an user framework (UF) object to a CRM object.</comment> <add>1.1</add> <log>true</log> diff --git a/civicrm/xml/templates/civicrm_navigation.tpl b/civicrm/xml/templates/civicrm_navigation.tpl index 75a61abb8a5383de38f9d4d14ed995b128c71512..3c2dd41e595a06997b293893fac53ee7a36e299b 100644 --- a/civicrm/xml/templates/civicrm_navigation.tpl +++ b/civicrm/xml/templates/civicrm_navigation.tpl @@ -92,7 +92,7 @@ VALUES ( @domainID, 'civicrm/import/contact?reset=1', '{ts escape="sql" skip="true"}Import Contacts{/ts}', 'Import Contacts', 'import contacts', '', @contactlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/import/activity?reset=1', '{ts escape="sql" skip="true"}Import Activities{/ts}', 'Import Activities', 'import contacts', '', @contactlastID, '1', NULL, 8 ), ( @domainID, 'civicrm/import/custom?reset=1', '{ts escape="sql" skip="true"}Import Custom Data{/ts}', 'Import MultiValued Custom', 'import contacts', '', @contactlastID, '1', '1', 9 ), - ( @domainID, 'civicrm/group/add?reset=1', '{ts escape="sql" skip="true"}New Group{/ts}', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/group/add?reset=1', '{ts escape="sql" skip="true"}New Group{/ts}', 'New Group', 'edit groups', '', @contactlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/group?reset=1', '{ts escape="sql" skip="true"}Manage Groups{/ts}', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 11 ), ( @domainID, 'civicrm/tag?reset=1', '{ts escape="sql" skip="true"}Manage Tags{/ts}', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1', '1', 12 ), ( @domainID, 'civicrm/contact/deduperules?reset=1', '{ts escape="sql" skip="true"}Find and Merge Duplicate Contacts{/ts}', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 ); @@ -134,11 +134,11 @@ VALUES ( @domainID, 'civicrm/pledge/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Pledge{/ts}', 'New Pledge', 'access CiviPledge,edit pledges', 'AND', @pledgelastID, '1', NULL, 2 ), ( @domainID, 'civicrm/pledge/search?reset=1', '{ts escape="sql" skip="true"}Find Pledges{/ts}', 'Find Pledges', 'access CiviPledge', '', @pledgelastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=6&reset=1', '{ts escape="sql" skip="true"}Pledge Reports{/ts}', 'Pledge Reports', 'access CiviPledge', '', @pledgelastID, '1', 0, 4 ), - ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Contribution Page{/ts}', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Contribution Page{/ts}', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 9 ), ( @domainID, 'civicrm/admin/contribute?reset=1', '{ts escape="sql" skip="true"}Manage Contribution Pages{/ts}', 'Manage Contribution Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', '1', 10 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=contribute', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/contribute/managePremiums?reset=1', '{ts escape="sql" skip="true"}Premiums (Thank-you Gifts){/ts}', 'Premiums', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 12 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '0', NULL, 13 ), ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 14 ), ( @domainID, 'civicrm/financial/batch?reset=1&action=add', '{ts escape="sql" skip="true"}New Batch{/ts}', 'New Batch', 'create manual batch', 'AND', @financialTransactionID, '1', NULL, 1 ), @@ -160,11 +160,11 @@ VALUES ( @domainID, 'civicrm/event/search?reset=1', '{ts escape="sql" skip="true"}Find Participants{/ts}', 'Find Participants', 'access CiviEvent', '', @eventlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=1&reset=1', '{ts escape="sql" skip="true"}Event Reports{/ts}', 'Event Reports', 'access CiviEvent', '', @eventlastID, '1', 1, 4 ), ( @domainID, 'civicrm/event/import?reset=1', '{ts escape="sql" skip="true"}Import Participants{/ts}','Import Participants', 'access CiviEvent,edit event participants', 'AND', @eventlastID, '1', '1', 5 ), - ( @domainID, 'civicrm/event/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Event{/ts}', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/event/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Event{/ts}', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 6 ), ( @domainID, 'civicrm/event/manage?reset=1', '{ts escape="sql" skip="true"}Manage Events{/ts}', 'Manage Events', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 7 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @eventlastID, '1', 1, 8 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', '{ts escape="sql" skip="true"}Event Templates{/ts}', 'Event Templates', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 9 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '0', NULL, 10 ), ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 11 ); INSERT INTO civicrm_navigation @@ -199,12 +199,12 @@ INSERT INTO civicrm_navigation ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) VALUES ( @domainID, 'civicrm/member?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access CiviMember', '', @memberlastID, '1', NULL, 1 ), - ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Membership{/ts}', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Membership{/ts}', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '0', NULL, 2 ), ( @domainID, 'civicrm/member/search?reset=1', '{ts escape="sql" skip="true"}Find Memberships{/ts}', 'Find Memberships','access CiviMember', '', @memberlastID, '1', NULL, 3 ), ( @domainID, 'civicrm/report/list?compid=3&reset=1', '{ts escape="sql" skip="true"}Membership Reports{/ts}', 'Membership Reports', 'access CiviMember', '', @memberlastID, '1', 1, 4 ), ( @domainID, 'civicrm/batch?reset=1', '{ts escape="sql" skip="true"}Batch Data Entry{/ts}', 'Batch Data Entry','access CiviContribute', '', @memberlastID, '1', NULL, 5 ), ( @domainID, 'civicrm/member/import?reset=1', '{ts escape="sql" skip="true"}Import Memberships{/ts}', 'Import Members', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', 1, 6 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '0', NULL, 7 ), ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 8 ); INSERT INTO civicrm_navigation @@ -432,7 +432,7 @@ VALUES ( @domainID, 'civicrm/admin/options/payment_instrument?reset=1', '{ts escape="sql" skip="true"}Payment Methods{/ts}', 'Payment Instruments', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/options/accept_creditcard?reset=1', '{ts escape="sql" skip="true"}Accepted Credit Cards{/ts}', 'Accepted Credit Cards', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 13 ), ( @domainID, 'civicrm/admin/options/soft_credit_type?reset=1', '{ts escape="sql" skip="true"}Soft Credit Types{/ts}', 'Soft Credit Types', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', 1, 14 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '0', NULL, 15 ), ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 16 ), ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', '{ts escape="sql" skip="true"}Payment Processors{/ts}', 'Payment Processors', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 17 ), ( @domainID, 'civicrm/admin/setting/preferences/contribute?reset=1', '{ts escape="sql" skip="true"}CiviContribute Component Settings{/ts}', 'CiviContribute Component Settings', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 18 ) ; @@ -450,7 +450,7 @@ VALUES ( @domainID, 'civicrm/event/manage?reset=1', '{ts escape="sql" skip="true"}Manage Events{/ts}', 'Manage Events', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 2 ), ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 3 ), ( @domainID, 'civicrm/admin/eventTemplate?reset=1', '{ts escape="sql" skip="true"}Event Templates{/ts}', 'Event Templates', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 4 ), - ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '0', NULL, 5 ), ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 6 ), ( @domainID, 'civicrm/admin/options/event_type?reset=1', '{ts escape="sql" skip="true"}Event Types{/ts}', 'Event Types', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/participant_status?reset=1', '{ts escape="sql" skip="true"}Participant Statuses{/ts}', 'Participant Statuses', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 8 ), diff --git a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl index d0a6d7f03d3fc915966746ba3f63737a721a4cab..0df8f74bf273b855e16c6a8ebf70ff88eccda4e5 100644 --- a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl @@ -17,19 +17,15 @@ <tr> <td width="30%"><b><font size="4" align="center">{ts}INVOICE{/ts}</font></b></td> <td width="50%" valign="bottom"><b><font size="1" align="center">{ts}Invoice Date:{/ts}</font></b></td> - <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{$domain_organization}</font></b></td> + <td valign="bottom" style="white-space: nowrap"><b><font size="1" align="right">{domain.name}</font></b></td> </tr> <tr> - {if $organization_name} - <td><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td><font size="1" align="center">{contact.display_name}{if '{contact.current_employer}'} ({contact.current_employer}){/if}</font></td> <td><font size="1" align="right">{$invoice_date}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -38,35 +34,35 @@ <td><b><font size="1" align="right">{ts}Invoice Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> <td style="white-space: nowrap"> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> <tr> <td><font size="1" align="right">{$city} {$postal_code}</font></td> <td height="10"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> - <td><font size="1" align="right">{if $domain_country}{$domain_country}{/if}</font></td> + <td><font size="1" align="right">{domain.country_id:label}</font></td> </tr> <tr> <td><font size="1" align="right"> {$country}</font></td> - <td><font size="1" align="right">{if !empty($source)}{$source}{/if}</font></td> - <td valign="top" style="white-space: nowrap"><font size="1" align="right">{if $domain_email}{$domain_email}{/if}</font> </td> + <td><font size="1" align="right">{contribution.source}</font></td> + <td valign="top" style="white-space: nowrap"><font size="1" align="right">{domain.email}</font> </td> </tr> <tr> <td></td> <td></td> - <td valign="top"><font size="1" align="right">{if $domain_phone}{$domain_phone}{/if}</font> </td> + <td valign="top"><font size="1" align="right">{domain.phone}</font> </td> </tr> </table> @@ -75,7 +71,7 @@ <th style="text-align:left;font-weight:bold;width:100%"><font size="1">{ts}Description{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Quantity{/ts}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{$taxTerm}</font></th> + <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{domain.tax_term}</font></th> <th style="text-align:right;font-weight:bold;white-space: nowrap"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=taxpricevalue} @@ -131,7 +127,7 @@ <tr> <td colspan="3"></td> <td style="text-align:right;white-space: nowrap"><font size="1"> - {if $contribution_status_id == $refundedStatusId} + {if '{contribution.contribution_status_id:name}' == 'Refunded'} {ts}Amount Credited{/ts} {else} {ts}Amount Paid{/ts} @@ -154,7 +150,7 @@ <tr> <td colspan="5"></td> </tr> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if '{contribution.contribution_status_id:name}' == 'Pending' && '{contribution.is_pay_later}' == 1} <tr> <td colspan="3"><b><font size="1" align="center">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td> <td colspan="2"></td> @@ -165,7 +161,7 @@ </tr> </table> - {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + {if '{contribution.contribution_status_id:name}' == 'Pending' && '{contribution.is_pay_later}' == 1} <table style="margin-top:5px;" width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td><img src="{$resourceBase}/i/contribute/cut_line.png" height="15"></td> @@ -175,13 +171,13 @@ <table style="margin-top:5px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="0" id="desc"> <tr> <td width="60%"><b><font size="4" align="right">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size="1" align="left"><b>{ts}To:{/ts}</b><div style="width:24em;word-wrap:break-word;"> - {$domain_organization}<br /> - {$domain_street_address} {$domain_supplemental_address_1}<br /> - {$domain_supplemental_address_2} {$domain_state}<br /> - {$domain_city} {$domain_postal_code}<br /> - {$domain_country}<br /> - {$domain_email}</div> - {$domain_phone}<br /> + {domain.name}<br /> + {domain.street_address} {domain.supplemental_address_1}<br /> + {domain.supplemental_address_2} {domain.state_province_id:label}<br /> + {domain.city} {domain.postal_code}<br /> + {domain.country_id:label}<br /> + {domain.email}</div> + {domain.phone}<br /> </font><br/><br/><font size="1" align="left">{$notes}</font> </td> <td width="40%"> @@ -192,7 +188,7 @@ </tr> <tr> <td><font size="1" align="right" style="font-weight:bold;">{ts}Invoice Number:{/ts}</font></td> - <td><font size="1" align="right">{$invoice_number}</font></td> + <td><font size="1" align="right">{contribution.invoice_number}</font></td> </tr> <tr><td colspan="5" style="color:#F5F5F5;"><hr></td></tr> {if $is_pay_later == 1} @@ -216,7 +212,7 @@ </table> {/if} - {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId} + {if '{contribution.contribution_status_id:name}' === 'Refunded' || '{contribution.contribution_status_id:name}' === 'Cancelled'} {if $config->empoweredBy} <table style="margin-top:2px;padding-left:7px;page-break-before: always;"> <tr> @@ -229,19 +225,15 @@ <tr> <td style="padding-left:15px;"><b><font size="4" align="center">{ts}CREDIT NOTE{/ts}</font></b></td> <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Date:{/ts}</font></b></td> - <td><font size="1" align="right">{$domain_organization}</font></td> + <td><font size="1" align="right">{domain.name}</font></td> </tr> <tr> - {if $organization_name} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name} ({$organization_name})</font></td> - {else} - <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}</font></td> - {/if} + <td style="padding-left:17px;"><font size="1" align="center">{contact.display_name}{if '{contact.current_employer}'} ({contact.current_employer}){/if}</font></td> <td style="padding-left:30px;"><font size="1" align="right">{$invoice_date}</font></td> <td> <font size="1" align="right"> - {if $domain_street_address }{$domain_street_address}{/if} - {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + {domain.street_address} + {domain.supplemental_address_1} </font> </td> </tr> @@ -250,18 +242,18 @@ <td style="padding-left:30px;"><b><font size="1" align="right">{ts}Credit Note Number:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} - {if $domain_state }{$domain_state}{/if} + {domain.supplemental_address_2} + {domain.state_province_id:label} </font> </td> </tr> <tr> <td style="padding-left:17px;"><font size="1" align="center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> - <td style="padding-left:30px;"><font size="1" align="right">{$creditnote_id}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.creditnote_id}</font></td> <td> <font size="1" align="right"> - {if $domain_city}{$domain_city}{/if} - {if $domain_postal_code }{$domain_postal_code}{/if} + {domain.city} + {domain.postal_code} </font> </td> </tr> @@ -270,16 +262,16 @@ <td height="10" style="padding-left:30px;"><b><font size="1" align="right">{ts}Reference:{/ts}</font></b></td> <td> <font size="1" align="right"> - {if $domain_country}{$domain_country}{/if} + {domain.country_id:label} </font> </td> </tr> <tr> <td></td> - <td style="padding-left:30px;"><font size="1" align="right">{$source}</font></td> + <td style="padding-left:30px;"><font size="1" align="right">{contribution.source}</font></td> <td> <font size="1" align="right"> - {if $domain_email}{$domain_email}{/if} + {domain.email} </font> </td> </tr> @@ -288,7 +280,7 @@ <td></td> <td> <font size="1" align="right"> - {if $domain_phone}{$domain_phone}{/if} + {domain.phone} </font> </td> </tr> @@ -296,13 +288,13 @@ <table style="margin-top:75px;font-family: Arial, Verdana, sans-serif" width="100%" border="0" cellpadding="5" cellspacing="5" id="desc"> <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <td colspan="2"> + <table> <tr> <th style="padding-right:28px;text-align:left;font-weight:bold;width:200px;"><font size="1">{ts}Description{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Quantity{/ts}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts}Unit Price{/ts}</font></th> - <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{$taxTerm}</font></th> + <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{domain.tax_term}</font></th> <th style="padding-left:28px;text-align:right;font-weight:bold;"><font size="1">{ts 1=$currency}Amount %1{/ts}</font></th> </tr> {foreach from=$lineItem item=value key=priceset name=pricevalue} @@ -363,7 +355,7 @@ <td style="padding-left:28px;text-align:right;"><b><font size="1">{ts 1=$currency}TOTAL %1{/ts}</font></b></td> <td style="padding-left:28px;text-align:right;"><font size="1">{$amount|crmMoney:$currency}</font></td> </tr> - {if $is_pay_later == 0} + {if '{contribution.is_pay_later}' == 0} <tr> <td colspan="3"></td> <td style="padding-left:28px;text-align:right;"><font size="1">{ts}LESS Credit to invoice(s){/ts}</font></td> @@ -412,7 +404,7 @@ <tr> <td colspan="2"></td> <td><font size="1" align="right" style="font-weight:bold;">{ts}Credit Note#:{/ts}</font></td> - <td><font size="1" align="right">{$creditnote_id}</font></td> + <td><font size="1" align="right">{contribution.creditnote_id}</font></td> </tr> <tr><td colspan="5"style="color:#F5F5F5;"><hr></hr></td></tr> <tr> diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl index b300c91402e5d8cd898f3bdb6fc23719fd957cab..99db3e71f7760e9f32c07338e1ce7cd63877ba91 100644 --- a/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl @@ -116,7 +116,13 @@ <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl index 6b116c9ad152f87fec3bd3629e4f30477d7b66c9..3fc2e743103d391d3859acf61ab52e8028a55610 100644 --- a/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl @@ -68,7 +68,9 @@ {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($email)} diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl index 7b771d41b18000cf2d36a7bd3e3d635d83d0bdb4..13ea8b90e05a7cd93e7b003e9806dc973b8836e3 100644 --- a/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl @@ -149,7 +149,13 @@ <tr> <td colspan="2" {$valueStyle}> {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> </td> </tr> {/if} diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl index 22473002a288de1a1049394235990d21c21250ad..ee1ae65303e9d7fa4f22a608f66b59edcb7ccdee 100644 --- a/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl @@ -90,7 +90,9 @@ {if !empty($event.is_public)} {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if !empty($payer.name)} diff --git a/civicrm/xml/templates/message_templates/participant_confirm_html.tpl b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl index bd8b599b166a02a75c57643da60080a98d6ff63d..577e0aa169475ef1c81e69d5fcd4b898538a6344 100644 --- a/civicrm/xml/templates/message_templates/participant_confirm_html.tpl +++ b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl @@ -126,12 +126,18 @@ {/if} {if $event.is_public} - <tr> + <tr> <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar entry for this event.{/ts}</a> </td> - </tr> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$gCalendar}">{ts}Add event to Google Calendar{/ts}</a> + </td> + </tr> {/if} {if '{contact.email}'} diff --git a/civicrm/xml/templates/message_templates/participant_confirm_text.tpl b/civicrm/xml/templates/message_templates/participant_confirm_text.tpl index 0ccf6ad260524621d887dee3c36af9c5acd0e443..ea2abf605be427c8a2b1426c1bcb78196bde1598 100644 --- a/civicrm/xml/templates/message_templates/participant_confirm_text.tpl +++ b/civicrm/xml/templates/message_templates/participant_confirm_text.tpl @@ -64,7 +64,9 @@ Click this link to go to a web page where you can confirm your registration onli {if $event.is_public} {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} +{ts}Download iCalendar entry for this event.{/ts} {$icalFeed} +{capture assign=gCalendar}{crmURL p='civicrm/event/ical' q="gCalendar=1&reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Add event to Google Calendar{/ts} {$gCalendar} {/if} {if '{contact.email}'} diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 1ada463649dafe65610482166e372aab0bd8247c..39f1623281616af223b39abf31b4be3997ecec2a 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.51.3</version_no> + <version_no>5.52.0</version_no> </version> diff --git a/includes/admin-pages/civicrm.page.options.php b/includes/admin-pages/civicrm.page.options.php index 49c2f1e6f7ba26d0bf7a2b1f0cdc57e23581dc6d..24cfc03d9d05c9352e1aa96a376e266b853a3456 100644 --- a/includes/admin-pages/civicrm.page.options.php +++ b/includes/admin-pages/civicrm.page.options.php @@ -92,6 +92,7 @@ class CiviCRM_For_WordPress_Admin_Page_Options { add_action('wp_ajax_civicrm_basepage', [$this, 'ajax_save_basepage']); add_action('wp_ajax_civicrm_shortcode', [$this, 'ajax_save_shortcode']); add_action('wp_ajax_civicrm_email_sync', [$this, 'ajax_save_email_sync']); + add_action('wp_ajax_civicrm_refresh_permissions', [$this, 'ajax_refresh_permissions']); add_action('wp_ajax_civicrm_clear_caches', [$this, 'ajax_clear_caches']); } @@ -173,9 +174,12 @@ class CiviCRM_For_WordPress_Admin_Page_Options { 'ajax_url' => admin_url('admin-ajax.php'), ], 'localisation' => [ + 'update' => __('Update', 'civicrm'), 'saving' => __('Saving...', 'civicrm'), 'saved' => __('Saved', 'civicrm'), - 'update' => __('Update', 'civicrm'), + 'refresh' => __('Refresh', 'civicrm'), + 'refreshing' => __('Refreshing...', 'civicrm'), + 'refreshed' => __('Refreshed', 'civicrm'), 'cache' => __('Clear Caches', 'civicrm'), 'clearing' => __('Clearing...', 'civicrm'), 'cleared' => __('Cleared', 'civicrm'), @@ -348,6 +352,17 @@ class CiviCRM_For_WordPress_Admin_Page_Options { $data ); + // Create "Permissions and Capabilities" metabox. + add_meta_box( + 'civicrm_options_permissions', + __('Permissions and Capabilities', 'civicrm'), + [$this, 'meta_box_options_permissions_render'], + $screen_id, + 'side', + 'core', + $data + ); + // Create "Useful Links" metabox. add_meta_box( 'civicrm_options_emailinks', @@ -547,6 +562,34 @@ class CiviCRM_For_WordPress_Admin_Page_Options { } + /** + * Render "Permissions" meta box. + * + * @since 5.52 + * + * @param mixed $unused Unused param. + * @param array $metabox Array containing id, title, callback, and args elements. + */ + public function meta_box_options_permissions_render($unused, $metabox) { + + // Get the custom role. + $custom_role = $this->civi->users->has_custom_role(); + + // Set selected attributes. + $selected_disable = empty($custom_role) ? 'selected="selected"' : ''; + $selected_enable = !empty($custom_role) ? 'selected="selected"' : ''; + + // Set submit button options. + $options = [ + 'style' => 'float: right;', + 'data-security' => esc_attr(wp_create_nonce('civicrm_refresh_permissions')), + ]; + + // Include template file. + include CIVICRM_PLUGIN_DIR . 'assets/templates/metaboxes/metabox.options.permissions.php'; + + } + /** * Render "Clear Cache" meta box. * @@ -671,6 +714,12 @@ class CiviCRM_For_WordPress_Admin_Page_Options { $this->form_save_email_sync(); $this->form_redirect(); } + elseif (!empty($_POST['civicrm_permissions_submit'])) { + // Refresh permissions. + $this->form_nonce_check(); + $this->civi->users->refresh_capabilities(); + $this->form_redirect(); + } elseif (!empty($_POST['civicrm_cache_submit'])) { // Clear caches. $this->form_nonce_check(); @@ -960,6 +1009,67 @@ class CiviCRM_For_WordPress_Admin_Page_Options { } + /** + * Refresh the CiviCRM permissions. + * + * @since 5.52 + */ + public function ajax_refresh_permissions() { + + // Default response. + $data = [ + 'section' => 'refresh_permissions', + 'notice' => __('Could not refresh the CiviCRM permissions.', 'civicrm'), + 'saved' => FALSE, + ]; + + // Since this is an AJAX request, check security. + $result = check_ajax_referer('civicrm_refresh_permissions', FALSE, FALSE); + if ($result === FALSE) { + $data['notice'] = __('Authentication failed. Could not refresh the CiviCRM permissions.', 'civicrm'); + wp_send_json($data); + } + + // Bail if there is no valid chosen value. + $chosen = isset($_POST['value']) ? trim($_POST['value']) : 0; + if ($chosen === 0 || !in_array($chosen, ['enable', 'disable'])) { + $data['notice'] = __('Unrecognised parameter. Could not refresh the CiviCRM permissions.', 'civicrm'); + wp_send_json($data); + } + + // Always refresh the CiviCRM permissions. + $this->civi->users->refresh_capabilities(); + + // Have we enabled the custom role? + if ($chosen === 'enable') { + // Create the role if it doesn't exist. + if (!$this->civi->users->has_custom_role()) { + $this->civi->users->create_custom_role(); + } + // Refresh the custom role's permissions. + $this->civi->users->refresh_custom_role_capabilities(); + } + + // Have we disabled the custom role? + if ($chosen === 'disable') { + // Delete the role if it exists. + if ($this->civi->users->has_custom_role()) { + $this->civi->users->delete_custom_role(); + } + } + + // Data response. + $data = [ + 'section' => 'refresh_permissions', + 'notice' => __('CiviCRM permissions refreshed.', 'civicrm'), + 'saved' => TRUE, + ]; + + // Return the data. + wp_send_json($data); + + } + /** * Clear the CiviCRM caches. * diff --git a/includes/civicrm.admin.php b/includes/civicrm.admin.php index 4187d770123c5df1e5ff835656b7b3504b243ae1..582ad17acff822faacf6fc135c1aed1ea7c43193 100644 --- a/includes/civicrm.admin.php +++ b/includes/civicrm.admin.php @@ -403,7 +403,7 @@ class CiviCRM_For_WordPress_Admin { if ($error == FALSE) { $this->error_flag = 'settings-include'; $initialized = FALSE; - return; + return FALSE; } // Initialize the Class Loader. @@ -417,7 +417,7 @@ class CiviCRM_For_WordPress_Admin { if (!file_exists($civicrm_root . 'CRM/Core/Config.php')) { $this->error_flag = 'config-missing'; $initialized = FALSE; - return; + return FALSE; } // Include config file - returns int(1) on success. diff --git a/includes/civicrm.users.php b/includes/civicrm.users.php index 14a384f0a6a6ba93747fadf20926ebcc0910928e..cd08845c98450b856c408430609443afba7cb17c 100644 --- a/includes/civicrm.users.php +++ b/includes/civicrm.users.php @@ -36,6 +36,14 @@ class CiviCRM_For_WordPress_Users { */ public $civi; + /** + * @var string + * Custom role name. + * @since 5.52 + * @access private + */ + private $custom_role_name = 'civicrm_admin'; + /** * Instance constructor. * @@ -268,16 +276,17 @@ class CiviCRM_For_WordPress_Users { // Define minimum capabilities (CiviCRM permissions). $default_min_capabilities = [ - 'access_civimail_subscribe_unsubscribe_pages' => 1, 'access_all_custom_data' => 1, + 'access_civimail_subscribe_unsubscribe_pages' => 1, 'access_uploaded_files' => 1, 'make_online_contributions' => 1, 'profile_create' => 1, 'profile_edit' => 1, 'profile_view' => 1, 'register_for_events' => 1, - 'view_event_info' => 1, 'sign_civicrm_petition' => 1, + 'view_event_info' => 1, + 'view_my_invoices' => 1, 'view_public_civimail_content' => 1, ]; @@ -295,7 +304,9 @@ class CiviCRM_For_WordPress_Users { foreach ($wp_roles->role_names as $role => $name) { $roleObj = $wp_roles->get_role($role); foreach ($min_capabilities as $capability_name => $capability_value) { - $roleObj->add_cap($capability_name); + if (!$roleObj->has_cap($capability_name)) { + $roleObj->add_cap($capability_name); + } } } @@ -309,7 +320,7 @@ class CiviCRM_For_WordPress_Users { /** * Add CiviCRM access capabilities to WordPress roles. * - * This is a callback for the 'init' hook in register_hooks(). + * This is called in register_hooks(). * * The legacy global scope function wp_civicrm_capability() is called by * postProcess() in civicrm/CRM/ACL/Form/WordPress/Permissions.php @@ -385,4 +396,337 @@ class CiviCRM_For_WordPress_Users { } + // --------------------------------------------------------------------------- + + /** + * Refreshes all CiviCRM capabilities. + * + * @since 5.52 + */ + public function refresh_capabilities() { + + // Refresh capabilities assigned at plugin activation. + $this->set_wp_user_capabilities(); + + // Refresh access capabilities. + $this->set_access_capabilities(); + + /** + * Fires when CiviCRM has refreshed the WordPress capabilities. + * + * @since 5.52 + */ + do_action('civicrm_capabilities_refreshed'); + + } + + /** + * Applies all CiviCRM capabilities to the custom WordPress role. + * + * @since 5.52 + */ + public function refresh_custom_role_capabilities() { + + // Get the role to apply all CiviCRM permissions to. + $custom_role = $this->get_custom_role(); + if (empty($custom_role)) { + return; + } + + // Get all CiviCRM capabilities. + $capabilities = $this->get_all_civicrm_capabilities(); + + // Add the capabilities if not already added. + foreach ($capabilities as $capability) { + if (!$custom_role->has_cap($capability)) { + $custom_role->add_cap($capability); + } + } + + // Delete capabilities that no longer exist. + $this->delete_missing_capabilities($capabilities); + + /** + * Fires when CiviCRM has refreshed the WordPress capabilities. + * + * @since 5.52 + * + * @param array $capabilities The array of CiviCRM permissions converted to WordPress capabilities. + * @param WP_Role $custom_role The WordPress role object. + */ + do_action('civicrm_custom_role_capabilities_refreshed', $capabilities, $custom_role); + + } + + // --------------------------------------------------------------------------- + + /** + * Gets all CiviCRM permissions converted to WordPress capabilities. + * + * @since 5.52 + * + * @return array $capabilities The array of capabilities. + */ + public function get_all_civicrm_capabilities() { + + // Init return. + $capabilities = []; + + // Bail if no CiviCRM. + if (!$this->civi->initialize()) { + return $capabilities; + } + + // Get all CiviCRM permissions, excluding disabled components and descriptions. + $permissions = CRM_Core_Permission::basicPermissions(FALSE, FALSE); + + // Convert to WordPress capabilities. + foreach ($permissions as $permission => $title) { + $capabilities[] = CRM_Utils_String::munge(strtolower($permission)); + } + + /** + * Filters the complete set of CiviCRM capabilities. + * + * @since 5.52 + * + * @param array $capabilities The complete set of CiviCRM capabilities. + */ + return apply_filters('civicrm_all_capabilities', $capabilities); + + } + + /** + * Deletes CiviCRM capabilities when they no longer exist. + * + * This can happen when an Extension which had previously added permissions + * is disabled or uninstalled, for example. + * + * Things can get a bit complicated here because capabilities can appear and + * disappear (see above) and may have been assigned to other roles while they + * were present. Deleting missing capabilities may therefore have unintended + * consequences. Use the "civicrm_delete_missing_capabilities" filter if you + * are sure that you want to delete missing capabilities. + * + * @since 5.52 + * + * @param array $capabilities The complete set of CiviCRM capabilities. + */ + public function delete_missing_capabilities($capabilities) { + + /** + * Filters whether capabilities should be deleted. + * + * To enable deletion of capabilities, pass boolean true. + * + * @since 5.52 + * + * @param bool $allow_delete False (disabled) by default. + */ + $allow_delete = apply_filters('civicrm_delete_missing_capabilities', FALSE); + if ($allow_delete === FALSE) { + return; + } + + // Read the stored CiviCRM permissions array. + $stored = $this->get_saved_capabilities(); + + // Save and bail if we don't have any stored. + if (empty($stored)) { + $this->save_capabilities($capabilities); + return; + } + + // Find the capabilities that are missing in the current CiviCRM data. + $not_in_current = array_diff($stored, $capabilities); + + // Get the role to delete CiviCRM permissions from. + $custom_role = $this->get_custom_role(); + if (empty($custom_role)) { + return; + } + + // Delete the capabilities if not already deleted. + foreach ($capabilities as $capability) { + if ($custom_role->has_cap($capability)) { + $custom_role->remove_cap($capability); + } + } + + // Overwrite the current permissions array. + $this->save_capabilities($capabilities); + + } + + /** + * Gets the stored array of CiviCRM permissions formatted as WordPress capabilities. + * + * @since 5.52 + * + * @return array $capabilities The array of stored capabilities. + */ + public function get_saved_capabilities() { + + // Get capabilities from option. + $capabilities = get_option('civicrm_permissions_sync_perms', 'false'); + + // If no option exists, cast return as array. + if ($capabilities === 'false') { + $capabilities = []; + } + + return $capabilities; + + } + + /** + * Stores the array of CiviCRM permissions formatted as WordPress capabilities. + * + * @since 5.52 + * + * @param array $capabilities The array of capabilities to store. + */ + public function save_capabilities($capabilities) { + update_option('civicrm_permissions_sync_perms', $capabilities); + } + + // --------------------------------------------------------------------------- + + /** + * Retrieves the config for the custom WordPress role. + * + * @since 5.52 + * + * @return array $role_data The array of custom role data. + */ + public function get_custom_role_data() { + + // Init default role data. + $role_data = [ + 'name' => $this->custom_role_name, + 'title' => __('CiviCRM Admin', 'civicrm'), + ]; + + /** + * Filters the default CiviCRM custom role data. + * + * @since 5.52 + * + * @param array $role_data The array of default CiviCRM custom role data. + */ + $role_data = apply_filters('civicrm_custom_role_data', $role_data); + + return $role_data; + + } + + /** + * Checks if the custom WordPress role exists. + * + * @since 5.52 + * + * @return WP_Role|bool $custom_role The custom role if it exists, or false otherwise. + */ + public function has_custom_role() { + + // Return the custom role if it already exists. + $custom_role = $this->get_custom_role(); + if (!empty($custom_role)) { + return $custom_role; + } + + return FALSE; + + } + + /** + * Retrieves the custom WordPress role. + * + * @since 5.52 + * + * @return WP_Role|bool $custom_role The custom role, or false on failure. + */ + public function get_custom_role() { + + // Get the default role data. + $role_data = $this->get_custom_role_data(); + + // Return the custom role if it exists. + $wp_roles = wp_roles(); + if ($wp_roles->is_role($role_data['name'])) { + $custom_role = $wp_roles->get_role($role_data['name']); + return $custom_role; + } + + return FALSE; + + } + + /** + * Creates the custom WordPress role. + * + * We need a role to which we add all CiviCRM permissions. This makes all the + * CiviCRM capabilities discoverable by other plugins. + * + * This method creates the role if it doesn't already exist by cloning the + * built-in WordPress "administrator" role. + * + * Note: it's unlikely that you will want to grant this role to any WordPress + * users - it is purely present to make capabilities discoverable. + * + * @since 5.52 + * + * @return WP_Role|bool $custom_role The custom role, or false on failure. + */ + public function create_custom_role() { + + // Return the custom role if it already exists. + $custom_role = $this->has_custom_role(); + if (!empty($custom_role)) { + return $custom_role; + } + + // Bail if the "administrator" role doesn't exist. + $wp_roles = wp_roles(); + if (!$wp_roles->is_role('administrator')) { + return FALSE; + } + + // Get the default role data. + $role_data = $this->get_custom_role_data(); + + // Add new role based on the "administrator" role. + $admin = $wp_roles->get_role('administrator'); + $custom_role = add_role($role_data['name'], $role_data['title'], $admin->capabilities); + + // Return false if something went wrong. + if (empty($custom_role)) { + return FALSE; + } + + return $custom_role; + + } + + /** + * Deletes the custom WordPress role. + * + * @since 5.52 + */ + public function delete_custom_role() { + + // Bail if the custom role does not exist. + $custom_role = $this->has_custom_role(); + if (empty($custom_role)) { + return; + } + + // Get the default role data. + $role_data = $this->get_custom_role_data(); + + // Okay, remove it. + remove_role($role_data['name']); + + } + }