diff --git a/civicrm.php b/civicrm.php index e4a935902c9d21a5240716cb11515f53c277bfd2..8e1297af005a42631fc7038a174bb7266fb2e8ef 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /* Plugin Name: CiviCRM Description: CiviCRM - Growing and Sustaining Relationships -Version: 5.27.4 +Version: 5.28.0 Requires at least: 4.9 Requires PHP: 7.1 Author: CiviCRM LLC @@ -56,7 +56,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Set version here: when it changes, will force JS to reload -define( 'CIVICRM_PLUGIN_VERSION', '5.27.4' ); +define( 'CIVICRM_PLUGIN_VERSION', '5.28.0' ); // Store reference to this file if (!defined('CIVICRM_PLUGIN_FILE')) { @@ -360,16 +360,8 @@ class CiviCRM_For_WordPress { wp_die( __( 'Only one instance of CiviCRM_For_WordPress please', 'civicrm' ) ); } - // Get existing session ID - $session_id = session_id(); - - /* - * There is no session handling in WP - hence we start it for CiviCRM pages - * except when running via WP-CLI which does not require sessions. - */ - if ( empty( $session_id ) && ! ( defined( 'WP_CLI' ) && WP_CLI ) ) { - session_start(); - } + // Maybe start session. + $this->maybe_start_session(); /* * AJAX calls do not set the 'cms.root' item, so make sure it is set here so @@ -405,6 +397,53 @@ class CiviCRM_For_WordPress { } + /** + * Maybe start a session for CiviCRM. + * + * There is no session handling in WordPress so start it for CiviCRM pages. + * + * Not needed when running: + * + * - via WP-CLI + * - via wp-cron.php + * - via PHP on the command line + * + * none of which require sessions. + * + * + * @since 5.28 + */ + public function maybe_start_session() { + + // Get existing session ID + $session_id = session_id(); + + // Check WordPress pseudo-cron. + $wp_cron = FALSE; + if (function_exists('wp_doing_cron') && wp_doing_cron()) { + $wp_cron = TRUE; + } + + // Check WP-CLI. + $wp_cli = FALSE; + if (defined('WP_CLI') && WP_CLI) { + $wp_cli = TRUE; + } + + // Check PHP on the command line - e.g. `cv`. + $php_cli = TRUE; + if (PHP_SAPI !== 'cli') { + $php_cli = FALSE; + } + + // Maybe start session. + if (empty($session_id) && !$wp_cron && !$wp_cli && !$php_cli) { + session_start(); + } + + } + + /** * Set broad CiviCRM context. * @@ -772,9 +811,34 @@ class CiviCRM_For_WordPress { // Enable shortcode modal $this->modal->register_hooks(); + // Prevent auto-updates. + add_filter( 'plugin_auto_update_setting_html', [ $this, 'auto_update_prevent' ], 10, 3 ); + } + /** + * Prevent auto-updates of this plugin in WordPress 5.5. + * + * @link https://make.wordpress.org/core/2020/07/15/controlling-plugin-and-theme-auto-updates-ui-in-wordpress-5-5/ + * + * @since 5.28 + */ + function auto_update_prevent( $html, $plugin_file, $plugin_data ) { + + // Test for this plugin. + $this_plugin = plugin_basename( dirname( __FILE__ ) . '/civicrm.php' ); + if ( $this_plugin === $plugin_file ) { + $html = __( 'Auto-updates are not available for this plugin.', 'civicrm' ); + } + + // --< + return $html; + + } + + + /** * Force rewrite rules to be recreated. * @@ -1721,6 +1785,8 @@ class CiviCRM_For_WordPress { if (!empty($q)) { $argString = trim($q); + // remove / from the beginning and ending of query string. + $argString = trim($argString, '/'); $args = explode('/', $argString); } $args = array_pad($args, 2, ''); diff --git a/civicrm/CRM/ACL/DAO/ACL.php b/civicrm/CRM/ACL/DAO/ACL.php index 97d133de17af6a7c2ecd2122dafad843dbf2fdc8..df4002df2b74ea24d7a20847e3744663abc165bc 100644 --- a/civicrm/CRM/ACL/DAO/ACL.php +++ b/civicrm/CRM/ACL/DAO/ACL.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/ACL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:059db7bea8f7e6db81aa75b7b49ab3aa) + * (GenCodeChecksum:d91adfb9ffb0a514d42f6828f1b95033) */ /** @@ -113,6 +113,13 @@ class CRM_ACL_DAO_ACL extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('ACLs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/ACL/DAO/ACLCache.php b/civicrm/CRM/ACL/DAO/ACLCache.php index bbf49e57e9a1b5b8a6dbdb0f5665a841964f2e86..9e7ede4882df4e32895c1cf7bfa0af98cb4db4d7 100644 --- a/civicrm/CRM/ACL/DAO/ACLCache.php +++ b/civicrm/CRM/ACL/DAO/ACLCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/ACLCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:85cd87cbae11f11fd5a8380c4c9c21d0) + * (GenCodeChecksum:0427e4f02009f7a66cf34ae18ef397aa) */ /** @@ -64,6 +64,13 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('ACLCaches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/ACL/DAO/EntityRole.php b/civicrm/CRM/ACL/DAO/EntityRole.php index 5ec56936233d51cd3d1162549b6eb1d3fb8aae62..0afa11cd52c78f5baf2351dde426af509f12e5e4 100644 --- a/civicrm/CRM/ACL/DAO/EntityRole.php +++ b/civicrm/CRM/ACL/DAO/EntityRole.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/ACL/EntityRole.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:bbd320d9a5b41aff3899650556139132) + * (GenCodeChecksum:2e8133b4c385feaa934b2d14ea40f971) */ /** @@ -71,6 +71,13 @@ class CRM_ACL_DAO_EntityRole extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Roles'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index 1efa8202448fde0067d7347565f84e571a285b2a..cea9b5335563ab4345c81826129bf032bf8e8f11 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -905,13 +905,15 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { */ public function addSelectWhereClause() { $clauses = []; - // @todo - check if $permissedActivityTYpes === all activity types and do not add critieria if so. $permittedActivityTypeIDs = self::getPermittedActivityTypes(); + $allActivityTypes = self::buildOptions('activity_type_id'); if (empty($permittedActivityTypeIDs)) { // This just prevents a mysql fail if they have no access - should be extremely edge case. $permittedActivityTypeIDs = [0]; } - $clauses['activity_type_id'] = ('IN (' . implode(', ', $permittedActivityTypeIDs) . ')'); + if (array_keys($allActivityTypes) !== array_keys($permittedActivityTypeIDs)) { + $clauses['activity_type_id'] = ('IN (' . implode(', ', $permittedActivityTypeIDs) . ')'); + } $contactClause = CRM_Utils_SQL::mergeSubquery('Contact'); if ($contactClause) { @@ -1770,8 +1772,7 @@ WHERE activity.id IN ($activityIds)"; // @todo - use api - remove lots of wrangling above. Remove deprecated fatal & let form layer // deal with any exceptions. if (is_a(self::create($activityParams), 'CRM_Core_Error')) { - CRM_Core_Error::fatal("Failed creating Activity for $component of id {$activity->id}"); - return FALSE; + throw new CRM_Core_Exception("Failed creating Activity for $component of id {$activity->id}"); } } @@ -2132,7 +2133,7 @@ AND cl.modified_id = c.id // TODO: ideally we should retrieve all fields from xml, in this case since activity processing is done // my case hence we have defined fields as case_* - if ($name == 'Activity') { + if ($name === 'Activity') { $exportableFields = CRM_Activity_DAO_Activity::export(); $exportableFields['source_contact_id'] = [ 'title' => ts('Source Contact ID'), diff --git a/civicrm/CRM/Activity/BAO/Query.php b/civicrm/CRM/Activity/BAO/Query.php index 808b672e451a56b3edf9a78b2f831c904479b6db..c36e6829a7d16d5c3f93251a71e5e557b07783e3 100644 --- a/civicrm/CRM/Activity/BAO/Query.php +++ b/civicrm/CRM/Activity/BAO/Query.php @@ -28,22 +28,13 @@ class CRM_Activity_BAO_Query { $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (!empty($query->_returnProperties['activity_type_id'])) { - $query->_select['activity_type_id'] = 'activity_type.value as activity_type_id'; + if (!empty($query->_returnProperties['activity_type_id']) + || !empty($query->_returnProperties['activity_type']) + ) { + $query->_select['activity_type_id'] = 'civicrm_activity.activity_type_id'; $query->_element['activity_type_id'] = 1; $query->_tables['civicrm_activity'] = 1; - $query->_tables['activity_type'] = 1; - $query->_whereTables['civicrm_activity'] = 1; - $query->_whereTables['activity_type'] = 1; - } - - if (!empty($query->_returnProperties['activity_type'])) { - $query->_select['activity_type'] = 'activity_type.label as activity_type'; - $query->_element['activity_type'] = 1; - $query->_tables['civicrm_activity'] = 1; - $query->_tables['activity_type'] = 1; $query->_whereTables['civicrm_activity'] = 1; - $query->_whereTables['activity_type'] = 1; } if (!empty($query->_returnProperties['activity_subject'])) { diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php index 36237eb29dc0ff0e09f39ac69f6ab96599d9e9df..141c390fa4e1faf3fa76879b4bfa3300ecb6cfac 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:0961f1ac6aea3bcde5a477e078850c60) + * (GenCodeChecksum:99193964db864f9ec91b02b2bbc2d8f4) */ /** @@ -21,6 +21,13 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_activity'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-tasks'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -215,6 +222,13 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Activities'); + } + /** * Returns foreign keys and entity references. * @@ -318,10 +332,12 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'type' => CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME, 'title' => ts('Activity Date'), 'description' => ts('Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.'), + 'required' => FALSE, 'import' => TRUE, 'where' => 'civicrm_activity.activity_date_time', 'headerPattern' => '/(activity.)?date(.time$)?/i', 'export' => TRUE, + 'default' => 'CURRENT_TIMESTAMP', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', 'bao' => 'CRM_Activity_BAO_Activity', @@ -683,7 +699,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'required' => FALSE, 'where' => 'civicrm_activity.created_date', 'export' => TRUE, - 'default' => 'NULL', + 'default' => 'CURRENT_TIMESTAMP', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', 'bao' => 'CRM_Activity_BAO_Activity', @@ -807,14 +823,6 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'localizable' => FALSE, 'sig' => 'civicrm_activity::0::status_id', ], - 'index_medium_id' => [ - 'name' => 'index_medium_id', - 'field' => [ - 0 => 'medium_id', - ], - 'localizable' => FALSE, - 'sig' => 'civicrm_activity::0::medium_id', - ], 'index_is_current_revision' => [ 'name' => 'index_is_current_revision', 'field' => [ diff --git a/civicrm/CRM/Activity/DAO/ActivityContact.php b/civicrm/CRM/Activity/DAO/ActivityContact.php index 433e63792e931d7cadf56e80c00df6122c35e265..f7bd52c8e50ee0b441d2ab060efc03b14a6e3ff2 100644 --- a/civicrm/CRM/Activity/DAO/ActivityContact.php +++ b/civicrm/CRM/Activity/DAO/ActivityContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/ActivityContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:04a539640a21bec389b2a68766718975) + * (GenCodeChecksum:b458f04c2195968dbc9d49f35f7abb70) */ /** @@ -64,6 +64,13 @@ class CRM_Activity_DAO_ActivityContact extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Activity Contacts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Activity/Form/Activity.php b/civicrm/CRM/Activity/Form/Activity.php index f208f8ff6c568d4865ee41c92d110750f748b7b9..afaaffac73ac6b7a2eb3fa122a4770008d9171aa 100644 --- a/civicrm/CRM/Activity/Form/Activity.php +++ b/civicrm/CRM/Activity/Form/Activity.php @@ -582,7 +582,7 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { } if (empty($defaults['priority_id'])) { $priority = CRM_Core_PseudoConstant::get('CRM_Activity_DAO_Activity', 'priority_id'); - $defaults['priority_id'] = array_search('Normal', $priority); + $defaults['priority_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'priority_id', 'Normal'); } if (empty($defaults['status_id'])) { $defaults['status_id'] = CRM_Core_OptionGroup::getDefaultValue('activity_status'); diff --git a/civicrm/CRM/Activity/Import/Parser.php b/civicrm/CRM/Activity/Import/Parser.php index b3b5871aff1455688526f8c966dd74e7ed123672..d74f955ca08d97b75e28383cd92fc318a9e7a89c 100644 --- a/civicrm/CRM/Activity/Import/Parser.php +++ b/civicrm/CRM/Activity/Import/Parser.php @@ -67,7 +67,7 @@ abstract class CRM_Activity_Import_Parser extends CRM_Import_Parser { $totalRowCount = NULL ) { if (!is_array($fileName)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine import file'); } $fileName = $fileName['name']; diff --git a/civicrm/CRM/Activity/Page/Tab.php b/civicrm/CRM/Activity/Page/Tab.php index 8a650924ccb12a7f5988140fcf78a1530650fcfa..bca1f8abbe222158ac8da45fa5b7a2e3cde5932b 100644 --- a/civicrm/CRM/Activity/Page/Tab.php +++ b/civicrm/CRM/Activity/Page/Tab.php @@ -154,7 +154,7 @@ class CRM_Activity_Page_Tab extends CRM_Core_Page { in_array($action, [CRM_Core_Action::UPDATE, CRM_Core_Action::VIEW]) ) { if (!CRM_Activity_BAO_Activity::checkPermission($this->_id, $action)) { - CRM_Core_Error::fatal(ts('You are not authorized to access this page.')); + CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.')); } } diff --git a/civicrm/CRM/Activity/Selector/Search.php b/civicrm/CRM/Activity/Selector/Search.php index d0367750cb8b118cd742f979b7e393e262286da7..10c76703c287250e2186161e7f320637adbea912 100644 --- a/civicrm/CRM/Activity/Selector/Search.php +++ b/civicrm/CRM/Activity/Selector/Search.php @@ -154,37 +154,6 @@ class CRM_Activity_Selector_Search extends CRM_Core_Selector_Base implements CRM $this->_activityClause = $activityClause; - // CRM-12675 - $components = CRM_Core_Component::getNames(); - $componentClause = []; - foreach ($components as $componentID => $componentName) { - // CRM-19201: Add support for searching CiviCampaign and CiviCase - // activities. For CiviCase, "access all cases and activities" is - // required here rather than "access my cases and activities" to - // prevent those with only the later permission from seeing a list - // of all cases which might present a privacy issue. - // @todo this is the cause of the current devastatingly bad performance on - // activity search - it involves a bad join. - // The correct fix is to use the permission infrastrucutre - ie. add in the - // clause generated by CRM_Activity_BAO_Query::addSelectWhere - // but some testing needs to check that before making the change - // see https://github.com/civicrm/civicrm-core/blob/be2fb01f90f5f299dd07402a41fed7c7c7567f00/CRM/Utils/SQL.php#L48 - // for how it's done in the api kernel. - if (!CRM_Core_Permission::access($componentName, TRUE, TRUE)) { - $componentClause[] = " (activity_type.component_id IS NULL OR activity_type.component_id <> {$componentID}) "; - } - } - - if (!empty($componentClause)) { - $componentRestriction = implode(' AND ', $componentClause); - if (empty($this->_activityClause)) { - $this->_activityClause = $componentRestriction; - } - else { - $this->_activityClause .= ' AND ' . $componentRestriction; - } - } - // type of selector $this->_action = $action; $this->_query = new CRM_Contact_BAO_Query($this->_queryParams, diff --git a/civicrm/CRM/Admin/Form/ContactType.php b/civicrm/CRM/Admin/Form/ContactType.php index ae4a4b2501c4adc9b3a9983e38383a4b67657e5c..857977f01e3220f5778417e0495c78671f7a38d9 100644 --- a/civicrm/CRM/Admin/Form/ContactType.php +++ b/civicrm/CRM/Admin/Form/ContactType.php @@ -121,9 +121,7 @@ class CRM_Admin_Form_ContactType extends CRM_Admin_Form { $params['is_active'] = 1; } } - if ($this->_action & CRM_Core_Action::ADD) { - $params['name'] = ucfirst(CRM_Utils_String::munge($params['label'])); - } + $contactType = CRM_Contact_BAO_ContactType::add($params); CRM_Core_Session::setStatus(ts("The Contact Type '%1' has been saved.", [1 => $contactType->label] diff --git a/civicrm/CRM/Admin/Form/Extensions.php b/civicrm/CRM/Admin/Form/Extensions.php index 51b32eeeceb95073ae2d584245cce8a29c611b32..dc7687671bfa0af9ec60bd74997c64493e8842f8 100644 --- a/civicrm/CRM/Admin/Form/Extensions.php +++ b/civicrm/CRM/Admin/Form/Extensions.php @@ -57,7 +57,7 @@ class CRM_Admin_Form_Extensions extends CRM_Admin_Form { case CRM_Core_Action::UPDATE: if (!CRM_Extension_System::singleton()->getBrowser()->isEnabled()) { - CRM_Core_Error::fatal(ts('The system administrator has disabled this feature.')); + CRM_Core_Error::statusBounce(ts('The system administrator has disabled this feature.')); } $info = CRM_Extension_System::singleton()->getBrowser()->getExtension($this->_key); $extInfo = CRM_Admin_Page_Extensions::createExtendedInfo($info); @@ -65,7 +65,7 @@ class CRM_Admin_Form_Extensions extends CRM_Admin_Form { break; default: - CRM_Core_Error::fatal(ts('Unsupported action')); + CRM_Core_Error::statusBounce(ts('Unsupported action')); } } diff --git a/civicrm/CRM/Admin/Form/Navigation.php b/civicrm/CRM/Admin/Form/Navigation.php index 510d039c13722d28cd9ee39d80f16f9f17aa6401..0b21a818d970c1838ee40b4c32d2161e36a0aff9 100644 --- a/civicrm/CRM/Admin/Form/Navigation.php +++ b/civicrm/CRM/Admin/Form/Navigation.php @@ -67,7 +67,7 @@ class CRM_Admin_Form_Navigation extends CRM_Admin_Form { $this->add('select', 'permission_operator', NULL, $operators); //make separator location configurable - $separator = [ts('None'), ts('After menu element'), ts('Before menu element')]; + $separator = CRM_Core_SelectValues::navigationMenuSeparator(); $this->add('select', 'has_separator', ts('Separator'), $separator); $active = $this->add('advcheckbox', 'is_active', ts('Enabled')); diff --git a/civicrm/CRM/Admin/Form/SettingTrait.php b/civicrm/CRM/Admin/Form/SettingTrait.php index 5c52de39e94316946c88969a035000dc77c90901..345bef9d2a01a7068c117fb6fdbb66331eae1a35 100644 --- a/civicrm/CRM/Admin/Form/SettingTrait.php +++ b/civicrm/CRM/Admin/Form/SettingTrait.php @@ -227,7 +227,7 @@ trait CRM_Admin_Form_SettingTrait { $this->addRadio($setting, $props['title'], [1 => ts('Yes'), 0 => ts('No')], CRM_Utils_Array::value('html_attributes', $props), ' '); } elseif ($add === 'add') { - $this->add($props['html_type'], $setting, $props['title'], $options); + $this->add($props['html_type'], $setting, $props['title'], $options, FALSE, $props['html_extra'] ?? NULL); } else { $this->$add($setting, $props['title'], $options); @@ -290,7 +290,7 @@ trait CRM_Admin_Form_SettingTrait { 'advmultiselect' => 'Element', ]; $mapping += array_fill_keys(CRM_Core_Form::$html5Types, ''); - return $mapping[$htmlType]; + return $mapping[$htmlType] ?? ''; } /** diff --git a/civicrm/CRM/Api4/Page/AJAX.php b/civicrm/CRM/Api4/Page/AJAX.php index 300fc3361210592dce51248ba3025b6d99cfe187..2e6854f9b0537c08196e2ad339c1627b09ba9dff 100644 --- a/civicrm/CRM/Api4/Page/AJAX.php +++ b/civicrm/CRM/Api4/Page/AJAX.php @@ -129,6 +129,7 @@ class CRM_Api4_Page_AJAX extends CRM_Core_Page { foreach (get_class_vars(get_class($result)) as $key => $val) { $vals[$key] = $result->$key; } + unset($vals['rowCount']); $vals['count'] = $result->count(); return $vals; } diff --git a/civicrm/CRM/Api4/Page/Api4Explorer.php b/civicrm/CRM/Api4/Page/Api4Explorer.php index c5280bb2573ebd292bb90ca704d780d17922006c..3daba0733836d8b0966bde5fbf613d298bfc36f6 100644 --- a/civicrm/CRM/Api4/Page/Api4Explorer.php +++ b/civicrm/CRM/Api4/Page/Api4Explorer.php @@ -70,7 +70,9 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { if (is_subclass_of($className, '\Civi\Api4\Query\SqlFunction')) { $fns[] = [ 'name' => $className::getName(), + 'title' => $className::getTitle(), 'params' => $className::getParams(), + 'category' => $className::getCategory(), ]; } } diff --git a/civicrm/CRM/Batch/BAO/Batch.php b/civicrm/CRM/Batch/BAO/Batch.php index f44c0e4999485fcd03a7a35621bd2bd1ba4e9a9c..3bb93f140b70980255282f987bf5c2a0d85476ec 100644 --- a/civicrm/CRM/Batch/BAO/Batch.php +++ b/civicrm/CRM/Batch/BAO/Batch.php @@ -579,12 +579,10 @@ class CRM_Batch_BAO_Batch extends CRM_Batch_DAO_Batch { */ public static function exportFinancialBatch($batchIds, $exportFormat, $downloadFile) { if (empty($batchIds)) { - CRM_Core_Error::fatal(ts('No batches were selected.')); - return; + throw new CRM_Core_Exception(ts('No batches were selected.')); } if (empty($exportFormat)) { - CRM_Core_Error::fatal(ts('No export format selected.')); - return; + throw new CRM_Core_Exception(ts('No export format selected.')); } self::$_exportFormat = $exportFormat; @@ -594,7 +592,7 @@ class CRM_Batch_BAO_Batch extends CRM_Batch_DAO_Batch { $exporter = new $exporterClass(); } else { - CRM_Core_Error::fatal("Could not locate exporter: $exporterClass"); + throw new CRM_Core_Exception("Could not locate exporter: $exporterClass"); } $export = []; $exporter->_isDownloadFile = $downloadFile; diff --git a/civicrm/CRM/Batch/DAO/Batch.php b/civicrm/CRM/Batch/DAO/Batch.php index 2d86803ef611a87a6acf074032de52eb6ce46672..995e7cd9617ba7b6713d1e37909673e56e7f420e 100644 --- a/civicrm/CRM/Batch/DAO/Batch.php +++ b/civicrm/CRM/Batch/DAO/Batch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Batch/Batch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b1da33b9a5dd284abb0fd6b9fcb3b434) + * (GenCodeChecksum:062be2c63f724430f3a380c015fd6a02) */ /** @@ -153,6 +153,13 @@ class CRM_Batch_DAO_Batch extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Batches'); + } + /** * Returns foreign keys and entity references. * @@ -267,6 +274,7 @@ class CRM_Batch_DAO_Batch extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => '3.3', ], diff --git a/civicrm/CRM/Batch/DAO/EntityBatch.php b/civicrm/CRM/Batch/DAO/EntityBatch.php index 282a99679b4d85aa00349766c4559658369252a4..3bffdf0ada9807f935bd956f92dcf75050b3f1c6 100644 --- a/civicrm/CRM/Batch/DAO/EntityBatch.php +++ b/civicrm/CRM/Batch/DAO/EntityBatch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Batch/EntityBatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d8af90cbbcd6de6c5242d184d7c54c01) + * (GenCodeChecksum:645843a03d3f8e9194ddd2bd79abf5c7) */ /** @@ -64,6 +64,13 @@ class CRM_Batch_DAO_EntityBatch extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Batches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Bridge/OG/CiviCRM.php b/civicrm/CRM/Bridge/OG/CiviCRM.php index a9272d43ec65ab53837a14b93272ce3df86a40ec..9c24642a24385d4c262d3aa267b2be69ed6d5b11 100644 --- a/civicrm/CRM/Bridge/OG/CiviCRM.php +++ b/civicrm/CRM/Bridge/OG/CiviCRM.php @@ -35,7 +35,7 @@ class CRM_Bridge_OG_CiviCRM { * @param $group */ public static function groupAdd($groupID, $group) { - $ogID = CRM_Bridge_OG_Utils::ogID($groupID, FALSE); + $ogID = CRM_Bridge_OG_Utils::ogID($groupID); $node = new StdClass(); if ($ogID) { @@ -69,7 +69,7 @@ class CRM_Bridge_OG_CiviCRM { * @param $group */ public static function groupDelete($groupID, $group) { - $ogID = CRM_Bridge_OG_Utils::ogID($groupID, FALSE); + $ogID = CRM_Bridge_OG_Utils::ogID($groupID); if (!$ogID) { return; } @@ -84,7 +84,7 @@ class CRM_Bridge_OG_CiviCRM { */ public static function groupContact($groupID, $contactIDs, $op) { $config = CRM_Core_Config::singleton(); - $ogID = CRM_Bridge_OG_Utils::ogID($groupID, FALSE); + $ogID = CRM_Bridge_OG_Utils::ogID($groupID); if (!$ogID) { return; diff --git a/civicrm/CRM/Bridge/OG/Drupal.php b/civicrm/CRM/Bridge/OG/Drupal.php index 60e560ab1f4dcf9a3626433e3164fc587f6b8694..7a8b0be8b574e950272ab947dbcb3d15875a2888 100644 --- a/civicrm/CRM/Bridge/OG/Drupal.php +++ b/civicrm/CRM/Bridge/OG/Drupal.php @@ -204,7 +204,7 @@ SELECT v.id $contactID = CRM_Bridge_OG_Utils::contactID($params['uf_id']); if (!$contactID) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception(' no contact found'); } // get the group id of this OG diff --git a/civicrm/CRM/Bridge/OG/Utils.php b/civicrm/CRM/Bridge/OG/Utils.php index 0e5dc67e48b4af6ef3ece8e2cdd7b6528c4883f9..5fb44c7d8182653e11f928660b718157ae5c2db9 100644 --- a/civicrm/CRM/Bridge/OG/Utils.php +++ b/civicrm/CRM/Bridge/OG/Utils.php @@ -56,12 +56,11 @@ class CRM_Bridge_OG_Utils { /** * @param int $groupID - * @param bool $abort * * @return int|null|string * @throws Exception */ - public static function ogID($groupID, $abort = TRUE) { + public static function ogID($groupID) { $source = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $groupID, 'source' @@ -73,9 +72,6 @@ class CRM_Bridge_OG_Utils { return $matches[1]; } } - if ($abort) { - CRM_Core_Error::fatal(); - } return NULL; } @@ -97,7 +93,7 @@ class CRM_Bridge_OG_Utils { CRM_Core_BAO_UFMatch::synchronizeUFMatch($account, $ufID, $account->mail, 'Drupal'); $contactID = CRM_Core_BAO_UFMatch::getContactId($ufID); if (!$contactID) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('no contact found'); } return $contactID; } @@ -108,7 +104,7 @@ class CRM_Bridge_OG_Utils { * @param bool $abort * * @return null|string - * @throws Exception + * @throws \CRM_Core_Exception */ public static function groupID($source, $title = NULL, $abort = FALSE) { $query = " @@ -126,7 +122,7 @@ SELECT id if ($abort && !$groupID ) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('no group found'); } return $groupID; diff --git a/civicrm/CRM/Campaign/BAO/Petition.php b/civicrm/CRM/Campaign/BAO/Petition.php index 406b38f70f8bf4c70ff52a8671bf0b3608b1804b..72e2151a640f88cd0311b723df4243efee7a7227 100644 --- a/civicrm/CRM/Campaign/BAO/Petition.php +++ b/civicrm/CRM/Campaign/BAO/Petition.php @@ -266,8 +266,7 @@ AND tag_id = ( SELECT id FROM civicrm_tag WHERE name = %2 )"; return TRUE; } else { - CRM_Core_Error::fatal(ts('Petition Id and/or Activity Id is not of the type Positive.')); - return FALSE; + throw new CRM_Core_Exception(ts('Petition Id and/or Activity Id is not of the type Positive.')); } } @@ -561,7 +560,7 @@ AND tag_id = ( SELECT id FROM civicrm_tag WHERE name = %2 )"; $petitionInfo = []; CRM_Campaign_BAO_Survey::retrieve($petitionParams, $petitionInfo); if (empty($petitionInfo)) { - CRM_Core_Error::fatal('Petition doesn\'t exist.'); + throw new CRM_Core_Exception('Petition doesn\'t exist.'); } //get the default domain email address. diff --git a/civicrm/CRM/Campaign/DAO/Campaign.php b/civicrm/CRM/Campaign/DAO/Campaign.php index 7406f952c7a1c419871ba7134aa45b65683f21d2..44b832de2161b8260693a54501037aeba9f2205a 100644 --- a/civicrm/CRM/Campaign/DAO/Campaign.php +++ b/civicrm/CRM/Campaign/DAO/Campaign.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Campaign.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e47ffd839a7f43ce85c1e23e901ffda9) + * (GenCodeChecksum:6b53e3fb452807fce31fc81bb2b09b38) */ /** @@ -21,6 +21,13 @@ class CRM_Campaign_DAO_Campaign extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_campaign'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-bullhorn'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -155,6 +162,13 @@ class CRM_Campaign_DAO_Campaign extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Campaigns'); + } + /** * Returns foreign keys and entity references. * @@ -266,6 +280,7 @@ class CRM_Campaign_DAO_Campaign extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => '3.3', ], @@ -284,6 +299,7 @@ class CRM_Campaign_DAO_Campaign extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => '3.3', ], @@ -412,6 +428,7 @@ class CRM_Campaign_DAO_Campaign extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => '3.3', ], diff --git a/civicrm/CRM/Campaign/DAO/CampaignGroup.php b/civicrm/CRM/Campaign/DAO/CampaignGroup.php index 17218e3ff613f6d9186fc2a376a60526cdc0b7a1..4dbb8b7f2d1dad664c1bba8836ba97c3b81fff9d 100644 --- a/civicrm/CRM/Campaign/DAO/CampaignGroup.php +++ b/civicrm/CRM/Campaign/DAO/CampaignGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/CampaignGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:62007f1aafaca1bd405f9ae765b1307d) + * (GenCodeChecksum:a4fa6a19ef72119a316417521e209cd4) */ /** @@ -71,6 +71,13 @@ class CRM_Campaign_DAO_CampaignGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Campaign Groups'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php index 62ce2d6465e1fc8a5867b34ec1214e871b54aeeb..62493531bf813079172122bc457d8bcdbf43b561 100644 --- a/civicrm/CRM/Campaign/DAO/Survey.php +++ b/civicrm/CRM/Campaign/DAO/Survey.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Survey.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cb384a1d50e8b48436a104c50c8c0e23) + * (GenCodeChecksum:80b92f90300f8e432ddd68e95d22b622) */ /** @@ -21,6 +21,13 @@ class CRM_Campaign_DAO_Survey extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_survey'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-clipboard'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -176,6 +183,13 @@ class CRM_Campaign_DAO_Survey extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Surveys'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Campaign/Form/Survey/Delete.php b/civicrm/CRM/Campaign/Form/Survey/Delete.php index d08d968accc7901c3905570fc125012bc4bdca5d..db6dd1148811160836b25ffde4e77c2f540c4b2e 100644 --- a/civicrm/CRM/Campaign/Form/Survey/Delete.php +++ b/civicrm/CRM/Campaign/Form/Survey/Delete.php @@ -77,7 +77,7 @@ class CRM_Campaign_Form_Survey_Delete extends CRM_Core_Form { CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/campaign', 'reset=1&subPage=survey')); } else { - CRM_Core_Error::fatal(ts('Delete action is missing expected survey ID.')); + CRM_Core_Error::statusBounce(ts('Delete action is missing expected survey ID.')); } } diff --git a/civicrm/CRM/Campaign/Page/Petition/Confirm.php b/civicrm/CRM/Campaign/Page/Petition/Confirm.php index f434ae785c4367810c4807a8bbdc33a191feedb5..eac97297f77daf6a274ed654b865be47c9a3856f 100644 --- a/civicrm/CRM/Campaign/Page/Petition/Confirm.php +++ b/civicrm/CRM/Campaign/Page/Petition/Confirm.php @@ -36,7 +36,7 @@ class CRM_Campaign_Page_Petition_Confirm extends CRM_Core_Page { !$subscribe_id || !$hash ) { - CRM_Core_Error::fatal(ts("Missing input parameters")); + CRM_Core_Error::statusBounce(ts("Missing input parameters")); } $result = $this->confirm($contact_id, $subscribe_id, $hash, $activity_id, $petition_id); diff --git a/civicrm/CRM/Case/DAO/Case.php b/civicrm/CRM/Case/DAO/Case.php index 523d1f023e0b750d5555a986942b25bc0b06bda0..8f54a68d23d2117de2597ce1a84e59344f6f8e0e 100644 --- a/civicrm/CRM/Case/DAO/Case.php +++ b/civicrm/CRM/Case/DAO/Case.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/Case.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a178b404d6691073bed83b62a23948fc) + * (GenCodeChecksum:ec6804103883c17fff63061e06d3e591) */ /** @@ -21,6 +21,13 @@ class CRM_Case_DAO_Case extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_case'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-folder-open'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -104,6 +111,13 @@ class CRM_Case_DAO_Case extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Cases'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Case/DAO/CaseActivity.php b/civicrm/CRM/Case/DAO/CaseActivity.php index bdb2d2d75d3a28f8a7ac97fd5830e5bc67d9f307..a57d2a9bd1f7bb1b8022315557d2da43c7ecd26a 100644 --- a/civicrm/CRM/Case/DAO/CaseActivity.php +++ b/civicrm/CRM/Case/DAO/CaseActivity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseActivity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fb0c2ef73f9d8d7bbbb2af6ba8dc4333) + * (GenCodeChecksum:d2ef4c48307f130ba531ff5c4bfb38d6) */ /** @@ -57,6 +57,13 @@ class CRM_Case_DAO_CaseActivity extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Case Activities'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Case/DAO/CaseContact.php b/civicrm/CRM/Case/DAO/CaseContact.php index a6c95ece29f304c69138a32a0f6d9d6e0718b5c7..df46165d1500b7733aea1b05d3d7d43a9bfaa0e5 100644 --- a/civicrm/CRM/Case/DAO/CaseContact.php +++ b/civicrm/CRM/Case/DAO/CaseContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ef8dc427e850f01fda57aa9d25dcab19) + * (GenCodeChecksum:4a71399455a593008da4849db726f7b9) */ /** @@ -57,6 +57,13 @@ class CRM_Case_DAO_CaseContact extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Case Contacts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Case/DAO/CaseType.php b/civicrm/CRM/Case/DAO/CaseType.php index 1c70b18267b05a59b26daa1d5f313bcb4875b2a5..039a9582440f0efccb1a6268ba037e2566f77707 100644 --- a/civicrm/CRM/Case/DAO/CaseType.php +++ b/civicrm/CRM/Case/DAO/CaseType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:de405465ee3798e2f6692fb22614b003) + * (GenCodeChecksum:c65e3b1aa03fb9ad3122915d612fefb8) */ /** @@ -92,6 +92,13 @@ class CRM_Case_DAO_CaseType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Case Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Case/XMLProcessor.php b/civicrm/CRM/Case/XMLProcessor.php index 1b8780c99127107a0248c85806e950c2c673e192..9f9ef223e919dde93635b6ee81c06f5eab48f313 100644 --- a/civicrm/CRM/Case/XMLProcessor.php +++ b/civicrm/CRM/Case/XMLProcessor.php @@ -62,12 +62,15 @@ class CRM_Case_XMLProcessor { } /** + * @deprecated + * * @param bool $indexName * @param bool $all * * @return array */ public static function &allActivityTypes($indexName = TRUE, $all = FALSE) { + CRM_Core_Error::deprecatedFunctionWarning('CRM_Case_PseudoConstant::caseActivityType'); if (self::$activityTypes === NULL) { self::$activityTypes = CRM_Case_PseudoConstant::caseActivityType($indexName, $all); } diff --git a/civicrm/CRM/Case/XMLProcessor/Process.php b/civicrm/CRM/Case/XMLProcessor/Process.php index 9307f2bb905a61f408e0121b175186bcd3200943..6bffb852dd88434b1218146bb3f405b7c8d3a932 100644 --- a/civicrm/CRM/Case/XMLProcessor/Process.php +++ b/civicrm/CRM/Case/XMLProcessor/Process.php @@ -253,7 +253,7 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor { * @return array */ public function activityTypes($activityTypesXML, $maxInst = FALSE, $isLabel = FALSE, $maskAction = FALSE) { - $activityTypes = &$this->allActivityTypes(TRUE, TRUE); + $activityTypes = CRM_Case_PseudoConstant::caseActivityType(TRUE, TRUE); $result = []; foreach ($activityTypesXML as $activityTypeXML) { foreach ($activityTypeXML as $recordXML) { @@ -404,7 +404,7 @@ AND a.is_deleted = 0 */ public function createActivity($activityTypeXML, &$params) { $activityTypeName = (string) $activityTypeXML->name; - $activityTypes = &$this->allActivityTypes(TRUE, TRUE); + $activityTypes = CRM_Case_PseudoConstant::caseActivityType(TRUE, TRUE); $activityTypeInfo = $activityTypes[$activityTypeName] ?? NULL; if (!$activityTypeInfo) { diff --git a/civicrm/CRM/Case/XMLProcessor/Report.php b/civicrm/CRM/Case/XMLProcessor/Report.php index 1fdff0091560ac78eaddb1df5ada09e492a3ca8e..4f4b7c6c2049eee2ad845eb2fc56bbeaa79a8b67 100644 --- a/civicrm/CRM/Case/XMLProcessor/Report.php +++ b/civicrm/CRM/Case/XMLProcessor/Report.php @@ -538,9 +538,6 @@ WHERE a.id = %1 ) { $value = $this->redact($value); } - elseif (CRM_Utils_Array::value('type', $typeValue) == 'Link') { - $value = CRM_Utils_System::formatWikiURL($value); - } } //$typeValue $customGroup[] = array( @@ -771,7 +768,7 @@ LIMIT 1 $activityTypes = $form->getActivityTypes($xml, $activitySetName); } else { - $activityTypes = CRM_Case_XMLProcessor::allActivityTypes(FALSE, TRUE); + $activityTypes = CRM_Case_PseudoConstant::caseActivityType(FALSE, TRUE); } if (!$activityTypes) { diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index d795677303dafdb5505580db666eb2e118098c24..2bb378d1d365ccb0f3de4ea418d8555e31c3a4fa 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -175,7 +175,7 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { // Since hash was required, make sure we have a 0 value for it (CRM-1063). // @todo - does this mean we can remove this block? // Fixed in 1.5 by making hash optional, only do this in create mode, not update. - if ((!array_key_exists('hash', $contact) || !$contact->hash) && !$contact->id) { + if ((!isset($contact->hash) || !$contact->hash) && !$contact->id) { $allNull = FALSE; $contact->hash = md5(uniqid(rand(), TRUE)); } diff --git a/civicrm/CRM/Contact/BAO/ContactType.php b/civicrm/CRM/Contact/BAO/ContactType.php index 42fb2ba54dfba4508c01424c1c0732aa5d14fee3..b356a39616edcc2146ad02fa5b23772986384fbe 100644 --- a/civicrm/CRM/Contact/BAO/ContactType.php +++ b/civicrm/CRM/Contact/BAO/ContactType.php @@ -26,7 +26,7 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { * @param array $defaults * (reference ) an assoc array to hold the flattened values. * - * @return CRM_Contact_BAO_ContactType|null + * @return CRM_Contact_DAO_ContactType|null * object on success, null otherwise */ public static function retrieve(&$params, &$defaults) { @@ -48,13 +48,14 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { */ public static function isActive($contactType) { $contact = self::contactTypeInfo(FALSE); - $active = array_key_exists($contactType, $contact); - return $active; + return array_key_exists($contactType, $contact); } /** * Retrieve basic contact type information. * + * @todo - call getAllContactTypes & return filtered results. + * * @param bool $includeInactive * * @return array @@ -112,6 +113,8 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { /** * Retrieve all subtypes Information. * + * @todo - call getAllContactTypes & return filtered results. + * * @param array $contactType * .. * @param bool $all @@ -218,55 +221,26 @@ WHERE subtype.name IS NOT NULL AND subtype.parent_id IS NOT NULL {$ctWHERE} /** * Retrieve info array about all types i.e basic + subtypes. * + * @todo deprecate calling this with $all = TRUE in favour of getAllContactTypes + * & ideally add getActiveContactTypes & call that from this fully + * deprecated function. + * * @param bool $all * * @return array * Array of basic types + all subtypes. + * @throws \API_Exception */ public static function contactTypeInfo($all = FALSE) { - static $_cache = NULL; - - if ($_cache === NULL) { - $_cache = []; - } - - $argString = $all ? 'CRM_CT_CTI_1' : 'CRM_CT_CTI_0'; - if (!array_key_exists($argString, $_cache)) { - $cache = CRM_Utils_Cache::singleton(); - $_cache[$argString] = $cache->get($argString); - if (!$_cache[$argString]) { - $_cache[$argString] = []; - - $sql = ' -SELECT type.*, parent.name as parent, parent.label as parent_label -FROM civicrm_contact_type type -LEFT JOIN civicrm_contact_type parent ON type.parent_id = parent.id -WHERE type.name IS NOT NULL -'; - if ($all === FALSE) { - $sql .= ' AND type.is_active = 1'; + $contactTypes = self::getAllContactTypes(); + if (!$all) { + foreach ($contactTypes as $index => $value) { + if (!$value['is_active']) { + unset($contactTypes[$index]); } - - $dao = CRM_Core_DAO::executeQuery($sql, - [], - FALSE, - 'CRM_Contact_DAO_ContactType' - ); - while ($dao->fetch()) { - $value = []; - CRM_Core_DAO::storeValues($dao, $value); - if (array_key_exists('parent_id', $value)) { - $value['parent'] = $dao->parent; - $value['parent_label'] = $dao->parent_label; - } - $_cache[$argString][$dao->name] = $value; - } - - $cache->set($argString, $_cache[$argString]); } } - - return $_cache[$argString]; + return $contactTypes; } /** @@ -278,6 +252,7 @@ WHERE type.name IS NOT NULL * * @return array * Array of basictypes with name as 'built-in name' and 'label' as value + * @throws \API_Exception */ public static function contactTypePairs($all = FALSE, $typeName = NULL, $delimiter = NULL) { $types = self::contactTypeInfo($all); @@ -327,6 +302,7 @@ WHERE type.name IS NOT NULL $_cache = []; } + // @todo - call getAllContactTypes & return filtered results. $argString = $all ? 'CRM_CT_GSE_1' : 'CRM_CT_GSE_0'; $argString .= $isSeparator ? '_1' : '_0'; $argString .= $separator; @@ -577,12 +553,16 @@ WHERE name = %1'; * @return object|void * @throws \CRM_Core_Exception */ - public static function add(&$params) { + public static function add($params) { // label or name if (empty($params['id']) && empty($params['label'])) { + // @todo consider throwing exception instead. return NULL; } + if (empty($params['id']) && empty($params['name'])) { + $params['name'] = ucfirst(CRM_Utils_String::munge($params['label'])); + } if (!empty($params['parent_id']) && !CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_ContactType', $params['parent_id']) ) { @@ -592,7 +572,6 @@ WHERE name = %1'; $contactType = new CRM_Contact_DAO_ContactType(); $contactType->copyValues($params); $contactType->id = $params['id'] ?? NULL; - $contactType->is_active = CRM_Utils_Array::value('is_active', $params, 0); $contactType->save(); if ($contactType->find(TRUE)) { @@ -604,7 +583,7 @@ WHERE name = %1'; if (!empty($params['id'])) { $newParams = [ 'label' => ts("New %1", [1 => $contact]), - 'is_active' => $active, + 'is_active' => $contactType->is_active, ]; CRM_Core_BAO_Navigation::processUpdate(['name' => "New $contactName"], $newParams); } @@ -657,7 +636,8 @@ WHERE name = %1'; /** * @param string $typeName * - * @return mixed + * @return string + * @throws \API_Exception */ public static function getLabel($typeName) { $types = self::contactTypeInfo(TRUE); @@ -803,14 +783,16 @@ WHERE extends = %1 AND ' . implode(" OR ", $subTypeClause); /** * Function that does something. - * @todo what does this function do? * * @param int $contactID - * @param $contactType + * @param string $contactType * @param array $oldSubtypeSet * @param array $newSubtypeSet * * @return bool + * @throws \CRM_Core_Exception + * + * @todo what does this function do? */ public static function deleteCustomSetForSubtypeMigration( $contactID, @@ -840,6 +822,8 @@ WHERE extends = %1 AND ' . implode(" OR ", $subTypeClause); * @param array $subtypesToPreserve * * @return bool + * + * @throws \CRM_Core_Exception */ public static function deleteCustomRowsOfSubtype($gID, $subtypes = [], $subtypesToPreserve = []) { if (!$gID or empty($subtypes)) { @@ -885,6 +869,8 @@ WHERE ($subtypeClause)"; * Entity id. * * @return null|string + * + * @throws \CRM_Core_Exception */ public static function deleteCustomRowsForEntityID($customTable, $entityID) { $customTable = CRM_Utils_Type::escape($customTable, 'String'); @@ -892,4 +878,28 @@ WHERE ($subtypeClause)"; return CRM_Core_DAO::singleValueQuery($query, [1 => [$entityID, 'Integer']]); } + /** + * Get all contact types, leveraging caching. + * + * @return array + * + * @throws \API_Exception + */ + protected static function getAllContactTypes() { + if (!Civi::cache('contactTypes')->has('all')) { + $contactTypes = (array) ContactType::get()->setCheckPermissions(FALSE) + ->setSelect(['id', 'name', 'label', 'description', 'is_active', 'is_reserved', 'image_URL', 'parent_id', 'parent_id:name', 'parent_id:label']) + ->execute()->indexBy('name'); + + foreach ($contactTypes as $id => $contactType) { + $contactTypes[$id]['parent'] = $contactType['parent_id:name']; + $contactTypes[$id]['parent_label'] = $contactType['parent_id:label']; + unset($contactTypes[$id]['parent_id:name'], $contactTypes[$id]['parent_id:label']); + } + Civi::cache('contactTypes')->set('all', $contactTypes); + } + $contactTypes = Civi::cache('contactTypes')->get('all'); + return $contactTypes; + } + } diff --git a/civicrm/CRM/Contact/BAO/Group.php b/civicrm/CRM/Contact/BAO/Group.php index ec214b8142010ba25c5b9cc44b1597245f0c7fe9..8ce1289fae26a7a22a2aeef09ebfb4529566f03e 100644 --- a/civicrm/CRM/Contact/BAO/Group.php +++ b/civicrm/CRM/Contact/BAO/Group.php @@ -52,6 +52,9 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { * @param int $id Group id. */ public static function discard($id) { + if (!$id || !is_numeric($id)) { + throw new CRM_Core_Exception('Invalid group request attempted'); + } CRM_Utils_Hook::pre('delete', 'Group', $id, CRM_Core_DAO::$_nullArray); $transaction = new CRM_Core_Transaction(); @@ -912,7 +915,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { $action = array_sum(array_keys($newLinks)); // CRM-9936 - if (array_key_exists('is_reserved', $object)) { + if (property_exists($object, 'is_reserved')) { //if group is reserved and I don't have reserved permission, suppress delete/edit if ($object->is_reserved && !$reservedPermission) { $action -= CRM_Core_Action::DELETE; @@ -921,7 +924,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { } } - if (array_key_exists('is_active', $object)) { + if (property_exists($object, 'is_active')) { if ($object->is_active) { $action -= CRM_Core_Action::ENABLE; } diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index 65917cafe38e6bae2a48b71442bce22a19ca59d9..4986afdace4b1066e94647e1234ab41f90db46cf 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -2049,7 +2049,7 @@ class CRM_Contact_BAO_Query { $this->_params[$id][1] ); $this->_qill[0][] = ts("%1 %2 %3", [ - 1 => $field['title'], + 1 => $field['title'] ?? '', 2 => $qillop, 3 => $qillVal, ]); @@ -2323,7 +2323,7 @@ class CRM_Contact_BAO_Query { } // we don't know when this might happen else { - CRM_Core_Error::fatal(ts("%1 is not a valid operator", [1 => $operator])); + throw new CRM_Core_Exception(ts("%1 is not a valid operator", [1 => $operator])); } } } @@ -2417,7 +2417,7 @@ class CRM_Contact_BAO_Query { $tName = str_replace(' ', '_', $tName); return [$tName, $fldName]; } - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Cannot determine location table information'); } /** @@ -2973,7 +2973,7 @@ class CRM_Contact_BAO_Query { if (is_array($value) && count($value) > 1) { if (strpos($op, 'IN') === FALSE && strpos($op, 'NULL') === FALSE) { - CRM_Core_Error::fatal(ts("%1 is not a valid operator", [1 => $op])); + throw new CRM_Core_Exception(ts("%1 is not a valid operator", [1 => $op])); } $this->_useDistinct = TRUE; } @@ -3033,10 +3033,7 @@ class CRM_Contact_BAO_Query { if ($op === '!=') { $groupIds = ''; if (!empty($regularGroupIDs)) { - $groupIds = CRM_Utils_Type::validate( - implode(',', (array) $regularGroupIDs), - 'CommaSeparatedIntegers' - ); + $groupIds = CRM_Utils_Type::validate(implode(',', (array) $regularGroupIDs), 'CommaSeparatedIntegers'); } $clause = "{$gcTable}.contact_id NOT IN (SELECT contact_id FROM civicrm_group_contact cgc WHERE cgc.group_id = $groupIds )"; } @@ -3283,10 +3280,7 @@ WHERE $smartGroupClause // implode array, then remove all spaces $value = str_replace(' ', '', implode(',', (array) $value)); if (!empty($value)) { - $value = CRM_Utils_Type::validate( - $value, - 'CommaSeparatedIntegers' - ); + $value = CRM_Utils_Type::validate($value, 'CommaSeparatedIntegers'); } $useAllTagTypes = $this->getWhereValues('all_tag_types', $grouping); @@ -3294,7 +3288,7 @@ WHERE $smartGroupClause $etTable = "`civicrm_entity_tag-" . uniqid() . "`"; - if ($useAllTagTypes[2]) { + if (!empty($useAllTagTypes[2])) { $this->_tables[$etTable] = $this->_whereTables[$etTable] = " LEFT JOIN civicrm_entity_tag {$etTable} ON ( {$etTable}.entity_id = contact_a.id AND {$etTable}.entity_table = 'civicrm_contact') "; @@ -3696,7 +3690,7 @@ WHERE $smartGroupClause } CRM_Utils_Type::validateAll($contactIds, 'Positive'); if (!empty($contactIds)) { - $this->_where[0][] = " ( contact_a.id IN (" . implode(',', $contactIds) . " ) ) "; + $this->_where[0][] = ' ( contact_a.id IN (' . implode(',', $contactIds) . " ) ) "; } } @@ -4243,7 +4237,7 @@ WHERE $smartGroupClause // Note we do not currently set mySql to handle timezones, so doing this the old-fashioned way $today = date('Ymd'); //check for active, inactive and all relation status - if ($relStatus[2] == 0) { + if (empty($relStatus[2])) { $where[$grouping][] = "( civicrm_relationship.is_active = 1 AND ( civicrm_relationship.end_date IS NULL OR civicrm_relationship.end_date >= {$today} ) AND @@ -5057,6 +5051,28 @@ civicrm_relationship.start_date > {$today} $this->_permissionWhereClause = str_replace(' ( 1 ) ', '(contact_a.is_deleted = 0)', $this->_permissionWhereClause); } + if (isset($this->_tables['civicrm_activity'])) { + $bao = new CRM_Activity_BAO_Activity(); + $clauses = $subclauses = []; + foreach ((array) $bao->addSelectWhereClause() as $field => $vals) { + if ($vals && $field !== 'id') { + $clauses[] = $bao->tableName() . ".$field " . $vals; + } + elseif ($vals) { + $subclauses[] = "$field " . implode(" AND $field ", (array) $vals); + } + } + if ($subclauses) { + $clauses[] = $bao->tableName() . '.`id` IN (SELECT `id` FROM `' . $bao->tableName() . '` WHERE ' . implode(' AND ', $subclauses) . ')'; + } + if (!empty($clauses) && $this->_permissionWhereClause) { + $this->_permissionWhereClause .= ' AND (' . implode(' AND ', $clauses) . ')'; + } + elseif (!empty($clauses)) { + $this->_permissionWhereClause .= '(' . implode(' AND ', $clauses) . ')'; + } + } + // regenerate fromClause since permission might have added tables if ($this->_permissionWhereClause) { //fix for row count in qill (in contribute/membership find) @@ -6419,9 +6435,8 @@ AND displayRelType.is_active = 1 if (empty($fieldSpec['bao'])) { continue; } - $sortedOptions = $fieldSpec['bao']::buildOptions($fieldSpec['name'], NULL, [ - 'orderColumn' => CRM_Utils_Array::value('labelColumn', $pseudoConstantMetadata, 'label'), - ]); + $sortedOptions = $fieldSpec['bao']::buildOptions($fieldSpec['name']); + natcasesort($sortedOptions); $fieldIDsInOrder = implode(',', array_keys($sortedOptions)); // Pretty sure this validation ALSO happens in the order clause & this can't be reached but... // this might give some early warning. diff --git a/civicrm/CRM/Contact/BAO/SearchCustom.php b/civicrm/CRM/Contact/BAO/SearchCustom.php index 548ec894aa5357ddd22f9d5fe7155fc54427a19b..fd18da44305633bc7fc07a224bf767cad02085f9 100644 --- a/civicrm/CRM/Contact/BAO/SearchCustom.php +++ b/civicrm/CRM/Contact/BAO/SearchCustom.php @@ -76,7 +76,7 @@ class CRM_Contact_BAO_SearchCustom { $error = include_once $customSearchFile; if ($error == FALSE) { - CRM_Core_Error::fatal('Custom search file: ' . $customSearchFile . ' does not exist. Please verify your custom search settings in CiviCRM administrative panel.'); + throw new CRM_Core_Exception('Custom search file: ' . $customSearchFile . ' does not exist. Please verify your custom search settings in CiviCRM administrative panel.'); } return [$customSearchID, $customSearchClass, $formValues]; @@ -93,7 +93,7 @@ class CRM_Contact_BAO_SearchCustom { list($customSearchID, $customSearchClass, $formValues) = self::details($csID, $ssID); if (!$customSearchID) { - CRM_Core_Error::fatal('Could not resolve custom search ID'); + throw new CRM_Core_Exception('Could not resolve custom search ID'); } // instantiate the new class diff --git a/civicrm/CRM/Contact/DAO/ACLContactCache.php b/civicrm/CRM/Contact/DAO/ACLContactCache.php index 9e3ae7bc2dd0f80565701d6b174da839ec00034e..b1bf5bdd03645f913e4a6639a149df48d81464e9 100644 --- a/civicrm/CRM/Contact/DAO/ACLContactCache.php +++ b/civicrm/CRM/Contact/DAO/ACLContactCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/ACLContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:dfcbb579c583b1b7ff8654dfaa4d12ed) + * (GenCodeChecksum:b99253b18e66856d4b6d914f2669fa30) */ /** @@ -64,6 +64,13 @@ class CRM_Contact_DAO_ACLContactCache extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('ACLContact Caches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 6b3e32a952b0d6cceeb83f836640bb48eb0406fb..08668b27399710d9e094cf89331f237ad363639e 100644 --- a/civicrm/CRM/Contact/DAO/Contact.php +++ b/civicrm/CRM/Contact/DAO/Contact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d0ae33d9d0b2f672d5e4e722982b3a54) + * (GenCodeChecksum:da59563e28c0229228f7c2baa20caabf) */ /** @@ -21,6 +21,13 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_contact'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-address-book-o'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -386,6 +393,13 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contacts'); + } + /** * Returns foreign keys and entity references. * @@ -1407,6 +1421,9 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'required' => TRUE, 'where' => 'civicrm_contact.is_deleted', 'export' => TRUE, + 'permission' => [ + 'access deleted contacts', + ], 'default' => '0', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', diff --git a/civicrm/CRM/Contact/DAO/ContactType.php b/civicrm/CRM/Contact/DAO/ContactType.php index a84b9859bce4a536a31f0ad444f584f091e0bc3a..0237e0943dea7f0055c0ad7abd1f11af8b83c05d 100644 --- a/civicrm/CRM/Contact/DAO/ContactType.php +++ b/civicrm/CRM/Contact/DAO/ContactType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/ContactType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b9b583a10f6daa3b8135f58c04ce94cc) + * (GenCodeChecksum:34f2ee23181ddce3050484b6e30b0e72) */ /** @@ -92,6 +92,13 @@ class CRM_Contact_DAO_ContactType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contact Types'); + } + /** * Returns foreign keys and entity references. * @@ -133,6 +140,7 @@ class CRM_Contact_DAO_ContactType extends CRM_Core_DAO { 'type' => CRM_Utils_Type::T_STRING, 'title' => ts('Name'), 'description' => ts('Internal name of Contact Type (or Subtype).'), + 'required' => TRUE, 'maxlength' => 64, 'size' => CRM_Utils_Type::BIG, 'where' => 'civicrm_contact_type.name', @@ -212,6 +220,7 @@ class CRM_Contact_DAO_ContactType extends CRM_Core_DAO { 'title' => ts('Contact Type Is Active?'), 'description' => ts('Is this entry active?'), 'where' => 'civicrm_contact_type.is_active', + 'default' => '1', 'table_name' => 'civicrm_contact_type', 'entity' => 'ContactType', 'bao' => 'CRM_Contact_BAO_ContactType', @@ -224,6 +233,7 @@ class CRM_Contact_DAO_ContactType extends CRM_Core_DAO { 'title' => ts('Contact Type is Reserved?'), 'description' => ts('Is this contact type a predefined system type'), 'where' => 'civicrm_contact_type.is_reserved', + 'default' => '0', 'table_name' => 'civicrm_contact_type', 'entity' => 'ContactType', 'bao' => 'CRM_Contact_BAO_ContactType', diff --git a/civicrm/CRM/Contact/DAO/DashboardContact.php b/civicrm/CRM/Contact/DAO/DashboardContact.php index f65bc45c1230a2397bc4d98b16735db6bfcc2531..360c5caf71d43a8fdcc0af811ffd331a825981a6 100644 --- a/civicrm/CRM/Contact/DAO/DashboardContact.php +++ b/civicrm/CRM/Contact/DAO/DashboardContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/DashboardContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:090306cc1144b369709a5dfc3bb44aa1) + * (GenCodeChecksum:c6084fad33e2fed9634eee46cfcfd4ee) */ /** @@ -76,6 +76,13 @@ class CRM_Contact_DAO_DashboardContact extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Dashboard Contacts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/Group.php b/civicrm/CRM/Contact/DAO/Group.php index 8f596b17dc3ee524e985bea05ceff5e4af161e6c..3c051ec4f49442505966446c8f6f54a0f2b66981 100644 --- a/civicrm/CRM/Contact/DAO/Group.php +++ b/civicrm/CRM/Contact/DAO/Group.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Group.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:24ebd11f8542ff4eb8f2ec45adfb86ed) + * (GenCodeChecksum:a8a3812a392b7544441cdbe1f9500f21) */ /** @@ -21,6 +21,13 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_group'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-users'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -174,6 +181,13 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Groups'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/GroupContact.php b/civicrm/CRM/Contact/DAO/GroupContact.php index 006a5d2bae1ef4a08330c59892cbfbfe95be7b5b..0605b3a09f0e941234ac67eebfe0fcd855a9b3a4 100644 --- a/civicrm/CRM/Contact/DAO/GroupContact.php +++ b/civicrm/CRM/Contact/DAO/GroupContact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:eb0a2888632694a9be57b0814109b333) + * (GenCodeChecksum:11947c2ac6a20781c2daa15b0f894983) */ /** @@ -78,6 +78,13 @@ class CRM_Contact_DAO_GroupContact extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Group Contacts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/GroupContactCache.php b/civicrm/CRM/Contact/DAO/GroupContactCache.php index ba162cf32ee85c12c3e8c315c0ea1bc74f47332f..19c2f738cf3c9313df5478a267ac14ab0d1295f0 100644 --- a/civicrm/CRM/Contact/DAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/DAO/GroupContactCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f6b8182b338b47bf0a11c41a4cf1bba1) + * (GenCodeChecksum:78446b0939b21d995dd17476d11030e7) */ /** @@ -57,6 +57,13 @@ class CRM_Contact_DAO_GroupContactCache extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Group Contact Caches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/GroupNesting.php b/civicrm/CRM/Contact/DAO/GroupNesting.php index bc0b5ed4a5b93a6b23f383c6904432dba32d1689..2f6a61b8f5e129fc08e261717ab675196ea2e0ba 100644 --- a/civicrm/CRM/Contact/DAO/GroupNesting.php +++ b/civicrm/CRM/Contact/DAO/GroupNesting.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupNesting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:77e51345092d091805f377afa04be903) + * (GenCodeChecksum:7e5dfd763c2f4b39ff7f3ea962269bae) */ /** @@ -57,6 +57,13 @@ class CRM_Contact_DAO_GroupNesting extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Group Nestings'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/GroupOrganization.php b/civicrm/CRM/Contact/DAO/GroupOrganization.php index 3cb8b3eb26d4e1c81a5138bd1848c0c38ecc0ec3..49f1bd8616e46608fdb84da2acda026adc917107 100644 --- a/civicrm/CRM/Contact/DAO/GroupOrganization.php +++ b/civicrm/CRM/Contact/DAO/GroupOrganization.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/GroupOrganization.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fd9947c8aebcb119bfd5094e177ed567) + * (GenCodeChecksum:59e2d9b6cb5577d3f8a72422fb33f643) */ /** @@ -57,6 +57,13 @@ class CRM_Contact_DAO_GroupOrganization extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Group Organizations'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/Relationship.php b/civicrm/CRM/Contact/DAO/Relationship.php index 7aa3d72b406f44901c295c1f10ff9e3017d48570..5110814fe3c2d0955a7aab7029a79f07662c954c 100644 --- a/civicrm/CRM/Contact/DAO/Relationship.php +++ b/civicrm/CRM/Contact/DAO/Relationship.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Relationship.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b09b053de49c264e26a76973310e31a1) + * (GenCodeChecksum:b1e83f9c102db77881c4b9c730f38337) */ /** @@ -21,6 +21,13 @@ class CRM_Contact_DAO_Relationship extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_relationship'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-handshake-o'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -113,6 +120,13 @@ class CRM_Contact_DAO_Relationship extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Relationships'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/RelationshipType.php b/civicrm/CRM/Contact/DAO/RelationshipType.php index 4454fc411ecf7798d858d374dfeefead22573858..06ec7aff101aac07bcfc13feac8c14e07e5f3943 100644 --- a/civicrm/CRM/Contact/DAO/RelationshipType.php +++ b/civicrm/CRM/Contact/DAO/RelationshipType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/RelationshipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a2e95b1137f27e32b49d323934402f23) + * (GenCodeChecksum:205fa87e1f397fbf810ffbbd74c1853a) */ /** @@ -120,6 +120,13 @@ class CRM_Contact_DAO_RelationshipType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Relationship Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index a263872771a7c94132248c31a571f96ec9d80627..0d3dcbbedd00e0bb963abc455a522b5fab111a8a 100644 --- a/civicrm/CRM/Contact/DAO/SavedSearch.php +++ b/civicrm/CRM/Contact/DAO/SavedSearch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SavedSearch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f9abe204c53fc92230e08dd82f1258f3) + * (GenCodeChecksum:4093fd1cfa684e54d609528d8df160ca) */ /** @@ -78,6 +78,13 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Saved Searches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php index 9812ef74bd97b3e242c77d79d46e879ac5a6259d..d476dd3ebb88c6cc60775b812162d5ec15f662bd 100644 --- a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php +++ b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SubscriptionHistory.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a25ce20d3b6724d4058d350b14bb02fc) + * (GenCodeChecksum:4aa1411720f09f9ad8e2feb2a8d2a833) */ /** @@ -85,6 +85,13 @@ class CRM_Contact_DAO_SubscriptionHistory extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Subscription Histories'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contact/Form/Merge.php b/civicrm/CRM/Contact/Form/Merge.php index ddea89ac896a2477f668634d4084e8af09cb7e92..e81d31c32f26cb0e4e884775b167b4cba621e2d2 100644 --- a/civicrm/CRM/Contact/Form/Merge.php +++ b/civicrm/CRM/Contact/Form/Merge.php @@ -230,8 +230,8 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { // add related table elements foreach ($rowsElementsAndInfo['rel_table_elements'] as $relTableElement) { - $element = $this->addElement($relTableElement[0], $relTableElement[1]); - $element->setChecked(TRUE); + $this->addElement($relTableElement[0], $relTableElement[1]); + $this->_defaults[$relTableElement[1]] = 1; } $this->assign('rel_tables', $rowsElementsAndInfo['rel_tables']); @@ -414,4 +414,14 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { ]); } + /** + * Set the defaults for the form. + * + * @return array + * Array of default values + */ + public function setDefaultValues() { + return $this->_defaults; + } + } diff --git a/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php b/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php index 327bc9004502be2787411fa46fa4ad8af9dc7b5b..74e5aa006ebb9d4f39f12cf71a98c3bf3593161e 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php @@ -225,7 +225,7 @@ AND p.entity_id = e.id if ($dao->fetch() && !$dao->price_set_id ) { - CRM_Core_Error::fatal(ts('There are no events with Price Sets')); + throw new CRM_Core_Exception(ts('There are no events with Price Sets')); } // get all the fields and all the option values associated with it diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php b/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php index 594462f0e1118218a3afe79d970e384cb8fa2cf7..98887e8f2e4cc573b8b3b3c768d4df66afc21714 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php @@ -146,16 +146,22 @@ LEFT JOIN civicrm_email email ON ( email.contact_id = contact_a.id AND * @return string */ public function where($includeContactIDs = FALSE) { - $params = []; - $low = CRM_Utils_Array::value('postal_code_low', $this->_formValues ); $high = CRM_Utils_Array::value('postal_code_high', $this->_formValues ); + $errorMessage = NULL; if ($low == NULL || $high == NULL) { - CRM_Core_Error::statusBounce(ts('Please provide start and end postal codes'), + $errorMessage = ts('Please provide start and end postal codes.'); + } + + if (!is_numeric($low) || !is_numeric($high)) { + $errorMessage = ts('This search only supports numeric postal codes.'); + } + if ($errorMessage) { + CRM_Core_Error::statusBounce($errorMessage, CRM_Utils_System::url('civicrm/contact/search/custom', "reset=1&csid={$this->_formValues['customSearchID']}", FALSE, NULL, FALSE, TRUE diff --git a/civicrm/CRM/Contact/Form/Task.php b/civicrm/CRM/Contact/Form/Task.php index b478fb486799a1a2112338fdef9c504a1cdcac56..7a7d57093f11a28483ad04f6968d2306318f465b 100644 --- a/civicrm/CRM/Contact/Form/Task.php +++ b/civicrm/CRM/Contact/Form/Task.php @@ -86,8 +86,6 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { $form->_contactIds = []; $form->_contactTypes = []; - $useTable = (CRM_Utils_System::getClassName($form->controller->getStateMachine()) == 'CRM_Export_StateMachine_Standalone'); - $isStandAlone = in_array('task', $form->urlPath) || in_array('standalone', $form->urlPath); if ($isStandAlone) { list($form->_task, $title) = CRM_Contact_Task::getTaskAndTitleByClass(get_class($form)); @@ -137,13 +135,6 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { $crmContactTaskTasks = CRM_Contact_Task::taskTitles(); $form->assign('taskName', CRM_Utils_Array::value($form->_task, $crmContactTaskTasks)); - if ($useTable) { - $tempTable = CRM_Utils_SQL_TempTable::build()->setCategory('tskact')->setDurable()->setId($qfKey); - $form->_componentTable = $tempTable->getName(); - $tempTable->drop(); - $tempTable->createWithColumns('contact_id int primary key'); - } - // all contacts or action = save a search if ((CRM_Utils_Array::value('radio_ts', self::$_searchFormValues) == 'ts_all') || ($form->_task == CRM_Contact_Task::SAVE_SEARCH) @@ -151,34 +142,10 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { // since we don't store all contacts in prevnextcache, when user selects "all" use query to retrieve contacts // rather than prevnext cache table for most of the task actions except export where we rebuild query to fetch // final result set - if ($useTable) { - $allCids = Civi::service('prevnext')->getSelection($cacheKey, "getall"); - } - else { - $allCids[$cacheKey] = self::getContactIds($form); - } + $allCids[$cacheKey] = self::getContactIds($form); $form->_contactIds = []; - if ($useTable) { - $count = 0; - $insertString = []; - foreach ($allCids[$cacheKey] as $cid => $ignore) { - $count++; - $insertString[] = " ( {$cid} ) "; - if ($count % 200 == 0) { - $string = implode(',', $insertString); - $sql = "REPLACE INTO {$form->_componentTable} ( contact_id ) VALUES $string"; - CRM_Core_DAO::executeQuery($sql); - $insertString = []; - } - } - if (!empty($insertString)) { - $string = implode(',', $insertString); - $sql = "REPLACE INTO {$form->_componentTable} ( contact_id ) VALUES $string"; - CRM_Core_DAO::executeQuery($sql); - } - } - elseif (empty($form->_contactIds)) { + if (empty($form->_contactIds)) { // filter duplicates here // CRM-7058 // might be better to do this in the query, but that logic is a bit complex @@ -201,13 +168,7 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { // need to perform action on only selected contacts foreach (self::$_searchFormValues as $name => $value) { if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { - $contactID = substr($name, CRM_Core_Form::CB_PREFIX_LEN); - if ($useTable) { - $insertString[] = " ( {$contactID} ) "; - } - else { - $form->_contactIds[] = substr($name, CRM_Core_Form::CB_PREFIX_LEN); - } + $form->_contactIds[] = substr($name, CRM_Core_Form::CB_PREFIX_LEN); } } } @@ -215,12 +176,7 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { // fetching selected contact ids of passed cache key $selectedCids = Civi::service('prevnext')->getSelection($cacheKey); foreach ($selectedCids[$cacheKey] as $selectedCid => $ignore) { - if ($useTable) { - $insertString[] = " ( {$selectedCid} ) "; - } - else { - $form->_contactIds[] = $selectedCid; - } + $form->_contactIds[] = $selectedCid; } } diff --git a/civicrm/CRM/Contact/Form/Task/EmailTrait.php b/civicrm/CRM/Contact/Form/Task/EmailTrait.php index f5fe8739cfb6fc1771a43822cc691f013eabe8da..fb5e6ff51289720245aaca6104a66901b6528473 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailTrait.php +++ b/civicrm/CRM/Contact/Form/Task/EmailTrait.php @@ -213,26 +213,26 @@ trait CRM_Contact_Form_Task_EmailTrait { 'options' => ['limit' => 0], ])['values']; + // The contact task supports passing in email_id in a url. It supports a single email + // and is marked as having been related to CiviHR. + // The array will look like $this->_toEmail = ['email' => 'x', 'contact_id' => 2]) + // If it exists we want to use the specified email which might be different to the primary email + // that we have. + if (!empty($this->_toEmail['contact_id']) && !empty($allContactDetails[$this->_toEmail['contact_id']])) { + $allContactDetails[$this->_toEmail['contact_id']]['email'] = $this->_toEmail['email']; + } + // perform all validations on unique contact Ids foreach ($allContactDetails as $contactId => $value) { if ($value['do_not_email'] || empty($value['email']) || !empty($value['is_deceased']) || $value['on_hold']) { $this->setSuppressedEmail($contactId, $value); } - else { - $email = $value['email']; - - // build array's which are used to setdefaults - if (in_array($contactId, $this->_toContactIds)) { - $this->_toContactDetails[$contactId] = $this->_contactDetails[$contactId] = $value; - // If a particular address has been specified as the default, use that instead of contact's primary email - if (!empty($this->_toEmail) && $this->_toEmail['contact_id'] == $contactId) { - $email = $this->_toEmail['email']; - } - $toArray[] = [ - 'text' => '"' . $value['sort_name'] . '" <' . $email . '>', - 'id' => "$contactId::{$email}", - ]; - } + elseif (in_array($contactId, $this->_toContactIds)) { + $this->_toContactDetails[$contactId] = $this->_contactDetails[$contactId] = $value; + $toArray[] = [ + 'text' => '"' . $value['sort_name'] . '" <' . $value['email'] . '>', + 'id' => "$contactId::{$value['email']}", + ]; } } diff --git a/civicrm/CRM/Contact/Import/ImportJob.php b/civicrm/CRM/Contact/Import/ImportJob.php index 7940288294753483f09debf74bc25282075c5796..b598bd3cd3ca539ab50dbc48c682a42ccd26c031 100644 --- a/civicrm/CRM/Contact/Import/ImportJob.php +++ b/civicrm/CRM/Contact/Import/ImportJob.php @@ -93,7 +93,7 @@ class CRM_Contact_Import_ImportJob { */ public function isComplete($dropIfComplete = TRUE) { if (!$this->_statusFieldName) { - CRM_Core_Error::fatal("Could not get name of the import status field"); + throw new CRM_Core_Exception("Could not get name of the import status field"); } $query = "SELECT * FROM $this->_tableName WHERE $this->_statusFieldName = 'NEW' LIMIT 1"; diff --git a/civicrm/CRM/Contact/Page/AJAX.php b/civicrm/CRM/Contact/Page/AJAX.php index 069aff30d9955b28091114929e1ff14d2f1ed7c1..4b91252858b3dd1877334767b67bf765abef44dd 100644 --- a/civicrm/CRM/Contact/Page/AJAX.php +++ b/civicrm/CRM/Contact/Page/AJAX.php @@ -770,7 +770,7 @@ LIMIT {$offset}, {$rowCount} public static function getSearchOptionsFromRequest() { $searchParams = []; $searchData = $_REQUEST['search'] ?? NULL; - $searchData['value'] = CRM_Utils_Type::escape($searchData['value'], 'String'); + $searchData['value'] = CRM_Utils_Type::escape($searchData['value'] ?? NULL, 'String'); $selectorElements = [ 'is_selected', 'is_selected_input', diff --git a/civicrm/CRM/Contact/Page/DedupeMerge.php b/civicrm/CRM/Contact/Page/DedupeMerge.php index 0282912a5e2b3914fc30c6ad9b42150827feba1b..b4bf18bafa03473ddfd4628be5eca3a12426db26 100644 --- a/civicrm/CRM/Contact/Page/DedupeMerge.php +++ b/civicrm/CRM/Contact/Page/DedupeMerge.php @@ -56,7 +56,7 @@ class CRM_Contact_Page_DedupeMerge extends CRM_Core_Page { $criteria = json_decode($criteria, TRUE); $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, $criteria, TRUE, $limit); - if ($mode == 'aggressive' && !CRM_Core_Permission::check('force merge duplicate contacts')) { + if ($mode === 'aggressive' && !CRM_Core_Permission::check('force merge duplicate contacts')) { CRM_Core_Session::setStatus(ts('You do not have permission to force merge duplicate contact records'), ts('Permission Denied'), 'error'); CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contact/dedupefind', $urlQry)); } @@ -122,6 +122,7 @@ class CRM_Contact_Page_DedupeMerge extends CRM_Core_Page { * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception + * @throws \API_Exception */ public static function callBatchMerge(CRM_Queue_TaskContext $ctx, $rgid, $gid, $mode = 'safe', $batchLimit, $isSelected, $criteria, $searchLimit) { CRM_Dedupe_Merger::batchMerge($rgid, $gid, $mode, $batchLimit, $isSelected, $criteria, TRUE, FALSE, $searchLimit); diff --git a/civicrm/CRM/Contact/Page/View/Summary.php b/civicrm/CRM/Contact/Page/View/Summary.php index 7861eb14918258cbabbc76802b017707f8cc913e..a9f61ee85c27cf6f7cff9fff09da041290844622 100644 --- a/civicrm/CRM/Contact/Page/View/Summary.php +++ b/civicrm/CRM/Contact/Page/View/Summary.php @@ -420,7 +420,7 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { 'count' => CRM_Contact_BAO_Contact::getCountComponent($id, $this->_contactId, $group['table_name']), 'hideCount' => !$group['is_multiple'], 'class' => 'livePage', - 'icon' => 'crm-i fa-gear', + 'icon' => 'crm-i ' . ($group['icon'] ?: 'fa-gear'), ]; $weight += 10; } diff --git a/civicrm/CRM/Contact/Task.php b/civicrm/CRM/Contact/Task.php index 9498e45db2fd61da95c02e8549502eb334cce117..06696a2953056d701bd5f0eafcd512b7de7df6b4 100644 --- a/civicrm/CRM/Contact/Task.php +++ b/civicrm/CRM/Contact/Task.php @@ -48,21 +48,25 @@ class CRM_Contact_Task extends CRM_Core_Task { 'title' => ts('Group - add contacts'), 'class' => 'CRM_Contact_Form_Task_AddToGroup', 'url' => 'civicrm/task/add-to-group', + 'icon' => 'fa-user-plus', ), self::GROUP_REMOVE => array( 'title' => ts('Group - remove contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromGroup', 'url' => 'civicrm/task/remove-from-group', + 'icon' => 'fa-user-plus', ), self::TAG_ADD => array( 'title' => ts('Tag - add to contacts'), 'class' => 'CRM_Contact_Form_Task_AddToTag', 'url' => 'civicrm/task/add-to-tag', + 'icon' => 'fa-tags', ), self::TAG_REMOVE => array( 'title' => ts('Tag - remove from contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromTag', 'url' => 'civicrm/task/remove-from-tag', + 'icon' => 'fa-tag', ), self::TASK_EXPORT => array( 'title' => ts('Export contacts'), @@ -80,12 +84,14 @@ class CRM_Contact_Task extends CRM_Core_Task { 'class' => 'CRM_Contact_Form_Task_Email', 'result' => TRUE, 'url' => 'civicrm/task/send-email', + 'icon' => 'fa-paper-plane-o', ), self::TASK_DELETE => array( 'title' => ts('Delete contacts'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, 'url' => 'civicrm/task/delete-contact', + 'icon' => 'fa-trash', ), self::RECORD_CONTACTS => array( 'title' => ts('Add activity'), @@ -111,6 +117,7 @@ class CRM_Contact_Task extends CRM_Core_Task { 'class' => 'CRM_Contact_Form_Task_Label', 'result' => TRUE, 'url' => 'civicrm/task/make-mailing-label', + 'icon' => 'fa-print', ), self::BATCH_UPDATE => array( 'title' => ts('Update multiple contacts'), @@ -120,22 +127,26 @@ class CRM_Contact_Task extends CRM_Core_Task { ), 'result' => TRUE, 'url' => 'civicrm/task/pick-profile', + 'icon' => 'fa-pencil', ), self::PDF_LETTER => array( 'title' => ts('Print/merge document'), 'class' => 'CRM_Contact_Form_Task_PDF', 'result' => TRUE, 'url' => 'civicrm/task/print-document', + 'icon' => 'fa-file-pdf-o', ), self::EMAIL_UNHOLD => array( 'title' => ts('Email - unhold addresses'), 'class' => 'CRM_Contact_Form_Task_Unhold', 'url' => 'civicrm/task/unhold-email', + 'icon' => 'fa-unlock', ), self::COMMUNICATION_PREFS => array( 'title' => ts('Communication preferences - alter'), 'class' => 'CRM_Contact_Form_Task_AlterPreferences', 'url' => 'civicrm/task/alter-contact-preference', + 'icon' => 'fa-check-square-o', ), self::RESTORE => array( 'title' => ts('Restore contacts from trash'), diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 9d11cb0c9aea73122d175d3cd54061f28f49e1e9..c209e67fcd2d08009d202e0aea31490d66e29636 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -1945,7 +1945,7 @@ LEFT JOIN civicrm_option_value contribution_status ON (civicrm_contribution.cont } if (empty($clauses)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('No Where clauses defined when deleting address'); } $condition = implode(' OR ', $clauses); @@ -2116,7 +2116,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $ids['contributionPage'] = NULL; if (!$baseIPN->validateData($input, $ids, $objects, FALSE)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to validate supplied data'); } $memberships = &$objects['membership']; diff --git a/civicrm/CRM/Contribute/DAO/Contribution.php b/civicrm/CRM/Contribute/DAO/Contribution.php index 9558556a5c8c92b6bc783bc9230df8cd4c62e581..e64cf1675e0bcaa1c132bf5182abc7deae1486f9 100644 --- a/civicrm/CRM/Contribute/DAO/Contribution.php +++ b/civicrm/CRM/Contribute/DAO/Contribution.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Contribution.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3787b0868aafc9587a3ee8c0710be806) + * (GenCodeChecksum:5e4c6a77803e361625cafbd2f6e58bbe) */ /** @@ -21,6 +21,13 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_contribution'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-credit-card'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -241,6 +248,13 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contributions'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/ContributionPage.php b/civicrm/CRM/Contribute/DAO/ContributionPage.php index 3cb36fce77b1e461be294efbcdfa5e1eeb517bde..7970a2907f992564ca7e2f2fa35c7833461eef97 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/DAO/ContributionPage.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionPage.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a25d68d11ca748393bdb78a020360846) + * (GenCodeChecksum:63bc96be1f5552249e75545940c13bed) */ /** @@ -358,6 +358,13 @@ class CRM_Contribute_DAO_ContributionPage extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contribution Pages'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/ContributionProduct.php b/civicrm/CRM/Contribute/DAO/ContributionProduct.php index 6b9359e50240a6797e12b2cd948fa31eb6971092..cebd77a3fbf76ca4e75f4c6ca36266d66cf4e743 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionProduct.php +++ b/civicrm/CRM/Contribute/DAO/ContributionProduct.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8d44308232c80eca6a841ed64c399b75) + * (GenCodeChecksum:dd95e7a994c6dfe314f149b5ba7d48db) */ /** @@ -96,6 +96,13 @@ class CRM_Contribute_DAO_ContributionProduct extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contribution Products'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php index a4f72426a791e0578d688a033f17953c76ffbf69..a3254572ca08522ad7db4093c632556a91cdd683 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0213197dd3271a65f0fffab8d93529ef) + * (GenCodeChecksum:62019becf87dee13b7e9e174eb3c286e) */ /** @@ -235,6 +235,13 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Recurring Contributions'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/ContributionSoft.php b/civicrm/CRM/Contribute/DAO/ContributionSoft.php index 0e56ea03ef7cdfb350ff6f2829842f8ef56a3f81..ba2c9e21c3a88ad175c1f23861e0b40e4c0f0ca6 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionSoft.php +++ b/civicrm/CRM/Contribute/DAO/ContributionSoft.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionSoft.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a3491f823c8325761c39e44896060ef4) + * (GenCodeChecksum:a1c2918874b74f3f9bbbe0464aea1563) */ /** @@ -100,6 +100,13 @@ class CRM_Contribute_DAO_ContributionSoft extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Contribution Softs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/Premium.php b/civicrm/CRM/Contribute/DAO/Premium.php index fbcad9c2701e16229803181f7453a700c5cb1057..a6ef8403508b4dc9b896194012db76b26cef07d2 100644 --- a/civicrm/CRM/Contribute/DAO/Premium.php +++ b/civicrm/CRM/Contribute/DAO/Premium.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Premium.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:bb7c7cf4f7cdf14c536d662480ff5d9c) + * (GenCodeChecksum:df0bfae4e0916c02a621471db14f3151) */ /** @@ -107,6 +107,13 @@ class CRM_Contribute_DAO_Premium extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Premiums'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php index fd27507dde227100aaa0974459c0d4237bbbfd0a..79d9071c30c171892afa85c895249a7b6c2b8133 100644 --- a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php +++ b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/PremiumsProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:06fb2ef25e85c471074cc40467f117a7) + * (GenCodeChecksum:a250114a018b2fd5e9d259f00d18a5c3) */ /** @@ -69,6 +69,13 @@ class CRM_Contribute_DAO_PremiumsProduct extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Premiums Products'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/Product.php b/civicrm/CRM/Contribute/DAO/Product.php index 221d1cbc23a0190f5c2911e546cf1406cd193061..5632c65d4335c7f180744a5fb87cea72869dc1b4 100644 --- a/civicrm/CRM/Contribute/DAO/Product.php +++ b/civicrm/CRM/Contribute/DAO/Product.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Product.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:457bc07cf99a1ae6869ce09fb4d18d6a) + * (GenCodeChecksum:6e0a8b319985de1fe01120f4d91003a8) */ /** @@ -166,6 +166,13 @@ class CRM_Contribute_DAO_Product extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Products'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/DAO/Widget.php b/civicrm/CRM/Contribute/DAO/Widget.php index 855ab3106c3ccbe9bd018aba7437c933044c2e33..116d447ed53148c8dfc7e96ff2b81ff9a0ba16c6 100644 --- a/civicrm/CRM/Contribute/DAO/Widget.php +++ b/civicrm/CRM/Contribute/DAO/Widget.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Widget.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:861756ff16f701adecdc177e253ca208) + * (GenCodeChecksum:b0e7180701d83e1d83d53bf2e43c0c51) */ /** @@ -137,6 +137,13 @@ class CRM_Contribute_DAO_Widget extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Widgets'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php index fd7447efd8d2fd076a377796f9336674433016bd..435c2398139c5005500f97b51c2df4de5616b3e6 100644 --- a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php +++ b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php @@ -361,7 +361,7 @@ WHERE contribution_id = {$id} if (!empty($processor['description'])) { $this->_processors[$id] .= ' : ' . $processor['description']; } - if ($processor['is_recur']) { + if ($this->_paymentProcessors[$id]['object']->supportsRecurring()) { $this->_recurPaymentProcessors[$id] = $this->_processors[$id]; } } @@ -414,7 +414,7 @@ WHERE contribution_id = {$id} //get all status $allStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); if (!($paymentStatusID == array_search('Pending', $allStatus) || $paymentStatusID == array_search('Overdue', $allStatus))) { - CRM_Core_Error::fatal(ts("Pledge payment status should be 'Pending' or 'Overdue'.")); + CRM_Core_Error::statusBounce(ts("Pledge payment status should be 'Pending' or 'Overdue'.")); } //get the pledge values associated with given pledge payment. @@ -537,13 +537,12 @@ WHERE contribution_id = {$id} $this->_params['payment_processor_id'], ($this->_mode == 'test') ); - $this->assign('credit_card_exp_date', CRM_Utils_Date::mysqlToIso(CRM_Utils_Date::format($this->_params['credit_card_exp_date']))); - $this->assign('credit_card_number', CRM_Utils_System::mungeCreditCard($this->_params['credit_card_number'])); - $this->assign('credit_card_type', CRM_Utils_Array::value('credit_card_type', $this->_params)); } $this->_params['ip_address'] = CRM_Utils_System::ipAddress(); - self::formatCreditCardDetails($this->_params); + $valuesForForm = self::formatCreditCardDetails($this->_params); + $this->assignVariables($valuesForForm, ['credit_card_exp_date', 'credit_card_type', 'credit_card_number']); + foreach ($this->submittableMoneyFields as $moneyField) { if (isset($this->_params[$moneyField])) { $this->_params[$moneyField] = CRM_Utils_Rule::cleanMoney($this->_params[$moneyField]); @@ -563,9 +562,13 @@ WHERE contribution_id = {$id} * * @param array $params * - * @return void + * @return array An array of params suitable for assigning to the form/tpl */ public static function formatCreditCardDetails(&$params) { + if (!empty($params['credit_card_exp_date'])) { + $params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($params); + $params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($params); + } if (!empty($params['credit_card_type'])) { $params['card_type_id'] = CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_FinancialTrxn', 'card_type_id', $params['credit_card_type']); } @@ -576,6 +579,11 @@ WHERE contribution_id = {$id} $params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($params); $params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($params); } + + $tplParams['credit_card_exp_date'] = isset($params['credit_card_exp_date']) ? CRM_Utils_Date::mysqlToIso(CRM_Utils_Date::format($params['credit_card_exp_date'])) : NULL; + $tplParams['credit_card_type'] = CRM_Utils_Array::value('credit_card_type', $params); + $tplParams['credit_card_number'] = CRM_Utils_System::mungeCreditCard(CRM_Utils_Array::value('credit_card_number', $params)); + return $tplParams; } /** diff --git a/civicrm/CRM/Contribute/Form/AdditionalInfo.php b/civicrm/CRM/Contribute/Form/AdditionalInfo.php index 75caf72c7b145cb1e8a569de5a606e87e8b7fd79..29403fad6488d37fcf8e45f24d2381c657ca6fc8 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalInfo.php +++ b/civicrm/CRM/Contribute/Form/AdditionalInfo.php @@ -291,7 +291,7 @@ class CRM_Contribute_Form_AdditionalInfo { /** * Send email receipt. * - * @param CRM_Core_Form $form + * @param \CRM_Core_Form $form * instance of Contribution form. * @param array $params * (reference ) an assoc array of name/value pairs. @@ -359,13 +359,8 @@ class CRM_Contribute_Form_AdditionalInfo { $form->_bltID )); - $date = CRM_Utils_Date::format($params['credit_card_exp_date']); - $date = CRM_Utils_Date::mysqlToIso($date); - $form->assign('credit_card_type', $params['credit_card_type'] ?? NULL); - $form->assign('credit_card_exp_date', $date); - $form->assign('credit_card_number', - CRM_Utils_System::mungeCreditCard($params['credit_card_number']) - ); + $valuesForForm = CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($params); + $form->assignVariables($valuesForForm, ['credit_card_exp_date', 'credit_card_type', 'credit_card_number']); } else { //offline contribution diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php index 3cd63518c969a88c854047256504c2600663e740..3d0003796ef17921d23f333df25dc55405ba80d6 100644 --- a/civicrm/CRM/Contribute/Form/CancelSubscription.php +++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php @@ -55,6 +55,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib 'frequency_interval' => $this->getSubscriptionDetails()->frequency_interval, 'frequency_unit' => $this->getSubscriptionDetails()->frequency_unit, 'installments' => $this->getSubscriptionDetails()->installments, + 'selfService' => $this->isSelfService(), ]; if ($this->_crid) { diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index 4d81a49d533688af8234f51e67b9a83fe63d994a..f478e80e708e3530ca2b2fee3962e677c4077719 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -282,10 +282,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->_params['tax_amount'] = $this->get('tax_amount'); $this->_useForMember = $this->get('useForMember'); - if (isset($this->_params['credit_card_exp_date'])) { - $this->_params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($this->_params); - $this->_params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($this->_params); - } + CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($this->_params); $this->_params['currencyID'] = CRM_Core_Config::singleton()->defaultCurrency; @@ -1889,7 +1886,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // contribution amount to be null, so that it will not show // contribution amount same as membership amount. //@todo - merge with section above - if ($this->_membershipBlock['is_separate_payment'] + if (!empty($this->_membershipBlock['is_separate_payment']) && !empty($this->_values['fee'][$priceField->id]) && CRM_Utils_Array::value('name', $this->_values['fee'][$priceField->id]) == 'contribution_amount' && CRM_Utils_Array::value("price_{$priceField->id}", $this->_params) == '-1' diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index b55883cbee07507fc61baea02d5c5dff05052d35..c8e0ccfddc681d49b9395f2a7321b5314c73471f 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -454,7 +454,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu } } if (empty($this->_values['fee']) && empty($this->_ccid)) { - CRM_Core_Error::fatal(ts('This page does not have any price fields configured or you may not have permission for them. Please contact the site administrator for more details.')); + throw new CRM_Core_Exception(ts('This page does not have any price fields configured or you may not have permission for them. Please contact the site administrator for more details.')); } //we have to load confirm contribution button in template @@ -703,7 +703,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu } // CRM-12233 - if ($membershipIsActive && !$self->_membershipBlock['is_required'] + if ($membershipIsActive && empty($self->_membershipBlock['is_required']) && $self->_values['amount_block_is_active'] ) { $membershipFieldId = $contributionFieldId = $errorKey = $otherFieldId = NULL; diff --git a/civicrm/CRM/Contribute/Form/Task/Invoice.php b/civicrm/CRM/Contribute/Form/Task/Invoice.php index 5e9bedcf0794f78cedc441b4014992a92cba3495..d189158cd8a0402c128c2309da5751b33bc0e47c 100644 --- a/civicrm/CRM/Contribute/Form/Task/Invoice.php +++ b/civicrm/CRM/Contribute/Form/Task/Invoice.php @@ -229,7 +229,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { $ids['event'] = $detail['event'] ?? NULL; if (!$invoiceElements['baseIPN']->validateData($input, $ids, $objects, FALSE)) { - CRM_Core_Error::fatal(); + CRM_Core_Error::statusBounce('Supplied data was not able to be validated'); } $contribution = &$objects['contribution']; diff --git a/civicrm/CRM/Contribute/Form/Task/Status.php b/civicrm/CRM/Contribute/Form/Task/Status.php index c8acc1e8ff88e65a559b25f33d5f0a29e5a1e31c..e3c2a6e7daa1b769f2e689ddc4efc3b55755c9dc 100644 --- a/civicrm/CRM/Contribute/Form/Task/Status.php +++ b/civicrm/CRM/Contribute/Form/Task/Status.php @@ -234,7 +234,7 @@ AND co.id IN ( $contribIDs )"; $ids['event'] = $details[$row['contribution_id']]['event'] ?? NULL; if (!$baseIPN->validateData($input, $ids, $objects, FALSE)) { - CRM_Core_Error::fatal(); + CRM_Core_Error::statusBounce('Supplied data was not able to be validated'); } $contribution = &$objects['contribution']; diff --git a/civicrm/CRM/Contribute/Form/UpdateBilling.php b/civicrm/CRM/Contribute/Form/UpdateBilling.php index b7d9e550f121c606709c1f41a4532cbb88150ced..9a1b1a939464cb7748b178ece0161b8acfa56836 100644 --- a/civicrm/CRM/Contribute/Form/UpdateBilling.php +++ b/civicrm/CRM/Contribute/Form/UpdateBilling.php @@ -200,10 +200,11 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution } $processorParams['state_province'] = CRM_Core_PseudoConstant::stateProvince($params["billing_state_province_id-{$this->_bltID}"], FALSE); $processorParams['country'] = CRM_Core_PseudoConstant::country($params["billing_country_id-{$this->_bltID}"], FALSE); - $processorParams['month'] = $processorParams['credit_card_exp_date']['M']; - $processorParams['year'] = $processorParams['credit_card_exp_date']['Y']; + $processorParams['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($processorParams); + $processorParams['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($processorParams); $processorParams['subscriptionId'] = $this->getSubscriptionDetails()->processor_id; $processorParams['amount'] = $this->_subscriptionDetails->amount; + $message = ''; $updateSubscription = $this->_paymentProcessor['object']->updateSubscriptionBillingInfo($message, $processorParams); if (is_a($updateSubscription, 'CRM_Core_Error')) { CRM_Core_Error::displaySessionError($updateSubscription); @@ -333,10 +334,7 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution list($donorDisplayName, $donorEmail) = CRM_Contact_BAO_Contact::getContactDetails($this->_subscriptionDetails->contact_id); $tplParams['contact'] = array('display_name' => $donorDisplayName); - $date = CRM_Utils_Date::format($processorParams['credit_card_exp_date']); - $tplParams['credit_card_exp_date'] = CRM_Utils_Date::mysqlToIso($date); - $tplParams['credit_card_number'] = CRM_Utils_System::mungeCreditCard($processorParams['credit_card_number']); - $tplParams['credit_card_type'] = $processorParams['credit_card_type']; + $tplParams = array_merge($tplParams, CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($processorParams)); $sendTemplateParams = array( 'groupName' => $this->_subscriptionDetails->membership_id ? 'msg_tpl_workflow_membership' : 'msg_tpl_workflow_contribution', diff --git a/civicrm/CRM/Contribute/Import/Parser.php b/civicrm/CRM/Contribute/Import/Parser.php index e36f742fc1b1eb3a0932951a28ce63efd1e3e59c..87637bb6294d58a8bbcf63b63e1b1777741d6622 100644 --- a/civicrm/CRM/Contribute/Import/Parser.php +++ b/civicrm/CRM/Contribute/Import/Parser.php @@ -128,7 +128,7 @@ abstract class CRM_Contribute_Import_Parser extends CRM_Import_Parser { $totalRowCount = NULL ) { if (!is_array($fileName)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine import file'); } $fileName = $fileName['name']; diff --git a/civicrm/CRM/Core/BAO/Country.php b/civicrm/CRM/Core/BAO/Country.php index 10934d932c11c74c22eceda9bbde41268ffc78bb..49413ba891d41640a39a644efa0aad4ef9ba5d08 100644 --- a/civicrm/CRM/Core/BAO/Country.php +++ b/civicrm/CRM/Core/BAO/Country.php @@ -57,7 +57,7 @@ class CRM_Core_BAO_Country extends CRM_Core_DAO_Country { if (!isset(Civi::$statics[__CLASS__]['countryLimit'])) { $countryIsoCodes = CRM_Core_PseudoConstant::countryIsoCode(); $country = []; - $countryLimit = Civi::settings()->get('countryLimit'); + $countryLimit = Civi::settings()->get('countryLimit') ?? []; if (is_array($countryLimit)) { foreach ($countryLimit as $val) { // CRM-12007 diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index 0fcf801bd65d68ba6651ea6918515c7321fe70f8..9278a9755e9aa41cc94999cabe66f83bd4eaab26 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -799,25 +799,12 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { $qf->add('text', $elementName . '_to', ts('To'), $field->attributes); } else { - $choice = []; parse_str($field->attributes, $radioAttributes); $radioAttributes = array_merge($radioAttributes, $customFieldAttributes); - - foreach ($options as $v => $l) { - $choice[] = $qf->createElement('radio', NULL, '', $l, (string) $v, $radioAttributes); - } - $element = $qf->addGroup($choice, $elementName, $label); - $optionEditKey = 'data-option-edit-path'; - if (isset($selectAttributes[$optionEditKey])) { - $element->setAttribute($optionEditKey, $selectAttributes[$optionEditKey]); - } - - if ($useRequired && !$search) { - $qf->addRule($elementName, ts('%1 is a required field.', [1 => $label]), 'required'); - } - else { - $element->setAttribute('allowClear', TRUE); + if ($search || empty($useRequired)) { + $radioAttributes['allowClear'] = TRUE; } + $qf->addRadio($elementName, $label, $options, $radioAttributes, NULL, $useRequired); } break; @@ -1089,6 +1076,20 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { } else { $display = CRM_Utils_Array::value($value, $field['options'], ''); + // For float type (see Number and Money) $value would be decimal like + // 1.00 (because it is stored in db as decimal), while options array + // key would be integer like 1. In this case expression on line above + // would return empty string (default value), despite the fact that + // matching option exists in the array. + // In such cases we could just get intval($value) and fetch matching + // option again, but this would not work if key is float like 5.6. + // So we need to truncate trailing zeros to make it work as expected. + if ($display === '' && strpos($value, '.') !== FALSE) { + // Use round() to truncate trailing zeros, e.g: + // 10.00 -> 10, 10.60 -> 10.6, 10.69 -> 10.69. + $value = (string) round($value, 5); + $display = $field['options'][$value] ?? ''; + } } break; diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index 9c67bee833d59aaf3c1c3588df12cea67fba7429..3a0dac33f1613641fd3c815a2e3e184407924834 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -106,9 +106,10 @@ class CRM_Core_BAO_CustomGroup extends CRM_Core_DAO_CustomGroup { 'help_post', 'is_active', 'is_multiple', + 'icon', ]; - $current_db_version = CRM_Core_DAO::singleValueQuery("SELECT version FROM civicrm_domain WHERE id = " . CRM_Core_Config::domainID()); - $is_public_version = $current_db_version >= '4.7.19' ? 1 : 0; + $current_db_version = CRM_Core_BAO_Domain::version(); + $is_public_version = version_compare($current_db_version, '4.7.19', '>='); if ($is_public_version) { $fields[] = 'is_public'; } @@ -416,8 +417,8 @@ class CRM_Core_BAO_CustomGroup extends CRM_Core_DAO_CustomGroup { 'max_multiple', ], ]; - $current_db_version = CRM_Core_DAO::singleValueQuery("SELECT version FROM civicrm_domain WHERE id = " . CRM_Core_Config::domainID()); - $is_public_version = $current_db_version >= '4.7.19' ? 1 : 0; + $current_db_version = CRM_Core_BAO_Domain::version(); + $is_public_version = version_compare($current_db_version, '4.7.19', '>='); $serialize_version = version_compare($current_db_version, '5.27.alpha1', '>='); if ($is_public_version) { $tableData['custom_group'][] = 'is_public'; @@ -1099,6 +1100,7 @@ ORDER BY civicrm_custom_group.weight, $group['extra'] = ['gid' => $customGroupDAO->id]; $group['table_name'] = $customGroupDAO->table_name; $group['is_multiple'] = $customGroupDAO->is_multiple; + $group['icon'] = $customGroupDAO->icon; $groups[] = $group; } @@ -1362,6 +1364,7 @@ ORDER BY civicrm_custom_group.weight, } } else { + // Values may be "array strings" or actual arrays. Handle both. if (is_array($value) && count($value)) { CRM_Utils_Array::formatArrayKeys($value); $checkedValue = $value; @@ -1384,7 +1387,14 @@ ORDER BY civicrm_custom_group.weight, } else { if (isset($value)) { - $checkedValue = explode(CRM_Core_DAO::VALUE_SEPARATOR, $value); + // Values may be "array strings" or actual arrays. Handle both. + if (is_array($value) && count($value)) { + CRM_Utils_Array::formatArrayKeys($value); + $checkedValue = $value; + } + else { + $checkedValue = explode(CRM_Core_DAO::VALUE_SEPARATOR, substr($value, 1, -1)); + } foreach ($checkedValue as $val) { if ($val) { $defaults[$elementName][$val] = $val; diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index 0a724557b86e4a90eef27b879bf604b0fe3193df..14fe2848f61b8249a6643cfc75a94cc55a6f7c0e 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -47,25 +47,31 @@ class CRM_Core_BAO_CustomValueTable { $set = []; $params = []; $count = 1; - foreach ($fields as $field) { - if (!$sqlOP) { - $entityID = $field['entity_id']; - $hookID = $field['custom_group_id']; - $isMultiple = $field['is_multiple']; - if (array_key_exists('id', $field)) { - $sqlOP = "UPDATE $tableName "; - $where = " WHERE id = %{$count}"; - $params[$count] = [$field['id'], 'Integer']; - $count++; - $hookOP = 'edit'; - } - else { - $sqlOP = "INSERT INTO $tableName "; - $where = NULL; - $hookOP = 'create'; - } - } + $firstField = reset($fields); + $entityID = $firstField['entity_id']; + $hookID = $firstField['custom_group_id']; + $isMultiple = $firstField['is_multiple']; + if (array_key_exists('id', $firstField)) { + $sqlOP = "UPDATE $tableName "; + $where = " WHERE id = %{$count}"; + $params[$count] = [$firstField['id'], 'Integer']; + $count++; + $hookOP = 'edit'; + } + else { + $sqlOP = "INSERT INTO $tableName "; + $where = NULL; + $hookOP = 'create'; + } + + CRM_Utils_Hook::customPre($hookOP, + $hookID, + $entityID, + $fields + ); + + foreach ($fields as $field) { // fix the value before we store it $value = $field['value']; $type = $field['type']; diff --git a/civicrm/CRM/Core/BAO/FinancialTrxn.php b/civicrm/CRM/Core/BAO/FinancialTrxn.php index f3c242da19f318724f959037693f25d16d900094..e4aeae7bd23d41900fdbc47d1dc39bb60af8e00a 100644 --- a/civicrm/CRM/Core/BAO/FinancialTrxn.php +++ b/civicrm/CRM/Core/BAO/FinancialTrxn.php @@ -417,7 +417,7 @@ WHERE ceft.entity_id = %1"; 'financial_account_id' => $financialAccount, 'contact_id' => CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Domain', CRM_Core_Config::domainID(), 'contact_id'), 'created_date' => date('YmdHis'), - 'transaction_date' => date('YmdHis'), + 'transaction_date' => $params['trxnParams']['trxn_date'], 'amount' => $amount, 'description' => 'Fee', 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Financial_BAO_FinancialItem', 'status_id', 'Paid'), diff --git a/civicrm/CRM/Core/CodeGen/Specification.php b/civicrm/CRM/Core/CodeGen/Specification.php index cc0d83854c3000e005ec9bb8c854c74823d95cfb..67d057f09609dbe7dd4c7e9c13ab7e85553256db 100644 --- a/civicrm/CRM/Core/CodeGen/Specification.php +++ b/civicrm/CRM/Core/CodeGen/Specification.php @@ -209,6 +209,8 @@ class CRM_Core_CodeGen_Specification { 'sourceFile' => $sourceFile, 'fileName' => $klass . '.php', 'objectName' => $klass, + 'title' => $tableXML->title ?? self::nameToTitle($klass), + 'icon' => $tableXML->icon ?? NULL, 'labelName' => substr($name, 8), 'className' => $this->classNames[$name], 'bao' => (file_exists($baoPath . $klass . '.php') ? str_replace('DAO', 'BAO', $this->classNames[$name]) : $this->classNames[$name]), @@ -339,7 +341,7 @@ class CRM_Core_CodeGen_Specification { default: $field['phpType'] = $this->value('phpType', $fieldXML, $type); $field['sqlType'] = $type; - if ($type == 'int unsigned') { + if ($type == 'int unsigned' || $type == 'tinyint') { $field['phpType'] = 'int'; $field['crmType'] = 'CRM_Utils_Type::T_INT'; } @@ -742,4 +744,15 @@ class CRM_Core_CodeGen_Specification { return 'CRM_Utils_Type::HUGE'; } + /** + * Converts an entity name to a user friendly string. + * + * @param string $name + * return string + */ + public static function nameToTitle(string $name) { + $name = preg_replace('/([a-z])([A-Z])/', '$1 $2', $name); + return CRM_Utils_String::pluralize($name); + } + } diff --git a/civicrm/CRM/Core/Config/Runtime.php b/civicrm/CRM/Core/Config/Runtime.php index 1fd76d270dc1bf760d9c8a1f4af51569348649ab..7e927af94f5d7d6da5212be6bcb2a6699b9f99e6 100644 --- a/civicrm/CRM/Core/Config/Runtime.php +++ b/civicrm/CRM/Core/Config/Runtime.php @@ -141,14 +141,6 @@ class CRM_Core_Config_Runtime extends CRM_Core_Config_MagicMerge { defined('CIVICRM_DOMAIN_ID') ? CIVICRM_DOMAIN_ID : 1, // e.g. one codebase, multi database parse_url(CIVICRM_DSN, PHP_URL_PATH), - - // e.g. when you load a new version of the codebase, use different caches - // Note: in principle, the version number is just a proxy for a dozen other signals (new versions of file A, B, C). - // Proper caches should reset whenever the underlying signal (file A, B, or C) changes. However, bugs in this - // behavior often go un-detected during dev/test. Including the software-version basically mitigates the problem - // for sysadmin-workflows - so that such bugs should only impact developer-workflows. - \CRM_Utils_System::version(), - // e.g. CMS vs extern vs installer \CRM_Utils_Array::value('SCRIPT_FILENAME', $_SERVER, ''), // e.g. name-based vhosts diff --git a/civicrm/CRM/Core/Controller.php b/civicrm/CRM/Core/Controller.php index 0550fb39f372e3d9a2c14033cb1d030f16e37e1b..4a4254c25505eab19aecbaf5105742fe943f76cc 100644 --- a/civicrm/CRM/Core/Controller.php +++ b/civicrm/CRM/Core/Controller.php @@ -284,11 +284,23 @@ class CRM_Core_Controller extends HTML_QuickForm_Controller { return NULL; } - $key = $_REQUEST['qfKey'] ?? NULL; - if (!$key && $_SERVER['REQUEST_METHOD'] === 'GET') { + // We need a form key. Check _POST first, then _GET. + // @todo Note: we currently have to check $_REQUEST, too, since that + // is currently overwritten by civicrm_api3_contribution_page_validate. + // It's bad form to use $_REQUEST because it's ambiguous; and it's bad form + // to change superglobals anyway. If PR + // https://github.com/civicrm/civicrm-core/pull/17324 + // and/or related get merged, then we should remove the REQUEST reference here. + $key = $_POST['qfKey'] ?? $_GET['qfKey'] ?? $_REQUEST['qfKey'] ?? NULL; + if (!$key && in_array($_SERVER['REQUEST_METHOD'], ['GET', 'HEAD'])) { + // Generate a key if this is an initial request without one. + // We allow HEAD here because it is used by bots to validate URLs, so if + // we issue a 500 server error to them they may think the site is broken. $key = CRM_Core_Key::get($name, $addSequence); } else { + // Other requests that usually change data (POST, but feasibly DELETE, + // PUT, PATCH...) always require a valid key. $key = CRM_Core_Key::validate($key, $name, $addSequence); } @@ -814,7 +826,7 @@ class CRM_Core_Controller extends HTML_QuickForm_Controller { public function invalidKeyCommon() { $msg = ts("We can't load the requested web page. This page requires cookies to be enabled in your browser settings. Please check this setting and enable cookies (if they are not enabled). Then try again. If this error persists, contact the site administrator for assistance.") . '<br /><br />' . ts('Site Administrators: This error may indicate that users are accessing this page using a domain or URL other than the configured Base URL. EXAMPLE: Base URL is http://example.org, but some users are accessing the page via http://www.example.org or a domain alias like http://myotherexample.org.') . '<br /><br />' . ts('Error type: Could not find a valid session key.'); - CRM_Core_Error::fatal($msg); + throw new CRM_Core_Exception($msg); } /** diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index ca7d209272399a722e8dc9575baaf0ba59c56171..11a990b52db855d5bbd5659d5e0feb5b2f916658 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -44,6 +44,14 @@ class CRM_Core_DAO extends DB_DataObject { * @deprecated */ public static $_nullObject = NULL; + + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = NULL; + /** * @var array * @deprecated @@ -111,6 +119,16 @@ class CRM_Core_DAO extends DB_DataObject { $this->__table = $this->getTableName(); } + /** + * Returns localized title of this entity. + * @return string + */ + public static function getEntityTitle() { + $className = static::class; + Civi::log()->warning("$className needs to be regeneraged. Missing getEntityTitle method.", ['civi.tag' => 'deprecated']); + return CRM_Core_DAO_AllCoreTables::getBriefName($className); + } + public function __clone() { if (!empty($this->_DB_resultid)) { $this->resultCopies++; @@ -160,7 +178,7 @@ class CRM_Core_DAO extends DB_DataObject { } CRM_Core_DAO::executeQuery("SET SESSION sql_mode = %1", [1 => [implode(',', $currentModes), 'String']]); } - CRM_Core_DAO::executeQuery('SET NAMES utf8'); + CRM_Core_DAO::executeQuery('SET NAMES utf8mb4'); CRM_Core_DAO::executeQuery('SET @uniqueID = %1', [1 => [CRM_Utils_Request::id(), 'String']]); } @@ -2659,7 +2677,7 @@ SELECT contact_id * * @param string $context * - * @throws Exception + * @throws CRM_Core_Exception * @return array */ public static function buildOptionsContext($context = NULL) { @@ -2673,7 +2691,7 @@ SELECT contact_id ]; // Validation: enforce uniformity of this param if ($context !== NULL && !isset($contexts[$context])) { - throw new Exception("'$context' is not a valid context for buildOptions."); + throw new CRM_Core_Exception("'$context' is not a valid context for buildOptions."); } return $contexts; } diff --git a/civicrm/CRM/Core/DAO/ActionLog.php b/civicrm/CRM/Core/DAO/ActionLog.php index 2abba77620413a0f33a1119d0e99cfed5a3c9eee..b4399596f4a1d998cae1d6918e92ef8d6104bb0b 100644 --- a/civicrm/CRM/Core/DAO/ActionLog.php +++ b/civicrm/CRM/Core/DAO/ActionLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f1be9f226b9ab48f8ca2e2f73e2de839) + * (GenCodeChecksum:1cc48318ce597a6cac7ff0e2a4518ff5) */ /** @@ -104,6 +104,13 @@ class CRM_Core_DAO_ActionLog extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Action Logs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/ActionMapping.php b/civicrm/CRM/Core/DAO/ActionMapping.php index 66e0396abbb88c68fbab44fa467b9a71c9ffc14b..95f2c276ab78d36c4edc13e788298d552c97c0a8 100644 --- a/civicrm/CRM/Core/DAO/ActionMapping.php +++ b/civicrm/CRM/Core/DAO/ActionMapping.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionMapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:91e6d25b9c464b0211c849d8931e82e4) + * (GenCodeChecksum:be879c0936430ca0cebf0c8bf1c3dc7a) */ /** @@ -97,6 +97,13 @@ class CRM_Core_DAO_ActionMapping extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Action Mappings'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/ActionSchedule.php b/civicrm/CRM/Core/DAO/ActionSchedule.php index 2333fc9aa5b0c5e91a70917d1b51cfed583f23e2..6ac11664116c050a4a2f958214c9e5b5354e8ed5 100644 --- a/civicrm/CRM/Core/DAO/ActionSchedule.php +++ b/civicrm/CRM/Core/DAO/ActionSchedule.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionSchedule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ffbed6c177130dc6e737d720bf4e8b8d) + * (GenCodeChecksum:4493f5d18b2b452d4a6b9ee4e15a15bf) */ /** @@ -296,6 +296,13 @@ class CRM_Core_DAO_ActionSchedule extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Action Schedules'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Address.php b/civicrm/CRM/Core/DAO/Address.php index 4262ab091ce7acb7c61e13b0a5aa3c3330cb6592..f74252f6e24e9caebf26140916e0dc9e0ff10064 100644 --- a/civicrm/CRM/Core/DAO/Address.php +++ b/civicrm/CRM/Core/DAO/Address.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Address.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e823ead9dbb5f2a6eb922044e8ddb482) + * (GenCodeChecksum:8dc9868de21595676938b96deb836379) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_address'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-map-marker'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -239,6 +246,13 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Addresses'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/AddressFormat.php b/civicrm/CRM/Core/DAO/AddressFormat.php index b02516e36ab1ecde00075b9f00c8f0d6b03d3706..436733d4bcacb17f1e1b13c73b6b3f83db5298b5 100644 --- a/civicrm/CRM/Core/DAO/AddressFormat.php +++ b/civicrm/CRM/Core/DAO/AddressFormat.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/AddressFormat.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d07eca82ecd6f61042d97ea58bfbca26) + * (GenCodeChecksum:bd005804e8f957b74c4eafacea35792d) */ /** @@ -50,6 +50,13 @@ class CRM_Core_DAO_AddressFormat extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Address Formats'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.php b/civicrm/CRM/Core/DAO/AllCoreTables.php index 9e292fdb5a4f6e9b372d183253527344c46c7a9d..225f5530c236075f3b7a810f55b2533a437de7cb 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.php @@ -298,7 +298,7 @@ class CRM_Core_DAO_AllCoreTables { * * @param string $daoName * Ex: 'Contact'. - * @return string|NULL + * @return CRM_Core_DAO|NULL * Ex: 'CRM_Contact_DAO_Contact'. */ public static function getFullName($daoName) { diff --git a/civicrm/CRM/Core/DAO/Cache.php b/civicrm/CRM/Core/DAO/Cache.php index 7118ea4176158d5a87cc5ea14e8d68936b9ab12b..71704bd66a00669c65dd74454a828a83dbde9708 100644 --- a/civicrm/CRM/Core/DAO/Cache.php +++ b/civicrm/CRM/Core/DAO/Cache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Cache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c2121534d76909379f14db52c753bea6) + * (GenCodeChecksum:695d7ebea0e7103ff58dfbbff111dde6) */ /** @@ -85,6 +85,13 @@ class CRM_Core_DAO_Cache extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Caches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Component.php b/civicrm/CRM/Core/DAO/Component.php index e30f95d7a1c48eea835f19e9d6429ce52e47a833..bcc2c8008a6ddfafc839d2e52c48177d77011828 100644 --- a/civicrm/CRM/Core/DAO/Component.php +++ b/civicrm/CRM/Core/DAO/Component.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Component.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:27df683af171122479e80f730e9b8065) + * (GenCodeChecksum:1f7be99fb2d2adfebdf3faa2013666f4) */ /** @@ -57,6 +57,13 @@ class CRM_Core_DAO_Component extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Components'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Country.php b/civicrm/CRM/Core/DAO/Country.php index d3204d7195ede134dd180277ed401bc14b51bf30..eb77528b78f5d277e2543ec99e58edd05131dc5a 100644 --- a/civicrm/CRM/Core/DAO/Country.php +++ b/civicrm/CRM/Core/DAO/Country.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Country.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:469d1a473f73094566f3dd5b7be0491f) + * (GenCodeChecksum:d40139ce11551ce445103a7fe9d3d46e) */ /** @@ -99,6 +99,13 @@ class CRM_Core_DAO_Country extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Countries'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/County.php b/civicrm/CRM/Core/DAO/County.php index 5596fc1c21acc8d9eb2b00ba0cfa3b78e47879d0..38167c8050444a8dcba91f04f60de3fd31dcbf62 100644 --- a/civicrm/CRM/Core/DAO/County.php +++ b/civicrm/CRM/Core/DAO/County.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/County.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1e3c7165cdccaa870907b64fce25f5db) + * (GenCodeChecksum:095ad13ad08bd1d3c12be5094239df32) */ /** @@ -64,6 +64,13 @@ class CRM_Core_DAO_County extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Counties'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/CustomField.php b/civicrm/CRM/Core/DAO/CustomField.php index da381666b51f1bf945577b59d48fbb981ee833ec..624a00f48470c64c3affa090374c394064589bef 100644 --- a/civicrm/CRM/Core/DAO/CustomField.php +++ b/civicrm/CRM/Core/DAO/CustomField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a0c5b79659df1495e8de486a9de4cad3) + * (GenCodeChecksum:7bdf73d78bf9965895218895184e40a9) */ /** @@ -253,6 +253,13 @@ class CRM_Core_DAO_CustomField extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Custom Fields'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index 25996383867952a7620a6148f79c983b7c0065ce..8d38cd71d53e5c1fc21c6a095f6002a93b1b8688 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1cc0f35ecb57e16c979ad6d991ca811d) + * (GenCodeChecksum:4f58c488f8213dab928db357bc88f478) */ /** @@ -175,6 +175,13 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { */ public $is_public; + /** + * crm-i icon class + * + * @var string + */ + public $icon; + /** * Class constructor. */ @@ -183,6 +190,13 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Custom Groups'); + } + /** * Returns foreign keys and entity references. * @@ -507,6 +521,21 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { 'localizable' => 0, 'add' => '4.7', ], + 'icon' => [ + 'name' => 'icon', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Icon'), + 'description' => ts('crm-i icon class'), + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_custom_group.icon', + 'default' => 'NULL', + 'table_name' => 'civicrm_custom_group', + 'entity' => 'CustomGroup', + 'bao' => 'CRM_Core_BAO_CustomGroup', + 'localizable' => 0, + 'add' => '5.28', + ], ]; CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); } diff --git a/civicrm/CRM/Core/DAO/Dashboard.php b/civicrm/CRM/Core/DAO/Dashboard.php index d94edc97f38a5644aa3d37e5805b0d96e18f2ab9..a54895fe9e1d0cd18ebe5f8a963a4c4a7f2e4f9a 100644 --- a/civicrm/CRM/Core/DAO/Dashboard.php +++ b/civicrm/CRM/Core/DAO/Dashboard.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Dashboard.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:09934d6808ea207d4dd2aeaedb1b1d19) + * (GenCodeChecksum:8cc83b4a4fa0fe28868e33887824c4e5) */ /** @@ -111,6 +111,13 @@ class CRM_Core_DAO_Dashboard extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Dashboards'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Discount.php b/civicrm/CRM/Core/DAO/Discount.php index cac8c39915b4931d1fa081177629df4b7b60e2fd..914c2d9147a952411ef52a63f78f4e8f60f12ca3 100644 --- a/civicrm/CRM/Core/DAO/Discount.php +++ b/civicrm/CRM/Core/DAO/Discount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Discount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c1674bdbac94e2ca45df691ad367c32d) + * (GenCodeChecksum:b240911ddcf71cc294fe02614887711c) */ /** @@ -78,6 +78,13 @@ class CRM_Core_DAO_Discount extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Discounts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Domain.php b/civicrm/CRM/Core/DAO/Domain.php index fed940840f31724b95612350996efc519898acff..b90d6978127c7111092ea252cff45938d2e87aeb 100644 --- a/civicrm/CRM/Core/DAO/Domain.php +++ b/civicrm/CRM/Core/DAO/Domain.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Domain.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:08e19bcadbe6c2de21e9303c0ffeeafc) + * (GenCodeChecksum:33e01928bc64aa36fb39bbbeea1579dc) */ /** @@ -85,6 +85,13 @@ class CRM_Core_DAO_Domain extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Domains'); + } + /** * Returns foreign keys and entity references. * @@ -192,6 +199,7 @@ class CRM_Core_DAO_Domain extends CRM_Core_DAO { 'entity' => 'Domain', 'bao' => 'CRM_Core_BAO_Domain', 'localizable' => 0, + 'serialize' => self::SERIALIZE_SEPARATOR_TRIMMED, 'add' => '2.1', ], 'locale_custom_strings' => [ diff --git a/civicrm/CRM/Core/DAO/Email.php b/civicrm/CRM/Core/DAO/Email.php index 673bc2a1e72c6e252f69cd67fc14b7b8c96a84e2..92ff31e6ddb268efea8c12e4362a9dab0ccf3e79 100644 --- a/civicrm/CRM/Core/DAO/Email.php +++ b/civicrm/CRM/Core/DAO/Email.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Email.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5dee79c90768ec9dfe94f80637b25438) + * (GenCodeChecksum:6e34e9759f2a50eb22dea1fceb15090c) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Email extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_email'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-envelope-o'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -120,6 +127,13 @@ class CRM_Core_DAO_Email extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Emails'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/EntityFile.php b/civicrm/CRM/Core/DAO/EntityFile.php index 67016c8e2d2ab6fc7b37f74221b44a992e6de6fb..efef635fb806f837cc8610bc0970818dfaf63b9f 100644 --- a/civicrm/CRM/Core/DAO/EntityFile.php +++ b/civicrm/CRM/Core/DAO/EntityFile.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/EntityFile.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5b13b8bff09fbf73d26e01b25e02da6a) + * (GenCodeChecksum:b9ac4293489f424584b9983d1304987f) */ /** @@ -64,6 +64,13 @@ class CRM_Core_DAO_EntityFile extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Files'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/EntityTag.php b/civicrm/CRM/Core/DAO/EntityTag.php index 6aeda133a171c762f58b1373e75d6125a225d582..7ef0feff7ecc089d35c53cbf9d75f74eb9a0af08 100644 --- a/civicrm/CRM/Core/DAO/EntityTag.php +++ b/civicrm/CRM/Core/DAO/EntityTag.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/EntityTag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:575813b3b70a11190656e518e56f18a0) + * (GenCodeChecksum:3f4e098850d5540fb6ddd3e04d0084fe) */ /** @@ -64,6 +64,13 @@ class CRM_Core_DAO_EntityTag extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Tags'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Extension.php b/civicrm/CRM/Core/DAO/Extension.php index 7afc8430e71e89b77dc4e74d47ac4f95a2984f4e..3a58bb43c856096780b8a1ccb02758ba7cb66c4d 100644 --- a/civicrm/CRM/Core/DAO/Extension.php +++ b/civicrm/CRM/Core/DAO/Extension.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Extension.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4e6b6bfb7bbf462ebd361f5e7c62ac1a) + * (GenCodeChecksum:84798b0aba44e90cbdde1d65736c616d) */ /** @@ -90,6 +90,13 @@ class CRM_Core_DAO_Extension extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Extensions'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/File.php b/civicrm/CRM/Core/DAO/File.php index 0f32e7fd71db923ef9ac83610b048a59e865ac26..51b0b79200ed21385b3bf9b077ad284b97824b07 100644 --- a/civicrm/CRM/Core/DAO/File.php +++ b/civicrm/CRM/Core/DAO/File.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/File.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1bc05fe2402818a6290e68a36fe168fe) + * (GenCodeChecksum:5c8f93d416373dd32add73f0bbaa59cc) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_File extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Files'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/IM.php b/civicrm/CRM/Core/DAO/IM.php index 982f1beb8ae497bb69faf7e9b8c094cac1f5e5d6..bee4ce002290ddfc3847c006e9d9b9405b5d31e9 100644 --- a/civicrm/CRM/Core/DAO/IM.php +++ b/civicrm/CRM/Core/DAO/IM.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/IM.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f73279b90d715505d3139c09ce5ceafc) + * (GenCodeChecksum:a01a1aec350383201dbc1c3f59e9b709) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_IM extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_im'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-comments-o'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -85,6 +92,13 @@ class CRM_Core_DAO_IM extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Instant Messaging'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Job.php b/civicrm/CRM/Core/DAO/Job.php index a241af3986f7336cc11ed2b613c7ce203f427930..39d72b975480240ef3285f45663ef4f1a1cfb68b 100644 --- a/civicrm/CRM/Core/DAO/Job.php +++ b/civicrm/CRM/Core/DAO/Job.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Job.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5cfbbbeeb4e0d0b23d6c82abe23aded7) + * (GenCodeChecksum:8f64b00207fd2c2f98c378c01e29b911) */ /** @@ -113,6 +113,13 @@ class CRM_Core_DAO_Job extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Jobs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/JobLog.php b/civicrm/CRM/Core/DAO/JobLog.php index 1e3c4c7a1b5d8323763a878dea2a3bcea6a98f3c..59e75d9fabe4f1846915baa6d2f14cca6586450a 100644 --- a/civicrm/CRM/Core/DAO/JobLog.php +++ b/civicrm/CRM/Core/DAO/JobLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/JobLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f527883b8a0ffc96f31ac84515df66cc) + * (GenCodeChecksum:d5266d899de027b3411970632fd2d6ef) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_JobLog extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Job Logs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/LocBlock.php b/civicrm/CRM/Core/DAO/LocBlock.php index c5348a404b85d7bbedd65c9a792f6f3b28fc198c..fcac92b27c5e360f8d6d8a6ec0cae89b8edf34d9 100644 --- a/civicrm/CRM/Core/DAO/LocBlock.php +++ b/civicrm/CRM/Core/DAO/LocBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/LocBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:47f6b976990c728b035f999587e0851d) + * (GenCodeChecksum:fd6b47fdf91519058cc607ab736a8934) */ /** @@ -83,6 +83,13 @@ class CRM_Core_DAO_LocBlock extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Loc Blocks'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/LocationType.php b/civicrm/CRM/Core/DAO/LocationType.php index 7b370b0e5415035c9e10dad9197d48ea92014de5..b75a338c7d0cee15cfa49cd30be666cee24a9f2e 100644 --- a/civicrm/CRM/Core/DAO/LocationType.php +++ b/civicrm/CRM/Core/DAO/LocationType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/LocationType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:45661319893bf00134a39b130227890e) + * (GenCodeChecksum:06904ebbc78a929b34c17ba1bb580350) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_LocationType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Location Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Log.php b/civicrm/CRM/Core/DAO/Log.php index 50c5cefad036032e27f40179604b632263064cd6..c9541016bfd376f55a0241d859a21306f47944b9 100644 --- a/civicrm/CRM/Core/DAO/Log.php +++ b/civicrm/CRM/Core/DAO/Log.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Log.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7ff7a2d8da7e53b10ec91a7b8e8d1110) + * (GenCodeChecksum:a102ecbdf345a1df748ea11fdd997b9e) */ /** @@ -78,6 +78,13 @@ class CRM_Core_DAO_Log extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Logs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/MailSettings.php b/civicrm/CRM/Core/DAO/MailSettings.php index 0fa33164aac8fbd56789d478d4cd43708366a36a..343c7e6bfdbca6abd97c818fb7bae4c885d27567 100644 --- a/civicrm/CRM/Core/DAO/MailSettings.php +++ b/civicrm/CRM/Core/DAO/MailSettings.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MailSettings.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e70d05846b61d214ea9f60d28ab0ea5f) + * (GenCodeChecksum:455750fee6f1acbe50aeb19387f12158) */ /** @@ -141,6 +141,13 @@ class CRM_Core_DAO_MailSettings extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mail Settingses'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Managed.php b/civicrm/CRM/Core/DAO/Managed.php index 7efa138bdb2c4fbfb184e99670f00a5338dddb23..4d4cbafdfdcb25249ca14b50d1e86195d8a4863f 100644 --- a/civicrm/CRM/Core/DAO/Managed.php +++ b/civicrm/CRM/Core/DAO/Managed.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Managed.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c8c7af16287be72637859c156275c375) + * (GenCodeChecksum:939c0ed6422323450f5b9b00f8da85ad) */ /** @@ -78,6 +78,13 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Manageds'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Mapping.php b/civicrm/CRM/Core/DAO/Mapping.php index c363c795395a4e613da88d862e02a51ca9585c15..5b7121f90fc0714d4f9b5285c434fb1904eae377 100644 --- a/civicrm/CRM/Core/DAO/Mapping.php +++ b/civicrm/CRM/Core/DAO/Mapping.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Mapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4c33c79135f1613facc7f06300b0a47c) + * (GenCodeChecksum:ca067ae4e0d6b7c01e9c24da7cff585a) */ /** @@ -64,6 +64,13 @@ class CRM_Core_DAO_Mapping extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mappings'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/MappingField.php b/civicrm/CRM/Core/DAO/MappingField.php index e4f9fc7626d3a59d7c3e183f4ea2d89e67441a69..c8e0f48dda9bd42137d18c47cb54affab50d3746 100644 --- a/civicrm/CRM/Core/DAO/MappingField.php +++ b/civicrm/CRM/Core/DAO/MappingField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MappingField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d65d5ace6f88f08961f12c5398d815d2) + * (GenCodeChecksum:c29cb464b46084c28cedf37c3757ffd1) */ /** @@ -133,6 +133,13 @@ class CRM_Core_DAO_MappingField extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mapping Fields'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Menu.php b/civicrm/CRM/Core/DAO/Menu.php index bca8a001b1e1bfe227c70c90fe954d90c67abbae..a0f1b6c6ea3a248b11c64602ffa2822706250d50 100644 --- a/civicrm/CRM/Core/DAO/Menu.php +++ b/civicrm/CRM/Core/DAO/Menu.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Menu.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:331d6cd230e6c19fa0626b02a9aed193) + * (GenCodeChecksum:8eaee41a6e8192bd26fab7f4ef443c0c) */ /** @@ -186,6 +186,13 @@ class CRM_Core_DAO_Menu extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Menus'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/MessageTemplate.php b/civicrm/CRM/Core/DAO/MessageTemplate.php index f16d97cf54819d135f9ab22b36dd7452b5277ce7..54b4664182cae7e39261edd4c9f60391c6021714 100644 --- a/civicrm/CRM/Core/DAO/MessageTemplate.php +++ b/civicrm/CRM/Core/DAO/MessageTemplate.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MessageTemplate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fdf0d578ddbe75b30cd254f351307115) + * (GenCodeChecksum:542e52d6f757c9e8adfa2a5ed07b6475) */ /** @@ -116,6 +116,13 @@ class CRM_Core_DAO_MessageTemplate extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Message Templates'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Navigation.php b/civicrm/CRM/Core/DAO/Navigation.php index ab32f5584372753987a063b02aa4274f7230c594..81125e4f02b581b42dc2a786393219ec0dac62a0 100644 --- a/civicrm/CRM/Core/DAO/Navigation.php +++ b/civicrm/CRM/Core/DAO/Navigation.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Navigation.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:02dc21d22f489dbe9bdc3e21d8c80276) + * (GenCodeChecksum:39aa4b4d2c380d3a08c4931c3e497006) */ /** @@ -97,9 +97,9 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { public $is_active; /** - * If separator needs to be added after this menu item + * Place a separator either before or after this menu item. * - * @var bool + * @var int */ public $has_separator; @@ -118,6 +118,13 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Navigations'); + } + /** * Returns foreign keys and entity references. * @@ -292,14 +299,18 @@ class CRM_Core_DAO_Navigation extends CRM_Core_DAO { ], 'has_separator' => [ 'name' => 'has_separator', - 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Use separator'), - 'description' => ts('If separator needs to be added after this menu item'), + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Separator'), + 'description' => ts('Place a separator either before or after this menu item.'), 'where' => 'civicrm_navigation.has_separator', + 'default' => '0', 'table_name' => 'civicrm_navigation', 'entity' => 'Navigation', 'bao' => 'CRM_Core_BAO_Navigation', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_SelectValues::navigationMenuSeparator', + ], 'add' => '3.0', ], 'weight' => [ diff --git a/civicrm/CRM/Core/DAO/Note.php b/civicrm/CRM/Core/DAO/Note.php index 6fce085aaa8bf4916190ef30e9e1a64d2822498d..c5cd339ea7d18af8b695cabff4e86b4714e0f9ad 100644 --- a/civicrm/CRM/Core/DAO/Note.php +++ b/civicrm/CRM/Core/DAO/Note.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Note.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e2246af5e5b340e108d55b4e0875d27f) + * (GenCodeChecksum:0e43e07bfbf7de4e7fa48f4d24a923fd) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Note extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_note'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-sticky-note'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -92,6 +99,13 @@ class CRM_Core_DAO_Note extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Notes'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/OpenID.php b/civicrm/CRM/Core/DAO/OpenID.php index 98be8b7f436694e1a84bb50a114d3a90d5c97bab..02db0f94b5ff458bbcf238fb2e1d09eca6f31bde 100644 --- a/civicrm/CRM/Core/DAO/OpenID.php +++ b/civicrm/CRM/Core/DAO/OpenID.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OpenID.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:590cf1e26396320ee98708975016940b) + * (GenCodeChecksum:ed6e574083475c9caf6e8f5028510263) */ /** @@ -78,6 +78,13 @@ class CRM_Core_DAO_OpenID extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Open IDs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/OptionGroup.php b/civicrm/CRM/Core/DAO/OptionGroup.php index dd49457669c0ef88092ebfcd6e6caf48c57348a5..28611f23acf74604942ef6c42037769aa884d2b0 100644 --- a/civicrm/CRM/Core/DAO/OptionGroup.php +++ b/civicrm/CRM/Core/DAO/OptionGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OptionGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b9e95c6c280f9beaaaa03a30e3c84f44) + * (GenCodeChecksum:8a0474f902f423a6055399c438cd406c) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_OptionGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Option Groups'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/OptionValue.php b/civicrm/CRM/Core/DAO/OptionValue.php index ff0aa1d1a34f73b51c06b41ec8eedeb8421d012f..ed5bf88c5f753eb682277f146a1b9254959eb082 100644 --- a/civicrm/CRM/Core/DAO/OptionValue.php +++ b/civicrm/CRM/Core/DAO/OptionValue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OptionValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:24ed1eae5afe1ade95a7819a2579ff7d) + * (GenCodeChecksum:370198cee250edd2f29743a5b5667e9a) */ /** @@ -160,6 +160,13 @@ class CRM_Core_DAO_OptionValue extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Option Values'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Phone.php b/civicrm/CRM/Core/DAO/Phone.php index be789fd3bc9c66a2c6d4d175fc5fbd299c967305..444c0b3a53e71a52fcde62618700bd558f835063 100644 --- a/civicrm/CRM/Core/DAO/Phone.php +++ b/civicrm/CRM/Core/DAO/Phone.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Phone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:39b07920024b0e7b3c9d36db65adcd53) + * (GenCodeChecksum:3c1f1743128af72b009c6cf4effc1da2) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Phone extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_phone'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-phone'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -106,6 +113,13 @@ class CRM_Core_DAO_Phone extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Phones'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/PreferencesDate.php b/civicrm/CRM/Core/DAO/PreferencesDate.php index bdd327ef2c896a5495cb6960953dfb0cec28c97f..4f50074007651af047622224456d710d13bd0638 100644 --- a/civicrm/CRM/Core/DAO/PreferencesDate.php +++ b/civicrm/CRM/Core/DAO/PreferencesDate.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PreferencesDate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:50eb5ce96ed193252647cb79e73b0aa3) + * (GenCodeChecksum:e950a7985ee12a8b5ec6e926e8a49b20) */ /** @@ -83,6 +83,13 @@ class CRM_Core_DAO_PreferencesDate extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Preferences Dates'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/PrevNextCache.php b/civicrm/CRM/Core/DAO/PrevNextCache.php index e88aaaa45a61bfd42cb9c9bafb7799fc1f48edf4..cb581127894658cce9f0bbbf3c4a4540f31d47e1 100644 --- a/civicrm/CRM/Core/DAO/PrevNextCache.php +++ b/civicrm/CRM/Core/DAO/PrevNextCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PrevNextCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c44e8fa5c83e9f3788e476843d8e1167) + * (GenCodeChecksum:3e1ec2353f61b542cca9c3c9efc73e80) */ /** @@ -81,6 +81,13 @@ class CRM_Core_DAO_PrevNextCache extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Prev Next Caches'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/PrintLabel.php b/civicrm/CRM/Core/DAO/PrintLabel.php index ac29cf299d24b4ee34e335655c217fc5dda854d0..c0d4463fe2120be7f58220c191a77bb4456ebcfa 100644 --- a/civicrm/CRM/Core/DAO/PrintLabel.php +++ b/civicrm/CRM/Core/DAO/PrintLabel.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/PrintLabel.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0944404f5fcaff1c511b5e70629903e5) + * (GenCodeChecksum:b98543c0a9d27b4f6aef0ab432bb37e2) */ /** @@ -111,6 +111,13 @@ class CRM_Core_DAO_PrintLabel extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Print Labels'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/RecurringEntity.php b/civicrm/CRM/Core/DAO/RecurringEntity.php index c9023b3a3a87bb61e4896c78f18ddf4421e3ce6e..e6463e239dfcdd4a6f16d0d37bd5b473e4f3646d 100644 --- a/civicrm/CRM/Core/DAO/RecurringEntity.php +++ b/civicrm/CRM/Core/DAO/RecurringEntity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/RecurringEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fd18d33aacf63c913fcef79e763f7d41) + * (GenCodeChecksum:4d0ee948935c36ddf9c0a04ed30ec44f) */ /** @@ -69,6 +69,13 @@ class CRM_Core_DAO_RecurringEntity extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Recurring Entities'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Setting.php b/civicrm/CRM/Core/DAO/Setting.php index fffdc59011c1f529d45db13b9ec4b91f7bda0178..70ac634cfd6feb7a1a99485d2ecc1d7da960f135 100644 --- a/civicrm/CRM/Core/DAO/Setting.php +++ b/civicrm/CRM/Core/DAO/Setting.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Setting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:90140ef2a7d1bedb4d03ed4bf81d0fdc) + * (GenCodeChecksum:196dea902e132f8ba6ffb8b108ee1996) */ /** @@ -97,6 +97,13 @@ class CRM_Core_DAO_Setting extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Settings'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/StateProvince.php b/civicrm/CRM/Core/DAO/StateProvince.php index adadf4f3bf6fe3c3e3807f50bf955231e5198159..eed42f3859b0cd9cd472cec3e8a9ac7bdf708e0f 100644 --- a/civicrm/CRM/Core/DAO/StateProvince.php +++ b/civicrm/CRM/Core/DAO/StateProvince.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/StateProvince.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:190e7f5927d8d8c42d4368cfb63f9519) + * (GenCodeChecksum:22bfd6264c17c80a3638b9860cb97767) */ /** @@ -64,6 +64,13 @@ class CRM_Core_DAO_StateProvince extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('State Provinces'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/StatusPreference.php b/civicrm/CRM/Core/DAO/StatusPreference.php index 2f1797f6f447a09a1b512d0636150876fb011fea..471513595b1f13cfc54893fff5d797a16a822f7e 100644 --- a/civicrm/CRM/Core/DAO/StatusPreference.php +++ b/civicrm/CRM/Core/DAO/StatusPreference.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/StatusPreference.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0d3fd2d0e99990969c2057cb9370fb49) + * (GenCodeChecksum:48ca8492c6febf737281831d72147a38) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_StatusPreference extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Status Preferences'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/SystemLog.php b/civicrm/CRM/Core/DAO/SystemLog.php index 7c250012703093c91d073382d3a7721f50887c5b..22d57c06a4556e31fd0f84587922e2523c5354bf 100644 --- a/civicrm/CRM/Core/DAO/SystemLog.php +++ b/civicrm/CRM/Core/DAO/SystemLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/SystemLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:98f05402f423c989a4a88b3c2fe88587) + * (GenCodeChecksum:c90dd839d7756d95a85e38cadbcb40c9) */ /** @@ -85,6 +85,13 @@ class CRM_Core_DAO_SystemLog extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('System Logs'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/DAO/Tag.php b/civicrm/CRM/Core/DAO/Tag.php index 211a01ff90d37efccc0c8771897a28cd1bddead1..09e7ec787d8664acda5bdb832a5b603ce081f233 100644 --- a/civicrm/CRM/Core/DAO/Tag.php +++ b/civicrm/CRM/Core/DAO/Tag.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Tag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ae90b4442c990e4b733019e746552883) + * (GenCodeChecksum:71590516eaae029ef71f6f4b3d7a800d) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Tag extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_tag'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-tag'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -107,6 +114,13 @@ class CRM_Core_DAO_Tag extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Tags'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Timezone.php b/civicrm/CRM/Core/DAO/Timezone.php index 455a65e00d21a8ddbbe84453abc4938c3a785aed..d2cd010c881b045fbc7c6d158c969306bf535998 100644 --- a/civicrm/CRM/Core/DAO/Timezone.php +++ b/civicrm/CRM/Core/DAO/Timezone.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Timezone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:82bfb9769480994e7f53f7c541991255) + * (GenCodeChecksum:fc76675346aa5a97d5ce798b9968ee58) */ /** @@ -76,6 +76,13 @@ class CRM_Core_DAO_Timezone extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Timezones'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/UFField.php b/civicrm/CRM/Core/DAO/UFField.php index f39edade9567da0ae5e87df120ab8c56a6dbd7ba..1d5821d996fd3ac0b2c676d4fc288448d53b7e97 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:19a472b9a17638d6a99e246d0bc1320b) + * (GenCodeChecksum:a77a2bfe4b288e20b6929fd3a7532850) */ /** @@ -169,6 +169,13 @@ class CRM_Core_DAO_UFField extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('UFFields'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/UFGroup.php b/civicrm/CRM/Core/DAO/UFGroup.php index 0dcd9ce8aa50adfd51330b278484084799df3def..500525099792d471308d0858245cca8c6731cb83 100644 --- a/civicrm/CRM/Core/DAO/UFGroup.php +++ b/civicrm/CRM/Core/DAO/UFGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2c0010333dd51aa45bc853630fcddaa6) + * (GenCodeChecksum:acf9d6ef6307d473c8a32775aa8e8e66) */ /** @@ -223,6 +223,13 @@ class CRM_Core_DAO_UFGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('UFGroups'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/UFJoin.php b/civicrm/CRM/Core/DAO/UFJoin.php index 40436e3a0b788a55ccead80c140c5ba7a92b1fe0..0477c90288ecb2f186a1053c0408bace27f49000 100644 --- a/civicrm/CRM/Core/DAO/UFJoin.php +++ b/civicrm/CRM/Core/DAO/UFJoin.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFJoin.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2c6085ccffdaef5d2b63f746f3582fef) + * (GenCodeChecksum:70a227711539c0b5fdea5349d18e6b7f) */ /** @@ -92,6 +92,13 @@ class CRM_Core_DAO_UFJoin extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('UFJoins'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/UFMatch.php b/civicrm/CRM/Core/DAO/UFMatch.php index 5d3b151aa9748f7f74d09f1ca1ea6430960ebe0d..6712ed2c008dab6e55a1a9634e53e0cea069aa08 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:19056381575dfbe0a0c61a8faf9a4884) + * (GenCodeChecksum:4d249265c27fb6dbe50e0589ddfed7d2) */ /** @@ -78,6 +78,13 @@ class CRM_Core_DAO_UFMatch extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('UFMatches'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Website.php b/civicrm/CRM/Core/DAO/Website.php index 5fbb5e84ce98420ccf490932d2e909cc59c633d9..678e898f992c8e209e8704b38aa2296281e4c8c9 100644 --- a/civicrm/CRM/Core/DAO/Website.php +++ b/civicrm/CRM/Core/DAO/Website.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Website.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:867013ce89e667806aea8499c9ed0a1a) + * (GenCodeChecksum:2b048fb746a5762a6e132fe7b1e8dd07) */ /** @@ -21,6 +21,13 @@ class CRM_Core_DAO_Website extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_website'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-desktop'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -64,6 +71,13 @@ class CRM_Core_DAO_Website extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Websites'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/WordReplacement.php b/civicrm/CRM/Core/DAO/WordReplacement.php index fb6e7cada557a4e7c4eb9ffb5b43d5dcbe437260..42c2051b312249daf57c339a9186984f57ccd119 100644 --- a/civicrm/CRM/Core/DAO/WordReplacement.php +++ b/civicrm/CRM/Core/DAO/WordReplacement.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/WordReplacement.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8d1efd20e3ffe9dadf80fae396132f93) + * (GenCodeChecksum:d7e1414f899a3bcabd20806508741f55) */ /** @@ -76,6 +76,13 @@ class CRM_Core_DAO_WordReplacement extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Word Replacements'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Core/DAO/Worldregion.php b/civicrm/CRM/Core/DAO/Worldregion.php index 1479a7e29abe7264a85c63f212ac8d5c0e7e75db..86b740932364db67a97e1dbe16405fe54fcd1193 100644 --- a/civicrm/CRM/Core/DAO/Worldregion.php +++ b/civicrm/CRM/Core/DAO/Worldregion.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Worldregion.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5bd5fc71a6f1fb9e673b66ad6439d2a6) + * (GenCodeChecksum:8045c0ab7f128626a594fbb634e2f169) */ /** @@ -50,6 +50,13 @@ class CRM_Core_DAO_Worldregion extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Worldregions'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index 39cac95159818a0fb3d7a82739474dc4898b0155..31f4a90804d037d94ffd0c2e35d56cccc31cb948 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -301,6 +301,7 @@ class CRM_Core_Error extends PEAR_ErrorStack { * @throws Exception */ public static function fatal($message = NULL, $code = NULL, $email = NULL) { + CRM_Core_Error::deprecatedFunctionWarning('throw new CRM_Core_Exception or use CRM_Core_Error::statusBounce', 'CRM_Core_Error::fatal'); $vars = [ 'message' => $message, 'code' => $code, @@ -1021,14 +1022,19 @@ class CRM_Core_Error extends PEAR_ErrorStack { /** * Output a deprecated function warning to log file. Deprecated class:function is automatically generated from calling function. * - * @param $newMethod + * @param string $newMethod * description of new method (eg. "buildOptions() method in the appropriate BAO object"). + * @param string $oldMethod + * optional description of old method (if not the calling method). eg. CRM_MyClass::myOldMethodToGetTheOptions() */ - public static function deprecatedFunctionWarning($newMethod) { - $dbt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); - $callerFunction = $dbt[1]['function'] ?? NULL; - $callerClass = $dbt[1]['class'] ?? NULL; - Civi::log()->warning("Deprecated function $callerClass::$callerFunction, use $newMethod.", ['civi.tag' => 'deprecated']); + public static function deprecatedFunctionWarning($newMethod, $oldMethod = NULL) { + if (!$oldMethod) { + $dbt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); + $callerFunction = $dbt[1]['function'] ?? NULL; + $callerClass = $dbt[1]['class'] ?? NULL; + $oldMethod = "{$callerClass}::{$callerFunction}"; + } + Civi::log()->warning("Deprecated function $oldMethod, use $newMethod.", ['civi.tag' => 'deprecated']); } } diff --git a/civicrm/CRM/Core/Form.php b/civicrm/CRM/Core/Form.php index a3c4023c0edb89e82936b4486cf82de9151d5042..7bd57e0dd7a0722496ae5adf59b66825f1ef1e06 100644 --- a/civicrm/CRM/Core/Form.php +++ b/civicrm/CRM/Core/Form.php @@ -359,6 +359,8 @@ class CRM_Core_Form extends HTML_QuickForm_Page { * * @return HTML_QuickForm_Element * Could be an error object + * + * @throws \CRM_Core_Exception */ public function &add( $type, $name, $label = '', @@ -385,16 +387,34 @@ class CRM_Core_Form extends HTML_QuickForm_Page { unset($attributes['multiple']); $extra = NULL; } - // @see http://wiki.civicrm.org/confluence/display/CRMDOC/crmDatepicker - if ($type == 'datepicker') { - $attributes = ($attributes ? $attributes : []); + + // @see https://docs.civicrm.org/dev/en/latest/framework/ui/#date-picker + if ($type === 'datepicker') { + $attributes = $attributes ?: []; + if (!empty($attributes['formatType'])) { + $dateAttributes = CRM_Core_SelectValues::date($attributes['formatType'], NULL, NULL, NULL, 'Input'); + if (empty($extra['minDate']) && !empty($dateAttributes['minYear'])) { + $extra['minDate'] = $dateAttributes['minYear'] . '-01-01'; + } + if (empty($extra['maxDate']) && !empty($dateAttributes['minYear'])) { + $extra['maxDate'] = $dateAttributes['maxYear'] . '-12-31'; + } + } + // Support minDate/maxDate properties + if (isset($extra['minDate'])) { + $extra['minDate'] = date('Y-m-d', strtotime($extra['minDate'])); + } + if (isset($extra['maxDate'])) { + $extra['maxDate'] = date('Y-m-d', strtotime($extra['maxDate'])); + } + $attributes['data-crm-datepicker'] = json_encode((array) $extra); if (!empty($attributes['aria-label']) || $label) { $attributes['aria-label'] = CRM_Utils_Array::value('aria-label', $attributes, $label); } $type = "text"; } - if ($type == 'select' && is_array($extra)) { + if ($type === 'select' && is_array($extra)) { // Normalize this property if (!empty($extra['multiple'])) { $extra['multiple'] = 'multiple'; @@ -802,7 +822,18 @@ class CRM_Core_Form extends HTML_QuickForm_Page { else { throw new CRM_Core_Exception(ts('A payment processor configured for this page might be disabled (contact the site administrator for assistance).')); } + } + /** + * Assign an array of variables to the form/tpl + * + * @param array $values Array of [key => value] to assign to the form + * @param array $keys Array of keys to assign from the values array + */ + public function assignVariables($values, $keys) { + foreach ($keys as $key) { + $this->assign($key, $values[$key] ?? NULL); + } } /** @@ -858,10 +889,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { } // For legacy reasons we set these creditcard expiry fields if present - if (isset($params['credit_card_exp_date'])) { - $params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($params); - $params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($params); - } + CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($params); // Assign IP address parameter $params['ip_address'] = CRM_Utils_System::ipAddress(); @@ -1366,7 +1394,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $required, ['class' => 'crm-select2'] ); - $attributes = ['format' => 'searchDate']; + $attributes = ['formatType' => 'searchDate']; $extra = ['time' => $isDateTime]; $this->add('datepicker', $fieldName . $from, ts($fromLabel), $attributes, $required, $extra); $this->add('datepicker', $fieldName . $to, ts($toLabel), $attributes, $required, $extra); @@ -1453,7 +1481,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $options = $info['values']; } if (!array_key_exists('placeholder', $props)) { - $props['placeholder'] = $required ? ts('- select -') : CRM_Utils_Array::value('context', $props) == 'search' ? ts('- any -') : ts('- none -'); + $props['placeholder'] = $required ? ts('- select -') : (CRM_Utils_Array::value('context', $props) == 'search' ? ts('- any -') : ts('- none -')); } // Handle custom field if (strpos($name, 'custom_') === 0 && is_numeric($name[7])) { @@ -2560,10 +2588,21 @@ class CRM_Core_Form extends HTML_QuickForm_Page { * @return bool */ protected function isFormInViewOrEditMode() { + return $this->isFormInViewMode() || $this->isFormInEditMode(); + } + + /** + * Is the form in edit mode. + * + * Helper function, notably for extensions implementing the buildForm hook, + * so that they can return early. + * + * @return bool + */ + public function isFormInEditMode() { return in_array($this->_action, [ CRM_Core_Action::UPDATE, CRM_Core_Action::ADD, - CRM_Core_Action::VIEW, CRM_Core_Action::BROWSE, CRM_Core_Action::BASIC, CRM_Core_Action::ADVANCED, @@ -2571,6 +2610,18 @@ class CRM_Core_Form extends HTML_QuickForm_Page { ]); } + /** + * Is the form in view mode. + * + * Helper function, notably for extensions implementing the buildForm hook, + * so that they can return early. + * + * @return bool + */ + public function isFormInViewMode() { + return $this->_action == CRM_Core_Action::VIEW; + } + /** * Set the active tab * diff --git a/civicrm/CRM/Core/Form/Date.php b/civicrm/CRM/Core/Form/Date.php index 4d18a0bd8079dd322d9476dbc35a10a902f0ce96..0b2abcf73a69f3ca960ccab8ca7b21c7535c41f8 100644 --- a/civicrm/CRM/Core/Form/Date.php +++ b/civicrm/CRM/Core/Form/Date.php @@ -52,6 +52,8 @@ class CRM_Core_Form_Date { /** * Retrieve the date range - relative or absolute and assign it to the form. * + * @deprecated + * * @param CRM_Core_Form $form * The form the dates should be added to. * @param string $fieldName @@ -73,6 +75,7 @@ class CRM_Core_Form_Date { $dateFormat = 'searchDate', $displayTime = FALSE, $attributes = ['class' => 'crm-select2'] ) { + CRM_Core_Error::deprecatedFunctionWarning('function will be removed'); $selector = CRM_Core_Form_Date::returnDateRangeSelector( $form, $fieldName, $count, @@ -91,6 +94,8 @@ class CRM_Core_Form_Date { /** * Build the date range array that will provide the form option values. * + * @deprecated + * * It can be - relative or absolute. * * @param CRM_Core_Form $form @@ -115,6 +120,7 @@ class CRM_Core_Form_Date { $required = FALSE, $operators = [], $dateFormat = 'searchDate', $displayTime = FALSE ) { + CRM_Core_Error::deprecatedFunctionWarning('function will be removed'); $selector = [ '' => ts('- any -'), 0 => ts('Choose Date Range'), @@ -139,6 +145,8 @@ class CRM_Core_Form_Date { /** * Build the date range - relative or absolute. * + * @deprecated + * * @param CRM_Core_Form $form * The form object that we are operating on. * @param string $fieldName @@ -165,6 +173,7 @@ class CRM_Core_Form_Date { $displayTime = FALSE, $attributes ) { + CRM_Core_Error::deprecatedFunctionWarning('function will be removed'); $form->add('select', "{$fieldName}_relative", ts('Relative Date Range'), diff --git a/civicrm/CRM/Core/I18n.php b/civicrm/CRM/Core/I18n.php index 357dc2f936715ea8d00db74362c962431a52e0a3..ce8175324c3644b27a49da45ffffc5cc102222b9 100644 --- a/civicrm/CRM/Core/I18n.php +++ b/civicrm/CRM/Core/I18n.php @@ -584,15 +584,14 @@ class CRM_Core_I18n { } /** - * Is the CiviCRM in multilingual mode. + * Is the current CiviCRM domain in multilingual mode. * * @return Bool * True if CiviCRM is in multilingual mode. */ public static function isMultilingual() { - $domain = new CRM_Core_DAO_Domain(); - $domain->find(TRUE); - return (bool) $domain->locales; + $domainId = CRM_Core_Config::domainID(); + return (bool) CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Domain', $domainId, 'locales'); } /** @@ -611,6 +610,17 @@ class CRM_Core_I18n { return (in_array($short, $rtl)); } + /** + * If you switch back/forth between locales/drivers, it may be necessary + * to reset some options. + */ + protected function reactivate() { + if ($this->_nativegettext) { + $this->setNativeGettextLocale($this->locale); + } + + } + /** * Change the processing language without changing the current user language * @@ -623,15 +633,6 @@ class CRM_Core_I18n { // Change the language of the CMS as well, for URLs. CRM_Utils_System::setUFLocale($locale); - // change the gettext ressources - if ($this->_nativegettext) { - $this->setNativeGettextLocale($locale); - } - else { - // phpgettext - $this->setPhpGettextLocale($locale); - } - // For sql queries, if running in DB multi-lingual mode. global $dbLocale; @@ -642,6 +643,8 @@ class CRM_Core_I18n { // For self::getLocale() global $tsLocale; $tsLocale = $locale; + + CRM_Core_I18n::singleton()->reactivate(); } /** diff --git a/civicrm/CRM/Core/I18n/Schema.php b/civicrm/CRM/Core/I18n/Schema.php index 13318083bbd0667edceda50045fa9d71e048f2a8..d3e1adb11d1a5fbfa67512dc546fa1d75e86926f 100644 --- a/civicrm/CRM/Core/I18n/Schema.php +++ b/civicrm/CRM/Core/I18n/Schema.php @@ -44,56 +44,32 @@ class CRM_Core_I18n_Schema { * the first locale to create (migrate to). */ public static function makeMultilingual($locale) { - $domain = new CRM_Core_DAO_Domain(); - $domain->find(TRUE); - - // break early if the db is already multi-lang - if ($domain->locales) { - return; - } - - $dao = new CRM_Core_DAO(); - - // build the column-adding SQL queries - $columns = CRM_Core_I18n_SchemaStructure::columns(); - $indices = CRM_Core_I18n_SchemaStructure::indices(); - $queries = []; - foreach ($columns as $table => $hash) { - // drop old indices - if (isset($indices[$table])) { - foreach ($indices[$table] as $index) { - if (CRM_Core_BAO_SchemaHandler::checkIfIndexExists($table, $index['name'])) { - $queries[] = "DROP INDEX {$index['name']} ON {$table}"; - } - } - } - // deal with columns - foreach ($hash as $column => $type) { - $queries[] = "ALTER TABLE {$table} ADD {$column}_{$locale} {$type}"; - if (CRM_Core_BAO_SchemaHandler::checkIfFieldExists($table, $column)) { - $queries[] = "UPDATE {$table} SET {$column}_{$locale} = {$column}"; - $queries[] = "ALTER TABLE {$table} DROP {$column}"; - } + $isUpdateDone = FALSE; + $domain = new CRM_Core_BAO_Domain(); + $domain->find(); + $domains = []; + while ($domain->fetch()) { + // We need to build an array to iterate through here as something later down clears + // the cache on the fetch results & causes only the first to be retrieved. + $domains[] = clone $domain; + } + foreach ($domains as $domain) { + // skip if the domain is already multi-lang. + if ($domain->locales) { + continue; } - // add view - $queries[] = self::createViewQuery($locale, $table, $dao); + if (!$isUpdateDone) { + $isUpdateDone = self::alterTablesToSupportMultilingual($locale); + } - // add new indices - $queries = array_merge($queries, array_values(self::createIndexQueries($locale, $table))); - } + // update civicrm_domain.locales + $domain->locales = $locale; + $domain->save(); - // execute the queries without i18n rewriting - foreach ($queries as $query) { - $dao->query($query, FALSE); + // CRM-21627 Updates the $dbLocale + CRM_Core_BAO_ConfigSetting::applyLocale(Civi::settings($domain->id), $domain->locales); } - - // update civicrm_domain.locales - $domain->locales = $locale; - $domain->save(); - - // CRM-21627 Updates the $dbLocale - CRM_Core_BAO_ConfigSetting::applyLocale(Civi::settings($domain->id), $domain->locales); } /** @@ -606,4 +582,53 @@ class CRM_Core_I18n_Schema { } } + /** + * Alter tables to the structure to support multilingual. + * + * This alters the db structure to use language specific field names for + * localised fields and adds the relevant views. + * + * @param string $locale + * + * @return bool + */ + protected static function alterTablesToSupportMultilingual($locale): bool { + $dao = new CRM_Core_DAO(); + + // build the column-adding SQL queries + $columns = CRM_Core_I18n_SchemaStructure::columns(); + $indices = CRM_Core_I18n_SchemaStructure::indices(); + $queries = []; + foreach ($columns as $table => $hash) { + // drop old indices + if (isset($indices[$table])) { + foreach ($indices[$table] as $index) { + if (CRM_Core_BAO_SchemaHandler::checkIfIndexExists($table, $index['name'])) { + $queries[] = "DROP INDEX {$index['name']} ON {$table}"; + } + } + } + // deal with columns + foreach ($hash as $column => $type) { + $queries[] = "ALTER TABLE {$table} ADD {$column}_{$locale} {$type}"; + if (CRM_Core_BAO_SchemaHandler::checkIfFieldExists($table, $column)) { + $queries[] = "UPDATE {$table} SET {$column}_{$locale} = {$column}"; + $queries[] = "ALTER TABLE {$table} DROP {$column}"; + } + } + + // add view + $queries[] = self::createViewQuery($locale, $table, $dao); + + // add new indices + $queries = array_merge($queries, array_values(self::createIndexQueries($locale, $table))); + } + + // execute the queries without i18n rewriting + foreach ($queries as $query) { + $dao->query($query, FALSE); + } + return TRUE; + } + } diff --git a/civicrm/CRM/Core/IDS.php b/civicrm/CRM/Core/IDS.php index 7a3eded15af81fff272faf5805dc74788c901ba5..5401ea811701ca7790b1b306f315dfa8978be6c5 100644 --- a/civicrm/CRM/Core/IDS.php +++ b/civicrm/CRM/Core/IDS.php @@ -292,7 +292,7 @@ class CRM_Core_IDS { ); CRM_Utils_JSON::output($error); } - CRM_Core_Error::fatal($msg); + throw new CRM_Core_Exception($msg); } } diff --git a/civicrm/CRM/Core/JobManager.php b/civicrm/CRM/Core/JobManager.php index ed2954fc1d14335b1d6ce2f92654e34b003f73ea..d19e786d4ad19ccc4a12b3e9c99d6b67ba9c206c 100644 --- a/civicrm/CRM/Core/JobManager.php +++ b/civicrm/CRM/Core/JobManager.php @@ -181,7 +181,7 @@ class CRM_Core_JobManager { */ private function _getJob($id = NULL, $entity = NULL, $action = NULL) { if (is_null($id) && is_null($action)) { - CRM_Core_Error::fatal('You need to provide either id or name to use this method'); + throw new CRM_Core_Exception('You need to provide either id or name to use this method'); } $dao = new CRM_Core_DAO_Job(); $dao->id = $id; diff --git a/civicrm/CRM/Core/Page/AJAX.php b/civicrm/CRM/Core/Page/AJAX.php index 32dcbffba90a3463e96063fa1525e1135d70d522..ccbcd67251f96ed9b22f62d8821e68791e53b69a 100644 --- a/civicrm/CRM/Core/Page/AJAX.php +++ b/civicrm/CRM/Core/Page/AJAX.php @@ -34,7 +34,7 @@ class CRM_Core_Page_AJAX { } if (!$className) { - CRM_Core_Error::fatal(ts('Invalid className: %1', [1 => $className])); + throw new CRM_Core_Exception(ts('Invalid className: %1', [1 => $className])); } $fnName = NULL; diff --git a/civicrm/CRM/Core/Page/Basic.php b/civicrm/CRM/Core/Page/Basic.php index 0b784e25cdfb490b062943b9f3519a8c21754381..097ba8b6c07126840fb96e1d7d8dc8ffbe906cee 100644 --- a/civicrm/CRM/Core/Page/Basic.php +++ b/civicrm/CRM/Core/Page/Basic.php @@ -306,7 +306,7 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { $object_type = get_class($object); if (!$forceAction) { - if (array_key_exists('is_reserved', $object) && $object->is_reserved) { + if (property_exists($object, 'is_reserved') && $object->is_reserved) { $values['class'] = 'reserved'; // check if object is relationship type @@ -326,7 +326,7 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { } } else { - if (array_key_exists('is_active', $object)) { + if (property_exists($object, 'is_active')) { if ($object->is_active) { if ($hasDisable) { $newAction += CRM_Core_Action::DISABLE; diff --git a/civicrm/CRM/Core/Page/Redirect.php b/civicrm/CRM/Core/Page/Redirect.php index 15141ae4f021258de5af189e17af8310f6fc662c..ed855d1df0107c97b7dd688fe9bff1a2ccd0577e 100644 --- a/civicrm/CRM/Core/Page/Redirect.php +++ b/civicrm/CRM/Core/Page/Redirect.php @@ -38,7 +38,7 @@ class CRM_Core_Page_Redirect extends CRM_Core_Page { */ public static function createUrl($requestPath, $requestArgs, $pageArgs, $absolute) { if (empty($pageArgs['url'])) { - CRM_Core_Error::fatal('This page is configured as a redirect, but it does not have a target.'); + CRM_Core_Error::statusBounce('This page is configured as a redirect, but it does not have a target.'); } $vars = []; diff --git a/civicrm/CRM/Core/Payment.php b/civicrm/CRM/Core/Payment.php index c4e4deb2c583126aa1ee2ce6abef3f4d142de747..9c998dc66d604dd2dde9ee5c848cd572f2068688 100644 --- a/civicrm/CRM/Core/Payment.php +++ b/civicrm/CRM/Core/Payment.php @@ -565,7 +565,12 @@ abstract class CRM_Core_Payment { * Currently supported: * - contributionPageRecurringHelp (params: is_recur_installments, is_email_receipt) * - contributionPageContinueText (params: amount, is_payment_to_existing) - * - cancelRecurDetailText (params: mode, amount, currency, frequency_interval, frequency_unit, installments, {membershipType|only if mode=auto_renew}) + * - cancelRecurDetailText: + * params: + * mode, amount, currency, frequency_interval, frequency_unit, + * installments, {membershipType|only if mode=auto_renew}, + * selfService (bool) - TRUE if user doesn't have "edit contributions" permission. + * ie. they are accessing via a "self-service" link from an email receipt or similar. * - cancelRecurNotSupportedText * * @param array $params @@ -1375,6 +1380,7 @@ abstract class CRM_Core_Payment { } } if (is_a($result, 'CRM_Core_Error')) { + CRM_Core_Error::deprecatedFunctionWarning('payment processors should throw exceptions rather than return errors'); throw new PaymentProcessorException(CRM_Core_Error::getMessages($result)); } return $result; @@ -1498,7 +1504,8 @@ abstract class CRM_Core_Payment { catch (CRM_Core_Exception $e) { Civi::log()->error('ipn_payment_callback_exception', [ 'context' => [ - 'backtrace' => CRM_Core_Error::formatBacktrace(debug_backtrace()), + 'backtrace' => $e->getTraceAsString(), + 'message' => $e->getMessage(), ], ]); } diff --git a/civicrm/CRM/Core/Payment/AuthorizeNet.php b/civicrm/CRM/Core/Payment/AuthorizeNet.php index abf5e4aaa7ccf9f3858039f41ec10c135c48286f..d7b2249e5ec69a66e85ce032732fa643ca6caed4 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNet.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNet.php @@ -68,7 +68,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $this->_setParam('apiLogin', $paymentProcessor['user_name']); $this->_setParam('paymentKey', $paymentProcessor['password']); $this->_setParam('paymentType', 'AIM'); - $this->_setParam('md5Hash', CRM_Utils_Array::value('signature', $paymentProcessor)); + $this->_setParam('md5Hash', $paymentProcessor['signature'] ?? NULL); $this->_setParam('timestamp', time()); srand(time()); @@ -113,7 +113,9 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { */ public function doDirectPayment(&$params) { if (!defined('CURLOPT_SSLCERT')) { - return self::error(9001, 'Authorize.Net requires curl with SSL support'); + // Note that guzzle doesn't necessarily require CURL, although it prefers it. But we should leave this error + // here unless someone suggests it is not required since it's likely helpful. + throw new PaymentProcessorException('Authorize.Net requires curl with SSL support', 9001); } /* @@ -133,10 +135,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { } if (!empty($params['is_recur']) && !empty($params['contributionRecurID'])) { - $result = $this->doRecurPayment(); - if (is_a($result, 'CRM_Core_Error')) { - return $result; - } + $this->doRecurPayment(); return $params; } @@ -158,27 +157,16 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { // Authorize.Net will not refuse duplicates, so we should check if the user already submitted this transaction if ($this->checkDupe($authorizeNetFields['x_invoice_num'], CRM_Utils_Array::value('contributionID', $params))) { - return self::error(9004, 'It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from Authorize.net. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); - } - - $submit = curl_init($this->_paymentProcessor['url_site']); - - if (!$submit) { - return self::error(9002, 'Could not initiate connection to payment gateway'); - } - - curl_setopt($submit, CURLOPT_POST, TRUE); - curl_setopt($submit, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($submit, CURLOPT_POSTFIELDS, implode('&', $postFields)); - curl_setopt($submit, CURLOPT_SSL_VERIFYPEER, Civi::settings()->get('verifySSL')); - - $response = curl_exec($submit); - - if (!$response) { - return self::error(curl_errno($submit), curl_error($submit)); + throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from Authorize.net. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9004); } - curl_close($submit); + $response = (string) $this->getGuzzleClient()->post($this->_paymentProcessor['url_site'], [ + 'body' => implode('&', $postFields), + 'curl' => [ + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_SSL_VERIFYPEER => Civi::settings()->get('verifySSL'), + ], + ])->getBody(); $response_fields = $this->explode_csv($response); @@ -196,34 +184,19 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { case self::AUTH_ERROR: $params['payment_status_id'] = array_search('Failed', $contributionStatus); $errormsg = $response_fields[2] . ' ' . $response_fields[3]; - return self::error($response_fields[1], $errormsg); + throw new PaymentProcessorException($errormsg, $response_fields[1]); case self::AUTH_DECLINED: $errormsg = $response_fields[2] . ' ' . $response_fields[3]; - return self::error($response_fields[1], $errormsg); + throw new PaymentProcessorException($errormsg, $response_fields[1]); default: // Success - - // test mode always returns trxn_id = 0 - // also live mode in CiviCRM with test mode set in - // Authorize.Net return $response_fields[6] = 0 - // hence treat that also as test mode transaction - // fix for CRM-2566 - if (($this->_mode == 'test') || $response_fields[6] == 0) { - $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id RLIKE 'test[0-9]+'"; - $p = []; - $trxn_id = strval(CRM_Core_DAO::singleValueQuery($query, $p)); - $trxn_id = str_replace('test', '', $trxn_id); - $trxn_id = intval($trxn_id) + 1; - $params['trxn_id'] = sprintf('test%08d', $trxn_id); - } - else { - $params['trxn_id'] = $response_fields[6]; - } + $params['trxn_id'] = !empty($response_fields[6]) ? $response_fields[6] : $this->getTestTrxnID(); $params['gross_amount'] = $response_fields[9]; break; } + // TODO: include authorization code? return $params; @@ -237,36 +210,31 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $intervalLength = $this->_getParam('frequency_interval'); $intervalUnit = $this->_getParam('frequency_unit'); - if ($intervalUnit == 'week') { + if ($intervalUnit === 'week') { $intervalLength *= 7; $intervalUnit = 'days'; } - elseif ($intervalUnit == 'year') { + elseif ($intervalUnit === 'year') { $intervalLength *= 12; $intervalUnit = 'months'; } elseif ($intervalUnit === 'day') { $intervalUnit = 'days'; - } - elseif ($intervalUnit == 'month') { - $intervalUnit = 'months'; - } - - // interval cannot be less than 7 days or more than 1 year - if ($intervalUnit == 'days') { + // interval cannot be less than 7 days or more than 1 year if ($intervalLength < 7) { - return self::error(9001, 'Payment interval must be at least one week'); + throw new PaymentProcessorException('Payment interval must be at least one week', 9001); } - elseif ($intervalLength > 365) { - return self::error(9001, 'Payment interval may not be longer than one year'); + if ($intervalLength > 365) { + throw new PaymentProcessorException('Payment interval may not be longer than one year', 9001); } } - elseif ($intervalUnit == 'months') { + elseif ($intervalUnit === 'month') { + $intervalUnit = 'months'; if ($intervalLength < 1) { - return self::error(9001, 'Payment interval must be at least one week'); + throw new PaymentProcessorException('Payment interval must be at least one week', 9001); } - elseif ($intervalLength > 12) { - return self::error(9001, 'Payment interval may not be longer than one year'); + if ($intervalLength > 12) { + throw new PaymentProcessorException('Payment interval may not be longer than one year', 9001); } } @@ -343,7 +311,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $responseFields = $this->_ParseArbReturn((string) $response->getBody()); if ($responseFields['resultCode'] === 'Error') { - throw new PaymentProcessorException($responseFields['code'], $responseFields['text']); + throw new PaymentProcessorException($responseFields['text'], $responseFields['code']); } // update recur processor_id with subscriptionId @@ -560,23 +528,6 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { return $value; } - /** - * @param null $errorCode - * @param null $errorMessage - * - * @return object - */ - public function &error($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - if ($errorCode) { - $e->push($errorCode, 0, [], $errorMessage); - } - else { - $e->push(9001, 0, [], 'Unknown System Error.'); - } - return $e; - } - /** * Set a field to the specified value. Value must be a scalar (int, * float, string, or boolean) @@ -629,56 +580,51 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { /** * @param string $message - * @param array $params + * @param \Civi\Payment\PropertyBag $params * * @return bool|object + * @throws \Civi\Payment\Exception\PaymentProcessorException */ - public function cancelSubscription(&$message = '', $params = []) { + public function cancelSubscription(&$message = '', $params) { $template = CRM_Core_Smarty::singleton(); $template->assign('subscriptionType', 'cancel'); $template->assign('apiLogin', $this->_getParam('apiLogin')); $template->assign('paymentKey', $this->_getParam('paymentKey')); - $template->assign('subscriptionId', CRM_Utils_Array::value('subscriptionId', $params)); + $template->assign('subscriptionId', $params->getRecurProcessorID()); $arbXML = $template->fetch('CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl'); - // submit to authorize.net - $submit = curl_init($this->_paymentProcessor['url_recur']); - if (!$submit) { - return self::error(9002, 'Could not initiate connection to payment gateway'); - } - - curl_setopt($submit, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($submit, CURLOPT_HTTPHEADER, ["Content-Type: text/xml"]); - curl_setopt($submit, CURLOPT_HEADER, 1); - curl_setopt($submit, CURLOPT_POSTFIELDS, $arbXML); - curl_setopt($submit, CURLOPT_POST, 1); - curl_setopt($submit, CURLOPT_SSL_VERIFYPEER, Civi::settings()->get('verifySSL')); - - $response = curl_exec($submit); - - if (!$response) { - return self::error(curl_errno($submit), curl_error($submit)); - } - - curl_close($submit); + $response = (string) $this->getGuzzleClient()->post($this->_paymentProcessor['url_recur'], [ + 'headers' => [ + 'Content-Type' => 'text/xml; charset=UTF8', + ], + 'body' => $arbXML, + 'curl' => [ + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_SSL_VERIFYPEER => Civi::settings()->get('verifySSL'), + ], + ])->getBody(); $responseFields = $this->_ParseArbReturn($response); $message = "{$responseFields['code']}: {$responseFields['text']}"; - if ($responseFields['resultCode'] == 'Error') { - return self::error($responseFields['code'], $responseFields['text']); + if ($responseFields['resultCode'] === 'Error') { + throw new PaymentProcessorException($responseFields['text'], $responseFields['code']); } return TRUE; } /** + * Update payment details at Authorize.net. + * * @param string $message * @param array $params * * @return bool|object + * + * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function updateSubscriptionBillingInfo(&$message = '', $params = []) { $template = CRM_Core_Smarty::singleton(); @@ -703,32 +649,23 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $arbXML = $template->fetch('CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl'); - // submit to authorize.net - $submit = curl_init($this->_paymentProcessor['url_recur']); - if (!$submit) { - return self::error(9002, 'Could not initiate connection to payment gateway'); - } - - curl_setopt($submit, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($submit, CURLOPT_HTTPHEADER, ["Content-Type: text/xml"]); - curl_setopt($submit, CURLOPT_HEADER, 1); - curl_setopt($submit, CURLOPT_POSTFIELDS, $arbXML); - curl_setopt($submit, CURLOPT_POST, 1); - curl_setopt($submit, CURLOPT_SSL_VERIFYPEER, Civi::settings()->get('verifySSL')); - - $response = curl_exec($submit); - - if (!$response) { - return self::error(curl_errno($submit), curl_error($submit)); - } - - curl_close($submit); + $response = (string) $this->getGuzzleClient()->post($this->_paymentProcessor['url_recur'], [ + 'headers' => [ + 'Content-Type' => 'text/xml; charset=UTF8', + ], + 'body' => $arbXML, + 'curl' => [ + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_SSL_VERIFYPEER => Civi::settings()->get('verifySSL'), + ], + ])->getBody(); + // submit to authorize.net $responseFields = $this->_ParseArbReturn($response); $message = "{$responseFields['code']}: {$responseFields['text']}"; - if ($responseFields['resultCode'] == 'Error') { - return self::error($responseFields['code'], $responseFields['text']); + if ($responseFields['resultCode'] === 'Error') { + throw new PaymentProcessorException($responseFields['text'], $responseFields['code']); } return TRUE; } @@ -742,10 +679,14 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { } /** + * Change the amount of the recurring payment. + * * @param string $message * @param array $params * * @return bool|object + * + * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function changeSubscriptionAmount(&$message = '', $params = []) { $template = CRM_Core_Smarty::singleton(); @@ -765,34 +706,42 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment { $arbXML = $template->fetch('CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl'); - // submit to authorize.net - $submit = curl_init($this->_paymentProcessor['url_recur']); - if (!$submit) { - throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9002); - } - - curl_setopt($submit, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($submit, CURLOPT_HTTPHEADER, ["Content-Type: text/xml"]); - curl_setopt($submit, CURLOPT_HEADER, 1); - curl_setopt($submit, CURLOPT_POSTFIELDS, $arbXML); - curl_setopt($submit, CURLOPT_POST, 1); - curl_setopt($submit, CURLOPT_SSL_VERIFYPEER, Civi::settings()->get('verifySSL')); - - $response = curl_exec($submit); - - if (!$response) { - return self::error(curl_errno($submit), curl_error($submit)); - } - - curl_close($submit); + $response = (string) $this->getGuzzleClient()->post($this->_paymentProcessor['url_recur'], [ + 'headers' => [ + 'Content-Type' => 'text/xml; charset=UTF8', + ], + 'body' => $arbXML, + 'curl' => [ + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_SSL_VERIFYPEER => Civi::settings()->get('verifySSL'), + ], + ])->getBody(); $responseFields = $this->_parseArbReturn($response); $message = "{$responseFields['code']}: {$responseFields['text']}"; - if ($responseFields['resultCode'] == 'Error') { + if ($responseFields['resultCode'] === 'Error') { throw new PaymentProcessorException($responseFields['text'], $responseFields['code']); } return TRUE; } + /** + * Get an appropriate test trannsaction id. + * + * @return string + */ + protected function getTestTrxnID() { + // test mode always returns trxn_id = 0 + // also live mode in CiviCRM with test mode set in + // Authorize.Net return $response_fields[6] = 0 + // hence treat that also as test mode transaction + // fix for CRM-2566 + $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id RLIKE 'test[0-9]+'"; + $trxn_id = (string) (CRM_Core_DAO::singleValueQuery($query)); + $trxn_id = str_replace('test', '', $trxn_id); + $trxn_id = (int) ($trxn_id) + 1; + return sprintf('test%08d', $trxn_id); + } + } diff --git a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php index 089c88572c0759cf610fe859611bd35cc92fffa5..7946ecacbe493b3d2a2089b57f176b752385fd7c 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php @@ -205,7 +205,6 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { * @param array $input * @param array $ids * - * @return bool * @throws \CRM_Core_Exception */ public function getInput(&$input, &$ids) { @@ -230,10 +229,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { $input['trxn_id'] = md5(uniqid(rand(), TRUE)); } - if (!$this->getBillingID($ids)) { - return FALSE; - } - $billingID = $ids['billing']; + $billingID = $ids['billing'] = CRM_Core_BAO_LocationType::getBilling(); $params = [ 'first_name' => 'x_first_name', 'last_name' => 'x_last_name', diff --git a/civicrm/CRM/Core/Payment/BaseIPN.php b/civicrm/CRM/Core/Payment/BaseIPN.php index 8f5dd3786fe98c4503f6cb4d57c79591f1b88a60..973fbd988894b02582d1d483917c7ee91e3e86f8 100644 --- a/civicrm/CRM/Core/Payment/BaseIPN.php +++ b/civicrm/CRM/Core/Payment/BaseIPN.php @@ -361,15 +361,18 @@ class CRM_Core_Payment_BaseIPN { /** * Rollback unhandled outcomes. * + * @deprecated + * * @param array $objects * @param CRM_Core_Transaction $transaction * * @return bool */ public function unhandled(&$objects, &$transaction) { + CRM_Core_Error::deprecatedFunctionWarning('This function will be removed at some point'); $transaction->rollback(); - Civi::log()->debug("Returning since contribution status is not handled"); - echo "Failure: contribution status is not handled<p>"; + Civi::log()->debug('Returning since contribution status is not handled'); + echo 'Failure: contribution status is not handled<p>'; return FALSE; } @@ -484,6 +487,7 @@ class CRM_Core_Payment_BaseIPN { } /** + * @deprecated * Get site billing ID. * * @param array $ids @@ -491,6 +495,7 @@ class CRM_Core_Payment_BaseIPN { * @return bool */ public function getBillingID(&$ids) { + CRM_Core_Error::deprecatedFunctionWarning('CRM_Core_BAO_LocationType::getBilling()'); $ids['billing'] = CRM_Core_BAO_LocationType::getBilling(); if (!$ids['billing']) { CRM_Core_Error::debug_log_message(ts('Please set a location type of %1', [1 => 'Billing'])); diff --git a/civicrm/CRM/Core/Payment/Dummy.php b/civicrm/CRM/Core/Payment/Dummy.php index 1f3d9336cd62ba7b2a599be1f4712e9f2438ba18..4757fb296c6b0e7dedd5d34d92c388b8867b7312 100644 --- a/civicrm/CRM/Core/Payment/Dummy.php +++ b/civicrm/CRM/Core/Payment/Dummy.php @@ -94,22 +94,9 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment { $result['trxn_id'] = array_shift($this->_doDirectPaymentResult['trxn_id']); return $result; } - if ($this->_mode === 'test') { - $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'test\\_%'"; - $p = []; - $trxn_id = (string) CRM_Core_DAO::singleValueQuery($query, $p); - $trxn_id = str_replace('test_', '', $trxn_id); - $trxn_id = (int) $trxn_id + 1; - $params['trxn_id'] = 'test_' . $trxn_id . '_' . uniqid(); - } - else { - $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'live_%'"; - $p = []; - $trxn_id = (string) CRM_Core_DAO::singleValueQuery($query, $p); - $trxn_id = str_replace('live_', '', $trxn_id); - $trxn_id = (int) $trxn_id + 1; - $params['trxn_id'] = 'live_' . $trxn_id . '_' . uniqid(); - } + + $params['trxn_id'] = $this->getTrxnID();; + $params['gross_amount'] = $propertyBag->getAmount(); // Add a fee_amount so we can make sure fees are handled properly in underlying classes. $params['fee_amount'] = 1.50; @@ -219,4 +206,21 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment { return ['message' => ts('Recurring contribution cancelled')]; } + /** + * Get a value for the transaction ID. + * + * Value is made up of the max existing value + a random string. + * + * Note the random string is likely a historical workaround. + * + * @return string + */ + protected function getTrxnID() { + $string = $this->_mode; + $trxn_id = CRM_Core_DAO::singleValueQuery("SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE '{$string}_%'"); + $trxn_id = str_replace($string, '', $trxn_id); + $trxn_id = (int) $trxn_id + 1; + return $string . '_' . $trxn_id . '_' . uniqid(); + } + } diff --git a/civicrm/CRM/Core/Payment/Elavon.php b/civicrm/CRM/Core/Payment/Elavon.php index 35a93702e1ce371588f909e1be1f924895f1f8ed..8990e8586039111a382879148860944fa7511ccc 100644 --- a/civicrm/CRM/Core/Payment/Elavon.php +++ b/civicrm/CRM/Core/Payment/Elavon.php @@ -9,6 +9,8 @@ +----------------------------------------------------------------------------+ */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * ----------------------------------------------------------------------------------------------- * The basic functionality of this processor is that variables from the $params object are transformed @@ -24,9 +26,6 @@ * ----------------------------------------------------------------------------------------------- */ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { - // (not used, implicit in the API, might need to convert?) - const - CHARSET = 'UFT-8'; /** * Constructor. @@ -34,9 +33,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { * @param string $mode * The mode of operation: live or test. * - * @param $paymentProcessor - * - * @return CRM_Core_Payment_Elavon + * @param array $paymentProcessor */ public function __construct($mode, &$paymentProcessor) { // live or test @@ -45,22 +42,17 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { } /** + * Map fields to parameters. + * * This function is set up and put here to make the mapping of fields * from the params object as visually clear as possible for easy editing * - * Comment out irrelevant fields - * @param $params + * @param array $params + * * @return array */ public function mapProcessorFieldstoParams($params) { - - // compile array - // Payment Processor field name fields from $params array - // credit card name $requestFields['ssl_first_name'] = $params['billing_first_name']; - // credit card name - //$requestFields['ssl_middle_name'] = $params['billing_middle_name']; - // credit card name $requestFields['ssl_last_name'] = $params['billing_last_name']; // contact name $requestFields['ssl_ship_to_first_name'] = $params['first_name']; @@ -86,28 +78,17 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // Added two lines below to allow commercial cards to go through as per page 15 of Elavon developer guide $requestFields['ssl_customer_code'] = '1111'; $requestFields['ssl_salestax'] = 0.0; - - /************************************************************************************ - * Fields available from civiCRM not implemented for Elavon - * - * $params['qfKey']; - * $params['amount_other']; - * $params['ip_address']; - * $params['contributionType_name' ]; - * $params['contributionPageID']; - * $params['contributionType_accounting_code']; - * $params['amount_level']; - * $params['credit_card_type']; - ************************************************************************************/ return $requestFields; } /** - * This function sends request and receives response from - * the processor + * This function sends request and receives response from the processor. + * * @param array $params - * @return array|object - * @throws Exception + * + * @return array + * + * @throws \CRM_Core_Exception */ public function doDirectPayment(&$params) { if (isset($params['is_recur']) && $params['is_recur'] == TRUE) { @@ -120,7 +101,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { //Create the array of variables to be sent to the processor from the $params array // passed into this function - $requestFields = self::mapProcessorFieldstoParams($params); + $requestFields = $this->mapProcessorFieldstoParams($params); // define variables for connecting with the gateway $requestFields['ssl_merchant_id'] = $this->_paymentProcessor['user_name']; @@ -128,7 +109,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { $requestFields['ssl_pin'] = $this->_paymentProcessor['signature'] ?? NULL; $host = $this->_paymentProcessor['url_site']; - if ($this->_mode == "test") { + if ($this->_mode === 'test') { $requestFields['ssl_test_mode'] = "TRUE"; } @@ -137,11 +118,11 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // Check to see if we have a duplicate before we send if ($this->checkDupe($params['invoiceID'], CRM_Utils_Array::value('contributionID', $params))) { - return self::errorExit(9003, 'It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); + throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9003); } // Convert to XML using function below - $xml = self::buildXML($requestFields); + $xml = $this->buildXML($requestFields); // Send to the payment processor using cURL @@ -149,7 +130,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { $ch = curl_init($chHost); if (!$ch) { - return self::errorExit(9004, 'Could not initiate connection to payment gateway'); + throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9004); } curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, Civi::settings()->get('verifySSL') ? 2 : 0); @@ -182,13 +163,9 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // Paranoia - in the unlikley event that 'curl' error fails if (strlen($errorDesc) == 0) { - $errorDesc = "Connection to payment gateway failed"; + $errorDesc = 'Connection to payment gateway failed'; } - if ($errorNum = 60) { - return self::errorExit($errorNum, "Curl error - " . $errorDesc . " Try this link for more information http://curl.haxx.se/docs/sslcerts.html"); - } - - return self::errorExit($errorNum, "Curl error - " . $errorDesc . " your key is located at " . $key . " the url is " . $host . " xml is " . $requestxml . " processor response = " . $processorResponse); + throw new PaymentProcessorException('Curl error - ' . $errorDesc . ' Try this link for more information http://curl.haxx.se/docs/sslcerts.html', $errorNum); } // If null data returned - tell 'em and bail out @@ -196,13 +173,13 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // any reason, the return value will be the boolean false. if (($responseData === FALSE) || (strlen($responseData) == 0)) { curl_close($ch); - return self::errorExit(9006, "Error: Connection to payment gateway failed - no data returned."); + throw new PaymentProcessorException('Error: Connection to payment gateway failed - no data returned.', 9006); } // If gateway returned no data - tell 'em and bail out if (empty($responseData)) { curl_close($ch); - return self::errorExit(9007, "Error: No data returned from payment gateway."); + throw new PaymentProcessorException('Error: No data returned from payment gateway.', 9007); } // Success so far - close the curl and check the data @@ -210,36 +187,33 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // Payment successfully sent to gateway - process the response now - $processorResponse = self::decodeXMLResponse($responseData); + $processorResponse = $this->decodeXMLresponse($responseData); // success in test mode returns response "APPROVED" // test mode always returns trxn_id = 0 // fix for CRM-2566 if ($processorResponse['errorCode']) { - return self::errorExit(9010, "Error: [" . $processorResponse['errorCode'] . " " . $processorResponse['errorName'] . " " . $processorResponse['errorMessage'] . "] - from payment processor"); + throw new PaymentProcessorException("Error: [" . $processorResponse['errorCode'] . " " . $processorResponse['errorName'] . " " . $processorResponse['errorMessage'] . '] - from payment processor', 9010); } - if ($processorResponse['ssl_result_message'] == "APPROVED") { - if ($this->_mode == 'test') { + if ($processorResponse['ssl_result_message'] === "APPROVED") { + if ($this->_mode === 'test') { $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'test%'"; - $p = []; - $trxn_id = strval(CRM_Core_DAO::singleValueQuery($query, $p)); - $trxn_id = str_replace('test', '', $trxn_id); - $trxn_id = intval($trxn_id) + 1; + $trxn_id = (string) CRM_Core_DAO::singleValueQuery($query); + $trxn_id = (int) str_replace('test', '', $trxn_id); + ++$trxn_id; $params['trxn_id'] = sprintf('test%08d', $trxn_id); return $params; } - else { - return self::errorExit(9099, "Error: [approval code related to test transaction but mode was " . $this->_mode); - } + throw new PaymentProcessorException('Error: [approval code related to test transaction but mode was ' . $this->_mode, 9099); } // transaction failed, print the reason - if ($processorResponse['ssl_result_message'] != "APPROVAL") { - return self::errorExit(9009, "Error: [" . $processorResponse['ssl_result_message'] . " " . $processorResponse['ssl_result'] . "] - from payment processor"); + if ($processorResponse['ssl_result_message'] !== "APPROVAL") { + throw new PaymentProcessorException('Error: [' . $processorResponse['ssl_result_message'] . ' ' . $processorResponse['ssl_result'] . '] - from payment processor', 9009); } else { // Success ! - if ($this->_mode != 'test') { + if ($this->_mode !== 'test') { // 'trxn_id' is varchar(255) field. returned value is length 37 $params['trxn_id'] = $processorResponse['ssl_txn_id']; } @@ -250,23 +224,6 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { } } - /** - * Produces error message and returns from class. - * @param string $errorCode - * @param string $errorMessage - * @return CRM_Core_Error - */ - public function &errorExit($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - if ($errorCode) { - $e->push($errorCode, 0, NULL, $errorMessage); - } - else { - $e->push(9000, 0, NULL, 'Unknown System Error.'); - } - return $e; - } - /** * This public function checks to see if we have the right processor config values set. * @@ -291,9 +248,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { if (!empty($errorMsg)) { return implode('<p>', $errorMsg); } - else { - return NULL; - } + return NULL; } /** @@ -383,7 +338,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { if (($pos1 === FALSE) || ($pos2 === FALSE)) { - return ""; + return ''; } diff --git a/civicrm/CRM/Core/Payment/FirstData.php b/civicrm/CRM/Core/Payment/FirstData.php index 5e520cf7e452608cfbdef142c41ae7660079a544..c51c3ff769d924ea63bc939f740df0782e442c35 100644 --- a/civicrm/CRM/Core/Payment/FirstData.php +++ b/civicrm/CRM/Core/Payment/FirstData.php @@ -14,6 +14,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * Note that in order to use FirstData / LinkPoint you need a certificate (.pem) file issued by them * and a store number. You can configure the path to the certificate and the store number @@ -52,8 +54,6 @@ * ************************** */ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { - // (not used, implicit in the API, might need to convert?) - const CHARSET = 'UFT-8'; /** * Constructor. @@ -61,12 +61,9 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { * @param string $mode * The mode of operation: live or test. * - * @param $paymentProcessor - * - * @return \CRM_Core_Payment_FirstData ******************************************************* + * @param array $paymentProcessor */ public function __construct($mode, &$paymentProcessor) { - // live or test $this->_mode = $mode; $this->_paymentProcessor = $paymentProcessor; } @@ -87,9 +84,9 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { /*concatenate full customer name first - code from EWAY gateway */ - $credit_card_name = $params['first_name'] . " "; + $credit_card_name = $params['first_name'] . ' '; if (strlen($params['middle_name']) > 0) { - $credit_card_name .= $params['middle_name'] . " "; + $credit_card_name .= $params['middle_name'] . ' '; } $credit_card_name .= $params['last_name']; @@ -182,7 +179,7 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { // Check to see if we have a duplicate before we send //---------------------------------------------------------------------------------------------------- if ($this->checkDupe($params['invoiceID'], CRM_Utils_Array::value('contributionID', $params))) { - return self::errorExit(9003, 'It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from eWAY. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); + throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from eWAY. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9003); } //---------------------------------------------------------------------------------------------------- // Convert to XML using function provided by payment processor @@ -196,7 +193,7 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { $ch = curl_init($host); if (!$ch) { - return self::errorExit(9004, 'Could not initiate connection to payment gateway'); + throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9004); } curl_setopt($ch, CURLOPT_POST, 1); @@ -236,10 +233,10 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { $errorDesc = "Connection to payment gateway failed"; } if ($errorNum == 60) { - return self::errorExit($errorNum, "Curl error - " . $errorDesc . " Try this link for more information http://curl.haxx.se/docs/sslcerts.html"); + throw new PaymentProcessorException("Curl error - " . $errorDesc . ' Try this link for more information http://curl.haxx.se/docs/sslcerts.html', $errorNum); } - return self::errorExit($errorNum, "Curl error - " . $errorDesc . " your key is located at " . $key . " the url is " . $host . " xml is " . $requestxml . " processor response = " . $processorResponse); + throw new PaymentProcessorException('Curl error - ' . $errorDesc . ' your key is located at ' . $key . ' the url is ' . $host . ' xml is ' . $requestxml . ' processor response = ' . $processorResponse, $errorNum); } //---------------------------------------------------------------------------------------------------- @@ -249,14 +246,14 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { // any reason, the return value will be the boolean false. //---------------------------------------------------------------------------------------------------- if (($responseData === FALSE) || (strlen($responseData) == 0)) { - return self::errorExit(9006, "Error: Connection to payment gateway failed - no data returned."); + throw new PaymentProcessorException('Error: Connection to payment gateway failed - no data returned.', 9006); } //---------------------------------------------------------------------------------------------------- // If gateway returned no data - tell 'em and bail out //---------------------------------------------------------------------------------------------------- if (empty($responseData)) { - return self::errorExit(9007, "Error: No data returned from payment gateway."); + throw new PaymentProcessorException('Error: No data returned from payment gateway.', 9007); } //---------------------------------------------------------------------------------------------------- @@ -271,8 +268,8 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { $processorResponse = lphp::decodeXML($responseData); // transaction failed, print the reason - if ($processorResponse["r_approved"] != "APPROVED") { - return self::errorExit(9009, "Error: [" . $processorResponse['r_error'] . "] - from payment processor"); + if ($processorResponse['r_approved'] !== "APPROVED") { + throw new PaymentProcessorException('Error: [' . $processorResponse['r_error'] . '] - from payment processor', 9009); } else { @@ -302,28 +299,6 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { } } - // end function doDirectPayment - - /** - * Produces error message and returns from class. - * - * @param int $errorCode - * @param string $errorMessage - * - * @return object - */ - public function &errorExit($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - - if ($errorCode) { - $e->push($errorCode, 0, NULL, $errorMessage); - } - else { - $e->push(9000, 0, NULL, 'Unknown System Error.'); - } - return $e; - } - /** * This public function checks to see if we have the right processor config values set. * @@ -352,9 +327,7 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { if (!empty($errorMsg)) { return implode('<p>', $errorMsg); } - else { - return NULL; - } + return NULL; } } diff --git a/civicrm/CRM/Core/Payment/Form.php b/civicrm/CRM/Core/Payment/Form.php index 1c7263812c522bae496812da1b71964e17012560..3779297a08e08327f64fa2519a97ab0e98e319af 100644 --- a/civicrm/CRM/Core/Payment/Form.php +++ b/civicrm/CRM/Core/Payment/Form.php @@ -109,7 +109,7 @@ class CRM_Core_Payment_Form { $field['name'], $field['title'], $field['attributes'], - FALSE, + $field['is_required'], $field['extra'] ); } diff --git a/civicrm/CRM/Core/Payment/Manual.php b/civicrm/CRM/Core/Payment/Manual.php index 0a311b48da916fbfd04420dec9c98312f15e220f..a2c7c5dd2593a0d65a0b9f9833a37007cd2a72c9 100644 --- a/civicrm/CRM/Core/Payment/Manual.php +++ b/civicrm/CRM/Core/Payment/Manual.php @@ -23,6 +23,19 @@ class CRM_Core_Payment_Manual extends CRM_Core_Payment { */ public function checkConfig() {} + /** + * Constructor. + */ + public function __construct() { + $this->_paymentProcessor = [ + 'payment_type' => 0, + 'billing_mode' => 0, + 'id' => 0, + 'url_recur' => '', + 'is_recur' => 0, + ]; + } + /** * Get billing fields required for this processor. * diff --git a/civicrm/CRM/Core/Payment/PayJunction.php b/civicrm/CRM/Core/Payment/PayJunction.php index f544ee10c03da276a6bb2e56ebcce493ceded1ca..4fc8ec90056328788206450d6acb9863a260e85e 100644 --- a/civicrm/CRM/Core/Payment/PayJunction.php +++ b/civicrm/CRM/Core/Payment/PayJunction.php @@ -8,6 +8,8 @@ * */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * * @package CRM @@ -28,9 +30,7 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { * @param string $mode * The mode of operation: live or test. * - * @param $paymentProcessor - * - * @return \CRM_Core_Payment_PayJunction + * @param array $paymentProcessor */ public function __construct($mode, &$paymentProcessor) { $this->_mode = $mode; @@ -46,6 +46,7 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { * * @return array * the result in an nice formatted array (or an error object) + * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function doDirectPayment(&$params) { $logon = $this->_paymentProcessor['user_name']; @@ -58,16 +59,16 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { $pjpgCustInfo->setEmail($params['email']); $billing = [ - "logon" => $logon, - "password" => $password, - "url_site" => $url_site, - "first_name" => $params['first_name'], - "last_name" => $params['last_name'], - "address" => $params['street_address'], - "city" => $params['city'], - "province" => $params['state_province'], - "postal_code" => $params['postal_code'], - "country" => $params['country'], + 'logon' => $logon, + 'password' => $password, + 'url_site' => $url_site, + 'first_name' => $params['first_name'], + 'last_name' => $params['last_name'], + 'address' => $params['street_address'], + 'city' => $params['city'], + 'province' => $params['state_province'], + 'postal_code' => $params['postal_code'], + 'country' => $params['country'], ]; $pjpgCustInfo->setBilling($billing); @@ -96,8 +97,8 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { $pjpgTxn->setCustInfo($pjpgCustInfo); // empty installments convert to 999 because PayJunction do not allow open end donation - if ($params['installments'] == "") { - $params['installments'] = "999"; + if ($params['installments'] === '') { + $params['installments'] = '999'; } // create recurring object @@ -144,14 +145,7 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { $pjpgResponse = $pjpgHttpPost->getPJpgResponse(); if (self::isError($pjpgResponse)) { - return self::error($pjpgResponse); - } - - /* Check for application errors */ - - $result = self::checkResult($pjpgResponse); - if (is_a($result, 'CRM_Core_Error')) { - return $result; + throw new PaymentProcessorException($pjpgResponse); } // Success @@ -174,22 +168,11 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { public function isError(&$response) { $responseCode = $response['dc_response_code']; - if ($responseCode == "00" || $responseCode == "85") { + if ($responseCode === "00" || $responseCode === "85") { return FALSE; } - else { - return TRUE; - } - } + return TRUE; - /** - * ignore for now, more elaborate error handling later. - * @param $response - * - * @return mixed - */ - public function &checkResult(&$response) { - return $response; } /** @@ -206,28 +189,7 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { if (isset($this->_params[$field])) { return $this->_params[$field]; } - else { - return ''; - } - } - - /** - * @param null $error - * - * @return object - */ - public function &error($error = NULL) { - $e = CRM_Core_Error::singleton(); - if ($error) { - $e->push($error['dc_response_code'], - 0, NULL, - $error['dc_response_message'] - ); - } - else { - $e->push(9001, 0, NULL, "Unknown System Error."); - } - return $e; + return ''; } /** @@ -272,9 +234,7 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { if (!empty($error)) { return implode('<p>', $error); } - else { - return NULL; - } + return NULL; } } diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index 0d3eae538678fbbaf91030744070c93bd411cde5..be0424f7afd5cb3f3298f575ba970186659ade10 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -270,8 +270,9 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { elseif ($status == 'Refunded' || $status == 'Reversed') { return $this->cancelled($objects, $transaction); } - elseif ($status != 'Completed') { - return $this->unhandled($objects, $transaction); + elseif ($status !== 'Completed') { + Civi::log()->debug('Returning since contribution status is not handled'); + return; } // check if contribution is already completed, if so we ignore this ipn @@ -279,7 +280,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { if ($contribution->contribution_status_id == $completedStatusId) { $transaction->commit(); Civi::log()->debug('PayPalIPN: Returning since contribution has already been handled. (ID: ' . $contribution->id . ').'); - echo "Success: Contribution has already been handled<p>"; + echo 'Success: Contribution has already been handled<p>'; return; } @@ -380,17 +381,13 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { * @throws \CRM_Core_Exception */ public function getInput(&$input, &$ids) { - if (!$this->getBillingID($ids)) { - return; - } - + $billingID = $ids['billing'] = CRM_Core_BAO_LocationType::getBilling(); $input['txnType'] = $this->retrieve('txn_type', 'String', FALSE); $input['paymentStatus'] = $this->retrieve('payment_status', 'String', FALSE); $input['invoice'] = $this->retrieve('invoice', 'String', TRUE); $input['amount'] = $this->retrieve('mc_gross', 'Money', FALSE); $input['reasonCode'] = $this->retrieve('ReasonCode', 'String', FALSE); - $billingID = $ids['billing']; $lookup = [ "first_name" => 'first_name', "last_name" => 'last_name', diff --git a/civicrm/CRM/Core/Payment/PayPalProIPN.php b/civicrm/CRM/Core/Payment/PayPalProIPN.php index a2155527240bd05529736c1e7e676e0f25b969b2..d249aa0bef30b2d2a494358eda818db76a3c80e2 100644 --- a/civicrm/CRM/Core/Payment/PayPalProIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalProIPN.php @@ -359,8 +359,8 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { $this->cancelled($objects, $transaction); return; } - elseif ($status != 'Completed') { - $this->unhandled($objects, $transaction); + elseif ($status !== 'Completed') { + Civi::log()->debug('Returning since contribution status is not handled'); return; } @@ -369,7 +369,7 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { if ($contribution->contribution_status_id == $completedStatusId) { $transaction->commit(); Civi::log()->debug('PayPalProIPN: Returning since contribution has already been handled.'); - echo "Success: Contribution has already been handled<p>"; + echo 'Success: Contribution has already been handled<p>'; return; } @@ -493,9 +493,7 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr * @throws CRM_Core_Exception */ public function getInput(&$input, &$ids) { - if (!$this->getBillingID($ids)) { - return; - } + $billingID = $ids['billing'] = CRM_Core_BAO_LocationType::getBilling(); $input['txnType'] = self::retrieve('txn_type', 'String', 'POST', FALSE); $input['paymentStatus'] = self::retrieve('payment_status', 'String', 'POST', FALSE); @@ -503,7 +501,6 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr $input['amount'] = self::retrieve('mc_gross', 'Money', 'POST', FALSE); $input['reasonCode'] = self::retrieve('ReasonCode', 'String', 'POST', FALSE); - $billingID = $ids['billing']; $lookup = [ "first_name" => 'first_name', "last_name" => 'last_name', diff --git a/civicrm/CRM/Core/Payment/PayflowPro.php b/civicrm/CRM/Core/Payment/PayflowPro.php index 1f5b76933676c06eb4b92ee553f6f7be2623bb41..9eef03f0e79d9e25cc9fbe78e945f8118e0a5567 100644 --- a/civicrm/CRM/Core/Payment/PayflowPro.php +++ b/civicrm/CRM/Core/Payment/PayflowPro.php @@ -9,13 +9,12 @@ +---------------------------------------------------------------------------+ */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * Class CRM_Core_Payment_PayflowPro. */ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { - // (not used, implicit in the API, might need to convert?) - const - CHARSET = 'UFT-8'; /** * Constructor @@ -49,7 +48,7 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { */ public function doDirectPayment(&$params) { if (!defined('CURLOPT_SSLCERT')) { - throw new CRM_Core_Exception(ts('Payflow Pro requires curl with SSL support')); + throw new PaymentProcessorException(ts('Payflow Pro requires curl with SSL support')); } /* @@ -248,7 +247,7 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { * Check to see if we have a duplicate before we send */ if ($this->checkDupe($params['invoiceID'], CRM_Utils_Array::value('contributionID', $params))) { - return self::errorExit(9003, 'It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); + throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9003); } // ie. url at payment processor to submit to. @@ -259,9 +258,9 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { /* * Payment successfully sent to gateway - process the response now */ - $result = strstr($responseData, "RESULT"); + $result = strstr($responseData, 'RESULT'); if (empty($result)) { - return self::errorExit(9016, "No RESULT code from PayPal."); + throw new PaymentProcessorException('No RESULT code from PayPal.', 9016); } $nvpArray = []; @@ -312,47 +311,26 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { return $params; case 1: - return self::errorExit(9008, "There is a payment processor configuration problem. This is usually due to invalid account information or ip restrictions on the account. You can verify ip restriction by logging // into Manager. See Service Settings >> Allowed IP Addresses. "); + throw new PaymentProcessorException('There is a payment processor configuration problem. This is usually due to invalid account information or ip restrictions on the account. You can verify ip restriction by logging // into Manager. See Service Settings >> Allowed IP Addresses. ', 9003); case 12: // Hard decline from bank. - return self::errorExit(9009, "Your transaction was declined "); + throw new PaymentProcessorException('Your transaction was declined ', 9009); case 13: // Voice authorization required. - return self::errorExit(9010, "Your Transaction is pending. Contact Customer Service to complete your order."); + throw new PaymentProcessorException('Your Transaction is pending. Contact Customer Service to complete your order.', 9010); case 23: // Issue with credit card number or expiration date. - return self::errorExit(9011, "Invalid credit card information. Please re-enter."); + throw new PaymentProcessorException('Invalid credit card information. Please re-enter.', 9011); case 26: - return self::errorExit(9012, "You have not configured your payment processor with the correct credentials. Make sure you have provided both the <vendor> and the <user> variables "); + throw new PaymentProcessorException('You have not configured your payment processor with the correct credentials. Make sure you have provided both the <vendor> and the <user> variables ', 9012); default: - return self::errorExit(9013, "Error - from payment processor: [" . $result_code . " " . $nvpArray['RESPMSG'] . "] "); - } - - return self::errorExit(9014, "Check the code - all transactions should have been headed off before they got here. Something slipped through the net"); - } - - /** - * Produces error message and returns from class - * - * @param null $errorCode - * @param null $errorMessage - * - * @return object - */ - public function &errorExit($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - if ($errorCode) { - $e->push($errorCode, 0, NULL, $errorMessage); - } - else { - $e->push(9000, 0, NULL, 'Unknown System Error.'); + throw new PaymentProcessorException('Error - from payment processor: [' . $result_code . " " . $nvpArray['RESPMSG'] . "] ", 9013); } - return $e; } /** @@ -495,7 +473,7 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { } } if ($responseHeaders['http_code'] != 200) { - return self::errorExit(9015, "Error connecting to the Payflow Pro API server."); + throw new PaymentProcessorException('Error connecting to the Payflow Pro API server.', 9015); } /* @@ -520,14 +498,13 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { $errorDesc = "Connection to payment gateway failed"; } if ($errorNum = 60) { - return self::errorExit($errorNum, "Curl error - " . $errorDesc . - " Try this link for more information http://curl.haxx.se/d - ocs/sslcerts.html" - ); + throw new PaymentProcessorException('Curl error - ' . $errorDesc . + ' Try this link for more information http://curl.haxx.se/d + ocs/sslcerts.html', $errorNum); } - return self::errorExit($errorNum, "Curl error - " . $errorDesc . - " processor response = " . $processorResponse + throw new PaymentProcessorException("Curl error - " . $errorDesc . + " processor response = " . $processorResponse, $errorNum ); } @@ -539,8 +516,8 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { */ if (($responseData === FALSE) || (strlen($responseData) == 0)) { curl_close($ch); - return self::errorExit(9006, "Error: Connection to payment gateway failed - no data - returned. Gateway url set to $submiturl"); + throw new PaymentProcessorException("Error: Connection to payment gateway failed - no data + returned. Gateway url set to $submiturl", 9006); } /* @@ -548,7 +525,7 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { */ if (empty($responseData)) { curl_close($ch); - return self::errorExit(9007, "Error: No data returned from payment gateway."); + throw new PaymentProcessorException('Error: No data returned from payment gateway.', 9007); } /* diff --git a/civicrm/CRM/Core/Payment/ProcessorForm.php b/civicrm/CRM/Core/Payment/ProcessorForm.php index 3f927557b0bd819fb2d4570d931dfd7f1bd21710..1649fa333a13808506041219b25f3fdbaef3ce52 100644 --- a/civicrm/CRM/Core/Payment/ProcessorForm.php +++ b/civicrm/CRM/Core/Payment/ProcessorForm.php @@ -139,7 +139,7 @@ class CRM_Core_Payment_ProcessorForm { if (!empty($processorId)) { $form->addElement('hidden', 'hidden_processor', 1); } - CRM_Core_Payment_Form::buildPaymentForm($form, $form->_paymentProcessor, $billing_profile_id, $form->isBackOffice, $form->paymentInstrumentID); + CRM_Core_Payment_Form::buildPaymentForm($form, $form->_paymentProcessor, $billing_profile_id, $form->isBackOffice, $form->paymentInstrumentID ?? NULL); } } diff --git a/civicrm/CRM/Core/Payment/Realex.php b/civicrm/CRM/Core/Payment/Realex.php index 610b101cbdb6e251f8c353bbced38b378c7e1ba1..700e43cb11841ee3ae907e0cde27ae267c781cdc 100644 --- a/civicrm/CRM/Core/Payment/Realex.php +++ b/civicrm/CRM/Core/Payment/Realex.php @@ -23,7 +23,6 @@ +--------------------------------------------------------------------+ */ - /* * Copyright (C) 2009 * Licensed to CiviCRM under the Academic Free License version 3.0. @@ -31,16 +30,17 @@ * Written and contributed by Kirkdesigns (http://www.kirkdesigns.co.uk) */ +use Civi\Payment\Exception\PaymentProcessorException; + /** * * @package CRM * @author Tom Kirkpatrick <tkp@kirkdesigns.co.uk> - * $Id$ */ class CRM_Core_Payment_Realex extends CRM_Core_Payment { const AUTH_APPROVED = '00'; - protected $_mode = NULL; + protected $_mode; protected $_params = []; @@ -50,9 +50,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { * @param string $mode * The mode of operation: live or test. * - * @param $paymentProcessor - * - * @return \CRM_Core_Payment_Realex + * @param array $paymentProcessor */ public function __construct($mode, &$paymentProcessor) { $this->_mode = $mode; @@ -75,24 +73,22 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { * * @return array * the result in a nice formatted array (or an error object) + * + * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function doDirectPayment(&$params) { if (!defined('CURLOPT_SSLCERT')) { - return self::error(9001, ts('RealAuth requires curl with SSL support')); + throw new PaymentProcessorException(ts('RealAuth requires curl with SSL support'), 9001); } $result = $this->setRealexFields($params); - if ($result !== TRUE) { - return $result; - } - /********************************************************** * Check to see if we have a duplicate before we send **********************************************************/ if ($this->checkDupe($params['invoiceID'], CRM_Utils_Array::value('contributionID', $params))) { - return self::error(9004, ts('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from Authorize.net. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.')); + throw new PaymentProcessorException(ts('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from Authorize.net. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'), 9004); } // Create sha1 hash for request @@ -135,7 +131,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { $submit = curl_init($this->_paymentProcessor['url_site']); if (!$submit) { - return self::error(9002, ts('Could not initiate connection to payment gateway')); + throw new PaymentProcessorException(ts('Could not initiate connection to payment gateway'), 9002); } curl_setopt($submit, CURLOPT_HTTPHEADER, ['SOAPAction: ""']); @@ -155,7 +151,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { $response_xml = curl_exec($submit); if (!$response_xml) { - return self::error(curl_errno($submit), curl_error($submit)); + throw new PaymentProcessorException(curl_error($submit), curl_errno($submit)); } curl_close($submit); @@ -167,7 +163,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { // Parse the response xml $xml_parser = xml_parser_create(); if (!xml_parse($xml_parser, $response_xml)) { - return self::error(9003, 'XML Error'); + throw new PaymentProcessorException('XML Error', 9003); } $response = $this->xml_parse_into_assoc($response_xml); @@ -178,19 +174,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { // Return an error if authentication was not successful if ($response['RESULT'] !== self::AUTH_APPROVED) { - return self::error($response['RESULT'], ' ' . $response['MESSAGE']); - } - - // Check the response hash - $hashme = "{$this->_getParam('timestamp')}.{$this->_getParam('merchant_ref')}.{$this->_getParam('order_id')}.{$response['RESULT']}.{$response['MESSAGE']}.{$response['PASREF']}.{$response['AUTHCODE']}"; - $sha1hash = sha1($hashme); - $hashme = "$sha1hash.{$this->_getParam('secret')}"; - $sha1hash = sha1($hashme); - - if ($response['SHA1HASH'] != $sha1hash) { - // FIXME: Need to actually check this - I couldn't get the - // hashes to match so I'm commenting out for now' - // return self::error( 9001, "Hash error, please report this to the webmaster" ); + throw new PaymentProcessorException($this->getDisplayError($response['RESULT'], ' ' . $response['MESSAGE'])); } // FIXME: We are using the trxn_result_code column to store all these extra details since there @@ -253,7 +237,8 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { } /** - * Private helper for xml_parse_into_assoc, to recusively parsing the result + * Private helper for xml_parse_into_assoc, to recursively parsing the result. + * * @param $input * @param int $depth * @@ -293,11 +278,11 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { * * @param array $params * - * @return bool + * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function setRealexFields(&$params) { if ((int) $params['amount'] <= 0) { - return self::error(9001, ts('Amount must be positive')); + throw new PaymentProcessorException(ts('Amount must be positive'), 9001); } // format amount to be in smallest possible units @@ -334,7 +319,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { break; default: - return self::error(9001, ts('Credit card type not supported by Realex:') . ' ' . $params['credit_card_type']); + throw new PaymentProcessorException(ts('Credit card type not supported by Realex:') . ' ' . $params['credit_card_type'], 9001); } // get the card holder name - cater cor customized billing forms @@ -360,11 +345,9 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { $this->_setParam('varref', $params['contributionType_name']); $comment = $params['description'] . ' (page id:' . $params['contributionPageID'] . ')'; $this->_setParam('comments', $comment); - //$this->_setParam('currency', $params['currencyID']); // set the currency to the default which can be overrided. - $config = CRM_Core_Config::singleton(); - $this->_setParam('currency', $config->defaultCurrency); + $this->_setParam('currency', CRM_Core_Config::singleton()->defaultCurrency); // Format the expiry date to MMYY $expmonth = (string) $params['month']; @@ -382,10 +365,8 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { } // Create timestamp - $timestamp = strftime("%Y%m%d%H%M%S"); + $timestamp = strftime('%Y%m%d%H%M%S'); $this->_setParam('timestamp', $timestamp); - - return TRUE; } /** @@ -402,9 +383,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { if (isset($this->_params[$field])) { return $this->_params[$field]; } - else { - return ''; - } + return ''; } /** @@ -413,50 +392,12 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { * * @param string $field * @param mixed $value - * - * @return bool - * false if value is not a scalar, true if successful */ public function _setParam($field, $value) { if (!is_scalar($value)) { - return FALSE; - } - else { - $this->_params[$field] = $value; + return; } - } - - /** - * @param null $errorCode - * @param null $errorMessage - * - * @return object - */ - public function &error($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - - if ($errorCode) { - if ($errorCode == '101' || $errorCode == '102') { - $display_error = ts('Card declined by bank. Please try with a different card.'); - } - elseif ($errorCode == '103') { - $display_error = ts('Card reported lost or stolen. This incident will be reported.'); - } - elseif ($errorCode == '501') { - $display_error = ts("It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt for this transaction. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator."); - } - elseif ($errorCode == '509') { - $display_error = $errorMessage; - } - else { - $display_error = ts('We were unable to process your payment at this time. Please try again later.'); - } - $e->push($errorCode, 0, NULL, $display_error); - } - else { - $e->push(9001, 0, NULL, ts('We were unable to process your payment at this time. Please try again later.')); - } - return $e; + $this->_params[$field] = $value; } /** @@ -478,9 +419,34 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { if (!empty($error)) { return implode('<p>', $error); } + return NULL; + } + + /** + * Get the error to display. + * + * @param string $errorCode + * @param string $errorMessage + * + * @return string + */ + protected function getDisplayError($errorCode, $errorMessage): string { + if ($errorCode === '101' || $errorCode === '102') { + $display_error = ts('Card declined by bank. Please try with a different card.'); + } + elseif ($errorCode === '103') { + $display_error = ts('Card reported lost or stolen. This incident will be reported.'); + } + elseif ($errorCode === '501') { + $display_error = ts('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt for this transaction. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); + } + elseif ($errorCode === '509') { + $display_error = $errorMessage; + } else { - return NULL; + $display_error = ts('We were unable to process your payment at this time. Please try again later.'); } + return $display_error; } } diff --git a/civicrm/CRM/Core/Payment/eWAY.php b/civicrm/CRM/Core/Payment/eWAY.php index bc6710ae8d5f3207f3e2e1deb16965c3edb12bae..8a7f4f639bea4ee5bf5ea7bc675188eb0dde076d 100644 --- a/civicrm/CRM/Core/Payment/eWAY.php +++ b/civicrm/CRM/Core/Payment/eWAY.php @@ -23,7 +23,6 @@ +--------------------------------------------------------------------+ */ - /* +--------------------------------------------------------------------+ | eWAY Core Payment Module for CiviCRM version 5 & 1.9 | @@ -91,6 +90,8 @@ * ----------------------------------------------------------------------------------------------- */ +use Civi\Payment\Exception\PaymentProcessorException; + // require Standard eWAY API libraries require_once 'eWAY/eWAY_GatewayRequest.php'; require_once 'eWAY/eWAY_GatewayResponse.php'; @@ -99,8 +100,6 @@ require_once 'eWAY/eWAY_GatewayResponse.php'; * Class CRM_Core_Payment_eWAY. */ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { - // (not used, implicit in the API, might need to convert?) - const CHARSET = 'UTF-8'; /** * ******************************************************* @@ -148,13 +147,13 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { $eWAYRequest = new GatewayRequest(); if (($eWAYRequest == NULL) || (!($eWAYRequest instanceof GatewayRequest))) { - return self::errorExit(9001, "Error: Unable to create eWAY Request object."); + throw new PaymentProcessorException('Error: Unable to create eWAY Request object.', 9001); } $eWAYResponse = new GatewayResponse(); if (($eWAYResponse == NULL) || (!($eWAYResponse instanceof GatewayResponse))) { - return self::errorExit(9002, "Error: Unable to create eWAY Response object."); + throw new PaymentProcessorException(9002, 'Error: Unable to create eWAY Response object.', 9002); } /* @@ -172,9 +171,6 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { $fullAddress = $params['street_address'] . ", " . $params['city'] . ", " . $params['state_province'] . "."; $expireYear = substr($params['year'], 2, 2); $expireMonth = sprintf('%02d', (int) $params['month']); - // CiviCRM V1.9 - Picks up reasonable description - //$description = $params['amount_level']; - // CiviCRM V2.0 - Picks up description $description = $params['description']; $txtOptions = ""; @@ -255,7 +251,7 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { // Check to see if we have a duplicate before we send //---------------------------------------------------------------------------------------------------- if ($this->checkDupe($params['invoiceID'], CRM_Utils_Array::value('contributionID', $params))) { - return self::errorExit(9003, 'It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from eWAY. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.'); + throw new PaymentProcessorException('It appears that this transaction is a duplicate. Have you already submitted the form once? If so there may have been a connection problem. Check your email for a receipt from eWAY. If you do not receive a receipt within 2 hours you can try your transaction again. If you continue to have problems please contact the site administrator.', 9003); } //---------------------------------------------------------------------------------------------------- @@ -266,7 +262,7 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { $submit = curl_init($gateway_URL); if (!$submit) { - return self::errorExit(9004, 'Could not initiate connection to payment gateway'); + throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9004); } curl_setopt($submit, CURLOPT_POST, TRUE); @@ -302,10 +298,10 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { // Paranoia - in the unlikley event that 'curl' error fails if (strlen($errorDesc) == 0) { - $errorDesc = "Connection to eWAY payment gateway failed"; + $errorDesc = 'Connection to eWAY payment gateway failed'; } - return self::errorExit($errorNum, $errorDesc); + throw new PaymentProcessorException($errorDesc, $errorNum); } //---------------------------------------------------------------------------------------------------- @@ -315,14 +311,14 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { // any reason, the return value will be the boolean false. //---------------------------------------------------------------------------------------------------- if (($responseData === FALSE) || (strlen($responseData) == 0)) { - return self::errorExit(9006, "Error: Connection to payment gateway failed - no data returned."); + throw new PaymentProcessorException('Error: Connection to payment gateway failed - no data returned.', 9006); } //---------------------------------------------------------------------------------------------------- // If gateway returned no data - tell 'em and bail out //---------------------------------------------------------------------------------------------------- if (empty($responseData)) { - return self::errorExit(9007, "Error: No data returned from payment gateway."); + throw new PaymentProcessorException('Error: No data returned from payment gateway.', 9007); } //---------------------------------------------------------------------------------------------------- @@ -341,59 +337,21 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { if (self::isError($eWAYResponse)) { $eWayTrxnError = $eWAYResponse->Error(); CRM_Core_Error::debug_var('eWay Error', $eWayTrxnError, TRUE, TRUE); - if (substr($eWayTrxnError, 0, 6) == "Error:") { - return self::errorExit(9008, $eWayTrxnError); + if (substr($eWayTrxnError, 0, 6) === 'Error:') { + throw new PaymentProcessorException($eWayTrxnError, 9008); } $eWayErrorCode = substr($eWayTrxnError, 0, 2); $eWayErrorDesc = substr($eWayTrxnError, 3); - return self::errorExit(9008, "Error: [" . $eWayErrorCode . "] - " . $eWayErrorDesc . "."); - } - - //----------------------------------------------------------------------------------------------------- - // Cross-Check - the unique 'TrxnReference' we sent out should match the just received 'TrxnReference' - // - // PLEASE NOTE: If this occurs (which is highly unlikely) its a serious error as it would mean we have - // received an OK status from eWAY, but their Gateway has not returned the correct unique - // token - ie something is broken, BUT money has been taken from the client's account, - // so we can't very well error-out as CiviCRM will then not process the registration. - // There is an error message commented out here but my preferred response to this unlikley - // possibility is to email 'support@eWAY.com.au' - //----------------------------------------------------------------------------------------------------- - $eWayTrxnReference_OUT = $eWAYRequest->GetTransactionNumber(); - $eWayTrxnReference_IN = $eWAYResponse->InvoiceReference(); - - if ($eWayTrxnReference_IN != $eWayTrxnReference_OUT) { - // return self::errorExit( 9009, "Error: Unique Trxn code was not returned by eWAY Gateway. This is extremely unusual! Please contact the administrator of this site immediately with details of this transaction."); - - } - - /* - //---------------------------------------------------------------------------------------------------- - // Test mode always returns trxn_id = 0 - so we fix that here - // - // NOTE: This code was taken from the AuthorizeNet payment processor, however it now appears - // unnecessary for the eWAY gateway - Left here in case it proves useful - //---------------------------------------------------------------------------------------------------- - if ( $this->_mode == 'test' ) { - $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'test%'"; - $p = array( ); - $trxn_id = strval( CRM_Core_Dao::singleValueQuery( $query, $p ) ); - $trxn_id = str_replace( 'test', '', $trxn_id ); - $trxn_id = intval($trxn_id) + 1; - $params['trxn_id'] = sprintf('test%08d', $trxn_id); - } - else { - $params['trxn_id'] = $eWAYResponse->TransactionNumber(); + throw new PaymentProcessorException('Error: [' . $eWayErrorCode . "] - " . $eWayErrorDesc . '.', 9008); } - */ //============= // Success ! //============= $beaglestatus = $eWAYResponse->BeagleScore(); if (!empty($beaglestatus)) { - $beaglestatus = ": " . $beaglestatus; + $beaglestatus = ': ' . $beaglestatus; } $params['trxn_result_code'] = $eWAYResponse->Status() . $beaglestatus; $params['gross_amount'] = $eWAYResponse->Amount(); @@ -402,8 +360,6 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { return $params; } - // end function doDirectPayment - /** * Checks the eWAY response status - returning a boolean false if status != 'true'. * @@ -414,47 +370,20 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { public function isError(&$response) { $status = $response->Status(); - if ((stripos($status, "true")) === FALSE) { + if ((stripos($status, 'true')) === FALSE) { return TRUE; } return FALSE; } /** - * Produces error message and returns from class. - * - * @param int $errorCode - * @param string $errorMessage - * - * @return object - */ - public function &errorExit($errorCode = NULL, $errorMessage = NULL) { - $e = CRM_Core_Error::singleton(); - - if ($errorCode) { - $e->push($errorCode, 0, NULL, $errorMessage); - } - else { - $e->push(9000, 0, NULL, 'Unknown System Error.'); - } - return $e; - } - - /** - * ***************************************************************************************** * This public function checks to see if we have the right processor config values set * * NOTE: Called by Events and Contribute to check config params are set prior to trying * register any credit card details * * @return null|string - * @internal param string $mode the mode we are operating in (live or test) - not used but could be - * to check that the 'test' mode CustomerID was equal to '87654321' and that the URL was - * set to https://www.eway.com.au/gateway_cvn/xmltest/TestPage.asp - * - * returns string $errorMsg if any errors found - null if OK - * - * ***************************************************************************************** + * returns string $errorMsg if any errors found - null if OK */ public function checkConfig() { $errorMsg = []; @@ -470,10 +399,7 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { if (!empty($errorMsg)) { return implode('<p>', $errorMsg); } - else { - return NULL; - } + return NULL; } } -// end class CRM_Core_Payment_eWAY diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index 08c978af389b3deb05f32767af0dee3265ae826d..2c71a406defaeeb5851d23eaea4e1062330d2b20 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -508,7 +508,7 @@ class CRM_Core_Permission { public static function checkMenuItem(&$item) { if (!array_key_exists('access_callback', $item)) { CRM_Core_Error::backtrace(); - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Missing Access Callback key in menu item'); } // if component_id is present, ensure it is enabled diff --git a/civicrm/CRM/Core/PseudoConstant.php b/civicrm/CRM/Core/PseudoConstant.php index e158ee21f0a8ab0086ffecd1e897c1fb84a79f0e..2fdc708682357c399b1e6ca87c1831a7150512ee 100644 --- a/civicrm/CRM/Core/PseudoConstant.php +++ b/civicrm/CRM/Core/PseudoConstant.php @@ -1376,19 +1376,21 @@ WHERE id = %1 * The static array option values is returned * * - * @param bool $optionGroupName - * Get All Option Group values- default is to get only active ones. + * @param string $optionGroupName + * Name of option group * * @param int $id - * @param null $condition + * @param string $condition + * @param string $column + * Whether to return 'name' or 'label' * * @return array - * array reference of all Option Group Name + * array reference of all Option Values */ - public static function accountOptionValues($optionGroupName, $id = NULL, $condition = NULL) { - $cacheKey = $optionGroupName . '_' . $condition; + public static function accountOptionValues($optionGroupName, $id = NULL, $condition = NULL, $column = 'label') { + $cacheKey = $optionGroupName . '_' . $condition . '_' . $column; if (empty(self::$accountOptionValues[$cacheKey])) { - self::$accountOptionValues[$cacheKey] = CRM_Core_OptionGroup::values($optionGroupName, FALSE, FALSE, FALSE, $condition); + self::$accountOptionValues[$cacheKey] = CRM_Core_OptionGroup::values($optionGroupName, FALSE, FALSE, FALSE, $condition, $column); } if ($id) { return self::$accountOptionValues[$cacheKey][$id] ?? NULL; @@ -1551,7 +1553,7 @@ WHERE id = %1 $output = []; $query = "$select $from"; if ($wheres) { - $query .= " WHERE " . implode($wheres, ' AND '); + $query .= " WHERE " . implode(' AND ', $wheres); } $query .= ' ' . $order; $dao = CRM_Core_DAO::executeQuery($query, $queryParams); diff --git a/civicrm/CRM/Core/Region.php b/civicrm/CRM/Core/Region.php index 5d101d1d70ff0cc9e682fe5044c6a951cb2dd743..242387ca65af1109ac8cffd45e6d5856d43bd221 100644 --- a/civicrm/CRM/Core/Region.php +++ b/civicrm/CRM/Core/Region.php @@ -223,8 +223,8 @@ class CRM_Core_Region { break; default: - require_once 'CRM/Core/Error.php'; - CRM_Core_Error::fatal(ts('Snippet type %1 is unrecognized', + require_once 'CRM/Core/Exception.php'; + throw new CRM_Core_Exception(ts('Snippet type %1 is unrecognized', [1 => $snippet['type']])); } } diff --git a/civicrm/CRM/Core/Resources.php b/civicrm/CRM/Core/Resources.php index 581447c2b638f076ec39d8b293117bde9aba83fe..40dd3b09782ff88268e34fcffeddc28af162ed90 100644 --- a/civicrm/CRM/Core/Resources.php +++ b/civicrm/CRM/Core/Resources.php @@ -258,7 +258,7 @@ class CRM_Core_Resources { * Access var from javascript: * CRM.vars.myNamespace.foo // "bar" * - * @see http://wiki.civicrm.org/confluence/display/CRMDOC/Javascript+Reference + * @see https://docs.civicrm.org/dev/en/latest/standards/javascript/ * * @param string $nameSpace * Usually the name of your extension. diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index b2c515867e89ed7db981754c3165b46a974f454f..02d654549993febffbd88ba6e8b56fb5629ddec3 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -1172,6 +1172,9 @@ class CRM_Core_SelectValues { return $ret; } + /** + * @return string[] + */ public static function fieldSerialization() { return [ CRM_Core_DAO::SERIALIZE_SEPARATOR_BOOKEND => 'separator_bookend', @@ -1182,4 +1185,15 @@ class CRM_Core_SelectValues { ]; } + /** + * @return array + */ + public static function navigationMenuSeparator() { + return [ + ts('None'), + ts('After menu element'), + ts('Before menu element'), + ]; + } + } diff --git a/civicrm/CRM/Core/Selector/Base.php b/civicrm/CRM/Core/Selector/Base.php index e80d6fcd3eb8033beeb1ebdb16ef39d5f8424732..268f0e584206db6ebaa5c90e200b7421e27d11b6 100644 --- a/civicrm/CRM/Core/Selector/Base.php +++ b/civicrm/CRM/Core/Selector/Base.php @@ -123,9 +123,6 @@ class CRM_Core_Selector_Base { unset($header); } } - if ($firstElementNotFound) { - // CRM_Core_Error::fatal( "Could not find a valid sort directional element" ); - } } return $this->_order; } diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php index eaa9cac86d86a464fd370f4fc229ec96a247f485..49f10f7a215d08559eecbbacd4eadea8717039af 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php @@ -25,12 +25,11 @@ * @param string $currency * The (optional) currency. * - * @param null $format - * @param bool $onlyNumber - * * @return string * formatted monetary amount + * + * @throws \CRM_Core_Exception */ -function smarty_modifier_crmMoney($amount, $currency = NULL, $format = NULL, $onlyNumber = FALSE) { - return CRM_Utils_Money::format($amount, $currency, $format, $onlyNumber); +function smarty_modifier_crmMoney($amount, $currency = NULL) { + return CRM_Utils_Money::format($amount, $currency); } diff --git a/civicrm/CRM/Custom/Form/ChangeFieldType.php b/civicrm/CRM/Custom/Form/ChangeFieldType.php index c26c5c04f5537e77ea49d1df06e42f36b461185d..90d87917edaaf6f9ab1673d000f398b5d3a31e0d 100644 --- a/civicrm/CRM/Custom/Form/ChangeFieldType.php +++ b/civicrm/CRM/Custom/Form/ChangeFieldType.php @@ -61,7 +61,7 @@ class CRM_Custom_Form_ChangeFieldType extends CRM_Core_Form { ); if (empty($this->_values) || empty($this->_htmlTypeTransitions)) { - CRM_Core_Error::fatal(ts("Invalid custom field or can't change input type of this custom field.")); + CRM_Core_Error::statusBounce(ts("Invalid custom field or can't change input type of this custom field.")); } $url = CRM_Utils_System::url('civicrm/admin/custom/group/field/update', diff --git a/civicrm/CRM/Custom/Form/Field.php b/civicrm/CRM/Custom/Form/Field.php index e61d23ed803ce27ae2468052c1eb234dfd82add6..a2ee643cbe3f9a5bd84c9a35ee996a610a7ac5b5 100644 --- a/civicrm/CRM/Custom/Form/Field.php +++ b/civicrm/CRM/Custom/Form/Field.php @@ -121,7 +121,7 @@ class CRM_Custom_Form_Field extends CRM_Core_Form { } if ($isReserved = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_gid, 'is_reserved', 'id')) { - CRM_Core_Error::fatal("You cannot add or edit fields in a reserved custom field-set."); + CRM_Core_Error::statusBounce("You cannot add or edit fields in a reserved custom field-set."); } if ($this->_gid) { @@ -618,7 +618,7 @@ class CRM_Custom_Form_Field extends CRM_Core_Form { //checks the given custom field name doesnot start with digit if (!empty($title)) { // gives the ascii value - $asciiValue = ord($title{0}); + $asciiValue = ord($title[0]); if ($asciiValue >= 48 && $asciiValue <= 57) { $errors['label'] = ts("Name cannot not start with a digit"); } diff --git a/civicrm/CRM/Custom/Form/Group.php b/civicrm/CRM/Custom/Form/Group.php index 10c582c32053e6e34447ade4423c0cd3f4ca58f0..dc8836b7037dc91664d16b4ac92c9384b994ddcc 100644 --- a/civicrm/CRM/Custom/Form/Group.php +++ b/civicrm/CRM/Custom/Form/Group.php @@ -50,11 +50,13 @@ class CRM_Custom_Form_Group extends CRM_Core_Form { * @return void */ public function preProcess() { + Civi::resources()->addScriptFile('civicrm', 'js/jquery/jquery.crmIconPicker.js'); + // current set id $this->_id = $this->get('id'); if ($this->_id && $isReserved = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_id, 'is_reserved', 'id')) { - CRM_Core_Error::fatal("You cannot edit the settings of a reserved custom field-set."); + CRM_Core_Error::statusBounce("You cannot edit the settings of a reserved custom field-set."); } // setting title for html page if ($this->_action == CRM_Core_Action::UPDATE) { @@ -297,6 +299,8 @@ class CRM_Custom_Form_Group extends CRM_Core_Form { // display style $this->add('select', 'style', ts('Display Style'), CRM_Core_SelectValues::customGroupStyle()); + $this->add('text', 'icon', ts('Tab icon'), ['class' => 'crm-icon-picker', 'allowClear' => TRUE]); + // is this set collapsed or expanded ? $this->addElement('advcheckbox', 'collapse_display', ts('Collapse this set on initial display')); diff --git a/civicrm/CRM/Custom/Form/Option.php b/civicrm/CRM/Custom/Form/Option.php index 14e7b509e16a9455650a1db786c62fbc02636033..004e1d51a335a5dbfd54e88024c879661fea435f 100644 --- a/civicrm/CRM/Custom/Form/Option.php +++ b/civicrm/CRM/Custom/Form/Option.php @@ -76,7 +76,7 @@ class CRM_Custom_Form_Option extends CRM_Core_Form { } if ($isReserved = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_gid, 'is_reserved', 'id')) { - CRM_Core_Error::fatal("You cannot add or edit muliple choice options in a reserved custom field-set."); + CRM_Core_Error::statusBounce("You cannot add or edit muliple choice options in a reserved custom field-set."); } $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); @@ -387,11 +387,10 @@ SELECT count(*) // set values for custom field properties and save $customOption = new CRM_Core_DAO_OptionValue(); $customOption->label = $params['label']; - $customOption->name = CRM_Utils_String::titleToVar($params['label']); $customOption->weight = $params['weight']; $customOption->description = $params['description']; $customOption->value = $params['value']; - $customOption->is_active = CRM_Utils_Array::value('is_active', $params, FALSE); + $customOption->is_active = $params['is_active'] ?? FALSE; $oldWeight = NULL; if ($this->_id) { @@ -399,6 +398,9 @@ SELECT count(*) CRM_Core_BAO_CustomOption::updateCustomValues($params); $oldWeight = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'weight', 'id'); } + else { + $customOption->name = CRM_Utils_String::titleToVar($params['label']); + } $fieldValues = ['option_group_id' => $this->_optionGroupID]; $customOption->weight diff --git a/civicrm/CRM/Custom/Import/Parser.php b/civicrm/CRM/Custom/Import/Parser.php index 09b3258a5ebad0677d6956a1b482212028c2ac4f..c71018bb7956225ce9e31237b2699556b4d26faa 100644 --- a/civicrm/CRM/Custom/Import/Parser.php +++ b/civicrm/CRM/Custom/Import/Parser.php @@ -68,7 +68,7 @@ abstract class CRM_Custom_Import_Parser extends CRM_Contact_Import_Parser { $onDuplicate = self::DUPLICATE_SKIP ) { if (!is_array($fileName)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine import file'); } $fileName = $fileName['name']; diff --git a/civicrm/CRM/Custom/Page/Field.php b/civicrm/CRM/Custom/Page/Field.php index 708b342a24e53a832f09d1fd6eaf6c0d27652121..d10a73dfa375fefea6e3a829ca2807702bbfb350 100644 --- a/civicrm/CRM/Custom/Page/Field.php +++ b/civicrm/CRM/Custom/Page/Field.php @@ -226,7 +226,7 @@ class CRM_Custom_Page_Field extends CRM_Core_Page { } if ($isReserved = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_gid, 'is_reserved', 'id')) { - CRM_Core_Error::fatal("You cannot add or edit fields in a reserved custom field-set."); + CRM_Core_Error::statusBounce("You cannot add or edit fields in a reserved custom field-set."); } $action = CRM_Utils_Request::retrieve('action', 'String', diff --git a/civicrm/CRM/Custom/Page/Option.php b/civicrm/CRM/Custom/Page/Option.php index a932fd36a5bf3057106c9a27c4cf25e5998f00f7..7c409c7d780a265f9cad63ac04867f6e4af3e6bf 100644 --- a/civicrm/CRM/Custom/Page/Option.php +++ b/civicrm/CRM/Custom/Page/Option.php @@ -213,7 +213,7 @@ WHERE option_group_id = %1"; ); if ($isReserved = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_gid, 'is_reserved', 'id')) { - CRM_Core_Error::fatal("You cannot add or edit multiple choice options in a reserved custom field-set."); + CRM_Core_Error::statusBounce("You cannot add or edit multiple choice options in a reserved custom field-set."); } $optionGroupId = $this->getOptionGroupId($this->_fid); diff --git a/civicrm/CRM/Cxn/CiviCxnHttp.php b/civicrm/CRM/Cxn/CiviCxnHttp.php index a972c7fd35d24b6f7128338d0440d06faf945df2..17aa4fb549c83f47b9df08c2c440bbd54e781cbd 100644 --- a/civicrm/CRM/Cxn/CiviCxnHttp.php +++ b/civicrm/CRM/Cxn/CiviCxnHttp.php @@ -107,7 +107,7 @@ class CRM_Cxn_CiviCxnHttp extends \Civi\Cxn\Rpc\Http\PhpHttp { $result['ssl'] = $caConfig->toStreamOptions(); } if (!$caConfig->isEnableSSL() && preg_match('/^https:/', $url)) { - CRM_Core_Error::fatal('Cannot fetch document - system does not support SSL'); + throw new CRM_Core_Exception('Cannot fetch document - system does not support SSL'); } return $result; diff --git a/civicrm/CRM/Cxn/DAO/Cxn.php b/civicrm/CRM/Cxn/DAO/Cxn.php index 564961788fb6127ba33a968b42e4dfb29de1b242..f8190512c98e19e7c76ebaf3e4e2451bd89ea091 100644 --- a/civicrm/CRM/Cxn/DAO/Cxn.php +++ b/civicrm/CRM/Cxn/DAO/Cxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Cxn/Cxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4a6988bcfcf1160fb982b75c4300aa9e) + * (GenCodeChecksum:bafb13cb7901c4f15b5348e2bf9a27b5) */ /** @@ -113,6 +113,13 @@ class CRM_Cxn_DAO_Cxn extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Cxns'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Dedupe/DAO/Exception.php b/civicrm/CRM/Dedupe/DAO/Exception.php index 58fe561aa6b00119e16189867e8ff0a200ad8852..2d479b45dac46473c0b6dc7551ac4201884a61bc 100644 --- a/civicrm/CRM/Dedupe/DAO/Exception.php +++ b/civicrm/CRM/Dedupe/DAO/Exception.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/Exception.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:10afa1aad75e26f85d255ed18d96f832) + * (GenCodeChecksum:ea7ca2395c6d2d927c35a7241d621cdd) */ /** @@ -57,6 +57,13 @@ class CRM_Dedupe_DAO_Exception extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Exceptions'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Dedupe/DAO/Rule.php b/civicrm/CRM/Dedupe/DAO/Rule.php index c9094cf6c44820e1df28896049ed28739168046f..df7521454ec10200eaaf3f26cd2203c1b8698835 100644 --- a/civicrm/CRM/Dedupe/DAO/Rule.php +++ b/civicrm/CRM/Dedupe/DAO/Rule.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/Rule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b3f2e306b0b0f057c03e2c4bb2706f4a) + * (GenCodeChecksum:e218ab6aaed8b58ef6dc189845a36755) */ /** @@ -78,6 +78,13 @@ class CRM_Dedupe_DAO_Rule extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Rules'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Dedupe/DAO/RuleGroup.php b/civicrm/CRM/Dedupe/DAO/RuleGroup.php index 8e052bcfa54a3249e9e4e2354a3ff93efcbd4e02..7caf59d70bd9375d206e97dfaae878ee842523ff 100644 --- a/civicrm/CRM/Dedupe/DAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/DAO/RuleGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Dedupe/RuleGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:bbe4b527311a3ecf35d86a81f7b57bac) + * (GenCodeChecksum:3c21b8b33d8d561b1104318fba0db930) */ /** @@ -85,6 +85,13 @@ class CRM_Dedupe_DAO_RuleGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Rule Groups'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php index 39f649765f55564baac92d19df3c41ae712f77f3..74669495b4e596984be8ff630f6bdf19f0b50194 100644 --- a/civicrm/CRM/Dedupe/Merger.php +++ b/civicrm/CRM/Dedupe/Merger.php @@ -22,7 +22,9 @@ class CRM_Dedupe_Merger { * FIXME: consider creating a common structure with cidRefs() and eidRefs() * FIXME: the sub-pages references by the URLs should * be loaded dynamically on the merge form instead + * * @return array + * @throws \CiviCRM_API3_Exception */ public static function relTables() { @@ -44,7 +46,7 @@ class CRM_Dedupe_Merger { 3 => '$ufid', ]); } - elseif ($config->userFramework == 'Joomla') { + elseif ($config->userFramework === 'Joomla') { $userRecordUrl = $config->userSystem->getVersion() > 1.5 ? $config->userFrameworkBaseURL . "index.php?option=com_users&view=user&task=user.edit&id=" . '%ufid' : $config->userFrameworkBaseURL . "index2.php?option=com_users&view=user&task=edit&id[]=" . '%ufid'; $title = ts('%1 User: %2; user id: %3', [ 1 => $config->userFramework, @@ -176,6 +178,7 @@ class CRM_Dedupe_Merger { * @param int $cid * * @return array + * @throws \CiviCRM_API3_Exception */ public static function getActiveRelTables($cid) { $cid = (int) $cid; @@ -305,7 +308,7 @@ class CRM_Dedupe_Merger { ]); foreach ($result['values'] as $custom) { $data['cidRefs'][$custom['table_name']] = ['entity_id']; - $urlSuffix = $custom['style'] == 'Tab' ? '&selectedChild=custom_' . $custom['id'] : ''; + $urlSuffix = $custom['style'] === 'Tab' ? '&selectedChild=custom_' . $custom['id'] : ''; $data['relTables']['rel_table_custom_' . $custom['id']] = [ 'title' => $custom['title'], 'tables' => [$custom['table_name']], @@ -422,14 +425,14 @@ INNER JOIN civicrm_participant participant ON ( participant.id = payment.partic if (array_key_exists($tableName, $tableOperations) && $tableOperations[$tableName]['add']) { break; } - if ($mode == 'add') { + if ($mode === 'add') { $sqls[] = " DELETE membership1.* FROM civicrm_membership membership1 INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = membership2.membership_type_id AND membership1.contact_id = {$mainId} AND membership2.contact_id = {$otherId} "; } - if ($mode == 'payment') { + if ($mode === 'payment') { $sqls[] = " DELETE contribution.* FROM civicrm_contribution contribution INNER JOIN civicrm_membership_payment payment ON payment.contribution_id = contribution.id @@ -615,9 +618,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m /** * Given a contact ID, will check if a record exists in given table. * - * @param $contactID - * @param $table - * @param $idField + * @param int $contactID + * @param string $table + * @param string $idField * Field where the contact's ID is stored in the table * * @return bool @@ -648,6 +651,8 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * Contact details. * * @return array + * + * @throws \CRM_Core_Exception */ public static function retrieveFields($main, $other) { $result = [ @@ -731,7 +736,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // explicitly set to NULL if not 1 or 0 as part of grandfathering out the mystical '2' value. $isSelected = NULL; } - $dupePairs = self::getDuplicatePairs($rgid, $gid, $reloadCacheIfEmpty, $batchLimit, $isSelected, ($mode == 'aggressive'), $criteria, $checkPermissions, $searchLimit); + $dupePairs = self::getDuplicatePairs($rgid, $gid, $reloadCacheIfEmpty, $batchLimit, $isSelected, ($mode === 'aggressive'), $criteria, $checkPermissions, $searchLimit); $cacheParams = [ 'cache_key_string' => self::getMergeCacheKeyString($rgid, $gid, $criteria, $checkPermissions, $searchLimit), @@ -751,12 +756,12 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * The join string to join prevnext cache on the dedupe table. */ public static function getJoinOnDedupeTable() { - return " + return ' LEFT JOIN civicrm_dedupe_exception de ON ( pn.entity_id1 = de.contact_id1 AND pn.entity_id2 = de.contact_id2 ) - "; + '; } /** @@ -767,7 +772,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @return string */ protected static function getWhereString($isSelected) { - $where = "de.id IS NULL"; + $where = 'de.id IS NULL'; if ($isSelected === 0 || $isSelected === 1) { $where .= " AND pn.is_selected = {$isSelected}"; } @@ -779,6 +784,8 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * * @param string $cacheKeyString * @param array $result + * + * @throws \CiviCRM_API3_Exception */ public static function updateMergeStats($cacheKeyString, $result = []) { // gather latest stats @@ -1002,7 +1009,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @return array */ public static function getLocationBlockInfo() { - $locationBlocks = [ + return [ 'address' => [ 'label' => 'Address', 'displayField' => 'display', @@ -1039,7 +1046,6 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m 'hasType' => 'website_type_id', ], ]; - return $locationBlocks; } /** @@ -1103,7 +1109,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $rows = $elements = $relTableElements = $migrationInfo = []; foreach ($compareFields['contact'] as $field) { - if ($field == 'contact_sub_type') { + if ($field === 'contact_sub_type') { // CRM-15681 don't display sub-types in UI continue; } @@ -1167,7 +1173,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $relTables[$name]['main_url'] = str_replace('%ufid', CRM_Core_BAO_UFMatch::getUFId($otherId), $relTables[$name]['url']); $relTables[$name]['other_url'] = str_replace('%ufid', CRM_Core_BAO_UFMatch::getUFId($otherId), $relTables[$name]['url']); } - if ($name == 'rel_table_memberships') { + if ($name === 'rel_table_memberships') { //Enable 'add new' checkbox if main contact does not contain any membership similar to duplicate contact. $attributes = ['checked' => 'checked']; $otherContactMemberships = CRM_Member_BAO_Membership::getAllContactMembership($otherId); @@ -1294,14 +1300,14 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m self::swapOutFieldsAffectedByQFZeroBug($migrationInfo); foreach ($migrationInfo as $key => $value) { - if (substr($key, 0, 12) == 'move_custom_' && $value != NULL) { + if (substr($key, 0, 12) === 'move_custom_' && $value != NULL) { $submitted[substr($key, 5)] = $value; $submittedCustomFields[] = substr($key, 12); } elseif (in_array(substr($key, 5), CRM_Dedupe_Merger::getContactFields()) && $value != NULL) { $submitted[substr($key, 5)] = $value; } - elseif (substr($key, 0, 15) == 'move_rel_table_' and $value == '1') { + elseif (substr($key, 0, 15) === 'move_rel_table_' and $value == '1') { $moveTables = array_merge($moveTables, $relTables[substr($key, 5)]['tables']); if (array_key_exists('operation', $migrationInfo)) { foreach ($relTables[substr($key, 5)]['tables'] as $table) { @@ -1311,7 +1317,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } } } - elseif (substr($key, 0, 15) == 'move_rel_table_' and $value == '0') { + elseif (substr($key, 0, 15) === 'move_rel_table_' and $value == '0') { $removeTables = array_merge($moveTables, $relTables[substr($key, 5)]['tables']); } } @@ -1488,6 +1494,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * add/update membership(s) to related contacts * * @param int $contactID + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function addMembershipToRealtedContacts($contactID) { $dao = new CRM_Member_DAO_Membership(); @@ -1708,7 +1717,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m */ public static function mergeLocations($mainId, $otherId, $migrationInfo) { foreach ($migrationInfo as $key => $value) { - $isLocationField = (substr($key, 0, 14) == 'move_location_' and $value != NULL); + $isLocationField = (substr($key, 0, 14) === 'move_location_' and $value != NULL); if (!$isLocationField) { continue; } @@ -1720,7 +1729,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // Ignore operation for websites // @todo Tidy this up $operation = 0; - if ($fieldName != 'website') { + if ($fieldName !== 'website') { $operation = $migrationInfo['location_blocks'][$fieldName][$fieldCount]['operation'] ?? NULL; } // default operation is overwrite. @@ -1899,7 +1908,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m protected static function swapOutFieldsAffectedByQFZeroBug(&$migrationInfo) { $qfZeroBug = 'e8cddb72-a257-11dc-b9cc-0016d3330ee9'; foreach ($migrationInfo as $key => &$value) { - if ($value == $qfZeroBug) { + if ($value === $qfZeroBug) { $value = '0'; } } @@ -1915,17 +1924,17 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * Goal is to move all custom field handling into 'move' functions on the various BAO * with an underlying DAO function. For custom fields it has been started on the BAO. * - * @param $mainId - * @param $key - * @param $cFields - * @param $submitted - * @param $value + * @param int $mainId + * @param string $key + * @param array $cFields + * @param array $submitted + * @param mixed $value * * @return array * @throws \CRM_Core_Exception */ protected static function processCustomFields($mainId, $key, $cFields, $submitted, $value) { - if (substr($key, 0, 7) == 'custom_') { + if (substr($key, 0, 7) === 'custom_') { $fid = (int) substr($key, 7); if (empty($cFields[$fid])) { return [$cFields, $submitted]; @@ -1955,7 +1964,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $existingValue = explode(CRM_Core_DAO::VALUE_SEPARATOR, $customfieldValues[$key]); if (is_array($existingValue) && !empty($existingValue)) { $mergeValue = $submittedCustomFields = []; - if ($value == 'null') { + if ($value === 'null') { // CRM-19074 if someone has deliberately chosen to overwrite with 'null', respect it. $submitted[$key] = $value; } @@ -2078,7 +2087,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m continue; } elseif ((in_array(substr($key, 5), CRM_Dedupe_Merger::getContactFields()) or - substr($key, 0, 12) == 'move_custom_' + substr($key, 0, 12) === 'move_custom_' ) and $val != NULL ) { // Rule: If both main-contact, and other-contact have a field with a @@ -2090,7 +2099,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // leaving that investigation as a @todo - until tests can be written. // Note the handling of this has test coverage - although the data-typing // of '0' feels flakey we have insurance. - || ($migrationInfo['rows'][$key]['main'] === '0' && substr($key, 0, 12) == 'move_custom_') + || ($migrationInfo['rows'][$key]['main'] === '0' && substr($key, 0, 12) === 'move_custom_') ) && $migrationInfo['rows'][$key]['main'] != $migrationInfo['rows'][$key]['other'] ) { @@ -2100,7 +2109,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $conflicts[$key] = NULL; } } - elseif (substr($key, 0, 14) == 'move_location_' and $val != NULL) { + elseif (substr($key, 0, 14) === 'move_location_' and $val != NULL) { $locField = explode('_', $key); $fieldName = $locField[2]; $fieldCount = $locField[3]; diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index 64b2f806ce08bdc0ec5bc9779e6c3e0355122611..d05b01176df3a5708800f61ecae73c57e1d70969 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -1496,7 +1496,7 @@ UPDATE civicrm_participant ]; if (is_a(CRM_Activity_BAO_Activity::create($activityParams), 'CRM_Core_Error')) { - CRM_Core_Error::fatal('Failed creating Activity for expiration mail'); + throw new CRM_Core_Exception('Failed creating Activity for expiration mail'); } } } diff --git a/civicrm/CRM/Event/BAO/ParticipantPayment.php b/civicrm/CRM/Event/BAO/ParticipantPayment.php index 106b2bbae3446b11c30da981080cca1c5302362c..754e146e4a8a179261494a6750ee9e9c5e639164 100644 --- a/civicrm/CRM/Event/BAO/ParticipantPayment.php +++ b/civicrm/CRM/Event/BAO/ParticipantPayment.php @@ -104,7 +104,7 @@ class CRM_Event_BAO_ParticipantPayment extends CRM_Event_DAO_ParticipantPayment } if (!$valid) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Cannot delete participant payment'); } if ($participantPayment->find(TRUE)) { diff --git a/civicrm/CRM/Event/Cart/BAO/Cart.php b/civicrm/CRM/Event/Cart/BAO/Cart.php index 1acabfe0a3bd7f167ba2f94711b32eaa0b574f5d..11111711547e4daf26aebaec86bee27a1ccecb6f 100644 --- a/civicrm/CRM/Event/Cart/BAO/Cart.php +++ b/civicrm/CRM/Event/Cart/BAO/Cart.php @@ -70,7 +70,7 @@ class CRM_Event_Cart_BAO_Cart extends CRM_Event_Cart_DAO_Cart { if (is_a($cart, 'CRM_Core_Error')) { $transaction->rollback(); - CRM_Core_Error::fatal(ts('There was an error creating an event cart')); + throw new CRM_Core_Exception(ts('There was an error creating an event cart')); } $transaction->commit(); @@ -324,7 +324,7 @@ class CRM_Event_Cart_BAO_Cart extends CRM_Event_Cart_DAO_Cart { public static function retrieve(&$params, &$values) { $cart = self::find_by_params($params); if ($cart === FALSE) { - CRM_Core_Error::fatal(ts('Could not find cart matching %1', [1 => var_export($params, TRUE)])); + throw new CRM_Core_Exception(ts('Could not find cart matching %1', [1 => var_export($params, TRUE)])); } CRM_Core_DAO::storeValues($cart, $values); return $values; diff --git a/civicrm/CRM/Event/Cart/BAO/EventInCart.php b/civicrm/CRM/Event/Cart/BAO/EventInCart.php index 7dd79ec72523cdc4d11cc1599d1d6dfb737e9bdd..abb9bb4ce6aefbd1fb179dd905133c07d44c9583 100644 --- a/civicrm/CRM/Event/Cart/BAO/EventInCart.php +++ b/civicrm/CRM/Event/Cart/BAO/EventInCart.php @@ -40,7 +40,7 @@ class CRM_Event_Cart_BAO_EventInCart extends CRM_Event_Cart_DAO_EventInCart impl if (is_a($event_in_cart, 'CRM_Core_Error')) { $transaction->rollback(); - CRM_Core_Error::fatal(ts('There was an error creating an event_in_cart')); + throw new CRM_Core_Exception(ts('There was an error creating an event_in_cart')); } $transaction->commit(); diff --git a/civicrm/CRM/Event/Cart/DAO/Cart.php b/civicrm/CRM/Event/Cart/DAO/Cart.php index 3e8f6e921951cfa27bd0b551fdee8f404591b2d7..4683add13d075e9cc592939c65552d26cc362063 100644 --- a/civicrm/CRM/Event/Cart/DAO/Cart.php +++ b/civicrm/CRM/Event/Cart/DAO/Cart.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Cart/Cart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c376a287f7b84fd652ab0dd532e3b0b9) + * (GenCodeChecksum:c0fdef43850965dce80a73e66caa3ceb) */ /** @@ -55,6 +55,13 @@ class CRM_Event_Cart_DAO_Cart extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Carts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Event/Cart/DAO/EventInCart.php b/civicrm/CRM/Event/Cart/DAO/EventInCart.php index 830f19ae8b0c188c1894c5bbd1bb2bb72508c0a0..e10ee7974f4ffdaf43dfbae6c4d4e02a77de9695 100644 --- a/civicrm/CRM/Event/Cart/DAO/EventInCart.php +++ b/civicrm/CRM/Event/Cart/DAO/EventInCart.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Cart/EventInCart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:154f4fcbd5c1b493a70714ca368b29bb) + * (GenCodeChecksum:a995a300028b34f7b866a41b2e2b96bf) */ /** @@ -57,6 +57,13 @@ class CRM_Event_Cart_DAO_EventInCart extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Event In Carts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Event/DAO/Event.php b/civicrm/CRM/Event/DAO/Event.php index 93367f1b99e2b9efa6336fd95b6160543e1c78b8..adcf39c5d7aa45f2865139a9bc5dc21aa72f9b5d 100644 --- a/civicrm/CRM/Event/DAO/Event.php +++ b/civicrm/CRM/Event/DAO/Event.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Event.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1ada5c2159a76a51000df057a7681463) + * (GenCodeChecksum:331a210ceb36b5e9460705dbfbe71abf) */ /** @@ -21,6 +21,13 @@ class CRM_Event_DAO_Event extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_event'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-calendar'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -517,6 +524,13 @@ class CRM_Event_DAO_Event extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Events'); + } + /** * Returns foreign keys and entity references. * @@ -636,7 +650,7 @@ class CRM_Event_DAO_Event extends CRM_Core_DAO { 'title' => ts('Participant Listing'), 'description' => ts('Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.'), 'where' => 'civicrm_event.participant_listing_id', - 'default' => '0', + 'default' => 'NULL', 'table_name' => 'civicrm_event', 'entity' => 'Event', 'bao' => 'CRM_Event_BAO_Event', diff --git a/civicrm/CRM/Event/DAO/Participant.php b/civicrm/CRM/Event/DAO/Participant.php index 1ac839f0d63114dbe468e618ea722e05e76ffd52..09f5bc0a9393665d28339b7a5d622897e33cfb81 100644 --- a/civicrm/CRM/Event/DAO/Participant.php +++ b/civicrm/CRM/Event/DAO/Participant.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Participant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:aca8a5dd32ef1840a8d769d07db132bf) + * (GenCodeChecksum:5ae3aa69ac3d004f649038adbf993b8b) */ /** @@ -21,6 +21,13 @@ class CRM_Event_DAO_Participant extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_participant'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-ticket'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -166,6 +173,13 @@ class CRM_Event_DAO_Participant extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Participants'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Event/DAO/ParticipantPayment.php b/civicrm/CRM/Event/DAO/ParticipantPayment.php index 685267bcea7f3d7166801edaebd8a6049ffd82b3..b45665ccf3d3f0bc42ceec7354d01a593d233691 100644 --- a/civicrm/CRM/Event/DAO/ParticipantPayment.php +++ b/civicrm/CRM/Event/DAO/ParticipantPayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/ParticipantPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ca74c89a73731c99cdb1aedb8b9c7f92) + * (GenCodeChecksum:ad58ecbb570f97b4a2d459d750e8f9b3) */ /** @@ -57,6 +57,13 @@ class CRM_Event_DAO_ParticipantPayment extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Participant Payments'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Event/DAO/ParticipantStatusType.php b/civicrm/CRM/Event/DAO/ParticipantStatusType.php index f8d6616ada1b422b7f811b7718a68f2b6ab12813..a21a423e1a03bf43def614d85cea7c28924b0724 100644 --- a/civicrm/CRM/Event/DAO/ParticipantStatusType.php +++ b/civicrm/CRM/Event/DAO/ParticipantStatusType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/ParticipantStatusType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:489994257c16b8627c82566c074a9b7c) + * (GenCodeChecksum:ede2497e706ee17bb6dce92b72a2c535) */ /** @@ -99,6 +99,13 @@ class CRM_Event_DAO_ParticipantStatusType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Participant Status Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Event/Form/ManageEvent/Repeat.php b/civicrm/CRM/Event/Form/ManageEvent/Repeat.php index c7fb5591e1a2678c05ecf6d7564ed42c11a4206a..3f1183d606b780ff27d970e4dc12a63e29f7d388 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Repeat.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Repeat.php @@ -155,7 +155,7 @@ class CRM_Event_Form_ManageEvent_Repeat extends CRM_Event_Form_ManageEvent { CRM_Utils_System::redirect(CRM_Utils_System::url($url, $urlParams)); } else { - CRM_Core_Error::fatal("Could not find Event ID"); + CRM_Core_Error::statusBounce("Could not find Event ID"); } parent::endPostProcess(); } diff --git a/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php b/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php index 6b4c83d199510f27b32804144b6a445c8cdf3d5a..6c8b5cbbc2263f7dd47a747450530ae862120d24 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php +++ b/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php @@ -113,7 +113,7 @@ WHERE e.id = %1 ]; $dao = CRM_Core_DAO::executeQuery($sql, $params); if (!$dao->fetch()) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine Event information');; } if (!$dao->is_location) { $tabs['location']['valid'] = FALSE; diff --git a/civicrm/CRM/Event/Form/Participant.php b/civicrm/CRM/Event/Form/Participant.php index ee409a53e3ce994436cb8181c60d818bac9a5bce..5bf815072a32b347bc212a9950e4e8f6de128fb4 100644 --- a/civicrm/CRM/Event/Form/Participant.php +++ b/civicrm/CRM/Event/Form/Participant.php @@ -1477,13 +1477,9 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $this->_bltID )); - $date = CRM_Utils_Date::format($params['credit_card_exp_date']); - $date = CRM_Utils_Date::mysqlToIso($date); - $this->assign('credit_card_exp_date', $date); - $this->assign('credit_card_number', - CRM_Utils_System::mungeCreditCard($params['credit_card_number']) - ); - $this->assign('credit_card_type', $params['credit_card_type']); + $valuesForForm = CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($params); + $this->assignVariables($valuesForForm, ['credit_card_exp_date', 'credit_card_type', 'credit_card_number']); + // The concept of contributeMode is deprecated. $this->assign('contributeMode', 'direct'); $this->assign('isAmountzero', 0); diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 8e69eb560e4f8a535aae9225061464d44bc9c021..97ecf1f6f8bf0ffb02cb650ed2064801d8da75b0 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -78,14 +78,6 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { */ public $_additionalParticipantIds; - /** - * The mode that we are in. - * - * @var string - * @protect - */ - public $_mode; - /** * The values for the contribution db object. * @@ -182,12 +174,9 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { public function preProcess() { $this->_eventId = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); $this->_action = CRM_Utils_Request::retrieve('action', 'Alphanumeric', $this, FALSE, CRM_Core_Action::ADD); - //CRM-4320 $this->_participantId = CRM_Utils_Request::retrieve('participantId', 'Positive', $this); - - // current mode - $this->_mode = ($this->_action == 1024) ? 'test' : 'live'; + $this->setPaymentMode(); $this->_values = $this->get('values'); $this->_fields = $this->get('fields'); @@ -666,7 +655,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { } if ($isPaidEvent && empty($form->_values['fee'])) { if (CRM_Utils_System::getClassName($form) != 'CRM_Event_Form_Participant') { - CRM_Core_Error::fatal(ts('No Fee Level(s) or Price Set is configured for this event.<br />Click <a href=\'%1\'>CiviEvent >> Manage Event >> Configure >> Event Fees</a> to configure the Fee Level(s) or Price Set for this event.', array(1 => CRM_Utils_System::url('civicrm/event/manage/fee', 'reset=1&action=update&id=' . $form->_eventId)))); + CRM_Core_Error::statusBounce(ts('No Fee Level(s) or Price Set is configured for this event.<br />Click <a href=\'%1\'>CiviEvent >> Manage Event >> Configure >> Event Fees</a> to configure the Fee Level(s) or Price Set for this event.', array(1 => CRM_Utils_System::url('civicrm/event/manage/fee', 'reset=1&action=update&id=' . $form->_eventId)))); } } } diff --git a/civicrm/CRM/Event/Form/Registration/Register.php b/civicrm/CRM/Event/Form/Registration/Register.php index a2bc57ef5f7218ca9e58135637a9cca5c4942af6..80e3f7c72f951260a7c18c77f41c358d62bf9383 100644 --- a/civicrm/CRM/Event/Form/Registration/Register.php +++ b/civicrm/CRM/Event/Form/Registration/Register.php @@ -1157,7 +1157,7 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { // CRM-3907, skip check for preview registrations // CRM-4320 participant need to walk wizard if ( - ($form->_mode == 'test' || $form->_allowConfirmation) + ($form->getPaymentMode() === 'test' || $form->_allowConfirmation) ) { return FALSE; } diff --git a/civicrm/CRM/Event/Form/SelfSvcTransfer.php b/civicrm/CRM/Event/Form/SelfSvcTransfer.php index c02649e9b41985e7abb93e2d5eb74bac1a314bc7..5d72f2aaa34e02be3e7fc568179372c36fdb8f42 100644 --- a/civicrm/CRM/Event/Form/SelfSvcTransfer.php +++ b/civicrm/CRM/Event/Form/SelfSvcTransfer.php @@ -245,10 +245,7 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { $email = $fieldvalue; } } - if (!$email && !(CRM_Utils_Array::value('first_name', $fields) && - !empty($fields['last_name']))) { - $defaults = $params = ['id' => $eventId]; - CRM_Event_BAO_Event::retrieve($params, $defaults); + if (empty($email) && (empty($fields['first_name']) || empty($fields['last_name']))) { $message = ts("Mandatory fields (first name and last name, OR email address) are missing from this form."); $errors['_qf_default'] = $message; } @@ -322,7 +319,7 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { } } - $this->transferParticipantRegistration($contact_id, $this->_from_participant_id, $this->_event_id); + $this->transferParticipantRegistration($contact_id, $this->_from_participant_id); $contact_details = CRM_Contact_BAO_Contact::getContactDetails($contact_id); $display_name = current($contact_details); @@ -500,50 +497,48 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { } /** - * Move Participant registration to new contact. + * Move Participant registration to new contact. * * @param int $toContactID * @param int $fromParticipantID - * @param int $eventID * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function transferParticipantRegistration($toContactID, $fromParticipantID, $eventID) { - $query = 'select role_id, source, fee_level, is_test, is_pay_later, fee_amount, discount_id, fee_currency,campaign_id, discount_amount from civicrm_participant where id = ' . $fromParticipantID; - $dao = CRM_Core_DAO::executeQuery($query); - $value_to = []; - while ($dao->fetch()) { - $value_to['role_id'] = $dao->role_id; - $value_to['source'] = $dao->source; - $value_to['fee_level'] = $dao->fee_level; - $value_to['is_test'] = $dao->is_test; - $value_to['is_pay_later'] = $dao->is_pay_later; - $value_to['fee_amount'] = $dao->fee_amount; - } - $value_to['contact_id'] = $toContactID; - $value_to['event_id'] = $eventID; - $value_to['status_id'] = CRM_Core_PseudoConstant::getKey( - 'CRM_Event_BAO_Participant', - 'status_id', - 'Registered' - ); - $value_to['register_date'] = date("Y-m-d"); + public function transferParticipantRegistration($toContactID, $fromParticipantID) { + $toParticipantValues = \Civi\Api4\Participant::get() + ->addWhere('id', '=', $fromParticipantID) + ->execute() + ->first(); + + unset($toParticipantValues['id']); + $toParticipantValues['contact_id'] = $toContactID; + $toParticipantValues['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Event_BAO_Participant', 'status_id', 'Registered'); + $toParticipantValues['register_date'] = date("Y-m-d"); //first create the new participant row -don't set registered_by yet or email won't be sent - $participant = CRM_Event_BAO_Participant::create($value_to); + $participant = CRM_Event_BAO_Participant::create($toParticipantValues); + //send a confirmation email to the new participant $this->participantTransfer($participant); //now update registered_by_id $query = "UPDATE civicrm_participant cp SET cp.registered_by_id = %1 WHERE cp.id = ({$participant->id})"; $params = [1 => [$fromParticipantID, 'Integer']]; - $dao = CRM_Core_DAO::executeQuery($query, $params); + CRM_Core_DAO::executeQuery($query, $params); //copy line items to new participant - $line_items = CRM_Price_BAO_LineItem::getLineItems($this->_from_participant_id); - foreach ($line_items as $item) { + $line_items = CRM_Price_BAO_LineItem::getLineItems($fromParticipantID); + foreach ($line_items as $id => $item) { + //Remove contribution id from older participant line item. + CRM_Core_DAO::singleValueQuery("UPDATE civicrm_line_item SET contribution_id = NULL WHERE id = %1", [1 => [$id, 'Integer']]); $item['entity_id'] = $participant->id; $item['id'] = NULL; $item['entity_table'] = "civicrm_participant"; - $new_item = CRM_Price_BAO_LineItem::create($item); + $tolineItem = CRM_Price_BAO_LineItem::create($item); + + //Update Financial Item for previous line item row. + $prevFinancialItem = CRM_Financial_BAO_FinancialItem::getPreviousFinancialItem($id); + $prevFinancialItem['contact_id'] = $toContactID; + $prevFinancialItem['entity_id'] = $tolineItem->id; + CRM_Financial_BAO_FinancialItem::create($prevFinancialItem); } //now cancel the from participant record, leaving the original line-item(s) $value_from = []; diff --git a/civicrm/CRM/Event/Import/Parser.php b/civicrm/CRM/Event/Import/Parser.php index b168d2f9fec6df44e964e79eccfa18cc370aaf7c..c1ec6a7989631010b30cb138f123719f31d63d09 100644 --- a/civicrm/CRM/Event/Import/Parser.php +++ b/civicrm/CRM/Event/Import/Parser.php @@ -70,7 +70,7 @@ abstract class CRM_Event_Import_Parser extends CRM_Import_Parser { $onDuplicate = self::DUPLICATE_SKIP ) { if (!is_array($fileName)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine import file'); } $fileName = $fileName['name']; diff --git a/civicrm/CRM/Event/Page/ParticipantListing.php b/civicrm/CRM/Event/Page/ParticipantListing.php index a9f718ca61df0d0b740f3e1cda3ad1644d3ecb42..6c5ddf07c5e22e98e551402c373208ebb25473c4 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing.php +++ b/civicrm/CRM/Event/Page/ParticipantListing.php @@ -66,7 +66,7 @@ class CRM_Event_Page_ParticipantListing extends CRM_Core_Page { ) ); if ($className == 'CRM_Event_Page_ParticipantListing') { - CRM_Core_Error::fatal(ts("Participant listing code file cannot be '%1'", + CRM_Core_Error::statusBounce(ts("Participant listing code file cannot be '%1'", array(1 => $className) )); } @@ -77,7 +77,7 @@ class CRM_Event_Page_ParticipantListing extends CRM_Core_Page { ) . '.php'; $error = include_once $classFile; if ($error == FALSE) { - CRM_Core_Error::fatal('Participant listing code file: ' . $classFile . ' does not exist. Please verify your custom particpant listing settings in CiviCRM administrative panel.'); + CRM_Core_Error::statusBounce('Participant listing code file: ' . $classFile . ' does not exist. Please verify your custom particpant listing settings in CiviCRM administrative panel.'); } $participantListingClass = new $className(); diff --git a/civicrm/CRM/Export/BAO/Export.php b/civicrm/CRM/Export/BAO/Export.php index 5ddf6cb6798982e5e41cc8d4a47462ecfe3e6ae7..83e2fa5ba2c1ff95472ead42199669bbe68dab58 100644 --- a/civicrm/CRM/Export/BAO/Export.php +++ b/civicrm/CRM/Export/BAO/Export.php @@ -25,6 +25,30 @@ class CRM_Export_BAO_Export { // CRM-7675 const EXPORT_ROW_COUNT = 100000; + /** + * Returns a list of exportable entities and their associated component. + * + * Note: Some entities like Contact & Activity are not in components, so + * the export form seems to fudge things and accept the entity name instead of + * component name in those cases. + * + * TODO: Hardcoded list bad. Needs to support extension export pages. + * + * @var string[] + */ + public static function getComponents() { + return [ + 'Contact' => 'Contact', + 'Contribution' => 'Contribute', + 'Membership' => 'Member', + 'Participant' => 'Event', + 'Pledge' => 'Pledge', + 'Case' => 'Case', + 'Grant' => 'Grant', + 'Activity' => 'Activity', + ]; + } + /** * Get the list the export fields. * diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php index 100b8892edcd49c072e36022d48312f1718b5399..03e64b31b2a0804ea6f26db1eae56ed4363051a5 100644 --- a/civicrm/CRM/Export/BAO/ExportProcessor.php +++ b/civicrm/CRM/Export/BAO/ExportProcessor.php @@ -749,7 +749,7 @@ class CRM_Export_BAO_ExportProcessor { * @return string */ public function getHeaderForRow($field) { - if (substr($field, -11) == 'campaign_id') { + if (substr($field, -11) === 'campaign_id') { // @todo - set this correctly in the xml rather than here. // This will require a generalised handling cleanup return ts('Campaign ID'); @@ -1109,9 +1109,16 @@ class CRM_Export_BAO_ExportProcessor { ) { //check for custom data if ($cfID = CRM_Core_BAO_CustomField::getKeyID($field)) { + $html_type = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $cfID, 'html_type'); + + //need to calculate the link to the file for file custom data + if ($html_type === 'File' && $fieldValue) { + $result = civicrm_api3('attachment', 'get', ['return' => ['url'], 'id' => $fieldValue]); + return $result['values'][$result['id']]['url']; + } + return CRM_Core_BAO_CustomField::displayValue($fieldValue, $cfID); } - elseif (in_array($field, [ 'email_greeting', 'postal_greeting', diff --git a/civicrm/CRM/Export/Controller/Standalone.php b/civicrm/CRM/Export/Controller/Standalone.php index c2af8a5879edf292be176b8d43e91f6f222825fa..f4bb8ca534f640fb2ed049b1ad5c8d9b751287f4 100644 --- a/civicrm/CRM/Export/Controller/Standalone.php +++ b/civicrm/CRM/Export/Controller/Standalone.php @@ -49,6 +49,8 @@ class CRM_Export_Controller_Standalone extends CRM_Core_Controller { // add all the actions $this->addActions(); + $dao = CRM_Core_DAO_AllCoreTables::getFullName($entity); + CRM_Utils_System::setTitle(ts('Export %1', [1 => $dao::getEntityTitle()])); } /** @@ -67,7 +69,7 @@ class CRM_Export_Controller_Standalone extends CRM_Core_Controller { } } // Set the "task" selector value to Export - $className = 'CRM_' . $this->get('entity') . '_Task'; + $className = 'CRM_' . $this->getComponent($this->get('entity')) . '_Task'; foreach ($className::tasks() as $taskId => $task) { $taskForm = (array) $task['class']; if ($taskForm[0] == 'CRM_Export_Form_Select') { @@ -77,4 +79,23 @@ class CRM_Export_Controller_Standalone extends CRM_Core_Controller { return $values; } + /** + * Get the relevant entity name. + * + * @return string + */ + public function getComponent() { + $components = CRM_Export_BAO_Export::getComponents(); + return $components[$this->getEntity()]; + } + + /** + * Get the name used to construct the class. + * + * @return mixed + */ + public function getEntity() { + return $this->get('entity'); + } + } diff --git a/civicrm/CRM/Export/Form/Select.php b/civicrm/CRM/Export/Form/Select.php index af4b2bba7f5ed8c3b60caf2aab65deb646aea5d1..04ac33617a642ec49dcabbcd458829a673fecf81 100644 --- a/civicrm/CRM/Export/Form/Select.php +++ b/civicrm/CRM/Export/Form/Select.php @@ -79,7 +79,7 @@ class CRM_Export_Form_Select extends CRM_Core_Form_Task { $this->_componentClause = NULL; // we need to determine component export - $components = ['Contact', 'Contribute', 'Member', 'Event', 'Pledge', 'Case', 'Grant', 'Activity']; + $components = CRM_Export_BAO_Export::getComponents(); // FIXME: This should use a modified version of CRM_Contact_Form_Search::getModeValue but it doesn't have all the contexts // FIXME: Or better still, use CRM_Core_DAO_AllCoreTables::getBriefName($daoName) to get the $entityShortName @@ -120,16 +120,8 @@ class CRM_Export_Form_Select extends CRM_Core_Form_Task { break; default: - // FIXME: Code cleanup, we may not need to do this $componentName code here. - $formName = CRM_Utils_System::getClassName($this->controller->getStateMachine()); - $componentName = explode('_', $formName); - if ($formName == 'CRM_Export_StateMachine_Standalone') { - $componentName = ['CRM', $this->controller->get('entity')]; - } - // Contact - $entityShortname = $componentName[1]; - $entityDAOName = $entityShortname; - break; + $entityShortname = $this->getComponentName(); + $entityDAOName = $this->controller->get('entity') ?? $entityShortname; } if (in_array($entityShortname, $components)) { @@ -498,4 +490,20 @@ FROM {$this->_componentTable} return (int) ($this->queryMode ?: $this->controller->get('component_mode')); } + /** + * Get the name of the component. + * + * @return array + */ + protected function getComponentName(): string { + // CRM_Export_Controller_Standalone has this method + if (method_exists($this->controller, 'getComponent')) { + return $this->controller->getComponent(); + } + // For others, just guess based on the name of the controller + $formName = CRM_Utils_System::getClassName($this->controller->getStateMachine()); + $componentName = explode('_', $formName); + return $componentName[1]; + } + } diff --git a/civicrm/CRM/Extension/Manager/Payment.php b/civicrm/CRM/Extension/Manager/Payment.php index 9e90ed8e6e6c5a68a4b5800c8cc28499a0cc32d9..0919690a6a41c52669ef5f60cdcd633062e78b06 100644 --- a/civicrm/CRM/Extension/Manager/Payment.php +++ b/civicrm/CRM/Extension/Manager/Payment.php @@ -109,7 +109,7 @@ class CRM_Extension_Manager_Payment extends CRM_Extension_Manager_Base { public function onPreUninstall(CRM_Extension_Info $info) { $paymentProcessorTypes = $this->_getAllPaymentProcessorTypes('class_name'); if (!array_key_exists($info->key, $paymentProcessorTypes)) { - CRM_Core_Error::fatal(ts('This payment processor type is not registered.')); + throw new CRM_Core_Exception(ts('This payment processor type is not registered.')); } $dao = new CRM_Financial_DAO_PaymentProcessor(); @@ -229,7 +229,7 @@ class CRM_Extension_Manager_Payment extends CRM_Extension_Manager_Base { } if (empty($class_name)) { - CRM_Core_Error::fatal("Unable to find payment processor in " . __CLASS__ . '::' . __METHOD__); + throw new CRM_Core_Exception('Unable to find payment processor in ' . __CLASS__ . '::' . __METHOD__); } // In the case of uninstall, check for instances of PP first. diff --git a/civicrm/CRM/Extension/Manager/Search.php b/civicrm/CRM/Extension/Manager/Search.php index d79e2472ae5ff98c8710f4efe6a650ace7cb93df..d498711f528b4c6d0da5c02e861b6be2a7de52d1 100644 --- a/civicrm/CRM/Extension/Manager/Search.php +++ b/civicrm/CRM/Extension/Manager/Search.php @@ -69,12 +69,12 @@ class CRM_Extension_Manager_Search extends CRM_Extension_Manager_Base { public function onPreUninstall(CRM_Extension_Info $info) { $customSearchesByName = $this->getCustomSearchesByName(); if (!array_key_exists($info->key, $customSearchesByName)) { - CRM_Core_Error::fatal('This custom search is not registered.'); + throw new CRM_Core_Exception('This custom search is not registered.'); } $cs = $this->getCustomSearchesById(); $id = $cs[$customSearchesByName[$info->key]]; - $optionValue = CRM_Core_BAO_OptionValue::del($id); + CRM_Core_BAO_OptionValue::del($id); return TRUE; } diff --git a/civicrm/CRM/Financial/BAO/FinancialAccount.php b/civicrm/CRM/Financial/BAO/FinancialAccount.php index 72b9b7a13a99b9e232dd1c6addfe2180f7113923..32fe022f824e83f57586d373b948234064c2e8b8 100644 --- a/civicrm/CRM/Financial/BAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/BAO/FinancialAccount.php @@ -216,6 +216,8 @@ WHERE cft.id = %1 * * Note that we avoid the CRM_Core_PseudoConstant function as it stores one * account per financial type and is unreliable. + * @todo Not sure what the above comment means, and the function uses the + * PseudoConstant twice. Three times if you count the for loop. * * @param int $financialTypeID * @@ -224,7 +226,12 @@ WHERE cft.id = %1 * @return int */ public static function getFinancialAccountForFinancialTypeByRelationship($financialTypeID, $relationshipType) { - $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE '{$relationshipType}' ")); + // This is keyed on the `value` column from civicrm_option_value + $accountRelationshipsByValue = CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, NULL, 'name'); + // We look up by the name a couple times below, so flip it. + $accountRelationships = array_flip($accountRelationshipsByValue); + + $relationTypeId = $accountRelationships[$relationshipType] ?? NULL; if (!isset(Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$relationTypeId])) { $accounts = civicrm_api3('EntityFinancialAccount', 'get', [ @@ -236,14 +243,12 @@ WHERE cft.id = %1 Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$account['account_relationship']] = $account['financial_account_id']; } - $accountRelationships = CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL); - - $incomeAccountRelationshipID = array_search('Income Account is', $accountRelationships); + $incomeAccountRelationshipID = $accountRelationships['Income Account is'] ?? FALSE; $incomeAccountFinancialAccountID = Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$incomeAccountRelationshipID]; foreach (['Chargeback Account is', 'Credit/Contra Revenue Account is'] as $optionalAccountRelationship) { - $accountRelationshipID = array_search($optionalAccountRelationship, $accountRelationships); + $accountRelationshipID = $accountRelationships[$optionalAccountRelationship] ?? FALSE; if (empty(Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$accountRelationshipID])) { Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$accountRelationshipID] = $incomeAccountFinancialAccountID; } diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index 65c20c02210574aa36caace7f623edf9c4ae6933..dd4d85dbe627bb167bef09b5ce73974b63a2741b 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -422,7 +422,7 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { foreach ($lineItems as $items) { if (!CRM_Core_Permission::check($op . ' contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']))) { if ($force) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + throw new CRM_Core_Exception(ts('You do not have permission to access this page.')); break; } $flag = FALSE; diff --git a/civicrm/CRM/Financial/BAO/Payment.php b/civicrm/CRM/Financial/BAO/Payment.php index 05de84f0b77fd063cfd34a55637643643994203f..1101aab35ed3d9242f0cdaf1f536e5eebf9397a9 100644 --- a/civicrm/CRM/Financial/BAO/Payment.php +++ b/civicrm/CRM/Financial/BAO/Payment.php @@ -141,6 +141,7 @@ class CRM_Financial_BAO_Payment { 'id' => $contribution['id'], 'is_post_payment_create' => TRUE, 'is_email_receipt' => $params['is_send_contribution_notification'], + 'trxn_date' => $params['trxn_date'], ]); // Get the trxn $trxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC'); diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessor.php b/civicrm/CRM/Financial/BAO/PaymentProcessor.php index 363828f31a76c00e5cccfd25461cc12b733f17af..ed37743c5ab4fb746e0b9e90a52ba28fc4208435 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessor.php @@ -49,7 +49,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces $ppTypeDAO = new CRM_Financial_DAO_PaymentProcessorType(); $ppTypeDAO->id = $params['payment_processor_type_id']; if (!$ppTypeDAO->find(TRUE)) { - CRM_Core_Error::fatal(ts('Could not find payment processor meta information')); + throw new CRM_Core_Exception(ts('Could not find payment processor meta information')); } // also copy meta fields from the info DAO @@ -194,7 +194,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces */ public static function del($paymentProcessorID) { if (!$paymentProcessorID) { - CRM_Core_Error::fatal(ts('Invalid value passed to delete function.')); + throw new CRM_Core_Exception(ts('Invalid value passed to delete function.')); } $dao = new CRM_Financial_DAO_PaymentProcessor(); diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php index e64fb29713d1a2f6adc0359301550259544bfbc6..c0f49c2b10bfe17b862267e198c496bdba872347 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php @@ -141,7 +141,7 @@ class CRM_Financial_BAO_PaymentProcessorType extends CRM_Financial_DAO_PaymentPr $ppByName = self::getAllPaymentProcessorTypes('name'); if (array_key_exists($paymentProcessorType->name, $ppByName)) { if ($ppByName[$paymentProcessorType->name] != $paymentProcessorType->id) { - CRM_Core_Error::fatal('This payment processor type already exists.'); + throw new CRM_Core_Exception('This payment processor type already exists.'); } } } diff --git a/civicrm/CRM/Financial/DAO/Currency.php b/civicrm/CRM/Financial/DAO/Currency.php index 8b824ea2ec97f3ad3c8eb4acfffde5ef8950208c..20dff31e7fe39f65831abeb211ddd55307ce3cce 100644 --- a/civicrm/CRM/Financial/DAO/Currency.php +++ b/civicrm/CRM/Financial/DAO/Currency.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/Currency.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:721040e661f3dd3e05ffa6ed250c4e23) + * (GenCodeChecksum:9141d433586789f5ea9003fdbe9fdf9b) */ /** @@ -71,6 +71,13 @@ class CRM_Financial_DAO_Currency extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Currencies'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php index 67c6505d237e0d984be86888c07f980377208ed6..a23822f2b408e41cd3ae7db28cc220d32c30592d 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e122d3de737d2d8f984802e050b79740) + * (GenCodeChecksum:5ed0eeb7d3f5f2caf668448cd441b004) */ /** @@ -71,6 +71,13 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Financial Accounts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php index 37302e6576e3256c00c99eead5bf07546117fdff..b74d080894e941fe4feef6e1cf51db44c6414d87 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:852c9c70f201b0961e165bef0f4be109) + * (GenCodeChecksum:a4b054ba0fc5a16cd650bda8941690b1) */ /** @@ -67,6 +67,13 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Entity Financial Trxns'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/FinancialAccount.php b/civicrm/CRM/Financial/DAO/FinancialAccount.php index c6d14edd16a2af96ccdfd73d4ad9893d21664b85..f6912ae03c1a60e6684e09dcb93f30d993562318 100644 --- a/civicrm/CRM/Financial/DAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/FinancialAccount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c207988e19f10e2667773fff9929abc8) + * (GenCodeChecksum:e9c9d66596703d9dfbf411034ce909c4) */ /** @@ -141,6 +141,13 @@ class CRM_Financial_DAO_FinancialAccount extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Financial Accounts'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/FinancialItem.php b/civicrm/CRM/Financial/DAO/FinancialItem.php index 0f781cc540a6dff15685d007f4c9edbc316d78af..055c8a5de18fc7f908cb32d7c1683c5cfe73be07 100644 --- a/civicrm/CRM/Financial/DAO/FinancialItem.php +++ b/civicrm/CRM/Financial/DAO/FinancialItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d98305518549ded88f3314e439b30d1c) + * (GenCodeChecksum:4f2e977c0c7c668be342598772b0eb61) */ /** @@ -111,6 +111,13 @@ class CRM_Financial_DAO_FinancialItem extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Financial Items'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/FinancialTrxn.php b/civicrm/CRM/Financial/DAO/FinancialTrxn.php index 4523fc1bea6ceea859fe1bc74219a26dfc4bd028..47f7ae219782509edf257872a09641c02c00b202 100644 --- a/civicrm/CRM/Financial/DAO/FinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/FinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1d28de43212efaa518db33ee4951e911) + * (GenCodeChecksum:7e2cf7d374cc6e0af61672c0318248b6) */ /** @@ -160,6 +160,13 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Financial Trxns'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/FinancialType.php b/civicrm/CRM/Financial/DAO/FinancialType.php index d792bbcbde15d39b2947de4c667e4f4a1abc29cb..a047fd348e0f1e06224dbd0ba15206c53195f26c 100644 --- a/civicrm/CRM/Financial/DAO/FinancialType.php +++ b/civicrm/CRM/Financial/DAO/FinancialType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f9510d4aba2aa2e4701a67c396111a6e) + * (GenCodeChecksum:81cc1b7a95feede610081f2066eeb147) */ /** @@ -78,6 +78,13 @@ class CRM_Financial_DAO_FinancialType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Financial Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessor.php b/civicrm/CRM/Financial/DAO/PaymentProcessor.php index bd88237774bf36c5dae5cb548c3e6359722aa5bb..6122a230769bb9355b21a174b996574ef224fdae 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessor.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentProcessor.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:ca84b8a7def92b4567080de6afda6396) + * (GenCodeChecksum:625ab4ba983447ea3e236b48491eeed6) */ /** @@ -177,6 +177,13 @@ class CRM_Financial_DAO_PaymentProcessor extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Payment Processors'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php index 53304c1f71f2b0656f6067f16089e4fe1c3823b7..c942177b367865aecc76888cb820f6f5685e1c4e 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentProcessorType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:60d053c80ab1b88ee0acc660dbe37531) + * (GenCodeChecksum:b57486d319cf2c2022b7447a6c53c199) */ /** @@ -171,6 +171,13 @@ class CRM_Financial_DAO_PaymentProcessorType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Payment Processor Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Financial/DAO/PaymentToken.php b/civicrm/CRM/Financial/DAO/PaymentToken.php index 119333c342008f25a318939ed4903ee469ed832e..363de403c2403651b0d686675a3ca2e0a3b8c777 100644 --- a/civicrm/CRM/Financial/DAO/PaymentToken.php +++ b/civicrm/CRM/Financial/DAO/PaymentToken.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentToken.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7819454bb802d003574b62723fd47765) + * (GenCodeChecksum:c135e4bffc93086e83c082bbebc84372) */ /** @@ -125,6 +125,13 @@ class CRM_Financial_DAO_PaymentToken extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Payment Tokens'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Financial/Form/FrontEndPaymentFormTrait.php b/civicrm/CRM/Financial/Form/FrontEndPaymentFormTrait.php index 1f296801125c9383c01aa4af6952522b8f9fb852..dbf787e27d616a03c1cab006b796764d363c2436 100644 --- a/civicrm/CRM/Financial/Form/FrontEndPaymentFormTrait.php +++ b/civicrm/CRM/Financial/Form/FrontEndPaymentFormTrait.php @@ -20,6 +20,13 @@ */ trait CRM_Financial_Form_FrontEndPaymentFormTrait { + /** + * Is pay later enabled on this form? + * + * @var bool + */ + protected $isPayLater = FALSE; + /** * The label for the pay later pseudoprocessor option. * @@ -27,6 +34,58 @@ trait CRM_Financial_Form_FrontEndPaymentFormTrait { */ protected $payLaterLabel; + /** + * Is this a back office form + * + * @var bool + */ + public $isBackOffice = FALSE; + + /** + * The payment mode that we are in ("live" or "test") + * This should be protected and retrieved via getPaymentMode() but it's accessed all over the place so we have to leave it public for now. + * + * @var string + */ + public $_mode; + + /** + * @return bool + */ + public function isPayLater() { + return $this->isPayLater; + } + + /** + * @param bool $isPayLater + */ + public function setIsPayLater($isPayLater) { + $this->isPayLater = $isPayLater; + } + + /** + * @return bool + */ + public function getIsBackOffice() { + return $this->isBackOffice; + } + + /** + * Get the payment mode ('live' or 'test') + * + * @return string + */ + public function getPaymentMode() { + return $this->_mode; + } + + /** + * Set the payment mode ('live' or 'test') + */ + public function setPaymentMode() { + $this->_mode = ($this->_action === CRM_Core_Action::PREVIEW) ? 'test' : 'live'; + } + /** * @return string */ diff --git a/civicrm/CRM/Financial/Page/FinancialTypeAccount.php b/civicrm/CRM/Financial/Page/FinancialTypeAccount.php index 9a3552cc61d7c122d333dde7f05d66eaba105932..cdbd3d5af9133b66565e73842b81a0ee9eacdcb0 100644 --- a/civicrm/CRM/Financial/Page/FinancialTypeAccount.php +++ b/civicrm/CRM/Financial/Page/FinancialTypeAccount.php @@ -166,8 +166,7 @@ class CRM_Financial_Page_FinancialTypeAccount extends CRM_Core_Page { $this->assign('financialTypeTitle', $this->_title); } else { - CRM_Core_Error::fatal(); - return NULL; + CRM_Core_Error::statusBounce('No Financial Accounts found for the Financial Type'); } } diff --git a/civicrm/CRM/Friend/DAO/Friend.php b/civicrm/CRM/Friend/DAO/Friend.php index 25b7bf9d679e8b7f48ab28f04bcbb586a52fc295..854c5f5de78a03f2a7f5f1053463613ec5356209 100644 --- a/civicrm/CRM/Friend/DAO/Friend.php +++ b/civicrm/CRM/Friend/DAO/Friend.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Friend/Friend.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a3557f919ae7f3ffa25871e837aa59d9) + * (GenCodeChecksum:ed3cb6458bdc4ee011d6b30baa9e24ff) */ /** @@ -102,6 +102,13 @@ class CRM_Friend_DAO_Friend extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Friends'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Friend/Form.php b/civicrm/CRM/Friend/Form.php index 2af78a571a9ace8e35870c9dbeec110bf46b0f9f..bd1f64288551e3325ef50d056f21319bdfe1fca7 100644 --- a/civicrm/CRM/Friend/Form.php +++ b/civicrm/CRM/Friend/Form.php @@ -9,14 +9,6 @@ +--------------------------------------------------------------------+ */ -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ - * - */ - /** * This class generates form components for Tell A Friend Form For End User * @@ -76,7 +68,7 @@ class CRM_Friend_Form extends CRM_Core_Form { $this->_title = $values['title'] ?? NULL; $this->_campaignId = $values['campaign_id'] ?? NULL; $this->_entityTable = 'civicrm_contribution_page'; - if ($pcomponent == 'event') { + if ($pcomponent === 'event') { $this->_entityTable = 'civicrm_event'; $isShare = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $this->_entityId, 'is_share'); $this->_title = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $this->_entityId, 'title'); @@ -87,7 +79,7 @@ class CRM_Friend_Form extends CRM_Core_Form { // Tell Form.tpl whether to include SocialNetwork.tpl for social media sharing $this->assign('isShare', $isShare); } - elseif ($pcomponent == 'pcp') { + elseif ($pcomponent === 'pcp') { $this->_pcpBlockId = CRM_Utils_Request::retrieve('blockId', 'Positive', $this, TRUE); $values = []; @@ -122,14 +114,13 @@ class CRM_Friend_Form extends CRM_Core_Form { } $this->assign('context', $pcomponent); - $session = CRM_Core_Session::singleton(); - $this->_contactID = $session->get('userID'); + $this->_contactID = CRM_Core_Session::getLoggedInContactID(); if (!$this->_contactID) { - $this->_contactID = $session->get('transaction.userID'); + $this->_contactID = CRM_Core_Session::singleton()->get('transaction.userID'); } if (!$this->_contactID) { - CRM_Core_Error::fatal(ts('Could not get the contact ID')); + CRM_Core_Error::statusBounce(ts('Could not get the contact ID')); } // we do not want to display recently viewed items, so turn off @@ -140,7 +131,7 @@ class CRM_Friend_Form extends CRM_Core_Form { * Set default values for the form. * * - * @return void + * @return array */ public function setDefaultValues() { $defaults = []; @@ -190,7 +181,7 @@ class CRM_Friend_Form extends CRM_Core_Form { $this->add('wysiwyg', 'suggested_message', ts('Your Message'), CRM_Core_DAO::getAttribute('CRM_Friend_DAO_Friend', 'suggested_message')); $friend = []; $mailLimit = self::NUM_OPTION; - if ($this->_entityTable == 'civicrm_pcp') { + if ($this->_entityTable === 'civicrm_pcp') { $mailLimit = $this->_mailLimit; } $this->assign('mailLimit', $mailLimit + 1); @@ -258,8 +249,8 @@ class CRM_Friend_Form extends CRM_Core_Form { /** * Process the form submission. * - * * @return void + * @throws \CRM_Core_Exception */ public function postProcess() { // get the submitted form values. @@ -281,11 +272,11 @@ class CRM_Friend_Form extends CRM_Core_Form { $defaults['entity_table'] = $this->_entityTable; CRM_Friend_BAO_Friend::getValues($defaults); - if ($this->_entityTable == 'civicrm_pcp') { + if ($this->_entityTable === 'civicrm_pcp') { $defaults['thankyou_text'] = $defaults['thankyou_title'] = ts('Thank you for your support'); $defaults['thankyou_text'] = ts('Thanks for supporting this campaign by spreading the word to your friends.'); } - elseif ($this->_entityTable == 'civicrm_contribution_page') { + elseif ($this->_entityTable === 'civicrm_contribution_page') { // If this is tell a friend after contributing, give donor link to create their own fundraising page if ($linkText = CRM_PCP_BAO_PCP::getPcpBlockStatus($defaults['entity_id'], $defaults['entity_table'])) { @@ -298,7 +289,7 @@ class CRM_Friend_Form extends CRM_Core_Form { $this->assign('linkText', $linkText); } } - elseif ($this->_entityTable == 'civicrm_event') { + elseif ($this->_entityTable === 'civicrm_event') { // If this is tell a friend after registering for an event, give donor link to create their own fundraising page require_once 'CRM/PCP/BAO/PCP.php'; if ($linkText = CRM_PCP_BAO_PCP::getPcpBlockStatus($defaults['entity_id'], $defaults['entity_table'])) { diff --git a/civicrm/CRM/Grant/DAO/Grant.php b/civicrm/CRM/Grant/DAO/Grant.php index 6d9a0dbdc60ab20ee14da202d40ecae8449c848e..fa8dd9d09fc54e47319e22406669aecdc199412d 100644 --- a/civicrm/CRM/Grant/DAO/Grant.php +++ b/civicrm/CRM/Grant/DAO/Grant.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Grant/Grant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7b147f63c16d23b747d2c451b48afc10) + * (GenCodeChecksum:b09a04b8edb982e838510dfb9d7dbc35) */ /** @@ -21,6 +21,13 @@ class CRM_Grant_DAO_Grant extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_grant'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-money'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -141,6 +148,13 @@ class CRM_Grant_DAO_Grant extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Grants'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php index d0e6ac595dfe27175072cd070c8fa436e0d3e9f6..d9be20cdfb864c7cc7e2815f7e0904c0cc8be207 100644 --- a/civicrm/CRM/Group/Form/Edit.php +++ b/civicrm/CRM/Group/Form/Edit.php @@ -127,7 +127,7 @@ class CRM_Group_Form_Edit extends CRM_Core_Form { } } else { - if ($this->_groupValues['is_reserved'] == 1 && !CRM_Core_Permission::check('administer reserved groups')) { + if ($this->_id && $this->_groupValues['is_reserved'] == 1 && !CRM_Core_Permission::check('administer reserved groups')) { CRM_Core_Error::statusBounce(ts("You do not have sufficient permission to change settings for this reserved group.")); } if (isset($this->_id)) { diff --git a/civicrm/CRM/Import/DataSource/CSV.php b/civicrm/CRM/Import/DataSource/CSV.php index 7f066497edff88132087f9be7668bcb45d72d9fc..e03b5972f7e01c833e6bd07625778e5747c73ec7 100644 --- a/civicrm/CRM/Import/DataSource/CSV.php +++ b/civicrm/CRM/Import/DataSource/CSV.php @@ -118,10 +118,10 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { $result = []; $fd = fopen($file, 'r'); if (!$fd) { - CRM_Core_Error::fatal("Could not read $file"); + throw new CRM_Core_Exception("Could not read $file"); } if (filesize($file) == 0) { - CRM_Core_Error::fatal("$file is empty. Please upload a valid file."); + throw new CRM_Core_Exception("$file is empty. Please upload a valid file."); } $config = CRM_Core_Config::singleton(); diff --git a/civicrm/CRM/Logging/ReportSummary.php b/civicrm/CRM/Logging/ReportSummary.php index f7e93eeb24b332de5a41ab31dfe3f897030f0f3e..5ecdcac11bebff0136b4ed60fae0b8946134e07e 100644 --- a/civicrm/CRM/Logging/ReportSummary.php +++ b/civicrm/CRM/Logging/ReportSummary.php @@ -10,10 +10,7 @@ */ /** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ + * Class CRM_Logging_ReportSummary */ class CRM_Logging_ReportSummary extends CRM_Report_Form { protected $cid; diff --git a/civicrm/CRM/Mailing/ActionTokens.php b/civicrm/CRM/Mailing/ActionTokens.php index c30ea60c46b586370802623a8774b0e38a8dc21f..ecb3be4dd4cb30142d835a4da269a6abcf0ed957 100644 --- a/civicrm/CRM/Mailing/ActionTokens.php +++ b/civicrm/CRM/Mailing/ActionTokens.php @@ -82,10 +82,10 @@ class CRM_Mailing_ActionTokens extends \Civi\Token\AbstractTokenSubscriber { list($verp, $urls) = CRM_Mailing_BAO_Mailing::getVerpAndUrls( $row->context['mailingJobId'], - $row->context['mailingActionTarget']['id'], - $row->context['mailingActionTarget']['hash'], + $row->context['mailingActionTarget']['id'] ?? NULL, + $row->context['mailingActionTarget']['hash'] ?? NULL, // Note: Behavior is already undefined for SMS/'phone' mailings... - $row->context['mailingActionTarget']['email'] + $row->context['mailingActionTarget']['email'] ?? NULL ); $row->format('text/plain')->tokens($entity, $field, diff --git a/civicrm/CRM/Mailing/BAO/MailingJob.php b/civicrm/CRM/Mailing/BAO/MailingJob.php index 5fc03b14d3d896aaad4033e40b37a85f9a8c2f24..8ebd8908340c34a5ecd22f1f543a39ccd2f28577 100644 --- a/civicrm/CRM/Mailing/BAO/MailingJob.php +++ b/civicrm/CRM/Mailing/BAO/MailingJob.php @@ -781,7 +781,7 @@ VALUES (%1, %2, %3, %4, %5, %6, %7) } // Register 5xx SMTP response code (permanent failure) as bounce. - if (isset($code{0}) && $code{0} === '5') { + if (isset($code[0]) && $code[0] === '5') { return FALSE; } diff --git a/civicrm/CRM/Mailing/DAO/BouncePattern.php b/civicrm/CRM/Mailing/DAO/BouncePattern.php index a93e53853cd9a3a8206f46ab31f3d0512861680b..1e6c539e5dc127bbc041d0e096fbbf7eb8210a15 100644 --- a/civicrm/CRM/Mailing/DAO/BouncePattern.php +++ b/civicrm/CRM/Mailing/DAO/BouncePattern.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/BouncePattern.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7bdec71fe0b627a02732c904ad336a85) + * (GenCodeChecksum:e36e2c40e59bfe04998b2e4e216724b6) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_DAO_BouncePattern extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Bounce Patterns'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/BounceType.php b/civicrm/CRM/Mailing/DAO/BounceType.php index 00421d8eaefefc90aaa3e2f16c275dd0dbf7c404..9bb3db18070b5b55a033c3451a9a831120b52d11 100644 --- a/civicrm/CRM/Mailing/DAO/BounceType.php +++ b/civicrm/CRM/Mailing/DAO/BounceType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/BounceType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:000d0e3dbe0a61106d00e5f7b5c4ac93) + * (GenCodeChecksum:b2b6ab45aa6fed676d81a68651f0bf93) */ /** @@ -62,6 +62,13 @@ class CRM_Mailing_DAO_BounceType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Bounce Types'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Mailing/DAO/Mailing.php b/civicrm/CRM/Mailing/DAO/Mailing.php index c870390076e7cfa75fdfc0cc9e0e00a04fb258f4..e89653ee93180a84d4e0a33f91a3e66d3ed42c42 100644 --- a/civicrm/CRM/Mailing/DAO/Mailing.php +++ b/civicrm/CRM/Mailing/DAO/Mailing.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Mailing.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:786c6f74132ff42f643b1f5a9104f040) + * (GenCodeChecksum:bfcc85d4eb2bab05f214dd946e5fdef6) */ /** @@ -21,6 +21,13 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_mailing'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-envelope-o'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -331,6 +338,13 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mailings'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/MailingAB.php b/civicrm/CRM/Mailing/DAO/MailingAB.php index 1847af38489062fb54c161ee67ab7609542a4aee..4875b11c502192a21b625b791bdc03489015cb15 100644 --- a/civicrm/CRM/Mailing/DAO/MailingAB.php +++ b/civicrm/CRM/Mailing/DAO/MailingAB.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingAB.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cf9f65f1875d52e355b0f21f1264637f) + * (GenCodeChecksum:fd7f00955d0a5eb4ec56089ccd71f68d) */ /** @@ -126,6 +126,13 @@ class CRM_Mailing_DAO_MailingAB extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mailing ABs'); + } + /** * Returns foreign keys and entity references. * @@ -337,6 +344,7 @@ class CRM_Mailing_DAO_MailingAB extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'mailing', ], 'add' => '4.6', ], diff --git a/civicrm/CRM/Mailing/DAO/MailingComponent.php b/civicrm/CRM/Mailing/DAO/MailingComponent.php index d62736837b6290e5d830238ddd5247d52eee10b9..cd35b7cce0d38c183c18ac7d54c6f07d772da54b 100644 --- a/civicrm/CRM/Mailing/DAO/MailingComponent.php +++ b/civicrm/CRM/Mailing/DAO/MailingComponent.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingComponent.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5f3ddd9d7e7f4b78ce0fac2f67189e50) + * (GenCodeChecksum:1d0efc3e5ba8dcd6d6bbc422877b86b4) */ /** @@ -88,6 +88,13 @@ class CRM_Mailing_DAO_MailingComponent extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mailing Components'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Mailing/DAO/MailingGroup.php b/civicrm/CRM/Mailing/DAO/MailingGroup.php index 8ba24cdcf50a564bae252f160612ce55cdf3d30a..6c1822212c9603dce4e4cded3433370989cf21e8 100644 --- a/civicrm/CRM/Mailing/DAO/MailingGroup.php +++ b/civicrm/CRM/Mailing/DAO/MailingGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2f336432221c4cf760f96a357b350c19) + * (GenCodeChecksum:1869c2f625f9a35820d1342217bd7feb) */ /** @@ -83,6 +83,13 @@ class CRM_Mailing_DAO_MailingGroup extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mailing Groups'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/MailingJob.php b/civicrm/CRM/Mailing/DAO/MailingJob.php index 7b14e357d7aeb7e0ed0d5f8bb3d4e489e842d8b0..f803973e1b93bdcc0c2b8896c3627ad3dd005e1a 100644 --- a/civicrm/CRM/Mailing/DAO/MailingJob.php +++ b/civicrm/CRM/Mailing/DAO/MailingJob.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/MailingJob.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5e4c25e9abb58572add0d540464feaa5) + * (GenCodeChecksum:b84e3c6e86ddabfe04066d742f5c0ca5) */ /** @@ -111,6 +111,13 @@ class CRM_Mailing_DAO_MailingJob extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Mailing Jobs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/Recipients.php b/civicrm/CRM/Mailing/DAO/Recipients.php index 436a115cfa3b50423e9e76b13d8fcb2e68197a56..d3511d4ab73dfbc4b40247dfceb9c142901725ec 100644 --- a/civicrm/CRM/Mailing/DAO/Recipients.php +++ b/civicrm/CRM/Mailing/DAO/Recipients.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Recipients.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3535ded1a75a43589d3db86cd9a08bdc) + * (GenCodeChecksum:589a6adc830c8f9197b5123e08b63ba3) */ /** @@ -69,6 +69,13 @@ class CRM_Mailing_DAO_Recipients extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Recipientses'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/Spool.php b/civicrm/CRM/Mailing/DAO/Spool.php index 9469bc70012d91c7d797f0683ad5e3d358f57720..d33871b7b72c521bd70a26ebe589dcfd5782bb9f 100644 --- a/civicrm/CRM/Mailing/DAO/Spool.php +++ b/civicrm/CRM/Mailing/DAO/Spool.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Spool.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3fd955406406788293cac394da08640f) + * (GenCodeChecksum:8e8346020e4f3174bc4c4c2e87d8e136) */ /** @@ -83,6 +83,13 @@ class CRM_Mailing_DAO_Spool extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Spools'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/DAO/TrackableURL.php b/civicrm/CRM/Mailing/DAO/TrackableURL.php index 07382e66d09166d6f91fcd95b793a957802f10c8..771c0e469e1750b0079ec6251ef04a15be321f21 100644 --- a/civicrm/CRM/Mailing/DAO/TrackableURL.php +++ b/civicrm/CRM/Mailing/DAO/TrackableURL.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/TrackableURL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3f5734de366fbddd3ce6d1f9e790c025) + * (GenCodeChecksum:6436cc3cfd3b7a43b468c5372ec081be) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_DAO_TrackableURL extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Trackable URLs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Bounce.php b/civicrm/CRM/Mailing/Event/DAO/Bounce.php index 1cadc80105503ca2fba54204e0209205ac059336..b21631b738695dd2136bcb496f57a8dbc88353e5 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Bounce.php +++ b/civicrm/CRM/Mailing/Event/DAO/Bounce.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Bounce.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1cff34c614e06913cd9a0b6fa5503453) + * (GenCodeChecksum:ca3431a45bad00b42a6bf347338041ed) */ /** @@ -69,6 +69,13 @@ class CRM_Mailing_Event_DAO_Bounce extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Bounces'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Confirm.php b/civicrm/CRM/Mailing/Event/DAO/Confirm.php index 7d784b902ba32f3f5d70fd8bdc65e4a50b30d583..bdde918922219e084572dce45dfad62c0cd4fa76 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/DAO/Confirm.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Confirm.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9e99bfa49af8367cb5d76abe738bdde4) + * (GenCodeChecksum:01729079bec5be7346678447b6cf2844) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_Event_DAO_Confirm extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Confirms'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Delivered.php b/civicrm/CRM/Mailing/Event/DAO/Delivered.php index e101d6a1865d1af6d84bf230aea857fb54ea0f14..1adada28bcb1a6f3a964ac383a67181c61d1b848 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Delivered.php +++ b/civicrm/CRM/Mailing/Event/DAO/Delivered.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Delivered.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:71067262cb4cbb239e3e48bdf5736426) + * (GenCodeChecksum:ced38ed0f599efdc44cca8dad6049d8c) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_Event_DAO_Delivered extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Delivereds'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Forward.php b/civicrm/CRM/Mailing/Event/DAO/Forward.php index 80cff654f6fc718db2a1feb23f63e192f163d395..d5bdfbf7ec1b7f67113387a89879cb672c8d6eab 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Forward.php +++ b/civicrm/CRM/Mailing/Event/DAO/Forward.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Forward.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7e9fc468aa06574c95c2e85ec598a5aa) + * (GenCodeChecksum:ea0e4a784e682347d7320337cb5bc1ac) */ /** @@ -62,6 +62,13 @@ class CRM_Mailing_Event_DAO_Forward extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Forwards'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Opened.php b/civicrm/CRM/Mailing/Event/DAO/Opened.php index 75398d8bb50a43010caded8f73cd4bdfc702661d..15b5e0394ea3fd32933ba439d25e9f22fa8d3f8c 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Opened.php +++ b/civicrm/CRM/Mailing/Event/DAO/Opened.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Opened.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8ccd44cc83346aacab2947005fe3ab4f) + * (GenCodeChecksum:8c6c5978fae73802fbd9984ef51a2576) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_Event_DAO_Opened extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Openeds'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Queue.php b/civicrm/CRM/Mailing/Event/DAO/Queue.php index 4ec2895b756c30bb67a2240f1063d493e208f116..40f075d0b363775123c09961c2b921cfbc472117 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Queue.php +++ b/civicrm/CRM/Mailing/Event/DAO/Queue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Queue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1ea4c6fc57b313fe415364ab68cb9ce2) + * (GenCodeChecksum:316f29677ad04a5347bfd30cd60f474e) */ /** @@ -76,6 +76,13 @@ class CRM_Mailing_Event_DAO_Queue extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Queues'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Reply.php b/civicrm/CRM/Mailing/Event/DAO/Reply.php index 657649267f17844dd216d530d45fb85bf32d1a4e..687cd8b30c455e6bc514511505ba1bad494ca081 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Reply.php +++ b/civicrm/CRM/Mailing/Event/DAO/Reply.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Reply.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2c637c8a7a3e72c6330912e89405af67) + * (GenCodeChecksum:a8246c6739f95a8e25d17ddebe882db7) */ /** @@ -55,6 +55,13 @@ class CRM_Mailing_Event_DAO_Reply extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Replies'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php index bc266a70ca617a6721d46a8774b17d5ff4cf8b2d..97e420d72bc92dbf5fca12025a6dcc51706da3e3 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Subscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d3ef623d60425885e58e31eabdf573df) + * (GenCodeChecksum:acb361992fd2db48c82ee7b13f8b7cf4) */ /** @@ -69,6 +69,13 @@ class CRM_Mailing_Event_DAO_Subscribe extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Subscribes'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php index d113370e85218fafc87d821fdc69b035c437ace0..07af2524c7d9e2f6f23dc4ed969883db9f78b0bc 100644 --- a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php +++ b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/TrackableURLOpen.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:01ad142f289c3cf9ff8b9c182e7198aa) + * (GenCodeChecksum:7d55cf77c7be3a81666b51aaa55c6358) */ /** @@ -62,6 +62,13 @@ class CRM_Mailing_Event_DAO_TrackableURLOpen extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Trackable URLOpens'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php index 365d809e3cddcd8b8737f5ab8390b3816bd68c49..9448593d04146e352e8769ff1ef60a58fa2e76e9 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Event/Unsubscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:691d1ae502930d1575931a248c3878f9) + * (GenCodeChecksum:d16e98421cdacbf5ad1b5542810fca6c) */ /** @@ -62,6 +62,13 @@ class CRM_Mailing_Event_DAO_Unsubscribe extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Unsubscribes'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index df5e17a48d3cd6e45c4d338f5531315dd2cc3a96..c927be1aff4a24cb6288002bce62e7b033cce411 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -1062,7 +1062,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND */ public static function getMembershipCount($membershipTypeId, $date = NULL, $isTest = 0, $isOwner = 0) { if (!CRM_Utils_Rule::date($date)) { - CRM_Core_Error::fatal(ts('Invalid date "%1" (must have form yyyy-mm-dd).', [1 => $date])); + throw new CRM_Core_Exception(ts('Invalid date "%1" (must have form yyyy-mm-dd).', [1 => $date])); } $params = [ @@ -1821,8 +1821,8 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND if ($contributionRecurID) { $memParams['contribution_recur_id'] = $contributionRecurID; } - // @todo stop passing $ids - it is empty - $membership = self::create($memParams, $ids); + + $membership = self::create($memParams); return [$membership, $renewalMode, $dates]; } @@ -1852,12 +1852,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND if (!empty($membershipSource)) { $currentMembership['source'] = $membershipSource; } - else { - $currentMembership['source'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', - $currentMembership['id'], - 'source' - ); - } if (!empty($currentMembership['id'])) { $ids['membership'] = $currentMembership['id']; @@ -1910,10 +1904,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND } $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed'; } - //CRM-4555 - if ($pending) { - $updateStatusId = array_search('Pending', $allStatus); - } } else { // NEW Membership diff --git a/civicrm/CRM/Member/DAO/Membership.php b/civicrm/CRM/Member/DAO/Membership.php index 57160484d2cd9cd752aee121ffaf9104c3bf7905..289f9ba2315fcb3f36e436e348e99e9a95277e0b 100644 --- a/civicrm/CRM/Member/DAO/Membership.php +++ b/civicrm/CRM/Member/DAO/Membership.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/Membership.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1cbe517a16a7e74e9997e351f52460c2) + * (GenCodeChecksum:9a307c1a63b4df70ae38f36ce4171cb6) */ /** @@ -21,6 +21,13 @@ class CRM_Member_DAO_Membership extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_membership'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-id-badge'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -142,6 +149,13 @@ class CRM_Member_DAO_Membership extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Memberships'); + } + /** * Returns foreign keys and entity references. * @@ -370,6 +384,7 @@ class CRM_Member_DAO_Membership extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '4.7', ], diff --git a/civicrm/CRM/Member/DAO/MembershipBlock.php b/civicrm/CRM/Member/DAO/MembershipBlock.php index a7ea683103ae35f0d2410dfdf0efc0bdd457ecbc..36b91c2eae02ac4eab1ee3ae16e0651af583f9ea 100644 --- a/civicrm/CRM/Member/DAO/MembershipBlock.php +++ b/civicrm/CRM/Member/DAO/MembershipBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5ff932a7b732b4d8b691f53bb4fc4a86) + * (GenCodeChecksum:317a1eb3c0a67ffe4662f939a0b1fb69) */ /** @@ -127,6 +127,13 @@ class CRM_Member_DAO_MembershipBlock extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Membership Blocks'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Member/DAO/MembershipLog.php b/civicrm/CRM/Member/DAO/MembershipLog.php index 466067d843ef69f4c75f7c1a8f24df83b1fd1930..2f44712bc7d0c94fd60fe12e81bda0a913e061eb 100644 --- a/civicrm/CRM/Member/DAO/MembershipLog.php +++ b/civicrm/CRM/Member/DAO/MembershipLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:858083dbe496612b1ff57fed14dbdef9) + * (GenCodeChecksum:ff966b7edcdd126ddef1ee3b3f3bff2f) */ /** @@ -97,6 +97,13 @@ class CRM_Member_DAO_MembershipLog extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Membership Logs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Member/DAO/MembershipPayment.php b/civicrm/CRM/Member/DAO/MembershipPayment.php index d501026fde2f1a2d170b7e635d1bb33730c74508..91c700e21a9571c60c33c3cade276efeaa0b0cf6 100644 --- a/civicrm/CRM/Member/DAO/MembershipPayment.php +++ b/civicrm/CRM/Member/DAO/MembershipPayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4a251affafac26bcf91a4f7fabc9bdc0) + * (GenCodeChecksum:b2fa8ca60001d75a9049ca179c4e68ce) */ /** @@ -55,6 +55,13 @@ class CRM_Member_DAO_MembershipPayment extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Membership Payments'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Member/DAO/MembershipStatus.php b/civicrm/CRM/Member/DAO/MembershipStatus.php index 56ad67081a3b92b37315728ad21204e249960ed5..c1b2afc1fe68c9f814c00946cd4b02db6b377124 100644 --- a/civicrm/CRM/Member/DAO/MembershipStatus.php +++ b/civicrm/CRM/Member/DAO/MembershipStatus.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipStatus.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:935934546722b83da3be04b4d4024886) + * (GenCodeChecksum:e6fe414d2b0dc3ff72ee5adcad75fab8) */ /** @@ -139,6 +139,13 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Membership Statuses'); + } + /** * Returns all the column names of this table * diff --git a/civicrm/CRM/Member/DAO/MembershipType.php b/civicrm/CRM/Member/DAO/MembershipType.php index 2895f4c28d7c0934246aceb7fa8d5754726df0be..63ef86aaaf653d3685eef164dea49761aafd3a21 100644 --- a/civicrm/CRM/Member/DAO/MembershipType.php +++ b/civicrm/CRM/Member/DAO/MembershipType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e4edc28d946143ba4a9b3ad701d50438) + * (GenCodeChecksum:20b0eec540f3bb69e386f86b29419391) */ /** @@ -177,6 +177,13 @@ class CRM_Member_DAO_MembershipType extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Membership Types'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index dd4d948daae327e6681f16760f6d3369a6d1ed06..007971bf21819c9be6b63d6f544b9e9622bcdb88 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -958,13 +958,9 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $form->_bltID )); - $date = CRM_Utils_Date::format($form->_params['credit_card_exp_date']); - $date = CRM_Utils_Date::mysqlToIso($date); - $form->assign('credit_card_exp_date', $date); - $form->assign('credit_card_number', - CRM_Utils_System::mungeCreditCard($form->_params['credit_card_number']) - ); - $form->assign('credit_card_type', $form->_params['credit_card_type']); + $valuesForForm = CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($form->_params); + $form->assignVariables($valuesForForm, ['credit_card_exp_date', 'credit_card_type', 'credit_card_number']); + $form->assign('contributeMode', 'direct'); $form->assign('isAmountzero', 0); $form->assign('is_pay_later', 0); diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php index 8f688e9b555b06c28343194107e83b1435ab8ce1..17b3dfc6f66a6867fd13ceefa536fb2e67fa8a2c 100644 --- a/civicrm/CRM/Member/Form/MembershipRenewal.php +++ b/civicrm/CRM/Member/Form/MembershipRenewal.php @@ -549,7 +549,6 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { 'amount' => $this->_params['total_amount'], 'contribution_status_id' => 'Pending', 'payment_processor_id' => $this->_params['payment_processor_id'], - 'campaign_id' => $this->_params['campaign_id'], 'financial_type_id' => $this->_params['financial_type_id'], 'is_email_receipt' => !empty($this->_params['send_receipt']), 'payment_instrument_id' => $this->_params['payment_instrument_id'], @@ -588,21 +587,13 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { $this->_params['is_pay_later'] = 1; } - // These variable sets prior to membership may not be required for this form. They were in - // a function this form shared with other forms. - $membershipSource = NULL; - if (!empty($this->_params['membership_source'])) { - $membershipSource = $this->_params['membership_source']; - } - $pending = ($this->_params['contribution_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending')); + $membership = $this->processMembership( $this->_contactID, $this->_params['membership_type_id'][1], $isTestMembership, $renewalDate, $customFieldsFormatted, $numRenewTerms, $this->_membershipId, $pending, - $contributionRecurID, $membershipSource, $this->_params['is_pay_later'], CRM_Utils_Array::value('campaign_id', - $this->_params) - ); + $contributionRecurID, $this->_params['is_pay_later']); $this->endDate = CRM_Utils_Date::processDate($membership->end_date); @@ -749,18 +740,14 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { * @param int $membershipID * @param $pending * @param int $contributionRecurID - * @param $membershipSource * @param $isPayLater - * @param int $campaignId * * @return CRM_Member_BAO_Membership * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function processMembership($contactID, $membershipTypeID, $is_test, $changeToday, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $campaignId) { - $updateStatusId = FALSE; + public function processMembership($contactID, $membershipTypeID, $is_test, $changeToday, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $isPayLater) { $allStatus = CRM_Member_PseudoConstant::membershipStatus(); - $format = '%Y%m%d'; $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID); $ids = []; @@ -792,116 +779,47 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { if ($contributionRecurID) { $memParams['contribution_recur_id'] = $contributionRecurID; } - // @todo stop passing $ids - it is empty - return CRM_Member_BAO_Membership::create($memParams, $ids); + return CRM_Member_BAO_Membership::create($memParams); } // Check and fix the membership if it is STALE CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($currentMembership, $changeToday); - // Now Renew the membership - if (!$currentMembership['is_current_member']) { - // membership is not CURRENT - - // CRM-7297 Membership Upsell - calculate dates based on new membership type - $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($currentMembership['id'], - $changeToday, - $membershipTypeID, - $numRenewTerms - ); - - $currentMembership['join_date'] = CRM_Utils_Date::customFormat($currentMembership['join_date'], $format); - foreach (['start_date', 'end_date'] as $dateType) { - $currentMembership[$dateType] = $dates[$dateType] ?? NULL; - } - $currentMembership['is_test'] = $is_test; + $isMembershipCurrent = $currentMembership['is_current_member']; - if (!empty($membershipSource)) { - $currentMembership['source'] = $membershipSource; - } - else { - $currentMembership['source'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', - $currentMembership['id'], - 'source' - ); - } - - if (!empty($currentMembership['id'])) { - $ids['membership'] = $currentMembership['id']; - } - $memParams = $currentMembership; - $memParams['membership_type_id'] = $membershipTypeID; - - //set the log start date. - $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); - } - else { + // CRM-7297 Membership Upsell - calculate dates based on new membership type + $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($currentMembership['id'], + $changeToday, + $membershipTypeID, + $numRenewTerms + ); + $memParams = [ + 'membership_type_id' => $membershipTypeID, + 'end_date' => $dates['end_date'] ?? NULL, + 'join_date' => $currentMembership['join_date'], + 'start_date' => $isMembershipCurrent ? $currentMembership['start_date'] : ($dates['start_date'] ?? NULL), + 'id' => $currentMembership['id'], + 'is_test' => $is_test, + // Since we are renewing, make status override false. + 'is_override' => FALSE, + 'modified_id' => $contactID, + 'log_start_date' => $dates['log_start_date'], + ]; + // Now Renew the membership + if ($isMembershipCurrent) { // CURRENT Membership - $membership = new CRM_Member_DAO_Membership(); - $membership->id = $currentMembership['id']; - $membership->find(TRUE); - // CRM-7297 Membership Upsell - calculate dates based on new membership type - $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membership->id, - $changeToday, - $membershipTypeID, - $numRenewTerms - ); - - // Insert renewed dates for CURRENT membership - $memParams = []; - $memParams['join_date'] = $membership->join_date; - $memParams['start_date'] = $membership->start_date; - $memParams['end_date'] = $dates['end_date'] ?? NULL; - $memParams['membership_type_id'] = $membershipTypeID; - - //set the log start date. - $memParams['log_start_date'] = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); - - //CRM-18067 - if (!empty($membershipSource)) { - $memParams['source'] = $membershipSource; - } - elseif (empty($membership->source)) { - $memParams['source'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', - $currentMembership['id'], - 'source' - ); - } - if (!empty($currentMembership['id'])) { $ids['membership'] = $currentMembership['id']; } $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed'; } - //CRM-4555 - if ($pending) { - $updateStatusId = array_search('Pending', $allStatus); - } // Putting this in an IF is precautionary as it seems likely that it would be ignored if empty, but // perhaps shouldn't be? if ($contributionRecurID) { $memParams['contribution_recur_id'] = $contributionRecurID; } - //CRM-4555 - //if we decided status here and want to skip status - //calculation in create( ); then need to pass 'skipStatusCal'. - if ($updateStatusId) { - $memParams['status_id'] = $updateStatusId; - $memParams['skipStatusCal'] = TRUE; - } - - //since we are renewing, - //make status override false. - $memParams['is_override'] = FALSE; - - $params['modified_id'] = $contactID; - - //inherit campaign from contrib page. - if (isset($campaignId)) { - $memParams['campaign_id'] = $campaignId; - } $memParams['custom'] = $customFieldsFormatted; // @todo stop passing $ids (membership and userId may be set by this point) diff --git a/civicrm/CRM/Member/Form/Task/Batch.php b/civicrm/CRM/Member/Form/Task/Batch.php index 0d25822fee239a3a231ea273dd864d70f451eaea..5c9f9760886f7ea7827511a2eff771a12fe08284 100644 --- a/civicrm/CRM/Member/Form/Task/Batch.php +++ b/civicrm/CRM/Member/Form/Task/Batch.php @@ -74,7 +74,7 @@ class CRM_Member_Form_Task_Batch extends CRM_Member_Form_Task { $ufGroupId = $this->get('ufGroupId'); if (!$ufGroupId) { - CRM_Core_Error::fatal('ufGroupId is missing'); + CRM_Core_Error::statusBounce('ufGroupId is missing'); } $this->_title = ts('Update multiple memberships') . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); CRM_Utils_System::setTitle($this->_title); diff --git a/civicrm/CRM/Member/Import/Parser.php b/civicrm/CRM/Member/Import/Parser.php index e009c5136581a2554215befa98d6781f3ffe64f4..7ad2f3f4cf80f96f24ded4a0fa6fa05ecbce0dc1 100644 --- a/civicrm/CRM/Member/Import/Parser.php +++ b/civicrm/CRM/Member/Import/Parser.php @@ -71,7 +71,7 @@ abstract class CRM_Member_Import_Parser extends CRM_Import_Parser { $totalRowCount = NULL ) { if (!is_array($fileName)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to determine import file'); } $fileName = $fileName['name']; diff --git a/civicrm/CRM/Member/Page/DashBoard.php b/civicrm/CRM/Member/Page/DashBoard.php index 8ba2539c1361a95036a7795bb844a86055072f4b..62dcf8faeb3eda3d1790af09208e3a5d7df4eecb 100644 --- a/civicrm/CRM/Member/Page/DashBoard.php +++ b/civicrm/CRM/Member/Page/DashBoard.php @@ -58,7 +58,7 @@ class CRM_Member_Page_DashBoard extends CRM_Core_Page { !checkdate(substr($ym, 4, 2), 1, substr($ym, 0, 4)) || substr($ym, 0, 1) == 0 ) { - CRM_Core_Error::fatal(ts('Invalid date query "%1" in URL (valid syntax is yyyymm).', array(1 => $ym))); + CRM_Core_Error::statusBounce(ts('Invalid date query "%1" in URL (valid syntax is yyyymm).', array(1 => $ym))); } $isPreviousMonth = 0; diff --git a/civicrm/CRM/Member/Page/MembershipStatus.php b/civicrm/CRM/Member/Page/MembershipStatus.php index 7850f140650a55b4243a23efeb46445fb32ffcc5..39a895c3b2c7f985030a1c15de3b630474d6a1f8 100644 --- a/civicrm/CRM/Member/Page/MembershipStatus.php +++ b/civicrm/CRM/Member/Page/MembershipStatus.php @@ -114,12 +114,25 @@ class CRM_Member_Page_MembershipStatus extends CRM_Core_Page_Basic { $dao->id ); } - if ($startEvent = CRM_Utils_Array::value('start_event', $membershipStatus[$dao->id])) { + $startEvent = $membershipStatus[$dao->id]['start_event'] ?? NULL; + $endEvent = $membershipStatus[$dao->id]['end_event'] ?? NULL; + $startEventUnit = $membershipStatus[$dao->id]['start_event_adjust_unit'] ?? NULL; + $endEventUnit = $membershipStatus[$dao->id]['end_event_adjust_unit'] ?? NULL; + $startEventInterval = $membershipStatus[$dao->id]['start_event_adjust_interval'] ?? NULL; + $endEventInterval = $membershipStatus[$dao->id]['end_event_adjust_interval'] ?? NULL; + + if ($startEvent) { $membershipStatus[$dao->id]['start_event'] = ($startEvent == 'join_date') ? 'member since' : str_replace("_", " ", $startEvent); } - if ($endEvent = CRM_Utils_Array::value('end_event', $membershipStatus[$dao->id])) { + if ($endEvent) { $membershipStatus[$dao->id]['end_event'] = ($endEvent == 'join_date') ? 'member since' : str_replace("_", " ", $endEvent); } + if ($startEventUnit && $startEventInterval) { + $membershipStatus[$dao->id]['start_event_adjust_unit_interval'] = "{$startEventInterval} {$startEventUnit}"; + } + if ($endEventUnit && $endEventInterval) { + $membershipStatus[$dao->id]['end_event_adjust_interval'] = "{$endEventInterval} {$endEventUnit}"; + } } // Add order changing widget to selector $returnURL = CRM_Utils_System::url('civicrm/admin/member/membershipStatus', "reset=1&action=browse"); diff --git a/civicrm/CRM/PCP/BAO/PCP.php b/civicrm/CRM/PCP/BAO/PCP.php index 95af552f52bc1d775c070f550f20394f3285964b..2ea752cdede29a1cde6b3bfa113d275182f35df7 100644 --- a/civicrm/CRM/PCP/BAO/PCP.php +++ b/civicrm/CRM/PCP/BAO/PCP.php @@ -665,7 +665,7 @@ WHERE pcp.id = %1 AND cc.contribution_status_id = %2 AND cc.is_test = 0"; if (!$domainEmailAddress || $domainEmailAddress == 'info@EXAMPLE.ORG') { $fixUrl = CRM_Utils_System::url("civicrm/admin/domain", 'action=update&reset=1'); - CRM_Core_Error::fatal(ts('The site administrator needs to enter a valid \'FROM Email Address\' in <a href="%1">Administer CiviCRM » Communications » FROM Email Addresses</a>. The email address used may need to be a valid mail account with your email service provider.', [1 => $fixUrl])); + throw new CRM_Core_Exception(ts('The site administrator needs to enter a valid \'FROM Email Address\' in <a href="%1">Administer CiviCRM » Communications » FROM Email Addresses</a>. The email address used may need to be a valid mail account with your email service provider.', [1 => $fixUrl])); } $receiptFrom = '"' . $domainEmailName . '" <' . $domainEmailAddress . '>'; @@ -913,7 +913,7 @@ INNER JOIN civicrm_uf_group ufgroup $params = [1 => [$component_id, 'Integer'], 2 => [$entity_table, 'String']]; if (!$supporterProfileId = CRM_Core_DAO::singleValueQuery($query, $params)) { - CRM_Core_Error::fatal(ts('Supporter profile is not set for this Personal Campaign Page or the profile is disabled. Please contact the site administrator if you need assistance.')); + throw new CRM_Core_Exception(ts('Supporter profile is not set for this Personal Campaign Page or the profile is disabled. Please contact the site administrator if you need assistance.')); } else { return $supporterProfileId; @@ -936,7 +936,7 @@ INNER JOIN civicrm_uf_group ufgroup WHERE pb.entity_id = %1 AND pb.entity_table = %2"; $params = [1 => [$component_id, 'Integer'], 2 => [$entity_table, 'String']]; if (!$ownerNotificationId = CRM_Core_DAO::singleValueQuery($query, $params)) { - CRM_Core_Error::fatal(ts('Owner Notification is not set for this Personal Campaign Page. Please contact the site administrator if you need assistance.')); + throw new CRM_Core_Exception(ts('Owner Notification is not set for this Personal Campaign Page. Please contact the site administrator if you need assistance.')); } else { return $ownerNotificationId; diff --git a/civicrm/CRM/PCP/DAO/PCP.php b/civicrm/CRM/PCP/DAO/PCP.php index c2c5c94d43d10ad11cad6f818d0ab0e3ac17af6b..f5d8ed236314e36c6d8f0690f44366f273fc465c 100644 --- a/civicrm/CRM/PCP/DAO/PCP.php +++ b/civicrm/CRM/PCP/DAO/PCP.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/PCP/PCP.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:360ac2bedc4d9fe6674640c2fcdc07f3) + * (GenCodeChecksum:30c5a26e001449a2ace9e530714e833c) */ /** @@ -134,6 +134,13 @@ class CRM_PCP_DAO_PCP extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('PCPs'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/PCP/DAO/PCPBlock.php b/civicrm/CRM/PCP/DAO/PCPBlock.php index 10a836b07ebdcdd891974a1fb5a773a688440a3a..897d9145f3b9f11bb30df5c5017ae7443248b94e 100644 --- a/civicrm/CRM/PCP/DAO/PCPBlock.php +++ b/civicrm/CRM/PCP/DAO/PCPBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/PCP/PCPBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e04c6965f513c4c17e99d2c21e504971) + * (GenCodeChecksum:039e37edb86cfd25e6c882ce4950e3c9) */ /** @@ -125,6 +125,13 @@ class CRM_PCP_DAO_PCPBlock extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('PCPBlocks'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/PCP/Form/Campaign.php b/civicrm/CRM/PCP/Form/Campaign.php index 59c56d9ca90eda205ad3a18b7b9b57d06b0b348a..bea78c69e22e13f797e69dfb521352436daa32de 100644 --- a/civicrm/CRM/PCP/Form/Campaign.php +++ b/civicrm/CRM/PCP/Form/Campaign.php @@ -300,7 +300,7 @@ class CRM_PCP_Form_Campaign extends CRM_Core_Form { if (!$domainEmailAddress || $domainEmailAddress == 'info@EXAMPLE.ORG') { $fixUrl = CRM_Utils_System::url('civicrm/admin/domain', 'action=update&reset=1'); - CRM_Core_Error::fatal(ts('The site administrator needs to enter a valid \'FROM Email Address\' in <a href="%1">Administer CiviCRM » Communications » FROM Email Addresses</a>. The email address used may need to be a valid mail account with your email service provider.', [1 => $fixUrl])); + CRM_Core_Error::statusBounce(ts('The site administrator needs to enter a valid \'FROM Email Address\' in <a href="%1">Administer CiviCRM » Communications » FROM Email Addresses</a>. The email address used may need to be a valid mail account with your email service provider.', [1 => $fixUrl])); } //if more than one email present for PCP notification , diff --git a/civicrm/CRM/PCP/Form/PCPAccount.php b/civicrm/CRM/PCP/Form/PCPAccount.php index 502543f49688a9ef9980f97e858f88d6e442457c..7c96a629cfa6521d100b6d6a64d6b03983a1ed1e 100644 --- a/civicrm/CRM/PCP/Form/PCPAccount.php +++ b/civicrm/CRM/PCP/Form/PCPAccount.php @@ -57,7 +57,7 @@ class CRM_PCP_Form_PCPAccount extends CRM_Core_Form { if (!$this->_pageId) { if (!$this->_id) { $msg = ts('We can\'t load the requested web page due to an incomplete link. This can be caused by using your browser\'s Back button or by using an incomplete or invalid link.'); - CRM_Core_Error::fatal($msg); + CRM_Core_Error::statusBounce($msg); } else { $this->_pageId = CRM_Core_DAO::getFieldValue('CRM_PCP_DAO_PCP', $this->_id, 'page_id'); @@ -65,7 +65,7 @@ class CRM_PCP_Form_PCPAccount extends CRM_Core_Form { } if (!$this->_pageId) { - CRM_Core_Error::fatal(ts('Could not find source page id.')); + CRM_Core_Error::statusBounce(ts('Could not find source page id.')); } $this->_single = $this->get('single'); diff --git a/civicrm/CRM/Pledge/BAO/Pledge.php b/civicrm/CRM/Pledge/BAO/Pledge.php index 1390af09f9a22d17a9b8786ab6284cb75881aa5c..31f8fbc3c4003ea78f2136fe9423f1e6ed1b8f9f 100644 --- a/civicrm/CRM/Pledge/BAO/Pledge.php +++ b/civicrm/CRM/Pledge/BAO/Pledge.php @@ -692,7 +692,7 @@ GROUP BY currency } if (is_a(CRM_Activity_BAO_Activity::create($activityParams), 'CRM_Core_Error')) { - CRM_Core_Error::fatal("Failed creating Activity for acknowledgment"); + throw new CRM_Core_Exception('Failed creating Activity for acknowledgment'); } } } diff --git a/civicrm/CRM/Pledge/BAO/PledgeBlock.php b/civicrm/CRM/Pledge/BAO/PledgeBlock.php index 2672e631cf95ee0c28d205c62e89ee7668aa4170..a3b80ff7d86102dd78c6140bef42a796ec75e31d 100644 --- a/civicrm/CRM/Pledge/BAO/PledgeBlock.php +++ b/civicrm/CRM/Pledge/BAO/PledgeBlock.php @@ -206,7 +206,7 @@ class CRM_Pledge_BAO_PledgeBlock extends CRM_Pledge_DAO_PledgeBlock { } // give error if empty or build form for payment. if (empty($payments)) { - CRM_Core_Error::fatal(ts("Oops. It looks like there is no valid payment status for online payment.")); + throw new CRM_Core_Exception(ts('Oops. It looks like there is no valid payment status for online payment.')); } else { $form->assign('is_pledge_payment', TRUE); diff --git a/civicrm/CRM/Pledge/DAO/Pledge.php b/civicrm/CRM/Pledge/DAO/Pledge.php index ee8e5a28a188b53b633500581dc300648e7d78cc..a7a0fb70802b9875b85c5ce25dbb78c236bfd4d7 100644 --- a/civicrm/CRM/Pledge/DAO/Pledge.php +++ b/civicrm/CRM/Pledge/DAO/Pledge.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/Pledge.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e5cb1313595fed926631aaf83d8d3d0a) + * (GenCodeChecksum:8373762a2a35ef14b0d763eb27db0f34) */ /** @@ -21,6 +21,13 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_pledge'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-paper-plane'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -195,6 +202,13 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Pledges'); + } + /** * Returns foreign keys and entity references. * @@ -446,6 +460,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'unique_title' => ts('Payments Start Date'), 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '2.1', ], @@ -464,6 +479,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '2.1', ], @@ -479,6 +495,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '2.1', ], @@ -506,6 +523,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '2.1', ], @@ -523,6 +541,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'unique_title' => ts('Payments Ended Date'), 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDate', ], 'add' => '2.1', ], diff --git a/civicrm/CRM/Pledge/DAO/PledgeBlock.php b/civicrm/CRM/Pledge/DAO/PledgeBlock.php index c08ac76e1177aba909a93ed869de994be01d32e2..1cb20cb50e2ec0d31befe22c314296d130ba2f14 100644 --- a/civicrm/CRM/Pledge/DAO/PledgeBlock.php +++ b/civicrm/CRM/Pledge/DAO/PledgeBlock.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/PledgeBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:322b270c5432e7f211c6929342c07b37) + * (GenCodeChecksum:fd4a1319ac7b6cdc29baa3e9e4df68de) */ /** @@ -113,6 +113,13 @@ class CRM_Pledge_DAO_PledgeBlock extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Pledge Blocks'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Pledge/DAO/PledgePayment.php b/civicrm/CRM/Pledge/DAO/PledgePayment.php index c996d897c25600540b6b0956abcff1e34ab7e976..b072dd7f069fdc0b7a82af573e2a8484e136b3d9 100644 --- a/civicrm/CRM/Pledge/DAO/PledgePayment.php +++ b/civicrm/CRM/Pledge/DAO/PledgePayment.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/PledgePayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2007ba5fe37e373777858c55e30abb85) + * (GenCodeChecksum:64c6aef9e06ba7320d917ec5515c5ffc) */ /** @@ -102,6 +102,13 @@ class CRM_Pledge_DAO_PledgePayment extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Pledge Payments'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index dcb362b67b310bc86e5bd4fc8e976a6d4912ae7b..2ed80ff8ebe8c62285c5729f15f6055ec85ccf02 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -1670,8 +1670,8 @@ WHERE ct.id = cp.financial_type_id AND break; default: - CRM_Core_Error::fatal("$table is not supported in PriceSet::usedBy()"); - break; + throw new CRM_Core_Exception("$table is not supported in PriceSet::usedBy()"); + } } return $usedBy; diff --git a/civicrm/CRM/Price/DAO/LineItem.php b/civicrm/CRM/Price/DAO/LineItem.php index c44147a8fc521179cec8896735a715a48b6d375d..1b09a54dc9f2f15a3492090492994d7567de335f 100644 --- a/civicrm/CRM/Price/DAO/LineItem.php +++ b/civicrm/CRM/Price/DAO/LineItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/LineItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:9438c70c88d9fad6c6bc0a1c0d88fb48) + * (GenCodeChecksum:84c128f076238b53a8c0c6dd23a22587) */ /** @@ -134,6 +134,13 @@ class CRM_Price_DAO_LineItem extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Line Items'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/DAO/PriceField.php b/civicrm/CRM/Price/DAO/PriceField.php index 46ce183e14a9e38899de632d03d8cb6ee9636a61..babe80632895216759756c1e8c821cb9e347172b 100644 --- a/civicrm/CRM/Price/DAO/PriceField.php +++ b/civicrm/CRM/Price/DAO/PriceField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b740a71018aacb367816617d3bd70abf) + * (GenCodeChecksum:7e0a818f8b8641ca3bae0abe1582c8ce) */ /** @@ -153,6 +153,13 @@ class CRM_Price_DAO_PriceField extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Price Fields'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/DAO/PriceFieldValue.php b/civicrm/CRM/Price/DAO/PriceFieldValue.php index fcb0bdd80292ee1866ed8a3fcf9da6e9cdf91737..d510c14b62d2932e308347a3aae70f5e07a1b0b7 100644 --- a/civicrm/CRM/Price/DAO/PriceFieldValue.php +++ b/civicrm/CRM/Price/DAO/PriceFieldValue.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceFieldValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e8fea47d461f49c72cfecdbb8f3e5bd4) + * (GenCodeChecksum:28432a14b1b1523380eb41e8e481037d) */ /** @@ -162,6 +162,13 @@ class CRM_Price_DAO_PriceFieldValue extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Price Field Values'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/DAO/PriceSet.php b/civicrm/CRM/Price/DAO/PriceSet.php index d2abf1769108acf315d61a07ba54ffd145a3be89..8fc97986b9fa74cbc13fea32df3bff2c58714220 100644 --- a/civicrm/CRM/Price/DAO/PriceSet.php +++ b/civicrm/CRM/Price/DAO/PriceSet.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceSet.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8a4b6c5ca727fd89ddc0bbe9450f74e0) + * (GenCodeChecksum:53c1906856d1a16d2edba1caa6a4fafc) */ /** @@ -127,6 +127,13 @@ class CRM_Price_DAO_PriceSet extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Price Sets'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/DAO/PriceSetEntity.php b/civicrm/CRM/Price/DAO/PriceSetEntity.php index 69756dee7b34099162286e649ee76a517104ec21..36ec1ec20a042b353c4874853a8a653bfc718d8c 100644 --- a/civicrm/CRM/Price/DAO/PriceSetEntity.php +++ b/civicrm/CRM/Price/DAO/PriceSetEntity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Price/PriceSetEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fdfd59f0c7a516382e6ae5c7bbdc181b) + * (GenCodeChecksum:a37bda1a3508a9195c561c2b2e4f03a7) */ /** @@ -64,6 +64,13 @@ class CRM_Price_DAO_PriceSetEntity extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Price Set Entities'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php index 0b7cbf2f648e7a6cfba05d352719b0c51f7f239c..571ab77be16ee7158efc542d658b88fa9d98a4c6 100644 --- a/civicrm/CRM/Price/Form/Field.php +++ b/civicrm/CRM/Price/Form/Field.php @@ -20,6 +20,31 @@ */ class CRM_Price_Form_Field extends CRM_Core_Form { + use CRM_Core_Form_EntityFormTrait; + + /** + * Explicitly declare the entity api name. + */ + public function getDefaultEntity() { + return 'PriceField'; + } + + /** + * Explicitly declare the form context. + */ + public function getDefaultContext() { + return 'create'; + } + + /** + * Get the entity id being edited. + * + * @return int|null + */ + public function getEntityId() { + return $this->_fid; + } + /** * Constants for number of options for data types of multiple option. */ @@ -57,8 +82,8 @@ class CRM_Price_Form_Field extends CRM_Core_Form { */ public function preProcess() { - $this->_sid = CRM_Utils_Request::retrieve('sid', 'Positive', $this, FALSE, NULL, 'REQUEST'); - $this->_fid = CRM_Utils_Request::retrieve('fid', 'Positive', $this, FALSE, NULL, 'REQUEST'); + $this->_sid = CRM_Utils_Request::retrieve('sid', 'Positive', $this); + $this->_fid = CRM_Utils_Request::retrieve('fid', 'Positive', $this); $url = CRM_Utils_System::url('civicrm/admin/price/field', "reset=1&action=browse&sid={$this->_sid}"); $breadCrumb = [['title' => ts('Price Set Fields'), 'url' => $url]]; @@ -78,20 +103,21 @@ class CRM_Price_Form_Field extends CRM_Core_Form { * * @return array * array of default values + * @throws \CRM_Core_Exception */ public function setDefaultValues() { $defaults = []; // is it an edit operation ? - if (isset($this->_fid)) { - $params = ['id' => $this->_fid]; - $this->assign('fid', $this->_fid); + if ($this->getEntityId()) { + $params = ['id' => $this->getEntityId()]; + $this->assign('fid', $this->getEntityId()); CRM_Price_BAO_PriceField::retrieve($params, $defaults); $this->_sid = $defaults['price_set_id']; // if text, retrieve price if ($defaults['html_type'] == 'Text') { $isActive = $defaults['is_active']; - $valueParams = ['price_field_id' => $this->_fid]; + $valueParams = ['price_field_id' => $this->getEntityId()]; CRM_Price_BAO_PriceFieldValue::retrieve($valueParams, $defaults); @@ -142,7 +168,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form { // add a hidden field to remember the price set id // this get around the browser tab issue $this->add('hidden', 'sid', $this->_sid); - $this->add('hidden', 'fid', $this->_fid); + $this->add('hidden', 'fid', $this->getEntityId()); // label $this->add('text', 'label', ts('Field Label'), CRM_Core_DAO::getAttribute('CRM_Price_DAO_PriceField', 'label'), TRUE); @@ -364,8 +390,8 @@ class CRM_Price_Form_Field extends CRM_Core_Form { * @param array $fields * Posted values of the form. * - * @param $files - * @param CRM_Core_Form $form + * @param array $files + * @param self $form * * @return array * if errors then list of errors to be posted back to the form, @@ -381,7 +407,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form { * Incomplete row checking is also required. */ if (($form->_action & CRM_Core_Action::ADD || $form->_action & CRM_Core_Action::UPDATE) && - $fields['html_type'] == 'Text' + $fields['html_type'] === 'Text' ) { if ($fields['price'] == NULL) { $errors['price'] = ts('Price is a required field'); @@ -397,7 +423,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form { $priceFieldLabel->price_set_id = $form->_sid; $dupeLabel = FALSE; - if ($priceFieldLabel->find(TRUE) && $form->_fid != $priceFieldLabel->id) { + if ($priceFieldLabel->find(TRUE) && $form->getEntityId() != $priceFieldLabel->id) { $dupeLabel = TRUE; } @@ -630,8 +656,8 @@ class CRM_Price_Form_Field extends CRM_Core_Form { if ($this->_action & (CRM_Core_Action::UPDATE | CRM_Core_Action::ADD)) { $fieldValues = ['price_set_id' => $this->_sid]; $oldWeight = NULL; - if ($this->_fid) { - $oldWeight = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $this->_fid, 'weight', 'id'); + if ($this->getEntityId()) { + $oldWeight = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $this->getEntityId(), 'weight', 'id'); } $params['weight'] = CRM_Utils_Weight::updateOtherWeights('CRM_Price_DAO_PriceField', $oldWeight, $params['weight'], $fieldValues); } @@ -657,15 +683,15 @@ class CRM_Price_Form_Field extends CRM_Core_Form { $params['option_visibility_id'] = [1 => CRM_Utils_Array::value('visibility_id', $params)]; } - if ($this->_fid) { - $params['id'] = $this->_fid; - } + $params['id'] = $this->getEntityId(); $params['membership_num_terms'] = (!empty($params['membership_type_id'])) ? CRM_Utils_Array::value('membership_num_terms', $params, 1) : NULL; $priceField = CRM_Price_BAO_PriceField::create($params); if (!is_a($priceField, 'CRM_Core_Error')) { + // Required by extensions implementing the postProcess hook (to get the ID of new entities) + $this->setEntityId($priceField->id); CRM_Core_Session::setStatus(ts('Price Field \'%1\' has been saved.', [1 => $priceField->label]), ts('Saved'), 'success'); } $buttonName = $this->controller->getButtonName(); diff --git a/civicrm/CRM/Price/Form/Option.php b/civicrm/CRM/Price/Form/Option.php index ff7a8758818b194b671f9bfb6c29a188ce8465ac..750bfb7f99cc29db6a176e1275a2475a2dc1d9fb 100644 --- a/civicrm/CRM/Price/Form/Option.php +++ b/civicrm/CRM/Price/Form/Option.php @@ -109,7 +109,7 @@ class CRM_Price_Form_Option extends CRM_Core_Form { if ($this->_action == CRM_Core_Action::UPDATE) { $finTypeId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $this->_oid, 'financial_type_id'); if (!CRM_Financial_BAO_FinancialType::checkPermissionToEditFinancialType($finTypeId)) { - CRM_Core_Error::fatal(ts("You do not have permission to access this page")); + CRM_Core_Error::statusBounce(ts("You do not have permission to access this page")); } } if ($this->_action == CRM_Core_Action::DELETE) { diff --git a/civicrm/CRM/Profile/Form.php b/civicrm/CRM/Profile/Form.php index 1d03a0a68340ee2a173a889c779be098b8d92bf5..31fe2d96bd9e91e17ac37301154ad6b16e947947 100644 --- a/civicrm/CRM/Profile/Form.php +++ b/civicrm/CRM/Profile/Form.php @@ -306,7 +306,7 @@ class CRM_Profile_Form extends CRM_Core_Form { if ($this->_multiRecord && !in_array($this->_multiRecord, [CRM_Core_Action::UPDATE, CRM_Core_Action::ADD, CRM_Core_Action::DELETE]) ) { - CRM_Core_Error::fatal(ts('Proper action not specified for this custom value record profile')); + CRM_Core_Error::statusBounce(ts('Proper action not specified for this custom value record profile')); } } $this->_duplicateButtonName = $this->getButtonName('upload', 'duplicate'); @@ -322,7 +322,7 @@ class CRM_Profile_Form extends CRM_Core_Form { // check if we are rendering mixed profiles if (CRM_Core_BAO_UFGroup::checkForMixProfiles($this->_profileIds)) { - CRM_Core_Error::fatal(ts('You cannot combine profiles of multiple types.')); + CRM_Core_Error::statusBounce(ts('You cannot combine profiles of multiple types.')); } // for now consider 1'st profile as primary profile and validate it @@ -358,7 +358,7 @@ class CRM_Profile_Form extends CRM_Core_Form { } if (empty($this->_ufGroup['is_active'])) { - CRM_Core_Error::fatal(ts('The requested profile (gid=%1) is inactive or does not exist.', [ + CRM_Core_Error::statusBounce(ts('The requested profile (gid=%1) is inactive or does not exist.', [ 1 => $this->_gid, ])); } @@ -407,12 +407,12 @@ class CRM_Profile_Form extends CRM_Core_Form { if (!$this->_recordId && ($this->_multiRecord == CRM_Core_Action::UPDATE || $this->_multiRecord == CRM_Core_Action::DELETE) ) { - CRM_Core_Error::fatal(ts('The requested Profile (gid=%1) requires record id while performing this action', + CRM_Core_Error::statusBounce(ts('The requested Profile (gid=%1) requires record id while performing this action', [1 => $this->_gid] )); } elseif (empty($this->_multiRecordFields)) { - CRM_Core_Error::fatal(ts('No Multi-Record Fields configured for this profile (gid=%1)', + CRM_Core_Error::statusBounce(ts('No Multi-Record Fields configured for this profile (gid=%1)', [1 => $this->_gid] )); } diff --git a/civicrm/CRM/Profile/Page/Dynamic.php b/civicrm/CRM/Profile/Page/Dynamic.php index 0ef7350a78d34252da73f7b8d1360d98cb324593..67f7edf0d508da8bf61ad99b64d6ea93efc51349 100644 --- a/civicrm/CRM/Profile/Page/Dynamic.php +++ b/civicrm/CRM/Profile/Page/Dynamic.php @@ -237,7 +237,7 @@ class CRM_Profile_Page_Dynamic extends CRM_Core_Page { if ($this->_isContactActivityProfile && $this->_gid) { $errors = CRM_Profile_Form::validateContactActivityProfile($this->_activityId, $this->_id, $this->_gid); if (!empty($errors)) { - CRM_Core_Error::fatal(array_pop($errors)); + CRM_Core_Error::statusBounce(array_pop($errors)); } } diff --git a/civicrm/CRM/Profile/Page/Listings.php b/civicrm/CRM/Profile/Page/Listings.php index 46807507ce5453ef99deaa38d17672214a9d7a9c..963d59b27fc8e26247728904b5886aa907e702df 100644 --- a/civicrm/CRM/Profile/Page/Listings.php +++ b/civicrm/CRM/Profile/Page/Listings.php @@ -100,7 +100,7 @@ class CRM_Profile_Page_Listings extends CRM_Core_Page { // check if we are rendering mixed profiles if (CRM_Core_BAO_UFGroup::checkForMixProfiles($this->_profileIds)) { - CRM_Core_Error::fatal(ts('You cannot combine profiles of multiple types.')); + CRM_Core_Error::statusBounce(ts('You cannot combine profiles of multiple types.')); } $this->_gid = $this->_profileIds[0]; @@ -282,7 +282,7 @@ class CRM_Profile_Page_Listings extends CRM_Core_Page { $ufgroupDAO = new CRM_Core_DAO_UFGroup(); $ufgroupDAO->id = $this->_gid; if (!$ufgroupDAO->find(TRUE)) { - CRM_Core_Error::fatal(); + CRM_Core_Error::statusBounce('Unable to find matching UF Group'); } } diff --git a/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php b/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php index 18cba944bfb6f2013e617b8d82263ad2992d177a..e9c5e56995bcf9b84e7fb8cb28f1ddbf7a5f0391 100644 --- a/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php +++ b/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php @@ -53,7 +53,7 @@ class CRM_Profile_Page_MultipleRecordFieldsListing extends CRM_Core_Page_Basic { * (reference) of action links */ public function &links() { - if (!(self::$_links[$this->_pageViewType])) { + if (!isset(self::$_links[$this->_pageViewType])) { // helper variable for nicer formatting $links = []; diff --git a/civicrm/CRM/Profile/Page/View.php b/civicrm/CRM/Profile/Page/View.php index 0dbaf37bf0e415fbfe9b4a7a53bf9750074617b7..e23fada8bd1d7ba2536476cccec86587a01ec5b0 100644 --- a/civicrm/CRM/Profile/Page/View.php +++ b/civicrm/CRM/Profile/Page/View.php @@ -49,7 +49,7 @@ class CRM_Profile_Page_View extends CRM_Core_Page { $session = CRM_Core_Session::singleton(); $this->_id = $session->get('userID'); if (!$this->_id) { - CRM_Core_Error::fatal(ts('Could not find the required contact id parameter (id=) for viewing a contact record with a Profile.')); + CRM_Core_Error::statusBounce(ts('Could not find the required contact id parameter (id=) for viewing a contact record with a Profile.')); } } $this->assign('cid', $this->_id); @@ -66,7 +66,7 @@ class CRM_Profile_Page_View extends CRM_Core_Page { // check if we are rendering mixed profiles if (CRM_Core_BAO_UFGroup::checkForMixProfiles($profileIds)) { - CRM_Core_Error::fatal(ts('You cannot combine profiles of multiple types.')); + CRM_Core_Error::statusBounce(ts('You cannot combine profiles of multiple types.')); } $this->_gid = $profileIds[0]; diff --git a/civicrm/CRM/Queue/DAO/QueueItem.php b/civicrm/CRM/Queue/DAO/QueueItem.php index a20e968e62b2b40e1a98847f0a73e06f2456d84a..64ea7e895041eb8bf07d7ca8400bda13beccb2be 100644 --- a/civicrm/CRM/Queue/DAO/QueueItem.php +++ b/civicrm/CRM/Queue/DAO/QueueItem.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Queue/QueueItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:a11ee75685201c0305a6359b54421122) + * (GenCodeChecksum:f71816c891a0730a45d4363883a5756c) */ /** @@ -74,6 +74,13 @@ class CRM_Queue_DAO_QueueItem extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Queue Items'); + } + /** * Returns all the column names of this table * @@ -140,6 +147,7 @@ class CRM_Queue_DAO_QueueItem extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => NULL, ], @@ -155,6 +163,7 @@ class CRM_Queue_DAO_QueueItem extends CRM_Core_DAO { 'localizable' => 0, 'html' => [ 'type' => 'Select Date', + 'formatType' => 'activityDateTime', ], 'add' => NULL, ], diff --git a/civicrm/CRM/Queue/Page/Runner.php b/civicrm/CRM/Queue/Page/Runner.php index 07ca85b1d0a28ea5912ef89fb2c5f6725400de19..ac46d87104ec5eb1f168c7128a798f7615c73240 100644 --- a/civicrm/CRM/Queue/Page/Runner.php +++ b/civicrm/CRM/Queue/Page/Runner.php @@ -36,7 +36,7 @@ class CRM_Queue_Page_Runner extends CRM_Core_Page { $qrid = CRM_Utils_Request::retrieve('qrid', 'String', $this, TRUE); $runner = CRM_Queue_Runner::instance($qrid); if (!is_object($runner)) { - CRM_Core_Error::fatal('Queue runner must be configured before execution.'); + CRM_Core_Error::statusBounce('Queue runner must be configured before execution.'); } CRM_Utils_System::setTitle($runner->title); diff --git a/civicrm/CRM/Queue/Queue/Sql.php b/civicrm/CRM/Queue/Queue/Sql.php index 1258b533a852d88f8117066eb52aaad23f0d2a0d..3f6c474a9468fb204db677d8ea919ac24a6089c6 100644 --- a/civicrm/CRM/Queue/Queue/Sql.php +++ b/civicrm/CRM/Queue/Queue/Sql.php @@ -130,7 +130,7 @@ class CRM_Queue_Queue_Sql extends CRM_Queue_Queue { $dao = CRM_Core_DAO::executeQuery($sql, $params, TRUE, 'CRM_Queue_DAO_QueueItem'); if (is_a($dao, 'DB_Error')) { // FIXME - Adding code to allow tests to pass - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unable to claim queue item'); } if ($dao->fetch()) { diff --git a/civicrm/CRM/Queue/Queue/SqlParallel.php b/civicrm/CRM/Queue/Queue/SqlParallel.php new file mode 100644 index 0000000000000000000000000000000000000000..9eb12ac883dba0ab11b8adea2f10368cff433dbb --- /dev/null +++ b/civicrm/CRM/Queue/Queue/SqlParallel.php @@ -0,0 +1,210 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * A queue implementation which stores items in the CiviCRM SQL database + */ +class CRM_Queue_Queue_SqlParallel extends CRM_Queue_Queue { + + /** + * Create a reference to queue. After constructing the queue, one should + * usually call createQueue (if it's a new queue) or loadQueue (if it's + * known to be an existing queue). + * + * @param array $queueSpec + * Array with keys: + * - type: string, required, e.g. "interactive", "immediate", "stomp", + * "beanstalk" + * - name: string, required, e.g. "upgrade-tasks" + * - reset: bool, optional; if a queue is found, then it should be + * flushed; default to TRUE + * - (additional keys depending on the queue provider). + */ + public function __construct($queueSpec) { + parent::__construct($queueSpec); + } + + /** + * Perform any registation or resource-allocation for a new queue + */ + public function createQueue() { + // nothing to do -- just start CRUDing items in the appropriate table + } + + /** + * Perform any loading or pre-fetch for an existing queue. + */ + public function loadQueue() { + // nothing to do -- just start CRUDing items in the appropriate table + } + + /** + * Release any resources claimed by the queue (memory, DB rows, etc) + */ + public function deleteQueue() { + return CRM_Core_DAO::singleValueQuery(" + DELETE FROM civicrm_queue_item + WHERE queue_name = %1 + ", [ + 1 => [$this->getName(), 'String'], + ]); + } + + /** + * Check if the queue exists. + * + * @return bool + */ + public function existsQueue() { + return ($this->numberOfItems() > 0); + } + + /** + * Add a new item to the queue. + * + * @param mixed $data + * Serializable PHP object or array. + * @param array $options + * Queue-dependent options; for example, if this is a + * priority-queue, then $options might specify the item's priority. + */ + public function createItem($data, $options = []) { + $dao = new CRM_Queue_DAO_QueueItem(); + $dao->queue_name = $this->getName(); + $dao->submit_time = CRM_Utils_Time::getTime('YmdHis'); + $dao->data = serialize($data); + $dao->weight = CRM_Utils_Array::value('weight', $options, 0); + $dao->save(); + } + + /** + * Determine number of items remaining in the queue. + * + * @return int + */ + public function numberOfItems() { + return CRM_Core_DAO::singleValueQuery(" + SELECT count(*) + FROM civicrm_queue_item + WHERE queue_name = %1 + ", [ + 1 => [$this->getName(), 'String'], + ]); + } + + /** + * Get the next item. + * + * @param int $lease_time + * Seconds. + * + * @return object + * With key 'data' that matches the inputted data. + */ + public function claimItem($lease_time = 3600) { + + $result = NULL; + $dao = CRM_Core_DAO::executeQuery('LOCK TABLES civicrm_queue_item WRITE;'); + $sql = "SELECT id, queue_name, submit_time, release_time, data + FROM civicrm_queue_item + WHERE queue_name = %1 + AND release_time IS NULL + ORDER BY weight ASC, id ASC + LIMIT 1 + "; + $params = [ + 1 => [$this->getName(), 'String'], + ]; + $dao = CRM_Core_DAO::executeQuery($sql, $params, TRUE, 'CRM_Queue_DAO_QueueItem'); + if (is_a($dao, 'DB_Error')) { + // FIXME - Adding code to allow tests to pass + CRM_Core_Error::fatal(); + } + + if ($dao->fetch()) { + $nowEpoch = CRM_Utils_Time::getTimeRaw(); + CRM_Core_DAO::executeQuery("UPDATE civicrm_queue_item SET release_time = %1 WHERE id = %2", [ + '1' => [date('YmdHis', $nowEpoch + $lease_time), 'String'], + '2' => [$dao->id, 'Integer'], + ]); + // (Comment by artfulrobot Sep 2019: Not sure what the below comment means, should be removed/clarified?) + // work-around: inconsistent date-formatting causes unintentional breakage + # $dao->submit_time = date('YmdHis', strtotime($dao->submit_time)); + # $dao->release_time = date('YmdHis', $nowEpoch + $lease_time); + # $dao->save(); + $dao->data = unserialize($dao->data); + $result = $dao; + } + + $dao = CRM_Core_DAO::executeQuery('UNLOCK TABLES;'); + + return $result; + } + + /** + * Get the next item, even if there's an active lease + * + * @param int $lease_time + * Seconds. + * + * @return object + * With key 'data' that matches the inputted data. + */ + public function stealItem($lease_time = 3600) { + $sql = " + SELECT id, queue_name, submit_time, release_time, data + FROM civicrm_queue_item + WHERE queue_name = %1 + ORDER BY weight ASC, id ASC + LIMIT 1 + "; + $params = [ + 1 => [$this->getName(), 'String'], + ]; + $dao = CRM_Core_DAO::executeQuery($sql, $params, TRUE, 'CRM_Queue_DAO_QueueItem'); + if ($dao->fetch()) { + $nowEpoch = CRM_Utils_Time::getTimeRaw(); + CRM_Core_DAO::executeQuery("UPDATE civicrm_queue_item SET release_time = %1 WHERE id = %2", [ + '1' => [date('YmdHis', $nowEpoch + $lease_time), 'String'], + '2' => [$dao->id, 'Integer'], + ]); + $dao->data = unserialize($dao->data); + return $dao; + } + } + + /** + * Remove an item from the queue. + * + * @param CRM_Core_DAO $dao + * The item returned by claimItem. + */ + public function deleteItem($dao) { + $dao->delete(); + $dao->free(); + } + + /** + * Return an item that could not be processed. + * + * @param CRM_Core_DAO $dao + * The item returned by claimItem. + */ + public function releaseItem($dao) { + $sql = "UPDATE civicrm_queue_item SET release_time = NULL WHERE id = %1"; + $params = [ + 1 => [$dao->id, 'Integer'], + ]; + CRM_Core_DAO::executeQuery($sql, $params); + $dao->free(); + } + +} diff --git a/civicrm/CRM/Report/DAO/ReportInstance.php b/civicrm/CRM/Report/DAO/ReportInstance.php index 3a2e2b6dfd8d7cbfa2b8a37463237cd89e50b42c..591332e6701678c2610e21e28e32137252f82ac8 100644 --- a/civicrm/CRM/Report/DAO/ReportInstance.php +++ b/civicrm/CRM/Report/DAO/ReportInstance.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Report/ReportInstance.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7b5175943d5fe8579b0ce45e48388721) + * (GenCodeChecksum:5e7790bacc5ffff1ecfcaada1abeafec) */ /** @@ -21,6 +21,13 @@ class CRM_Report_DAO_ReportInstance extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_report_instance'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-bar-chart'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -181,6 +188,13 @@ class CRM_Report_DAO_ReportInstance extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Reports'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 3690f84c8cb28f149e4609da6030b503be1c82bf..2bd8d4d5069bbc8019b1c12d65f0594864c9ea5e 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -139,11 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form { */ protected $_groupFilter = FALSE; - /** - * Required for civiexportexcel. - */ - public $supportsExportExcel = TRUE; - /** * Has the report been optimised for group filtering. * @@ -617,7 +612,7 @@ class CRM_Report_Form extends CRM_Core_Form { $this->_instanceValues ); if (empty($this->_instanceValues)) { - CRM_Core_Error::fatal("Report could not be loaded."); + CRM_Core_Error::statusBounce("Report could not be loaded."); } $this->_title = $this->_instanceValues['title']; if (!empty($this->_instanceValues['permission']) && @@ -686,7 +681,7 @@ class CRM_Report_Form extends CRM_Core_Form { // Do not display Report Settings section if administer Reports permission is absent OR // if report instance is reserved and administer reserved reports absent if (!CRM_Core_Permission::check('administer Reports') || - ($this->_instanceValues['is_reserved'] && + (!empty($this->_instanceValues['is_reserved']) && !CRM_Core_Permission::check('administer reserved reports')) ) { $this->_instanceForm = FALSE; @@ -697,7 +692,7 @@ class CRM_Report_Form extends CRM_Core_Form { if (CRM_Core_Permission::check('administer Reports') || CRM_Core_Permission::check('access Report Criteria') ) { - if (!$this->_instanceValues['is_reserved'] || + if (empty($this->_instanceValues['is_reserved']) || CRM_Core_Permission::check('administer reserved reports') ) { $this->assign('criteriaForm', TRUE); @@ -1440,7 +1435,7 @@ class CRM_Report_Form extends CRM_Core_Form { if (!CRM_Core_Permission::check('view report sql')) { return; } - $ignored_output_modes = ['pdf', 'csv', 'print', 'excel2007']; + $ignored_output_modes = ['pdf', 'csv', 'print']; if (in_array($this->_outputMode, $ignored_output_modes)) { return; } @@ -2866,11 +2861,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $this->_absoluteUrl = TRUE; $this->addPaging = FALSE; } - elseif ($this->_outputMode == 'excel2007') { - $printOnly = TRUE; - $this->_absoluteUrl = TRUE; - $this->addPaging = FALSE; - } elseif ($this->_outputMode == 'copy' && $this->_criteriaForm) { $this->_createNew = TRUE; } @@ -3508,9 +3498,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND elseif ($this->_outputMode == 'csv') { CRM_Report_Utils_Report::export2csv($this, $rows); } - elseif ($this->_outputMode == 'excel2007') { - CRM_CiviExportExcel_Utils_Report::export2excel2007($this, $rows); - } elseif ($this->_outputMode == 'group') { $group = $this->_params['groups']; $this->add2group($group); diff --git a/civicrm/CRM/Report/Form/Activity.php b/civicrm/CRM/Report/Form/Activity.php index 19c6a9fc3e8fbdd8b14e14860f3dec74f35eea07..e0c5b6408eeba56a61a08b78eada9c026ad5d991 100644 --- a/civicrm/CRM/Report/Form/Activity.php +++ b/civicrm/CRM/Report/Form/Activity.php @@ -643,7 +643,7 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { */ public function add2group($groupID) { if (CRM_Utils_Array::value("contact_target_op", $this->_params) == 'nll') { - CRM_Core_Error::fatal(ts('Current filter criteria didn\'t have any target contact to add to group')); + CRM_Core_Error::statusBounce(ts('Current filter criteria didn\'t have any target contact to add to group')); } $new_select = 'AS addtogroup_contact_id'; diff --git a/civicrm/CRM/Report/Form/Contact/LoggingSummary.php b/civicrm/CRM/Report/Form/Contact/LoggingSummary.php index c3ed3f542922d6c3febce46c75c5b03900accd13..8b347fb735b7ddbb58cdcb13389f249af1d799a2 100644 --- a/civicrm/CRM/Report/Form/Contact/LoggingSummary.php +++ b/civicrm/CRM/Report/Form/Contact/LoggingSummary.php @@ -178,6 +178,9 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { * * @param array $rows * Rows generated by SQL, with an array for each row. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function alterDisplay(&$rows) { // cache for id → is_deleted mapping @@ -206,9 +209,9 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { $row['log_civicrm_entity_altered_contact_hover'] = ts("Go to contact summary"); $entity = $this->getEntityValue($row['log_civicrm_entity_id'], $row['log_civicrm_entity_log_type'], $row['log_civicrm_entity_log_date']); if ($entity) { - $row['log_civicrm_entity_altered_contact'] = $row['log_civicrm_entity_altered_contact'] . " [{$entity}]"; + $row['log_civicrm_entity_altered_contact'] .= " [{$entity}]"; } - if ($entity == 'Contact Merged') { + if ($entity === 'Contact Merged') { // We're looking at a merge activity created against the surviving // contact record. There should be a single activity created against // the deleted contact record, with this activity as parent. @@ -228,14 +231,14 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { } $row['altered_by_contact_display_name_link'] = CRM_Utils_System::url('civicrm/contact/view', 'reset=1&cid=' . $row['log_civicrm_entity_log_user_id']); - $row['altered_by_contact_display_name_hover'] = ts("Go to contact summary"); + $row['altered_by_contact_display_name_hover'] = ts('Go to contact summary'); - if ($row['log_civicrm_entity_is_deleted'] and 'Update' == CRM_Utils_Array::value('log_civicrm_entity_log_action', $row)) { + if ($row['log_civicrm_entity_is_deleted'] && 'Update' === $row['log_civicrm_entity_log_action']) { $row['log_civicrm_entity_log_action'] = ts('Delete (to trash)'); } - if ('Contact' == CRM_Utils_Array::value('log_type', $this->_logTables[$row['log_civicrm_entity_log_type']]) && - CRM_Utils_Array::value('log_civicrm_entity_log_action', $row) == ts('Insert') + if ('Contact' === ($this->_logTables[$row['log_civicrm_entity_log_type']]['log_type'] ?? NULL) && + $row['log_civicrm_entity_log_action'] === ts('Insert') ) { $row['log_civicrm_entity_log_action'] = ts('Update'); } @@ -246,7 +249,7 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { if ($newAction = $this->getEntityAction($row['log_civicrm_entity_id'], $row['log_civicrm_entity_log_conn_id'], $row['log_civicrm_entity_log_type'], - CRM_Utils_Array::value('log_civicrm_entity_log_action', $row)) + ($row['log_civicrm_entity_log_action'] ?? NULL)) ) { $row['log_civicrm_entity_log_action'] = $newAction; } @@ -255,7 +258,7 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { $date = CRM_Utils_Date::isoToMysql($row['log_civicrm_entity_log_date']); - if (in_array(CRM_Utils_Array::value('log_civicrm_entity_log_action', $row), ['Update', 'Delete'])) { + if (in_array(($row['log_civicrm_entity_log_action'] ?? NULL), ['Update', 'Delete'])) { $row = $this->addDetailReportLinksToRow($baseQueryCriteria, $row); } @@ -293,7 +296,7 @@ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { $entity = $this->currentLogTable; $detail = $this->_logTables[$entity]; - $tableName = CRM_Utils_Array::value('table_name', $detail, $entity); + $tableName = $detail['table_name'] ?? $entity; $clause = $detail['entity_table'] ?? NULL; $clause = $clause ? "AND entity_log_civireport.entity_table = 'civicrm_contact'" : NULL; @@ -333,6 +336,7 @@ LEFT JOIN civicrm_contact altered_by_contact_civireport protected function addDetailReportLinksToRow($baseQueryCriteria, $row) { $q = $baseQueryCriteria; $q .= (!empty($row['log_civicrm_entity_altered_contact'])) ? '&alteredName=' . $row['log_civicrm_entity_altered_contact'] : ''; + $q .= (!empty($row['log_civicrm_entity_altered_contact_id'])) ? '&cid=' . $row['log_civicrm_entity_altered_contact_id'] : ''; $q .= (!empty($row['altered_by_contact_display_name'])) ? '&alteredBy=' . $row['altered_by_contact_display_name'] : ''; $q .= (!empty($row['log_civicrm_entity_log_user_id'])) ? '&alteredById=' . $row['log_civicrm_entity_log_user_id'] : ''; diff --git a/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php b/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php index 12deba433c32f83bd00413901d1b3526b8656b66..ebec5bd4233362474e65205817845708e01bddf0 100644 --- a/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php +++ b/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php @@ -643,6 +643,7 @@ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form { $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'); $creditCardTypes = CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id'); foreach ($rows as $rowNum => $row) { + $entryFound = FALSE; // convert display name to links if (array_key_exists('civicrm_contact_sort_name', $row) && !empty($rows[$rowNum]['civicrm_contact_sort_name']) && diff --git a/civicrm/CRM/Report/Form/Contribute/Summary.php b/civicrm/CRM/Report/Form/Contribute/Summary.php index ea28427be49aa08b8e155493a3b02773a270a65a..29dd59842e0bfe5f141831a2636ca192bb1596e8 100644 --- a/civicrm/CRM/Report/Form/Contribute/Summary.php +++ b/civicrm/CRM/Report/Form/Contribute/Summary.php @@ -354,7 +354,7 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { $fy = $config->fiscalYearStart; $fiscal = self::fiscalYearOffset($field['dbAlias']); - $select[] = "DATE_ADD(MAKEDATE({$fiscal}, 1), INTERVAL ({$fy{'M'}})-1 MONTH) AS {$tableName}_{$fieldName}_start"; + $select[] = "DATE_ADD(MAKEDATE({$fiscal}, 1), INTERVAL ({$fy['M']})-1 MONTH) AS {$tableName}_{$fieldName}_start"; $select[] = "{$fiscal} AS {$tableName}_{$fieldName}_subtotal"; $select[] = "{$fiscal} AS {$tableName}_{$fieldName}_interval"; $field['title'] = ts('Fiscal Year Beginning'); @@ -764,9 +764,9 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { /** * Build chart. * - * @param array $rows + * @param array $original_rows */ - public function buildChart(&$rows) { + public function buildChart(&$original_rows) { $graphRows = []; if (!empty($this->_params['charts'])) { @@ -775,6 +775,14 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { $contrib = !empty($this->_params['fields']['total_amount']); $softContrib = !empty($this->_params['fields']['soft_amount']); + // Make a copy so that we don't affect what gets passed later to hooks etc. + $rows = $original_rows; + if ($this->_rollup) { + // Remove the total row otherwise it overwrites the real last month's data since it has the + // same date. + array_pop($rows); + } + foreach ($rows as $key => $row) { if ($row['civicrm_contribution_receive_date_subtotal']) { $graphRows['receive_date'][] = $row['civicrm_contribution_receive_date_start']; diff --git a/civicrm/CRM/Report/Form/Grant/Statistics.php b/civicrm/CRM/Report/Form/Grant/Statistics.php index df5597aa615ad4620a21befbf64f2d6f8d68e3ab..3712539aa61267f5a0cdeaed357401c16b9cea77 100644 --- a/civicrm/CRM/Report/Form/Grant/Statistics.php +++ b/civicrm/CRM/Report/Form/Grant/Statistics.php @@ -513,7 +513,7 @@ SELECT COUNT({$this->_aliases['civicrm_grant']}.id) as count , return; } - $currencies = CRM_Core_PseudoConstant::get('CRM_Grant_DAO_Grant', 'currency', ['labelColumn' => 'symbol']); + $currencies = CRM_Core_PseudoConstant::get('CRM_Grant_DAO_Grant', 'currency', ['labelColumn' => 'name']); $currency = $currencies[$values['civicrm_grant_currency']]; if (!$customData) { diff --git a/civicrm/CRM/Report/Page/Options.php b/civicrm/CRM/Report/Page/Options.php index 71c005d679eb1797d4e79139c5d6460bb24bde79..a5852f190283a9213b08682ab14c12b07df8ffc8 100644 --- a/civicrm/CRM/Report/Page/Options.php +++ b/civicrm/CRM/Report/Page/Options.php @@ -63,7 +63,7 @@ class CRM_Report_Page_Options extends CRM_Core_Page_Basic { self::$_gId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', self::$_gName, 'id', 'name'); } else { - CRM_Core_Error::fatal(); + CRM_Core_Error::statusBounce('Unable to determine the Option Group'); } self::$_GName = ucwords(str_replace('_', ' ', self::$_gName)); diff --git a/civicrm/CRM/SMS/DAO/Provider.php b/civicrm/CRM/SMS/DAO/Provider.php index f82e83787d867a300364c57cbf65a42f9ec8a438..8f87fa5a1402fc1b4607aae28cf50860be450bd6 100644 --- a/civicrm/CRM/SMS/DAO/Provider.php +++ b/civicrm/CRM/SMS/DAO/Provider.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/SMS/Provider.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:03d4a6a4297d1f73bcfc009062f318c0) + * (GenCodeChecksum:b512d0ed25ec37b9c890952e48c667e6) */ /** @@ -103,6 +103,13 @@ class CRM_SMS_DAO_Provider extends CRM_Core_DAO { parent::__construct(); } + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() { + return ts('Providers'); + } + /** * Returns foreign keys and entity references. * diff --git a/civicrm/CRM/UF/Form/Inline/Preview.php b/civicrm/CRM/UF/Form/Inline/Preview.php index afb81c278c60ec062265f6b7110c9919aac2cc1e..49f1adbd97c3086be84fd06794478e0b9147d2e4 100644 --- a/civicrm/CRM/UF/Form/Inline/Preview.php +++ b/civicrm/CRM/UF/Form/Inline/Preview.php @@ -9,12 +9,6 @@ +--------------------------------------------------------------------+ */ -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ - /** * This class generates form components * for previewing Civicrm Profile Group @@ -27,10 +21,10 @@ class CRM_UF_Form_Inline_Preview extends CRM_UF_Form_AbstractPreview { * gets session variables for group or field id */ public function preProcess() { - if ($_SERVER['REQUEST_METHOD'] != 'POST') { + if ($_SERVER['REQUEST_METHOD'] !== 'POST') { // CRM_Core_Controller validates qfKey for POST requests, but not necessarily // for GET requests. Allowing GET would therefore be CSRF vulnerability. - CRM_Core_Error::fatal(ts('Preview only supports HTTP POST')); + CRM_Core_Error::statusBounce(ts('Preview only supports HTTP POST')); } // Inline forms don't get menu-level permission checks $checkPermission = [ @@ -45,15 +39,12 @@ class CRM_UF_Form_Inline_Preview extends CRM_UF_Form_AbstractPreview { $content = json_decode($_REQUEST['ufData'], TRUE); foreach (['ufGroup', 'ufFieldCollection'] as $key) { if (!is_array($content[$key])) { - CRM_Core_Error::fatal("Missing JSON parameter, $key"); + CRM_Core_Error::statusBounce("Missing JSON parameter, $key"); } } - //echo '<pre>'.htmlentities(var_export($content, TRUE)) .'</pre>'; - //CRM_Utils_System::civiExit(); + $fields = CRM_Core_BAO_UFGroup::formatUFFields($content['ufGroup'], $content['ufFieldCollection']); - //$fields = CRM_Core_BAO_UFGroup::getFields(1); $this->setProfile($fields); - //echo '<pre>'.htmlentities(var_export($fields, TRUE)) .'</pre>';CRM_Utils_System::civiExit(); } } diff --git a/civicrm/CRM/UF/Page/ProfileEditor.php b/civicrm/CRM/UF/Page/ProfileEditor.php index 0d2b09e9b080b257ffcb45410313c41b13f1f649..466278a3fa460bd9860a9363fb660cb353f680d5 100644 --- a/civicrm/CRM/UF/Page/ProfileEditor.php +++ b/civicrm/CRM/UF/Page/ProfileEditor.php @@ -14,7 +14,7 @@ class CRM_UF_Page_ProfileEditor extends CRM_Core_Page { * @throws \Exception */ public function run() { - CRM_Core_Error::fatal('This is not a real page!'); + throw new CRM_Core_Exception('This is not a real page!'); } /** diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index e1f7bcd2def8c7ef36eff251144c621906b63ffb..bd7c86b6869875ad2ba8eed4143f69d80c9f9671 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -168,7 +168,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { if (!isset($errorMessage)) { $errorMessage = 'pre-condition failed for current upgrade step'; } - CRM_Core_Error::fatal($errorMessage); + throw new CRM_Core_Exception($errorMessage); } $this->assign('recentlyViewed', FALSE); } @@ -234,7 +234,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { if (!isset($errorMessage)) { $errorMessage = 'post-condition failed for current upgrade step'; } - CRM_Core_Error::fatal($errorMessage); + throw new CRM_Core_Exception($errorMessage); } } @@ -385,7 +385,7 @@ SET version = '$version' } else { if (!file_exists($sqlFile)) { - CRM_Core_Error::fatal("sqlfile - $rev.mysql not found."); + throw new CRM_Core_Exception("sqlfile - $rev.mysql not found."); } $this->source($sqlFile); } @@ -400,13 +400,13 @@ SET version = '$version' $latestVer = CRM_Utils_System::version(); $currentVer = CRM_Core_BAO_Domain::version(TRUE); if (!$currentVer) { - CRM_Core_Error::fatal(ts('Version information missing in civicrm database.')); + throw new CRM_Core_Exception(ts('Version information missing in civicrm database.')); } elseif (stripos($currentVer, 'upgrade')) { - CRM_Core_Error::fatal(ts('Database check failed - the database looks to have been partially upgraded. You may want to reload the database with the backup and try the upgrade process again.')); + throw new CRM_Core_Exception(ts('Database check failed - the database looks to have been partially upgraded. You may want to reload the database with the backup and try the upgrade process again.')); } if (!$latestVer) { - CRM_Core_Error::fatal(ts('Version information missing in civicrm codebase.')); + throw new CRM_Core_Exception(ts('Version information missing in civicrm codebase.')); } return [$currentVer, $latestVer]; @@ -453,6 +453,16 @@ SET version = '$version' ]); } + if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), CRM_Upgrade_Incremental_General::MIN_INSTALL_MYSQL_VER) < 0) { + $error = ts('CiviCRM %4 requires MySQL version v%1 or MariaDB v%3 (or newer), but the current system uses %2 ', + [ + 1 => CRM_Upgrade_Incremental_General::MIN_INSTALL_MYSQL_VER, + 2 => CRM_Utils_SQL::getDatabaseVersion(), + 3 => '10.1', + 4 => $latestVer, + ]); + } + // check for mysql trigger privileges if (!\Civi::settings()->get('logging_no_trigger_permission') && !CRM_Core_DAO::checkTriggerViewPermission(FALSE, TRUE)) { $error = ts('CiviCRM %1 requires MySQL trigger privileges.', @@ -510,7 +520,7 @@ SET version = '$version' // Ensure that queue can be created if (!CRM_Queue_BAO_QueueItem::findCreateTable()) { - CRM_Core_Error::fatal(ts('Failed to find or create queueing table')); + throw new CRM_Core_Exception(ts('Failed to find or create queueing table')); } $queue = CRM_Queue_Service::singleton()->create([ 'name' => self::QUEUE_NAME, @@ -707,7 +717,7 @@ SET version = '$version' // pre-db check for major release. if ($upgrade->checkVersionRelease($rev, 'alpha1')) { if (!(is_callable([$versionObject, 'verifyPreDBstate']))) { - CRM_Core_Error::fatal("verifyPreDBstate method was not found for $rev"); + throw new CRM_Core_Exception("verifyPreDBstate method was not found for $rev"); } $error = NULL; @@ -715,7 +725,7 @@ SET version = '$version' if (!isset($error)) { $error = "post-condition failed for current upgrade for $rev"; } - CRM_Core_Error::fatal($error); + throw new CRM_Core_Exception($error); } } diff --git a/civicrm/CRM/Upgrade/Incremental/General.php b/civicrm/CRM/Upgrade/Incremental/General.php index 664097658036a136da976295932a214cac0e6f2d..3536831b3bffba05f21e1747b016e39e1f3041d1 100644 --- a/civicrm/CRM/Upgrade/Incremental/General.php +++ b/civicrm/CRM/Upgrade/Incremental/General.php @@ -56,14 +56,7 @@ class CRM_Upgrade_Incremental_General { * * @see install/index.php */ - const MIN_INSTALL_MYSQL_VER = '5.5'; - - /** - * The minimum MySQL/MariaDB version required to install Civi. - * - * @see install/index.php - */ - const NEW_MIN_INSTALL_MYSQL_VER = '5.6.5'; + const MIN_INSTALL_MYSQL_VER = '5.6.5'; /** * Compute any messages which should be displayed before upgrade. @@ -86,25 +79,14 @@ class CRM_Upgrade_Incremental_General { ]); $preUpgradeMessage .= '</p>'; } - if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), self::MIN_RECOMMENDED_MYSQL_VER) < 0 && version_compare(CRM_Utils_SQL::getDatabaseVersion(), self::NEW_MIN_INSTALL_MYSQL_VER) >= 0) { + if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), self::MIN_RECOMMENDED_MYSQL_VER) < 0) { $preUpgradeMessage .= '<p>'; - $preUpgradeMessage .= ts('This system uses MySQL/MariaDB v%4. You may proceed with the upgrade, and CiviCRM v%1 will continue working normally. However, future releases will require MySQL v%2 or MariaDB v%3.', [ + $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' . '+', - 4 => CRM_Utils_SQL::getDatabaseVersion(), - ]); - $preUpgradeMessage .= '</p>'; - } - if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), self::NEW_MIN_INSTALL_MYSQL_VER) < 0) { - $preUpgradeMessage .= '<p>'; - $preUpgradeMessage .= ts('This system uses MySQL/MariaDB v%6. You may proceed with the upgrade, and CiviCRM v%1 will continue working normally. However, CiviCRM v%5 will require MySQL v%2. We recommend MySQL v%3 or MariaDB v%4.', [ - 1 => $latestVer, - 2 => self::NEW_MIN_INSTALL_MYSQL_VER . '+', - 3 => self::MIN_RECOMMENDED_MYSQL_VER . '+', - 4 => '10.1' . '+', - 5 => '5.28' . '+', - 6 => CRM_Utils_SQL::getDatabaseVersion(), + 4 => '5.34' . '+', + 5 => CRM_Utils_SQL::getDatabaseVersion(), ]); $preUpgradeMessage .= '</p>'; } diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyEight.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyEight.php new file mode 100644 index 0000000000000000000000000000000000000000..b035cfb16e3e7e501833bf39fe68db321a28dd72 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyEight.php @@ -0,0 +1,113 @@ +<?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 FiveTwentyEight */ +class CRM_Upgrade_Incremental_php_FiveTwentyEight extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each upcoming + * revision to the database. + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + // Example: Generate a pre-upgrade message. + if ($rev == '5.28.alpha1') { + $preUpgradeMessage .= CRM_Upgrade_Incremental_php_FiveTwentyEight::createWpFilesMessage(); + } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + // Example: Generate a pre-upgrade message. + if ($rev == '5.28.alpha1') { + $postUpgradeMessage .= CRM_Upgrade_Incremental_php_FiveTwentyEight::createWpFilesMessage(); + } + } + + public static function createWpFilesMessage() { + if (!function_exists('civi_wp')) { + return ''; + } + + if (isset($GLOBALS['civicrm_paths']['civicrm.files']['path'])) { + // They've explicitly chosen to use a non-default path. + return ''; + } + + $table = '<table><tbody>' + . sprintf('<tr><th colspan="2">%s</th></tr>', ts('<b>[civicrm.files]</b> Path')) + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('5.29 Default:'), wp_upload_dir()['basedir'] . DIRECTORY_SEPARATOR . 'civicrm' . DIRECTORY_SEPARATOR) + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('5.28 Default:'), CRM_Core_Config::singleton()->userSystem->getDefaultFileStorage()['path']) + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('Active Value:'), Civi::paths()->getVariable('civicrm.files', 'path')) + . sprintf('<tr><th colspan="2">%s</th></tr>', ts('<b>[civicrm.files]</b> URL')) + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('5.29 Default:'), wp_upload_dir()['baseurl'] . '/civicrm/') + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('5.28 Default:'), CRM_Core_Config::singleton()->userSystem->getDefaultFileStorage()['url']) + . sprintf('<tr><td>%s</td><td><code>%s</code></td></tr>', ts('Active Value:'), Civi::paths()->getVariable('civicrm.files', 'url')) + . '</tbody></table>'; + + return '<p>' . ts('Starting with version 5.29.0, CiviCRM on WordPress may make a subtle change in the calculation of <code>[civicrm.files]</code>. + To ensure a smooth upgrade, please review the following table. All paths and URLs should appear the same. If there is <strong><em>any</em></strong> discrepancy, + then consult <a href=\'%1\' target=\'_blank\'>the upgrade documentation</a>.', [ + 1 => 'https://docs.civicrm.org/sysadmin/en/latest/upgrade/version-specific/#civicrm-5.29', + 2 => '...wp-content/uploads/civicrm', + ]) . '</p>' . $table; + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_28_alpha1($rev) { + $this->addTask('Populate missing Contact Type name fields', 'populateMissingContactTypeName'); + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('Add icon column to civicrm_custom_group', 'addColumn', + 'civicrm_custom_group', 'icon', "varchar(255) COMMENT 'crm-i icon class' DEFAULT NULL"); + $this->addTask('Remove index on medium_id from civicrm_activity', 'dropIndex', 'civicrm_activity', 'index_medium_id'); + } + + public static function populateMissingContactTypeName() { + $contactTypes = \Civi\Api4\ContactType::get() + ->setCheckPermissions(FALSE) + ->execute(); + foreach ($contactTypes as $contactType) { + if (empty($contactType['name'])) { + \Civi\Api4\ContactType::update() + ->addWhere('id', '=', $contactType['id']) + ->addValue('name', ucfirst(CRM_Utils_String::munge($contactType['label']))) + ->setCheckPermissions(FALSE) + ->execute(); + } + } + return TRUE; + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourThree.php b/civicrm/CRM/Upgrade/Incremental/php/FourThree.php index eabdbe968e19bf32bd25fd1ea91094a3524d61e4..4d603e82972c0d7fceff33c45df6ec3b73fc9ea2 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourThree.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourThree.php @@ -39,7 +39,7 @@ class CRM_Upgrade_Incremental_php_FourThree extends CRM_Upgrade_Incremental_Base 1 => $count, 2 => '<em>SELECT ct.* FROM civicrm_contribution ct LEFT JOIN civicrm_contact c ON ct.contact_id = c.id WHERE c.id IS NULL;</em>', ]); - CRM_Core_Error::fatal($error); + throw new CRM_Core_Exception($error); return FALSE; } } @@ -51,7 +51,7 @@ class CRM_Upgrade_Incremental_php_FourThree extends CRM_Upgrade_Incremental_Base theme('item_list', []); $theme_registry = theme_get_registry(); if (!isset($theme_registry['page']['preprocess functions']) || FALSE === array_search('civicrm_preprocess_page_inject', $theme_registry['page']['preprocess functions'])) { - CRM_Core_Error::fatal('Please reset the Drupal cache (Administer => Site Configuration => Performance => Clear cached data))'); + throw new CRM_Core_Exception('Please reset the Drupal cache (Administer => Site Configuration => Performance => Clear cached data))'); } } } @@ -79,7 +79,7 @@ WHERE {$key}.id IS NULL"; $dao = CRM_Core_DAO::executeQuery($query, [], TRUE, NULL, FALSE, FALSE); if ($dao->N) { $invalidDataMessage = '<strong>Oops, it looks like you have orphaned recurring contribution records in your database. Before this upgrade can complete they will need to be fixed or deleted. <a href="http://wiki.civicrm.org/confluence/display/CRMDOC/Fixing+Orphaned+Contribution+Recur+Records" target="_blank">You can review steps to correct this situation on the documentation wiki.</a></strong>'; - CRM_Core_Error::fatal($invalidDataMessage); + throw new CRM_Core_Exception($invalidDataMessage); return FALSE; } } diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.27.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.27.0.mysql.tpl deleted file mode 100644 index a39da322338704830bccc38daece099d4b6b18dc..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.27.0.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.27.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.27.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.27.1.mysql.tpl deleted file mode 100644 index 2f615e3928ed52b01c1da6d16414179b29947931..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.27.1.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.27.1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.27.2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.27.2.mysql.tpl deleted file mode 100644 index 8b777e8cbf211bea4bac11f463409eb014563e4b..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.27.2.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.27.2 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.27.3.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.27.3.mysql.tpl deleted file mode 100644 index 92cb289c8375d37b011f6adc549e90fdf72c7fe8..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.27.3.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.27.3 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.27.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.27.4.mysql.tpl deleted file mode 100644 index 2f3f74114ca861d523e4e56cd5fb3675c496d39d..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.27.4.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.27.4 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.28.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.28.0.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..acff258d09eb64d9f93105372a2c4f0266ef495c --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.28.0.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.28.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.28.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.28.alpha1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..85bd64eadb7baad67b25a710c2522942a707c77b --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.28.alpha1.mysql.tpl @@ -0,0 +1,24 @@ +{* file to handle db changes in 5.28.alpha1 during upgrade *} + +-- https://github.com/civicrm/civicrm-core/pull/17579 +ALTER TABLE `civicrm_navigation` CHANGE `has_separator` +`has_separator` tinyint DEFAULT 0 COMMENT 'Place a separator either before or after this menu item.'; + +-- https://github.com/civicrm/civicrm-core/pull/17450 +ALTER TABLE `civicrm_activity` CHANGE `activity_date_time` `activity_date_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.'; +ALTER TABLE `civicrm_activity` CHANGE `created_date` `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the activity was created.'; + +-- https://github.com/civicrm/civicrm-core/pull/17548 +ALTER TABLE civicrm_contact_type CHANGE name name varchar(64) not null comment 'Internal name of Contact Type (or Subtype).'; +ALTER TABLE civicrm_contact_type CHANGE is_active is_active tinyint DEFAULT 1 COMMENT 'Is this entry active?'; +ALTER TABLE civicrm_contact_type CHANGE is_reserved is_reserved tinyint DEFAULT 0 COMMENT 'Is this contact type a predefined system type'; +UPDATE civicrm_contact_type SET is_active = 1 WHERE is_active IS NULL; +UPDATE civicrm_contact_type SET is_reserved = 0 WHERE is_reserved IS NULL; + +-- https://lab.civicrm.org/dev/core/-/issues/1833 +ALTER TABLE civicrm_event CHANGE participant_listing_id participant_listing_id int unsigned DEFAULT NULL COMMENT 'Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.'; +UPDATE civicrm_event SET participant_listing_id = NULL WHERE participant_listing_id = 0; + +-- https://lab.civicrm.org/dev/core/-/issues/1852 +-- Ensure all domains have the same value for locales +UPDATE civicrm_domain SET locales = (SELECT locales FROM (SELECT locales FROM civicrm_domain ORDER BY id LIMIT 1) d); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.28.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.28.beta1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c8cf8211db50c0d34b90570ff322fbf807e9931c --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.28.beta1.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.28.beta1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Page/Cleanup.php b/civicrm/CRM/Upgrade/Page/Cleanup.php index 7a746b7a8276fc28a56973280e211c1d360e25ee..ece1c2aa141d86ef6fb830966c38671d62a97b9b 100644 --- a/civicrm/CRM/Upgrade/Page/Cleanup.php +++ b/civicrm/CRM/Upgrade/Page/Cleanup.php @@ -38,7 +38,7 @@ class CRM_Upgrade_Page_Cleanup extends CRM_Core_Page { $postMessage = ts('You can <a href="%1">click here</a> to try running the 4.2 upgrade script again. <a href="%2" target="_blank">(Review upgrade documentation)</a>', [ 1 => CRM_Utils_System::url('civicrm/upgrade', 'reset=1'), - 2 => 'http://wiki.civicrm.org/confluence/display/CRMDOC/Installation+and+Upgrades', + 2 => CRM_Utils_System::docURL2('sysadmin/upgrade', TRUE), ]); $template->assign('postMessage', $postMessage); diff --git a/civicrm/CRM/Upgrade/Page/Upgrade.php b/civicrm/CRM/Upgrade/Page/Upgrade.php index a8008f14b912982aacd66743197227a9cad31efd..77b7ad1103161a52bbe00f63278a4e04f819b9ed 100644 --- a/civicrm/CRM/Upgrade/Page/Upgrade.php +++ b/civicrm/CRM/Upgrade/Page/Upgrade.php @@ -66,7 +66,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { break; default: - CRM_Core_Error::fatal(ts('Unrecognized upgrade action')); + throw new CRM_Core_Exception(ts('Unrecognized upgrade action')); } } @@ -79,7 +79,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { list($currentVer, $latestVer) = $upgrade->getUpgradeVersions(); if ($error = $upgrade->checkUpgradeableVersion($currentVer, $latestVer)) { - CRM_Core_Error::fatal($error); + throw new CRM_Core_Exception($error); } $config = CRM_Core_Config::singleton(); @@ -119,7 +119,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { list($currentVer, $latestVer) = $upgrade->getUpgradeVersions(); if ($error = $upgrade->checkUpgradeableVersion($currentVer, $latestVer)) { - CRM_Core_Error::fatal($error); + throw new CRM_Core_Exception($error); } $config = CRM_Core_Config::singleton(); @@ -145,7 +145,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { 'buttons' => ['retry' => $config->debug, 'skip' => $config->debug], ]); $queueRunner->runAllViaWeb(); - CRM_Core_Error::fatal(ts('Upgrade failed to redirect')); + throw new CRM_Core_Exception(ts('Upgrade failed to redirect')); } /** @@ -172,7 +172,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { // do a version check - after doFinish() sets the final version list($currentVer, $latestVer) = $upgrade->getUpgradeVersions(); if ($error = $upgrade->checkCurrentVersion($currentVer, $latestVer)) { - CRM_Core_Error::fatal($error); + throw new CRM_Core_Exception($error); } $template->assign('message', $postUpgradeMessage); diff --git a/civicrm/CRM/Utils/Check/Component/Env.php b/civicrm/CRM/Utils/Check/Component/Env.php index f239f69d526f95319e1450553825d727f6cc1096..299e0ea4c930694d48a8ffddd895e1a7c45530d2 100644 --- a/civicrm/CRM/Utils/Check/Component/Env.php +++ b/civicrm/CRM/Utils/Check/Component/Env.php @@ -118,7 +118,7 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { $messages[] = new CRM_Utils_Check_Message( __FUNCTION__, ts('Timestamps reported by MySQL (eg "%2") and PHP (eg "%3" ) are mismatched.<br /><a href="%1">Read more about this warning</a>', [ - 1 => CRM_Utils_System::getWikiBaseURL() . 'checkMysqlTime', + 1 => CRM_Utils_System::docURL2('sysadmin/requirements/#mysql-time', TRUE), 2 => $sqlNow, 3 => $phpNow, ]), @@ -937,45 +937,17 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { public function checkMysqlVersion() { $messages = []; $version = CRM_Utils_SQL::getDatabaseVersion(); - $minInstallVersion = CRM_Upgrade_Incremental_General::MIN_INSTALL_MYSQL_VER; $minRecommendedVersion = CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_MYSQL_VER; $mariaDbRecommendedVersion = '10.1'; - $upcomingCiviChangeVersion = '5.28'; - if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), $minInstallVersion, '<')) { + $upcomingCiviChangeVersion = '5.34'; + if (version_compare(CRM_Utils_SQL::getDatabaseVersion(), $minRecommendedVersion, '<')) { $messages[] = new CRM_Utils_Check_Message( __FUNCTION__, - ts('This system uses MySQL/MariaDB v%1. To ensure the continued operation of CiviCRM, upgrade MySQL now. The recommended version is MySQL v%2 or MariaDB v%3.', [ - 1 => $version, - 2 => $minRecommendedVersion . '+', - 3 => '10.1' . '+', - ]), - ts('MySQL Out-of-Date'), - \Psr\Log\LogLevel::ERROR, - 'fa-server' - ); - } - elseif (version_compare(CRM_Utils_SQL::getDatabaseVersion(), CRM_Upgrade_Incremental_General::NEW_MIN_INSTALL_MYSQL_VER, '<')) { - $messages[] = new CRM_Utils_Check_Message( - __FUNCTION__, - ts('This system uses MySQL/MariaDB v%1. To prepare for CiviCRM v%5, please upgrade MySQL. The recommended version will be MySQL v%3 or MariaDB v%4. The minimum requirement will be MySQL v%2. ', [ - 1 => $version, - 2 => CRM_Upgrade_Incremental_General::NEW_MIN_INSTALL_MYSQL_VER . '+', - 3 => $minRecommendedVersion . '+', - 4 => $mariaDbRecommendedVersion . '+', - 5 => $upcomingCiviChangeVersion . '+', - ]), - ts('MySQL Out-of-Date'), - \Psr\Log\LogLevel::WARNING, - 'fa-server' - ); - } - elseif (version_compare(CRM_Utils_SQL::getDatabaseVersion(), $minRecommendedVersion, '<')) { - $messages[] = new CRM_Utils_Check_Message( - __FUNCTION__, - ts('This system uses MySQL/MariaDB v%1. You can continue to use this version of MySQL. However, support may be removed in a future release. The recommended version is MySQL v%2 or MariaDB v%3.', [ + ts('To prepare for CiviCRM v%4, please upgrade MySQL. The recommended version will be MySQL v%2 or MariaDB v%3.', [ 1 => $version, 2 => $minRecommendedVersion . '+', 3 => $mariaDbRecommendedVersion . '+', + 4 => $upcomingCiviChangeVersion . '+', ]), ts('MySQL Out-of-Date'), \Psr\Log\LogLevel::NOTICE, diff --git a/civicrm/CRM/Utils/Check/Component/OptionGroups.php b/civicrm/CRM/Utils/Check/Component/OptionGroups.php index a0c429fbdae9ae0018924df03aef8d57d67d0b14..77a1679a14722781d890b39e4934d0644bdfebb9 100644 --- a/civicrm/CRM/Utils/Check/Component/OptionGroups.php +++ b/civicrm/CRM/Utils/Check/Component/OptionGroups.php @@ -33,9 +33,9 @@ class CRM_Utils_Check_Component_OptionGroups extends CRM_Utils_Check_Component { if (count($values) > 0) { foreach ($values as $value) { try { - CRM_Utils_Type::validate($value['value'], $optionGroup['data_type'], FALSE, '', TRUE); + CRM_Utils_Type::validate($value['value'], $optionGroup['data_type']); } - catch (Exception $e) { + catch (CRM_Core_Exception $e) { $problemValues[] = [ 'group_name' => $optionGroup['title'], 'value_name' => $value['label'], diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index 9e4eac33ed88f7b4dde7c60a5e5a41c39c87f2df..831fca5bc8f5cd6397527e191616b7187a04ac39 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -1822,6 +1822,7 @@ class CRM_Utils_Date { $to['d'] = $now['mday']; $to['M'] = $now['mon']; $to['Y'] = $now['year']; + $to = self::intervalAdd('day', -1, $to); unset($from); break; diff --git a/civicrm/CRM/Utils/File.php b/civicrm/CRM/Utils/File.php index 3ad79207b6711b83df29cfa8e54449c9c3f6b2a2..ff1bccb6bf59327a81bdd6e17203f0ac71323789 100644 --- a/civicrm/CRM/Utils/File.php +++ b/civicrm/CRM/Utils/File.php @@ -334,7 +334,7 @@ class CRM_Utils_File { if (CRM_Utils_Constant::value('CIVICRM_MYSQL_STRICT', CRM_Utils_System::isDevelopment())) { $db->query('SET SESSION sql_mode = STRICT_TRANS_TABLES'); } - $db->query('SET NAMES utf8'); + $db->query('SET NAMES utf8mb4'); $transactionId = CRM_Utils_Type::escape(CRM_Utils_Request::id(), 'String'); $db->query('SET @uniqueID = ' . "'$transactionId'"); diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index 32f01c2f3ff3dca8cd8bb4b12909a3fe0174678e..38c1da128e0db51fdf0e1678591e21dea5858ec7 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -531,6 +531,26 @@ abstract class CRM_Utils_Hook { ->invoke(['op', 'groupID', 'entityID', 'params'], $op, $groupID, $entityID, $params, self::$_nullObject, self::$_nullObject, 'civicrm_custom'); } + /** + * This hook is called before a db write on a custom table. + * + * @param string $op + * The type of operation being performed. + * @param string $groupID + * The custom group ID. + * @param object $entityID + * The entityID of the row in the custom table. + * @param array $params + * The parameters that were sent into the calling function. + * + * @return null + * the return value is ignored + */ + public static function customPre($op, $groupID, $entityID, &$params) { + return self::singleton() + ->invoke(['op', 'groupID', 'entityID', 'params'], $op, $groupID, $entityID, $params, self::$_nullObject, self::$_nullObject, 'civicrm_customPre'); + } + /** * This hook is called when composing the ACL where clause to restrict * visibility of contacts to the logged in user diff --git a/civicrm/CRM/Utils/HttpClient.php b/civicrm/CRM/Utils/HttpClient.php index c7989ec626842d935c381ed23a99e1107a0fee46..c2d12ae18cffc677d923bd78b7b1c62a78147289 100644 --- a/civicrm/CRM/Utils/HttpClient.php +++ b/civicrm/CRM/Utils/HttpClient.php @@ -117,7 +117,6 @@ class CRM_Utils_HttpClient { list($ch, $caConfig) = $this->createCurl($remoteFile); if (preg_match('/^https:/', $remoteFile) && !$caConfig->isEnableSSL()) { - // CRM_Core_Error::fatal('Cannot install this extension - does not support SSL'); return [self::STATUS_DL_ERROR, NULL]; } @@ -146,14 +145,12 @@ class CRM_Utils_HttpClient { public function post($remoteFile, $params) { // Download extension zip file ... if (!function_exists('curl_init')) { - //CRM_Core_Error::fatal('Cannot install this extension - curl is not installed!'); return [self::STATUS_DL_ERROR, NULL]; } list($ch, $caConfig) = $this->createCurl($remoteFile); if (preg_match('/^https:/', $remoteFile) && !$caConfig->isEnableSSL()) { - // CRM_Core_Error::fatal('Cannot install this extension - does not support SSL'); return [self::STATUS_DL_ERROR, NULL]; } diff --git a/civicrm/CRM/Utils/JS.php b/civicrm/CRM/Utils/JS.php index bcd80dd79967e5223b3518c738dc511554206d31..27e52d0d1ffb0c86acaaa11ecd4a949654563178 100644 --- a/civicrm/CRM/Utils/JS.php +++ b/civicrm/CRM/Utils/JS.php @@ -54,13 +54,15 @@ class CRM_Utils_JS { * Note that you can only dedupe closures if they are directly adjacent and * have exactly the same parameters. * + * Also dedupes the "use strict" directive as it is only meaningful at the beginning of a closure. + * * @param array $scripts * Javascript source. * @param array $localVars * Ordered list of JS vars to identify the start of a closure. * @param array $inputVals * Ordered list of input values passed into the closure. - * @return string + * @return string[] * Javascript source. */ public static function dedupeClosures($scripts, $localVars, $inputVals) { @@ -70,7 +72,7 @@ class CRM_Utils_JS { return preg_quote($v, '/'); }, $localVars)); $opening .= '\)\s*\{'; - $opening = '/^' . $opening . '/'; + $opening = '/^' . $opening . '\s*(?:"use strict";\s|\'use strict\';\s)?/'; // Example closing: })(angular, CRM.$, CRM._); $closing = '\}\s*\)\s*\(\s*'; @@ -107,7 +109,7 @@ class CRM_Utils_JS { * @return string */ public static function stripComments($script) { - return preg_replace(":^\\s*//[^\n]+$:m", "", $script); + return preg_replace("#^\\s*//[^\n]*$(?:\r\n|\n)?#m", "", $script); } /** @@ -124,6 +126,7 @@ class CRM_Utils_JS { * * @param string $js * @return mixed + * @throws Exception */ public static function decode($js) { $js = trim($js); @@ -187,7 +190,7 @@ class CRM_Utils_JS { * * @param $js * @return array - * @throws \Exception + * @throws Exception */ public static function getRawProps($js) { $js = trim($js); diff --git a/civicrm/CRM/Utils/Money.php b/civicrm/CRM/Utils/Money.php index 551024153f7577d1019fca5ebf63de91e8cab6e4..f5fb16244e43c2a67a4b736ffea615d7f35b2d12 100644 --- a/civicrm/CRM/Utils/Money.php +++ b/civicrm/CRM/Utils/Money.php @@ -15,6 +15,10 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Brick\Money\Money; +use Brick\Money\Context\DefaultContext; +use Brick\Math\RoundingMode; + /** * Money utilties */ @@ -135,8 +139,8 @@ class CRM_Utils_Money { */ public static function subtractCurrencies($leftOp, $rightOp, $currency) { if (is_numeric($leftOp) && is_numeric($rightOp)) { - $precision = pow(10, self::getCurrencyPrecision($currency)); - return (($leftOp * $precision) - ($rightOp * $precision)) / $precision; + $money = Money::of($leftOp, $currency, new DefaultContext(), RoundingMode::CEILING); + return $money->minus($rightOp)->getAmount()->toFloat(); } } diff --git a/civicrm/CRM/Utils/Number.php b/civicrm/CRM/Utils/Number.php index ff254735958b65660c0c0ffb404c9fdb3b7385f7..3dae925661efe6b395d181f0055199a3f9f24253 100644 --- a/civicrm/CRM/Utils/Number.php +++ b/civicrm/CRM/Utils/Number.php @@ -75,7 +75,7 @@ class CRM_Utils_Number { */ public static function formatUnitSize($size, $checkForPostMax = FALSE) { if ($size) { - $last = strtolower($size{strlen($size) - 1}); + $last = strtolower($size[strlen($size) - 1]); $size = (int) $size; switch ($last) { // The 'G' modifier is available since PHP 5.1.0 diff --git a/civicrm/CRM/Utils/Request.php b/civicrm/CRM/Utils/Request.php index 643646c2ed6265a5f6ef1fb88444cee947c6099c..49b84ad8cd10d0499acc27288e7fea324d8a3d00 100644 --- a/civicrm/CRM/Utils/Request.php +++ b/civicrm/CRM/Utils/Request.php @@ -63,15 +63,13 @@ class CRM_Utils_Request { * Default value of the variable if not present. * @param string $method * Where to look for the variable - 'GET', 'POST' or 'REQUEST'. - * @param bool $isThrowException - * Should a an exception be thrown rather than a fatal. * * @return mixed * The value of the variable * * @throws \CRM_Core_Exception */ - public static function retrieve($name, $type, &$store = NULL, $abort = FALSE, $default = NULL, $method = 'REQUEST', $isThrowException = TRUE) { + public static function retrieve($name, $type, &$store = NULL, $abort = FALSE, $default = NULL, $method = 'REQUEST') { $value = NULL; switch ($method) { @@ -97,10 +95,7 @@ class CRM_Utils_Request { } if (!isset($value) && $abort) { - if ($isThrowException) { - throw new CRM_Core_Exception(ts("Could not find valid value for %1", [1 => $name])); - } - CRM_Core_Error::fatal(ts("Could not find valid value for %1", [1 => $name])); + throw new CRM_Core_Exception(ts('Could not find valid value for %1', [1 => $name])); } if (!isset($value) && $default) { @@ -108,7 +103,7 @@ class CRM_Utils_Request { } // minor hack for action - if ($name == 'action') { + if ($name === 'action') { if (!is_numeric($value) && is_string($value)) { $value = CRM_Core_Action::resolve($value); } diff --git a/civicrm/CRM/Utils/SQL/Insert.php b/civicrm/CRM/Utils/SQL/Insert.php index 816c89f605d0079eb949a02d1e2be230c31473f5..f70cbc5d80c42c5168393f06d823d30f4dd9feb4 100644 --- a/civicrm/CRM/Utils/SQL/Insert.php +++ b/civicrm/CRM/Utils/SQL/Insert.php @@ -67,7 +67,7 @@ class CRM_Utils_SQL_Insert { $value = NULL; } // Skip '_foobar' and '{\u00}*_options' and 'N'. - if (preg_match('/[a-zA-Z]/', $key{0}) && $key !== 'N') { + if (preg_match('/[a-zA-Z]/', $key[0]) && $key !== 'N') { $row[$key] = $value; } } diff --git a/civicrm/CRM/Utils/String.php b/civicrm/CRM/Utils/String.php index e0cac9a763ba167433a6c45677831032d4f5e4cf..654b74ff0ebcb41cbd4c28162935265021dbebe0 100644 --- a/civicrm/CRM/Utils/String.php +++ b/civicrm/CRM/Utils/String.php @@ -939,16 +939,15 @@ class CRM_Utils_String { * @return string */ public static function pluralize($str) { - switch (substr($str, -1)) { - case 's': - return $str . 'es'; - - case 'y': - return substr($str, 0, -1) . 'ies'; - - default: - return $str . 's'; + $lastLetter = substr($str, -1); + $lastTwo = substr($str, -2); + if ($lastLetter == 's' || $lastTwo == 'ch') { + return $str . 'es'; + } + if ($lastLetter == 'y' && $lastTwo != 'ey') { + return substr($str, 0, -1) . 'ies'; } + return $str . 's'; } /** diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index 486fc106b9ae0be0c6835fb4ec1569ef3c8711e4..9a7d12db038acd719f18bc9d3c03a0b8cb71db5c 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -1065,28 +1065,6 @@ class CRM_Utils_System { return FALSE; } - /** - * Format wiki url. - * - * @param string $string - * @param bool $encode - * - * @return string - */ - public static function formatWikiURL($string, $encode = FALSE) { - $items = explode(' ', trim($string), 2); - if (count($items) == 2) { - $title = $items[1]; - } - else { - $title = $items[0]; - } - - // fix for CRM-4044 - $url = $encode ? self::urlEncode($items[0]) : $items[0]; - return "<a href=\"$url\">$title</a>"; - } - /** * Encode url. * @@ -1095,6 +1073,7 @@ class CRM_Utils_System { * @return null|string */ public static function urlEncode($url) { + CRM_Core_Error::deprecatedFunctionWarning('urlEncode'); $items = parse_url($url); if ($items === FALSE) { return NULL; @@ -1600,6 +1579,7 @@ class CRM_Utils_System { * @return string */ public static function relativeURL($url) { + CRM_Core_Error::deprecatedFunctionWarning('url'); // check if url is relative, if so return immediately if (substr($url, 0, 4) != 'http') { return $url; @@ -1627,6 +1607,7 @@ class CRM_Utils_System { * @return string */ public static function absoluteURL($url, $removeLanguagePart = FALSE) { + CRM_Core_Error::deprecatedFunctionWarning('url'); // check if url is already absolute, if so return immediately if (substr($url, 0, 4) == 'http') { return $url; diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index 42d263fb23a02d6ad10630f4056f23225eda6c4d..53e2a67dea34288231577164dc1f9bd4eebe686f 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -409,7 +409,15 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { $request = new \Symfony\Component\HttpFoundation\Request([], [], [], [], [], $_SERVER); // Create a kernel and boot it. - \Drupal\Core\DrupalKernel::createFromRequest($request, $autoloader, 'prod')->prepareLegacyRequest($request); + $kernel = \Drupal\Core\DrupalKernel::createFromRequest($request, $autoloader, 'prod'); + $kernel->boot(); + $kernel->preHandle($request); + $container = $kernel->rebuildContainer(); + // Add our request to the stack and route context. + $request->attributes->set(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT, new \Symfony\Component\Routing\Route('<none>')); + $request->attributes->set(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_NAME, '<none>'); + $container->get('request_stack')->push($request); + $container->get('router.request_context')->fromRequest($request); // Initialize Civicrm \Drupal::service('civicrm')->initialize(); @@ -538,7 +546,7 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { public function getModules() { $modules = []; - $module_data = system_rebuild_module_data(); + $module_data = \Drupal::service('extension.list.module')->reset()->getList(); foreach ($module_data as $module_name => $extension) { if (!isset($extension->info['hidden']) && $extension->origin != 'core') { $extension->schema_version = drupal_get_installed_schema_version($module_name); @@ -707,7 +715,7 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { * @inheritDoc */ public function getTimeZoneString() { - $timezone = drupal_get_user_timezone(); + $timezone = date_default_timezone_get(); return $timezone; } diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index 0a80bd2bd411812a0e3a51c504efbff505db52bd..63672eeeeca536c5175bba2627a4deefa623f6b4 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -135,6 +135,9 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { * Moved from CRM_Utils_System_Base */ public function getDefaultFileStorage() { + // NOTE: On WordPress, this will be circumvented in the future. However, + // should retain it to allow transitional/upgrade code determine the old value. + $config = CRM_Core_Config::singleton(); $cmsUrl = CRM_Utils_System::languageNegotiationURL($config->userFrameworkBaseURL, FALSE, TRUE); $cmsPath = $this->cmsRootPath(); @@ -1009,4 +1012,36 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { CRM_Utils_System::civiExit(); } + /** + * Start a new session if there's no existing session ID. + * + * Checks are needed to prevent sessions being started when not necessary. + */ + public function sessionStart() { + $session_id = session_id(); + + // Check WordPress pseudo-cron. + $wp_cron = FALSE; + if (function_exists('wp_doing_cron') && wp_doing_cron()) { + $wp_cron = TRUE; + } + + // Check WP-CLI. + $wp_cli = FALSE; + if (defined('WP_CLI') && WP_CLI) { + $wp_cli = TRUE; + } + + // Check PHP on the command line - e.g. `cv`. + $php_cli = TRUE; + if (PHP_SAPI !== 'cli') { + $php_cli = FALSE; + } + + // Maybe start session. + if (empty($session_id) && !$wp_cron && !$wp_cli && !$php_cli) { + session_start(); + } + } + } diff --git a/civicrm/CRM/Utils/Type.php b/civicrm/CRM/Utils/Type.php index 54abc84763e947b62494af3c8f3b718c43526f90..8dfc7d6295063084a44c53bbf44cdebf0b814150 100644 --- a/civicrm/CRM/Utils/Type.php +++ b/civicrm/CRM/Utils/Type.php @@ -196,11 +196,18 @@ class CRM_Utils_Type { /** * Helper function to call validate on arrays * + * @param mixed $data + * @param string $type + * + * @return mixed + * + * @throws \CRM_Core_Exception + * * @see validate */ - public static function validateAll($data, $type, $abort = TRUE) { + public static function validateAll($data, $type) { foreach ($data as $key => $value) { - $data[$key] = CRM_Utils_Type::validate($value, $type, $abort); + $data[$key] = CRM_Utils_Type::validate($value, $type); } return $data; } @@ -351,15 +358,13 @@ class CRM_Utils_Type { * If TRUE, the operation will CRM_Core_Error::fatal() on invalid data. * @param string $name * The name of the attribute - * @param bool $isThrowException - * Should an exception be thrown rather than a using a deprecated fatal error. * * @return mixed * The data, escaped if necessary * * @throws \CRM_Core_Exception */ - public static function validate($data, $type, $abort = TRUE, $name = 'One of parameters ', $isThrowException = TRUE) { + public static function validate($data, $type, $abort = TRUE, $name = 'One of parameters ') { $possibleTypes = [ 'Integer', @@ -385,10 +390,7 @@ class CRM_Utils_Type { 'Color', ]; if (!in_array($type, $possibleTypes)) { - if ($isThrowException) { - throw new CRM_Core_Exception(ts('Invalid type, must be one of : ' . implode($possibleTypes))); - } - CRM_Core_Error::fatal(ts('Invalid type, must be one of : ' . implode($possibleTypes))); + throw new CRM_Core_Exception(ts('Invalid type, must be one of : ' . implode($possibleTypes))); } switch ($type) { case 'Integer': @@ -465,10 +467,7 @@ class CRM_Utils_Type { if ($abort) { $data = htmlentities($data); - if ($isThrowException) { - throw new CRM_Core_Exception("$name (value: $data) is not of the type $type"); - } - CRM_Core_Error::fatal("$name (value: $data) is not of the type $type"); + throw new CRM_Core_Exception("$name (value: $data) is not of the type $type"); } return NULL; diff --git a/civicrm/Civi/Angular/ChangeSet.php b/civicrm/Civi/Angular/ChangeSet.php index 27c92a5867b16395213863d24e732d7a197cd4d3..fc5d9b08c965a56a3ca6069f59b2b5b0241e698e 100644 --- a/civicrm/Civi/Angular/ChangeSet.php +++ b/civicrm/Civi/Angular/ChangeSet.php @@ -150,7 +150,7 @@ class ChangeSet implements ChangeSetInterface { */ public function alterHtml($file, $callback) { $this->htmlFilters[] = [ - 'regex' => ($file{0} === ';') ? $file : $this->createRegex($file), + 'regex' => ($file[0] === ';') ? $file : $this->createRegex($file), 'callback' => $callback, ]; return $this; diff --git a/civicrm/Civi/Angular/Page/Modules.php b/civicrm/Civi/Angular/Page/Modules.php index 96d78867c44d8def951f7d825a6a6d537c38946d..d7957629ab9b62fdf50f1e2d73a56f6a463d4c0c 100644 --- a/civicrm/Civi/Angular/Page/Modules.php +++ b/civicrm/Civi/Angular/Page/Modules.php @@ -106,15 +106,14 @@ class Modules extends \CRM_Core_Page { public function digestJs($files) { $scripts = []; foreach ($files as $file) { - $scripts[] = file_get_contents($file); + $scripts[] = \CRM_Utils_JS::stripComments(file_get_contents($file)); } $scripts = \CRM_Utils_JS::dedupeClosures( $scripts, ['angular', '$', '_'], ['angular', 'CRM.$', 'CRM._'] ); - // This impl of stripComments currently adds 10-20ms and cuts ~7% - return \CRM_Utils_JS::stripComments(implode("\n", $scripts)); + return implode("\n", $scripts); } /** diff --git a/civicrm/Civi/Api4/Action/Domain/Get.php b/civicrm/Civi/Api4/Action/Domain/Get.php index 22fded735d3a3e89bbd3c8f7a9b869cb798d6612..0f8d12ca02fb73ed4cad8074b41b933594209741 100644 --- a/civicrm/Civi/Api4/Action/Domain/Get.php +++ b/civicrm/Civi/Api4/Action/Domain/Get.php @@ -19,6 +19,8 @@ namespace Civi\Api4\Action\Domain; +use Civi\Api4\Generic\Result; + /** * @inheritDoc */ @@ -34,11 +36,11 @@ class Get extends \Civi\Api4\Generic\DAOGetAction { /** * @inheritDoc */ - protected function getObjects() { + protected function getObjects(Result $result) { if ($this->currentDomain) { $this->addWhere('id', '=', \CRM_Core_Config::domainID()); } - return parent::getObjects(); + parent::getObjects($result); } } diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 4ec56adbf827550b7e3717c581cd2ffcc12a23df..044105e4e5a639afd7395a160301dff0e1d3d31f 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -20,7 +20,6 @@ namespace Civi\Api4\Action\Entity; use Civi\Api4\CustomGroup; -use Civi\Api4\Utils\ReflectionUtils; /** * Get the names & docblocks of all APIv4 entities. @@ -47,7 +46,6 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { protected function getRecords() { $entities = []; $toGet = $this->_itemsToGet('name'); - $getDocs = $this->_isFieldSelected('description', 'comment', 'see'); $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') ); @@ -57,15 +55,13 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { foreach (glob("$dir/*.php") as $file) { $matches = []; preg_match('/(\w*)\.php$/', $file, $matches); + $entity = '\Civi\Api4\\' . $matches[1]; if ( (!$toGet || in_array($matches[1], $toGet)) - && is_a('\Civi\Api4\\' . $matches[1], '\Civi\Api4\Generic\AbstractEntity', TRUE) + && is_a($entity, '\Civi\Api4\Generic\AbstractEntity', TRUE) ) { - $entity = ['name' => $matches[1]]; - if ($getDocs) { - $this->addDocs($entity); - } - $entities[$matches[1]] = $entity; + $info = $entity::getInfo(); + $entities[$info['name']] = $info; } } } @@ -90,18 +86,20 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { $customEntities = CustomGroup::get() ->addWhere('is_multiple', '=', 1) ->addWhere('is_active', '=', 1) - ->setSelect(['name', 'title', 'help_pre', 'help_post', 'extends']) + ->setSelect(['name', 'title', 'help_pre', 'help_post', 'extends', 'icon']) ->setCheckPermissions(FALSE) ->execute(); foreach ($customEntities as $customEntity) { $fieldName = 'Custom_' . $customEntity['name']; $entities[$fieldName] = [ 'name' => $fieldName, - 'description' => $customEntity['title'] . ' custom group - extends ' . $customEntity['extends'], + 'title' => $customEntity['title'], + 'description' => 'Custom group - extends ' . $customEntity['extends'], 'see' => [ 'https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/#multiple-record-fieldsets', '\\Civi\\Api4\\CustomGroup', ], + 'icon' => $customEntity['icon'], ]; if (!empty($customEntity['help_pre'])) { $entities[$fieldName]['comment'] = $this->plainTextify($customEntity['help_pre']); @@ -123,15 +121,4 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { return html_entity_decode(strip_tags($input), ENT_QUOTES | ENT_HTML5, 'UTF-8'); } - /** - * Add info from code docblock. - * - * @param $entity - */ - private function addDocs(&$entity) { - $reflection = new \ReflectionClass("\\Civi\\Api4\\" . $entity['name']); - $entity += ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $entity['name']]); - unset($entity['package'], $entity['method']); - } - } diff --git a/civicrm/Civi/Api4/Action/GetActions.php b/civicrm/Civi/Api4/Action/GetActions.php index fbab1f057db8e3bc15749372b2b02e13dc50c241..66b8966ade869dd3241bd7c3bfa61c49ea5e8a05 100644 --- a/civicrm/Civi/Api4/Action/GetActions.php +++ b/civicrm/Civi/Api4/Action/GetActions.php @@ -33,7 +33,7 @@ class GetActions extends BasicGetAction { $entityReflection = new \ReflectionClass('\Civi\Api4\\' . $this->_entityName); foreach ($entityReflection->getMethods(\ReflectionMethod::IS_STATIC | \ReflectionMethod::IS_PUBLIC) as $method) { $actionName = $method->getName(); - if ($actionName != 'permissions' && $actionName[0] != '_') { + if ($actionName != 'permissions' && $actionName != 'getInfo' && $actionName[0] != '_') { $this->loadAction($actionName, $method); } } @@ -75,7 +75,7 @@ class GetActions extends BasicGetAction { try { if (!isset($this->_actions[$actionName]) && (!$this->_actionsToGet || in_array($actionName, $this->_actionsToGet))) { $action = \Civi\API\Request::create($this->getEntityName(), $actionName, ['version' => 4]); - if (is_object($action)) { + if (is_object($action) && (!$this->checkPermissions || $action->isAuthorized())) { $this->_actions[$actionName] = ['name' => $actionName]; if ($this->_isFieldSelected('description', 'comment', 'see')) { $vars = ['entity' => $this->getEntityName(), 'action' => $actionName]; diff --git a/civicrm/Civi/Api4/Entity.php b/civicrm/Civi/Api4/Entity.php index 430900b663737fbe88f29eb58fc57ea89c9b479d..a7767eab47bcfd74108d1fd2392a12ab28669d51 100644 --- a/civicrm/Civi/Api4/Entity.php +++ b/civicrm/Civi/Api4/Entity.php @@ -47,6 +47,10 @@ class Entity extends Generic\AbstractEntity { 'name' => 'name', 'description' => 'Entity name', ], + [ + 'name' => 'title', + 'description' => 'Localized title', + ], [ 'name' => 'description', 'description' => 'Description from docblock', @@ -55,6 +59,14 @@ class Entity extends Generic\AbstractEntity { 'name' => 'comment', 'description' => 'Comments from docblock', ], + [ + 'name' => 'icon', + 'description' => 'crm-i icon class associated with this entity', + ], + [ + 'name' => 'dao', + 'description' => 'Class name for dao-based entities', + ], [ 'name' => 'see', 'data_type' => 'Array', diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index 8a1ed4e86286838b887f5b35a54644ea97c34a4d..254f626a059ff93859cfa620ab9019a67d91a0fe 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -19,6 +19,7 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; +use Civi\Api4\Utils\ReflectionUtils; /** * Base class for all api entities. @@ -80,6 +81,15 @@ abstract class AbstractEntity { return substr(static::class, strrpos(static::class, '\\') + 1); } + /** + * Overridable function to return a localized title for this entity. + * + * @return string + */ + protected static function getEntityTitle() { + return static::getEntityName(); + } + /** * Magic method to return the action object for an api. * @@ -101,4 +111,21 @@ abstract class AbstractEntity { return $actionObject; } + /** + * Reflection function called by Entity::get() + * + * @see \Civi\Api4\Action\Entity\Get + * @return array + */ + public static function getInfo() { + $info = [ + 'name' => static::getEntityName(), + 'title' => static::getEntityTitle(), + ]; + $reflection = new \ReflectionClass(static::class); + $info += ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']]); + unset($info['package'], $info['method']); + return $info; + } + } diff --git a/civicrm/Civi/Api4/Generic/BasicGetAction.php b/civicrm/Civi/Api4/Generic/BasicGetAction.php index f1d34d237f068426dcfee8fc8a86772861b19908..e40215faa77791e5316bb672f95d59f77b2a2421 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetAction.php @@ -59,7 +59,7 @@ class BasicGetAction extends AbstractGetAction { $this->expandSelectClauseWildcards(); $values = $this->getRecords(); $this->formatRawValues($values); - $result->exchangeArray($this->queryArray($values)); + $this->queryArray($values, $result); } /** diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php index a277bf5901b4a406af8b92ba744cff784aee8e98..070d9909bd574200c6bb23cad29bdfeed8dc89ef 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php @@ -97,7 +97,7 @@ class BasicGetFieldsAction extends BasicGetAction { $values = $this->getRecords(); } $this->formatResults($values); - $result->exchangeArray($this->queryArray($values)); + $this->queryArray($values, $result); } /** diff --git a/civicrm/Civi/Api4/Generic/DAOEntity.php b/civicrm/Civi/Api4/Generic/DAOEntity.php index f63c87ba62199f9ae92248d2faec7956a33169c2..915b42cc54279dca093becbd8dbbc155dfed80cd 100644 --- a/civicrm/Civi/Api4/Generic/DAOEntity.php +++ b/civicrm/Civi/Api4/Generic/DAOEntity.php @@ -70,4 +70,26 @@ abstract class DAOEntity extends AbstractEntity { return new BasicReplaceAction(static::class, __FUNCTION__); } + /** + * @return string + */ + protected static function getEntityTitle() { + $name = static::getEntityName(); + $dao = \CRM_Core_DAO_AllCoreTables::getFullName($name); + return $dao ? $dao::getEntityTitle() : $name; + } + + /** + * @return array + */ + public static function getInfo() { + $info = parent::getInfo(); + $dao = \CRM_Core_DAO_AllCoreTables::getFullName($info['name']); + if ($dao) { + $info['icon'] = $dao::$_icon; + $info['dao'] = $dao; + } + return $info; + } + } diff --git a/civicrm/Civi/Api4/Generic/DAOGetAction.php b/civicrm/Civi/Api4/Generic/DAOGetAction.php index d922781ada2e049574a2d065aec703437733213e..2b73f18a8ffb3d33a172cd6cc9f4dc8d516baf0a 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetAction.php @@ -71,20 +71,31 @@ class DAOGetAction extends AbstractGetAction { public function _run(Result $result) { $this->setDefaultWhereClause(); $this->expandSelectClauseWildcards(); - $result->exchangeArray($this->getObjects()); + $this->getObjects($result); } /** - * @return array|int + * @param \Civi\Api4\Generic\Result $result */ - protected function getObjects() { - $query = new Api4SelectQuery($this); - - $result = $query->run(); - if (is_array($result)) { - \CRM_Utils_API_HTMLInputCoder::singleton()->decodeRows($result); + protected function getObjects(Result $result) { + $getCount = in_array('row_count', $this->getSelect()); + $onlyCount = $this->getSelect() === ['row_count']; + + if (!$onlyCount) { + $query = new Api4SelectQuery($this); + $rows = $query->run(); + \CRM_Utils_API_HTMLInputCoder::singleton()->decodeRows($rows); + $result->exchangeArray($rows); + // No need to fetch count if we got a result set below the limit + if (!$this->getLimit() || count($rows) < $this->getLimit()) { + $result->rowCount = count($rows) + $this->getOffset(); + $getCount = FALSE; + } + } + if ($getCount) { + $query = new Api4SelectQuery($this); + $result->rowCount = $query->getCount(); } - return $result; } /** diff --git a/civicrm/Civi/Api4/Generic/Result.php b/civicrm/Civi/Api4/Generic/Result.php index 675b752e70a20e93162f50e74440cb9641f8b81a..afc30c217ade1d5b7dde54284881ac457609ae4b 100644 --- a/civicrm/Civi/Api4/Generic/Result.php +++ b/civicrm/Civi/Api4/Generic/Result.php @@ -40,6 +40,10 @@ class Result extends \ArrayObject implements \JsonSerializable { * @var int */ public $version = 4; + /** + * @var int + */ + public $rowCount; private $indexedBy; @@ -107,11 +111,7 @@ class Result extends \ArrayObject implements \JsonSerializable { * @return int */ public function count() { - $count = parent::count(); - if ($count == 1 && is_array($this->first()) && array_keys($this->first()) == ['row_count']) { - return $this->first()['row_count']; - } - return $count; + return $this->rowCount ?? parent::count(); } /** diff --git a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php index fc7f21229b46d376d476d86369fe436df3118d39..08db9f75fac31a31e7fc71c31cd8e3765b2acda1 100644 --- a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php @@ -32,16 +32,18 @@ trait ArrayQueryActionTrait { /** * @param array $values - * List of all rows - * @return array - * Filtered list of rows + * List of all rows to be filtered + * @param \Civi\Api4\Generic\Result $result + * Object to store result */ - protected function queryArray($values) { + protected function queryArray($values, $result) { $values = $this->filterArray($values); $values = $this->sortArray($values); + // Set total count before applying limit + $result->rowCount = count($values); $values = $this->limitArray($values); $values = $this->selectArray($values); - return $values; + $result->exchangeArray($values); } /** diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 794df9580a1150b5a0b0da76d5182ea157a97175..b9bedfa86bbc7a17d0ae1ebd79d42f08f8e256f4 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -11,7 +11,6 @@ namespace Civi\Api4\Query; -use Civi\API\SelectQuery; use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable; use Civi\Api4\Utils\FormattingUtil; use Civi\Api4\Utils\CoreUtil; @@ -30,81 +29,87 @@ use Civi\Api4\Utils\SelectUtil; * * "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', * * 'IS NOT NULL', or 'IS NULL'. */ -class Api4SelectQuery extends SelectQuery { +class Api4SelectQuery { + + const + MAIN_TABLE_ALIAS = 'a', + UNLIMITED = '18446744073709551615'; /** - * @var int + * @var \CRM_Utils_SQL_Select */ - protected $apiVersion = 4; + protected $query; /** * @var array - * [alias => expr][] */ - protected $selectAliases = []; + protected $joins = []; /** - * If set to an array, this will start collecting debug info. - * - * @var null|array + * @var array[] */ - public $debugOutput = NULL; + protected $apiFieldSpec; /** * @var array */ - public $groupBy = []; + protected $entityFieldNames = []; - public $forceSelectId = TRUE; + /** + * @var array + */ + protected $aclFields = []; + + /** + * @var \Civi\Api4\Generic\DAOGetAction + */ + private $api; /** * @var array + * [alias => expr][] + */ + protected $selectAliases = []; + + /** + * @var bool */ - public $having = []; + public $forceSelectId = TRUE; /** * @param \Civi\Api4\Generic\DAOGetAction $apiGet */ public function __construct($apiGet) { - $this->entity = $apiGet->getEntityName(); - $this->checkPermissions = $apiGet->getCheckPermissions(); - $this->select = $apiGet->getSelect(); - $this->where = $apiGet->getWhere(); - $this->groupBy = $apiGet->getGroupBy(); - $this->orderBy = $apiGet->getOrderBy(); - $this->limit = $apiGet->getLimit(); - $this->offset = $apiGet->getOffset(); - $this->having = $apiGet->getHaving(); - // Always select ID of main table unless grouping is used - $this->forceSelectId = !$this->groupBy; - if ($apiGet->getDebug()) { - $this->debugOutput =& $apiGet->_debugOutput; - } - foreach ($apiGet->entityFields() as $field) { + $this->api = $apiGet; + + // Always select ID of main table unless grouping by something else + $this->forceSelectId = !$this->getGroupBy() || $this->getGroupBy() === ['id']; + + // Build field lists + foreach ($this->api->entityFields() as $field) { $this->entityFieldNames[] = $field['name']; $field['sql_name'] = '`' . self::MAIN_TABLE_ALIAS . '`.`' . $field['column_name'] . '`'; $this->addSpecField($field['name'], $field); } - $baoName = CoreUtil::getBAOFromApiName($this->entity); - $this->constructQueryObject(); + $tableName = CoreUtil::getTableName($this->getEntity()); + $this->query = \CRM_Utils_SQL_Select::from($tableName . ' ' . self::MAIN_TABLE_ALIAS); // Add ACLs first to avoid redundant subclauses + $baoName = CoreUtil::getBAOFromApiName($this->getEntity()); $this->query->where($this->getAclClause(self::MAIN_TABLE_ALIAS, $baoName)); - - // Add explicit joins. Other joins implied by dot notation may be added later - $this->addExplicitJoins($apiGet->getJoin()); } /** - * Builds final sql statement after all params are set. + * Builds main final sql statement after initialization. * * @return string * @throws \API_Exception * @throws \CRM_Core_Exception - * @throws \Civi\API\Exception\UnauthorizedException */ public function getSql() { + // Add explicit joins. Other joins implied by dot notation may be added later + $this->addExplicitJoins(); $this->buildSelectClause(); $this->buildWhereClause(); $this->buildOrderBy(); @@ -117,20 +122,14 @@ class Api4SelectQuery extends SelectQuery { /** * Why walk when you can * - * @return array|int + * @return array */ public function run() { $results = []; $sql = $this->getSql(); - if (is_array($this->debugOutput)) { - $this->debugOutput['sql'][] = $sql; - } + $this->debug('sql', $sql); $query = \CRM_Core_DAO::executeQuery($sql); while ($query->fetch()) { - if (in_array('row_count', $this->select)) { - $results[]['row_count'] = (int) $query->c; - break; - } $result = []; foreach ($this->selectAliases as $alias => $expr) { $returnName = $alias; @@ -139,47 +138,76 @@ class Api4SelectQuery extends SelectQuery { } $results[] = $result; } - FormattingUtil::formatOutputValues($results, $this->getApiFieldSpec(), $this->getEntity()); + FormattingUtil::formatOutputValues($results, $this->apiFieldSpec, $this->getEntity()); return $results; } - protected function buildSelectClause() { - // An empty select is the same as * - if (empty($this->select)) { - $this->select = $this->entityFieldNames; + /** + * @return int + * @throws \API_Exception + */ + public function getCount() { + $this->addExplicitJoins(); + $this->buildWhereClause(); + // If no having or groupBy, we only need to select count + if (!$this->getHaving() && !$this->getGroupBy()) { + $this->query->select('COUNT(*) AS `c`'); + $sql = $this->query->toSQL(); } - elseif (in_array('row_count', $this->select)) { - $this->query->select("COUNT(*) AS `c`"); - return; + // Use a subquery to count groups from GROUP BY or results filtered by HAVING + else { + // With no HAVING, just select the last field grouped by + if (!$this->getHaving()) { + $select = array_slice($this->getGroupBy(), -1); + } + $this->buildSelectClause($select ?? NULL); + $this->buildHavingClause(); + $this->buildGroupBy(); + $subquery = $this->query->toSQL(); + $sql = "SELECT count(*) AS `c` FROM ( $subquery ) AS rows"; + } + $this->debug('sql', $sql); + return (int) \CRM_Core_DAO::singleValueQuery($sql); + } + + /** + * @param array $select + * Array of select expressions; defaults to $this->getSelect + * @throws \API_Exception + */ + protected function buildSelectClause($select = NULL) { + // Use default if select not provided, exclude row_count which is handled elsewhere + $select = array_diff($select ?? $this->getSelect(), ['row_count']); + // An empty select is the same as * + if (empty($select)) { + $select = $this->entityFieldNames; } else { if ($this->forceSelectId) { - $this->select = array_merge(['id'], $this->select); + $select = array_merge(['id'], $select); } // Expand wildcards in joins (the api wrapper already expanded non-joined wildcards) - $wildFields = array_filter($this->select, function($item) { + $wildFields = array_filter($select, function($item) { return strpos($item, '*') !== FALSE && strpos($item, '.') !== FALSE && strpos($item, '(') === FALSE && strpos($item, ' ') === FALSE; }); foreach ($wildFields as $item) { - $pos = array_search($item, array_values($this->select)); + $pos = array_search($item, array_values($select)); $this->autoJoinFK($item); $matches = SelectUtil::getMatchingFields($item, array_keys($this->apiFieldSpec)); - array_splice($this->select, $pos, 1, $matches); + array_splice($select, $pos, 1, $matches); } - $this->select = array_unique($this->select); + $select = array_unique($select); } - foreach ($this->select as $item) { + foreach ($select as $item) { $expr = SqlExpression::convert($item, TRUE); $valid = TRUE; foreach ($expr->getFields() as $fieldName) { $field = $this->getField($fieldName); // Remove expressions with unknown fields without raising an error if (!$field) { - $this->select = array_diff($this->select, [$item]); - if (is_array($this->debugOutput)) { - $this->debugOutput['undefined_fields'][] = $fieldName; - } + $select = array_diff($select, [$item]); + $this->debug('undefined_fields', $fieldName); $valid = FALSE; } } @@ -195,30 +223,33 @@ class Api4SelectQuery extends SelectQuery { } /** - * @inheritDoc + * Add WHERE clause to query */ protected function buildWhereClause() { - foreach ($this->where as $clause) { - $this->query->where($this->treeWalkClauses($clause, 'WHERE')); + foreach ($this->getWhere() as $clause) { + $sql = $this->treeWalkClauses($clause, 'WHERE'); + if ($sql) { + $this->query->where($sql); + } } } /** - * Build HAVING clause. + * Add HAVING clause to query * * Every expression referenced must also be in the SELECT clause. */ protected function buildHavingClause() { - foreach ($this->having as $clause) { + foreach ($this->getHaving() as $clause) { $this->query->having($this->treeWalkClauses($clause, 'HAVING')); } } /** - * @inheritDoc + * Add ORDER BY to query */ protected function buildOrderBy() { - foreach ($this->orderBy as $item => $dir) { + foreach ($this->getOrderBy() as $item => $dir) { if ($dir !== 'ASC' && $dir !== 'DESC') { throw new \API_Exception("Invalid sort direction. Cannot order by $item $dir"); } @@ -240,20 +271,22 @@ class Api4SelectQuery extends SelectQuery { } /** + * Add LIMIT to query + * * @throws \CRM_Core_Exception */ protected function buildLimit() { - if (!empty($this->limit) || !empty($this->offset)) { + if ($this->getLimit() || $this->getOffset()) { // If limit is 0, mysql will actually return 0 results. Instead set to maximum possible. - $this->query->limit($this->limit ?: '18446744073709551615', $this->offset); + $this->query->limit($this->getLimit() ?: self::UNLIMITED, $this->getOffset()); } } /** - * Adds GROUP BY clause to query + * Add GROUP BY clause to query */ protected function buildGroupBy() { - foreach ($this->groupBy as $item) { + foreach ($this->getGroupBy() as $item) { $this->query->groupBy($this->getExpression($item)->render($this->apiFieldSpec)); } } @@ -270,6 +303,10 @@ class Api4SelectQuery extends SelectQuery { * @uses composeClause() to generate the SQL etc. */ protected function treeWalkClauses($clause, $type) { + // Skip empty leaf. + if (in_array($clause[0], ['AND', 'OR', 'NOT']) && empty($clause[1])) { + return ''; + } switch ($clause[0]) { case 'OR': case 'AND': @@ -388,10 +425,29 @@ class Api4SelectQuery extends SelectQuery { } /** - * @inheritDoc + * Get acl clause for an entity + * + * @param string $tableAlias + * @param \CRM_Core_DAO|string $baoName + * @param array $stack + * @return array */ - protected function getFields() { - return $this->apiFieldSpec; + public function getAclClause($tableAlias, $baoName, $stack = []) { + if (!$this->getCheckPermissions()) { + return []; + } + // Prevent (most) redundant acl sub clauses if they have already been applied to the main entity. + // FIXME: Currently this only works 1 level deep, but tracking through multiple joins would increase complexity + // and just doing it for the first join takes care of most acl clause deduping. + if (count($stack) === 1 && in_array($stack[0], $this->aclFields)) { + return []; + } + $clauses = $baoName::getSelectWhereClause($tableAlias); + if (!$stack) { + // Track field clauses added to the main entity + $this->aclFields = array_keys($clauses); + } + return array_filter($clauses); } /** @@ -401,7 +457,7 @@ class Api4SelectQuery extends SelectQuery { * @param bool $strict * In strict mode, this will throw an exception if the field doesn't exist * - * @return string|null + * @return array|null * @throws \API_Exception */ public function getField($expr, $strict = FALSE) { @@ -424,12 +480,11 @@ class Api4SelectQuery extends SelectQuery { /** * Join onto other entities as specified by the api call. * - * @param $joins * @throws \API_Exception * @throws \Civi\API\Exception\NotImplementedException */ - private function addExplicitJoins($joins) { - foreach ($joins as $join) { + private function addExplicitJoins() { + foreach ($this->getJoin() as $join) { // First item in the array is the entity name $entity = array_shift($join); // Which might contain an alias. Split on the keyword "AS" @@ -439,10 +494,9 @@ class Api4SelectQuery extends SelectQuery { // First item in the array is a boolean indicating if the join is required (aka INNER or LEFT). // The rest are join conditions. $side = array_shift($join) ? 'INNER' : 'LEFT'; - $joinEntityGet = \Civi\API\Request::create($entity, 'get', ['version' => 4, 'checkPermissions' => $this->checkPermissions]); + $joinEntityGet = \Civi\API\Request::create($entity, 'get', ['version' => 4, 'checkPermissions' => $this->getCheckPermissions()]); foreach ($joinEntityGet->entityFields() as $field) { $field['sql_name'] = '`' . $alias . '`.`' . $field['column_name'] . '`'; - $field['is_join'] = TRUE; $this->addSpecField($alias . '.' . $field['name'], $field); } $conditions = $this->getJoinConditions($entity, $alias); @@ -471,7 +525,7 @@ class Api4SelectQuery extends SelectQuery { if ($field['entity'] !== $entity && $field['fk_entity'] === $entity) { $conditions[] = $this->treeWalkClauses([$name, '=', "$alias.id"], 'ON'); } - elseif (strpos($name, "$alias.") === 0 && substr_count($name, '.') === 1 && $field['fk_entity'] === $this->entity) { + elseif (strpos($name, "$alias.") === 0 && substr_count($name, '.') === 1 && $field['fk_entity'] === $this->getEntity()) { $conditions[] = $this->treeWalkClauses([$name, '=', 'id'], 'ON'); $stack = ['id']; } @@ -524,141 +578,131 @@ class Api4SelectQuery extends SelectQuery { foreach ($lastLink->getEntityFields() as $fieldObject) { $fieldArray = $fieldObject->toArray(); $fieldArray['sql_name'] = '`' . $lastLink->getAlias() . '`.`' . $fieldArray['column_name'] . '`'; - $fieldArray['is_custom'] = $isCustom; - $fieldArray['is_join'] = TRUE; $this->addSpecField($prefix . $fieldArray['name'], $fieldArray); } } + /** + * @param string $side + * @param string $tableName + * @param string $tableAlias + * @param array $conditions + */ + public function join($side, $tableName, $tableAlias, $conditions) { + // INNER JOINs take precedence over LEFT JOINs + if ($side != 'LEFT' || !isset($this->joins[$tableAlias])) { + $this->joins[$tableAlias] = $side; + $this->query->join($tableAlias, "$side JOIN `$tableName` `$tableAlias` ON " . implode(' AND ', $conditions)); + } + } + /** * @return FALSE|string */ public function getFrom() { - return CoreUtil::getTableName($this->entity); + return CoreUtil::getTableName($this->getEntity()); } /** * @return string */ public function getEntity() { - return $this->entity; + return $this->api->getEntityName(); } /** * @return array */ public function getSelect() { - return $this->select; + return $this->api->getSelect(); } /** * @return array */ public function getWhere() { - return $this->where; + return $this->api->getWhere(); } /** * @return array */ - public function getOrderBy() { - return $this->orderBy; - } - - /** - * @return mixed - */ - public function getLimit() { - return $this->limit; - } - - /** - * @return mixed - */ - public function getOffset() { - return $this->offset; + public function getHaving() { + return $this->api->getHaving(); } /** * @return array */ - public function getSelectFields() { - return $this->selectFields; + public function getJoin() { + return $this->api->getJoin(); } /** - * @return \CRM_Utils_SQL_Select + * @return array */ - public function getQuery() { - return $this->query; + public function getGroupBy() { + return $this->api->getGroupBy(); } /** * @return array */ - public function getJoins() { - return $this->joins; + public function getOrderBy() { + return $this->api->getOrderBy(); } /** - * @return array + * @return mixed */ - public function getApiFieldSpec() { - return $this->apiFieldSpec; + public function getLimit() { + return $this->api->getLimit(); } /** - * @return array + * @return mixed */ - public function getEntityFieldNames() { - return $this->entityFieldNames; + public function getOffset() { + return $this->api->getOffset(); } /** - * @return array + * @return \CRM_Utils_SQL_Select */ - public function getAclFields() { - return $this->aclFields; + public function getQuery() { + return $this->query; } /** * @return bool|string */ public function getCheckPermissions() { - return $this->checkPermissions; + return $this->api->getCheckPermissions(); } /** - * @return int - */ - public function getApiVersion() { - return $this->apiVersion; - } - - /** - * Get table name on basis of entity - * - * @return void - */ - public function constructQueryObject() { - $tableName = CoreUtil::getTableName($this->entity); - $this->query = \CRM_Utils_SQL_Select::from($tableName . ' ' . self::MAIN_TABLE_ALIAS); - } - - /** - * @param $path - * @param $field + * @param string $path + * @param array $field */ private function addSpecField($path, $field) { // Only add field to spec if we have permission - if ($this->checkPermissions && !empty($field['permission']) && !\CRM_Core_Permission::check($field['permission'])) { + if ($this->getCheckPermissions() && !empty($field['permission']) && !\CRM_Core_Permission::check($field['permission'])) { $this->apiFieldSpec[$path] = FALSE; return; } - $defaults = []; - $defaults['is_custom'] = $defaults['is_join'] = FALSE; - $field += $defaults; $this->apiFieldSpec[$path] = $field; } + /** + * Add something to the api's debug output if debugging is enabled + * + * @param $key + * @param $item + */ + public function debug($key, $item) { + if ($this->api->getDebug()) { + $this->api->_debugOutput[$key][] = $item; + } + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunction.php b/civicrm/Civi/Api4/Query/SqlFunction.php index 19753d91acfa4f73e5b15b10d68a8e5eb073aeca..dbc245f7bfc40dfd5e3ed0c5e6dbc74a47614b75 100644 --- a/civicrm/Civi/Api4/Query/SqlFunction.php +++ b/civicrm/Civi/Api4/Query/SqlFunction.php @@ -22,6 +22,19 @@ abstract class SqlFunction extends SqlExpression { protected $args = []; + /** + * Used for categorizing functions in the UI + * + * @var string + */ + protected static $category; + + const CATEGORY_AGGREGATE = 'aggregate', + CATEGORY_COMPARISON = 'comparison', + CATEGORY_DATE = 'date', + CATEGORY_MATH = 'math', + CATEGORY_STRING = 'string'; + /** * Parse the argument string into an array of function arguments */ @@ -186,4 +199,16 @@ abstract class SqlFunction extends SqlExpression { return $params; } + /** + * @return string + */ + public static function getCategory(): string { + return static::$category; + } + + /** + * @return string + */ + abstract public static function getTitle(): string; + } diff --git a/civicrm/CRM/Admin/Page/Setting.php b/civicrm/Civi/Api4/Query/SqlFunctionABS.php similarity index 51% rename from civicrm/CRM/Admin/Page/Setting.php rename to civicrm/Civi/Api4/Query/SqlFunctionABS.php index 1e747bc83b2769e9ae236b314b56bab12ff88fac..96d682cd576b140f2c7d3c63043d54cace49d4c3 100644 --- a/civicrm/CRM/Admin/Page/Setting.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionABS.php @@ -9,28 +9,28 @@ +--------------------------------------------------------------------+ */ -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ +namespace Civi\Api4\Query; /** - * Page for displaying list of categories for Settings. + * Sql function */ -class CRM_Admin_Page_Setting extends CRM_Core_Page { +class SqlFunctionABS extends SqlFunction { + + protected static $category = self::CATEGORY_MATH; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlNumber'], + ], + ]; /** - * Run page. - * * @return string - * @throws Exception */ - public function run() { - CRM_Core_Error::fatal('This page is deprecated. If you have followed a link or have been redirected here, please change link or redirect to Admin Console (/civicrm/admin?reset=1)'); - CRM_Utils_System::setTitle(ts("Global Settings")); - - return parent::run(); + public static function getTitle(): string { + return ts('Absolute'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionAVG.php b/civicrm/Civi/Api4/Query/SqlFunctionAVG.php index 9a064135e9170a8fdbbe243178f5b4083e82d433..577f05afc7a6c70499f47e7a2e91cd0580e094ed 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionAVG.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionAVG.php @@ -16,6 +16,8 @@ namespace Civi\Api4\Query; */ class SqlFunctionAVG extends SqlFunction { + protected static $category = self::CATEGORY_AGGREGATE; + protected static $params = [ [ 'prefix' => ['', 'DISTINCT', 'ALL'], @@ -24,4 +26,11 @@ class SqlFunctionAVG extends SqlFunction { ], ]; + /** + * @return string + */ + public static function getTitle(): string { + return ts('Average'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php b/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php new file mode 100644 index 0000000000000000000000000000000000000000..584f4374ec774015b594668f842a123e08563e2b --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php @@ -0,0 +1,35 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionCOALESCE extends SqlFunction { + + protected static $category = self::CATEGORY_COMPARISON; + + protected static $params = [ + [ + 'expr' => 99, + 'optional' => FALSE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Coalesce'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php new file mode 100644 index 0000000000000000000000000000000000000000..5dc63348a181c05888e4d088c416e2715b37f346 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.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 | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionCONCAT extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static $params = [ + [ + 'expr' => 99, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Combine'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php b/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php index d444675350b398abf816a1d322f7de1562b392f0..f149108a8d9e665902937b93209e5507155942a2 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php @@ -16,6 +16,8 @@ namespace Civi\Api4\Query; */ class SqlFunctionCOUNT extends SqlFunction { + protected static $category = self::CATEGORY_AGGREGATE; + protected static $params = [ [ 'prefix' => ['', 'DISTINCT', 'ALL'], @@ -25,4 +27,11 @@ class SqlFunctionCOUNT extends SqlFunction { ], ]; + /** + * @return string + */ + public static function getTitle(): string { + return ts('Count'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php new file mode 100644 index 0000000000000000000000000000000000000000..b7687d711e7a1eb2a87c2f6af0fa1a9d9f7e75f6 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php @@ -0,0 +1,28 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionCURDATE extends SqlFunction { + + protected static $category = self::CATEGORY_DATE; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Now'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php b/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php new file mode 100644 index 0000000000000000000000000000000000000000..755ab2815112005b743315f702436f6dd1203ed8 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php @@ -0,0 +1,35 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionGREATEST extends SqlFunction { + + protected static $category = self::CATEGORY_COMPARISON; + + protected static $params = [ + [ + 'expr' => 99, + 'optional' => FALSE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Greatest'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php b/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php new file mode 100644 index 0000000000000000000000000000000000000000..869bd077bfea47280a749f8535af1b51c2756c32 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php @@ -0,0 +1,50 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionGROUP_CONCAT extends SqlFunction { + + protected static $category = self::CATEGORY_AGGREGATE; + + protected static $params = [ + [ + 'prefix' => ['', 'DISTINCT', 'ALL'], + 'expr' => 1, + 'must_be' => ['SqlField'], + 'optional' => FALSE, + ], + [ + 'prefix' => ['ORDER BY'], + 'expr' => 1, + 'suffix' => ['', 'ASC', 'DESC'], + 'must_be' => ['SqlField'], + 'optional' => TRUE, + ], + [ + 'prefix' => ['SEPARATOR'], + 'expr' => 1, + 'must_be' => ['SqlString'], + 'optional' => TRUE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('List'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php b/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php new file mode 100644 index 0000000000000000000000000000000000000000..538ad322860d84b27034e69c409300ee0ae0bb9a --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php @@ -0,0 +1,35 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionISNULL extends SqlFunction { + + protected static $category = self::CATEGORY_COMPARISON; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Is null'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php b/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php new file mode 100644 index 0000000000000000000000000000000000000000..ea246a820da7e63803bffdff3e794da006fc973d --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php @@ -0,0 +1,35 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionLEAST extends SqlFunction { + + protected static $category = self::CATEGORY_COMPARISON; + + protected static $params = [ + [ + 'expr' => 99, + 'optional' => FALSE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Least'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php b/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php new file mode 100644 index 0000000000000000000000000000000000000000..2a6b9686f5f20408fbebccb1bd865e32bccf996f --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionLOWER.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 | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionLOWER extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Lowercase'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionMAX.php b/civicrm/Civi/Api4/Query/SqlFunctionMAX.php index f80ebeea15abfb7fb804642d675ea920f6950400..2116ec19f3744691019088c0e94e0a189376104e 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionMAX.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionMAX.php @@ -16,6 +16,8 @@ namespace Civi\Api4\Query; */ class SqlFunctionMAX extends SqlFunction { + protected static $category = self::CATEGORY_AGGREGATE; + protected static $params = [ [ 'prefix' => ['', 'DISTINCT', 'ALL'], @@ -24,4 +26,11 @@ class SqlFunctionMAX extends SqlFunction { ], ]; + /** + * @return string + */ + public static function getTitle(): string { + return ts('Max'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionMIN.php b/civicrm/Civi/Api4/Query/SqlFunctionMIN.php index 993a5b18eb876e2447b916c6ae4a6e99dc0e0d46..e8d4c56ebb3a13e6cc8246542ff0cc2632a171ae 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionMIN.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionMIN.php @@ -16,6 +16,8 @@ namespace Civi\Api4\Query; */ class SqlFunctionMIN extends SqlFunction { + protected static $category = self::CATEGORY_AGGREGATE; + protected static $params = [ [ 'prefix' => ['', 'DISTINCT', 'ALL'], @@ -24,4 +26,11 @@ class SqlFunctionMIN extends SqlFunction { ], ]; + /** + * @return string + */ + public static function getTitle(): string { + return ts('Min'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php b/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php new file mode 100644 index 0000000000000000000000000000000000000000..846981c736b1f9508036f1947273161cc72d1731 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php @@ -0,0 +1,39 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionNULLIF extends SqlFunction { + + protected static $category = self::CATEGORY_COMPARISON; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + ], + [ + 'expr' => 1, + 'optional' => FALSE, + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Null if'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php b/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php new file mode 100644 index 0000000000000000000000000000000000000000..d1cdef78e5d72c0d739148b570f7a5d87119b899 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php @@ -0,0 +1,46 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionREPLACE extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Replace'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionROUND.php b/civicrm/Civi/Api4/Query/SqlFunctionROUND.php new file mode 100644 index 0000000000000000000000000000000000000000..4d5b2f084d2b236755bcccf117b7502f7b5a8bc3 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionROUND.php @@ -0,0 +1,41 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionROUND extends SqlFunction { + + protected static $category = self::CATEGORY_MATH; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlNumber'], + ], + [ + 'expr' => 1, + 'optional' => TRUE, + 'must_be' => ['SqlNumber'], + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Round'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionSUM.php b/civicrm/Civi/Api4/Query/SqlFunctionSUM.php index 36f4ebb3cc3c6e7c886944b60e8633ededdb8d2a..b6b74ae786b3b58cb001d2d4880eae3cb90a43a2 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionSUM.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionSUM.php @@ -16,6 +16,8 @@ namespace Civi\Api4\Query; */ class SqlFunctionSUM extends SqlFunction { + protected static $category = self::CATEGORY_AGGREGATE; + protected static $params = [ [ 'prefix' => ['', 'DISTINCT', 'ALL'], @@ -24,4 +26,11 @@ class SqlFunctionSUM extends SqlFunction { ], ]; + /** + * @return string + */ + public static function getTitle(): string { + return ts('Sum'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php b/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php new file mode 100644 index 0000000000000000000000000000000000000000..b9a714e2d5af53ac784fab8707cdfa5f06f01d31 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionUPPER.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 | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionUPPER extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static $params = [ + [ + 'expr' => 1, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + ]; + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Uppercase'); + } + +} diff --git a/civicrm/Civi/Core/Event/SmartyErrorEvent.php b/civicrm/Civi/Core/Event/SmartyErrorEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..e27fb3ae4d92ee7cc32e8a8322bed025bf721260 --- /dev/null +++ b/civicrm/Civi/Core/Event/SmartyErrorEvent.php @@ -0,0 +1,51 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Core\Event; + +/** + * This triggers when a smarty parse error happens via \Smarty::trigger_error + * Event: civi.smarty.error + * + * Class SmartyErrorEvent + * @package Civi\API\Event + */ +class SmartyErrorEvent extends \Symfony\Component\EventDispatcher\Event { + + /** + * The error message generated by smarty + * @var string + */ + public $errorMsg; + + /** + * The error type - one of PHP error constants + * @var int + */ + public $errorType; + + /** + * @param string $errorMsg + * @param int $errorType + */ + public function __construct($errorMsg, $errorType) { + $this->errorMsg = $errorMsg; + $this->errorType = $errorType; + } + + /** + * @inheritDoc + */ + public function getHookValues() { + return [$this->errorMsg, $this->errorType]; + } + +} diff --git a/civicrm/Civi/Core/Resolver.php b/civicrm/Civi/Core/Resolver.php index a1ebfe2b0fdde0156742fc8276184a5e36ac24db..a3950c74e9f0f4cf6f9d95a3219f3cd81d6fe5ed 100644 --- a/civicrm/Civi/Core/Resolver.php +++ b/civicrm/Civi/Core/Resolver.php @@ -95,7 +95,7 @@ class Resolver { // Callback: Constant value. return new ResolverConstantCallback((int) $id); } - elseif ($id{0} >= 'A' && $id{0} <= 'Z') { + elseif ($id[0] >= 'A' && $id[0] <= 'Z') { // Object: New/default instance. return new $id(); } diff --git a/civicrm/Civi/Core/Themes.php b/civicrm/Civi/Core/Themes.php index 9156eb55588d081372a7ebf1b35859b9b113001f..dee905485fdc24c5576ba2fd2a4f8846531fe6d4 100644 --- a/civicrm/Civi/Core/Themes.php +++ b/civicrm/Civi/Core/Themes.php @@ -135,7 +135,7 @@ class Themes { public function getAvailable() { $result = []; foreach ($this->getAll() as $key => $theme) { - if ($key{0} !== '_') { + if ($key[0] !== '_') { $result[$key] = $theme['title']; } } diff --git a/civicrm/Civi/Install/Requirements.php b/civicrm/Civi/Install/Requirements.php index 0381768218aca43d2adb5ac52b82ad088bf7930b..87012fa9c02961946db0fb2a814e1da7a643b52b 100644 --- a/civicrm/Civi/Install/Requirements.php +++ b/civicrm/Civi/Install/Requirements.php @@ -58,6 +58,9 @@ class Requirements { * An array of check summaries. Each array contains the keys 'title', 'severity', and 'details'. */ public function checkAll(array $config) { + if (!class_exists('\CRM_Utils_SQL_TempTable')) { + require_once dirname(__FILE__) . '/../../CRM/Utils/SQL/TempTable.php'; + } return array_merge($this->checkSystem($config['file_paths']), $this->checkDatabase($config['db_config'])); } @@ -291,6 +294,9 @@ class Requirements { * @return array */ public function checkMysqlVersion(array $db_config) { + if (!class_exists('\CRM_Upgrade_Incremental_General')) { + require_once dirname(__FILE__) . '/../../CRM/Upgrade/Incremental/General.php'; + } $min = \CRM_Upgrade_Incremental_General::MIN_INSTALL_MYSQL_VER; $results = [ 'title' => 'CiviCRM MySQL Version', @@ -304,7 +310,8 @@ class Requirements { return $results; } - if (version_compare($info, $min) == -1) { + $versionDetails = mysqli_query($conn, 'SELECT version() as version')->fetch_assoc(); + if (version_compare($versionDetails['version'], $min) == -1) { $results['severity'] = $this::REQUIREMENT_ERROR; $results['details'] = "MySQL version is {$info}; minimum required is {$min}"; return $results; @@ -373,15 +380,15 @@ class Requirements { $results['details'] = "Could not select the database"; return $results; } - - $r = mysqli_query($conn, 'CREATE TEMPORARY TABLE civicrm_install_temp_table_test (test text)'); + $temporaryTableName = \CRM_Utils_SQL_TempTable::build()->setCategory('install')->getName(); + $r = mysqli_query($conn, 'CREATE TEMPORARY TABLE ' . $temporaryTableName . ' (test text)'); if (!$r) { $results['severity'] = $this::REQUIREMENT_ERROR; $results['details'] = "Database does not support creation of temporary tables"; return $results; } - mysqli_query($conn, 'DROP TEMPORARY TABLE civicrm_install_temp_table_test'); + mysqli_query($conn, 'DROP TEMPORARY TABLE ' . $temporaryTableName); return $results; } diff --git a/civicrm/Civi/Payment/PropertyBag.php b/civicrm/Civi/Payment/PropertyBag.php index 8878734691078a3cc9ce44189b0c845065dcfc00..49a4ea4e8c9975f9c5392638c098b2033a7dc78a 100644 --- a/civicrm/Civi/Payment/PropertyBag.php +++ b/civicrm/Civi/Payment/PropertyBag.php @@ -3,6 +3,7 @@ namespace Civi\Payment; use InvalidArgumentException; use Civi; +use CRM_Core_Error; use CRM_Core_PseudoConstant; /** @@ -21,11 +22,6 @@ use CRM_Core_PseudoConstant; * */ class PropertyBag implements \ArrayAccess { - /** - * @var array - * - see legacyWarning - */ - public static $legacyWarnings = []; protected $props = ['default' => []]; @@ -75,6 +71,14 @@ class PropertyBag implements \ArrayAccess { 'isNotifyProcessorOnCancelRecur' => TRUE, ]; + + /** + * @var bool + * Temporary, internal variable to help ease transition to PropertyBag. + * Used by cast() to suppress legacy warnings. + */ + protected $suppressLegacyWarnings = FALSE; + /** * Get the property bag. * @@ -109,7 +113,9 @@ class PropertyBag implements \ArrayAccess { */ public function offsetExists ($offset): bool { $prop = $this->handleLegacyPropNames($offset, TRUE); - return $prop && isset($this->props['default'][$prop]); + // If there's no prop, assume it's a custom property. + $prop = $prop ?? $offset; + return array_key_exists($prop, $this->props['default']); } /** @@ -118,8 +124,35 @@ class PropertyBag implements \ArrayAccess { * @param mixed $offset * @return mixed */ - public function offsetGet ($offset) { - $prop = $this->handleLegacyPropNames($offset); + public function offsetGet($offset) { + try { + $prop = $this->handleLegacyPropNames($offset); + } + catch (InvalidArgumentException $e) { + + CRM_Core_Error::deprecatedFunctionWarning( + "proper getCustomProperty('$offset') for non-core properties. " + . $e->getMessage(), + "PropertyBag array access to get '$offset'" + ); + + try { + return $this->getCustomProperty($offset, 'default'); + } + catch (BadMethodCallException $e) { + CRM_Core_Error::deprecatedFunctionWarning( + "proper setCustomProperty('$offset', \$value) to store the value (since it is not a core value), then access it with getCustomProperty('$offset'). NULL is returned but in future an exception will be thrown." + . $e->getMessage(), + "PropertyBag array access to get unset property '$offset'" + ); + return NULL; + } + } + + CRM_Core_Error::deprecatedFunctionWarning( + "get" . ucfirst($offset) . "()", + "PropertyBag array access for core property '$offset'" + ); return $this->get($prop, 'default'); } @@ -139,7 +172,15 @@ class PropertyBag implements \ArrayAccess { // This is fine if it's something particular to a payment processor // (which should be using setCustomProperty) however it could also lead to // things like 'my_weirly_named_contact_id'. - $this->legacyWarning($e->getMessage() . " We have merged this in for now as a custom property. Please rewrite your code to use PropertyBag->setCustomProperty if it is a genuinely custom property, or a standardised setter like PropertyBag->setContactID for standard properties"); + // + // From 5.28 we suppress this when using PropertyBag::cast() to ease transition. + if (!$this->suppressLegacyWarnings) { + CRM_Core_Error::deprecatedFunctionWarning( + "proper setCustomProperty('$offset', \$value) for non-core properties. " + . $e->getMessage(), + "PropertyBag array access to set '$offset'" + ); + } $this->setCustomProperty($offset, $value, 'default'); return; } @@ -155,6 +196,12 @@ class PropertyBag implements \ArrayAccess { // These lines are here (and not in try block) because the catch must only // catch the case when the prop is custom. $setter = 'set' . ucfirst($prop); + if (!$this->suppressLegacyWarnings) { + CRM_Core_Error::deprecatedFunctionWarning( + "$setter()", + "PropertyBag array access to set core property '$offset'" + ); + } $this->$setter($value, 'default'); } @@ -168,24 +215,6 @@ class PropertyBag implements \ArrayAccess { unset($this->props['default'][$prop]); } - /** - * Log legacy warnings info. - * - * @param string $message - */ - protected function legacyWarning($message) { - if (empty(static::$legacyWarnings)) { - // First time we have been called. - register_shutdown_function([PropertyBag::class, 'writeLegacyWarnings']); - } - // Store warnings instead of logging immediately, as calls to Civi::log() - // can take over half a second to work in some hosting environments. - static::$legacyWarnings[$message] = TRUE; - - // For unit tests: - $this->lastWarning = $message; - } - /** * Save any legacy warnings to log. * @@ -226,7 +255,10 @@ class PropertyBag implements \ArrayAccess { throw new \InvalidArgumentException("Unknown property '$prop'."); } // Remaining case is legacy name that's been translated. - $this->legacyWarning("We have translated '$prop' to '$newName' for you, but please update your code to use the propper setters and getters."); + if (!$this->suppressLegacyWarnings) { + CRM_Core_Error::deprecatedFunctionWarning("Canonical property name '$newName'", "Legacy property name '$prop'"); + } + return $newName; } @@ -239,7 +271,7 @@ class PropertyBag implements \ArrayAccess { * @return mixed */ protected function get($prop, $label) { - if (array_key_exists($prop, $this->props['default'])) { + if (array_key_exists($prop, $this->props[$label] ?? [])) { return $this->props[$label][$prop]; } throw new \BadMethodCallException("Property '$prop' has not been set."); @@ -291,17 +323,21 @@ class PropertyBag implements \ArrayAccess { /** * This is used to merge values from an array. - * It's a transitional function and should not be used! + * It's a transitional, internal function and should not be used! * * @param array $data */ public function mergeLegacyInputParams($data) { - $this->legacyWarning('We have merged input params into the property bag for now but please rewrite code to not use this.'); + // Suppress legacy warnings for merging an array of data as this + // suits our migration plan at this moment. Future behaviour may differ. + // @see https://github.com/civicrm/civicrm-core/pull/17643 + $this->suppressLegacyWarnings = TRUE; foreach ($data as $key => $value) { if ($value !== NULL && $value !== '') { $this->offsetSet($key, $value); } } + $this->suppressLegacyWarnings = FALSE; } /** @@ -1056,6 +1092,10 @@ class PropertyBag implements \ArrayAccess { if (isset(static::$propMap[$prop])) { throw new \InvalidArgumentException("Attempted to get '$prop' via getCustomProperty - must use using its getter."); } + + if (!array_key_exists($prop, $this->props[$label] ?? [])) { + throw new \BadMethodCallException("Property '$prop' has not been set."); + } return $this->props[$label][$prop] ?? NULL; } diff --git a/civicrm/Civi/Test/CiviTestListener.php b/civicrm/Civi/Test/CiviTestListener.php index e32d9b45d28888a925824bb608a5de85bd944799..2851bda3d89c9d283186e3dd54beeee9f104b327 100644 --- a/civicrm/Civi/Test/CiviTestListener.php +++ b/civicrm/Civi/Test/CiviTestListener.php @@ -7,6 +7,9 @@ if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Ve // Using an early return instead of a else does not work when using the PHPUnit phar due to some weird PHP behavior (the class // gets defined without executing the code before it and so the definition is not properly conditional) } +elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '>=')) { + class_alias('Civi\Test\CiviTestListenerPHPUnit7', 'Civi\Test\CiviTestListener'); +} else { /** diff --git a/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php new file mode 100644 index 0000000000000000000000000000000000000000..ee8173d2b8341e162b739521f6ca818bbbe818a7 --- /dev/null +++ b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php @@ -0,0 +1,297 @@ +<?php + +namespace Civi\Test; + +/** + * Class CiviTestListener + * @package Civi\Test + * + * CiviTestListener participates in test-execution, looking for test-classes + * which have certain tags. If the tags are found, the listener will perform + * additional setup/teardown logic. + * + * @see EndToEndInterface + * @see HeadlessInterface + * @see HookInterface + */ +class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { + + use \PHPUnit\Framework\TestListenerDefaultImplementation; + + /** + * @var \CRM_Core_TemporaryErrorScope + */ + private $errorScope; + + /** + * @var array + * Ex: $cache['Some_Test_Class']['civicrm_foobar'] = 'hook_civicrm_foobar'; + * Array(string $testClass => Array(string $hookName => string $methodName)). + */ + private $cache = []; + + /** + * @var \CRM_Core_Transaction|null + */ + private $tx; + + public function startTestSuite(\PHPUnit\Framework\TestSuite $suite): void { + $byInterface = $this->indexTestsByInterface($suite->tests()); + $this->validateGroups($byInterface); + $this->autoboot($byInterface); + } + + public function endTestSuite(\PHPUnit\Framework\TestSuite $suite): void { + $this->cache = []; + } + + public function startTest(\PHPUnit\Framework\Test $test): void { + if ($this->isCiviTest($test)) { + error_reporting(E_ALL); + $this->errorScope = \CRM_Core_TemporaryErrorScope::useException(); + } + + if ($test instanceof HeadlessInterface) { + $this->bootHeadless($test); + } + + if ($test instanceof HookInterface) { + // Note: bootHeadless() indirectly resets any hooks, which means that hook_civicrm_config + // is unsubscribable. However, after bootHeadless(), we're free to subscribe to hooks again. + $this->registerHooks($test); + } + + if ($test instanceof TransactionalInterface) { + $this->tx = new \CRM_Core_Transaction(TRUE); + $this->tx->rollback(); + } + else { + $this->tx = NULL; + } + } + + public function endTest(\PHPUnit\Framework\Test $test, float $time): void { + if ($test instanceof TransactionalInterface) { + $this->tx->rollback()->commit(); + $this->tx = NULL; + } + if ($test instanceof HookInterface) { + \CRM_Utils_Hook::singleton()->reset(); + } + if ($this->isCiviTest($test)) { + error_reporting(E_ALL & ~E_NOTICE); + $this->errorScope = NULL; + } + } + + /** + * @param HeadlessInterface|\PHPUnit\Framework\Test $test + */ + protected function bootHeadless($test) { + if (CIVICRM_UF !== 'UnitTests') { + throw new \RuntimeException('HeadlessInterface requires CIVICRM_UF=UnitTests'); + } + + // Hrm, this seems wrong. Shouldn't we be resetting the entire session? + $session = \CRM_Core_Session::singleton(); + $session->set('userID', NULL); + $test->setUpHeadless(); + + \CRM_Utils_System::flushCache(); + \Civi::reset(); + \CRM_Core_Session::singleton()->set('userID', NULL); + // ugh, performance + $config = \CRM_Core_Config::singleton(TRUE, TRUE); + + if (property_exists($config->userPermissionClass, 'permissions')) { + $config->userPermissionClass->permissions = NULL; + } + } + + /** + * @param \Civi\Test\HookInterface $test + * @return array + * Array(string $hookName => string $methodName)). + */ + protected function findTestHooks(HookInterface $test) { + $class = get_class($test); + if (!isset($this->cache[$class])) { + $funcs = []; + foreach (get_class_methods($class) as $func) { + if (preg_match('/^hook_/', $func)) { + $funcs[substr($func, 5)] = $func; + } + } + $this->cache[$class] = $funcs; + } + return $this->cache[$class]; + } + + /** + * @param \PHPUnit\Framework\Test $test + * @return bool + */ + protected function isCiviTest(\PHPUnit\Framework\Test $test) { + return $test instanceof HookInterface || $test instanceof HeadlessInterface; + } + + /** + * Find any hook functions in $test and register them. + * + * @param \Civi\Test\HookInterface $test + */ + protected function registerHooks(HookInterface $test) { + if (CIVICRM_UF !== 'UnitTests') { + // This is not ideal -- it's just a side-effect of how hooks and E2E tests work. + // We can temporarily subscribe to hooks in-process, but for other processes, it gets messy. + throw new \RuntimeException('CiviHookTestInterface requires CIVICRM_UF=UnitTests'); + } + \CRM_Utils_Hook::singleton()->reset(); + /** @var \CRM_Utils_Hook_UnitTests $hooks */ + $hooks = \CRM_Utils_Hook::singleton(); + foreach ($this->findTestHooks($test) as $hook => $func) { + $hooks->setHook($hook, [$test, $func]); + } + } + + /** + * The first time we come across HeadlessInterface or EndToEndInterface, we'll + * try to autoboot. + * + * Once the system is booted, there's nothing we can do -- we're stuck with that + * environment. (Thank you, prolific define()s!) If there's a conflict between a + * test-class and the active boot-level, then we'll have to bail. + * + * @param array $byInterface + * List of test classes, keyed by major interface (HeadlessInterface vs EndToEndInterface). + */ + protected function autoboot($byInterface) { + if (defined('CIVICRM_UF')) { + // OK, nothing we can do. System has booted already. + } + elseif (!empty($byInterface['HeadlessInterface'])) { + putenv('CIVICRM_UF=UnitTests'); + // phpcs:disable + eval($this->cv('php:boot --level=full', 'phpcode')); + // phpcs:enable + } + elseif (!empty($byInterface['EndToEndInterface'])) { + putenv('CIVICRM_UF='); + // phpcs:disable + eval($this->cv('php:boot --level=full', 'phpcode')); + // phpcs:enable + } + + $blurb = "Tip: Run the headless tests and end-to-end tests separately, e.g.\n" + . " $ phpunit5 --group headless\n" + . " $ phpunit5 --group e2e \n"; + + if (!empty($byInterface['HeadlessInterface']) && CIVICRM_UF !== 'UnitTests') { + $testNames = implode(', ', array_keys($byInterface['HeadlessInterface'])); + throw new \RuntimeException("Suite includes headless tests ($testNames) which require CIVICRM_UF=UnitTests.\n\n$blurb"); + } + if (!empty($byInterface['EndToEndInterface']) && CIVICRM_UF === 'UnitTests') { + $testNames = implode(', ', array_keys($byInterface['EndToEndInterface'])); + throw new \RuntimeException("Suite includes end-to-end tests ($testNames) which do not support CIVICRM_UF=UnitTests.\n\n$blurb"); + } + } + + /** + * Call the "cv" command. + * + * This duplicates the standalone `cv()` wrapper that is recommended in bootstrap.php. + * This duplication is necessary because `cv()` is optional, and downstream implementers + * may alter, rename, or omit the wrapper, and (by virtue of its role in bootstrap) there + * it is impossible to define it centrally. + * + * @param string $cmd + * The rest of the command to send. + * @param string $decode + * Ex: 'json' or 'phpcode'. + * @return string + * Response output (if the command executed normally). + * @throws \RuntimeException + * If the command terminates abnormally. + */ + protected function cv($cmd, $decode = 'json') { + $cmd = 'cv ' . $cmd; + $descriptorSpec = [0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => STDERR]; + $oldOutput = getenv('CV_OUTPUT'); + putenv("CV_OUTPUT=json"); + $process = proc_open($cmd, $descriptorSpec, $pipes, __DIR__); + putenv("CV_OUTPUT=$oldOutput"); + fclose($pipes[0]); + $result = stream_get_contents($pipes[1]); + fclose($pipes[1]); + if (proc_close($process) !== 0) { + throw new \RuntimeException("Command failed ($cmd):\n$result"); + } + switch ($decode) { + case 'raw': + return $result; + + case 'phpcode': + // If the last output is /*PHPCODE*/, then we managed to complete execution. + if (substr(trim($result), 0, 12) !== "/*BEGINPHP*/" || substr(trim($result), -10) !== "/*ENDPHP*/") { + throw new \RuntimeException("Command failed ($cmd):\n$result"); + } + return $result; + + case 'json': + return json_decode($result, 1); + + default: + throw new \RuntimeException("Bad decoder format ($decode)"); + } + } + + /** + * @param $tests + * @return array + */ + protected function indexTestsByInterface($tests) { + $byInterface = ['HeadlessInterface' => [], 'EndToEndInterface' => []]; + foreach ($tests as $test) { + /** @var \PHPUnit\Framework\Test $test */ + if ($test instanceof HeadlessInterface) { + $byInterface['HeadlessInterface'][get_class($test)] = 1; + } + if ($test instanceof EndToEndInterface) { + $byInterface['EndToEndInterface'][get_class($test)] = 1; + } + } + return $byInterface; + } + + /** + * Ensure that any tests have sensible groups, e.g. + * + * `HeadlessInterface` ==> `group headless` + * `EndToEndInterface` ==> `group e2e` + * + * @param array $byInterface + */ + protected function validateGroups($byInterface) { + foreach ($byInterface['HeadlessInterface'] as $className => $nonce) { + $clazz = new \ReflectionClass($className); + $docComment = str_replace("\r\n", "\n", $clazz->getDocComment()); + if (strpos($docComment, "@group headless\n") === FALSE) { + echo "WARNING: Class $className implements HeadlessInterface. It should declare \"@group headless\".\n"; + } + if (strpos($docComment, "@group e2e\n") !== FALSE) { + echo "WARNING: Class $className implements HeadlessInterface. It should not declare \"@group e2e\".\n"; + } + } + foreach ($byInterface['EndToEndInterface'] as $className => $nonce) { + $clazz = new \ReflectionClass($className); + $docComment = str_replace("\r\n", "\n", $clazz->getDocComment()); + if (strpos($docComment, "@group e2e\n") === FALSE) { + echo "WARNING: Class $className implements EndToEndInterface. It should declare \"@group e2e\".\n"; + } + if (strpos($docComment, "@group headless\n") !== FALSE) { + echo "WARNING: Class $className implements EndToEndInterface. It should not declare \"@group headless\".\n"; + } + } + } + +} diff --git a/civicrm/Civi/Test/Data.php b/civicrm/Civi/Test/Data.php index eb4a5ef083194a7a6dc9cba68c5868eee875233d..9360484f29b427f2373170cbe067dd079f52a975 100644 --- a/civicrm/Civi/Test/Data.php +++ b/civicrm/Civi/Test/Data.php @@ -18,7 +18,7 @@ class Data { \Civi\Test::schema()->setStrict(FALSE); // Ensure that when we populate the database it is done in utf8 mode - \Civi\Test::execute('SET NAMES utf8'); + \Civi\Test::execute('SET NAMES utf8mb4'); $sqlDir = dirname(dirname(__DIR__)) . "/sql"; if (!isset(\Civi\Test::$statics['locale_data'])) { @@ -44,8 +44,6 @@ class Data { \Civi\Test::schema()->setStrict(TRUE); }); - civicrm_api('setting', 'create', ['installed' => 1, 'domain_id' => 'all', 'version' => 3]); - // Rebuild triggers civicrm_api('system', 'flush', ['version' => 3, 'triggers' => 1]); diff --git a/civicrm/Civi/Test/DbTestTrait.php b/civicrm/Civi/Test/DbTestTrait.php index 866984566f7a32cf1c6899c4adb6864c1275a5a6..b664edd84add4a354d0857509c4a8b8b4c7c3aad 100644 --- a/civicrm/Civi/Test/DbTestTrait.php +++ b/civicrm/Civi/Test/DbTestTrait.php @@ -143,7 +143,7 @@ trait DbTestTrait { $expectedValue, $message ) { $value = \CRM_Core_DAO::getFieldValue($daoName, $searchValue, $returnColumn, $searchColumn, TRUE); - $this->assertEquals($expectedValue, $value, $message); + $this->assertEquals(trim($expectedValue), trim($value), $message); } /** diff --git a/civicrm/Civi/Test/TAP.php b/civicrm/Civi/Test/TAP.php index 5b432ac9530d5a66f6639494dc52684e781cae10..dd1df865e2e51c8e54953e3ab6121cd182b6543e 100644 --- a/civicrm/Civi/Test/TAP.php +++ b/civicrm/Civi/Test/TAP.php @@ -26,231 +26,236 @@ namespace Civi\Test; -class TAP extends \PHPUnit\Util\Printer implements \PHPUnit\Framework\TestListener { - - /** - * @var int - */ - protected $testNumber = 0; - - /** - * @var int - */ - protected $testSuiteLevel = 0; +if (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { + class_alias('Civi\Test\TAPLegacy', 'Civi\Test\TAP'); +} +else { + class TAP extends \PHPUnit\Util\Printer implements \PHPUnit\Framework\TestListener { - /** - * @var bool - */ - protected $testSuccessful = TRUE; + /** + * @var int + */ + protected $testNumber = 0; - /** - * Constructor. - * - * @param mixed $out - * - * @throws \PHPUnit\Framework\Exception - * - * @since Method available since Release 3.3.4 - */ - public function __construct($out = NULL) { - parent::__construct($out); - $this - ->write("TAP version 13\n"); - } + /** + * @var int + */ + protected $testSuiteLevel = 0; - /** - * An error occurred. - * - * @param \PHPUnit\Framework\Test $test - * @param \Exception $e - * @param float $time - */ - public function addError(\PHPUnit\Framework\Test $test, \Exception $e, $time) { - $this - ->writeNotOk($test, 'Error'); - } + /** + * @var bool + */ + protected $testSuccessful = TRUE; - /** - * A failure occurred. - * - * @param \PHPUnit\Framework\Test $test - * @param \PHPUnit\Framework\AssertionFailedError $e - * @param float $time - */ - public function addFailure(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\AssertionFailedError $e, $time) { - $this - ->writeNotOk($test, 'Failure'); - $message = explode("\n", \PHPUnit\Framework\TestFailure::exceptionToString($e)); - $diagnostic = array( - 'message' => $message[0], - 'severity' => 'fail', - ); - if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) { - $cf = $e - ->getComparisonFailure(); - if ($cf !== NULL) { - $diagnostic['data'] = array( - 'got' => $cf - ->getActual(), - 'expected' => $cf - ->getExpected(), - ); - } + /** + * Constructor. + * + * @param mixed $out + * + * @throws \PHPUnit\Framework\Exception + * + * @since Method available since Release 3.3.4 + */ + public function __construct($out = NULL) { + parent::__construct($out); + $this + ->write("TAP version 13\n"); } - if (function_exists('yaml_emit')) { - $content = \yaml_emit($diagnostic, YAML_UTF8_ENCODING); - $content = ' ' . strtr($content, ["\n" => "\n "]); - } - else { - // Any valid JSON document is a valid YAML document. - $content = json_encode($diagnostic, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - // For closest match, drop outermost {}'s. Realign indentation. - $content = substr($content, 0, strrpos($content, "}")) . ' }'; - $content = ' ' . ltrim($content); - $content = sprintf(" ---\n%s\n ...\n", $content); + /** + * An error occurred. + * + * @param \PHPUnit\Framework\Test $test + * @param \Throwable $t + * @param float $time + */ + public function addError(\PHPUnit\Framework\Test $test, \Throwable $t, float $time): void { + $this + ->writeNotOk($test, 'Error'); } - $this->write($content); - } - - /** - * Incomplete test. - * - * @param \PHPUnit\Framework\Test $test - * @param \Exception $e - * @param float $time - */ - public function addIncompleteTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { - $this - ->writeNotOk($test, '', 'TODO Incomplete Test'); - } - - /** - * Risky test. - * - * @param \PHPUnit\Framework\Test $test - * @param \Exception $e - * @param float $time - * - * @since Method available since Release 4.0.0 - */ - public function addRiskyTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { - $this - ->write(sprintf("ok %d - # RISKY%s\n", $this->testNumber, $e - ->getMessage() != '' ? ' ' . $e - ->getMessage() : '')); - $this->testSuccessful = FALSE; - } + /** + * A failure occurred. + * + * @param \PHPUnit\Framework\Test $test + * @param \PHPUnit\Framework\AssertionFailedError $e + * @param float $time + */ + public function addFailure(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\AssertionFailedError $e, float $time): void { + $this + ->writeNotOk($test, 'Failure'); + $message = explode("\n", \PHPUnit\Framework\TestFailure::exceptionToString($e)); + $diagnostic = array( + 'message' => $message[0], + 'severity' => 'fail', + ); + if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) { + $cf = $e + ->getComparisonFailure(); + if ($cf !== NULL) { + $diagnostic['data'] = array( + 'got' => $cf + ->getActual(), + 'expected' => $cf + ->getExpected(), + ); + } + } - /** - * Skipped test. - * - * @param \PHPUnit\Framework\Test $test - * @param \Exception $e - * @param float $time - * - * @since Method available since Release 3.0.0 - */ - public function addSkippedTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { - $this - ->write(sprintf("ok %d - # SKIP%s\n", $this->testNumber, $e - ->getMessage() != '' ? ' ' . $e - ->getMessage() : '')); - $this->testSuccessful = FALSE; - } + if (function_exists('yaml_emit')) { + $content = \yaml_emit($diagnostic, YAML_UTF8_ENCODING); + $content = ' ' . strtr($content, ["\n" => "\n "]); + } + else { + // Any valid JSON document is a valid YAML document. + $content = json_encode($diagnostic, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + // For closest match, drop outermost {}'s. Realign indentation. + $content = substr($content, 0, strrpos($content, "}")) . ' }'; + $content = ' ' . ltrim($content); + $content = sprintf(" ---\n%s\n ...\n", $content); + } - /** - * Warning test. - * - * @param \PHPUnit\Framework\Test $test - * @param \PHPUnit\Framework\Warning $e - * @param float $time - * - * @since Method available since Release 3.0.0 - */ - public function addWarning(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\Warning $e, $time) { - $this - ->write(sprintf("ok %d - # Warning%s\n", $this->testNumber, $e - ->getMessage() != '' ? ' ' . $e - ->getMessage() : '')); - $this->testSuccessful = FALSE; - } + $this->write($content); + } - /** - * A testsuite started. - * - * @param \PHPUnit\Framework\TestSuite $suite - */ - public function startTestSuite(\PHPUnit\Framework\TestSuite $suite) { - $this->testSuiteLevel++; - } + /** + * Incomplete test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Throwable $t + * @param float $time + */ + public function addIncompleteTest(\PHPUnit\Framework\Test $test, \Throwable $t, float $time): void { + $this + ->writeNotOk($test, '', 'TODO Incomplete Test'); + } - /** - * A testsuite ended. - * - * @param \PHPUnit\Framework\TestSuite $suite - */ - public function endTestSuite(\PHPUnit\Framework\TestSuite $suite) { - $this->testSuiteLevel--; - if ($this->testSuiteLevel == 0) { + /** + * Risky test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Throwable $t + * @param float $time + * + * @since Method available since Release 4.0.0 + */ + public function addRiskyTest(\PHPUnit\Framework\Test $test, \Throwable $t, float $time): void { $this - ->write(sprintf("1..%d\n", $this->testNumber)); + ->write(sprintf("ok %d - # RISKY%s\n", $this->testNumber, $t + ->getMessage() != '' ? ' ' . $t + ->getMessage() : '')); + $this->testSuccessful = FALSE; } - } - /** - * A test started. - * - * @param \PHPUnit\Framework\Test $test - */ - public function startTest(\PHPUnit\Framework\Test $test) { - $this->testNumber++; - $this->testSuccessful = TRUE; - } + /** + * Skipped test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Throwable $t + * @param float $time + * + * @since Method available since Release 3.0.0 + */ + public function addSkippedTest(\PHPUnit\Framework\Test $test, \Throwable $t, float $time): void { + $this + ->write(sprintf("ok %d - # SKIP%s\n", $this->testNumber, $t + ->getMessage() != '' ? ' ' . $t + ->getMessage() : '')); + $this->testSuccessful = FALSE; + } - /** - * A test ended. - * - * @param \PHPUnit\Framework\Test $test - * @param float $time - */ - public function endTest(\PHPUnit\Framework\Test $test, $time) { - if ($this->testSuccessful === TRUE) { + /** + * Warning test. + * + * @param \PHPUnit\Framework\Test $test + * @param \PHPUnit\Framework\Warning $e + * @param float $time + * + * @since Method available since Release 3.0.0 + */ + public function addWarning(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\Warning $e, float $time): void { $this - ->write(sprintf("ok %d - %s\n", $this->testNumber, \PHPUnit\Util\Test::describe($test))); + ->write(sprintf("ok %d - # Warning%s\n", $this->testNumber, $e + ->getMessage() != '' ? ' ' . $e + ->getMessage() : '')); + $this->testSuccessful = FALSE; } - $this - ->writeDiagnostics($test); - } - /** - * @param \PHPUnit\Framework\Test $test - * @param string $prefix - * @param string $directive - */ - protected function writeNotOk(\PHPUnit\Framework\Test $test, $prefix = '', $directive = '') { - $this - ->write(sprintf("not ok %d - %s%s%s\n", $this->testNumber, $prefix != '' ? $prefix . ': ' : '', \PHPUnit\Util\Test::describe($test), $directive != '' ? ' # ' . $directive : '')); - $this->testSuccessful = FALSE; - } + /** + * A testsuite started. + * + * @param \PHPUnit\Framework\TestSuite $suite + */ + public function startTestSuite(\PHPUnit\Framework\TestSuite $suite): void { + $this->testSuiteLevel++; + } + + /** + * A testsuite ended. + * + * @param \PHPUnit\Framework\TestSuite $suite + */ + public function endTestSuite(\PHPUnit\Framework\TestSuite $suite): void { + $this->testSuiteLevel--; + if ($this->testSuiteLevel == 0) { + $this + ->write(sprintf("1..%d\n", $this->testNumber)); + } + } - /** - * @param \PHPUnit\Framework\Test $test - */ - private function writeDiagnostics(\PHPUnit\Framework\Test $test) { - if (!$test instanceof \PHPUnit\Framework\TestCase) { - return; + /** + * A test started. + * + * @param \PHPUnit\Framework\Test $test + */ + public function startTest(\PHPUnit\Framework\Test $test): void { + $this->testNumber++; + $this->testSuccessful = TRUE; } - if (!$test - ->hasOutput()) { - return; + + /** + * A test ended. + * + * @param \PHPUnit\Framework\Test $test + * @param float $time + */ + public function endTest(\PHPUnit\Framework\Test $test, float $time): void { + if ($this->testSuccessful === TRUE) { + $this + ->write(sprintf("ok %d - %s\n", $this->testNumber, \PHPUnit\Util\Test::describeAsString($test))); + } + $this + ->writeDiagnostics($test); } - foreach (explode("\n", trim($test - ->getActualOutput())) as $line) { + + /** + * @param \PHPUnit\Framework\Test $test + * @param string $prefix + * @param string $directive + */ + protected function writeNotOk(\PHPUnit\Framework\Test $test, $prefix = '', $directive = ''): void { $this - ->write(sprintf("# %s\n", $line)); + ->write(sprintf("not ok %d - %s%s%s\n", $this->testNumber, $prefix != '' ? $prefix . ': ' : '', \PHPUnit\Util\Test::describeAsString($test), $directive != '' ? ' # ' . $directive : '')); + $this->testSuccessful = FALSE; } - } + /** + * @param \PHPUnit\Framework\Test $test + */ + private function writeDiagnostics(\PHPUnit\Framework\Test $test): void { + if (!$test instanceof \PHPUnit\Framework\TestCase) { + return; + } + if (!$test + ->hasOutput()) { + return; + } + foreach (explode("\n", trim($test + ->getActualOutput())) as $line) { + $this + ->write(sprintf("# %s\n", $line)); + } + } + + } } diff --git a/civicrm/Civi/Test/TAPLegacy.php b/civicrm/Civi/Test/TAPLegacy.php new file mode 100644 index 0000000000000000000000000000000000000000..41c7da08b4b5b3d0014a6c01aa7cb96544ce33b7 --- /dev/null +++ b/civicrm/Civi/Test/TAPLegacy.php @@ -0,0 +1,256 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | CiviCRM version 5 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM is distributed in the hope that it will be useful, but | + | WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | + | See the GNU Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +class TAPLegacy extends \PHPUnit\Util\Printer implements \PHPUnit\Framework\TestListener { + + /** + * @var int + */ + protected $testNumber = 0; + + /** + * @var int + */ + protected $testSuiteLevel = 0; + + /** + * @var bool + */ + protected $testSuccessful = TRUE; + + /** + * Constructor. + * + * @param mixed $out + * + * @throws \PHPUnit\Framework\Exception + * + * @since Method available since Release 3.3.4 + */ + public function __construct($out = NULL) { + parent::__construct($out); + $this + ->write("TAP version 13\n"); + } + + /** + * An error occurred. + * + * @param \PHPUnit\Framework\Test $test + * @param \Exception $e + * @param float $time + */ + public function addError(\PHPUnit\Framework\Test $test, \Exception $e, $time) { + $this + ->writeNotOk($test, 'Error'); + } + + /** + * A failure occurred. + * + * @param \PHPUnit\Framework\Test $test + * @param \PHPUnit\Framework\AssertionFailedError $e + * @param float $time + */ + public function addFailure(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\AssertionFailedError $e, $time) { + $this + ->writeNotOk($test, 'Failure'); + $message = explode("\n", \PHPUnit\Framework\TestFailure::exceptionToString($e)); + $diagnostic = array( + 'message' => $message[0], + 'severity' => 'fail', + ); + if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) { + $cf = $e + ->getComparisonFailure(); + if ($cf !== NULL) { + $diagnostic['data'] = array( + 'got' => $cf + ->getActual(), + 'expected' => $cf + ->getExpected(), + ); + } + } + + if (function_exists('yaml_emit')) { + $content = \yaml_emit($diagnostic, YAML_UTF8_ENCODING); + $content = ' ' . strtr($content, ["\n" => "\n "]); + } + else { + // Any valid JSON document is a valid YAML document. + $content = json_encode($diagnostic, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + // For closest match, drop outermost {}'s. Realign indentation. + $content = substr($content, 0, strrpos($content, "}")) . ' }'; + $content = ' ' . ltrim($content); + $content = sprintf(" ---\n%s\n ...\n", $content); + } + + $this->write($content); + } + + /** + * Incomplete test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Exception $e + * @param float $time + */ + public function addIncompleteTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { + $this + ->writeNotOk($test, '', 'TODO Incomplete Test'); + } + + /** + * Risky test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Exception $e + * @param float $time + * + * @since Method available since Release 4.0.0 + */ + public function addRiskyTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { + $this + ->write(sprintf("ok %d - # RISKY%s\n", $this->testNumber, $e + ->getMessage() != '' ? ' ' . $e + ->getMessage() : '')); + $this->testSuccessful = FALSE; + } + + /** + * Skipped test. + * + * @param \PHPUnit\Framework\Test $test + * @param \Exception $e + * @param float $time + * + * @since Method available since Release 3.0.0 + */ + public function addSkippedTest(\PHPUnit\Framework\Test $test, \Exception $e, $time) { + $this + ->write(sprintf("ok %d - # SKIP%s\n", $this->testNumber, $e + ->getMessage() != '' ? ' ' . $e + ->getMessage() : '')); + $this->testSuccessful = FALSE; + } + + /** + * Warning test. + * + * @param \PHPUnit\Framework\Test $test + * @param \PHPUnit\Framework\Warning $e + * @param float $time + * + * @since Method available since Release 3.0.0 + */ + public function addWarning(\PHPUnit\Framework\Test $test, \PHPUnit\Framework\Warning $e, $time) { + $this + ->write(sprintf("ok %d - # Warning%s\n", $this->testNumber, $e + ->getMessage() != '' ? ' ' . $e + ->getMessage() : '')); + $this->testSuccessful = FALSE; + } + + /** + * A testsuite started. + * + * @param \PHPUnit\Framework\TestSuite $suite + */ + public function startTestSuite(\PHPUnit\Framework\TestSuite $suite) { + $this->testSuiteLevel++; + } + + /** + * A testsuite ended. + * + * @param \PHPUnit\Framework\TestSuite $suite + */ + public function endTestSuite(\PHPUnit\Framework\TestSuite $suite) { + $this->testSuiteLevel--; + if ($this->testSuiteLevel == 0) { + $this + ->write(sprintf("1..%d\n", $this->testNumber)); + } + } + + /** + * A test started. + * + * @param \PHPUnit\Framework\Test $test + */ + public function startTest(\PHPUnit\Framework\Test $test) { + $this->testNumber++; + $this->testSuccessful = TRUE; + } + + /** + * A test ended. + * + * @param \PHPUnit\Framework\Test $test + * @param float $time + */ + public function endTest(\PHPUnit\Framework\Test $test, $time) { + if ($this->testSuccessful === TRUE) { + $this + ->write(sprintf("ok %d - %s\n", $this->testNumber, \PHPUnit\Util\Test::describe($test))); + } + $this + ->writeDiagnostics($test); + } + + /** + * @param \PHPUnit\Framework\Test $test + * @param string $prefix + * @param string $directive + */ + protected function writeNotOk(\PHPUnit\Framework\Test $test, $prefix = '', $directive = '') { + $this + ->write(sprintf("not ok %d - %s%s%s\n", $this->testNumber, $prefix != '' ? $prefix . ': ' : '', \PHPUnit\Util\Test::describe($test), $directive != '' ? ' # ' . $directive : '')); + $this->testSuccessful = FALSE; + } + + /** + * @param \PHPUnit\Framework\Test $test + */ + private function writeDiagnostics(\PHPUnit\Framework\Test $test) { + if (!$test instanceof \PHPUnit\Framework\TestCase) { + return; + } + if (!$test + ->hasOutput()) { + return; + } + foreach (explode("\n", trim($test + ->getActualOutput())) as $line) { + $this + ->write(sprintf("# %s\n", $line)); + } + } + +} diff --git a/civicrm/ang/api4Explorer/Clause.html b/civicrm/ang/api4Explorer/Clause.html index 9f9412e9f723ec9b611f7241d43dd6b981888d69..96698212f4cad6277417382a4247dabbd337b8a3 100644 --- a/civicrm/ang/api4Explorer/Clause.html +++ b/civicrm/ang/api4Explorer/Clause.html @@ -1,39 +1,41 @@ -<legend>{{ data.label || data.op + ' group' }}<span class="crm-marker" ng-if="data.required"> *</span></legend> +<legend>{{ data.label || ts('%1 group', {1: $ctrl.conjunctions[data.op]}) }}</legend> <div class="btn-group btn-group-xs" ng-if="data.groupParent"> - <button class="btn btn-danger-outline" ng-click="removeGroup()" title="{{:: ts('Remove group') }}"> + <button class="btn btn-danger-outline" ng-click="$ctrl.removeGroup()" title="{{:: ts('Remove group') }}"> <i class="crm-i fa-trash" aria-hidden="true"></i> </button> </div> -<div class="api4-clause-group-sortable" ng-model="data.clauses" ui-sortable="{axis: 'y', connectWith: '.api4-clause-group-sortable', containment: '.api4-clause-fieldset', over: onSortOver}" ui-sortable-start="onSort" ui-sortable-stop="onSort"> - <div class="api4-input form-inline clearfix" ng-repeat="(index, clause) in data.clauses"> - <div class="api4-clause-badge" title="{{:: ts('Drag to reposition') }}"> - <span class="badge badge-info"> - <span ng-if="!index && !data.groupParent">{{ data.type }}</span> - <span ng-if="index || data.groupParent">{{ data.op }}</span> - <i class="crm-i fa-arrows" aria-hidden="true"></i> - </span> +<div class="api4-clause-group-sortable" ng-model="data.clauses" ui-sortable="$ctrl.sortOptions"> + <div class="api4-input form-inline clearfix" ng-repeat="(index, clause) in data.clauses" ng-class="{hiddenElement: index < (data.skip || 0)}"> + <div ng-if="index >= (data.skip || 0)"> + <div class="api4-clause-badge" title="{{:: ts('Drag to reposition') }}"> + <span class="badge badge-info"> + <span ng-if="index === (data.skip || 0) && !data.groupParent">{{ data.label }}</span> + <span ng-if="index > (data.skip || 0) || data.groupParent">{{ $ctrl.conjunctions[data.op] }}</span> + <i class="crm-i fa-arrows" aria-hidden="true"></i> + </span> + </div> + <div ng-if="!$ctrl.conjunctions[clause[0]]" class="api4-input-group"> + <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{data: data.fields, allowClear: true, placeholder: 'Field'}" /> + <select class="form-control api4-operator" ng-model="clause[1]" ng-options="o for o in $ctrl.operators" ></select> + <input class="form-control" ng-model="clause[2]" api4-exp-value="{field: clause[0], op: clause[1], format: data.format}" /> + </div> + <fieldset class="clearfix" ng-if="$ctrl.conjunctions[clause[0]]" crm-api4-clause="{format: data.format, clauses: clause[1], op: clause[0], fields: data.fields, groupParent: data.clauses, groupIndex: index}"> + </fieldset> </div> - <div ng-if="clause[0] !== 'AND' && clause[0] !== 'OR' && clause[0] !== 'NOT'" class="api4-input-group"> - <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{data: data.fields, allowClear: true, placeholder: 'Field'}" /> - <select class="form-control api4-operator" ng-model="clause[1]" ng-options="o for o in operators" ></select> - <input class="form-control" ng-model="clause[2]" api4-exp-value="{field: clause[0], op: clause[1]}" /> - </div> - <fieldset class="clearfix" ng-if="clause[0] === 'AND' || clause[0] === 'OR' || clause[0] === 'NOT'" crm-api4-clause="{type: data.type, clauses: clause[1], op: clause[0], fields: data.fields, groupParent: data.clauses, groupIndex: index}"> - </fieldset> </div> </div> <div class="api4-input form-inline"> <div class="api4-clause-badge"> <div class="btn-group btn-group-xs" title="{{ data.groupParent ? ts('Add a subgroup of clauses') : ts('Add a group of clauses') }}"> <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - {{ data.op }} <span class="caret"></span> + {{ $ctrl.conjunctions[data.op] }} <span class="caret"></span> </button> <ul class="dropdown-menu api4-add-where-group-menu"> - <li ng-repeat="con in conjunctions" ng-if="data.op !== con"> - <a href ng-click="addGroup(con)">{{ con }}</a> + <li ng-repeat="(con, label) in $ctrl.conjunctions" ng-show="data.op !== con"> + <a href ng-click="$ctrl.addGroup(con)">{{ label }}</a> </li> </ul> </div> </div> - <input class="collapsible-optgroups form-control" ng-model="newClause" title="Add a single clause" crm-ui-select="{data: data.fields, placeholder: 'Add clause'}" /> + <input class="collapsible-optgroups form-control" ng-model="$ctrl.newClause" ng-change="$ctrl.addClause()" title="Add a single clause" crm-ui-select="{data: data.fields, placeholder: 'Add clause'}" /> </div> diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index d1379c892949d92713735a79550bbcd8c981d24c..5b479786836048345bc1f9c79ca4312b978979a2 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -50,10 +50,10 @@ </label> <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="params[name] !== null"><i class="crm-i fa-times" aria-hidden="true"></i></a> </div> - <fieldset class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select && !isSelectRowCount()"> + <fieldset class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select"> <legend>select<span class="crm-marker" ng-if="::availableParams.select.required"> *</span></legend> <div ng-model="params.select" ui-sortable="{axis: 'y'}"> - <div class="api4-input form-inline" ng-repeat="item in params.select track by $index"> + <div class="api4-input form-inline" ng-repeat="item in params.select track by $index" ng-show="item !== 'row_count'"> <i class="crm-i fa-arrows" aria-hidden="true"></i> <input class="form-control huge" type="text" ng-model="params.select[$index]" /> <a href class="crm-hover-button" title="Clear" ng-click="clearParam('select', $index)"><i class="crm-i fa-times" aria-hidden="true"></i></a> @@ -63,16 +63,19 @@ <input class="collapsible-optgroups form-control huge" ng-model="controls.select" crm-ui-select="{data: fieldsAndJoinsAndFunctionsAndWildcards}" placeholder="Add select" /> </div> </fieldset> - <fieldset class="api4-input form-inline" ng-mouseenter="help('join', availableParams.join)" ng-mouseleave="help()" ng-if="::availableParams.join"> + <fieldset id="api4-join-fieldset" class="api4-input form-inline" ng-mouseenter="help('join', availableParams.join)" ng-mouseleave="help()" ng-if="::availableParams.join"> <legend>join<span class="crm-marker" ng-if="::availableParams.join.required"> *</span></legend> - <div ng-model="params.join" ui-sortable="{axis: 'y'}"> - <div class="api4-input form-inline" ng-repeat="item in params.join track by $index"> - <i class="crm-i fa-arrows"></i> - <input class="form-control twenty" type="text" ng-model="params.join[$index][0]" /> - <select class="form-control" ng-model="params.join[$index][1]" ng-options="o.k as o.v for o in ::joinTypes" ></select> - <input class="form-control twenty" type="text" ng-model="params.join[$index][2]" /> - <a href class="crm-hover-button" title="Clear" ng-click="clearParam('join', $index)"><i class="crm-i fa-times"></i></a> - </div> + <div ng-model="params.join" ui-sortable="{axis: 'y', containment: '#api4-join-fieldset'}"> + <fieldset ng-repeat="item in params.join track by $index"> + <div class="api4-input form-inline"> + <i class="crm-i fa-arrows"></i> + <input class="form-control twenty" type="text" ng-model="params.join[$index][0]" ng-model-options="{updateOn: 'blur'}" ng-change="$ctrl.buildFieldList()"/> + <select class="form-control" ng-model="params.join[$index][1]" ng-options="o.k as o.v for o in ::joinTypes" ></select> + <a href class="crm-hover-button" title="Clear" ng-click="clearParam('join', $index)"><i class="crm-i fa-times"></i></a> + </div> + <fieldset class="api4-clause-fieldset" crm-api4-clause="{skip: 2, clauses: params.join[$index], op: 'AND', label: 'On', fields: fieldsAndJoins, format: 'plain'}"> + </fieldset> + </fieldset> </div> <div class="api4-input form-inline"> <input class="collapsible-optgroups form-control huge" ng-model="controls.join" crm-ui-select="{data: entities}" placeholder="Add join" /> @@ -97,7 +100,7 @@ <textarea class="form-control" type="{{:: param.type[0] === 'int' && param.type.length === 1 ? 'number' : 'text' }}" id="api4-param-{{:: name }}" ng-model="params[name]"> </textarea> </div> - <fieldset ng-if="::availableParams.where" class="api4-clause-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()" crm-api4-clause="{type: 'where', clauses: params.where, required: availableParams.where.required, op: 'AND', label: 'where', fields: fieldsAndJoins}"> + <fieldset ng-if="::availableParams.where" class="api4-clause-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()" crm-api4-clause="{type: 'where', clauses: params.where, required: availableParams.where.required, op: 'AND', label: 'Where', fields: fieldsAndJoins}"> </fieldset> <fieldset ng-repeat="name in ['values', 'defaults']" ng-if="::availableParams[name]" ng-mouseenter="help(name, availableParams[name])" ng-mouseleave="help()"> <legend>{{:: name }}<span class="crm-marker" ng-if="::availableParams[name].required"> *</span></legend> @@ -122,7 +125,7 @@ <input class="collapsible-optgroups form-control huge" ng-model="controls.groupBy" crm-ui-select="{data: fieldsAndJoinsAndFunctions}" placeholder="Add groupBy" /> </div> </fieldset> - <fieldset ng-if="::availableParams.having" class="api4-clause-fieldset" ng-mouseenter="help('having', availableParams.having)" ng-mouseleave="help()" crm-api4-clause="{type: 'having', clauses: params.having, required: availableParams.having.required, op: 'AND', label: 'having', fields: havingOptions}"> + <fieldset ng-if="::availableParams.having" class="api4-clause-fieldset" ng-mouseenter="help('having', availableParams.having)" ng-mouseleave="help()" crm-api4-clause="{clauses: params.having, required: availableParams.having.required, op: 'AND', label: 'Having', fields: havingOptions}"> </fieldset> <fieldset ng-if="::availableParams.orderBy" ng-mouseenter="help('orderBy', availableParams.orderBy)" ng-mouseleave="help()"> <legend>orderBy<span class="crm-marker" ng-if="::availableParams.orderBy.required"> *</span></legend> diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 17de0a2958e63a98b4b0e6521012e2017acc6453..9e6b9644a8262a5b0fe8da60d3ed1096d0c80507 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -10,6 +10,8 @@ var actions = []; // Field options var fieldOptions = {}; + // Api params + var params; angular.module('api4Explorer').config(function($routeProvider) { @@ -21,7 +23,8 @@ }); angular.module('api4Explorer').controller('Api4Explorer', function($scope, $routeParams, $location, $timeout, $http, crmUiHelp, crmApi4, dialogService) { - var ts = $scope.ts = CRM.ts(); + var ts = $scope.ts = CRM.ts(), + ctrl = $scope.$ctrl = this; $scope.entities = entities; $scope.actions = actions; $scope.fields = []; @@ -31,7 +34,7 @@ $scope.fieldsAndJoinsAndFunctionsWithSuffixes = []; $scope.fieldsAndJoinsAndFunctionsAndWildcards = []; $scope.availableParams = {}; - $scope.params = {}; + params = $scope.params = {}; $scope.index = ''; $scope.selectedTab = {result: 'result', code: 'php'}; $scope.perm = { @@ -73,7 +76,7 @@ }; if (!entities.length) { - formatForSelect2(schema, entities, 'name', ['description']); + formatForSelect2(schema, entities, 'name', ['description', 'icon']); } $scope.$bindToRoute({ @@ -91,14 +94,15 @@ } function pluralize(str) { - switch (str[str.length-1]) { - case 's': - return str + 'es'; - case 'y': - return str.slice(0, -1) + 'ies'; - default: - return str + 's'; + var lastLetter = str[str.length - 1], + lastTwo = str[str.length - 2] + lastLetter; + if (lastLetter === 's' || lastTwo === 'ch') { + return str + 'es'; + } + if (lastLetter === 'y' && lastTwo !== 'ey') { + return str.slice(0, -1) + 'ies'; } + return str + 's'; } // Reformat an existing array of objects for compatibility with select2 @@ -114,21 +118,34 @@ return container; } - // Returns field list formatted for select2 - function getFieldList(action, addPseudoconstant) { - var fields = [], - fieldInfo = _.findWhere(getEntity().actions, {name: action}).fields; + // Replaces contents of fieldList array with current fields formatted for select2 + function getFieldList(fieldList, action, addPseudoconstant) { + var fieldInfo = _.cloneDeep(_.findWhere(getEntity().actions, {name: action}).fields); + fieldList.length = 0; if (addPseudoconstant) { - fieldInfo = _.cloneDeep(fieldInfo); addPseudoconstants(fieldInfo, addPseudoconstant); } - formatForSelect2(fieldInfo, fields, 'name', ['description', 'required', 'default_value']); - return fields; + formatForSelect2(fieldInfo, fieldList, 'name', ['description', 'required', 'default_value']); } // Note: this function expects fieldList to be select2-formatted already function addJoins(fieldList, addWildcard, addPseudoconstant) { - var fields = _.cloneDeep(fieldList); + // Add entities specified by the join param + _.each(getExplicitJoins(), function(joinEntity, joinAlias) { + var wildCard = addWildcard ? [{id: joinAlias + '.*', text: joinAlias + '.*', 'description': 'All core ' + joinEntity + ' fields'}] : [], + joinFields = _.cloneDeep(entityFields(joinEntity)); + if (joinFields) { + if (addPseudoconstant) { + addPseudoconstants(joinFields, addPseudoconstant); + } + fieldList.push({ + text: joinEntity + ' AS ' + joinAlias, + description: 'Explicit join to ' + joinEntity, + children: wildCard.concat(formatForSelect2(joinFields, [], 'name', ['description'], joinAlias + '.')) + }); + } + }); + // Add implicit joins based on schema links _.each(links[$scope.entity], function(link) { var linkFields = _.cloneDeep(entityFields(link.entity)), wildCard = addWildcard ? [{id: link.alias + '.*', text: link.alias + '.*', 'description': 'All core ' + link.entity + ' fields'}] : []; @@ -136,14 +153,13 @@ if (addPseudoconstant) { addPseudoconstants(linkFields, addPseudoconstant); } - fields.push({ + fieldList.push({ text: link.alias, description: 'Implicit join to ' + link.entity, children: wildCard.concat(formatForSelect2(linkFields, [], 'name', ['description'], link.alias + '.')) }); } }); - return fields; } // Note: this function transforms a raw list a-la getFields; not a select2-formatted list @@ -223,7 +239,8 @@ // Returns field list for write params (values, defaults) $scope.fieldList = function(param) { return function() { - var fields = _.cloneDeep(getFieldList($scope.action === 'getFields' ? ($scope.params.action || 'get') : $scope.action, ['name'])); + var fields = []; + getFieldList(fields, $scope.action === 'getFields' ? ($scope.params.action || 'get') : $scope.action, ['name']); // Disable fields that are already in use _.each($scope.params[param] || [], function(val) { var usedField = val[0].replace(':name', ''); @@ -270,14 +287,11 @@ }; $scope.selectRowCount = function() { - if ($scope.isSelectRowCount()) { - $scope.params.select = []; + var index = params.select.indexOf('row_count'); + if (index < 0) { + $scope.params.select.push('row_count'); } else { - $scope.params.select = ['row_count']; - $scope.index = ''; - if ($scope.params.limit == 25) { - $scope.params.limit = 0; - } + $scope.params.select.splice(index, 1); } }; @@ -291,7 +305,7 @@ }; function isSelectRowCount(params) { - return params && params.select && params.select.length === 1 && params.select[0] === 'row_count'; + return params && params.select && params.select.indexOf('row_count') >= 0; } function getEntity(entityName) { @@ -333,11 +347,12 @@ } function parseYaml(input) { - if (typeof input === 'undefined') { - return undefined; + if (typeof input === 'undefined' || input === '') { + return input; } - if (input === '') { - return ''; + // Return literal quoted string without removing quotes - for the sake of JOIN ON clauses + if (_.isString(input) && input[0] === input[input.length - 1] && _.includes(["'", '"'], input[0])) { + return input; } if (_.isObject(input) || _.isArray(input)) { _.each(input, function(item, index) { @@ -354,45 +369,46 @@ } } + this.buildFieldList = function() { + var actionInfo = _.findWhere(actions, {id: $scope.action}); + getFieldList($scope.fields, $scope.action); + getFieldList($scope.fieldsAndJoins, $scope.action, ['name']); + getFieldList($scope.fieldsAndJoinsAndFunctions, $scope.action); + getFieldList($scope.fieldsAndJoinsAndFunctionsWithSuffixes, $scope.action, ['name', 'label']); + getFieldList($scope.fieldsAndJoinsAndFunctionsAndWildcards, $scope.action, ['name', 'label']); + if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) { + addJoins($scope.fieldsAndJoins); + // SQL functions are supported if HAVING is + if (actionInfo.params.having) { + var functions = { + text: ts('FUNCTION'), + description: ts('Calculate result of a SQL function'), + children: _.transform(CRM.vars.api4.functions, function(result, fn) { + result.push({ + id: fn.name + '() AS ' + fn.name.toLowerCase(), + text: fn.name + '()', + description: fn.name + '(' + describeSqlFn(fn.params) + ')' + }); + }) + }; + $scope.fieldsAndJoinsAndFunctions.push(functions); + $scope.fieldsAndJoinsAndFunctionsWithSuffixes.push(functions); + $scope.fieldsAndJoinsAndFunctionsAndWildcards.push(functions); + } + addJoins($scope.fieldsAndJoinsAndFunctions, true); + addJoins($scope.fieldsAndJoinsAndFunctionsWithSuffixes, false, ['name', 'label']); + addJoins($scope.fieldsAndJoinsAndFunctionsAndWildcards, true, ['name', 'label']); + } + $scope.fieldsAndJoinsAndFunctionsAndWildcards.unshift({id: '*', text: '*', 'description': 'All core ' + $scope.entity + ' fields'}); + }; + function selectAction() { $scope.action = $routeParams.api4action; - $scope.fieldsAndJoins.length = 0; - $scope.fieldsAndJoinsAndFunctions.length = 0; - $scope.fieldsAndJoinsAndFunctionsWithSuffixes.length = 0; - $scope.fieldsAndJoinsAndFunctionsAndWildcards.length = 0; if (!actions.length) { formatForSelect2(getEntity().actions, actions, 'name', ['description', 'params']); } if ($scope.action) { var actionInfo = _.findWhere(actions, {id: $scope.action}); - $scope.fields = getFieldList($scope.action); - if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) { - $scope.fieldsAndJoins = addJoins(getFieldList($scope.action, ['name'])); - var functions = []; - // SQL functions are supported if HAVING is - if (actionInfo.params.having) { - functions.push({ - text: ts('FUNCTION'), - description: ts('Calculate result of a SQL function'), - children: _.transform(CRM.vars.api4.functions, function(result, fn) { - result.push({ - id: fn.name + '() AS ' + fn.name.toLowerCase(), - text: fn.name + '()', - description: fn.name + '(' + describeSqlFn(fn.params) + ')' - }); - }) - }); - } - $scope.fieldsAndJoinsAndFunctions = addJoins($scope.fields.concat(functions), true); - $scope.fieldsAndJoinsAndFunctionsWithSuffixes = addJoins(getFieldList($scope.action, ['name', 'label']).concat(functions), false, ['name', 'label']); - $scope.fieldsAndJoinsAndFunctionsAndWildcards = addJoins(getFieldList($scope.action, ['name', 'label']).concat(functions), true, ['name', 'label']); - } else { - $scope.fieldsAndJoins = getFieldList($scope.action, ['name']); - $scope.fieldsAndJoinsAndFunctions = $scope.fields; - $scope.fieldsAndJoinsAndFunctionsWithSuffixes = getFieldList($scope.action, ['name', 'label']); - $scope.fieldsAndJoinsAndFunctionsAndWildcards = getFieldList($scope.action, ['name', 'label']); - } - $scope.fieldsAndJoinsAndFunctionsAndWildcards.unshift({id: '*', text: '*', 'description': 'All core ' + $scope.entity + ' fields'}); _.each(actionInfo.params, function (param, name) { var format, defaultVal = _.cloneDeep(param.default); @@ -465,7 +481,8 @@ $timeout(function() { if (field) { if (name === 'join') { - $scope.params[name].push([field + ' AS ' + _.snakeCase(field), false, '[]']); + $scope.params[name].push([field + ' AS ' + _.snakeCase(field), false]); + ctrl.buildFieldList(); } else if (typeof objectParams[name] === 'undefined') { $scope.params[name].push(field); @@ -484,6 +501,7 @@ }); } }); + ctrl.buildFieldList(); $scope.availableParams = actionInfo.params; } writeCode(); @@ -545,10 +563,6 @@ paramCount = _.size(params), i = 0; - if (isSelectRowCount(params)) { - results = result + 'Count'; - } - switch ($scope.selectedTab.code) { case 'js': case 'ang': @@ -585,9 +599,7 @@ // Write oop code code.oop = '$' + results + " = " + formatOOP(entity, action, params, 2) + "\n ->execute()"; - if (isSelectRowCount(params)) { - code.oop += "\n ->count()"; - } else if (_.isNumber(index)) { + if (_.isNumber(index)) { code.oop += !index ? '\n ->first()' : (index === -1 ? '\n ->last()' : '\n ->itemAt(' + index + ')'); } else if (index) { if (_.isString(index) || (_.isPlainObject(index) && !index[0] && !index['0'])) { @@ -598,7 +610,7 @@ } } code.oop += ";\n"; - if (!_.isNumber(index) && !isSelectRowCount(params)) { + if (!_.isNumber(index)) { code.oop += "foreach ($" + results + ' as $' + ((_.isString(index) && index) ? index + ' => $' : '') + result + ') {\n // do something\n}'; } break; @@ -640,9 +652,15 @@ } }); } else if (key === 'select') { - code += newLine; - // addSelect() is a variadic function & can take multiple arguments; selectRowCount() is a shortcut for addSelect('row_count') - code += isSelectRowCount(params) ? '->selectRowCount()' : '->addSelect(' + phpFormat(param).slice(1, -1) + ')'; + // selectRowCount() is a shortcut for addSelect('row_count') + if (isSelectRowCount(params)) { + code += newLine + '->selectRowCount()'; + param = _.without(param, 'row_count'); + } + // addSelect() is a variadic function & can take multiple arguments + if (param.length) { + code += newLine + '->addSelect(' + phpFormat(param).slice(1, -1) + ')'; + } } else if (key === 'chain') { _.each(param, function(chain, name) { code += newLine + "->addChain('" + name + "', " + formatOOP(chain[0], chain[1], chain[2], 2 + indent); @@ -690,12 +708,18 @@ $scope.loading = false; $scope.status = resp.data && resp.data.debug && resp.data.debug.log ? 'warning' : 'success'; $scope.debug = debugFormat(resp.data); - $scope.result = [formatMeta(resp.data), prettyPrintOne(_.escape(JSON.stringify(resp.data.values, null, 2)), 'js', 1)]; + $scope.result = [ + formatMeta(resp.data), + prettyPrintOne('(' + resp.data.values.length + ') ' + _.escape(JSON.stringify(resp.data.values, null, 2)), 'js', 1) + ]; }, function(resp) { $scope.loading = false; $scope.status = 'danger'; $scope.debug = debugFormat(resp.data); - $scope.result = [formatMeta(resp), prettyPrintOne(_.escape(JSON.stringify(resp.data, null, 2)))]; + $scope.result = [ + formatMeta(resp), + prettyPrintOne(_.escape(JSON.stringify(resp.data, null, 2))) + ]; }); }; @@ -905,59 +929,70 @@ }; }); - angular.module('api4Explorer').directive('crmApi4Clause', function($timeout) { + angular.module('api4Explorer').directive('crmApi4Clause', function() { return { scope: { - data: '=crmApi4Clause' + data: '<crmApi4Clause' }, templateUrl: '~/api4Explorer/Clause.html', - link: function (scope, element, attrs) { - var ts = scope.ts = CRM.ts(); - scope.newClause = ''; - scope.conjunctions = ['AND', 'OR', 'NOT']; - scope.operators = CRM.vars.api4.operators; + controller: function ($scope, $element, $timeout) { + var ts = $scope.ts = CRM.ts(), + ctrl = $scope.$ctrl = this; + this.conjunctions = {AND: ts('And'), OR: ts('Or'), NOT: ts('Not')}; + this.operators = CRM.vars.api4.operators; + this.sortOptions = { + axis: 'y', + connectWith: '.api4-clause-group-sortable', + containment: $element.closest('.api4-clause-fieldset'), + over: onSortOver, + start: onSort, + stop: onSort + }; - scope.addGroup = function(op) { - scope.data.clauses.push([op, []]); + this.addGroup = function(op) { + $scope.data.clauses.push([op, []]); }; - scope.removeGroup = function() { - scope.data.groupParent.splice(scope.data.groupIndex, 1); + this.removeGroup = function() { + $scope.data.groupParent.splice($scope.data.groupIndex, 1); }; - scope.onSort = function(event, ui) { - $(element).closest('.api4-clause-fieldset').toggleClass('api4-sorting', event.type === 'sortstart'); + function onSort(event, ui) { + $($element).closest('.api4-clause-fieldset').toggleClass('api4-sorting', event.type === 'sortstart'); $('.api4-input.form-inline').css('margin-left', ''); - }; + } // Indent clause while dragging between nested groups - scope.onSortOver = function(event, ui) { + function onSortOver(event, ui) { var offset = 0; if (ui.sender) { offset = $(ui.placeholder).offset().left - $(ui.sender).offset().left; } $('.api4-input.form-inline.ui-sortable-helper').css('margin-left', '' + offset + 'px'); - }; + } - scope.$watch('newClause', function(value) { - var field = value; + this.addClause = function() { $timeout(function() { - if (field) { - scope.data.clauses.push([field, '=', '']); - scope.newClause = null; + if (ctrl.newClause) { + $scope.data.clauses.push([ctrl.newClause, '=', '']); + ctrl.newClause = null; } }); - }); - scope.$watch('data.clauses', function(values) { - // Remove empty values - _.each(values, function(clause, index) { - if (typeof clause !== 'undefined' && !clause[0]) { - values.splice(index, 1); - } - if (typeof clause[1] === 'string' && _.contains(clause[1], 'NULL')) { - clause.length = 2; - } else if (typeof clause[1] === 'string' && clause.length == 2) { - clause.push(''); + }; + $scope.$watch('data.clauses', function(values) { + // Iterate in reverse order so index doesn't get out-of-sync during splice + _.forEachRight(values, function(clause, index) { + // Remove empty values + if (index >= ($scope.data.skip || 0)) { + if (typeof clause !== 'undefined' && !clause[0]) { + values.splice(index, 1); + } + // Add/remove value if operator allows for one + else if (typeof clause[1] === 'string' && _.contains(clause[1], 'NULL')) { + clause.length = 2; + } else if (typeof clause[1] === 'string' && clause.length === 2) { + clause.push(''); + } } }); }, true); @@ -1073,7 +1108,7 @@ scope.$watchCollection('data', function(data) { destroyWidget(); var field = getField(data.field, entity, action); - if (field) { + if (field && data.format !== 'plain') { makeWidget(field, data.op); } }); @@ -1175,6 +1210,15 @@ return _.result(entity, 'fields'); } + function getExplicitJoins() { + return _.transform(params.join, function(joins, join) { + var j = join[0].split(' AS '), + joinEntity = _.trim(j[0]), + joinAlias = _.trim(j[1]) || joinEntity.toLowerCase(); + joins[joinAlias] = joinEntity; + }, {}); + } + function getField(fieldName, entity, action) { var suffix = fieldName.split(':')[1]; fieldName = fieldName.split(':')[0]; @@ -1194,7 +1238,7 @@ return comboName; } var linkName = fieldNames.shift(), - newEntity = _.findWhere(links[entity], {alias: linkName}).entity; + newEntity = getExplicitJoins()[linkName] || _.findWhere(links[entity], {alias: linkName}).entity; return get(newEntity, fieldNames); } } diff --git a/civicrm/ang/crmUi.js b/civicrm/ang/crmUi.js index 7482999091b9081a4681a8403c107f59ee9f3056..c6ba58b1464ef6d156cf5e3875a573b955a9f289 100644 --- a/civicrm/ang/crmUi.js +++ b/civicrm/ang/crmUi.js @@ -484,7 +484,6 @@ // $scope.myOrder.setDir('field2', ''); // HTML: <tr ng-repeat="... | order:myOrder.get()">...</tr> .service('CrmUiOrderCtrl', function(){ - // function CrmUiOrderCtrl(defaults){ this.values = defaults; } diff --git a/civicrm/ang/crmUtil.js b/civicrm/ang/crmUtil.js index ab460ab7e9c51a5f0e779449c1a8314cd77c17c3..bbdbe4652db4a0b882cc5f740d8f3f037a2bc2c0 100644 --- a/civicrm/ang/crmUtil.js +++ b/civicrm/ang/crmUtil.js @@ -3,7 +3,7 @@ angular.module('crmUtil', CRM.angRequires('crmUtil')); // Angular implementation of CRM.api3 - // @link http://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface#AJAXInterface-CRM.api3 + // @link https://docs.civicrm.org/dev/en/latest/api/interfaces/#angularjs // // Note: To mock API results in unit-tests, override crmApi.backend, e.g. // var apiSpy = jasmine.createSpy('crmApi'); diff --git a/civicrm/api/v3/Membership.php b/civicrm/api/v3/Membership.php index 8e935373d1a13a9dd319f6b9d37c41709a065404..6232fd202853b464d4a21a4d2dbd308c60ed6db7 100644 --- a/civicrm/api/v3/Membership.php +++ b/civicrm/api/v3/Membership.php @@ -135,7 +135,7 @@ function civicrm_api3_membership_create($params) { // @todo stop passing $ids (membership and userId may be set above) $membershipBAO = CRM_Member_BAO_Membership::create($params, $ids); - if (array_key_exists('is_error', $membershipBAO)) { + if (property_exists($membershipBAO, 'is_error')) { // In case of no valid status for given dates, $membershipBAO // is going to contain 'is_error' => "Error Message" return civicrm_api3_create_error(ts('The membership can not be saved, no valid membership status for given dates')); diff --git a/civicrm/api/v3/examples/Event/ContactRefCustomField.ex.php b/civicrm/api/v3/examples/Event/ContactRefCustomField.ex.php index a492401dee38642239b976d8b1cdfa9b826f9c05..5fe5f62f35e82c6d54715a2f817650a893ac0bb6 100644 --- a/civicrm/api/v3/examples/Event/ContactRefCustomField.ex.php +++ b/civicrm/api/v3/examples/Event/ContactRefCustomField.ex.php @@ -52,7 +52,6 @@ function event_get_expectedresult() { 'event_title' => 'My test event.', 'event_description' => '', 'event_type_id' => '1', - 'participant_listing_id' => 0, 'is_public' => '1', 'start_date' => '2013-07-29 00:00:00', 'event_start_date' => '2013-07-29 00:00:00', diff --git a/civicrm/api/v3/examples/Event/Create.ex.php b/civicrm/api/v3/examples/Event/Create.ex.php index ccca91dccef53c84048c99666b5d608616c180ee..7f79b3a2576ee1dc3df9ba0030f8b70eb7d4c55e 100644 --- a/civicrm/api/v3/examples/Event/Create.ex.php +++ b/civicrm/api/v3/examples/Event/Create.ex.php @@ -63,7 +63,6 @@ function event_create_expectedresult() { 'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now', 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => '1', - 'participant_listing_id' => '', 'is_public' => '1', 'start_date' => '2013-07-29 00:00:00', 'end_date' => '2013-08-04 00:00:00', diff --git a/civicrm/api/v3/examples/Event/Get.ex.php b/civicrm/api/v3/examples/Event/Get.ex.php index 5eb8a9e8713ce0daea6e07367ef4589c82d94043..aee29dd29b7f4bfa67a9f851435513bc7cedbef3 100644 --- a/civicrm/api/v3/examples/Event/Get.ex.php +++ b/civicrm/api/v3/examples/Event/Get.ex.php @@ -50,7 +50,6 @@ function event_get_expectedresult() { 'event_title' => 'Annual CiviCRM meet', 'event_description' => '', 'event_type_id' => '1', - 'participant_listing_id' => 0, 'is_public' => '1', 'start_date' => '2013-07-29 00:00:00', 'event_start_date' => '2013-07-29 00:00:00', diff --git a/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php b/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php index a0ce41304798117f859a8a6b4458c899a65ace1c..8a40f7a6f284152c7dc19125747f442ae28ab8fe 100644 --- a/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php +++ b/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php @@ -53,7 +53,6 @@ function event_get_expectedresult() { 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => '1', - 'participant_listing_id' => 0, 'is_public' => '1', 'start_date' => '2013-07-29 00:00:00', 'event_start_date' => '2013-07-29 00:00:00', diff --git a/civicrm/api/v3/examples/Event/IsFullOption.ex.php b/civicrm/api/v3/examples/Event/IsFullOption.ex.php index 6954a283eb9042cfd42759e8e4126a4d0c65837d..07e6b42994a00067ccebefe8c2f21930eedc154d 100644 --- a/civicrm/api/v3/examples/Event/IsFullOption.ex.php +++ b/civicrm/api/v3/examples/Event/IsFullOption.ex.php @@ -46,7 +46,6 @@ function event_getsingle_expectedresult() { 'event_title' => 'Annual CiviCRM meet', 'event_description' => '', 'event_type_id' => '1', - 'participant_listing_id' => 0, 'is_public' => '1', 'start_date' => '2008-10-21 00:00:00', 'event_start_date' => '2008-10-21 00:00:00', diff --git a/civicrm/api/v3/examples/Participant/NestedEventGet.ex.php b/civicrm/api/v3/examples/Participant/NestedEventGet.ex.php index 526905947aa7064f27f4fe8aceb47e514712d0ab..58a12c7fb83bfd9156ee2e8a7345c15931746919 100644 --- a/civicrm/api/v3/examples/Participant/NestedEventGet.ex.php +++ b/civicrm/api/v3/examples/Participant/NestedEventGet.ex.php @@ -89,7 +89,6 @@ function participant_get_expectedresult() { 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => '1', - 'participant_listing_id' => 0, 'is_public' => '1', 'start_date' => '2013-07-29 00:00:00', 'event_start_date' => '2013-07-29 00:00:00', diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index f7706ba5005440a42bd81b1df1b96b0be07e7631..50268a400c1dba09291521f5b25adef03a2aa0ea 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -990,7 +990,7 @@ function _civicrm_api3_dao_to_array($dao, $params = NULL, $uniqueFields = TRUE, while ($dao->fetch()) { $tmp = []; foreach ($fields as $key) { - if (array_key_exists($key, $dao)) { + if (property_exists($dao, $key)) { // not sure on that one if ($dao->$key !== NULL) { $tmp[$key] = $dao->$key; @@ -1047,8 +1047,8 @@ function _civicrm_api3_object_to_array(&$dao, &$values, $uniqueFields = FALSE) { $fields = _civicrm_api3_build_fields_array($dao, $uniqueFields); foreach ($fields as $key => $value) { - if (array_key_exists($key, $dao)) { - $values[$key] = $dao->$key; + if (property_exists($dao, $key)) { + $values[$key] = $dao->$key ?? NULL; } } } diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 675c06727fdb48297046c50357ee48bf303d4f04..d9b0934df78d2053483ca866d2574a5e977dd27e 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.27.4', + return array( 'version' => '5.28.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index f7226e719a3e087bc27ea0e2872b7ae281e78c98..92f796929664948572e3cada0e8a4f3c66564840 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -32,7 +32,7 @@ "Civi\\": ["tests/phpunit/"] }, "psr-4": { - "Civi\\": [".", "setup/src/"] + "Civi\\": [".", "Civi/", "setup/src/"] } }, "include-path": ["vendor/tecnickcom"], @@ -54,7 +54,7 @@ "symfony/process": "~3.0 || ~4.4", "psr/log": "~1.0", "symfony/finder": "~3.0 || ~4.4", - "tecnickcom/tcpdf" : "6.2.*", + "tecnickcom/tcpdf" : "6.3.*", "totten/ca-config": "~17.05", "zetacomponents/base": "1.9.*", "zetacomponents/mail": "1.9.*", @@ -75,7 +75,9 @@ "league/csv": "^9.2", "tplaner/when": "~3.0.0", "xkerman/restricted-unserialize": "~1.1", - "typo3/phar-stream-wrapper": "^2 || ^3.0" + "typo3/phar-stream-wrapper": "^2 || ^3.0", + "brick/money": "~0.4", + "ext-intl": "*" }, "scripts": { "post-install-cmd": [ @@ -237,11 +239,17 @@ } }, "patches": { + "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" + }, "cache/integration-tests": { "Allow adding tests": "https://github.com/php-cache/integration-tests/commit/05f97174c09364dc10c084a38ba0cfd5124f4cec.patch", "Support PHPUnit 6+": "https://github.com/php-cache/integration-tests/commit/1ec7362962185df91d3d749bc3fa7e7b99cb9fc7.patch", "Add tests for binary data round trip": "https://github.com/php-cache/integration-tests/commit/89cd7068e83aa776774bfc44f6bcba858c085616.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" + }, "pear/mail": { "Apply CiviCRM Customisations for CRM-1367 and CRM-5946": "https://raw.githubusercontent.com/civicrm/civicrm-core/36319938a5bf26c1e7e2110a26a65db6a5979268/tools/scripts/composer/patches/pear-mail.patch" }, diff --git a/civicrm/composer.lock b/civicrm/composer.lock index d2b5f94261dd7e5ffae6954fa036f55461233769..e933416e7b8404e939e21a7d89dfb50224863d86 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": "f547e4d1ac65fa8044d302f46a7e7267", + "content-hash": "76eb92be0bda933e6913e5cffd3ad672", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -24,6 +24,11 @@ "dflydev/apache-mime-types": "^1.0" }, "type": "library", + "extra": { + "patches_applied": { + "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" + } + }, "autoload": { "psr-4": { "MimeTyper\\": "src/" @@ -42,6 +47,98 @@ "description": "PHP mime type and extension mapping library: compatible with Symfony, powered by jshttp/mime-db", "time": "2018-09-27T09:45:05+00:00" }, + { + "name": "brick/math", + "version": "0.8.15", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1|^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "time": "2020-04-15T15:59:35+00:00" + }, + { + "name": "brick/money", + "version": "0.4.5", + "source": { + "type": "git", + "url": "https://github.com/brick/money.git", + "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/money/zipball/91f2b5bc35646f172b038e46bb496ad18db59c3c", + "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c", + "shasum": "" + }, + "require": { + "brick/math": "~0.7.3 || ~0.8.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "brick/varexporter": "~0.2.1", + "ext-dom": "*", + "ext-pdo": "*", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15" + }, + "suggest": { + "ext-intl": "Required to format Money objects" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Money and currency library", + "keywords": [ + "brick", + "currency", + "money" + ], + "time": "2020-05-31T14:17:02+00:00" + }, { "name": "cache/integration-tests", "version": "0.16.0", @@ -165,21 +262,21 @@ }, { "name": "civicrm/civicrm-cxn-rpc", - "version": "v0.19.01.08", + "version": "v0.19.01.09", "source": { "type": "git", "url": "https://github.com/civicrm/civicrm-cxn-rpc.git", - "reference": "5a142bc4d24b7f8c830f59768b405ec74d582f22" + "reference": "3ea668bc651adb4d61e96276f55e76ae22baea7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/5a142bc4d24b7f8c830f59768b405ec74d582f22", - "reference": "5a142bc4d24b7f8c830f59768b405ec74d582f22", + "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/3ea668bc651adb4d61e96276f55e76ae22baea7a", + "reference": "3ea668bc651adb4d61e96276f55e76ae22baea7a", "shasum": "" }, "require": { "phpseclib/phpseclib": "1.0.*", - "psr/log": "~1.1" + "psr/log": "~1.0" }, "type": "library", "autoload": { @@ -198,7 +295,7 @@ } ], "description": "RPC library for CiviConnect", - "time": "2019-01-08T19:20:09+00:00" + "time": "2020-02-05T03:24:26+00:00" }, { "name": "civicrm/composer-downloads-plugin", @@ -431,6 +528,11 @@ "shasum": "" }, "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" + } + }, "autoload": { "classmap": [ "phpQuery/" @@ -458,27 +560,29 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.0", + "version": "6.5.4", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "1.17.0" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", - "psr/log": "^1.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" @@ -486,16 +590,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "6.5-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -519,7 +623,7 @@ "rest", "web service" ], - "time": "2017-06-22T18:50:49+00:00" + "time": "2020-05-25T19:35:05+00:00" }, { "name": "guzzlehttp/promises", @@ -574,32 +678,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -629,13 +738,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "league/csv", @@ -1760,16 +1870,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -1803,7 +1913,7 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "psr/simple-cache", @@ -1853,6 +1963,46 @@ ], "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, { "name": "sabberworm/php-css-parser", "version": "8.3.0", @@ -2144,6 +2294,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", + "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": "2020-04-12T16:54:01+00:00" }, { @@ -2251,6 +2415,20 @@ "polyfill", "portable" ], + "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": "2020-05-12T16:14:59+00:00" }, { @@ -2312,6 +2490,196 @@ ], "time": "2020-05-12T16:47:27+00:00" }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "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": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, { "name": "symfony/process", "version": "v3.4.40", @@ -2363,16 +2731,16 @@ }, { "name": "tecnickcom/tcpdf", - "version": "6.2.26", + "version": "6.3.5", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "367241059ca166e3a76490f4448c284e0a161f15" + "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/367241059ca166e3a76490f4448c284e0a161f15", - "reference": "367241059ca166e3a76490f4448c284e0a161f15", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/19a535eaa7fb1c1cac499109deeb1a7a201b4549", + "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549", "shasum": "" }, "require": { @@ -2401,7 +2769,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-only" ], "authors": [ { @@ -2421,7 +2789,7 @@ "pdf417", "qrcode" ], - "time": "2018-10-16T17:24:05+00:00" + "time": "2020-02-14T14:20:12+00:00" }, { "name": "togos/gitignore", @@ -2743,22 +3111,23 @@ }, { "name": "zetacomponents/mail", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/zetacomponents/Mail.git", - "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d" + "reference": "c55267564d78724d4c25188fc653fef0da4c920a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", - "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/c55267564d78724d4c25188fc653fef0da4c920a", + "reference": "c55267564d78724d4c25188fc653fef0da4c920a", "shasum": "" }, "require": { "zetacomponents/base": "~1.8" }, "require-dev": { + "phpunit/phpunit": "~7.5", "zetacomponents/unit-test": "*" }, "type": "library", @@ -2819,7 +3188,7 @@ ], "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", "homepage": "https://github.com/zetacomponents", - "time": "2020-01-17T11:18:01+00:00" + "time": "2020-06-13T12:38:26+00:00" } ], "packages-dev": [], @@ -2831,7 +3200,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.1" + "php": "~7.1", + "ext-intl": "*" }, "platform-dev": [], "platform-overrides": { diff --git a/civicrm/css/crm-menubar.css b/civicrm/css/crm-menubar.css index 63f421f12183f6c77ec19bf111e40b20f0fb8d83..f4428a4fad77212e6bda5c4c834328a1173f6afc 100644 --- a/civicrm/css/crm-menubar.css +++ b/civicrm/css/crm-menubar.css @@ -31,10 +31,8 @@ #civicrm-menu li li a { padding: 6px 36px 6px 10px; } -#civicrm-menu li.crm-menu-border-bottom:not(:last-child) { - border-bottom: 1px solid #bbb; -} -#civicrm-menu li:not(.crm-menu-border-bottom) + li.crm-menu-border-top { +#civicrm-menu li.crm-menu-border-bottom + li, +#civicrm-menu li + li.crm-menu-border-top { border-top: 1px solid #bbb; } #civicrm-menu li a:focus, diff --git a/civicrm/ext/flexmailer/CHANGELOG.md b/civicrm/ext/flexmailer/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..5e4c808f4a238722735c95cdda8277d8a6ae525c --- /dev/null +++ b/civicrm/ext/flexmailer/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +## v0.2-alpha1 + +* Override core's `Mailing.preview` API to support rendering via + Flexmailer events. +* (BC Break) In the class `DefaultComposer`, change the signature for + `createMessageTemplates()` and `applyClickTracking()` to provide full + access to the event context (`$e`). diff --git a/civicrm/ext/flexmailer/LICENSE.txt b/civicrm/ext/flexmailer/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a7f20c7bacb236d5f6ed38d1d146bd15bfe9318 --- /dev/null +++ b/civicrm/ext/flexmailer/LICENSE.txt @@ -0,0 +1,667 @@ +Package: org.civicrm.flexmailer +Copyright (C) 2016, Tim Otten <totten@civicrm.org> +Licensed under the GNU Affero Public License 3.0 (below). + +------------------------------------------------------------------------------- + + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +<http://www.gnu.org/licenses/>. diff --git a/civicrm/ext/flexmailer/README.md b/civicrm/ext/flexmailer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5f66e5b7970bc04185e6405dddb1d401356c08c8 --- /dev/null +++ b/civicrm/ext/flexmailer/README.md @@ -0,0 +1,12 @@ +# org.civicrm.flexmailer + +FlexMailer (`org.civicrm.flexmailer`) is an email delivery engine for CiviCRM v4.7+. It replaces the internal guts of CiviMail. It is a +drop-in replacement which enables *other* extensions to provide richer email features. + +* [Introduction](docs/index.md) +* [Installation](docs/install.md) +* [Development](docs/develop/index.md) + * [CheckSendableEvent](docs/develop/CheckSendableEvent.md) + * [WalkBatchesEvent](docs/develop/WalkBatchesEvent.md) + * [ComposeBatchEvent](docs/develop/ComposeBatchEvent.md) + * [SendBatchEvent](docs/develop/SendBatchEvent.md) diff --git a/civicrm/ext/flexmailer/docs/develop/CheckSendableEvent.md b/civicrm/ext/flexmailer/docs/develop/CheckSendableEvent.md new file mode 100644 index 0000000000000000000000000000000000000000..a36d83f58cb9568eb1d244c08ab374c602f1177d --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/CheckSendableEvent.md @@ -0,0 +1,29 @@ + +The `CheckSendableEvent` (`EVENT_CHECK_SENDABLE`) determines whether a draft mailing is fully specified for delivery. + +For example, some jurisdictions require that email blasts provide contact +information for the organization (eg street address) and an opt-out link. +Traditionally, the check-sendable event will verify that this information is +provided through a CiviMail token (eg `{action.unsubscribeUrl}`). + +But what happens if you implement a new template language (e.g. Mustache) with +a different mail-merge notation? The validation will need to be different. +In this example, we verify the presence of a Mustache-style token, `{{unsubscribeUrl}}`. + +```php +<?php +function mustache_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $container->findDefinition('dispatcher')->addMethodCall('addListener', + array(\Civi\FlexMailer\Validator::EVENT_CHECK_SENDABLE, '_mustache_check_sendable') + ); +} + +function _mustache_check_sendable(\Civi\FlexMailer\Event\CheckSendableEvent $e) { + if ($e->getMailing()->template_type !== 'mustache') return; + + if (strpos('{{unsubscribeUrl}}', $e->getMailing()->body_html) === FALSE) { + $e->setError('body_html:unsubscribeUrl', E::ts('Please include the token {{unsubscribeUrl}}')); + } +} +``` diff --git a/civicrm/ext/flexmailer/docs/develop/ComposeBatchEvent.md b/civicrm/ext/flexmailer/docs/develop/ComposeBatchEvent.md new file mode 100644 index 0000000000000000000000000000000000000000..80bd17cc580a50c7e6b5063634dfedbfa2f772ad --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/ComposeBatchEvent.md @@ -0,0 +1,62 @@ +The `ComposeBatchEvent` builds the email messages. Each message is represented as a `FlexMailerTask` with a list of `MailParams`. + +Some listeners are "under the hood" -- they define less visible parts of the message, e.g. + + * `BasicHeaders` defines `Message-Id`, `Precedence`, `From`, `Reply-To`, and others. + * `BounceTracker` defines various headers for bounce-tracking. + * `OpenTracker` appends an HTML tracking code to any HTML messages. + +The heavy-lifting of composing the message content is also handled by a listener, such as +`DefaultComposer`. `DefaultComposer` replicates traditional CiviMail functionality: + + * Reads email content from `$mailing->body_text` and `$mailing->body_html`. + * Interprets tokens like `{contact.display_name}` and `{mailing.viewUrl}`. + * Loads data in batches. + * Post-processes the message with Smarty (if `CIVICRM_SMARTY` is enabled). + +The traditional CiviMail semantics have some problems -- e.g. the Smarty post-processing is incompatible with Smarty's +template cache, and it is difficult to securely post-process the message with Smarty. However, changing the behavior +would break existing templates. + +A major goal of FlexMailer is to facilitate a migration toward different template semantics. For example, an +extension might (naively) implement support for Mustache templates using: + +```php +<?php +function mustache_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $container->findDefinition('dispatcher')->addMethodCall('addListener', + array(\Civi\FlexMailer\FlexMailer::EVENT_COMPOSE, '_mustache_compose_batch') + ); +} + +function _mustache_compose_batch(\Civi\FlexMailer\Event\ComposeBatchEvent $event) { + if ($event->getMailing()->template_type !== 'mustache') return; + + $m = new Mustache_Engine(); + foreach ($event->getTasks() as $task) { + if ($task->hasContent()) continue; + $contact = civicrm_api3('Contact', 'getsingle', array( + 'id' => $task->getContactId(), + )); + $task->setMailParam('text', $m->render($event->getMailing()->body_text, $contact)); + $task->setMailParam('html', $m->render($event->getMailing()->body_html, $contact)); + } +} +``` + +This implementation is naive in a few ways -- it performs separate SQL queries for each recipient; it doesn't optimize +the template compilation; it has a very limited range of tokens; and it doesn't handle click-through tracking. For +more ideas about these issues, review `DefaultComposer`. + +> FIXME: Core's `TokenProcessor` is useful for batch-loading token data. +> However, you currently have to use `addMessage()` and `render()` to kick it +> off -- but those are based on CiviMail template notation. We should provide +> another function that doesn't depend on the template notation -- so that +> other templates can leverage our token library. + +> **Tip**: When you register a listener for `EVENT_COMPOSE`, note the weight. +> The default weight puts your listener in the middle of pipeline -- right +> before the `DefaultComposer`. However, you might want to position +> relative to other places -- e.g. `WEIGHT_PREPARE`, `WEIGHT_MAIN`, +> `WEIGHT_ALTER`, or `WEIGHT_END`. diff --git a/civicrm/ext/flexmailer/docs/develop/RunEvent.md b/civicrm/ext/flexmailer/docs/develop/RunEvent.md new file mode 100644 index 0000000000000000000000000000000000000000..a4fa5d25e0fe4cd9b44759589e2e408c3710b2af --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/RunEvent.md @@ -0,0 +1,36 @@ +The `RunEvent` (`EVENT_RUN`) fires as soon as FlexMailer begins processing a job. + +CiviMail has a recurring task -- `Job.process_mailings` -- which identifies scheduled/pending mailings. It determines +the `Mailing` and `MailingJob` records, then passes control to `FlexMailer` to perform delivery. `FlexMailer` +immediately fires the `RunEvent`. + +!!! note "`RunEvent` fires for each cron-run." + + By default, FlexMailer uses `DefaultBatcher` which obeys the traditional CiviMail throttling behavior. This can + limit the number of deliveries performed within a single cron-run. If you reach this limit, then it stops + execution. However, after 5 or 10 minutes, a new *cron-run* begins. It passes control to FlexMailer again, and + then we pick up where we left off. This means that one `Mailing` and one `MailingJob` could require multiple + *cron-runs*. + + The `RunEvent` would fire for *every cron run*. + +To listen to the `RunEvent`: + +```php +<?php +function example_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $container->findDefinition('dispatcher')->addMethodCall('addListener', + array(\Civi\FlexMailer\FlexMailer::EVENT_RUN, '_example_run') + ); +} + +function _example_run(\Civi\FlexMailer\Event\RunEvent $event) { + printf("Starting work on job #%d for mailing #%d\n", $event->getJob()->id, $event->getMailing()->id); +} +``` + +!!! note "Stopping the `RunEvent` will stop FlexMailer." + + If you call `$event->stopPropagation()`, this will cause FlexMailer to + stop its delivery process. diff --git a/civicrm/ext/flexmailer/docs/develop/SendBatchEvent.md b/civicrm/ext/flexmailer/docs/develop/SendBatchEvent.md new file mode 100644 index 0000000000000000000000000000000000000000..dcba869b0bef5da7ab08765fff18de615c7ca0e0 --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/SendBatchEvent.md @@ -0,0 +1,25 @@ +The `SendBatchEvent` (`EVENT_SEND`) takes a batch of recipients and messages, and it delivers the messages. For example, suppose you wanted to +replace the built-in delivery mechanism with a batch-oriented web-service: + +```php +<?php +function example_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $container->findDefinition('dispatcher')->addMethodCall('addListener', + array(\Civi\FlexMailer\FlexMailer::EVENT_SEND, '_example_send_batch') + ); +} + +function _example_send_batch(\Civi\FlexMailer\Event\SendBatchEvent $event) { + $event->stopPropagation(); // Disable standard delivery + + $context = stream_context_create(array( + 'http' => array( + 'method' => 'POST', + 'header' => 'Content-type: application/vnd.php.serialize', + 'content' => serialize($event->getTasks()), + ), + )); + return file_get_contents('https://example.org/batch-delivery', false, $context); +} +``` diff --git a/civicrm/ext/flexmailer/docs/develop/WalkBatchesEvent.md b/civicrm/ext/flexmailer/docs/develop/WalkBatchesEvent.md new file mode 100644 index 0000000000000000000000000000000000000000..346aefdc7d2440e418add6336c4c25046291a6ff --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/WalkBatchesEvent.md @@ -0,0 +1,26 @@ +The `WalkBatchesEvent` examines the recipient list and pulls out a subset for whom you want to send email. This is useful if you need strategies for +chunking-out deliveries. + +The basic formula for defining your own batch logic is: + +```php +<?php +function example_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + $container->findDefinition('dispatcher')->addMethodCall('addListener', + array(\Civi\FlexMailer\FlexMailer::EVENT_WALK, '_example_walk_batches') + ); +} + +function _example_walk_batches(\Civi\FlexMailer\Event\WalkBatchesEvent $event) { + $event->stopPropagation(); // Disable standard delivery + + while (...) { + $tasks = array(); + $task[] = new FlexMailerTask(...); + $task[] = new FlexMailerTask(...); + $task[] = new FlexMailerTask(...); + $event->visit($tasks); + } +} +``` diff --git a/civicrm/ext/flexmailer/docs/develop/index.md b/civicrm/ext/flexmailer/docs/develop/index.md new file mode 100644 index 0000000000000000000000000000000000000000..8ef6b8b09d07824dba68989baa4d9e360aa8835b --- /dev/null +++ b/civicrm/ext/flexmailer/docs/develop/index.md @@ -0,0 +1,136 @@ +## Unit tests + +The [headless unit tests](https://docs.civicrm.org/dev/en/latest/testing/#headless) are based on PHPUnit and `cv`. Simply run: + +``` +$ phpunit5 +``` + +## Events + +!!! tip "Symfony Events" + + This documentation references the [Symfony EventDispatcher](http://symfony.com/components/EventDispatcher). + If this is unfamiliar, you can read [a general introduction to Symfony events](http://symfony.com/doc/2.7/components/event_dispatcher.html) + or [a specific introduction about CiviCRM and Symfony events](https://docs.civicrm.org/dev/en/latest/hooks/setup/symfony/). + +FlexMailer is an *event* based delivery system. It defines a few events: + +* [CheckSendableEvent](CheckSendableEvent.md): In this event, one examines a draft mailing to determine if it is complete enough to deliver. +* [RunEvent](RunEvent.md): When a cron-worker starts processing a `MailingJob`, this event fires. It can be used to initialize resources... or to completely circumvent the normal process. +* [WalkBatchesEvent](WalkBatchesEvent.md): In this event, one examines the recipient list and pulls out a subset for whom you want to send email. +* [ComposeBatchEvent](ComposeBatchEvent.md): In this event, one examines the mail content and the list of recipients -- then composes a batch of fully-formed email messages. +* [SendBatchEvent](SendBatchEvent.md): In this event, one takes a batch of fully-formed email messages and delivers the messages. + +These events are not conceived in the same way as a typical *CiviCRM hook*; rather, they resemble *pipelines*. For each event, several listeners +have an opportunity to weigh-in, and the *order* of the listeners is important. As such, it helps to *inspect* the list of listeners. You can do +this with the CLI command, `cv`: + +``` +$ cv debug:event-dispatcher /flexmail/ +[Event] civi.flexmailer.checkSendable ++-------+------------------------------------------------------------+ +| Order | Callable | ++-------+------------------------------------------------------------+ +| #1 | Civi\FlexMailer\Listener\Abdicator->onCheckSendable() | +| #2 | Civi\FlexMailer\Listener\RequiredFields->onCheckSendable() | +| #3 | Civi\FlexMailer\Listener\RequiredTokens->onCheckSendable() | ++-------+------------------------------------------------------------+ + +[Event] civi.flexmailer.walk ++-------+---------------------------------------------------+ +| Order | Callable | ++-------+---------------------------------------------------+ +| #1 | Civi\FlexMailer\Listener\DefaultBatcher->onWalk() | ++-------+---------------------------------------------------+ + +[Event] civi.flexmailer.compose ++-------+-------------------------------------------------------+ +| Order | Callable | ++-------+-------------------------------------------------------+ +| #1 | Civi\FlexMailer\Listener\BasicHeaders->onCompose() | +| #2 | Civi\FlexMailer\Listener\ToHeader->onCompose() | +| #3 | Civi\FlexMailer\Listener\BounceTracker->onCompose() | +| #4 | Civi\FlexMailer\Listener\DefaultComposer->onCompose() | +| #5 | Civi\FlexMailer\Listener\Attachments->onCompose() | +| #6 | Civi\FlexMailer\Listener\OpenTracker->onCompose() | +| #7 | Civi\FlexMailer\Listener\HookAdapter->onCompose() | ++-------+-------------------------------------------------------+ + +[Event] civi.flexmailer.send ++-------+--------------------------------------------------+ +| Order | Callable | ++-------+--------------------------------------------------+ +| #1 | Civi\FlexMailer\Listener\DefaultSender->onSend() | ++-------+--------------------------------------------------+ +``` + +The above listing shows the default set of listeners at time of writing. (Run the command yourself to see how they appear on your system.) +The default listeners behave in basically the same way as CiviMail's traditional BAO-based delivery system (respecting `mailerJobSize`, +`mailThrottleTime`, `mailing_backend`, `hook_civicrm_alterMailParams`, etal). + +There are a few tricks for manipulating the pipeline: + +* __Register new listeners__. Each event has its own documentation which describes how to do this. +* __Manage the priority__. When registering a listener, the `addListener()` function accepts a `$priority` integer. Use this to move up or down the pipeline. + + !!! note "Priority vs Order" + + When writing code, you will set the *priority* of a listener. The default is `0`, and the usual range is `2000` (first) to `-2000` (last). + + <!-- The default listeners have priorities based on the constants `FlexMailer::WEIGHT_PREPARE` (1000), `FlexMailer::WEIGHT_MAIN` (0), + `FlexMailer::WEIGHT_ALTER` (-1000), and `FlexMailer::WEIGHT_END` (-2000). --> + + At runtime, the `EventDispatcher` will take all the listeners and sort them by priority. This produces the *order*, which simply counts up (`1`, `2`, `3`, ...). + +* __Alter a listener__. Most listeners are *services*, and you can manipulate options on these services. For example, suppose you wanted to replace the default bounce-tracking mechanism. + Here's a simple way to disable the default `BounceTracker`: + + ```php + <?php + \Civi::service('civi_flexmailer_bounce_tracker')->setActive(FALSE); + ``` + + Of course, this change needs to be made before the listener runs. You might use a global hook (like `hook_civicrm_config`), or you might + have your own listener which disables `civi_flexmailer_bounce_tracker` and adds its own bounce-tracking. + + Most FlexMailer services support `setActive()`, which enables you to completely replace them. + + Additionally, some services have their own richer methods. In this example, we modify the list of required tokens: + + ```php + <?php + $tokens = \Civi::service('civi_flexmailer_required_tokens') + ->getRequiredTokens(); + + unset($tokens['domain.address']); + + \Civi::service('civi_flexmailer_required_tokens') + ->setRequiredTokens($tokens); + ``` + +## Services + +Most features in FlexMailer are implemented by *services*, and you can override or manipulate these features if you understand the corresponding service. +For more detailed information about how to manipulate a service, consult its docblocks. + +* Listener services (`CheckSendableEvent`) + * `civi_flexmailer_required_fields` (`RequiredFields.php`): Check for fields like "Subject" and "From". + * `civi_flexmailer_required_tokens` (`RequiredTokens.php`): Check for tokens like `{action.unsubscribeUrl}` (in `traditional` mailings). +* Listener services (`WalkBatchesEvent`) + * `civi_flexmailer_default_batcher` (`DefaultBatcher.php`): Split the recipient list into smaller batches (per CiviMail settings) +* Listener services (`ComposeBatchEvent`) + * `civi_flexmailer_basic_headers` (`BasicHeaders.php`): Add `From:`, `Reply-To:`, etc + * `civi_flexmailer_to_header` (`ToHeader.php`): Add `To:` header + * `civi_flexmailer_bounce_tracker` (`BounceTracker.php`): Add bounce-tracking codes + * `civi_flexmailer_default_composer` (`DefaultComposer.php`): Read the email template and evaluate any tokens (based on CiviMail tokens) + * `civi_flexmailer_attachments` (`Attachments.php`): Add attachments + * `civi_flexmailer_open_tracker` (`OpenTracker.php`): Add open-tracking codes + * `civi_flexmailer_test_prefix` (`TestPrefix.php`): Add a prefix to any test mailings + * `civi_flexmailer_hooks` (`HookAdapter.php`): Backward compatibility with `hook_civicrm_alterMailParams` +* Listener services (`SendBatchEvent`) + * `civi_flexmailer_default_sender` (`DefaultSender.php`): Send the batch using CiviCRM's default delivery service +* Other services + * `civi_flexmailer_html_click_tracker` (`HtmlClickTracker.php`): Add click-tracking codes (for HTML messages) + * `civi_flexmailer_text_click_tracker` (`TextClickTracker.php`): Add click-tracking codes (for plain-text messages) + * `civi_flexmailer_api_overrides` (`Services.php.php`): Alter the `Mailing` APIs diff --git a/civicrm/ext/flexmailer/docs/index.md b/civicrm/ext/flexmailer/docs/index.md new file mode 100644 index 0000000000000000000000000000000000000000..88a1521a3a77a309e1cc709c6c54557334f03341 --- /dev/null +++ b/civicrm/ext/flexmailer/docs/index.md @@ -0,0 +1,13 @@ +FlexMailer (`org.civicrm.flexmailer`) is an email delivery engine for CiviCRM v4.7+. It replaces the internal guts of CiviMail. It is a +drop-in replacement which enables *other* extensions to provide richer email features. + +By default, FlexMailer supports the same user interfaces, delivery algorithms, and use-cases as CiviMail. After activating FlexMailer, an +administrator does not need to take any special actions. + +The distinguishing improvement here is under-the-hood: it provides better APIs and events for extension-developers. For example, +other extensions might: + +* Change the template language +* Manipulate tracking codes +* Rework the delivery mechanism +* Redefine the batching algorithm diff --git a/civicrm/ext/flexmailer/docs/install.md b/civicrm/ext/flexmailer/docs/install.md new file mode 100644 index 0000000000000000000000000000000000000000..4f385e88b238d8b46bf3f572167dc5493967063b --- /dev/null +++ b/civicrm/ext/flexmailer/docs/install.md @@ -0,0 +1,19 @@ +To download the latest alpha or beta version: + +```bash +$ cv dl --dev flexmailer +``` + +To download the latest, bleeding-edge code: + +```bash +$ cv dl org.civicrm.flexmailer@https://github.com/civicrm/org.civicrm.flexmailer/archive/master.zip +``` + +To download the latest, bleeding-edge code from git: + +```bash +$ cd $(cv path -x .) +$ git clone https://github.com/civicrm/org.civicrm.flexmailer.git +$ cv en flexmailer +``` diff --git a/civicrm/ext/flexmailer/flexmailer.civix.php b/civicrm/ext/flexmailer/flexmailer.civix.php new file mode 100644 index 0000000000000000000000000000000000000000..9fb3aa28e31cedc92717cba31543abeddf0e689e --- /dev/null +++ b/civicrm/ext/flexmailer/flexmailer.civix.php @@ -0,0 +1,477 @@ +<?php + +// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file + +/** + * The ExtensionUtil class provides small stubs for accessing resources of this + * extension. + */ +class CRM_Flexmailer_ExtensionUtil { + const SHORT_NAME = "flexmailer"; + const LONG_NAME = "org.civicrm.flexmailer"; + const CLASS_PREFIX = "CRM_Flexmailer"; + + /** + * Translate a string using the extension's domain. + * + * If the extension doesn't have a specific translation + * for the string, fallback to the default translations. + * + * @param string $text + * Canonical message text (generally en_US). + * @param array $params + * @return string + * Translated text. + * @see ts + */ + public static function ts($text, $params = []) { + if (!array_key_exists('domain', $params)) { + $params['domain'] = [self::LONG_NAME, NULL]; + } + return ts($text, $params); + } + + /** + * Get the URL of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: 'http://example.org/sites/default/ext/org.example.foo'. + * Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function url($file = NULL) { + if ($file === NULL) { + return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/'); + } + return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); + } + + /** + * Get the path of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function path($file = NULL) { + // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + /** + * Get the name of a class within this extension. + * + * @param string $suffix + * Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'. + * @return string + * Ex: 'CRM_Foo_Page_HelloWorld'. + */ + public static function findClass($suffix) { + return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix); + } + +} + +use CRM_Flexmailer_ExtensionUtil as E; + +/** + * (Delegated) Implements hook_civicrm_config(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config + */ +function _flexmailer_civix_civicrm_config(&$config = NULL) { + static $configured = FALSE; + if ($configured) { + return; + } + $configured = TRUE; + + $template =& CRM_Core_Smarty::singleton(); + + $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; + $extDir = $extRoot . 'templates'; + + if (is_array($template->template_dir)) { + array_unshift($template->template_dir, $extDir); + } + else { + $template->template_dir = [$extDir, $template->template_dir]; + } + + $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); + set_include_path($include_path); +} + +/** + * (Delegated) Implements hook_civicrm_xmlMenu(). + * + * @param $files array(string) + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu + */ +function _flexmailer_civix_civicrm_xmlMenu(&$files) { + foreach (_flexmailer_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { + $files[] = $file; + } +} + +/** + * Implements hook_civicrm_install(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install + */ +function _flexmailer_civix_civicrm_install() { + _flexmailer_civix_civicrm_config(); + if ($upgrader = _flexmailer_civix_upgrader()) { + $upgrader->onInstall(); + } +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ +function _flexmailer_civix_civicrm_postInstall() { + _flexmailer_civix_civicrm_config(); + if ($upgrader = _flexmailer_civix_upgrader()) { + if (is_callable([$upgrader, 'onPostInstall'])) { + $upgrader->onPostInstall(); + } + } +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall + */ +function _flexmailer_civix_civicrm_uninstall() { + _flexmailer_civix_civicrm_config(); + if ($upgrader = _flexmailer_civix_upgrader()) { + $upgrader->onUninstall(); + } +} + +/** + * (Delegated) Implements hook_civicrm_enable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable + */ +function _flexmailer_civix_civicrm_enable() { + _flexmailer_civix_civicrm_config(); + if ($upgrader = _flexmailer_civix_upgrader()) { + if (is_callable([$upgrader, 'onEnable'])) { + $upgrader->onEnable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_disable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable + * @return mixed + */ +function _flexmailer_civix_civicrm_disable() { + _flexmailer_civix_civicrm_config(); + if ($upgrader = _flexmailer_civix_upgrader()) { + if (is_callable([$upgrader, 'onDisable'])) { + $upgrader->onDisable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_upgrade(). + * + * @param $op string, the type of operation being performed; 'check' or 'enqueue' + * @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks + * + * @return mixed + * based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending) + * for 'enqueue', returns void + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade + */ +function _flexmailer_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + if ($upgrader = _flexmailer_civix_upgrader()) { + return $upgrader->onUpgrade($op, $queue); + } +} + +/** + * @return CRM_Flexmailer_Upgrader + */ +function _flexmailer_civix_upgrader() { + if (!file_exists(__DIR__ . '/CRM/Flexmailer/Upgrader.php')) { + return NULL; + } + else { + return CRM_Flexmailer_Upgrader_Base::instance(); + } +} + +/** + * Search directory tree for files which match a glob pattern. + * + * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. + * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() + * + * @param string $dir base dir + * @param string $pattern , glob pattern, eg "*.txt" + * + * @return array(string) + */ +function _flexmailer_civix_find_files($dir, $pattern) { + if (is_callable(['CRM_Utils_File', 'findFiles'])) { + return CRM_Utils_File::findFiles($dir, $pattern); + } + + $todos = [$dir]; + $result = []; + while (!empty($todos)) { + $subdir = array_shift($todos); + foreach (_flexmailer_civix_glob("$subdir/$pattern") as $match) { + if (!is_dir($match)) { + $result[] = $match; + } + } + if ($dh = opendir($subdir)) { + while (FALSE !== ($entry = readdir($dh))) { + $path = $subdir . DIRECTORY_SEPARATOR . $entry; + if ($entry[0] == '.') { + } + elseif (is_dir($path)) { + $todos[] = $path; + } + } + closedir($dh); + } + } + return $result; +} + +/** + * (Delegated) Implements hook_civicrm_managed(). + * + * Find any *.mgd.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed + */ +function _flexmailer_civix_civicrm_managed(&$entities) { + $mgdFiles = _flexmailer_civix_find_files(__DIR__, '*.mgd.php'); + sort($mgdFiles); + foreach ($mgdFiles as $file) { + $es = include $file; + foreach ($es as $e) { + if (empty($e['module'])) { + $e['module'] = E::LONG_NAME; + } + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } + $entities[] = $e; + } + } +} + +/** + * (Delegated) Implements hook_civicrm_caseTypes(). + * + * Find any and return any files matching "xml/case/*.xml" + * + * Note: This hook only runs in CiviCRM 4.4+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes + */ +function _flexmailer_civix_civicrm_caseTypes(&$caseTypes) { + if (!is_dir(__DIR__ . '/xml/case')) { + return; + } + + foreach (_flexmailer_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { + $name = preg_replace('/\.xml$/', '', basename($file)); + if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { + $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); + throw new CRM_Core_Exception($errorMessage); + } + $caseTypes[$name] = [ + 'module' => E::LONG_NAME, + 'name' => $name, + 'file' => $file, + ]; + } +} + +/** + * (Delegated) Implements hook_civicrm_angularModules(). + * + * Find any and return any files matching "ang/*.ang.php" + * + * Note: This hook only runs in CiviCRM 4.5+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules + */ +function _flexmailer_civix_civicrm_angularModules(&$angularModules) { + if (!is_dir(__DIR__ . '/ang')) { + return; + } + + $files = _flexmailer_civix_glob(__DIR__ . '/ang/*.ang.php'); + foreach ($files as $file) { + $name = preg_replace(':\.ang\.php$:', '', basename($file)); + $module = include $file; + if (empty($module['ext'])) { + $module['ext'] = E::LONG_NAME; + } + $angularModules[$name] = $module; + } +} + +/** + * (Delegated) Implements hook_civicrm_themes(). + * + * Find any and return any files matching "*.theme.php" + */ +function _flexmailer_civix_civicrm_themes(&$themes) { + $files = _flexmailer_civix_glob(__DIR__ . '/*.theme.php'); + foreach ($files as $file) { + $themeMeta = include $file; + if (empty($themeMeta['name'])) { + $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); + } + if (empty($themeMeta['ext'])) { + $themeMeta['ext'] = E::LONG_NAME; + } + $themes[$themeMeta['name']] = $themeMeta; + } +} + +/** + * Glob wrapper which is guaranteed to return an array. + * + * The documentation for glob() says, "On some systems it is impossible to + * distinguish between empty match and an error." Anecdotally, the return + * result for an empty match is sometimes array() and sometimes FALSE. + * This wrapper provides consistency. + * + * @link http://php.net/glob + * @param string $pattern + * + * @return array, possibly empty + */ +function _flexmailer_civix_glob($pattern) { + $result = glob($pattern); + return is_array($result) ? $result : []; +} + +/** + * Inserts a navigation menu item at a given place in the hierarchy. + * + * @param array $menu - menu hierarchy + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) + * + * @return bool + */ +function _flexmailer_civix_insert_navigation_menu(&$menu, $path, $item) { + // If we are done going down the path, insert menu + if (empty($path)) { + $menu[] = [ + 'attributes' => array_merge([ + 'label' => CRM_Utils_Array::value('name', $item), + 'active' => 1, + ], $item), + ]; + return TRUE; + } + else { + // Find an recurse into the next level down + $found = FALSE; + $path = explode('/', $path); + $first = array_shift($path); + foreach ($menu as $key => &$entry) { + if ($entry['attributes']['name'] == $first) { + if (!isset($entry['child'])) { + $entry['child'] = []; + } + $found = _flexmailer_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item); + } + } + return $found; + } +} + +/** + * (Delegated) Implements hook_civicrm_navigationMenu(). + */ +function _flexmailer_civix_navigationMenu(&$nodes) { + if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) { + _flexmailer_civix_fixNavigationMenu($nodes); + } +} + +/** + * Given a navigation menu, generate navIDs for any items which are + * missing them. + */ +function _flexmailer_civix_fixNavigationMenu(&$nodes) { + $maxNavID = 1; + array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) { + if ($key === 'navID') { + $maxNavID = max($maxNavID, $item); + } + }); + _flexmailer_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL); +} + +function _flexmailer_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { + $origKeys = array_keys($nodes); + foreach ($origKeys as $origKey) { + if (!isset($nodes[$origKey]['attributes']['parentID']) && $parentID !== NULL) { + $nodes[$origKey]['attributes']['parentID'] = $parentID; + } + // If no navID, then assign navID and fix key. + if (!isset($nodes[$origKey]['attributes']['navID'])) { + $newKey = ++$maxNavID; + $nodes[$origKey]['attributes']['navID'] = $newKey; + $nodes[$newKey] = $nodes[$origKey]; + unset($nodes[$origKey]); + $origKey = $newKey; + } + if (isset($nodes[$origKey]['child']) && is_array($nodes[$origKey]['child'])) { + _flexmailer_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_alterSettingsFolders(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders + */ +function _flexmailer_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; + if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { + $metaDataFolders[] = $settingsDir; + } +} + +/** + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes + */ +function _flexmailer_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, []); +} diff --git a/civicrm/ext/flexmailer/flexmailer.php b/civicrm/ext/flexmailer/flexmailer.php new file mode 100644 index 0000000000000000000000000000000000000000..f8850486f760a282c6ca2caddb5c387a8f6d510c --- /dev/null +++ b/civicrm/ext/flexmailer/flexmailer.php @@ -0,0 +1,162 @@ +<?php + +/** + * Civi v5.19 does not provide all the API's we would need to define + * FlexMailer in an extension, but you can patch core to simulate them. + * These define()s tell core to enable any such hacks (if available). + */ + +define('CIVICRM_FLEXMAILER_HACK_DELIVER', '\Civi\FlexMailer\FlexMailer::createAndRun'); +define('CIVICRM_FLEXMAILER_HACK_SENDABLE', '\Civi\FlexMailer\Validator::createAndRun'); +define('CIVICRM_FLEXMAILER_HACK_REQUIRED_TOKENS', 'call://civi_flexmailer_required_tokens/getRequiredTokens'); + +require_once 'flexmailer.civix.php'; + +use CRM_Flexmailer_ExtensionUtil as E; + +/** + * Implements hook_civicrm_config(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config + */ +function flexmailer_civicrm_config(&$config) { + _flexmailer_civix_civicrm_config($config); +} + +/** + * Implements hook_civicrm_xmlMenu(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu + */ +function flexmailer_civicrm_xmlMenu(&$files) { + _flexmailer_civix_civicrm_xmlMenu($files); +} + +/** + * Implements hook_civicrm_install(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install + */ +function flexmailer_civicrm_install() { + _flexmailer_civix_civicrm_install(); +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall + */ +function flexmailer_civicrm_postInstall() { + _flexmailer_civix_civicrm_postInstall(); +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall + */ +function flexmailer_civicrm_uninstall() { + _flexmailer_civix_civicrm_uninstall(); +} + +/** + * Implements hook_civicrm_enable(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable + */ +function flexmailer_civicrm_enable() { + _flexmailer_civix_civicrm_enable(); +} + +/** + * Implements hook_civicrm_disable(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable + */ +function flexmailer_civicrm_disable() { + _flexmailer_civix_civicrm_disable(); +} + +/** + * Implements hook_civicrm_upgrade(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade + */ +function flexmailer_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + return _flexmailer_civix_civicrm_upgrade($op, $queue); +} + +/** + * Implements hook_civicrm_managed(). + * + * Generate a list of entities to create/deactivate/delete when this module + * is installed, disabled, uninstalled. + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed + */ +function flexmailer_civicrm_managed(&$entities) { + _flexmailer_civix_civicrm_managed($entities); +} + +/** + * Implements hook_civicrm_angularModules(). + * + * Generate a list of Angular modules. + * + * Note: This hook only runs in CiviCRM 4.5+. It may + * use features only available in v4.6+. + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes + */ +function flexmailer_civicrm_angularModules(&$angularModules) { + _flexmailer_civix_civicrm_angularModules($angularModules); +} + +/** + * Implements hook_civicrm_alterSettingsFolders(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders + */ +function flexmailer_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + _flexmailer_civix_civicrm_alterSettingsFolders($metaDataFolders); +} + +/** + * Implements hook_civicrm_navigationMenu(). + * + * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_navigationMenu + */ +function flexmailer_civicrm_navigationMenu(&$menu) { + _flexmailer_civix_insert_navigation_menu($menu, 'Administer/CiviMail', [ + 'label' => E::ts('Flexmailer Settings'), + 'name' => 'flexmailer_settings', + 'permission' => 'administer CiviCRM', + 'child' => [], + 'operator' => 'AND', + 'separator' => 0, + 'url' => CRM_Utils_System::url('civicrm/admin/setting/flexmailer', 'reset=1', TRUE), + ]); + _flexmailer_civix_navigationMenu($menu); +} + +/** + * Implements hook_civicrm_container(). + */ +function flexmailer_civicrm_container($container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + \Civi\FlexMailer\Services::registerServices($container); +} + +/** + * Get a list of delivery options for traditional mailings. + * + * @return array + * Array (string $machineName => string $label). + */ +function _flexmailer_traditional_options() { + return array( + 'auto' => E::ts('Automatic'), + 'bao' => E::ts('CiviMail BAO'), + 'flexmailer' => E::ts('Flexmailer Pipeline'), + ); +} diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml new file mode 100644 index 0000000000000000000000000000000000000000..f89dbd026e786fb9cb3761354b367cd04a45cf64 --- /dev/null +++ b/civicrm/ext/flexmailer/info.xml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<extension key="org.civicrm.flexmailer" type="module"> + <file>flexmailer</file> + <name>FlexMailer</name> + <description>Flexible APIs for email delivery</description> + <license>AGPL-3.0</license> + <maintainer> + <author>Tim Otten</author> + <email>totten@civicrm.org</email> + </maintainer> + <urls> + <url desc="Main Extension Page">https://github.com/civicrm/org.civicrm.flexmailer</url> + <url desc="Documentation">https://docs.civicrm.org/flexmailer/en/latest/</url> + <url desc="Support">http://civicrm.stackexchange.com/</url> + <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> + </urls> + <releaseDate>2019-11-26</releaseDate> + <version>1.1.1</version> + <develStage>alpha</develStage> + <comments> + FlexMailer is an email delivery engine which replaces the internal guts + of CiviMail. It is a drop-in replacement which enables *other* extensions + to provide richer email features. + </comments> + <compatibility> + <ver>5.13</ver> + </compatibility> + <classloader> + <psr4 prefix="Civi\FlexMailer\" path="src"/> + </classloader> + <civix> + <namespace>CRM/Flexmailer</namespace> + </civix> +</extension> diff --git a/civicrm/ext/flexmailer/mkdocs.yml b/civicrm/ext/flexmailer/mkdocs.yml new file mode 100644 index 0000000000000000000000000000000000000000..968689337e42ec82401d2dd03277e5d3d5d457c8 --- /dev/null +++ b/civicrm/ext/flexmailer/mkdocs.yml @@ -0,0 +1,28 @@ +site_name: FlexMailer +repo_url: https://github.com/civicrm/org.civicrm.flexmailer +theme: + name: material + +nav: +- Introduction: index.md +- Installation: install.md +- Development: + - Overview: develop/index.md + - CheckSendableEvent: develop/CheckSendableEvent.md + - RunEvent: develop/RunEvent.md + - WalkBatchesEvent: develop/WalkBatchesEvent.md + - ComposeBatchEvent: develop/ComposeBatchEvent.md + - SendBatchEvent: develop/SendBatchEvent.md + +markdown_extensions: + - attr_list + - admonition + - def_list + - codehilite + - toc: + permalink: true + - pymdownx.superfences + - pymdownx.inlinehilite + - pymdownx.tilde + - pymdownx.betterem + - pymdownx.mark diff --git a/civicrm/ext/flexmailer/phpunit.xml.dist b/civicrm/ext/flexmailer/phpunit.xml.dist new file mode 100644 index 0000000000000000000000000000000000000000..fc8f870b723b86a3cdf77609656b6ce38d0288ce --- /dev/null +++ b/civicrm/ext/flexmailer/phpunit.xml.dist @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> + <testsuites> + <testsuite name="My Test Suite"> + <directory>./tests/phpunit</directory> + </testsuite> + </testsuites> + <filter> + <whitelist> + <directory suffix=".php">./</directory> + </whitelist> + </filter> + <listeners> + <listener class="Civi\Test\CiviTestListener"> + <arguments/> + </listener> + </listeners> +</phpunit> diff --git a/civicrm/ext/flexmailer/settings/flexmailer.setting.php b/civicrm/ext/flexmailer/settings/flexmailer.setting.php new file mode 100644 index 0000000000000000000000000000000000000000..ea227d9ef0f64e7837a97bccb92e728aad81393c --- /dev/null +++ b/civicrm/ext/flexmailer/settings/flexmailer.setting.php @@ -0,0 +1,28 @@ +<?php + +use CRM_Flexmailer_ExtensionUtil as E; + +return [ + 'flexmailer_traditional' => [ + 'group_name' => 'Flexmailer Preferences', + 'group' => 'flexmailer', + 'name' => 'flexmailer_traditional', + 'type' => 'String', + 'html_type' => 'select', + 'html_attributes' => ['class' => 'crm-select2'], + 'pseudoconstant' => ['callback' => '_flexmailer_traditional_options'], + 'default' => 'auto', + 'add' => '5.13', + 'title' => E::ts('Traditional Mailing Handler'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => E::ts('For greater backward-compatibility, process "<code>traditional</code>" mailings with the CiviMail\'s hard-coded BAO.') . '<br/>' + . E::ts('For greater forward-compatibility, process "<code>traditional</code>" mailings with Flexmailer\'s extensible pipeline.'), + 'help_text' => NULL, + 'settings_pages' => [ + 'flexmailer' => [ + 'weight' => 5, + ], + ], + ], +]; diff --git a/civicrm/ext/flexmailer/src/API/MailingPreview.php b/civicrm/ext/flexmailer/src/API/MailingPreview.php new file mode 100644 index 0000000000000000000000000000000000000000..cdd11ac4281afafa71827b73b80c30983610d5a3 --- /dev/null +++ b/civicrm/ext/flexmailer/src/API/MailingPreview.php @@ -0,0 +1,78 @@ +<?php +namespace Civi\FlexMailer\API; + +use Civi\FlexMailer\FlexMailer; +use Civi\FlexMailer\FlexMailerTask; +use Civi\FlexMailer\Listener\Abdicator; + +class MailingPreview { + + /** + * Generate a preview of how a mailing would look. + * + * @param array $apiRequest + * - entity: string + * - action: string + * - params: array + * - id: int + * - contact_id: int + * @return array + * @throws \CRM_Core_Exception + */ + public static function preview($apiRequest) { + $params = $apiRequest['params']; + + /** @var \CRM_Mailing_BAO_Mailing $mailing */ + $mailing = new \CRM_Mailing_BAO_Mailing(); + $mailingID = \CRM_Utils_Array::value('id', $params); + if ($mailingID) { + $mailing->id = $mailingID; + $mailing->find(TRUE); + } + else { + $mailing->copyValues($params); + } + + if (!Abdicator::isFlexmailPreferred($mailing)) { + require_once 'api/v3/Mailing.php'; + return civicrm_api3_mailing_preview($params); + } + + $contactID = \CRM_Utils_Array::value('contact_id', $params, + \CRM_Core_Session::singleton()->get('userID')); + + $job = new \CRM_Mailing_BAO_MailingJob(); + $job->mailing_id = $mailing->id ?: NULL; + $job->is_test = 1; + $job->status = 'Complete'; + // $job->save(); + + $flexMailer = new FlexMailer(array( + 'is_preview' => TRUE, + 'mailing' => $mailing, + 'job' => $job, + 'attachments' => \CRM_Core_BAO_File::getEntityFile('civicrm_mailing', + $mailing->id), + )); + + if (count($flexMailer->validate()) > 0) { + throw new \CRM_Core_Exception("FlexMailer cannot execute: invalid context"); + } + + $task = new FlexMailerTask($job->id, $contactID, 'fakehash', + 'placeholder@example.com'); + + $flexMailer->fireComposeBatch(array($task)); + + return civicrm_api3_create_success(array( + 'id' => isset($params['id']) ? $params['id'] : NULL, + 'contact_id' => $contactID, + 'subject' => $task->getMailParam('Subject'), + 'body_html' => $task->getMailParam('html'), + 'body_text' => $task->getMailParam('text'), + // Flag our role in processing this - to support tests. + '_rendered_by_' => 'flexmailer', + )); + } + +} diff --git a/civicrm/ext/flexmailer/src/ClickTracker/ClickTrackerInterface.php b/civicrm/ext/flexmailer/src/ClickTracker/ClickTrackerInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..50d6551ddaac66198fc4844c1d0aa5dfb557a5f0 --- /dev/null +++ b/civicrm/ext/flexmailer/src/ClickTracker/ClickTrackerInterface.php @@ -0,0 +1,31 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\ClickTracker; + +interface ClickTrackerInterface { + + /** + * @param string $msg + * @param int $mailing_id + * @param int|string $queue_id + * @return mixed + */ + public function filterContent($msg, $mailing_id, $queue_id); + + // /** + // * @param string $url + // * @param int $mailing_id + // * @param int|string $queue_id + // * @return mixed + // */ + // public function filterUrl($url, $mailing_id, $queue_id); + +} diff --git a/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php new file mode 100644 index 0000000000000000000000000000000000000000..a511f90e06bebd8c8612ae60724ed1b4212bbbc9 --- /dev/null +++ b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php @@ -0,0 +1,96 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\ClickTracker; + +class HtmlClickTracker implements ClickTrackerInterface { + + public function filterContent($msg, $mailing_id, $queue_id) { + return self::replaceHrefUrls($msg, + function ($url) use ($mailing_id, $queue_id) { + if (strpos($url, '{') !== FALSE) { + return $url; + } + $data = \CRM_Mailing_BAO_TrackableURL::getTrackerURL( + $url, $mailing_id, $queue_id); + $data = htmlentities($data, ENT_NOQUOTES); + return $data; + } + ); + } + + /** + * Find any HREF-style URLs and replace them. + * + * @param string $html + * @param callable $replace + * Function(string $oldHtmlUrl) => string $newHtmlUrl. + * @return mixed + * String, HTML. + */ + public static function replaceHrefUrls($html, $replace) { + $useNoFollow = TRUE; + $callback = function ($matches) use ($replace, $useNoFollow) { + $replacement = $replace($matches[2]); + + // See: https://github.com/civicrm/civicrm-core/pull/12561 + // If we track click-throughs on a link, then don't encourage search-engines to traverse them. + // At a policy level, I'm not sure I completely agree, but this keeps things consistent. + // You can tell if we're tracking a link because $replace() yields a diff URL. + $noFollow = ''; + if ($useNoFollow && $replacement !== $matches[2]) { + $noFollow = " rel='nofollow'"; + } + + return $matches[1] . $replacement . $matches[3] . $noFollow; + }; + + // Find anything like href="..." or href='...' inside a tag. + $tmp = preg_replace_callback( + ';(\<[^>]*href *= *")([^">]+)(");', $callback, $html); + return preg_replace_callback( + ';(\<[^>]*href *= *\')([^\'>]+)(\');', $callback, $tmp); + } + + // /** + // * Find URL expressions; replace them with tracked URLs. + // * + // * @param string $msg + // * @param int $mailing_id + // * @param int|string $queue_id + // * @param bool $html + // * @return string + // * Updated $msg + // */ + // public static function scanAndReplace_old($msg, $mailing_id, $queue_id, $html = FALSE) { + // + // $protos = '(https?|ftp)'; + // $letters = '\w'; + // $gunk = '/#~:.?+=&%@!\-'; + // $punc = '.:?\-'; + // $any = "{$letters}{$gunk}{$punc}"; + // if ($html) { + // $pattern = "{\\b(href=([\"'])?($protos:[$any]+?(?=[$punc]*[^$any]|$))([\"'])?)}im"; + // } + // else { + // $pattern = "{\\b($protos:[$any]+?(?=[$punc]*[^$any]|$))}eim"; + // } + // + // $trackURL = \CRM_Mailing_BAO_TrackableURL::getTrackerURL('\\1', $mailing_id, $queue_id); + // $replacement = $html ? ("href=\"{$trackURL}\"") : ("\"{$trackURL}\""); + // + // $msg = preg_replace($pattern, $replacement, $msg); + // if ($html) { + // $msg = htmlentities($msg, ENT_NOQUOTES); + // } + // return $msg; + // } + +} diff --git a/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php b/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php new file mode 100644 index 0000000000000000000000000000000000000000..3f907e55e98e51af8aebd703b5520c3858bbf8f1 --- /dev/null +++ b/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php @@ -0,0 +1,47 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\ClickTracker; + +class TextClickTracker implements ClickTrackerInterface { + + public function filterContent($msg, $mailing_id, $queue_id) { + return self::replaceTextUrls($msg, + function ($url) use ($mailing_id, $queue_id) { + if (strpos($url, '{') !== FALSE) { + return $url; + } + return \CRM_Mailing_BAO_TrackableURL::getTrackerURL($url, $mailing_id, + $queue_id); + } + ); + } + + /** + * Find any URLs and replace them. + * + * @param string $text + * @param callable $replace + * Function(string $oldUrl) => string $newUrl. + * @return mixed + * String, text. + */ + public static function replaceTextUrls($text, $replace) { + $callback = function ($matches) use ($replace) { + // ex: $matches[0] == 'http://foo.com' + return $replace($matches[0]); + }; + // Find any HTTP(S) URLs in the text. + // return preg_replace_callback('/\b(?:(?:https?):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $callback, $tex + return preg_replace_callback('/\b(?:(?:https?):\/\/)[-A-Z0-9+&@#\/%=~_|$?!:,.{}\[\];]*[A-Z0-9+&@#\/%=~_|${}\[\];]/i', + $callback, $text); + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/BaseEvent.php b/civicrm/ext/flexmailer/src/Event/BaseEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..3ab35543ad597cd94fb05e9189a4354361acdf54 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/BaseEvent.php @@ -0,0 +1,56 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class BaseEvent + * @package Civi\FlexMailer\Event + */ +class BaseEvent extends \Symfony\Component\EventDispatcher\Event { + /** + * @var array + * An array which must define options: + * - mailing: \CRM_Mailing_BAO_Mailing + * - job: \CRM_Mailing_BAO_MailingJob + * - attachments: array + */ + public $context; + + /** + * BaseEvent constructor. + * @param array $context + */ + public function __construct(array $context) { + $this->context = $context; + } + + /** + * @return \CRM_Mailing_BAO_Mailing + */ + public function getMailing() { + return $this->context['mailing']; + } + + /** + * @return \CRM_Mailing_BAO_MailingJob + */ + public function getJob() { + return $this->context['job']; + } + + /** + * @return array|NULL + */ + public function getAttachments() { + return $this->context['attachments']; + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/CheckSendableEvent.php b/civicrm/ext/flexmailer/src/Event/CheckSendableEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..95bdeb7b87687169648d8d37a791144946ea13a3 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/CheckSendableEvent.php @@ -0,0 +1,87 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class CheckSendableEvent + * @package Civi\FlexMailer\Event + */ +class CheckSendableEvent extends \Symfony\Component\EventDispatcher\Event { + + /** + * @var array + * An array which must define options: + * - mailing: \CRM_Mailing_BAO_Mailing + * - attachments: array + */ + public $context; + + /** + * @var array + * A list of error messages. + * Ex: array('subject' => 'The Subject field is blank'). + * Example keys: 'subject', 'name', 'from_name', 'from_email', 'body', 'body_html:unsubscribeUrl'. + */ + protected $errors = array(); + + /** + * CheckSendableEvent constructor. + * @param array $context + */ + public function __construct(array $context) { + $this->context = $context; + } + + /** + * @return \CRM_Mailing_BAO_Mailing + */ + public function getMailing() { + return $this->context['mailing']; + } + + /** + * @return array|NULL + */ + public function getAttachments() { + return $this->context['attachments']; + } + + public function setError($key, $message) { + $this->errors[$key] = $message; + return $this; + } + + public function getErrors() { + return $this->errors; + } + + /** + * Get the full, combined content of the header, body, and footer. + * + * @param string $field + * Name of the field -- either 'body_text' or 'body_html'. + * @return string|NULL + * Either the combined header+body+footer, or NULL if there is no body. + */ + public function getFullBody($field) { + if ($field !== 'body_text' && $field !== 'body_html') { + throw new \RuntimeException("getFullBody() only supports body_text and body_html"); + } + $mailing = $this->getMailing(); + $header = $mailing->header_id && $mailing->header_id != 'null' ? \CRM_Mailing_BAO_Component::findById($mailing->header_id) : NULL; + $footer = $mailing->footer_id && $mailing->footer_id != 'null' ? \CRM_Mailing_BAO_Component::findById($mailing->footer_id) : NULL; + if (empty($mailing->{$field})) { + return NULL; + } + return ($header ? $header->{$field} : '') . $mailing->{$field} . ($footer ? $footer->{$field} : ''); + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/ComposeBatchEvent.php b/civicrm/ext/flexmailer/src/Event/ComposeBatchEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..17c4e9bc07830f86264689ebdb4677ab20ba012f --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/ComposeBatchEvent.php @@ -0,0 +1,55 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class ComposeBatchEvent + * @package Civi\FlexMailer\Event + * + * The general formula for an agent handling ComposeBatchEvent: + * + * ```php + * foreach ($event->getTasks() as $task) { + * $task->setMailParam('Subject', 'Hello'); + * $task->setMailParam('text', 'Hello there'); + * $task->setMailParam('html', '<html><body><p>Hello there</p></body></html>'); + * } + * ``` + */ +class ComposeBatchEvent extends BaseEvent { + + /** + * @var \Civi\FlexMailer\FlexMailerTask[] + */ + private $tasks; + + public function __construct($context, $tasks) { + parent::__construct($context); + $this->tasks = $tasks; + } + + /** + * @return \Civi\FlexMailer\FlexMailerTask[] + */ + public function getTasks() { + return $this->tasks; + } + + /** + * @return bool + */ + public function isPreview() { + return isset($this->context['is_preview']) + ? (bool) $this->context['is_preview'] + : FALSE; + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/RunEvent.php b/civicrm/ext/flexmailer/src/Event/RunEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..2960f4a8a1a48a7d57f64c5062246773b1012834 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/RunEvent.php @@ -0,0 +1,48 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class RunEvent + * @package Civi\FlexMailer\Event + * + * The RunEvent fires at the start of mail delivery process. + * + * You may use this event to either: + * - Perform extra initialization at the start of the process. + * - Short-circuit the entire process. In this use-case, be + * sure to run `$event->stopPropagation()` + * and `$event->setCompleted($bool)`. + */ +class RunEvent extends BaseEvent { + + /** + * @var bool|null + */ + private $isCompleted = NULL; + + /** + * @return bool|NULL + */ + public function getCompleted() { + return $this->isCompleted; + } + + /** + * @param bool|NULL $isCompleted + * @return RunEvent + */ + public function setCompleted($isCompleted) { + $this->isCompleted = $isCompleted; + return $this; + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/SendBatchEvent.php b/civicrm/ext/flexmailer/src/Event/SendBatchEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..4ffeb884f3e4708d761e0b0b118ac2b87314b216 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/SendBatchEvent.php @@ -0,0 +1,57 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class SendBatchEvent + * @package Civi\FlexMailer\Event + */ +class SendBatchEvent extends BaseEvent { + + /** + * @var \Civi\FlexMailer\FlexMailerTask[] + */ + private $tasks; + + /** + * @var bool|null + */ + private $isCompleted = NULL; + + public function __construct($context, $tasks) { + parent::__construct($context); + $this->tasks = $tasks; + } + + /** + * @return array<\Civi\FlexMailer\FlexMailerTask> + */ + public function getTasks() { + return $this->tasks; + } + + /** + * @return bool|NULL + */ + public function getCompleted() { + return $this->isCompleted; + } + + /** + * @param bool|NULL $isCompleted + * @return SendBatchEvent + */ + public function setCompleted($isCompleted) { + $this->isCompleted = $isCompleted; + return $this; + } + +} diff --git a/civicrm/ext/flexmailer/src/Event/WalkBatchesEvent.php b/civicrm/ext/flexmailer/src/Event/WalkBatchesEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..014aaf9534d02e67aa0812e916e8fee68e87634a --- /dev/null +++ b/civicrm/ext/flexmailer/src/Event/WalkBatchesEvent.php @@ -0,0 +1,58 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Event; + +/** + * Class WalkBatchesEvent + * @package Civi\FlexMailer\Event + */ +class WalkBatchesEvent extends BaseEvent { + + /** + * @var callable + */ + protected $callback; + + /** + * @var bool|null + */ + protected $isDelivered = NULL; + + public function __construct($context, $callback) { + parent::__construct($context); + $this->callback = $callback; + } + + /** + * @return bool|NULL + */ + public function getCompleted() { + return $this->isDelivered; + } + + /** + * @param bool|NULL $isCompleted + * @return WalkBatchesEvent + */ + public function setCompleted($isCompleted) { + $this->isDelivered = $isCompleted; + return $this; + } + + /** + * @param \Civi\FlexMailer\FlexMailerTask[] $tasks + * @return mixed + */ + public function visit($tasks) { + return call_user_func($this->callback, $tasks); + } + +} diff --git a/civicrm/ext/flexmailer/src/FlexMailer.php b/civicrm/ext/flexmailer/src/FlexMailer.php new file mode 100644 index 0000000000000000000000000000000000000000..c46160a73801f4a981ab383d495752e8bb3d3921 --- /dev/null +++ b/civicrm/ext/flexmailer/src/FlexMailer.php @@ -0,0 +1,226 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +use Civi\FlexMailer\Event\ComposeBatchEvent; +use Civi\FlexMailer\Event\RunEvent; +use Civi\FlexMailer\Event\SendBatchEvent; +use Civi\FlexMailer\Event\WalkBatchesEvent; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + +/** + * Class FlexMailer + * @package Civi\FlexMailer + * + * The FlexMailer is a mail-blaster which supports batching and events. + * Specifically, there are five key events: + * - WalkBatchesEvent: Examine the recipient list and pull out a subset + * for whom you want to send email. + * - ComposeBatchEvent: Given a batch of recipients, prepare an email message + * for each. + * - SendBatchEvent: Given a batch of recipients and their messages, send + * the messages out. + * - RunEvent: Execute the main-loop (with all of the above steps). + * + * The events are based on Symfony's EventDispatcher. You may register event + * listeners using hook_civicrm_container, e.g. + * + * function mymod_civicrm_container(ContainerBuilder $container) { + * $container + * ->setDefinition('mymod_subscriber', new Definition('MymodSubscriber', array())) + * ->addTag('kernel.event_subscriber'); + * } + * + * FlexMailer includes default listeners for all of these events. They + * behaves in basically the same way as CiviMail's traditional BAO-based + * delivery system (respecting mailerJobSize, mailThrottleTime, + * mailing_backend, hook_civicrm_alterMailParams, etal). However, you + * can replace any of the major functions, e.g. + * + * - If you send large blasts across multiple servers, then you may + * prefer a different algorithm for splitting the recipient list. + * Listen for WalkBatchesEvent. + * - If you want to compose messages in a new way (e.g. a different + * templating language), then listen for ComposeBatchEvent. + * - If you want to deliver messages through a different medium + * (such as web-services or batched SMTP), listen for SendBatchEvent. + * + * In all cases, your function can listen to the event and then decide what + * to do. If your listener does the work required for the event, then + * you can disable the default listener by calling `$event->stopPropagation()`. + * + * @link http://symfony.com/doc/current/components/event_dispatcher.html + */ +class FlexMailer { + + const WEIGHT_START = 2000; + const WEIGHT_PREPARE = 1000; + const WEIGHT_MAIN = 0; + const WEIGHT_ALTER = -1000; + const WEIGHT_END = -2000; + + const EVENT_RUN = 'civi.flexmailer.run'; + const EVENT_WALK = 'civi.flexmailer.walk'; + const EVENT_COMPOSE = 'civi.flexmailer.compose'; + const EVENT_SEND = 'civi.flexmailer.send'; + + /** + * @return array + * Array(string $event => string $class). + */ + public static function getEventTypes() { + return array( + self::EVENT_RUN => 'Civi\\FlexMailer\\Event\\RunEvent', + self::EVENT_WALK => 'Civi\\FlexMailer\\Event\\WalkBatchesEvent', + self::EVENT_COMPOSE => 'Civi\\FlexMailer\\Event\\ComposeBatchEvent', + self::EVENT_SEND => 'Civi\\FlexMailer\\Event\\SendBatchEvent', + ); + } + + /** + * @var array + * An array which must define options: + * - mailing: \CRM_Mailing_BAO_Mailing + * - job: \CRM_Mailing_BAO_MailingJob + * - attachments: array + * - is_preview: bool + * + * Additional options may be passed. To avoid naming conflicts, use prefixing. + */ + public $context; + + /** + * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface + */ + private $dispatcher; + + /** + * Create a new FlexMailer instance, using data available in the CiviMail runJobs(). + * + * @param \CRM_Mailing_BAO_MailingJob $job + * @param object $deprecatedMessageMailer + * @param array $deprecatedTestParams + * @return bool + * TRUE if delivery completed. + */ + public static function createAndRun($job, $deprecatedMessageMailer, $deprecatedTestParams) { + $flexMailer = new \Civi\FlexMailer\FlexMailer(array( + 'mailing' => \CRM_Mailing_BAO_Mailing::findById($job->mailing_id), + 'job' => $job, + 'attachments' => \CRM_Core_BAO_File::getEntityFile('civicrm_mailing', $job->mailing_id), + 'deprecatedMessageMailer' => $deprecatedMessageMailer, + 'deprecatedTestParams' => $deprecatedTestParams, + )); + return $flexMailer->run(); + } + + /** + * FlexMailer constructor. + * @param array $context + * An array which must define options: + * - mailing: \CRM_Mailing_BAO_Mailing + * - job: \CRM_Mailing_BAO_MailingJob + * - attachments: array + * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher + */ + public function __construct($context = array(), EventDispatcherInterface $dispatcher = NULL) { + $this->context = $context; + $this->dispatcher = $dispatcher ? $dispatcher : \Civi::service('dispatcher'); + } + + /** + * @return bool + * TRUE if delivery completed. + * @throws \CRM_Core_Exception + */ + public function run() { + // PHP 5.3 + $flexMailer = $this; + + if (count($this->validate()) > 0) { + throw new \CRM_Core_Exception("FlexMailer cannot execute: invalid context"); + } + + $run = $this->fireRun(); + if ($run->isPropagationStopped()) { + return $run->getCompleted(); + } + + $walkBatches = $this->fireWalkBatches(function ($tasks) use ($flexMailer) { + $flexMailer->fireComposeBatch($tasks); + $sendBatch = $flexMailer->fireSendBatch($tasks); + return $sendBatch->getCompleted(); + }); + + return $walkBatches->getCompleted(); + } + + /** + * @return array + * List of error messages + */ + public function validate() { + $errors = array(); + if (empty($this->context['mailing'])) { + $errors['mailing'] = 'Missing \"mailing\"'; + } + if (empty($this->context['job'])) { + $errors['job'] = 'Missing \"job\"'; + } + return $errors; + } + + /** + * @return \Civi\FlexMailer\Event\RunEvent + */ + public function fireRun() { + $event = new RunEvent($this->context); + $this->dispatcher->dispatch(self::EVENT_RUN, $event); + return $event; + } + + /** + * @param callable $onVisitBatch + * @return \Civi\FlexMailer\Event\WalkBatchesEvent + */ + public function fireWalkBatches($onVisitBatch) { + $event = new WalkBatchesEvent($this->context, $onVisitBatch); + $this->dispatcher->dispatch(self::EVENT_WALK, $event); + return $event; + } + + /** + * @param array<FlexMailerTask> $tasks + * @return \Civi\FlexMailer\Event\ComposeBatchEvent + */ + public function fireComposeBatch($tasks) { + // This isn't a great place for this, but it ensures consistent cleanup. + $mailing = $this->context['mailing']; + if (property_exists($mailing, 'language') && $mailing->language && $mailing->language != 'en_US') { + $swapLang = \CRM_Utils_AutoClean::swap('call://i18n/getLocale', 'call://i18n/setLocale', $mailing->language); + } + + $event = new ComposeBatchEvent($this->context, $tasks); + $this->dispatcher->dispatch(self::EVENT_COMPOSE, $event); + return $event; + } + + /** + * @param array<FlexMailerTask> $tasks + * @return \Civi\FlexMailer\Event\SendBatchEvent + */ + public function fireSendBatch($tasks) { + $event = new SendBatchEvent($this->context, $tasks); + $this->dispatcher->dispatch(self::EVENT_SEND, $event); + return $event; + } + +} diff --git a/civicrm/ext/flexmailer/src/FlexMailerTask.php b/civicrm/ext/flexmailer/src/FlexMailerTask.php new file mode 100644 index 0000000000000000000000000000000000000000..92f9a01a3213661a0dbab3c278c10c968ccd3466 --- /dev/null +++ b/civicrm/ext/flexmailer/src/FlexMailerTask.php @@ -0,0 +1,167 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +/** + * Class FlexMailerTask + * @package Civi\FlexMailer + * + * A FlexMailerTask describes an individual message that needs to be + * composed and delivered. Generally, it's used in three steps: + * - At the start, we instantiate the task with a few inputs + * (e.g. $contactId and $address). + * - During composition, we read those values and fill-in the + * message's content ($task->setMailParams(...)); + * - During delivery, we read the message ($task->getMailParams()) + * and send it. + */ +class FlexMailerTask { + + /** + * @var int + * A persistent record for this email delivery. + * @see \CRM_Mailing_Event_DAO_Queue + */ + private $eventQueueId; + + /** + * @var int + * The ID of the recipiient. + * @see \CRM_Contact_DAO_Contact + */ + private $contactId; + + /** + * @var string + * An authentication code. The name is misleading - it may be hash, but + * that implementation detail is outside our purview. + */ + private $hash; + + /** + * @var string + * Selected/preferred email address of the intended recipient. + */ + private $address; + + /** + * The full email message to send to this recipient (per alterMailParams). + * + * @var array + * @see MailParams + * @see \CRM_Utils_Hook::alterMailParams() + */ + private $mailParams = array(); + + /** + * FlexMailerTask constructor. + * + * @param int $eventQueueId + * A persistent record for this email delivery. + * @param int $contactId + * The ID of the recipiient. + * @param string $hash + * An authentication code. + * @param string $address + * Selected/preferred email address of the intended recipient. + */ + public function __construct( + $eventQueueId, + $contactId, + $hash, + $address + ) { + $this->eventQueueId = $eventQueueId; + $this->contactId = $contactId; + $this->hash = $hash; + $this->address = $address; + } + + /** + * @return int + * @see \CRM_Mailing_Event_DAO_Queue + */ + public function getEventQueueId() { + return $this->eventQueueId; + } + + /** + * @return int + * The ID of the recipiient. + * @see \CRM_Contact_DAO_Contact + */ + public function getContactId() { + return $this->contactId; + } + + /** + * @return string + * An authentication code. The name is misleading - it may be hash, but + * that implementation detail is outside our purview. + */ + public function getHash() { + return $this->hash; + } + + /** + * @return string + * Selected email address of the intended recipient. + */ + public function getAddress() { + return $this->address; + } + + /** + * @return bool + */ + public function hasContent() { + return !empty($this->mailParams['html']) || !empty($this->mailParams['text']); + } + + /** + * @return array + * @see CRM_Utils_Hook::alterMailParams + */ + public function getMailParams() { + return $this->mailParams; + } + + /** + * @param \array $mailParams + * @return FlexMailerTask + * @see CRM_Utils_Hook::alterMailParams + */ + public function setMailParams($mailParams) { + $this->mailParams = $mailParams; + return $this; + } + + /** + * @param string $key + * @param string $value + * @return $this + * @see CRM_Utils_Hook::alterMailParams + */ + public function setMailParam($key, $value) { + $this->mailParams[$key] = $value; + return $this; + } + + /** + * @param string $key + * @return string + * @see CRM_Utils_Hook::alterMailParams + */ + public function getMailParam($key) { + return isset($this->mailParams[$key]) ? $this->mailParams[$key] : NULL; + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/Abdicator.php b/civicrm/ext/flexmailer/src/Listener/Abdicator.php new file mode 100644 index 0000000000000000000000000000000000000000..5ec0077209bb605e5a1af33a2bf4a9daec67abf3 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/Abdicator.php @@ -0,0 +1,100 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\RunEvent; + +/** + * Class Abdicator + * @package Civi\FlexMailer\Listener + * + * FlexMailer is in incubation -- it's a heavily reorganized version + * of the old MailingJob::deliver*() functions. It hasn't been tested as + * thoroughly and may not have perfect parity. + * + * During incubation, we want to mostly step-aside -- for traditional + * mailings, simply continue using the old system. + */ +class Abdicator { + + /** + * @param \CRM_Mailing_BAO_Mailing $mailing + * @return bool + */ + public static function isFlexmailPreferred($mailing) { + if ($mailing->sms_provider_id) { + return FALSE; + } + + // Use FlexMailer for new-style email blasts (with custom `template_type`). + if ($mailing->template_type && $mailing->template_type !== 'traditional') { + return TRUE; + } + + switch (\Civi::settings()->get('flexmailer_traditional')) { + case 'auto': + // Transitional support for old hidden setting "experimentalFlexMailerEngine" (bool) + // TODO: Remove this. Maybe after Q4 2019. + // TODO: Change this to default to flexmailer + return (bool) \Civi::settings()->get('experimentalFlexMailerEngine'); + + case 'bao': + return FALSE; + + case 'flexmailer': + return TRUE; + + default: + throw new \RuntimeException("Unrecognized value for setting 'flexmailer_traditional'"); + } + } + + /** + * Abdicate; defer to the old system during delivery. + * + * @param \Civi\FlexMailer\Event\RunEvent $e + */ + public function onRun(RunEvent $e) { + if (self::isFlexmailPreferred($e->getMailing())) { + // OK, we'll continue running. + return; + } + + // Nope, we'll abdicate. + $e->stopPropagation(); + $isDelivered = $e->getJob()->deliver( + $e->context['deprecatedMessageMailer'], + $e->context['deprecatedTestParams'] + ); + $e->setCompleted($isDelivered); + } + + /** + * Abdicate; defer to the old system when checking completeness. + * + * @param \Civi\FlexMailer\Event\CheckSendableEvent $e + */ + public function onCheckSendable($e) { + if (self::isFlexmailPreferred($e->getMailing())) { + // OK, we'll continue running. + return; + } + + $e->stopPropagation(); + $errors = \CRM_Mailing_BAO_Mailing::checkSendable($e->getMailing()); + if (is_array($errors)) { + foreach ($errors as $key => $message) { + $e->setError($key, $message);; + } + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/Attachments.php b/civicrm/ext/flexmailer/src/Listener/Attachments.php new file mode 100644 index 0000000000000000000000000000000000000000..6b387a7de521f2637860a17209bbfaa9cd6ca1d6 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/Attachments.php @@ -0,0 +1,33 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class Attachments extends BaseListener { + + /** + * Add any attachments. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive()) { + return; + } + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $task->setMailParam('attachments', $e->getAttachments()); + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/BaseListener.php b/civicrm/ext/flexmailer/src/Listener/BaseListener.php new file mode 100644 index 0000000000000000000000000000000000000000..fb4a31b484b0df12e7642a8f0dc0c978d1a10af7 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/BaseListener.php @@ -0,0 +1,33 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +class BaseListener { + /** + * @var bool + */ + private $active = TRUE; + + /** + * @return bool + */ + public function isActive() { + return $this->active; + } + + /** + * @param bool $active + */ + public function setActive($active) { + $this->active = $active; + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/BasicHeaders.php b/civicrm/ext/flexmailer/src/Listener/BasicHeaders.php new file mode 100644 index 0000000000000000000000000000000000000000..025a165e4ec6444cd7144880e0ccabec03569e82 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/BasicHeaders.php @@ -0,0 +1,69 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class BasicHeaders extends BaseListener { + + /** + * Inject basic headers + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive()) { + return; + } + + $mailing = $e->getMailing(); + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + + if ($task->hasContent()) { + continue; + } + + list($verp) = $mailing->getVerpAndUrlsAndHeaders( + $e->getJob()->id, $task->getEventQueueId(), $task->getHash(), + $task->getAddress()); + + $mailParams = array(); + $mailParams['List-Unsubscribe'] = "<mailto:{$verp['unsubscribe']}>"; + \CRM_Mailing_BAO_Mailing::addMessageIdHeader($mailParams, 'm', $e->getJob()->id, $task->getEventQueueId(), $task->getHash()); + $mailParams['Precedence'] = 'bulk'; + $mailParams['job_id'] = $e->getJob()->id; + + $mailParams['From'] = "\"{$mailing->from_name}\" <{$mailing->from_email}>"; + + // This old behavior for choosing Reply-To feels flawed to me -- if + // the user has chosen a Reply-To that matches the From, then it uses VERP?! + // $mailParams['Reply-To'] = $verp['reply']; + // if ($mailing->replyto_email && ($mailParams['From'] != $mailing->replyto_email)) { + // $mailParams['Reply-To'] = $mailing->replyto_email; + // } + + if (!$mailing->override_verp) { + $mailParams['Reply-To'] = $verp['reply']; + } + elseif ($mailing->replyto_email && ($mailParams['From'] != $mailing->replyto_email)) { + $mailParams['Reply-To'] = $mailing->replyto_email; + } + + $task->setMailParams(array_merge( + $mailParams, + $task->getMailParams() + )); + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/BounceTracker.php b/civicrm/ext/flexmailer/src/Listener/BounceTracker.php new file mode 100644 index 0000000000000000000000000000000000000000..210fea22dfae19eccd0d38fe1e7067713f83b58f --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/BounceTracker.php @@ -0,0 +1,44 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class BounceTracker extends BaseListener { + + /** + * Inject bounce-tracking codes. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive()) { + return; + } + + $mailing = $e->getMailing(); + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + list($verp) = $mailing->getVerpAndUrlsAndHeaders( + $e->getJob()->id, $task->getEventQueueId(), $task->getHash(), + $task->getAddress()); + + if (!$task->getMailParam('Return-Path')) { + $task->setMailParam('Return-Path', $verp['bounce']); + } + if (!$task->getMailParam('X-CiviMail-Bounce')) { + $task->setMailParam('X-CiviMail-Bounce', $verp['bounce']); + } + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/DefaultBatcher.php b/civicrm/ext/flexmailer/src/Listener/DefaultBatcher.php new file mode 100644 index 0000000000000000000000000000000000000000..028f593c89d6c0d201334ff1a282cc62aab73ed0 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/DefaultBatcher.php @@ -0,0 +1,76 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\WalkBatchesEvent; +use Civi\FlexMailer\FlexMailerTask; + +class DefaultBatcher extends BaseListener { + + /** + * Given a MailingJob (`$e->getJob()`), enumerate the recipients as + * a batch of FlexMailerTasks and visit each batch (`$e->visit($tasks)`). + * + * @param \Civi\FlexMailer\Event\WalkBatchesEvent $e + */ + public function onWalk(WalkBatchesEvent $e) { + if (!$this->isActive()) { + return; + } + + $e->stopPropagation(); + + $job = $e->getJob(); + + // CRM-12376 + // This handles the edge case scenario where all the mails + // have been delivered in prior jobs. + $isDelivered = TRUE; + + // make sure that there's no more than $mailerBatchLimit mails processed in a run + $mailerBatchLimit = \CRM_Core_Config::singleton()->mailerBatchLimit; + + $eq = \CRM_Mailing_BAO_MailingJob::findPendingTasks($job->id, 'email'); + $tasks = array(); + while ($eq->fetch()) { + if ($mailerBatchLimit > 0 && \CRM_Mailing_BAO_MailingJob::$mailsProcessed >= $mailerBatchLimit) { + if (!empty($tasks)) { + $e->visit($tasks); + } + $eq->free(); + $e->setCompleted(FALSE); + return; + } + \CRM_Mailing_BAO_MailingJob::$mailsProcessed++; + + // FIXME: To support SMS, the address should be $eq->phone instead of $eq->email + $tasks[] = new FlexMailerTask($eq->id, $eq->contact_id, $eq->hash, + $eq->email); + if (count($tasks) == \CRM_Mailing_BAO_MailingJob::MAX_CONTACTS_TO_PROCESS) { + $isDelivered = $e->visit($tasks); + if (!$isDelivered) { + $eq->free(); + $e->setCompleted($isDelivered); + return; + } + $tasks = array(); + } + } + + $eq->free(); + + if (!empty($tasks)) { + $isDelivered = $e->visit($tasks); + } + $e->setCompleted($isDelivered); + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/DefaultComposer.php b/civicrm/ext/flexmailer/src/Listener/DefaultComposer.php new file mode 100644 index 0000000000000000000000000000000000000000..d9c61df4a2f97a03f478c8b5fbb7f5ca4fd42a73 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/DefaultComposer.php @@ -0,0 +1,216 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; +use Civi\FlexMailer\Event\RunEvent; +use Civi\FlexMailer\FlexMailerTask; +use Civi\Token\TokenProcessor; +use Civi\Token\TokenRow; + +/** + * Class DefaultComposer + * @package Civi\FlexMailer\Listener + * + * The DefaultComposer uses a TokenProcessor to generate all messages as + * a batch. + */ +class DefaultComposer extends BaseListener { + + public function onRun(RunEvent $e) { + // FIXME: This probably doesn't belong here... + if (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY) { + \CRM_Core_Smarty::registerStringResource(); + } + } + + /** + * Determine whether this composer knows how to handle this mailing. + * + * @param \CRM_Mailing_DAO_Mailing $mailing + * @return bool + */ + public function isSupported(\CRM_Mailing_DAO_Mailing $mailing) { + return TRUE; + } + + /** + * Given a mailing and a batch of recipients, prepare + * the individual messages (headers and body) for each. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive() || !$this->isSupported($e->getMailing())) { + return; + } + + $tp = new TokenProcessor(\Civi::service('dispatcher'), + $this->createTokenProcessorContext($e)); + + $tpls = $this->createMessageTemplates($e); + $tp->addMessage('subject', $tpls['subject'], 'text/plain'); + $tp->addMessage('body_text', isset($tpls['text']) ? $tpls['text'] : '', + 'text/plain'); + $tp->addMessage('body_html', isset($tpls['html']) ? $tpls['html'] : '', + 'text/html'); + + $hasContent = FALSE; + foreach ($e->getTasks() as $key => $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + if (!$task->hasContent()) { + $tp->addRow()->context($this->createTokenRowContext($e, $task)); + $hasContent = TRUE; + } + } + + if (!$hasContent) { + return; + } + + $tp->evaluate(); + + foreach ($tp->getRows() as $row) { + /** @var \Civi\Token\TokenRow $row */ + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $task = $row->context['flexMailerTask']; + $task->setMailParams(array_merge( + $this->createMailParams($e, $task, $row), + $task->getMailParams() + )); + } + } + + /** + * Define the contextual parameters for the token-processor. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @return array + */ + public function createTokenProcessorContext(ComposeBatchEvent $e) { + $context = array( + 'controller' => get_class($this), + // FIXME: Use template_type, template_options + 'smarty' => defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY ? TRUE : FALSE, + 'mailing' => $e->getMailing(), + 'mailingId' => $e->getMailing()->id, + ); + return $context; + } + + /** + * Create contextual data for a message recipient. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @param \Civi\FlexMailer\FlexMailerTask $task + * @return array + * Contextual data describing the recipient. + * Typical values are `contactId` or `mailingJobId`. + */ + public function createTokenRowContext( + ComposeBatchEvent $e, + FlexMailerTask $task + ) { + return array( + 'contactId' => $task->getContactId(), + 'mailingJobId' => $e->getJob()->id, + 'mailingActionTarget' => array( + 'id' => $task->getEventQueueId(), + 'hash' => $task->getHash(), + 'email' => $task->getAddress(), + ), + 'flexMailerTask' => $task, + ); + } + + /** + * For a given task, prepare the mailing. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @param \Civi\FlexMailer\FlexMailerTask $task + * @param \Civi\Token\TokenRow $row + * @return array + * A list of email parameters, such as "Subject", "text", and/or "html". + * @see \CRM_Utils_Hook::alterMailParams + */ + public function createMailParams( + ComposeBatchEvent $e, + FlexMailerTask $task, + TokenRow $row + ) { + return array( + 'Subject' => $row->render('subject'), + 'text' => $row->render('body_text'), + 'html' => $row->render('body_html'), + ); + } + + /** + * Generate the message templates for use with token-processor. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @return array + * A list of templates. Some combination of: + * - subject: string + * - html: string + * - text: string + */ + public function createMessageTemplates(ComposeBatchEvent $e) { + $templates = $e->getMailing()->getTemplates(); + if ($this->isClickTracking($e)) { + $templates = $this->applyClickTracking($e, $templates); + } + return $templates; + } + + /** + * (Tentative) Alter hyperlinks to perform click-tracking. + * + * This functionality probably belongs somewhere else. The + * current placement feels quirky, and it's hard to inspect + * via `cv debug:event-dispatcher', but it produces the expected + * interactions among tokens and click-tracking. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @param array $templates + * @return array + * Updated templates. + */ + protected function applyClickTracking(ComposeBatchEvent $e, $templates) { + $mailing = $e->getMailing(); + + if (!empty($templates['html'])) { + $templates['html'] = \Civi::service('civi_flexmailer_html_click_tracker') + ->filterContent($templates['html'], $mailing->id, + '{action.eventQueueId}'); + } + if (!empty($templates['text'])) { + $templates['text'] = \Civi::service('civi_flexmailer_text_click_tracker') + ->filterContent($templates['text'], $mailing->id, + '{action.eventQueueId}'); + } + + return $templates; + } + + /** + * Determine whether to enable click-tracking. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @return bool + */ + public function isClickTracking(ComposeBatchEvent $e) { + // Don't track clicks on previews. Doing so would accumulate a lot + // of garbage data. + return $e->getMailing()->url_tracking && !$e->isPreview(); + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/DefaultSender.php b/civicrm/ext/flexmailer/src/Listener/DefaultSender.php new file mode 100644 index 0000000000000000000000000000000000000000..8b20485a8c2b20e1314a0969475fa31ed431263b --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/DefaultSender.php @@ -0,0 +1,202 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\SendBatchEvent; + +class DefaultSender extends BaseListener { + const BULK_MAIL_INSERT_COUNT = 10; + + public function onSend(SendBatchEvent $e) { + static $smtpConnectionErrors = 0; + + if (!$this->isActive()) { + return; + } + + $e->stopPropagation(); + + $job = $e->getJob(); + $mailing = $e->getMailing(); + $job_date = \CRM_Utils_Date::isoToMysql($job->scheduled_date); + $mailer = \Civi::service('pear_mail'); + + $targetParams = $deliveredParams = array(); + $count = 0; + $retryBatch = FALSE; + + foreach ($e->getTasks() as $key => $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + /** @var \Mail_mime $message */ + if (!$task->hasContent()) { + continue; + } + + $message = \Civi\FlexMailer\MailParams::convertMailParamsToMime($task->getMailParams()); + + if (empty($message)) { + // lets keep the message in the queue + // most likely a permissions related issue with smarty templates + // or a bad contact id? CRM-9833 + continue; + } + + // disable error reporting on real mailings (but leave error reporting for tests), CRM-5744 + if ($job_date) { + $errorScope = \CRM_Core_TemporaryErrorScope::ignoreException(); + } + + $headers = $message->headers(); + $result = $mailer->send($headers['To'], $message->headers(), $message->get()); + + if ($job_date) { + unset($errorScope); + } + + if (is_a($result, 'PEAR_Error')) { + /** @var \PEAR_Error $result */ + // CRM-9191 + $message = $result->getMessage(); + if ($this->isTemporaryError($result->getMessage())) { + // lets log this message and code + $code = $result->getCode(); + \CRM_Core_Error::debug_log_message("SMTP Socket Error or failed to set sender error. Message: $message, Code: $code"); + + // these are socket write errors which most likely means smtp connection errors + // lets skip them and reconnect. + $smtpConnectionErrors++; + if ($smtpConnectionErrors <= 5) { + $mailer->disconnect(); + $retryBatch = TRUE; + continue; + } + + // seems like we have too many of them in a row, we should + // write stuff to disk and abort the cron job + $job->writeToDB($deliveredParams, $targetParams, $mailing, $job_date); + + \CRM_Core_Error::debug_log_message("Too many SMTP Socket Errors. Exiting"); + \CRM_Utils_System::civiExit(); + } + else { + $this->recordBounce($job, $task, $result->getMessage()); + } + } + else { + // Register the delivery event. + $deliveredParams[] = $task->getEventQueueId(); + $targetParams[] = $task->getContactId(); + + $count++; + if ($count % self::BULK_MAIL_INSERT_COUNT == 0) { + $job->writeToDB($deliveredParams, $targetParams, $mailing, $job_date); + $count = 0; + + // hack to stop mailing job at run time, CRM-4246. + // to avoid making too many DB calls for this rare case + // lets do it when we snapshot + $status = \CRM_Core_DAO::getFieldValue( + 'CRM_Mailing_DAO_MailingJob', + $job->id, + 'status', + 'id', + TRUE + ); + + if ($status != 'Running') { + $e->setCompleted(FALSE); + return; + } + } + } + + unset($result); + + // seems like a successful delivery or bounce, lets decrement error count + // only if we have smtp connection errors + if ($smtpConnectionErrors > 0) { + $smtpConnectionErrors--; + } + + // If we have enabled the Throttle option, this is the time to enforce it. + $mailThrottleTime = \CRM_Core_Config::singleton()->mailThrottleTime; + if (!empty($mailThrottleTime)) { + usleep((int) $mailThrottleTime); + } + } + + $completed = $job->writeToDB( + $deliveredParams, + $targetParams, + $mailing, + $job_date + ); + if ($retryBatch) { + $completed = FALSE; + } + $e->setCompleted($completed); + } + + /** + * Determine if an SMTP error is temporary or permanent. + * + * @param string $message + * PEAR error message. + * @return bool + * TRUE - Temporary/retriable error + * FALSE - Permanent/non-retriable error + */ + protected function isTemporaryError($message) { + // SMTP response code is buried in the message. + $code = preg_match('/ \(code: (.+), response: /', $message, $matches) ? $matches[1] : ''; + + if (strpos($message, 'Failed to write to socket') !== FALSE) { + return TRUE; + } + + // Register 5xx SMTP response code (permanent failure) as bounce. + if (isset($code[0]) && $code[0] === '5') { + return FALSE; + } + + if (strpos($message, 'Failed to set sender') !== FALSE) { + return TRUE; + } + + if (strpos($message, 'Failed to add recipient') !== FALSE) { + return TRUE; + } + + if (strpos($message, 'Failed to send data') !== FALSE) { + return TRUE; + } + + return FALSE; + } + + /** + * @param \CRM_Mailing_BAO_MailingJob $job + * @param \Civi\FlexMailer\FlexMailerTask $task + * @param string $errorMessage + */ + protected function recordBounce($job, $task, $errorMessage) { + $params = array( + 'event_queue_id' => $task->getEventQueueId(), + 'job_id' => $job->id, + 'hash' => $task->getHash(), + ); + $params = array_merge($params, + \CRM_Mailing_BAO_BouncePattern::match($errorMessage) + ); + \CRM_Mailing_Event_BAO_Bounce::create($params); + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/HookAdapter.php b/civicrm/ext/flexmailer/src/Listener/HookAdapter.php new file mode 100644 index 0000000000000000000000000000000000000000..53d3aa4f8b96998949e3820a2e3db4d6c4772415 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/HookAdapter.php @@ -0,0 +1,37 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class HookAdapter extends BaseListener { + + /** + * Expose to hook_civicrm_alterMailParams. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive()) { + return; + } + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $mailParams = $task->getMailParams(); + if ($mailParams) { + \CRM_Utils_Hook::alterMailParams($mailParams, 'flexmailer'); + $task->setMailParams($mailParams); + } + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/OpenTracker.php b/civicrm/ext/flexmailer/src/Listener/OpenTracker.php new file mode 100644 index 0000000000000000000000000000000000000000..1e0dc8460931e03a465b4c0ed6a761aa090959a3 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/OpenTracker.php @@ -0,0 +1,48 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class OpenTracker extends BaseListener { + + /** + * Inject open-tracking codes. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive() || !$e->getMailing()->open_tracking) { + return; + } + + $config = \CRM_Core_Config::singleton(); + + // TODO: After v5.21 goes EOL, remove the $isLegacy check. + $isLegacy = version_compare(\CRM_Utils_System::version(), '5.23.alpha', '<'); + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $mailParams = $task->getMailParams(); + + if (!empty($mailParams) && !empty($mailParams['html'])) { + $openUrl = $isLegacy + ? $config->userFrameworkResourceURL . "extern/open.php?q=" . $task->getEventQueueId() + : \CRM_Utils_System::externUrl('extern/open', "q=" . $task->getEventQueueId()); + + $mailParams['html'] .= "\n" . '<img src="' . htmlentities($openUrl) . "\" width='1' height='1' alt='' border='0'>"; + + $task->setMailParams($mailParams); + } + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/RequiredFields.php b/civicrm/ext/flexmailer/src/Listener/RequiredFields.php new file mode 100644 index 0000000000000000000000000000000000000000..a109b26728fc89d7e402ab5dc8b03a86f3557598 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/RequiredFields.php @@ -0,0 +1,109 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use CRM_Flexmailer_ExtensionUtil as E; +use Civi\FlexMailer\Event\CheckSendableEvent; + +/** + * Class RequiredFields + * @package Civi\FlexMailer\Listener + * + * The RequiredFields listener checks that all mandatory fields have a value. + */ +class RequiredFields extends BaseListener { + + /** + * @var array + * Ex: array('subject', 'from_name', '(body_html|body_text)'). + */ + private $fields; + + /** + * RequiredFields constructor. + * @param array $fields + */ + public function __construct($fields) { + $this->fields = $fields; + } + + /** + * Check for required fields. + * + * @param \Civi\FlexMailer\Event\CheckSendableEvent $e + */ + public function onCheckSendable(CheckSendableEvent $e) { + if (!$this->isActive()) { + return; + } + + foreach ($this->fields as $field) { + // Parentheses indicate multiple options. Ex: '(body_html|body_text)' + if ($field[0] === '(') { + $alternatives = explode('|', substr($field, 1, -1)); + $fieldTitle = implode(' or ', array_map(function ($x) { + return "\"$x\""; + }, $alternatives)); + $found = $this->hasAny($e->getMailing(), $alternatives); + } + else { + $fieldTitle = "\"$field\""; + $found = !empty($e->getMailing()->{$field}); + } + + if (!$found) { + $e->setError($field, E::ts('Field %1 is required.', array( + 1 => $fieldTitle, + ))); + } + unset($found); + } + } + + /** + * Determine if $object has any of the given properties. + * + * @param mixed $object + * @param array $alternatives + * @return bool + */ + protected function hasAny($object, $alternatives) { + foreach ($alternatives as $alternative) { + if (!empty($object->{$alternative})) { + return TRUE; + } + } + return FALSE; + } + + /** + * Get the list of required fields. + * + * @return array + * Ex: array('subject', 'from_name', '(body_html|body_text)'). + */ + public function getFields() { + return $this->fields; + } + + /** + * Set the list of required fields. + * + * @param array $fields + * Ex: array('subject', 'from_name', '(body_html|body_text)'). + * @return RequiredFields + */ + public function setFields($fields) { + $this->fields = $fields; + return $this; + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/RequiredTokens.php b/civicrm/ext/flexmailer/src/Listener/RequiredTokens.php new file mode 100644 index 0000000000000000000000000000000000000000..e627243c977ff23712f7002518027fd4ce13e884 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/RequiredTokens.php @@ -0,0 +1,157 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use CRM_Flexmailer_ExtensionUtil as E; +use Civi\FlexMailer\Event\CheckSendableEvent; + +/** + * Class RequiredTokens + * @package Civi\FlexMailer\Listener + * + * The RequiredTokens listener checks draft mailings for traditional + * CiviMail tokens like `{action.unsubscribeUrl}`, which are often required + * to comply with anti-spam regulations. + */ +class RequiredTokens extends BaseListener { + + /** + * @var array + * Ex: array('domain.address' => ts('The organizational postal address')) + */ + private $requiredTokens; + + /** + * @var array + * + * List of template-types for which we are capable of enforcing token + * requirements. + */ + private $templateTypes; + + /** + * RequiredTokens constructor. + * + * @param array $templateTypes + * Ex: array('traditional'). + * @param array $requiredTokens + * Ex: array('domain.address' => ts('The organizational postal address')) + */ + public function __construct($templateTypes, $requiredTokens) { + $this->templateTypes = $templateTypes; + $this->requiredTokens = $requiredTokens; + } + + /** + * Check for required fields. + * + * @param \Civi\FlexMailer\Event\CheckSendableEvent $e + */ + public function onCheckSendable(CheckSendableEvent $e) { + if (!$this->isActive()) { + return; + } + if (\Civi::settings()->get('disable_mandatory_tokens_check')) { + return; + } + if (!in_array($e->getMailing()->template_type, $this->getTemplateTypes())) { + return; + } + + foreach (array('body_html', 'body_text') as $field) { + $str = $e->getFullBody($field); + if (empty($str)) { + continue; + } + foreach ($this->findMissingTokens($str) as $token => $desc) { + $e->setError("{$field}:{$token}", E::ts('This message is missing a required token - {%1}: %2', + array(1 => $token, 2 => $desc) + )); + } + } + } + + public function findMissingTokens($str) { + $missing = array(); + foreach ($this->getRequiredTokens() as $token => $value) { + if (!is_array($value)) { + if (!preg_match('/(^|[^\{])' . preg_quote('{' . $token . '}') . '/', $str)) { + $missing[$token] = $value; + } + } + else { + $present = FALSE; + $desc = NULL; + foreach ($value as $t => $d) { + $desc = $d; + if (preg_match('/(^|[^\{])' . preg_quote('{' . $t . '}') . '/', $str)) { + $present = TRUE; + } + } + if (!$present) { + $missing[$token] = $desc; + } + } + } + return $missing; + } + + /** + * @return array + * Ex: array('domain.address' => ts('The organizational postal address')) + */ + public function getRequiredTokens() { + return $this->requiredTokens; + } + + /** + * @param array $requiredTokens + * Ex: array('domain.address' => ts('The organizational postal address')) + * @return RequiredTokens + */ + public function setRequiredTokens($requiredTokens) { + $this->requiredTokens = $requiredTokens; + return $this; + } + + /** + * @return array + * Ex: array('traditional'). + */ + public function getTemplateTypes() { + return $this->templateTypes; + } + + /** + * Set the list of template-types for which we check tokens. + * + * @param array $templateTypes + * Ex: array('traditional'). + * @return RequiredTokens + */ + public function setTemplateTypes($templateTypes) { + $this->templateTypes = $templateTypes; + return $this; + } + + /** + * Add to the list of template-types for which we check tokens. + * + * @param array $templateTypes + * Ex: array('traditional'). + * @return RequiredTokens + */ + public function addTemplateTypes($templateTypes) { + $this->templateTypes = array_unique(array_merge($this->templateTypes, $templateTypes)); + return $this; + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/SimpleFilter.php b/civicrm/ext/flexmailer/src/Listener/SimpleFilter.php new file mode 100644 index 0000000000000000000000000000000000000000..4d0f1a5571f7fed7fc9b5bf5b3ab65864be2f42d --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/SimpleFilter.php @@ -0,0 +1,85 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +/** + * Class SimpleFilter + * @package Civi\FlexMailer\Listener + * + * Provides a slightly sugary utility for writing a filter + * that applies to email content. + * + * Note: This class is not currently used within org.civicrm.flexmailer, but + * it ma ybe used by other extensions. + */ +class SimpleFilter { + + /** + * Apply a filter function to each instance of a property of an email. + * + * This variant visits each value one-by-one. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @param string $field + * The name of a MailParam field. + * @param mixed $filter + * Function($value, FlexMailerTask $task, ComposeBatchEvent $e). + * The function returns a filtered value. + * @throws \CRM_Core_Exception + * @see \CRM_Utils_Hook::alterMailParams + */ + public static function byValue(ComposeBatchEvent $e, $field, $filter) { + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $value = $task->getMailParam($field); + if ($value !== NULL) { + $task->setMailParam($field, call_user_func($filter, $value, $task, $e)); + } + } + } + + /** + * Apply a filter function to a property of all email messages. + * + * This variant visits the values as a big array. This makes it + * amenable to batch-mode filtering in preg_replace or preg_replace_callback. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + * @param string $field + * The name of a MailParam field. + * @param mixed $filter + * Function($values, ComposeBatchEvent $e). + * Return a modified list of values. + * @throws \CRM_Core_Exception + * @see \CRM_Utils_Hook::alterMailParams + */ + public static function byColumn(ComposeBatchEvent $e, $field, $filter) { + $tasks = $e->getTasks(); + $values = array(); + + foreach ($tasks as $k => $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $value = $task->getMailParam($field); + if ($value !== NULL) { + $values[$k] = $value; + } + } + + $values = call_user_func_array($filter, array($values, $e)); + + foreach ($values as $k => $value) { + $tasks[$k]->setMailParam($field, $value); + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/TestPrefix.php b/civicrm/ext/flexmailer/src/Listener/TestPrefix.php new file mode 100644 index 0000000000000000000000000000000000000000..b81bb03852230373efe488f51522eb89acf1485f --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/TestPrefix.php @@ -0,0 +1,35 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class TestPrefix extends BaseListener { + + /** + * For any test mailings, the "Subject:" should have a prefix. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive() || !$e->getJob()->is_test) { + return; + } + + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $subject = $task->getMailParam('Subject'); + $subject = ts('[CiviMail Draft]') . ' ' . $subject; + $task->setMailParam('Subject', $subject); + } + } + +} diff --git a/civicrm/ext/flexmailer/src/Listener/ToHeader.php b/civicrm/ext/flexmailer/src/Listener/ToHeader.php new file mode 100644 index 0000000000000000000000000000000000000000..a85a36139bb73d19236068974485b50f677ac5af --- /dev/null +++ b/civicrm/ext/flexmailer/src/Listener/ToHeader.php @@ -0,0 +1,72 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\Event\ComposeBatchEvent; + +class ToHeader extends BaseListener { + + /** + * Inject the "To:" header. + * + * @param \Civi\FlexMailer\Event\ComposeBatchEvent $e + */ + public function onCompose(ComposeBatchEvent $e) { + if (!$this->isActive()) { + return; + } + + $names = $this->getContactNames($e->getTasks()); + foreach ($e->getTasks() as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + + $task->setMailParam('toEmail', $task->getAddress()); + + if (isset($names[$task->getContactId()])) { + $task->setMailParam('toName', $names[$task->getContactId()]); + } + else { + $task->setMailParam('toName', ''); + } + } + } + + /** + * Lookup contact names as a batch. + * + * @param array<FlexMailerTask> $tasks + * @return array + * Array(int $contactId => string $displayName). + */ + protected function getContactNames($tasks) { + $ids = array(); + foreach ($tasks as $task) { + /** @var \Civi\FlexMailer\FlexMailerTask $task */ + $ids[$task->getContactId()] = $task->getContactId(); + } + + $ids = array_filter($ids, 'is_numeric'); + if (empty($ids)) { + return array(); + } + + $idString = implode(',', $ids); + + $query = \CRM_Core_DAO::executeQuery( + "SELECT id, display_name FROM civicrm_contact WHERE id in ($idString)"); + $names = array(); + while ($query->fetch()) { + $names[$query->id] = $query->display_name; + } + return $names; + } + +} diff --git a/civicrm/ext/flexmailer/src/MailParams.php b/civicrm/ext/flexmailer/src/MailParams.php new file mode 100644 index 0000000000000000000000000000000000000000..b7880e32d74ad2da990713144afdfe1288ffe620 --- /dev/null +++ b/civicrm/ext/flexmailer/src/MailParams.php @@ -0,0 +1,101 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +/** + * Class MailParams + * + * Within CiviMail, we have a few competing data-structures to chose from when + * representing a mail message: + * + * - ezcMail + * - Mail_mime + * - $mailParams (from Hook::alterMailParams) + * + * The $mailParams data-structure is probably the quirkiest, but it's also + * the one for which we have the strongest obligation (e.g. it's part of + * a published hook). This class includes helper functions for + * converting or validating the $mailParams format. + * + * @see \CRM_Utils_Hook::alterMailParams + */ +class MailParams { + + /** + * Convert from "mail params" to PEAR's Mail_mime. + * + * The data-structure which represents a message for purposes of + * hook_civicrm_alterMailParams does not match the data structure for + * Mail_mime. + * + * @param array $mailParams + * @return \Mail_mime + * @see \CRM_Utils_Hook::alterMailParams + */ + public static function convertMailParamsToMime($mailParams) { + // The general assumption is that key-value pairs in $mailParams should + // pass through as email headers, but there are several special-cases + // (e.g. 'toName', 'toEmail', 'text', 'html', 'attachments', 'headers'). + + $message = new \Mail_mime("\n"); + + // 1. Consolidate: 'toName' and 'toEmail' should be 'To'. + $toName = trim($mailParams['toName']); + $toEmail = trim($mailParams['toEmail']); + if ($toName == $toEmail || strpos($toName, '@') !== FALSE) { + $toName = NULL; + } + else { + $toName = \CRM_Utils_Mail::formatRFC2822Name($toName); + } + unset($mailParams['toName']); + unset($mailParams['toEmail']); + $mailParams['To'] = "$toName <$toEmail>"; + + // 2. Apply the other fields. + foreach ($mailParams as $key => $value) { + if (empty($value)) { + continue; + } + + switch ($key) { + case 'text': + $message->setTxtBody($mailParams['text']); + break; + + case 'html': + $message->setHTMLBody($mailParams['html']); + break; + + case 'attachments': + foreach ($mailParams['attachments'] as $fileID => $attach) { + $message->addAttachment($attach['fullPath'], + $attach['mime_type'], + $attach['cleanName'] + ); + } + break; + + case 'headers': + $message->headers($value); + break; + + default: + $message->headers(array($key => $value), TRUE); + } + } + + \CRM_Utils_Mail::setMimeParams($message); + + return $message; + } + +} diff --git a/civicrm/ext/flexmailer/src/Services.php b/civicrm/ext/flexmailer/src/Services.php new file mode 100644 index 0000000000000000000000000000000000000000..9be823e167c0f5d27b70e45acc7cbdfa0db30451 --- /dev/null +++ b/civicrm/ext/flexmailer/src/Services.php @@ -0,0 +1,143 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; +use Civi\FlexMailer\FlexMailer as FM; + +/** + * Class Services + * @package Civi\FlexMailer + * + * Manage the setup of any services used by FlexMailer. + */ +class Services { + + public static function registerServices(ContainerBuilder $container) { + $container->addResource(new \Symfony\Component\Config\Resource\FileResource(__FILE__)); + + $apiOverrides = $container->setDefinition('civi_flexmailer_api_overrides', new Definition('Civi\API\Provider\ProviderInterface'))->setPublic(TRUE); + self::applyStaticFactory($apiOverrides, __CLASS__, 'createApiOverrides'); + + $container->setDefinition('civi_flexmailer_required_fields', new Definition('Civi\FlexMailer\Listener\RequiredFields', array( + array( + 'subject', + 'name', + 'from_name', + 'from_email', + '(body_html|body_text)', + ), + )))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_required_tokens', new Definition('Civi\FlexMailer\Listener\RequiredTokens', array( + array('traditional'), + array( + 'domain.address' => ts("Domain address - displays your organization's postal address."), + 'action.optOutUrl or action.unsubscribeUrl' => array( + 'action.optOut' => ts("'Opt out via email' - displays an email address for recipients to opt out of receiving emails from your organization."), + 'action.optOutUrl' => ts("'Opt out via web page' - creates a link for recipients to click if they want to opt out of receiving emails from your organization. Alternatively, you can include the 'Opt out via email' token."), + 'action.unsubscribe' => ts("'Unsubscribe via email' - displays an email address for recipients to unsubscribe from the specific mailing list used to send this message."), + 'action.unsubscribeUrl' => ts("'Unsubscribe via web page' - creates a link for recipients to unsubscribe from the specific mailing list used to send this message. Alternatively, you can include the 'Unsubscribe via email' token or one of the Opt-out tokens."), + ), + ), + )))->setPublic(TRUE); + + $container->setDefinition('civi_flexmailer_abdicator', new Definition('Civi\FlexMailer\Listener\Abdicator'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_default_batcher', new Definition('Civi\FlexMailer\Listener\DefaultBatcher'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_default_composer', new Definition('Civi\FlexMailer\Listener\DefaultComposer'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_open_tracker', new Definition('Civi\FlexMailer\Listener\OpenTracker'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_basic_headers', new Definition('Civi\FlexMailer\Listener\BasicHeaders'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_to_header', new Definition('Civi\FlexMailer\Listener\ToHeader'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_attachments', new Definition('Civi\FlexMailer\Listener\Attachments'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_bounce_tracker', new Definition('Civi\FlexMailer\Listener\BounceTracker'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_default_sender', new Definition('Civi\FlexMailer\Listener\DefaultSender'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_hooks', new Definition('Civi\FlexMailer\Listener\HookAdapter'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_test_prefix', new Definition('Civi\FlexMailer\Listener\TestPrefix'))->setPublic(TRUE); + + $container->setDefinition('civi_flexmailer_html_click_tracker', new Definition('Civi\FlexMailer\ClickTracker\HtmlClickTracker'))->setPublic(TRUE); + $container->setDefinition('civi_flexmailer_text_click_tracker', new Definition('Civi\FlexMailer\ClickTracker\TextClickTracker'))->setPublic(TRUE); + + foreach (self::getListenerSpecs() as $listenerSpec) { + $container->findDefinition('dispatcher')->addMethodCall('addListenerService', $listenerSpec); + } + + $container->findDefinition('civi_api_kernel')->addMethodCall('registerApiProvider', array(new Reference('civi_flexmailer_api_overrides'))); + } + + /** + * Get a list of listeners required for FlexMailer. + * + * This is a standalone, private function because we're experimenting + * with how exactly to handle the registration -- e.g. via + * `registerServices()` or via `registerListeners()`. + * + * @return array + * Arguments to pass to addListenerService($eventName, $callbackSvc, $priority). + */ + protected static function getListenerSpecs() { + $listenerSpecs = array(); + + $listenerSpecs[] = array(Validator::EVENT_CHECK_SENDABLE, array('civi_flexmailer_abdicator', 'onCheckSendable'), FM::WEIGHT_START); + $listenerSpecs[] = array(Validator::EVENT_CHECK_SENDABLE, array('civi_flexmailer_required_fields', 'onCheckSendable'), FM::WEIGHT_MAIN); + $listenerSpecs[] = array(Validator::EVENT_CHECK_SENDABLE, array('civi_flexmailer_required_tokens', 'onCheckSendable'), FM::WEIGHT_MAIN); + + $listenerSpecs[] = array(FM::EVENT_RUN, array('civi_flexmailer_default_composer', 'onRun'), FM::WEIGHT_MAIN); + $listenerSpecs[] = array(FM::EVENT_RUN, array('civi_flexmailer_abdicator', 'onRun'), FM::WEIGHT_END); + + $listenerSpecs[] = array(FM::EVENT_WALK, array('civi_flexmailer_default_batcher', 'onWalk'), FM::WEIGHT_END); + + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_basic_headers', 'onCompose'), FM::WEIGHT_PREPARE); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_to_header', 'onCompose'), FM::WEIGHT_PREPARE); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_bounce_tracker', 'onCompose'), FM::WEIGHT_PREPARE); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_default_composer', 'onCompose'), FM::WEIGHT_MAIN - 100); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_attachments', 'onCompose'), FM::WEIGHT_ALTER); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_open_tracker', 'onCompose'), FM::WEIGHT_ALTER); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_test_prefix', 'onCompose'), FM::WEIGHT_ALTER); + $listenerSpecs[] = array(FM::EVENT_COMPOSE, array('civi_flexmailer_hooks', 'onCompose'), FM::WEIGHT_ALTER - 100); + + $listenerSpecs[] = array(FM::EVENT_SEND, array('civi_flexmailer_default_sender', 'onSend'), FM::WEIGHT_END); + + return $listenerSpecs; + } + + /** + * Tap into the API kernel and override some of the core APIs. + * + * @return \Civi\API\Provider\AdhocProvider + */ + public static function createApiOverrides() { + $provider = new \Civi\API\Provider\AdhocProvider(3, 'Mailing'); + // FIXME: stay in sync with upstream perms + $provider->addAction('preview', 'access CiviMail', '\Civi\FlexMailer\API\MailingPreview::preview'); + return $provider; + } + + /** + * Adapter for using factory methods in old+new versions of Symfony. + * + * @param \Symfony\Component\DependencyInjection\Definition $def + * @param string $factoryClass + * @param string $factoryMethod + * @return \Symfony\Component\DependencyInjection\Definition + * @deprecated + */ + protected static function applyStaticFactory($def, $factoryClass, $factoryMethod) { + if (method_exists($def, 'setFactory')) { + $def->setFactory(array($factoryClass, $factoryMethod)); + } + else { + $def->setFactoryClass($factoryClass)->setFactoryMethod($factoryMethod); + } + return $def; + } + +} diff --git a/civicrm/ext/flexmailer/src/Validator.php b/civicrm/ext/flexmailer/src/Validator.php new file mode 100644 index 0000000000000000000000000000000000000000..f0818634d3b6f85c8191d138044bd04b1d7babca --- /dev/null +++ b/civicrm/ext/flexmailer/src/Validator.php @@ -0,0 +1,70 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +use Civi\FlexMailer\Event\CheckSendableEvent; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + +/** + * Class Validator + * @package Civi\FlexMailer + * + * The *validator* determines whether a mailing is completely specified + * (sendable). If not, delivery should be blocked. + */ +class Validator { + + const EVENT_CHECK_SENDABLE = 'civi.flexmailer.checkSendable'; + + /** + * @param \CRM_Mailing_DAO_Mailing $mailing + * The mailing which may or may not be sendable. + * @return array + * List of error messages. + */ + public static function createAndRun($mailing) { + $validator = new \Civi\FlexMailer\Validator(); + return $validator->run(array( + 'mailing' => $mailing, + 'attachments' => \CRM_Core_BAO_File::getEntityFile('civicrm_mailing', $mailing->id), + )); + } + + /** + * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface + */ + private $dispatcher; + + /** + * FlexMailer constructor. + * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher + */ + public function __construct(EventDispatcherInterface $dispatcher = NULL) { + $this->dispatcher = $dispatcher ? $dispatcher : \Civi::service('dispatcher'); + } + + /** + * @param array $context + * An array which must define options: + * - mailing: \CRM_Mailing_BAO_Mailing + * - attachments: array + * @return array + * List of error messages. + * Ex: array('subject' => 'The Subject field is blank'). + * Example keys: 'subject', 'name', 'from_name', 'from_email', 'body', 'body_html:unsubscribeUrl'. + */ + public function run($context) { + $checkSendable = new CheckSendableEvent($context); + $this->dispatcher->dispatch(static::EVENT_CHECK_SENDABLE, $checkSendable); + return $checkSendable->getErrors(); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a486daed2e2a482162a77c13b5e7a781749a1052 --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php @@ -0,0 +1,90 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\ClickTracker\HtmlClickTracker; + +/** + * Class HtmlClickTrackerTest + * + * @group headless + */ +class HtmlClickTrackerTest extends \CiviUnitTestCase { + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + } + + public function getHrefExamples() { + $exs = []; + + // For each example, the test-harness will useHtmlClickTracker to wrap the URL in "tracking(...)". + + $exs[] = [ + // Basic case + '<p><a href="http://example.com/">Foo</a></p>', + '<p><a href="tracking(http://example.com/)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL + '<p><a href=\'https://sub.example.com/foo.php?whiz=%2Fbang%2F&pie[fruit]=apple\'>Foo</a></p>', + '<p><a href=\'tracking(https://sub.example.com/foo.php?whiz=%2Fbang%2F&pie[fruit]=apple)\' rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, designed to trip-up quote handling + '<p><a href="javascript:alert(\'Cheese\')">Foo</a></p>', + '<p><a href="tracking(javascript:alert(\'Cheese\'))" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, designed to trip-up quote handling + '<p><a href=\'javascript:alert("Cheese")\'>Foo</a></p>', + '<p><a href=\'tracking(javascript:alert("Cheese"))\' rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, funny whitespace + '<p><a href="http://example.com/' . "\n" . 'weird">Foo</a></p>', + '<p><a href="tracking(http://example.com/' . "\n" . 'weird)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, funny whitespace + '<p><a href="http://example.com?utm_medium=email&utm_detail=hello">Foo</a></p>', + '<p><a href="tracking(http://example.com?utm_medium=email&utm_detail=hello)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Many different URLs + '<p><a href="http://example.com/1">First</a><a href="http://example.com/2">Second</a><a href=\'http://example.com/3\'>Third</a><a href="http://example.com/4">Fourth</a></p>', + '<p><a href="tracking(http://example.com/1)" rel=\'nofollow\'>First</a><a href="tracking(http://example.com/2)" rel=\'nofollow\'>Second</a><a href=\'tracking(http://example.com/3)\' rel=\'nofollow\'>Third</a><a href="tracking(http://example.com/4)" rel=\'nofollow\'>Fourth</a></p>', + ]; + + return $exs; + } + + /** + * @param $inputHtml + * @param $expectHtml + * @dataProvider getHrefExamples + */ + public function testReplaceHref($inputHtml, $expectHtml) { + $actual = HtmlClickTracker::replaceHrefUrls($inputHtml, function($url) { + return "tracking($url)"; + }); + + $this->assertEquals($expectHtml, $actual, "Check substitutions on text ($inputHtml)"); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a99ac5473e987fc3eb018b743198e693f34df08c --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php @@ -0,0 +1,93 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +use Civi\FlexMailer\ClickTracker\TextClickTracker; + +/** + * Class HtmlClickTrackerTest + * + * @group headless + */ +class TextClickTrackerTest extends \CiviUnitTestCase { + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + } + + public function getHrefExamples() { + $exs = []; + + // For each example, the test-harness will useHtmlClickTracker to wrap the URL in "tracking(...)". + + $exs[] = [ + // Basic case + '<p><a href="http://example.com/">Foo</a></p>', + '<p><a href="tracking(http://example.com/)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL + '<p><a href=\'https://sub.example.com/foo.php?whiz=%2Fbang%2F&pie[fruit]=apple\'>Foo</a></p>', + '<p><a href=\'tracking(https://sub.example.com/foo.php?whiz=%2Fbang%2F&pie[fruit]=apple)\' rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, designed to trip-up quote handling + '<p><a href="javascript:alert(\'Cheese\')">Foo</a></p>', + '<p><a href="tracking(javascript:alert(\'Cheese\'))" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, designed to trip-up quote handling + '<p><a href=\'javascript:alert("Cheese")\'>Foo</a></p>', + '<p><a href=\'tracking(javascript:alert("Cheese"))\' rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, funny whitespace + '<p><a href="http://example.com/' . "\n" . 'weird">Foo</a></p>', + '<p><a href="tracking(http://example.com/' . "\n" . 'weird)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Messy looking URL, funny whitespace + '<p><a href="http://example.com?utm_medium=email&utm_detail=hello">Foo</a></p>', + '<p><a href="tracking(http://example.com?utm_medium=email&utm_detail=hello)" rel=\'nofollow\'>Foo</a></p>', + ]; + $exs[] = [ + // Many different URLs + '<p><a href="http://example.com/1">First</a><a href="http://example.com/2">Second</a><a href=\'http://example.com/3\'>Third</a><a href="http://example.com/4">Fourth</a></p>', + '<p><a href="tracking(http://example.com/1)" rel=\'nofollow\'>First</a><a href="tracking(http://example.com/2)" rel=\'nofollow\'>Second</a><a href=\'tracking(http://example.com/3)\' rel=\'nofollow\'>Third</a><a href="tracking(http://example.com/4)" rel=\'nofollow\'>Fourth</a></p>', + ]; + + return $exs; + } + + /** + * @param $inputHtml + * @param $expectHtml + * @dataProvider getHrefExamples + */ + public function testReplaceTextUrls($inputHtml, $expectHtml) { + $inputText = \CRM_Utils_String::htmlToText($inputHtml); + $expectText = \CRM_Utils_String::htmlToText($expectHtml); + $expectText = str_replace('/tracking', 'tracking', $expectText); + $actual = TextClickTracker::replaceTextUrls($inputText, function($url) { + return "tracking($url)"; + }); + + $this->assertEquals($expectText, $actual, "Check substitutions on text ($inputText)"); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1daeab0640713e6b08186056bee4ebf7a97ce74f --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php @@ -0,0 +1,76 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +/** + * + * @copyright CiviCRM LLC (c) 2004-2017 + * @version $Id: Job.php 30879 2010-11-22 15:45:55Z shot $ + * + */ + +// For compat w/v4.6 phpunit +require_once 'tests/phpunit/api/v3/JobProcessMailingTest.php'; + +/** + * Class ConcurrentDeliveryTest + * + * Check that CiviMail batching and concurrency features work as expected. + * This is a variation on api_v3_JobProcessMailingTest -- but this uses + * FlexMailer instead of BAO delivery. + * + * @group headless + * @group civimail + * @see \api_v3_JobProcessMailingTest + */ +class ConcurrentDeliveryTest extends \api_v3_JobProcessMailingTest { + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + } + + public function tearDown() { + // We're building on someone else's test and don't fully trust them to + // protect our settings. Make sure they did. + $ok = ('flexmailer' == \Civi::settings()->get('flexmailer_traditional')) + && ('s:10:"flexmailer";' === \CRM_Core_DAO::singleValueQuery('SELECT value FROM civicrm_setting WHERE name ="flexmailer_traditional"')); + + parent::tearDown(); + + $this->assertTrue($ok, 'FlexMailer remained active during testing'); + } + + // ---- Boilerplate ---- + + // The remainder of this class contains dummy stubs which make it easier to + // work with the tests in an IDE. + + /** + * @dataProvider concurrencyExamples + * @see _testConcurrencyCommon + */ + public function testConcurrency($settings, $expectedTallies, $expectedTotal) { + parent::testConcurrency($settings, $expectedTallies, $expectedTotal); + } + + public function testBasic() { + parent::testBasic(); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php new file mode 100644 index 0000000000000000000000000000000000000000..876d0637e81c482924d7c4e0cc04bc664c1c2382 --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php @@ -0,0 +1,129 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +/** + * Test that content produced by CiviMail looks the way it's expected. + * + * @copyright CiviCRM LLC (c) 2004-2017 + * @version $Id: Job.php 30879 2010-11-22 15:45:55Z shot $ + * + */ +use Symfony\Component\EventDispatcher\Event; + +// For compat w/v4.6 phpunit +require_once 'tests/phpunit/CRM/Mailing/BaseMailingSystemTest.php'; + +/** + * Class FlexMailerSystemTest + * + * MailingSystemTest checks that overall composition and delivery of + * CiviMail blasts works. It extends CRM_Mailing_BaseMailingSystemTest + * which provides the general test scenarios -- but this variation + * checks that certain internal events/hooks fire. + * + * FlexMailerSystemTest is the counterpart to MailingSystemTest. + * @group headless + * @group civimail + * @see CRM_Mailing_MailingSystemTest + */ +class FlexMailerSystemTest extends \CRM_Mailing_BaseMailingSystemTest { + + private $counts; + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + + $dispatcher = \Civi::service('dispatcher'); + foreach (FlexMailer::getEventTypes() as $event => $class) { + $dispatcher->addListener($event, array($this, 'handleEvent')); + } + + $hooks = \CRM_Utils_Hook::singleton(); + $hooks->setHook('civicrm_alterMailParams', + array($this, 'hook_alterMailParams')); + $this->counts = array(); + } + + public function handleEvent(Event $e) { + // We keep track of the events that fire during mail delivery. + // At the end, we'll ensure that the correct events fired. + $clazz = get_class($e); + if (!isset($this->counts[$clazz])) { + $this->counts[$clazz] = 1; + } + else { + $this->counts[$clazz]++; + } + } + + /** + * @see CRM_Utils_Hook::alterMailParams + */ + public function hook_alterMailParams(&$params, $context = NULL) { + $this->counts['hook_alterMailParams'] = 1; + $this->assertEquals('flexmailer', $context); + } + + public function tearDown() { + parent::tearDown(); + $this->assertNotEmpty($this->counts['hook_alterMailParams']); + foreach (FlexMailer::getEventTypes() as $event => $class) { + $this->assertTrue( + $this->counts[$class] > 0, + "If FlexMailer is active, $event should fire at least once." + ); + } + } + + // ---- Boilerplate ---- + + // The remainder of this class contains dummy stubs which make it easier to + // work with the tests in an IDE. + + /** + * Generate a fully-formatted mailing (with body_html content). + * + * @dataProvider urlTrackingExamples + */ + public function testUrlTracking( + $inputHtml, + $htmlUrlRegex, + $textUrlRegex, + $params + ) { + parent::testUrlTracking($inputHtml, $htmlUrlRegex, $textUrlRegex, $params); + } + + public function testBasicHeaders() { + parent::testBasicHeaders(); + } + + public function testText() { + parent::testText(); + } + + public function testHtmlWithOpenTracking() { + parent::testHtmlWithOpenTracking(); + } + + public function testHtmlWithOpenAndUrlTracking() { + parent::testHtmlWithOpenAndUrlTracking(); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..4df278002acc20b551a156100d9cb69af6b077b4 --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php @@ -0,0 +1,97 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer\Listener; + +/** + * + * @copyright CiviCRM LLC (c) 2004-2017 + * @version $Id: Job.php 30879 2010-11-22 15:45:55Z shot $ + * + */ + +// For compat w/v4.6 phpunit +//require_once 'tests/phpunit/.php'; +use Civi\FlexMailer\Event\ComposeBatchEvent; +use Civi\FlexMailer\FlexMailerTask; + +/** + * Class SimpleFilterTest + * + * @group headless + */ +class SimpleFilterTest extends \CiviUnitTestCase { + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + } + + /** + * Ensure that the utility `SimpleFilter::byValue()` correctly filters. + */ + public function testByValue() { + $test = $this; + list($tasks, $e) = $this->createExampleBatch(); + + SimpleFilter::byValue($e, 'text', function ($value, $t, $e) use ($test) { + $test->assertInstanceOf('Civi\FlexMailer\FlexMailerTask', $t); + $test->assertInstanceOf('Civi\FlexMailer\Event\ComposeBatchEvent', $e); + $test->assertTrue(in_array($value, array( + 'eat more cheese', + 'eat more ice cream', + ))); + return preg_replace('/more/', 'thoughtfully considered quantities of', $value); + }); + + $this->assertEquals('eat thoughtfully considered quantities of cheese', $tasks[0]->getMailParam('text')); + $this->assertEquals('eat thoughtfully considered quantities of ice cream', $tasks[1]->getMailParam('text')); + } + + /** + * Ensure that the utility `SimpleFilter::byColumn()` correctly filters. + */ + public function testByColumn() { + $test = $this; + list($tasks, $e) = $this->createExampleBatch(); + + SimpleFilter::byColumn($e, 'text', function ($values, $e) use ($test) { + $test->assertInstanceOf('Civi\FlexMailer\Event\ComposeBatchEvent', $e); + $test->assertEquals('eat more cheese', $values[0]); + $test->assertEquals('eat more ice cream', $values[1]); + $test->assertEquals(2, count($values)); + return preg_replace('/more/', 'thoughtfully considered quantities of', $values); + }); + + $this->assertEquals('eat thoughtfully considered quantities of cheese', $tasks[0]->getMailParam('text')); + $this->assertEquals('eat thoughtfully considered quantities of ice cream', $tasks[1]->getMailParam('text')); + } + + /** + * @return array + */ + protected function createExampleBatch() { + $tasks = array(); + $tasks[0] = new FlexMailerTask(1000, 2000, 'asdf', 'foo@example.org'); + $tasks[1] = new FlexMailerTask(1001, 2001, 'fdsa', 'bar@example.org'); + + $e = new ComposeBatchEvent(array(), $tasks); + + $tasks[0]->setMailParam('text', 'eat more cheese'); + $tasks[1]->setMailParam('text', 'eat more ice cream'); + return array($tasks, $e); + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php new file mode 100644 index 0000000000000000000000000000000000000000..32cdd17597843159893dfba361a1d00ca5937260 --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php @@ -0,0 +1,156 @@ +<?php +namespace Civi\FlexMailer; + +/** + * Class MailingPreviewTest + * + * @group headless + */ +class MailingPreviewTest extends \CiviUnitTestCase { + + protected $_groupID; + protected $_email; + protected $_apiversion = 3; + protected $_params = array(); + protected $_entity = 'Mailing'; + protected $_contactID; + + /** + * APIv3 result from creating an example footer + * @var array + */ + protected $footer; + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + + $this->useTransaction(); + // DGW + \CRM_Mailing_BAO_MailingJob::$mailsProcessed = 0; + $this->_contactID = $this->individualCreate(); + $this->_groupID = $this->groupCreate(); + $this->_email = 'test@test.test'; + $this->_params = array( + 'subject' => 'Hello {contact.display_name}', + 'body_text' => "This is {contact.display_name}.\nhttps://civicrm.org\nda=({domain.address}) optout=({action.optOutUrl}) subj=({mailing.subject})", + 'body_html' => "<p>This is {contact.display_name}.</p><p><a href='https://civicrm.org/'>CiviCRM.org</a></p><p>da=({domain.address}) optout=({action.optOutUrl}) subj=({mailing.subject})</p>", + 'name' => 'mailing name', + 'created_id' => $this->_contactID, + 'header_id' => '', + 'footer_id' => '', + ); + + $this->footer = civicrm_api3('MailingComponent', 'create', array( + 'name' => 'test domain footer', + 'component_type' => 'footer', + 'body_html' => '<p>From {domain.address}. To opt out, go to {action.optOutUrl}.</p>', + 'body_text' => 'From {domain.address}. To opt out, go to {action.optOutUrl}.', + )); + } + + public function tearDown() { + // DGW + \CRM_Mailing_BAO_MailingJob::$mailsProcessed = 0; + parent::tearDown(); + } + + public function testMailerPreview() { + // BEGIN SAMPLE DATA + $contactID = $this->individualCreate(); + $displayName = $this->callAPISuccess('contact', 'get', + array('id' => $contactID)); + $displayName = $displayName['values'][$contactID]['display_name']; + $this->assertTrue(!empty($displayName)); + + $params = $this->_params; + $params['api.Mailing.preview'] = array( + 'id' => '$value.id', + 'contact_id' => $contactID, + ); + $params['options']['force_rollback'] = 1; + // END SAMPLE DATA + + $maxIDs = $this->getMaxIds(); + $result = $this->callAPISuccess('mailing', 'create', $params); + $this->assertMaxIds($maxIDs); + + $previewResult = $result['values'][$result['id']]['api.Mailing.preview']; + $this->assertEquals("[CiviMail Draft] Hello $displayName", + $previewResult['values']['subject']); + + $this->assertContains("This is $displayName", $previewResult['values']['body_text']); + $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_text']); + $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); + $this->assertContains("subj=(Hello ", $previewResult['values']['body_text']); + + $this->assertContains("<p>This is $displayName.</p>", $previewResult['values']['body_html']); + $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_html']); + $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); + $this->assertContains("subj=(Hello ", $previewResult['values']['body_html']); + + $this->assertEquals('flexmailer', $previewResult['values']['_rendered_by_']); + } + + public function testMailerPreviewWithoutId() { + // BEGIN SAMPLE DATA + $contactID = $this->createLoggedInUser(); + $displayName = $this->callAPISuccess('contact', 'get', ['id' => $contactID]); + $displayName = $displayName['values'][$contactID]['display_name']; + $this->assertTrue(!empty($displayName)); + $params = $this->_params; + // END SAMPLE DATA + + $maxIDs = $this->getMaxIds(); + $previewResult = $this->callAPISuccess('mailing', 'preview', $params); + $this->assertMaxIds($maxIDs); + + $this->assertEquals("[CiviMail Draft] Hello $displayName", + $previewResult['values']['subject']); + + $this->assertContains("This is $displayName", $previewResult['values']['body_text']); + $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_text']); + $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_text']); + $this->assertContains("subj=(Hello ", $previewResult['values']['body_text']); + + $this->assertContains("<p>This is $displayName.</p>", $previewResult['values']['body_html']); + $this->assertContains("civicrm/mailing/optout", $previewResult['values']['body_html']); + $this->assertContains("&jid=&qid=&h=fakehash", $previewResult['values']['body_html']); + $this->assertContains("subj=(Hello ", $previewResult['values']['body_html']); + + $this->assertEquals('flexmailer', $previewResult['values']['_rendered_by_']); + } + + /** + * @return array + * Array(string $table => int $maxID). + */ + protected function getMaxIds() { + return array( + 'civicrm_mailing' => \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_mailing'), + 'civicrm_mailing_job' => \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_mailing_job'), + 'civicrm_mailing_group' => \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_mailing_group'), + 'civicrm_mailing_recipients' => \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_mailing_recipients'), + ); + } + + /** + * Assert that the given tables have the given extant IDs. + * + * @param array $expectMaxIds + * Array(string $table => int $maxId). + */ + protected function assertMaxIds($expectMaxIds) { + foreach ($expectMaxIds as $table => $maxId) { + $this->assertDBQuery($expectMaxIds[$table], 'SELECT MAX(id) FROM ' . $table, [], "Table $table should have a maximum ID of $maxId"); + } + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..3b5d9993488f37c80ed76bc4639c20a1e709225e --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php @@ -0,0 +1,101 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\FlexMailer; + +/** + * Class ValidatorTest + * + * @group headless + */ +class ValidatorTest extends \CiviUnitTestCase { + + public function setUp() { + // Activate before transactions are setup. + $manager = \CRM_Extension_System::singleton()->getManager(); + if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { + $manager->install(array('org.civicrm.flexmailer')); + } + + parent::setUp(); + \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); + } + + public function getExamples() { + $defaults = array( + 'id' => 123, + 'subject' => 'Default subject', + 'name' => 'Default name', + 'from_name' => 'Default sender', + 'from_email' => 'default@example.org', + 'body_html' => '<html>Default HTML body {action.unsubscribeUrl} {domain.address}</html>', + 'body_text' => 'Default text body {action.unsubscribeUrl} {domain.address}', + 'template_type' => 'traditional', + 'template_options' => array(), + ); + + $es = array(); + $es[] = array( + array_merge($defaults, array('subject' => NULL)), + array('subject' => '/Field "subject" is required./'), + ); + $es[] = array( + array_merge($defaults, array('subject' => NULL, 'from_name' => NULL)), + array( + 'subject' => '/Field "subject" is required./', + 'from_name' => '/Field "from_name" is required./', + ), + ); + $es[] = array( + array_merge($defaults, array('body_text' => NULL)), + array(), + ); + $es[] = array( + array_merge($defaults, array('body_html' => NULL)), + array(), + ); + $es[] = array( + array_merge($defaults, array('body_html' => NULL, 'body_text' => NULL)), + array('(body_html|body_text)' => '/Field "body_html" or "body_text" is required./'), + ); + $es[] = array( + array_merge($defaults, array('body_html' => 'Muahaha. I omit the mandatory tokens!')), + array( + 'body_html:domain.address' => '/This message is missing.*postal address/', + 'body_html:action.optOutUrl or action.unsubscribeUrl' => '/This message is missing.*Unsubscribe via web page/', + ), + ); + $es[] = array( + array_merge($defaults, array('body_html' => 'I omit the mandatory tokens, but checking them is someone else\'s job!', 'template_type' => 'esperanto')), + array(), + ); + return $es; + } + + /** + * @param array $mailingData + * Mailing content (per CRM_Mailing_DAO_Mailing) as an array. + * @param array $expectedErrors + * @dataProvider getExamples + */ + public function testExamples($mailingData, $expectedErrors) { + $mailing = new \CRM_Mailing_DAO_Mailing(); + $mailing->copyValues($mailingData); + $actualErrors = Validator::createAndRun($mailing); + $this->assertEquals( + array_keys($actualErrors), + array_keys($expectedErrors) + ); + foreach ($expectedErrors as $key => $pat) { + $this->assertRegExp($pat, $actualErrors[$key], "Error for \"$key\" should match pattern"); + } + } + +} diff --git a/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php b/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..048cc4b260e28fd1689f1fc108062ac5584dd139 --- /dev/null +++ b/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php @@ -0,0 +1,64 @@ +<?php + +require_once dirname(dirname(__DIR__)) . '/flexmailer.php'; + +ini_set('memory_limit', '2G'); +ini_set('safe_mode', 0); + +// We need to allow CiviUnitTestCase... but may break E2E support.... + +// eval(cv('php:boot --level=classloader', 'phpcode')); +define('CIVICRM_CONTAINER_CACHE', 'never'); +define('CIVICRM_TEST', 1); +putenv('CIVICRM_UF=' . ($_ENV['CIVICRM_UF'] = 'UnitTests')); +// phpcs:disable +eval(cv('php:boot --level=settings', 'phpcode')); +// phpcs:enable + +if (CIVICRM_UF === 'UnitTests') { + Civi\Test::headless()->apply(); +} + +/** + * Call the "cv" command. + * + * @param string $cmd + * The rest of the command to send. + * @param string $decode + * Ex: 'json' or 'phpcode'. + * @return string + * Response output (if the command executed normally). + * @throws \RuntimeException + * If the command terminates abnormally. + */ +function cv($cmd, $decode = 'json') { + $cmd = 'cv ' . $cmd; + $descriptorSpec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => STDERR); + $oldOutput = getenv('CV_OUTPUT'); + putenv("CV_OUTPUT=json"); + $process = proc_open($cmd, $descriptorSpec, $pipes, __DIR__); + putenv("CV_OUTPUT=$oldOutput"); + fclose($pipes[0]); + $result = stream_get_contents($pipes[1]); + fclose($pipes[1]); + if (proc_close($process) !== 0) { + throw new RuntimeException("Command failed ($cmd):\n$result"); + } + switch ($decode) { + case 'raw': + return $result; + + case 'phpcode': + // If the last output is /*PHPCODE*/, then we managed to complete execution. + if (substr(trim($result), 0, 12) !== "/*BEGINPHP*/" || substr(trim($result), -10) !== "/*ENDPHP*/") { + throw new \RuntimeException("Command failed ($cmd):\n$result"); + } + return $result; + + case 'json': + return json_decode($result, 1); + + default: + throw new RuntimeException("Bad decoder format ($decode)"); + } +} diff --git a/civicrm/ext/flexmailer/xml/Menu/flexmailer.xml b/civicrm/ext/flexmailer/xml/Menu/flexmailer.xml new file mode 100644 index 0000000000000000000000000000000000000000..605cfa1228e71424688081067f294dae6af6f2af --- /dev/null +++ b/civicrm/ext/flexmailer/xml/Menu/flexmailer.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> +<menu> + <item> + <path>civicrm/admin/setting/flexmailer</path> + <page_callback>CRM_Admin_Form_Generic</page_callback> + <title>Flexmailer Settings</title> + <adminGroup>CiviMail</adminGroup> + <icon>admin/small/Profile.png</icon> + <access_arguments>administer CiviCRM</access_arguments> + </item> +</menu> diff --git a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php index 09228ba9d62bc3be2fbabf71415381c660d1b8f6..891a0c069c78c9401f572235ffe8f1fba20a4c78 100644 --- a/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php +++ b/civicrm/ext/sequentialcreditnotes/sequentialcreditnotes.civix.php @@ -244,7 +244,7 @@ function _sequentialcreditnotes_civix_find_files($dir, $pattern) { if ($dh = opendir($subdir)) { while (FALSE !== ($entry = readdir($dh))) { $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry{0} == '.') { + if ($entry[0] == '.') { } elseif (is_dir($path)) { $todos[] = $path; diff --git a/civicrm/install/civicrm.php b/civicrm/install/civicrm.php index ed2df94303effa1093b915be4a40d3f8f24c79a2..c6fdaf10df2d32616fcf4d71c97dbe23b7a005c1 100644 --- a/civicrm/install/civicrm.php +++ b/civicrm/install/civicrm.php @@ -145,9 +145,7 @@ function civicrm_source($dsn, $fileName, $lineMode = FALSE) { if (PEAR::isError($db)) { die("Cannot open $dsn: " . $db->getMessage()); } - $db->query("SET NAMES utf8"); - - $db->query("SET NAMES utf8"); + $db->query('SET NAMES utf8mb4'); if (!$lineMode) { $string = file_get_contents($fileName); diff --git a/civicrm/install/index.php b/civicrm/install/index.php index c0e66c03b07e85394911c1962c9bf63f847f5698..5ed5587e21f6ed3251971c88f539aade10848fac 100644 --- a/civicrm/install/index.php +++ b/civicrm/install/index.php @@ -1069,8 +1069,14 @@ class InstallRequirements { return TRUE; } else { - $testDetails[2] .= "{$majorHas}.{$minorHas}."; - $this->error($testDetails); + $versionDetails = mysqli_query($this->conn, 'SELECT version() as version')->fetch_assoc(); + if (version_compare($versionDetails['version'], $min) == -1) { + $testDetails[2] .= "{$majorHas}.{$minorHas}."; + $this->error($testDetails); + } + else { + return TRUE; + } } } } @@ -1132,12 +1138,13 @@ class InstallRequirements { return; } - $result = mysqli_query($conn, 'CREATE TEMPORARY TABLE civicrm_install_temp_table_test (test text)'); + $tempTableName = CRM_Utils_SQL_TempTable::build()->setCategory('install')->getName(); + $result = mysqli_query($conn, 'CREATE TEMPORARY TABLE ' . $tempTableName . ' (test text)'); if (!$result) { $testDetails[2] = ts('Could not create a temp table.'); $this->error($testDetails); } - $result = mysqli_query($conn, 'DROP TEMPORARY TABLE civicrm_install_temp_table_test'); + $result = mysqli_query($conn, 'DROP TEMPORARY TABLE ' . $tempTableName); } /** @@ -1201,18 +1208,19 @@ class InstallRequirements { return; } - $result = mysqli_query($conn, 'CREATE TEMPORARY TABLE civicrm_install_temp_table_test (test text)'); + $tempTableName = CRM_Utils_SQL_TempTable::build()->setCategory('install')->getName(); + $result = mysqli_query($conn, 'CREATE TEMPORARY TABLE ' . $tempTableName . ' (test text)'); if (!$result) { $testDetails[2] = ts('Could not create a table in the database.'); $this->error($testDetails); return; } - $result = mysqli_query($conn, 'LOCK TABLES civicrm_install_temp_table_test WRITE'); + $result = mysqli_query($conn, 'LOCK TABLES ' . $tempTableName . ' WRITE'); if (!$result) { $testDetails[2] = ts('Could not obtain a write lock for the database table.'); $this->error($testDetails); - $result = mysqli_query($conn, 'DROP TEMPORARY TABLE civicrm_install_temp_table_test'); + $result = mysqli_query($conn, 'DROP TEMPORARY TABLE ' . $tempTableName); return; } @@ -1220,11 +1228,11 @@ class InstallRequirements { if (!$result) { $testDetails[2] = ts('Could not release the lock for the database table.'); $this->error($testDetails); - $result = mysqli_query($conn, 'DROP TEMPORARY TABLE civicrm_install_temp_table_test'); + $result = mysqli_query($conn, 'DROP TEMPORARY TABLE ' . $tempTableName); return; } - $result = mysqli_query($conn, 'DROP TEMPORARY TABLE civicrm_install_temp_table_test'); + $result = mysqli_query($conn, 'DROP TEMPORARY TABLE ' . $tempTableName); } /** diff --git a/civicrm/js/Common.js b/civicrm/js/Common.js index 0ed3e38c67b131ba9db029c452cbda00595042cc..0199e80eb1c5c37574a5699cbf4b8acd53f69f3d 100644 --- a/civicrm/js/Common.js +++ b/civicrm/js/Common.js @@ -879,9 +879,11 @@ if (!CRM.vars) CRM.vars = {}; */ $.fn.crmValidate = function(params) { return $(this).each(function () { - var that = this, - settings = $.extend({}, CRM.validate._defaults, CRM.validate.params); - $(this).validate(settings); + var validator = $(this).validate(); + var that = this; + validator.settings = $.extend({}, validator.settings, CRM.validate._defaults, CRM.validate.params); + // Call our custom validation handler. + $(validator.currentForm).on("invalid-form.validate", validator.settings.invalidHandler ); // Call any post-initialization callbacks if (CRM.validate.functions && CRM.validate.functions.length) { $.each(CRM.validate.functions, function(i, func) { diff --git a/civicrm/js/crm.ajax.js b/civicrm/js/crm.ajax.js index bfff407843dc2e02e4723c866e431ecc48d8854d..7c7371131125d42848126a433d99fb0a0403c82a 100644 --- a/civicrm/js/crm.ajax.js +++ b/civicrm/js/crm.ajax.js @@ -56,6 +56,7 @@ return result; } + // https://docs.civicrm.org/dev/en/latest/api/interfaces/#ajax CRM.api4 = function(entity, action, params, index) { return new Promise(function(resolve, reject) { if (typeof entity === 'string') { @@ -88,7 +89,7 @@ /** * AJAX api - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface#AJAXInterface-CRM.api3 + * @link https://docs.civicrm.org/dev/en/latest/api/interfaces/#ajax */ CRM.api3 = function(entity, action, params, status) { if (typeof(entity) === 'string') { diff --git a/civicrm/js/crm.datepicker.js b/civicrm/js/crm.datepicker.js index 95663c09492afe6fa782171d69713994da66afa2..d630834c5c0b4c4efce4132d1b10fa8bb4611e07 100644 --- a/civicrm/js/crm.datepicker.js +++ b/civicrm/js/crm.datepicker.js @@ -2,7 +2,7 @@ "use strict"; /** - * @see http://wiki.civicrm.org/confluence/display/CRMDOC/crmDatepicker + * @see https://docs.civicrm.org/dev/en/latest/framework/ui/#date-picker */ $.fn.crmDatepicker = function(options) { return $(this).each(function() { @@ -75,6 +75,7 @@ } else { $dateField.attr('min', settings.minDate ? CRM.utils.formatDate(settings.minDate, 'yy') : '1000'); $dateField.attr('max', settings.maxDate ? CRM.utils.formatDate(settings.maxDate, 'yy') : '4000'); + placeholder = null; } // Set placeholder as calendar icon (`fa-calendar` is Unicode f073) $dateField.attr({placeholder: placeholder === undefined ? '\uF073' : placeholder}).change(updateDataField); diff --git a/civicrm/packages/DB/mysqli.php b/civicrm/packages/DB/mysqli.php index 0d8f4142181470e6342479311272780057b4f3e5..91707c19d2cb4275d9fbfc013f8c32365fad7604 100644 --- a/civicrm/packages/DB/mysqli.php +++ b/civicrm/packages/DB/mysqli.php @@ -317,7 +317,8 @@ class DB_mysqli extends DB_common $dsn['password'], $dsn['database'], $dsn['port'], - $dsn['socket'])) + $dsn['socket'], + MYSQLI_CLIENT_SSL)) { $this->connection = $init; } diff --git a/civicrm/packages/HTML/QuickForm.php b/civicrm/packages/HTML/QuickForm.php index 9623ef8c0a1973d4eeb04caeac150def52e44734..d035dafdc8766a3d6a62253ebede3cb26bd99ac8 100644 --- a/civicrm/packages/HTML/QuickForm.php +++ b/civicrm/packages/HTML/QuickForm.php @@ -296,7 +296,7 @@ class HTML_QuickForm extends HTML_Common $attributes = array('action'=>$action, 'method'=>$method, 'name'=>$formName, 'id'=>$formName) + $target; $this->updateAttributes($attributes); if (!$trackSubmit || isset($_REQUEST['_qf__' . $formName])) { - if (1 == get_magic_quotes_gpc()) { + if (FALSE) { $this->_submitValues = $this->_recursiveFilter('stripslashes', 'get' == $method? $_GET: $_POST); foreach ($_FILES as $keyFirst => $valFirst) { foreach ($valFirst as $keySecond => $valSecond) { diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.includes.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.includes.php index 321bdc5661f787912f8f4bcdfb0aed18e033403e..3158b2b86ff281422bc6a34e673cf31d642585cd 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.includes.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.includes.php @@ -7,7 +7,7 @@ * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS * FILE, changes will be overwritten the next time the script is run. * - * @version 4.10.0 + * @version 4.12.0 * * @warning * You must *not* include any other HTML Purifier files before this file, diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.php index bada5188b48dc370c64ac25a44e4c42ab3387840..10e61c14975077e9e4a7d34676a0a5a85539e0ad 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier.php @@ -19,7 +19,7 @@ */ /* - HTML Purifier 4.10.0 - Standards Compliant HTML Filtering + HTML Purifier 4.12.0 - Standards Compliant HTML Filtering Copyright (C) 2006-2008 Edward Z. Yang This library is free software; you can redistribute it and/or @@ -58,12 +58,12 @@ class HTMLPurifier * Version of HTML Purifier. * @type string */ - public $version = '4.10.0'; + public $version = '4.12.0'; /** * Constant with version of HTML Purifier. */ - const VERSION = '4.10.0'; + const VERSION = '4.12.0'; /** * Global configuration object. @@ -240,12 +240,17 @@ class HTMLPurifier public function purifyArray($array_of_html, $config = null) { $context_array = array(); - foreach ($array_of_html as $key => $html) { - $array_of_html[$key] = $this->purify($html, $config); + $array = array(); + foreach($array_of_html as $key=>$value){ + if (is_array($value)) { + $array[$key] = $this->purifyArray($value, $config); + } else { + $array[$key] = $this->purify($value, $config); + } $context_array[$key] = $this->context; } $this->context = $context_array; - return $array_of_html; + return $array; } /** diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php index dea15d2cd21cf5ad3c0e0b1877ba89a6bf367cfe..be3bbc8dc07a3dc769c31306b9a69db0a21acf0c 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/HTML/Bool.php @@ -7,7 +7,7 @@ class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef { /** - * @type bool + * @type string */ protected $name; @@ -17,7 +17,7 @@ class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef public $minimized = true; /** - * @param bool $name + * @param bool|string $name */ public function __construct($name = false) { diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php index e54a3344a74ffdff81562babdd7a898d4f05e836..1beeaa5d22e3bc352b5932c23966b0a8a690688d 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/AttrDef/URI/Host.php @@ -97,7 +97,11 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef // PHP 5.3 and later support this functionality natively if (function_exists('idn_to_ascii')) { - $string = idn_to_ascii($string, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46); + if (defined('IDNA_NONTRANSITIONAL_TO_ASCII') && defined('INTL_IDNA_VARIANT_UTS46')) { + $string = idn_to_ascii($string, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46); + } else { + $string = idn_to_ascii($string); + } // If we have Net_IDNA2 support, we can support IRIs by // punycoding them. (This is the most portable thing to do, diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/CSSDefinition.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/CSSDefinition.php index 47dfd1f66609f95e4638ed585a4dc3bda21a9e92..21f1a5899d86c48aa1fce6c13feca2fb78f440a3 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/CSSDefinition.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/CSSDefinition.php @@ -220,15 +220,25 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition array( new HTMLPurifier_AttrDef_CSS_Length('0'), new HTMLPurifier_AttrDef_CSS_Percentage(true), - new HTMLPurifier_AttrDef_Enum(array('auto')) + new HTMLPurifier_AttrDef_Enum(array('auto', 'initial', 'inherit')) + ) + ); + $trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_CSS_Length('0'), + new HTMLPurifier_AttrDef_CSS_Percentage(true), + new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit')) + ) + ); + $trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_CSS_Length('0'), + new HTMLPurifier_AttrDef_CSS_Percentage(true), + new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit')) ) ); $max = $config->get('CSS.MaxImgLength'); - $this->info['min-width'] = - $this->info['max-width'] = - $this->info['min-height'] = - $this->info['max-height'] = $this->info['width'] = $this->info['height'] = $max === null ? @@ -245,6 +255,38 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition // For everyone else: $trusted_wh ); + $this->info['min-width'] = + $this->info['min-height'] = + $max === null ? + $trusted_min_wh : + new HTMLPurifier_AttrDef_Switch( + 'img', + // For img tags: + new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_CSS_Length('0', $max), + new HTMLPurifier_AttrDef_Enum(array('initial', 'inherit')) + ) + ), + // For everyone else: + $trusted_min_wh + ); + $this->info['max-width'] = + $this->info['max-height'] = + $max === null ? + $trusted_max_wh : + new HTMLPurifier_AttrDef_Switch( + 'img', + // For img tags: + new HTMLPurifier_AttrDef_CSS_Composite( + array( + new HTMLPurifier_AttrDef_CSS_Length('0', $max), + new HTMLPurifier_AttrDef_Enum(array('none', 'initial', 'inherit')) + ) + ), + // For everyone else: + $trusted_max_wh + ); $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration(); diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ChildDef/Custom.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ChildDef/Custom.php index 128132e96d8be42828baeb8d801fc9afe3725d66..f515888a1d4b8fad8f7aef40cf1c1b2b9baa80c2 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ChildDef/Custom.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ChildDef/Custom.php @@ -45,7 +45,7 @@ class HTMLPurifier_ChildDef_Custom extends HTMLPurifier_ChildDef protected function _compileRegex() { $raw = str_replace(' ', '', $this->dtd_regex); - if ($raw{0} != '(') { + if ($raw[0] != '(') { $raw = "($raw)"; } $el = '[#a-zA-Z0-9_.-]+'; diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Config.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Config.php index f37cf3713de72732ab70ae68d95b82bd8d3fd680..f569d40c9e12d4a1c60d828b3cc5d224ed3d12bd 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Config.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Config.php @@ -21,7 +21,7 @@ class HTMLPurifier_Config * HTML Purifier's version * @type string */ - public $version = '4.10.0'; + public $version = '4.12.0'; /** * Whether or not to automatically finalize @@ -890,7 +890,7 @@ class HTMLPurifier_Config // zip(tail(trace), trace) -- but PHP is not Haskell har har for ($i = 0, $c = count($trace); $i < $c - 1; $i++) { // XXX this is not correct on some versions of HTML Purifier - if ($trace[$i + 1]['class'] === 'HTMLPurifier_Config') { + if (isset($trace[$i + 1]['class']) && $trace[$i + 1]['class'] === 'HTMLPurifier_Config') { continue; } $frame = $trace[$i]; diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema.php index 655c0e97ae657d57ae89fb15b90ae2af59326c54..c3fe8cd4abbf3473fad2122ae6b520e84d715ce3 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema.php @@ -100,7 +100,7 @@ class HTMLPurifier_ConfigSchema * @param string $key Name of directive * @param mixed $default Default value of directive * @param string $type Allowed type of the directive. See - * HTMLPurifier_DirectiveDef::$type for allowed values + * HTMLPurifier_VarParser::$types for allowed values * @param bool $allow_null Whether or not to allow null values */ public function add($key, $default, $type, $allow_null) diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser index 371e948f1c76d99bacea65b4735454656858edbf..47bd259b2efdf3d6d2575c014ed265ee5552f56d 100644 Binary files a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser and b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema.ser differ diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt index ca17eb1dc489cbd8c98bd8a04025f924801580c6..9228dee228fcdff3fc1aef94eb829ab5d1f5615c 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt @@ -6,7 +6,7 @@ DEFAULT: false <p> When enabled, HTML Purifier will treat any elements that contain only non-breaking spaces as well as regular whitespace as empty, and remove - them when %AutoForamt.RemoveEmpty is enabled. + them when %AutoFormat.RemoveEmpty is enabled. </p> <p> See %AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions for a list of elements diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt new file mode 100644 index 0000000000000000000000000000000000000000..06278f82a169297c91928fd02807c6388568206b --- /dev/null +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt @@ -0,0 +1,12 @@ +Core.AllowParseManyTags +TYPE: bool +DEFAULT: false +VERSION: 4.10.1 +--DESCRIPTION-- +<p> + This directive allows parsing of many nested tags. + If you set true, relaxes any hardcoded limit from the parser. + However, in that case it may cause a Dos attack. + Be careful when enabling it. +</p> +--# vim: et sw=4 sts=4 diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt index c572c14ec177952da596776b05042ed6391f72fb..a75844cd58e3d2346e11a59364e58659a100de1d 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt @@ -3,23 +3,154 @@ TYPE: hash VERSION: 2.0.0 --DEFAULT-- array ( - 'maroon' => '#800000', - 'red' => '#FF0000', - 'orange' => '#FFA500', - 'yellow' => '#FFFF00', - 'olive' => '#808000', - 'purple' => '#800080', + 'aliceblue' => '#F0F8FF', + 'antiquewhite' => '#FAEBD7', + 'aqua' => '#00FFFF', + 'aquamarine' => '#7FFFD4', + 'azure' => '#F0FFFF', + 'beige' => '#F5F5DC', + 'bisque' => '#FFE4C4', + 'black' => '#000000', + 'blanchedalmond' => '#FFEBCD', + 'blue' => '#0000FF', + 'blueviolet' => '#8A2BE2', + 'brown' => '#A52A2A', + 'burlywood' => '#DEB887', + 'cadetblue' => '#5F9EA0', + 'chartreuse' => '#7FFF00', + 'chocolate' => '#D2691E', + 'coral' => '#FF7F50', + 'cornflowerblue' => '#6495ED', + 'cornsilk' => '#FFF8DC', + 'crimson' => '#DC143C', + 'cyan' => '#00FFFF', + 'darkblue' => '#00008B', + 'darkcyan' => '#008B8B', + 'darkgoldenrod' => '#B8860B', + 'darkgray' => '#A9A9A9', + 'darkgrey' => '#A9A9A9', + 'darkgreen' => '#006400', + 'darkkhaki' => '#BDB76B', + 'darkmagenta' => '#8B008B', + 'darkolivegreen' => '#556B2F', + 'darkorange' => '#FF8C00', + 'darkorchid' => '#9932CC', + 'darkred' => '#8B0000', + 'darksalmon' => '#E9967A', + 'darkseagreen' => '#8FBC8F', + 'darkslateblue' => '#483D8B', + 'darkslategray' => '#2F4F4F', + 'darkslategrey' => '#2F4F4F', + 'darkturquoise' => '#00CED1', + 'darkviolet' => '#9400D3', + 'deeppink' => '#FF1493', + 'deepskyblue' => '#00BFFF', + 'dimgray' => '#696969', + 'dimgrey' => '#696969', + 'dodgerblue' => '#1E90FF', + 'firebrick' => '#B22222', + 'floralwhite' => '#FFFAF0', + 'forestgreen' => '#228B22', 'fuchsia' => '#FF00FF', - 'white' => '#FFFFFF', - 'lime' => '#00FF00', + 'gainsboro' => '#DCDCDC', + 'ghostwhite' => '#F8F8FF', + 'gold' => '#FFD700', + 'goldenrod' => '#DAA520', + 'gray' => '#808080', + 'grey' => '#808080', 'green' => '#008000', + 'greenyellow' => '#ADFF2F', + 'honeydew' => '#F0FFF0', + 'hotpink' => '#FF69B4', + 'indianred' => '#CD5C5C', + 'indigo' => '#4B0082', + 'ivory' => '#FFFFF0', + 'khaki' => '#F0E68C', + 'lavender' => '#E6E6FA', + 'lavenderblush' => '#FFF0F5', + 'lawngreen' => '#7CFC00', + 'lemonchiffon' => '#FFFACD', + 'lightblue' => '#ADD8E6', + 'lightcoral' => '#F08080', + 'lightcyan' => '#E0FFFF', + 'lightgoldenrodyellow' => '#FAFAD2', + 'lightgray' => '#D3D3D3', + 'lightgrey' => '#D3D3D3', + 'lightgreen' => '#90EE90', + 'lightpink' => '#FFB6C1', + 'lightsalmon' => '#FFA07A', + 'lightseagreen' => '#20B2AA', + 'lightskyblue' => '#87CEFA', + 'lightslategray' => '#778899', + 'lightslategrey' => '#778899', + 'lightsteelblue' => '#B0C4DE', + 'lightyellow' => '#FFFFE0', + 'lime' => '#00FF00', + 'limegreen' => '#32CD32', + 'linen' => '#FAF0E6', + 'magenta' => '#FF00FF', + 'maroon' => '#800000', + 'mediumaquamarine' => '#66CDAA', + 'mediumblue' => '#0000CD', + 'mediumorchid' => '#BA55D3', + 'mediumpurple' => '#9370DB', + 'mediumseagreen' => '#3CB371', + 'mediumslateblue' => '#7B68EE', + 'mediumspringgreen' => '#00FA9A', + 'mediumturquoise' => '#48D1CC', + 'mediumvioletred' => '#C71585', + 'midnightblue' => '#191970', + 'mintcream' => '#F5FFFA', + 'mistyrose' => '#FFE4E1', + 'moccasin' => '#FFE4B5', + 'navajowhite' => '#FFDEAD', 'navy' => '#000080', - 'blue' => '#0000FF', - 'aqua' => '#00FFFF', - 'teal' => '#008080', - 'black' => '#000000', + 'oldlace' => '#FDF5E6', + 'olive' => '#808000', + 'olivedrab' => '#6B8E23', + 'orange' => '#FFA500', + 'orangered' => '#FF4500', + 'orchid' => '#DA70D6', + 'palegoldenrod' => '#EEE8AA', + 'palegreen' => '#98FB98', + 'paleturquoise' => '#AFEEEE', + 'palevioletred' => '#DB7093', + 'papayawhip' => '#FFEFD5', + 'peachpuff' => '#FFDAB9', + 'peru' => '#CD853F', + 'pink' => '#FFC0CB', + 'plum' => '#DDA0DD', + 'powderblue' => '#B0E0E6', + 'purple' => '#800080', + 'rebeccapurple' => '#663399', + 'red' => '#FF0000', + 'rosybrown' => '#BC8F8F', + 'royalblue' => '#4169E1', + 'saddlebrown' => '#8B4513', + 'salmon' => '#FA8072', + 'sandybrown' => '#F4A460', + 'seagreen' => '#2E8B57', + 'seashell' => '#FFF5EE', + 'sienna' => '#A0522D', 'silver' => '#C0C0C0', - 'gray' => '#808080', + 'skyblue' => '#87CEEB', + 'slateblue' => '#6A5ACD', + 'slategray' => '#708090', + 'slategrey' => '#708090', + 'snow' => '#FFFAFA', + 'springgreen' => '#00FF7F', + 'steelblue' => '#4682B4', + 'tan' => '#D2B48C', + 'teal' => '#008080', + 'thistle' => '#D8BFD8', + 'tomato' => '#FF6347', + 'turquoise' => '#40E0D0', + 'violet' => '#EE82EE', + 'wheat' => '#F5DEB3', + 'white' => '#FFFFFF', + 'whitesmoke' => '#F5F5F5', + 'yellow' => '#FFFF00', + 'yellowgreen' => '#9ACD32' ) --DESCRIPTION-- diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Encoder.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Encoder.php index b94f1754234dab034fc6fe19b32c00e13a8c79dc..40a24266a4645ea80e66ce33f831b104cbb40269 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Encoder.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Encoder.php @@ -159,7 +159,7 @@ class HTMLPurifier_Encoder $len = strlen($str); for ($i = 0; $i < $len; $i++) { - $in = ord($str{$i}); + $in = ord($str[$i]); $char .= $str[$i]; // append byte to char if (0 == $mState) { // When mState is zero we expect either a US-ASCII character diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/EntityParser.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/EntityParser.php index c372b5a6a6c0f9641cf94bb3feb97996898aca2c..3ef2d09ec602186d370acaf50072687b6e2632ad 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/EntityParser.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/EntityParser.php @@ -118,7 +118,7 @@ class HTMLPurifier_EntityParser $entity = $matches[0]; $hex_part = @$matches[1]; $dec_part = @$matches[2]; - $named_part = empty($matches[3]) ? @$matches[4] : $matches[3]; + $named_part = empty($matches[3]) ? (empty($matches[4]) ? "" : $matches[4]) : $matches[3]; if ($hex_part !== NULL && $hex_part !== "") { return HTMLPurifier_Encoder::unichr(hexdec($hex_part)); } elseif ($dec_part !== NULL && $dec_part !== "") { diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule.php index bb3a9230b1a9fc0ba6d75e82e31ded79dfd074d6..6d898f80cd053570f7f7715dcb83138742f8ce38 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule.php @@ -132,9 +132,9 @@ class HTMLPurifier_HTMLModule * @param string $element Name of element to add * @param string|bool $type What content set should element be registered to? * Set as false to skip this step. - * @param string $contents Allowed children in form of: + * @param string|HTMLPurifier_ChildDef $contents Allowed children in form of: * "$content_model_type: $content_model" - * @param array $attr_includes What attribute collections to register to + * @param array|string $attr_includes What attribute collections to register to * element? * @param array $attr What unique attributes does the element define? * @see HTMLPurifier_ElementDef:: for in-depth descriptions of these parameters. diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php index 0330cd97f80190237966ae022c7cba2941a808b9..aea7584c37420ee84ef6ec0ab0f1e21e9a7315e3 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/HTMLModule/SafeScripting.php @@ -23,13 +23,13 @@ class HTMLPurifier_HTMLModule_SafeScripting extends HTMLPurifier_HTMLModule $script = $this->addElement( 'script', 'Inline', - 'Empty', + 'Optional:', // Not `Empty` to not allow to autoclose the <script /> tag @see https://www.w3.org/TR/html4/interact/scripts.html null, array( // While technically not required by the spec, we're forcing // it to this value. 'type' => 'Enum#text/javascript', - 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed)) + 'src*' => new HTMLPurifier_AttrDef_Enum(array_keys($allowed), /*case sensitive*/ true) ) ); $script->attr_transform_pre[] = diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-test.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-test.php index 1c046f379ef6fe9f8d568b796a7b7168ed5e982f..dd5f5024f5825bf61f115b95bf94bd5b9c9d8b35 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-test.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-test.php @@ -8,4 +8,6 @@ $messages = array( 'HTMLPurifier' => 'HTML Purifier X' ); +$errorNames = array(); + // vim: et sw=4 sts=4 diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-testmini.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-testmini.php index 806c83fbf751d137927f0ef6d7c7cf0d1d144473..e1e7db500609f71d8b364c1be0178351c44a3a77 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-testmini.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Language/messages/en-x-testmini.php @@ -9,4 +9,6 @@ $messages = array( 'HTMLPurifier' => 'HTML Purifier XNone' ); +$errorNames = array(); + // vim: et sw=4 sts=4 diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Lexer/DOMLex.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Lexer/DOMLex.php index 6238a99e34e59cb38d4e61eebdc3517dae101066..ca5f25b849fdbe3c61eea8da0bb6792cb5dff83e 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Lexer/DOMLex.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Lexer/DOMLex.php @@ -68,8 +68,18 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer $doc = new DOMDocument(); $doc->encoding = 'UTF-8'; // theoretically, the above has this covered + $options = 0; + if ($config->get('Core.AllowParseManyTags') && defined('LIBXML_PARSEHUGE')) { + $options |= LIBXML_PARSEHUGE; + } + set_error_handler(array($this, 'muteErrorHandler')); - $doc->loadHTML($html); + // loadHTML() fails on PHP 5.3 when second parameter is given + if ($options) { + $doc->loadHTML($html, $options); + } else { + $doc->loadHTML($html); + } restore_error_handler(); $body = $doc->getElementsByTagName('html')->item(0)-> // <html> @@ -133,11 +143,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer */ protected function getTagName($node) { - if (property_exists($node, 'tagName')) { + if (isset($node->tagName)) { return $node->tagName; - } else if (property_exists($node, 'nodeName')) { + } else if (isset($node->nodeName)) { return $node->nodeName; - } else if (property_exists($node, 'localName')) { + } else if (isset($node->localName)) { return $node->localName; } return null; @@ -150,11 +160,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer */ protected function getData($node) { - if (property_exists($node, 'data')) { + if (isset($node->data)) { return $node->data; - } else if (property_exists($node, 'nodeValue')) { + } else if (isset($node->nodeValue)) { return $node->nodeValue; - } else if (property_exists($node, 'textContent')) { + } else if (isset($node->textContent)) { return $node->textContent; } return null; diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/ConfigForm.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/ConfigForm.php index 65a777904136c18049ed6597b19275af44f2c5ee..33ae11397e51b23c75f4fb0d14799ed4b7d9c945 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/ConfigForm.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/ConfigForm.php @@ -48,7 +48,7 @@ class HTMLPurifier_Printer_ConfigForm extends HTMLPurifier_Printer $this->compress = $compress; // initialize sub-printers $this->fields[0] = new HTMLPurifier_Printer_ConfigForm_default(); - $this->fields[HTMLPurifier_VarParser::BOOL] = new HTMLPurifier_Printer_ConfigForm_bool(); + $this->fields[HTMLPurifier_VarParser::C_BOOL] = new HTMLPurifier_Printer_ConfigForm_bool(); } /** @@ -339,7 +339,7 @@ class HTMLPurifier_Printer_ConfigForm_default extends HTMLPurifier_Printer $value = ''; } } - if ($type === HTMLPurifier_VarParser::MIXED) { + if ($type === HTMLPurifier_VarParser::C_MIXED) { return 'Not supported'; $value = serialize($value); } diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php index 5f2f2f8a7c26eb0b1fccaa8d4af7656787cb7412..ae8639176e05a2748050b72d6a7e0f6272419cc4 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php @@ -43,8 +43,8 @@ class HTMLPurifier_Printer_HTMLDefinition extends HTMLPurifier_Printer $ret .= $this->element('caption', 'Doctype'); $ret .= $this->row('Name', $doctype->name); $ret .= $this->row('XML', $doctype->xml ? 'Yes' : 'No'); - $ret .= $this->row('Default Modules', implode($doctype->modules, ', ')); - $ret .= $this->row('Default Tidy Modules', implode($doctype->tidyModules, ', ')); + $ret .= $this->row('Default Modules', implode(', ', $doctype->modules)); + $ret .= $this->row('Default Tidy Modules', implode(', ', $doctype->tidyModules)); $ret .= $this->end('table'); return $ret; } diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/TagTransform/Font.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/TagTransform/Font.php index 7853d90bc64f08ca0900853ba53906a7f101b0cf..768c9b153cc5681957f87fb9865cd538feb066e7 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/TagTransform/Font.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/TagTransform/Font.php @@ -75,7 +75,7 @@ class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform if (isset($attr['size'])) { // normalize large numbers if ($attr['size'] !== '') { - if ($attr['size']{0} == '+' || $attr['size']{0} == '-') { + if ($attr['size'][0] == '+' || $attr['size'][0] == '-') { $size = (int)$attr['size']; if ($size < -2) { $attr['size'] = '-2'; diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser.php index 50cba6910db784fee6ac8af0b38f35c9b5542f55..0c97c8289d9e0387254765e4bce16e9f0e46fa96 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser.php @@ -7,34 +7,34 @@ class HTMLPurifier_VarParser { - const STRING = 1; + const C_STRING = 1; const ISTRING = 2; const TEXT = 3; const ITEXT = 4; - const INT = 5; - const FLOAT = 6; - const BOOL = 7; + const C_INT = 5; + const C_FLOAT = 6; + const C_BOOL = 7; const LOOKUP = 8; const ALIST = 9; const HASH = 10; - const MIXED = 11; + const C_MIXED = 11; /** * Lookup table of allowed types. Mainly for backwards compatibility, but * also convenient for transforming string type names to the integer constants. */ public static $types = array( - 'string' => self::STRING, + 'string' => self::C_STRING, 'istring' => self::ISTRING, 'text' => self::TEXT, 'itext' => self::ITEXT, - 'int' => self::INT, - 'float' => self::FLOAT, - 'bool' => self::BOOL, + 'int' => self::C_INT, + 'float' => self::C_FLOAT, + 'bool' => self::C_BOOL, 'lookup' => self::LOOKUP, 'list' => self::ALIST, 'hash' => self::HASH, - 'mixed' => self::MIXED + 'mixed' => self::C_MIXED ); /** @@ -42,7 +42,7 @@ class HTMLPurifier_VarParser * allowed value lists. */ public static $stringTypes = array( - self::STRING => true, + self::C_STRING => true, self::ISTRING => true, self::TEXT => true, self::ITEXT => true, @@ -74,7 +74,7 @@ class HTMLPurifier_VarParser // These are basic checks, to make sure nothing horribly wrong // happened in our implementations. switch ($type) { - case (self::STRING): + case (self::C_STRING): case (self::ISTRING): case (self::TEXT): case (self::ITEXT): @@ -85,17 +85,17 @@ class HTMLPurifier_VarParser $var = strtolower($var); } return $var; - case (self::INT): + case (self::C_INT): if (!is_int($var)) { break; } return $var; - case (self::FLOAT): + case (self::C_FLOAT): if (!is_float($var)) { break; } return $var; - case (self::BOOL): + case (self::C_BOOL): if (!is_bool($var)) { break; } @@ -119,7 +119,7 @@ class HTMLPurifier_VarParser } } return $var; - case (self::MIXED): + case (self::C_MIXED): return $var; default: $this->errorInconsistent(get_class($this), $type); diff --git a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser/Flexible.php b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser/Flexible.php index b15016c5b24a84e65d5136f33e898f3afc4d7378..3bfbe838686dce26c4b19bec8856d7ad4c81a561 100644 --- a/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser/Flexible.php +++ b/civicrm/packages/IDS/vendors/htmlpurifier/HTMLPurifier/VarParser/Flexible.php @@ -23,23 +23,23 @@ class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser // Note: if code "breaks" from the switch, it triggers a generic // exception to be thrown. Specific errors can be specifically // done here. - case self::MIXED: + case self::C_MIXED: case self::ISTRING: - case self::STRING: + case self::C_STRING: case self::TEXT: case self::ITEXT: return $var; - case self::INT: + case self::C_INT: if (is_string($var) && ctype_digit($var)) { $var = (int)$var; } return $var; - case self::FLOAT: + case self::C_FLOAT: if ((is_string($var) && is_numeric($var)) || is_int($var)) { $var = (float)$var; } return $var; - case self::BOOL: + case self::C_BOOL: if (is_int($var) && ($var === 0 || $var === 1)) { $var = (bool)$var; } elseif (is_string($var)) { diff --git a/civicrm/packages/Smarty/Smarty.class.php b/civicrm/packages/Smarty/Smarty.class.php index 598a74a8176123b7b72a4d02ac974235fc8bcb4d..275349c07cec77a6e408aa6b7378dd927bf0b2a9 100644 --- a/civicrm/packages/Smarty/Smarty.class.php +++ b/civicrm/packages/Smarty/Smarty.class.php @@ -1098,6 +1098,9 @@ class Smarty { $msg = htmlentities($error_msg); trigger_error("Smarty error: $msg", $error_type); + // Customised for CiviCRM - this allows us to capture the error messages + $event = new \Civi\Core\Event\SmartyErrorEvent($error_msg, $error_type); + \Civi::dispatcher()->dispatch('civi.smarty.error', $event); } diff --git a/civicrm/packages/kcfinder/integration/civicrm.php b/civicrm/packages/kcfinder/integration/civicrm.php index 4c8a978358a975f91f41f4f54991f56fd0469ed5..4efa68ddf48f9f407d3c9783b39c5444e65ab8f5 100644 --- a/civicrm/packages/kcfinder/integration/civicrm.php +++ b/civicrm/packages/kcfinder/integration/civicrm.php @@ -71,7 +71,7 @@ function checkAuthentication() { break; } if(!$auth_function($config)) { - CRM_Core_Error::fatal(ts("You must be logged in with proper permissions to edit, add, or delete uploaded images.")); + throw new CRM_Core_Exception(ts("You must be logged in with proper permissions to edit, add, or delete uploaded images.")); } $_SESSION['KCFINDER']['disabled'] = false; diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 9725481ed83f59238dbe1ea5e9eeb6541b7c813e..a7c7f0ef3554e82154357e519d1f0316b78dc630 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,6 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.28.0 + +Released August 5, 2020 + +- **[Synopsis](release-notes/5.28.0.md#synopsis)** +- **[Features](release-notes/5.28.0.md#features)** +- **[Bugs resolved](release-notes/5.28.0.md#bugs)** +- **[Miscellany](release-notes/5.28.0.md#misc)** +- **[Credits](release-notes/5.28.0.md#credits)** +- **[Feedback](release-notes/5.28.0.md#feedback)** + ## CiviCRM 5.27.4 Released August 3, 2020 @@ -382,7 +393,7 @@ Released October 5, 2019 - **[Credits](release-notes/5.18.1.md#credits)** - **[Feedback](release-notes/5.18.1.md#feedback)** -# CiviCRM 5.18.0 +## CiviCRM 5.18.0 Released October 2, 2019 diff --git a/civicrm/release-notes/5.28.0.md b/civicrm/release-notes/5.28.0.md new file mode 100644 index 0000000000000000000000000000000000000000..da6ba4cb630136f8ecbf537267160c5cf5dcc80e --- /dev/null +++ b/civicrm/release-notes/5.28.0.md @@ -0,0 +1,751 @@ +# CiviCRM 5.28.0 + +Released August 5, 2020 + +- **[Synopsis](#synopsis)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | no | +| **Change the database schema?** | **yes** | +| **Alter the API?** | **yes** | +| **Require attention to configuration options?** | **yes** | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### CiviCRM Core + +- **End of life planning for MySQL server 5.0 - 5.6 (Work Towards + [dev/core#1681](https://lab.civicrm.org/dev/core/-/issues/1681): + [17558](https://github.com/civicrm/civicrm-core/pull/17558))** + + Block sites from upgrading if on a MySQL version less than 5.6.5. + +- **Ability to enable SSL for database connection. (Work Towards + [dev/core#1137](https://lab.civicrm.org/dev/core/-/issues/1137): + [298](https://github.com/civicrm/civicrm-packages/pull/298))** + + Makes SSL database connections without client certificates work in PHP 7. + +- **Create new customPre hook + ([dev/core#1716](https://lab.civicrm.org/dev/core/-/issues/1716): + [17144](https://github.com/civicrm/civicrm-core/pull/17144))** + + Creates a new hook customPre which makes it so one can impact or observe + custom data before it is saved. + +- **Investigate PHP currency library + ([dev/translation#48](https://lab.civicrm.org/dev/translation/-/issues/48): + [17608](https://github.com/civicrm/civicrm-core/pull/17608))** + + Implements the PHP library [brick/money](https://github.com/brick/money) to + better handle currency amounts. + +- **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception + (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/-/issues/560): + [17555](https://github.com/civicrm/civicrm-core/pull/17555), + [295](https://github.com/civicrm/civicrm-packages/pull/295), + [602](https://github.com/civicrm/civicrm-drupal/pull/602), + [17550](https://github.com/civicrm/civicrm-core/pull/17550), + [17534](https://github.com/civicrm/civicrm-core/pull/17534), + [17541](https://github.com/civicrm/civicrm-core/pull/17541), + [17545](https://github.com/civicrm/civicrm-core/pull/17545) and + [17539](https://github.com/civicrm/civicrm-core/pull/17539))** + + Work towards throwing exceptions instead of fatal errors. + +- **APIv4 - Activity has no default for activity_date_time + ([dev/core#1782](https://lab.civicrm.org/dev/core/-/issues/1782): + [17450](https://github.com/civicrm/civicrm-core/pull/17450))** + + Sets the default for `activity_date_time` and `created_date` as the current + date when using the APIv4 Activity. + +- **Update guzzle to d8 latest + ([dev/core#1803](https://lab.civicrm.org/dev/core/-/issues/1803): + [17551](https://github.com/civicrm/civicrm-core/pull/17551))** + + This updates guzzle to version 6.5.4, civicrm/civicrm-cxn-rpc to "version" + "v0.19.01.00", guzzlehttp/psr7 to version 1.6.1 and psr/log to version 1.1.3 + +- **APIv4 - Improve row_count to work with HAVING, GROUP BY, and SELECT + ([17704](https://github.com/civicrm/civicrm-core/pull/17704))** + + This changes the meaning of $result->count(), to give a total count of + filtered items, ignoring limit and offset. + +- **APIv4 - Add more SQL functions + ([17692](https://github.com/civicrm/civicrm-core/pull/17692))** + + Adds support for additional SQL functions in APIv4. Also categorizes them and + adds translated titles for the new Search Builder. + +- **APIv4 - Add titles and icons to entities + ([17527](https://github.com/civicrm/civicrm-core/pull/17527) and + [17685](https://github.com/civicrm/civicrm-core/pull/17685))** + + Adds titles and icons to DAO entities and expose them to APIv4 Entity::get and + adds meta-metadata. + +- **APIv4 Explorer - UI support for join ON clause + ([17682](https://github.com/civicrm/civicrm-core/pull/17682))** + + Improves the APIv4 explorer to give selectable clauses when adding a JOIN. + +- **Add permission metadata to contact is_deleted field + ([17721](https://github.com/civicrm/civicrm-core/pull/17721))** + + Improves the contact schema metadata. + +- **API/DAO Metadata - Retain versioning metadata for possible usage in + runtime+tooling + ([17735](https://github.com/civicrm/civicrm-core/pull/17735))** + + Adds metadata to indicate when fields are created. + +- **Connect to database using SET NAMES utf8mb4 + ([17716](https://github.com/civicrm/civicrm-core/pull/17716))** + + This change makes it so one can use utf8mb4 characters. However, databases + that do not support utf8mb4 will not be affected. + +- **Remove slow join from activity search + ([17250](https://github.com/civicrm/civicrm-core/pull/17250))** + + Improves performance of the activity search. + +- **Add icons to standalone contact tasks + ([17667](https://github.com/civicrm/civicrm-core/pull/17667))** + + This adds icon data to contact tasks that appear in the new search builder + extension. + +- **Add icons to multi-valued custom groups and display on contact tab + ([17531](https://github.com/civicrm/civicrm-core/pull/17531))** + + Custom data sets that appear as tabs can now have configurable icons to + display on the tab. + +- **Add serialize metadata to domain.locales field + ([17651](https://github.com/civicrm/civicrm-core/pull/17651))** + + Adds metadata to help APIv4 serialize/unserialize the domain.locales + field correctly. + +- **Add Smarty error event + ([16918](https://github.com/civicrm/civicrm-core/pull/16918) and + [292](https://github.com/civicrm/civicrm-packages/pull/292))** + + Improves debugging errors in Smarty templates. + +- **Allow HEAD requests to generate a form key + ([17321](https://github.com/civicrm/civicrm-core/pull/17321))** + + Avoids generating crashes (500 errors) when bots check links. + +- **Include a new SqlParallel queue type that enables multiple queue runners to + process in parallel + ([15422](https://github.com/civicrm/civicrm-core/pull/15422))** + + Adds a new SQL queue type which will allow multiple runners to fetch the next + available job from a queue and run in parallel. + +- **Allow adding datepicker to metadata based settings pages + ([16610](https://github.com/civicrm/civicrm-core/pull/16610))** + + Makes it so that datepicker can be added to metadata based settings pages by + specifying html_Type='datepicker' in settings metadata. + +### CiviContribute + +- **Add payment processor to details on list of recurring contributions + ([17179](https://github.com/civicrm/civicrm-core/pull/17179))** + + The list of recurring contributions now has a column showing the payment + processor. + +- **Fix all core processors to throw exceptions and not rely on the + CRM_Core_Payment to convert errors to exceptions + ([dev/financial#131](https://lab.civicrm.org/dev/financial/-/issues/131): + [17565](https://github.com/civicrm/civicrm-core/pull/17565), + [17559](https://github.com/civicrm/civicrm-core/pull/17559), + [17542](https://github.com/civicrm/civicrm-core/pull/17542), + [17502](https://github.com/civicrm/civicrm-core/pull/17502), + [17500](https://github.com/civicrm/civicrm-core/pull/17500), + [17597](https://github.com/civicrm/civicrm-core/pull/17597), + [17592](https://github.com/civicrm/civicrm-core/pull/17592) and + [17596](https://github.com/civicrm/civicrm-core/pull/17596))** + + Makes it so that core payment processors fail gracefully more often. + +- **Add selfService flag to cancelSubscription getText so we can display + different text for each case + ([17687](https://github.com/civicrm/civicrm-core/pull/17687))** + + Makes it so payment processor developers can identify the different contexts + someone may be canceling from and display appropriate messaging. + +- **Price Field Form - Save the fid for the postProcess hook + ([17639](https://github.com/civicrm/civicrm-core/pull/17639))** + + Improves `postProcess` hook for Price Field Form by making the field id + available. + +- **Improve error handling on IPN + ([18062](https://github.com/civicrm/civicrm-core/pull/18062))** + + The error message and backtrace from a failed PayPal Website Payments Standard + instant payment notification (IPN) are now logged. + +### CiviMember + +- **Display start/end adjustment on membership status page. + ([dev/core#1809](https://lab.civicrm.org/dev/core/-/issues/1809): + [17571](https://github.com/civicrm/civicrm-core/pull/17571))** + + Improves the Membership Status administration page by adding columns for the + start/end adjustment. + +### WordPress Integration + +- **Provide concrete details about civicrm.files + ([18011](https://github.com/civicrm/civicrm-core/pull/18011) follows on + [dev/wordpress#66](https://lab.civicrm.org/dev/wordpress/-/issues/66), see + also [17868](https://github.com/civicrm/civicrm-core/pull/17868))** + + A message will appear after an upgrade to 5.28.0 or later specifying the + calculated and expected file upload locations. + + Changes appearing in 5.27 have been reverted but will be reapplied in 5.29 + after more notice is provided. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **Contact image is broken + ([dev/wordpress#62](https://lab.civicrm.org/dev/wordpress/-/issues/62): + [17853](https://github.com/civicrm/civicrm-core/pull/17853))** + + This resolves a problem on sites managed with Git where the `db.json` file + would be missed. + +- **Evaluate if any indexed fields are unused (Work Towards + [dev/core#1634](https://lab.civicrm.org/dev/core/-/issues/1634): + [17686](https://github.com/civicrm/civicrm-core/pull/17686))** + + Remove database index on `medium_id` from `civicrm_activity`. + +- **Activity - Default priority value when adding an activity + ([dev/core#1801](https://lab.civicrm.org/dev/core/-/issues/1801): + [17557](https://github.com/civicrm/civicrm-core/pull/17557))** + + Ensures when creating a new activity the priority field defaults correctly for + sites not in english. + +- **The multi-lingual multi-domain problem + ([dev/core#1852](https://lab.civicrm.org/dev/core/-/issues/1852): + [17738](https://github.com/civicrm/civicrm-core/pull/17738) and + [17733](https://github.com/civicrm/civicrm-core/pull/17733))** + + Ensures that the list of languages civicrm_domain.locales is the same for all + domains in a multi-domain set up. + +- **APIv4 - Skip empty leaves in WHERE clause + ([17576](https://github.com/civicrm/civicrm-core/pull/17576))** + + Fixes a bug in search builder where APIv4 gives a SQL error while building + your where clause. + +- **Offset is not respected in Date Preferences + ([dev/core#1847](https://lab.civicrm.org/dev/core/-/issues/1847) and + [dev/core#1874](https://lab.civicrm.org/dev/core/-/issues/1874): + [17762](https://github.com/civicrm/civicrm-core/pull/17762) and + [17836](https://github.com/civicrm/civicrm-core/pull/17836))** + +- **Fix CRM_Utils_JS::dedupeClosures to ignore comments + ([17717](https://github.com/civicrm/civicrm-core/pull/17717))** + + Ensures comments do not interfere with deduping. + +- **Use PHPUnit7 as the primary test runner + ([17615](https://github.com/civicrm/civicrm-core/pull/17615), + [17661](https://github.com/civicrm/civicrm-core/pull/17661), + [120](https://github.com/civicrm/civicrm-backdrop/pull/120), + [605](https://github.com/civicrm/civicrm-drupal/pull/605), + [206](https://github.com/civicrm/civicrm-wordpress/pull/206))** + +- **Fix isMultilingual to use static caching and respect current domain + ([17646](https://github.com/civicrm/civicrm-core/pull/17646))** + + Improves the efficiency and accuracy of the `CRM_Core_I18n::isMultilingual` + function, preventing a large number of duplicate queries on every request. + +- **Update has_separator field in civicrm_navigation + ([17579](https://github.com/civicrm/civicrm-core/pull/17579))** + + This field was incorrectly marked as a boolean; it's actually an int with an + option list. + +- **Civi\Payment\PropertyBag - Remove warning + ([17506](https://github.com/civicrm/civicrm-core/pull/17506))** + +- **Fix duplicate upgrade function + ([17582](https://github.com/civicrm/civicrm-core/pull/17582))** + + Fixes a fatal error on upgrade caused by a merge conflict. + +- **CRM_Case_XMLProcessor::allActivityTypes() doesn't do caching right + ([dev/core#1433](https://lab.civicrm.org/dev/core/-/issues/1433): + [17627](https://github.com/civicrm/civicrm-core/pull/17627), + [17616](https://github.com/civicrm/civicrm-core/pull/17616) and + [17614](https://github.com/civicrm/civicrm-core/pull/17614))** + +- **CustomValue.GetTree API Does Not Return Display Value for Money Select/Radio + Custom field ([dev/core#1566](https://lab.civicrm.org/dev/core/-/issues/1566): + [17008](https://github.com/civicrm/civicrm-core/pull/17008))** + +- **whom_url missing contact ID parameter in detailed logging report + ([dev/core#1749](https://lab.civicrm.org/dev/core/-/issues/1749): + [17440](https://github.com/civicrm/civicrm-core/pull/17440))** + +- **Regression - File fields export results in DB error + ([dev/core#1787](https://lab.civicrm.org/dev/core/-/issues/1787): + [17578](https://github.com/civicrm/civicrm-core/pull/17578))** + +- **Relative date filter - End of yesterday not working properly + ([dev/core#1798](https://lab.civicrm.org/dev/core/-/issues/1798): + [17512](https://github.com/civicrm/civicrm-core/pull/17512))** + +- **Editing a custom field choice label changes the `name` if you do it from the + custom field admin screens + ([dev/core#1817](https://lab.civicrm.org/dev/core/-/issues/1817): + [17681](https://github.com/civicrm/civicrm-core/pull/17681))** + +- **Custom Date field with format=yy displays calendar icon that doesn't work + ([dev/core#1829](https://lab.civicrm.org/dev/core/-/issues/1829): + [17664](https://github.com/civicrm/civicrm-core/pull/17664))** + +- **Unable to install 5.28 on Maria DB 10.3 on Ubuntu + ([dev/core#1860](https://lab.civicrm.org/dev/core/-/issues/1860): + [17772](https://github.com/civicrm/civicrm-core/pull/17772))** + +- **APIv4 - Filter getActions results based on user permissions + ([17540](https://github.com/civicrm/civicrm-core/pull/17540))** + +- **Pre-upgrade message for php-intl shows twice + ([17748](https://github.com/civicrm/civicrm-core/pull/17748))** + +- **Fix saving of State/Province Multi-select values + ([17737](https://github.com/civicrm/civicrm-core/pull/17737))** + +- **[regression] Attempting to access Multi-Record Custom Field import results + in crash ([dev/core#1841](https://lab.civicrm.org/dev/core/-/issues/1841): + [17697](https://github.com/civicrm/civicrm-core/pull/17697))** + +- **Use PSR-4 instead of PSR-0 in Civi directory + ([17690](https://github.com/civicrm/civicrm-core/pull/17690))** + +- **Sort options without relying on unavailable buildOptions param + ([17621](https://github.com/civicrm/civicrm-core/pull/17621))** + +- **Throw exception if id not passed into discard + ([17666](https://github.com/civicrm/civicrm-core/pull/17666))** + +- **Fix validation of select2 fields in "On behalf of Organisation" block + ([17672](https://github.com/civicrm/civicrm-core/pull/17672))** + +- **Pass required attribute for quickform fields through to form + ([16488](https://github.com/civicrm/civicrm-core/pull/16488) and + [17929](https://github.com/civicrm/civicrm-core/pull/17929) related to + [dev/core#1903](https://lab.civicrm.org/dev/core/-/issues/1903))** + +- **CRM_Core_I18n::setLocale() - Fix bug with repeated usage + ([17374](https://github.com/civicrm/civicrm-core/pull/17374))** + +- **Fix retrieving MySQL version for checking as part of install requirements + ([17593](https://github.com/civicrm/civicrm-core/pull/17593))** + +- **Set ContactType.name as required in the schema. + ([17548](https://github.com/civicrm/civicrm-core/pull/17548), + [17570](https://github.com/civicrm/civicrm-core/pull/17570), and + [18070](https://github.com/civicrm/civicrm-core/pull/18070) related to + [dev/core#1927](https://lab.civicrm.org/dev/core/-/issues/1927))** + +- **Fix "Undefined variable: entryFound" notice on Bookkeeping report + ([17554](https://github.com/civicrm/civicrm-core/pull/17554))** + +- **Zip code range search only supports numeric zip codes + ([17523](https://github.com/civicrm/civicrm-core/pull/17523))** + + Rather than causing a database error, this displays an error message when + attempting to search a postal code range using non-numeric postal codes. + +- **Remove isThrowException from CRM_Utils_Type::validate() signature + ([17546](https://github.com/civicrm/civicrm-core/pull/17546))** + +- **`codeVersion` not displayed in system status check error message about db + version vs codeversion + ([dev/core#1882](https://lab.civicrm.org/dev/core/-/issues/1882): + [17854](https://github.com/civicrm/civicrm-core/pull/17854))** + +- **"Merge" form moves unchecked related entities (intra-RC regression) + ([dev/core#1930](https://lab.civicrm.org/dev/core/-/issues/1930): + [18079](https://github.com/civicrm/civicrm-core/pull/18079))** + +### CiviCase + +- **Non-compliant query leads to (semi-)random sorting and failing unit test + CRM_Case_BAO_CaseTest::testSortByCaseContact + ([dev/core#1844](https://lab.civicrm.org/dev/core/-/issues/1844): + [17708](https://github.com/civicrm/civicrm-core/pull/17708))** + +### CiviContribute + +- **Payment instrument ID is not required at processorform level + ([17510](https://github.com/civicrm/civicrm-core/pull/17510))** + + Do not throw warning if payment instrument is not sent. + +- **Bank fee has wrong date on import in civicrm_financial_item.transaction_date + incorrected uses import date rather than payment date on + ([dev/core#1776](https://lab.civicrm.org/dev/core/-/issues/1776): + [17389](https://github.com/civicrm/civicrm-core/pull/17389))** + + Ensures the `civicrm_financial_item.transaction_date` gets recorded correctly + when importing a transaction with a bank fee. + +- **Payment.create should not set contribution date to today + ([17688](https://github.com/civicrm/civicrm-core/pull/17688))** + +- **Fix PHP notice when we don't have credit card params + ([16514](https://github.com/civicrm/civicrm-core/pull/16514) and + [17584](https://github.com/civicrm/civicrm-core/pull/17584))** + +- **Improve PropertyBag handling of offsetGet and custom properties; add more + tests ([17588](https://github.com/civicrm/civicrm-core/pull/17588) and + [17654](https://github.com/civicrm/civicrm-core/pull/17654))** + +- **Graphs on Contribution Summary report replace final row with grand total + value ([dev/report#40](https://lab.civicrm.org/dev/report/-/issues/40): + [17412](https://github.com/civicrm/civicrm-core/pull/17412))** + +- **"Undefined offset" bug in BAO/FinancialAccount.php + ([dev/wordpress#61](https://lab.civicrm.org/dev/wordpress/-/issues/61): + [17701](https://github.com/civicrm/civicrm-core/pull/17701) and + [17689](https://github.com/civicrm/civicrm-core/pull/17689))** + + Ensures that the financial account is set correctly even when the name does + not match the label. + +### CiviEvent + +- **Event participant_listing_id field defaults to 0 instead of Null + ([dev/core#1833](https://lab.civicrm.org/dev/core/-/issues/1833): + [17677](https://github.com/civicrm/civicrm-core/pull/17677))** + +- **Multiple line item shown on view contribution if participant is transferred + to another contact. + ([dev/core#890](https://lab.civicrm.org/dev/core/-/issues/890): + [16956](https://github.com/civicrm/civicrm-core/pull/16956))** + +### CiviGrant + +- **Bug in Grant statistics report + ([17640](https://github.com/civicrm/civicrm-core/pull/17640))** + +### CiviSMS + +- **Can't change SMS recipient on non-bulk SMS + ([dev/core#1840](https://lab.civicrm.org/dev/core/-/issues/1840): + [17691](https://github.com/civicrm/civicrm-core/pull/17691))** + +### Drupal Integration + +- **Error: Class 'CRM_Upgrade_Incremental_General' not found in + Civi\Install\Requirements->checkMysqlVersion() + ([dev/drupal#131](https://lab.civicrm.org/dev/drupal/-/issues/131): + [18066](https://github.com/civicrm/civicrm-core/pull/18066))** + +### Joomla Integration + +- **Ensure that when normal routing trackable urls and opens in Joomla go to the + frontend not administrator site + ([17760](https://github.com/civicrm/civicrm-core/pull/17760))** + +### WordPress Integration + +- **Remove `/` from the beginning and end of query string + ([207](https://github.com/civicrm/civicrm-wordpress/pull/207))** + + Fixes a 'You do not have permission to access this content.' error resulting + from an extra '/' in the `q=` string in the url. + +- **Base page fails to recognise Page Templates in subdirectories. + ([dev/wordpress#58](https://lab.civicrm.org/dev/wordpress/-/issues/58): + [204](https://github.com/civicrm/civicrm-wordpress/pull/204))** + + Ensures that the CiviCRM base page is correctly identified when it does not + reside in the theme root directory. + +- **Prevent session from starting during WordPress pseudo cron procedures + ([dev/core#1889](https://lab.civicrm.org/dev/core/-/issues/1889): + [17890](https://github.com/civicrm/civicrm-core/pull/17890) and + [210](https://github.com/civicrm/civicrm-wordpress/pull/210))** + +## <a name="misc"></a>Miscellany + +- **Ship Flexmailer extension with civicrm-core + ([17669](https://github.com/civicrm/civicrm-core/pull/17669), + ([17768](https://github.com/civicrm/civicrm-core/pull/17768))** + +- **Support passing old method name into deprecatedFunctionWarning + ([17552](https://github.com/civicrm/civicrm-core/pull/17552))** + +- **Add CRM_Core_Form::isFormInViewMode and CRM_Core_Form::isFormInEditMode + ([17637](https://github.com/civicrm/civicrm-core/pull/17637))** + +- **CRM_Utils_JS - Dedupe 'use strict' directive + ([17711](https://github.com/civicrm/civicrm-core/pull/17711))** + +- **Add isBackOffice, isPayLater, getPaymentMode helpers to + frontendpaymentformtrait + ([17511](https://github.com/civicrm/civicrm-core/pull/17511))** + +- **Fix issue $this + ([589](https://github.com/civicrm/civicrm-drupal/pull/589))** + +- **Fix validateAll to no longer support unused abort param + ([17544](https://github.com/civicrm/civicrm-core/pull/17544))** + +- **Remove deprecated billingID from baseIPN + ([17525](https://github.com/civicrm/civicrm-core/pull/17525))** + +- **Add EntityFormTrait to pricefieldForm - stdised getEntityId() + ([17516](https://github.com/civicrm/civicrm-core/pull/17516))** + +- **Update contributor-key.yml + ([17553](https://github.com/civicrm/civicrm-core/pull/17553))** + +- **Export fix ([17644](https://github.com/civicrm/civicrm-core/pull/17644))** + +- **Upgrade HTML Purifier to v4.12.0 to support for PHP7.4 + ([297](https://github.com/civicrm/civicrm-packages/pull/297))** + +- **Temporary tables should follow consistent naming convention + ([dev/core#183](https://lab.civicrm.org/dev/core/-/issues/183): + [15796](https://github.com/civicrm/civicrm-core/pull/15796))** + +- **Remove unreachable lines + ([17563](https://github.com/civicrm/civicrm-core/pull/17563))** + +- **EventInfo template cleanup + ([17581](https://github.com/civicrm/civicrm-core/pull/17581))** + +- **[NFC] Misspelled word + ([17652](https://github.com/civicrm/civicrm-core/pull/17652))** + +- **Remove a usage of deprecated funtion get_magic_quotes_gpc and also switch out + {} for [] whne acecssing string or array offsets + ([296](https://github.com/civicrm/civicrm-packages/pull/296))** + +- **Remove unused deprecated class + ([17535](https://github.com/civicrm/civicrm-core/pull/17535))** + +- **Remove obsolete function formatWikiURL + ([17726](https://github.com/civicrm/civicrm-core/pull/17726))** + +- **[REF] Simplify the replacing of the email with the email from the url + ([17491](https://github.com/civicrm/civicrm-core/pull/17491))** + +- **[REF] Replace incorrect usages of array_key_exists when the variable is not + an array with property_exists and also fix the parameter order for an implode + statement ([17573](https://github.com/civicrm/civicrm-core/pull/17573))** + +- **[REF] Convert Authorize.net to use Guzzle for update subscription class, add + test ([17585](https://github.com/civicrm/civicrm-core/pull/17585))** + +- **[REF] Using {} to access string or array offsets has been deprecated in + PHP7.4 ([17574](https://github.com/civicrm/civicrm-core/pull/17574))** + +- **[REF] Mark unused date functions as deprecated + ([17487](https://github.com/civicrm/civicrm-core/pull/17487))** + +- **[REF] Using ternary operation without nesting is deprecated and also using + methods and properly instanciate the CiviCase Info object in test + ([17575](https://github.com/civicrm/civicrm-core/pull/17575))** + +- **[REF] Convert Authorize.net doDirectPayment to use guzzle & add test + ([17501](https://github.com/civicrm/civicrm-core/pull/17501))** + +- **[REF] Replace the deprecated system_rebuild_module_data function with + equivilant extension.list.module service function calls to be Drupal 9 + compatiable ([17515](https://github.com/civicrm/civicrm-core/pull/17515))** + +- **[REF] Remove never reachable lines. + ([17556](https://github.com/civicrm/civicrm-core/pull/17556))** + +- **[REF] Remove another instance of fatal() + ([17549](https://github.com/civicrm/civicrm-core/pull/17549))** + +- **[REF] Readability extraction in Dummy class + ([17543](https://github.com/civicrm/civicrm-core/pull/17543))** + +- **[REF] Replace some instances of fatal with thrown exceptions. + ([17533](https://github.com/civicrm/civicrm-core/pull/17533))** + +- **[REF] Remove calls to, and deprecate, unhandled function + ([17499](https://github.com/civicrm/civicrm-core/pull/17499))** + +- **[REF] Remove handling for 2 fields not on the form + ([17504](https://github.com/civicrm/civicrm-core/pull/17504))** + +- **[REF] Remove some instances of fatal in BAO classes + ([17536](https://github.com/civicrm/civicrm-core/pull/17536))** + +- **[REF] Access the method not the property directly to check if a payment + processor supports recurring + ([17602](https://github.com/civicrm/civicrm-core/pull/17602))** + +- **[REF] Ensure that our custom error handler is called when jQuery validates + and expand any collapsed accordions that are hiding required fields that + haven't been filled in + ([17673](https://github.com/civicrm/civicrm-core/pull/17673))** + +- **[REF] Consolidate code in processMembership + ([17611](https://github.com/civicrm/civicrm-core/pull/17611))** + +- **[REF] Cleanup function for retrieving contact types. + ([17676](https://github.com/civicrm/civicrm-core/pull/17676))** + +- **[REF] Fix Javascript syntax error + ([17678](https://github.com/civicrm/civicrm-core/pull/17678))** + +- **[REF] Fix jQuery error message display on select2 field validation + ([17671](https://github.com/civicrm/civicrm-core/pull/17671))** + +- **[REF] Fix allowing users to clear values for raido custom fields when not + required ([17670](https://github.com/civicrm/civicrm-core/pull/17670))** + +- **[REF] Extract getTestTrxnID + ([17642](https://github.com/civicrm/civicrm-core/pull/17642))** + +- **Update Flexmailer to be PHP7.4 compatible + ([17779](https://github.com/civicrm/civicrm-core/pull/17779), [17660](https://github.com/civicrm/civicrm-core/pull/17660))** + +- **[REF] Ensure that the Manual Payment Processor sets the _paymentProcessor + variable like other Processors to fix issues in PHP7.4 and UnitTests + ([17648](https://github.com/civicrm/civicrm-core/pull/17648))** + +- **[REF] Fix PHP7.4 Test fails when we are accessing array keys when the value + is not an array + ([17649](https://github.com/civicrm/civicrm-core/pull/17649))** + +- **[REF] Fix parts of code where curly brackets were being used for array or + string access which is deprecated in PHP7.4 + ([17647](https://github.com/civicrm/civicrm-core/pull/17647))** + +- **[REF] Fix issue with using array access tools on NULL values + ([17600](https://github.com/civicrm/civicrm-core/pull/17600))** + +- **[REF] Replace incorrect usage of array_key_exists with property_exists in + Group BAO Class + ([17604](https://github.com/civicrm/civicrm-core/pull/17604))** + +- **[REF] Add test for renewing old expired membership via form + ([17564](https://github.com/civicrm/civicrm-core/pull/17564))** + +- **[REF] Update packages to work with PHP7.4 + ([17598](https://github.com/civicrm/civicrm-core/pull/17598))** + +- **[REF] Fix another couple of uses of array_key_exists when the variable being + checked is an object + ([17601](https://github.com/civicrm/civicrm-core/pull/17601))** + +- **[REF] Remove deprecated methods of booting Drupal container and getting + Drupal timezone information + ([17522](https://github.com/civicrm/civicrm-core/pull/17522))** + +- **[REF] Fix some additional issues where curly braces were being used to + access string or array offsets + ([17599](https://github.com/civicrm/civicrm-core/pull/17599))** + +- **[NFC] Update existing APIv3 MembershipType Tests to also test against APIv4 + as appropriate ([17528](https://github.com/civicrm/civicrm-core/pull/17528))** + +- **[NFC] cleanup docblocks in CRM_Utils_JS + ([17714](https://github.com/civicrm/civicrm-core/pull/17714))** + +- **[NFC] Fix some outdated wiki links + ([17739](https://github.com/civicrm/civicrm-core/pull/17739))** + +- **[NFC] Fix contributor key for Lighthouse Consulting and Design + ([17727](https://github.com/civicrm/civicrm-core/pull/17727))** + +- **[NFC] Fix unit test failure on MySQL 8 due to ordering issue + ([17674](https://github.com/civicrm/civicrm-core/pull/17674))** + +- **[NFC] Remove instances where html is passed to crmMoney + ([17612](https://github.com/civicrm/civicrm-core/pull/17612))** + +- **[NFC] Add assertions to existing test to lock in current behaviour + ([17605](https://github.com/civicrm/civicrm-core/pull/17605))** + +- **[NFC] Update mocking to use getMockBuilder instead instead of createMock + ([17606](https://github.com/civicrm/civicrm-core/pull/17606))** + +- **[NFC] Formatting cleanup on contribution/recur templates + ([17603](https://github.com/civicrm/civicrm-core/pull/17603))** + +- **[NFC] Minor code cleanup + ([17566](https://github.com/civicrm/civicrm-core/pull/17566))** + +- **MembershipRenewalTest - Fix failure + ([17830](https://github.com/civicrm/civicrm-core/pull/17830))** + +- **[REF] Fix regression where adding any date based field onto a profile + triggers an error date preferences not configured when previewing the profile + ([17973](https://github.com/civicrm/civicrm-core/pull/17973))** + +- **[NFC] Port some recent test fixes from master to 5.28 + ([18053](https://github.com/civicrm/civicrm-core/pull/18053))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andrew Hunt; British Humanist Association - +Andrew West; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM - +Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - Ivan; Coop +SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Dietermartens; ES-Progress - +Sandor Semsey; Flinders University of South Australia - Tom Anderson; Fuzion - +Jitendra Purohit; JMA Consulting - Seamus Lee; Lighthouse Consulting and +Design- Brian Shaughnessy; Marcin Lewandowski; Megaphone Technology Consulting - +Jon Goldberg; MJW Consulting - Matthew Wire; Tadpole Collective - Kevin +Cristiano; Wikimedia Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +a-n The Artists Information Company - William Mortada; Agileware - Francis +Whittle, Justin Freeman; Andrew Thompson; Artful Robot - Rich Lott; Betty +Dolfing; Blackfly Solutions - Alan Dixon; CiviCoop - Jaap Jansma; Fuzion - Luke +Stewart, Peter Davis; JMA Consulting - Joe Murray; MJCO - Mikey O'Toole; Semper +IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Third Sector Design: +Eriol Fox; Timbsoft Technologies - Tunbola Ogunwande + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/setup/plugins/installDatabase/FlushDrupal8.civi-setup.php b/civicrm/setup/plugins/installDatabase/FlushDrupal8.civi-setup.php index 05836729da51ca12699bc660f5189ecf4ee86bf4..c1d57e2f4930a5e3a2606dc2c7a1c3778d584442 100644 --- a/civicrm/setup/plugins/installDatabase/FlushDrupal8.civi-setup.php +++ b/civicrm/setup/plugins/installDatabase/FlushDrupal8.civi-setup.php @@ -16,7 +16,7 @@ if (!defined('CIVI_SETUP')) { } \Civi\Setup::log()->info(sprintf('[%s] Flush CMS metadata', basename(__FILE__))); - system_rebuild_module_data(); + \Drupal::service('extension.list.module')->reset(); \Drupal::service('module_installer')->install(['civicrm', 'civicrmtheme']); drupal_flush_all_caches(); civicrm_install_set_drupal8_perms(); diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index 0f15db4a6e6a129d2b28f04121621e217e579f58..f8eada46b4d5f925e5fdc4a84a20fcc0f5c2f2bd 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -815,13 +815,13 @@ CREATE TABLE `civicrm_contact_type` ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Contact Type ID', - `name` varchar(64) COMMENT 'Internal name of Contact Type (or Subtype).', + `name` varchar(64) NOT NULL COMMENT 'Internal name of Contact Type (or Subtype).', `label` varchar(64) COMMENT 'localized Name of Contact Type.', `description` text COMMENT 'localized Optional verbose description of the type.', `image_URL` varchar(255) COMMENT 'URL of image if any.', `parent_id` int unsigned COMMENT 'Optional FK to parent contact type.', - `is_active` tinyint COMMENT 'Is this entry active?', - `is_reserved` tinyint COMMENT 'Is this contact type a predefined system type' + `is_active` tinyint DEFAULT 1 COMMENT 'Is this entry active?', + `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this contact type a predefined system type' , PRIMARY KEY (`id`) @@ -1761,7 +1761,8 @@ CREATE TABLE `civicrm_custom_group` ( `created_id` int unsigned COMMENT 'FK to civicrm_contact, who created this custom group', `created_date` datetime COMMENT 'Date and time this custom group was created.', `is_reserved` tinyint DEFAULT 0 COMMENT 'Is this a reserved Custom Group?', - `is_public` tinyint DEFAULT 1 COMMENT 'Is this property public?' + `is_public` tinyint DEFAULT 1 COMMENT 'Is this property public?', + `icon` varchar(255) DEFAULT NULL COMMENT 'crm-i icon class' , PRIMARY KEY (`id`) @@ -2168,7 +2169,7 @@ CREATE TABLE `civicrm_navigation` ( `permission_operator` varchar(3) COMMENT 'Permission Operator', `parent_id` int unsigned COMMENT 'Parent navigation item, used for grouping', `is_active` tinyint COMMENT 'Is this navigation item active?', - `has_separator` tinyint COMMENT 'If separator needs to be added after this menu item', + `has_separator` tinyint DEFAULT 0 COMMENT 'Place a separator either before or after this menu item.', `weight` int COMMENT 'Ordering of the navigation items in various blocks.' , PRIMARY KEY (`id`) @@ -4206,7 +4207,7 @@ CREATE TABLE `civicrm_activity` ( `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.', `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 COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.', + `activity_date_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.', `duration` int unsigned COMMENT 'Planned or actual duration of activity expressed in minutes. Conglomerate of former duration_hours and duration_minutes.', `location` varchar(255) COMMENT 'Location of the activity (optional, open text).', `phone_id` int unsigned COMMENT 'Phone ID of the number called (optional - used if an existing phone number is selected).', @@ -4227,7 +4228,7 @@ CREATE TABLE `civicrm_activity` ( `engagement_level` int unsigned COMMENT 'Assign a specific level of engagement to this activity. Used for tracking constituents in ladder of engagement.', `weight` int , `is_star` tinyint DEFAULT 0 COMMENT 'Activity marked as favorite.', - `created_date` timestamp NULL DEFAULT NULL COMMENT 'When was the activity was created.', + `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When was the activity was created.', `modified_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was the activity (or closely related entity) was created or modified or deleted.' , PRIMARY KEY (`id`) @@ -4244,9 +4245,6 @@ CREATE TABLE `civicrm_activity` ( , INDEX `index_status_id`( status_id ) - , INDEX `index_medium_id`( - medium_id - ) , INDEX `index_is_current_revision`( is_current_revision ) @@ -4717,7 +4715,7 @@ CREATE TABLE `civicrm_event` ( `summary` text COMMENT 'Brief summary of event. Text and html allowed. Displayed on Event Registration form and can be used on other CMS pages which need an event summary.', `description` text COMMENT 'Full description of event. Text and html allowed. Displayed on built-in Event Information screens.', `event_type_id` int unsigned DEFAULT 0 COMMENT 'Event Type ID.Implicit FK to civicrm_option_value where option_group = event_type.', - `participant_listing_id` int unsigned DEFAULT 0 COMMENT 'Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.', + `participant_listing_id` int unsigned DEFAULT NULL COMMENT 'Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.', `is_public` tinyint DEFAULT 1 COMMENT 'Public events will be included in the iCal feeds. Access to private event information may be limited using ACLs.', `start_date` datetime COMMENT 'Date and time that event starts.', `end_date` datetime COMMENT 'Date and time that event ends. May be NULL if no defined end date/time', diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 1b5e2b547b16c44a1ba81ce15fa0445c48c55f12..12bbf583f36145b26231ce9be72f9698a534f6c3 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -23897,4 +23897,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.27.4'; +UPDATE civicrm_domain SET version = '5.28.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 7bb9948304819758697dec9e906c650cc4a84e48..e5eb00b717d05817ad3f867c4753e745150f18fd 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.6.40, for macos10.13 (x86_64) +-- MySQL dump 10.13 Distrib 5.7.26, for osx10.10 (x86_64) -- --- Host: localhost Database: civicrm_crm +-- Host: 127.0.0.1 Database: dmasterciv_tdjht -- ------------------------------------------------------ --- Server version 5.6.40 +-- Server version 5.7.26 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -87,7 +87,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity` WRITE; /*!40000 ALTER TABLE `civicrm_activity` DISABLE KEYS */; -INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES (1,NULL,9,'Subject for Tell a Friend','2019-09-25 15:43:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(2,NULL,9,'Subject for Tell a Friend','2020-04-11 06:57:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(3,NULL,9,'Subject for Tell a Friend','2020-02-02 13:06:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(4,NULL,9,'Subject for Tell a Friend','2019-06-14 01:14:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(5,NULL,10,'Subject for Pledge Acknowledgment','2019-09-25 07:16:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(6,NULL,10,'Subject for Pledge Acknowledgment','2019-11-09 10:07:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(7,NULL,9,'Subject for Tell a Friend','2020-03-17 02:27:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(8,NULL,10,'Subject for Pledge Acknowledgment','2019-12-15 20:38:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(9,NULL,10,'Subject for Pledge Acknowledgment','2020-05-10 14:00:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(10,NULL,9,'Subject for Tell a Friend','2020-04-26 20:51:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(11,NULL,9,'Subject for Tell a Friend','2020-02-08 21:14:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(12,NULL,10,'Subject for Pledge Acknowledgment','2019-06-16 14:03:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(13,NULL,9,'Subject for Tell a Friend','2019-11-17 17:47:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(14,NULL,9,'Subject for Tell a Friend','2019-06-27 02:49:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(15,NULL,10,'Subject for Pledge Acknowledgment','2019-08-19 22:03:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(16,NULL,10,'Subject for Pledge Acknowledgment','2019-08-20 10:09:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(17,NULL,9,'Subject for Tell a Friend','2019-08-28 06:49:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(18,NULL,9,'Subject for Tell a Friend','2019-07-30 17:29:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(19,NULL,10,'Subject for Pledge Acknowledgment','2019-10-23 15:49:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(20,NULL,10,'Subject for Pledge Acknowledgment','2019-08-23 03:33:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(21,NULL,9,'Subject for Tell a Friend','2019-11-24 13:32:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(22,NULL,9,'Subject for Tell a Friend','2020-03-21 23:44:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(23,NULL,10,'Subject for Pledge Acknowledgment','2020-01-20 14:17:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(24,NULL,9,'Subject for Tell a Friend','2019-11-01 09:29:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(25,NULL,10,'Subject for Pledge Acknowledgment','2020-03-05 02:17:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(26,NULL,9,'Subject for Tell a Friend','2019-10-03 13:02:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(27,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 09:29:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(28,NULL,9,'Subject for Tell a Friend','2019-09-14 16:41:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(29,NULL,10,'Subject for Pledge Acknowledgment','2019-12-22 20:29:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(30,NULL,10,'Subject for Pledge Acknowledgment','2019-10-03 06:12:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(31,NULL,9,'Subject for Tell a Friend','2020-02-24 12:41:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(32,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 09:55:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(33,NULL,10,'Subject for Pledge Acknowledgment','2019-08-17 03:36:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(34,NULL,10,'Subject for Pledge Acknowledgment','2020-02-12 05:33:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(35,NULL,10,'Subject for Pledge Acknowledgment','2020-03-26 04:25:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(36,NULL,10,'Subject for Pledge Acknowledgment','2019-09-23 21:43:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(37,NULL,9,'Subject for Tell a Friend','2019-06-11 05:35:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(38,NULL,9,'Subject for Tell a Friend','2019-11-06 23:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(39,NULL,10,'Subject for Pledge Acknowledgment','2020-01-22 07:02:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(40,NULL,9,'Subject for Tell a Friend','2020-05-14 15:48:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(41,NULL,10,'Subject for Pledge Acknowledgment','2019-11-09 17:59:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(42,NULL,9,'Subject for Tell a Friend','2020-01-04 03:24:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(43,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 10:15:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(44,NULL,10,'Subject for Pledge Acknowledgment','2019-10-27 13:36:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(45,NULL,9,'Subject for Tell a Friend','2019-07-05 12:17:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(46,NULL,10,'Subject for Pledge Acknowledgment','2019-06-13 10:02:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(47,NULL,10,'Subject for Pledge Acknowledgment','2020-02-25 16:39:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(48,NULL,10,'Subject for Pledge Acknowledgment','2020-05-14 04:37:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(49,NULL,9,'Subject for Tell a Friend','2020-02-04 10:46:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(50,NULL,10,'Subject for Pledge Acknowledgment','2020-04-15 10:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(51,NULL,9,'Subject for Tell a Friend','2020-03-17 09:52:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(52,NULL,10,'Subject for Pledge Acknowledgment','2019-10-07 15:48:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(53,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 11:31:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(54,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 19:05:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(55,NULL,9,'Subject for Tell a Friend','2020-03-31 12:25:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(56,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 02:44:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(57,NULL,9,'Subject for Tell a Friend','2019-12-04 20:03:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(58,NULL,10,'Subject for Pledge Acknowledgment','2020-03-31 10:50:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(59,NULL,10,'Subject for Pledge Acknowledgment','2020-02-09 00:19:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(60,NULL,9,'Subject for Tell a Friend','2020-03-14 20:14:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(61,NULL,9,'Subject for Tell a Friend','2020-04-18 09:31:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(62,NULL,10,'Subject for Pledge Acknowledgment','2020-01-11 03:19:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(63,NULL,9,'Subject for Tell a Friend','2020-04-12 05:32:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(64,NULL,9,'Subject for Tell a Friend','2019-08-18 23:01:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(65,NULL,9,'Subject for Tell a Friend','2020-04-18 03:36:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(66,NULL,10,'Subject for Pledge Acknowledgment','2019-07-25 02:31:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(67,NULL,10,'Subject for Pledge Acknowledgment','2019-10-30 09:30:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(68,NULL,9,'Subject for Tell a Friend','2020-01-10 03:53:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(69,NULL,10,'Subject for Pledge Acknowledgment','2020-01-29 14:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(70,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 13:46:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(71,NULL,9,'Subject for Tell a Friend','2020-01-23 08:54:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(72,NULL,10,'Subject for Pledge Acknowledgment','2020-02-14 03:34:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(73,NULL,9,'Subject for Tell a Friend','2020-04-30 14:09:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(74,NULL,10,'Subject for Pledge Acknowledgment','2020-03-02 21:54:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(75,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 18:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(76,NULL,9,'Subject for Tell a Friend','2020-02-04 07:41:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(77,NULL,9,'Subject for Tell a Friend','2019-10-01 13:00:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(78,NULL,10,'Subject for Pledge Acknowledgment','2020-06-01 10:28:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(79,NULL,9,'Subject for Tell a Friend','2020-03-15 11:24:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(80,NULL,9,'Subject for Tell a Friend','2019-12-17 22:37:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(81,NULL,10,'Subject for Pledge Acknowledgment','2019-10-17 02:27:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(82,NULL,9,'Subject for Tell a Friend','2020-03-01 14:03:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(83,NULL,9,'Subject for Tell a Friend','2019-06-30 00:48:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(84,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 22:48:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(85,NULL,9,'Subject for Tell a Friend','2019-07-10 05:47:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(86,NULL,9,'Subject for Tell a Friend','2019-09-08 22:57:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(87,NULL,9,'Subject for Tell a Friend','2019-11-06 08:51:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(88,NULL,9,'Subject for Tell a Friend','2019-09-19 04:31:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(89,NULL,10,'Subject for Pledge Acknowledgment','2019-11-08 06:50:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(90,NULL,10,'Subject for Pledge Acknowledgment','2019-11-04 23:40:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(91,NULL,9,'Subject for Tell a Friend','2019-11-05 14:23:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(92,NULL,9,'Subject for Tell a Friend','2019-11-09 22:06:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(93,NULL,10,'Subject for Pledge Acknowledgment','2019-10-14 07:09:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(94,NULL,9,'Subject for Tell a Friend','2019-12-23 04:02:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(95,NULL,9,'Subject for Tell a Friend','2019-07-18 17:04:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(96,NULL,9,'Subject for Tell a Friend','2019-09-10 22:12:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(97,NULL,9,'Subject for Tell a Friend','2019-11-25 08:44:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(98,NULL,10,'Subject for Pledge Acknowledgment','2019-10-30 11:35:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(99,NULL,10,'Subject for Pledge Acknowledgment','2020-02-06 08:38:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(100,NULL,9,'Subject for Tell a Friend','2019-09-07 04:27:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(101,NULL,10,'Subject for Pledge Acknowledgment','2019-07-18 00:27:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(102,NULL,10,'Subject for Pledge Acknowledgment','2020-05-18 05:09:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(103,NULL,9,'Subject for Tell a Friend','2020-04-11 01:33:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(104,NULL,9,'Subject for Tell a Friend','2019-06-10 05:03:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(105,NULL,9,'Subject for Tell a Friend','2019-12-28 06:49:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(106,NULL,9,'Subject for Tell a Friend','2020-04-19 08:17:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(107,NULL,10,'Subject for Pledge Acknowledgment','2019-09-30 08:42:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(108,NULL,9,'Subject for Tell a Friend','2019-07-11 23:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(109,NULL,9,'Subject for Tell a Friend','2020-01-05 16:02:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(110,NULL,10,'Subject for Pledge Acknowledgment','2020-06-03 21:33:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(111,NULL,10,'Subject for Pledge Acknowledgment','2020-02-22 00:05:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(112,NULL,10,'Subject for Pledge Acknowledgment','2020-05-13 06:52:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(113,NULL,10,'Subject for Pledge Acknowledgment','2019-12-17 09:07:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(114,NULL,9,'Subject for Tell a Friend','2019-12-03 23:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(115,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 06:35:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(116,NULL,9,'Subject for Tell a Friend','2020-04-09 18:37:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(117,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 13:11:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(118,NULL,9,'Subject for Tell a Friend','2019-07-23 03:03:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(119,NULL,9,'Subject for Tell a Friend','2019-12-02 02:22:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(120,NULL,9,'Subject for Tell a Friend','2019-08-16 19:20:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(121,NULL,10,'Subject for Pledge Acknowledgment','2020-03-02 11:30:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(122,NULL,10,'Subject for Pledge Acknowledgment','2019-07-20 09:33:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(123,NULL,10,'Subject for Pledge Acknowledgment','2020-02-06 01:52:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(124,NULL,10,'Subject for Pledge Acknowledgment','2019-10-02 03:38:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(125,NULL,9,'Subject for Tell a Friend','2019-09-08 01:51:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(126,NULL,9,'Subject for Tell a Friend','2019-07-28 20:36:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(127,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 23:36:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(128,NULL,9,'Subject for Tell a Friend','2019-09-14 11:14:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(129,NULL,9,'Subject for Tell a Friend','2019-07-29 02:26:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(130,NULL,9,'Subject for Tell a Friend','2020-05-09 04:35:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(131,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 07:05:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(132,NULL,9,'Subject for Tell a Friend','2019-11-14 08:58:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(133,NULL,10,'Subject for Pledge Acknowledgment','2020-01-24 03:44:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(134,NULL,10,'Subject for Pledge Acknowledgment','2020-04-14 12:21:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(135,NULL,9,'Subject for Tell a Friend','2019-12-16 07:18:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(136,NULL,10,'Subject for Pledge Acknowledgment','2019-06-07 09:25:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(137,NULL,9,'Subject for Tell a Friend','2019-08-17 13:08:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(138,NULL,9,'Subject for Tell a Friend','2019-11-30 08:44:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(139,NULL,9,'Subject for Tell a Friend','2019-07-26 07:19:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(140,NULL,9,'Subject for Tell a Friend','2019-09-21 17:08:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(141,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 19:06:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(142,NULL,9,'Subject for Tell a Friend','2020-03-09 17:36:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(143,NULL,9,'Subject for Tell a Friend','2020-04-11 21:33:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(144,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 03:52:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(145,NULL,10,'Subject for Pledge Acknowledgment','2019-09-12 03:46:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(146,NULL,10,'Subject for Pledge Acknowledgment','2020-03-25 03:43:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(147,NULL,10,'Subject for Pledge Acknowledgment','2019-09-29 03:50:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(148,NULL,10,'Subject for Pledge Acknowledgment','2019-10-21 13:13:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(149,NULL,9,'Subject for Tell a Friend','2020-04-03 02:29:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(150,NULL,10,'Subject for Pledge Acknowledgment','2019-11-29 13:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(151,NULL,10,'Subject for Pledge Acknowledgment','2019-11-27 17:51:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(152,NULL,10,'Subject for Pledge Acknowledgment','2020-03-27 08:28:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(153,NULL,10,'Subject for Pledge Acknowledgment','2019-06-26 12:05:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(154,NULL,9,'Subject for Tell a Friend','2020-03-04 12:07:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(155,NULL,9,'Subject for Tell a Friend','2020-04-18 09:59:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(156,NULL,10,'Subject for Pledge Acknowledgment','2019-12-03 14:38:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(157,NULL,9,'Subject for Tell a Friend','2019-10-24 05:03:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(158,NULL,10,'Subject for Pledge Acknowledgment','2019-10-31 20:21:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(159,NULL,9,'Subject for Tell a Friend','2020-03-18 00:54:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(160,NULL,9,'Subject for Tell a Friend','2019-12-29 03:57:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(161,NULL,10,'Subject for Pledge Acknowledgment','2020-02-22 19:20:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(162,NULL,9,'Subject for Tell a Friend','2020-04-02 19:39:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(163,NULL,10,'Subject for Pledge Acknowledgment','2020-01-03 04:07:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(164,NULL,9,'Subject for Tell a Friend','2019-11-08 09:41:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(165,NULL,9,'Subject for Tell a Friend','2019-08-13 22:57:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(166,NULL,10,'Subject for Pledge Acknowledgment','2019-08-21 09:29:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(167,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 22:40:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(168,NULL,9,'Subject for Tell a Friend','2020-05-28 10:13:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(169,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 19:23:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(170,NULL,10,'Subject for Pledge Acknowledgment','2020-01-22 22:55:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(171,NULL,10,'Subject for Pledge Acknowledgment','2019-08-21 12:53:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(172,NULL,10,'Subject for Pledge Acknowledgment','2020-02-29 07:25:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(173,NULL,10,'Subject for Pledge Acknowledgment','2019-10-15 23:11:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(174,NULL,9,'Subject for Tell a Friend','2019-12-15 04:14:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(175,NULL,9,'Subject for Tell a Friend','2019-12-16 13:40:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(176,NULL,10,'Subject for Pledge Acknowledgment','2020-06-04 02:28:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(177,NULL,9,'Subject for Tell a Friend','2019-09-23 15:14:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(178,NULL,10,'Subject for Pledge Acknowledgment','2019-08-07 21:26:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(179,NULL,10,'Subject for Pledge Acknowledgment','2019-11-25 00:02:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(180,NULL,10,'Subject for Pledge Acknowledgment','2019-11-26 04:32:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(181,NULL,9,'Subject for Tell a Friend','2019-09-26 05:45:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(182,NULL,9,'Subject for Tell a Friend','2019-06-29 13:16:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(183,NULL,9,'Subject for Tell a Friend','2019-07-02 20:19:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(184,NULL,10,'Subject for Pledge Acknowledgment','2019-06-23 01:36:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(185,NULL,9,'Subject for Tell a Friend','2019-06-26 15:12:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(186,NULL,9,'Subject for Tell a Friend','2020-05-05 10:44:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(187,NULL,10,'Subject for Pledge Acknowledgment','2020-04-20 05:37:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(188,NULL,10,'Subject for Pledge Acknowledgment','2020-05-29 06:45:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(189,NULL,9,'Subject for Tell a Friend','2019-08-29 02:35:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(190,NULL,9,'Subject for Tell a Friend','2019-12-14 09:17:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(191,NULL,9,'Subject for Tell a Friend','2019-07-21 15:28:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(192,NULL,9,'Subject for Tell a Friend','2019-07-23 07:58:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(193,NULL,9,'Subject for Tell a Friend','2020-04-14 18:18:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(194,NULL,10,'Subject for Pledge Acknowledgment','2019-11-21 20:39:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(195,NULL,10,'Subject for Pledge Acknowledgment','2019-10-03 00:44:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(196,NULL,9,'Subject for Tell a Friend','2019-11-25 06:23:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(197,NULL,9,'Subject for Tell a Friend','2019-10-19 12:39:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(198,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 09:03:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(199,NULL,9,'Subject for Tell a Friend','2019-11-25 09:59:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(200,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 05:22:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(201,NULL,9,'Subject for Tell a Friend','2020-02-28 02:06:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(202,NULL,10,'Subject for Pledge Acknowledgment','2020-02-04 05:48:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(203,NULL,9,'Subject for Tell a Friend','2019-08-22 12:30:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(204,NULL,10,'Subject for Pledge Acknowledgment','2019-10-04 11:34:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(205,NULL,9,'Subject for Tell a Friend','2020-04-11 12:07:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(206,NULL,10,'Subject for Pledge Acknowledgment','2019-10-06 13:55:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(207,NULL,9,'Subject for Tell a Friend','2019-08-11 09:29:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(208,NULL,9,'Subject for Tell a Friend','2020-02-04 00:57:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(209,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 23:21:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(210,NULL,9,'Subject for Tell a Friend','2019-08-19 10:39:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(211,NULL,10,'Subject for Pledge Acknowledgment','2019-10-27 15:19:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(212,NULL,9,'Subject for Tell a Friend','2019-11-14 11:39:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(213,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 04:07:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(214,NULL,10,'Subject for Pledge Acknowledgment','2020-03-20 19:20:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(215,NULL,10,'Subject for Pledge Acknowledgment','2019-10-04 13:21:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(216,NULL,10,'Subject for Pledge Acknowledgment','2019-08-02 19:26:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(217,NULL,10,'Subject for Pledge Acknowledgment','2019-11-07 14:10:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(218,NULL,9,'Subject for Tell a Friend','2019-08-19 22:21:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(219,NULL,9,'Subject for Tell a Friend','2020-01-18 18:29:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(220,NULL,9,'Subject for Tell a Friend','2020-02-03 13:04:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(221,NULL,10,'Subject for Pledge Acknowledgment','2020-04-11 08:14:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(222,NULL,10,'Subject for Pledge Acknowledgment','2019-08-16 06:59:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(223,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 19:15:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(224,NULL,10,'Subject for Pledge Acknowledgment','2020-02-06 11:55:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(225,NULL,10,'Subject for Pledge Acknowledgment','2019-08-11 08:33:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(226,NULL,10,'Subject for Pledge Acknowledgment','2020-04-30 11:09:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(227,NULL,10,'Subject for Pledge Acknowledgment','2019-12-13 23:44:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(228,NULL,10,'Subject for Pledge Acknowledgment','2020-04-14 03:18:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(229,NULL,9,'Subject for Tell a Friend','2020-04-05 01:47:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(230,NULL,10,'Subject for Pledge Acknowledgment','2019-10-31 18:31:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(231,NULL,9,'Subject for Tell a Friend','2020-01-03 00:02:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(232,NULL,10,'Subject for Pledge Acknowledgment','2020-04-11 05:06:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(233,NULL,9,'Subject for Tell a Friend','2020-04-20 14:54:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(234,NULL,10,'Subject for Pledge Acknowledgment','2020-02-21 13:51:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(235,NULL,9,'Subject for Tell a Friend','2019-09-10 07:23:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(236,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 21:28:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(237,NULL,10,'Subject for Pledge Acknowledgment','2019-08-17 18:56:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(238,NULL,10,'Subject for Pledge Acknowledgment','2019-11-28 23:06:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(239,NULL,9,'Subject for Tell a Friend','2020-02-26 16:33:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(240,NULL,10,'Subject for Pledge Acknowledgment','2020-03-16 01:05:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(241,NULL,9,'Subject for Tell a Friend','2019-08-01 13:49:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(242,NULL,9,'Subject for Tell a Friend','2020-02-18 07:24:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(243,NULL,9,'Subject for Tell a Friend','2019-07-30 08:11:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(244,NULL,9,'Subject for Tell a Friend','2020-06-03 11:46:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(245,NULL,10,'Subject for Pledge Acknowledgment','2019-07-12 03:38:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(246,NULL,10,'Subject for Pledge Acknowledgment','2020-05-27 22:00:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(247,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 02:21:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(248,NULL,9,'Subject for Tell a Friend','2019-12-09 14:21:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(249,NULL,9,'Subject for Tell a Friend','2019-11-26 10:46:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(250,NULL,10,'Subject for Pledge Acknowledgment','2019-08-28 06:41:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(251,NULL,10,'Subject for Pledge Acknowledgment','2019-06-26 00:16:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(252,NULL,10,'Subject for Pledge Acknowledgment','2020-05-30 13:16:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(253,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 22:57:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(254,NULL,10,'Subject for Pledge Acknowledgment','2020-05-24 13:56:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(255,NULL,10,'Subject for Pledge Acknowledgment','2020-02-25 22:15:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(256,NULL,9,'Subject for Tell a Friend','2019-12-20 08:00:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(257,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 03:36:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(258,NULL,10,'Subject for Pledge Acknowledgment','2020-04-09 02:24:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(259,NULL,10,'Subject for Pledge Acknowledgment','2019-06-07 23:11:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(260,NULL,10,'Subject for Pledge Acknowledgment','2020-05-12 13:48:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(261,NULL,9,'Subject for Tell a Friend','2019-08-15 22:53:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(262,NULL,10,'Subject for Pledge Acknowledgment','2019-12-09 22:55:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(263,NULL,10,'Subject for Pledge Acknowledgment','2019-08-04 03:22:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(264,NULL,10,'Subject for Pledge Acknowledgment','2019-12-28 03:13:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(265,NULL,9,'Subject for Tell a Friend','2019-10-05 06:53:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(266,NULL,9,'Subject for Tell a Friend','2020-05-10 17:06:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(267,NULL,10,'Subject for Pledge Acknowledgment','2020-01-19 12:08:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(268,NULL,9,'Subject for Tell a Friend','2019-11-10 01:43:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(269,NULL,10,'Subject for Pledge Acknowledgment','2020-05-22 02:33:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(270,NULL,10,'Subject for Pledge Acknowledgment','2020-02-02 00:31:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(271,NULL,9,'Subject for Tell a Friend','2019-09-16 19:18:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(272,NULL,9,'Subject for Tell a Friend','2020-01-31 12:56:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(273,NULL,9,'Subject for Tell a Friend','2020-02-28 20:58:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(274,NULL,10,'Subject for Pledge Acknowledgment','2019-10-20 02:17:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(275,NULL,9,'Subject for Tell a Friend','2020-03-10 21:44:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(276,NULL,9,'Subject for Tell a Friend','2019-07-09 22:19:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(277,NULL,10,'Subject for Pledge Acknowledgment','2019-09-19 06:25:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(278,NULL,9,'Subject for Tell a Friend','2020-04-20 05:56:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(279,NULL,10,'Subject for Pledge Acknowledgment','2019-12-13 10:27:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(280,NULL,10,'Subject for Pledge Acknowledgment','2019-06-23 23:04:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(281,NULL,9,'Subject for Tell a Friend','2020-01-24 09:03:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(282,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 03:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(283,NULL,10,'Subject for Pledge Acknowledgment','2019-10-13 09:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(284,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 17:26:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(285,NULL,10,'Subject for Pledge Acknowledgment','2019-12-01 04:38:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(286,NULL,9,'Subject for Tell a Friend','2020-01-09 00:08:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(287,NULL,9,'Subject for Tell a Friend','2019-09-12 19:40:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(288,NULL,10,'Subject for Pledge Acknowledgment','2020-03-23 19:17:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(289,NULL,10,'Subject for Pledge Acknowledgment','2020-04-18 08:23:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(290,NULL,10,'Subject for Pledge Acknowledgment','2020-05-15 23:58:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(291,NULL,9,'Subject for Tell a Friend','2019-10-01 23:15:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(292,NULL,10,'Subject for Pledge Acknowledgment','2019-07-27 01:26:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(293,NULL,9,'Subject for Tell a Friend','2020-05-12 20:48:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(294,NULL,9,'Subject for Tell a Friend','2020-05-05 05:11:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(295,NULL,10,'Subject for Pledge Acknowledgment','2019-11-01 14:32:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(296,NULL,10,'Subject for Pledge Acknowledgment','2020-05-24 12:56:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(297,NULL,9,'Subject for Tell a Friend','2019-08-23 15:33:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(298,NULL,10,'Subject for Pledge Acknowledgment','2019-09-23 00:37:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(299,NULL,10,'Subject for Pledge Acknowledgment','2020-04-19 10:54:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(300,NULL,10,'Subject for Pledge Acknowledgment','2020-02-28 03:24:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(301,NULL,10,'Subject for Pledge Acknowledgment','2019-07-18 00:38:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(302,NULL,10,'Subject for Pledge Acknowledgment','2019-11-07 11:09:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(303,NULL,10,'Subject for Pledge Acknowledgment','2019-09-25 13:49:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(304,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 01:32:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(305,NULL,10,'Subject for Pledge Acknowledgment','2019-09-01 05:02:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(306,NULL,9,'Subject for Tell a Friend','2019-11-14 02:37:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(307,NULL,10,'Subject for Pledge Acknowledgment','2020-03-22 06:55:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(308,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 11:36:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(309,NULL,9,'Subject for Tell a Friend','2019-10-29 04:43:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(310,NULL,9,'Subject for Tell a Friend','2019-09-20 03:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(311,NULL,9,'Subject for Tell a Friend','2020-05-06 19:14:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(312,NULL,10,'Subject for Pledge Acknowledgment','2020-02-25 14:29:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(313,NULL,9,'Subject for Tell a Friend','2019-09-17 03:11:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(314,NULL,9,'Subject for Tell a Friend','2020-02-20 18:27:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(315,NULL,10,'Subject for Pledge Acknowledgment','2019-10-26 06:25:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(316,NULL,9,'Subject for Tell a Friend','2020-05-11 20:03:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(317,NULL,10,'Subject for Pledge Acknowledgment','2020-05-29 15:15:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(318,NULL,10,'Subject for Pledge Acknowledgment','2020-03-28 02:58:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(319,NULL,9,'Subject for Tell a Friend','2020-04-23 05:58:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(320,NULL,10,'Subject for Pledge Acknowledgment','2019-07-19 12:11:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(321,NULL,9,'Subject for Tell a Friend','2019-09-18 04:15:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(322,NULL,10,'Subject for Pledge Acknowledgment','2020-05-03 05:13:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(323,NULL,10,'Subject for Pledge Acknowledgment','2020-04-25 10:31:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(324,NULL,10,'Subject for Pledge Acknowledgment','2019-06-27 13:24:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(325,NULL,10,'Subject for Pledge Acknowledgment','2020-05-02 02:35:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(326,NULL,9,'Subject for Tell a Friend','2020-04-02 15:36:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(327,NULL,9,'Subject for Tell a Friend','2020-02-07 22:50:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(328,NULL,10,'Subject for Pledge Acknowledgment','2020-05-02 22:37:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(329,NULL,9,'Subject for Tell a Friend','2019-11-22 00:30:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(330,NULL,9,'Subject for Tell a Friend','2019-09-21 12:32:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(331,NULL,10,'Subject for Pledge Acknowledgment','2019-06-07 21:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(332,NULL,9,'Subject for Tell a Friend','2019-10-23 01:04:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(333,NULL,10,'Subject for Pledge Acknowledgment','2019-06-10 08:55:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(334,NULL,9,'Subject for Tell a Friend','2020-04-20 17:05:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(335,NULL,10,'Subject for Pledge Acknowledgment','2019-10-12 13:10:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(336,NULL,9,'Subject for Tell a Friend','2020-03-10 23:31:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(337,NULL,9,'Subject for Tell a Friend','2020-05-12 14:37:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(338,NULL,9,'Subject for Tell a Friend','2020-05-02 14:06:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(339,NULL,10,'Subject for Pledge Acknowledgment','2019-11-08 22:47:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(340,NULL,9,'Subject for Tell a Friend','2020-01-26 04:07:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(341,NULL,10,'Subject for Pledge Acknowledgment','2020-02-21 07:12:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(342,NULL,9,'Subject for Tell a Friend','2019-09-22 19:02:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(343,NULL,10,'Subject for Pledge Acknowledgment','2019-09-02 02:17:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(344,NULL,10,'Subject for Pledge Acknowledgment','2020-04-07 20:20:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(345,NULL,10,'Subject for Pledge Acknowledgment','2019-09-22 00:46:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(346,NULL,9,'Subject for Tell a Friend','2019-10-28 10:33:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(347,NULL,9,'Subject for Tell a Friend','2020-04-10 08:02:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(348,NULL,9,'Subject for Tell a Friend','2020-02-14 23:28:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(349,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 06:50:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(350,NULL,9,'Subject for Tell a Friend','2020-01-20 07:45:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(351,NULL,9,'Subject for Tell a Friend','2019-09-29 04:20:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(352,NULL,9,'Subject for Tell a Friend','2019-12-28 08:03:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(353,NULL,9,'Subject for Tell a Friend','2020-02-28 16:29:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(354,NULL,10,'Subject for Pledge Acknowledgment','2020-05-08 16:21:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(355,NULL,10,'Subject for Pledge Acknowledgment','2020-03-21 10:19:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(356,NULL,9,'Subject for Tell a Friend','2019-07-12 22:20:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(357,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 23:40:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(358,NULL,10,'Subject for Pledge Acknowledgment','2020-03-27 09:01:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(359,NULL,9,'Subject for Tell a Friend','2020-04-23 06:34:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(360,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 16:25:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(361,NULL,9,'Subject for Tell a Friend','2019-09-24 15:59:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(362,NULL,10,'Subject for Pledge Acknowledgment','2020-02-09 18:31:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(363,NULL,10,'Subject for Pledge Acknowledgment','2020-04-27 20:41:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(364,NULL,9,'Subject for Tell a Friend','2020-04-23 15:31:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(365,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 10:03:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(366,NULL,9,'Subject for Tell a Friend','2020-04-17 07:14:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(367,NULL,9,'Subject for Tell a Friend','2019-12-25 15:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(368,NULL,10,'Subject for Pledge Acknowledgment','2019-08-01 09:40:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(369,NULL,10,'Subject for Pledge Acknowledgment','2019-07-17 16:33:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(370,NULL,9,'Subject for Tell a Friend','2019-09-18 02:15:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(371,NULL,9,'Subject for Tell a Friend','2020-03-20 08:08:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(372,NULL,9,'Subject for Tell a Friend','2019-07-15 09:47:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(373,NULL,9,'Subject for Tell a Friend','2020-04-05 03:27:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(374,NULL,10,'Subject for Pledge Acknowledgment','2020-04-17 01:18:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(375,NULL,10,'Subject for Pledge Acknowledgment','2019-10-29 22:38:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(376,NULL,10,'Subject for Pledge Acknowledgment','2019-10-30 05:54:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(377,NULL,10,'Subject for Pledge Acknowledgment','2020-05-26 07:29:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(378,NULL,10,'Subject for Pledge Acknowledgment','2020-02-29 02:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(379,NULL,9,'Subject for Tell a Friend','2020-04-09 19:20:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(380,NULL,9,'Subject for Tell a Friend','2019-10-28 19:24:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(381,NULL,9,'Subject for Tell a Friend','2020-01-31 07:52:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(382,NULL,9,'Subject for Tell a Friend','2020-06-04 06:12:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(383,NULL,10,'Subject for Pledge Acknowledgment','2019-06-25 14:39:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(384,NULL,9,'Subject for Tell a Friend','2020-05-31 15:17:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(385,NULL,10,'Subject for Pledge Acknowledgment','2020-03-07 23:34:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(386,NULL,10,'Subject for Pledge Acknowledgment','2019-12-14 16:52:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(387,NULL,10,'Subject for Pledge Acknowledgment','2019-12-28 06:10:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(388,NULL,9,'Subject for Tell a Friend','2019-12-21 23:48:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(389,NULL,9,'Subject for Tell a Friend','2019-06-20 16:04:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(390,NULL,10,'Subject for Pledge Acknowledgment','2019-07-22 08:15:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(391,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 22:30:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(392,NULL,9,'Subject for Tell a Friend','2019-09-09 01:07:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(393,NULL,9,'Subject for Tell a Friend','2019-09-27 17:48:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(394,NULL,9,'Subject for Tell a Friend','2019-11-06 07:37:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(395,NULL,10,'Subject for Pledge Acknowledgment','2020-05-15 14:09:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(396,NULL,10,'Subject for Pledge Acknowledgment','2019-06-15 14:30:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(397,NULL,10,'Subject for Pledge Acknowledgment','2019-09-03 08:13:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(398,NULL,9,'Subject for Tell a Friend','2020-05-02 18:55:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(399,NULL,10,'Subject for Pledge Acknowledgment','2020-01-13 05:17:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(400,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 02:54:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(401,NULL,10,'Subject for Pledge Acknowledgment','2019-11-25 10:33:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(402,NULL,10,'Subject for Pledge Acknowledgment','2019-09-22 10:17:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(403,NULL,9,'Subject for Tell a Friend','2019-09-19 01:04:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(404,NULL,9,'Subject for Tell a Friend','2020-01-28 12:21:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(405,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 10:50:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(406,NULL,10,'Subject for Pledge Acknowledgment','2019-10-15 08:52:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(407,NULL,9,'Subject for Tell a Friend','2019-10-07 12:40:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(408,NULL,9,'Subject for Tell a Friend','2019-08-07 10:56:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(409,NULL,9,'Subject for Tell a Friend','2019-11-10 23:29:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(410,NULL,10,'Subject for Pledge Acknowledgment','2019-11-27 16:43:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(411,NULL,9,'Subject for Tell a Friend','2019-09-04 18:14:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(412,NULL,9,'Subject for Tell a Friend','2019-07-20 05:39:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(413,NULL,10,'Subject for Pledge Acknowledgment','2020-01-24 01:56:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(414,NULL,10,'Subject for Pledge Acknowledgment','2020-05-05 03:29:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(415,NULL,9,'Subject for Tell a Friend','2019-10-27 15:23:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(416,NULL,9,'Subject for Tell a Friend','2020-03-10 14:58:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(417,NULL,10,'Subject for Pledge Acknowledgment','2019-07-18 04:12:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(418,NULL,9,'Subject for Tell a Friend','2020-05-14 15:02:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(419,NULL,10,'Subject for Pledge Acknowledgment','2020-03-25 21:48:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(420,NULL,9,'Subject for Tell a Friend','2020-05-06 20:52:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(421,NULL,10,'Subject for Pledge Acknowledgment','2020-04-01 11:45:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(422,NULL,10,'Subject for Pledge Acknowledgment','2020-01-26 00:55:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(423,NULL,10,'Subject for Pledge Acknowledgment','2020-03-27 07:17:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(424,NULL,9,'Subject for Tell a Friend','2019-10-22 19:05:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(425,NULL,10,'Subject for Pledge Acknowledgment','2019-07-08 17:39:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(426,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 23:34:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(427,NULL,10,'Subject for Pledge Acknowledgment','2020-05-29 10:34:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(428,NULL,10,'Subject for Pledge Acknowledgment','2019-07-01 05:27:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(429,NULL,10,'Subject for Pledge Acknowledgment','2019-06-27 20:26:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(430,NULL,10,'Subject for Pledge Acknowledgment','2019-12-04 10:57:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(431,NULL,10,'Subject for Pledge Acknowledgment','2019-07-11 19:44:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(432,NULL,10,'Subject for Pledge Acknowledgment','2020-01-12 16:43:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(433,NULL,10,'Subject for Pledge Acknowledgment','2020-03-06 08:54:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(434,NULL,10,'Subject for Pledge Acknowledgment','2020-04-26 19:50:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(435,NULL,9,'Subject for Tell a Friend','2019-11-30 11:48:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(436,NULL,9,'Subject for Tell a Friend','2019-09-15 23:13:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(437,NULL,9,'Subject for Tell a Friend','2020-01-29 14:58:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(438,NULL,9,'Subject for Tell a Friend','2019-12-30 06:41:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(439,NULL,9,'Subject for Tell a Friend','2019-12-16 06:08:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(440,NULL,10,'Subject for Pledge Acknowledgment','2020-03-05 16:13:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(441,NULL,10,'Subject for Pledge Acknowledgment','2020-03-18 07:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(442,NULL,9,'Subject for Tell a Friend','2020-05-20 06:33:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(443,NULL,9,'Subject for Tell a Friend','2019-11-18 10:15:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(444,NULL,9,'Subject for Tell a Friend','2019-10-08 10:13:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(445,NULL,10,'Subject for Pledge Acknowledgment','2019-08-22 08:27:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(446,NULL,10,'Subject for Pledge Acknowledgment','2020-05-12 08:46:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(447,NULL,9,'Subject for Tell a Friend','2020-03-15 05:24:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(448,NULL,9,'Subject for Tell a Friend','2020-06-01 03:17:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(449,NULL,10,'Subject for Pledge Acknowledgment','2020-04-08 02:12:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(450,NULL,9,'Subject for Tell a Friend','2019-08-30 00:51:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:19','2020-06-04 09:38:19'),(451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(464,1,7,'General','2020-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(465,2,7,'Student','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(466,3,7,'General','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(467,4,7,'Student','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(468,5,7,'Student','2019-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(469,6,7,'Student','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(470,7,7,'General','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(471,8,7,'Student','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(472,9,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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(473,10,7,'Student','2019-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(474,11,7,'Lifetime','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(475,12,7,'Student','2020-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,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(476,13,7,'General','2020-05-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(477,14,7,'Student','2020-05-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(478,15,7,'General','2018-02-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(479,16,7,'Student','2020-05-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(480,17,7,'General','2020-05-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(481,18,7,'Student','2020-05-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(482,19,7,'General','2020-05-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(483,20,7,'General','2018-01-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(484,21,7,'General','2020-05-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(485,22,7,'Lifetime','2020-05-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(486,23,7,'General','2020-05-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(487,24,7,'Student','2020-05-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(488,25,7,'Student','2019-05-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(489,26,7,'Student','2020-05-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(490,27,7,'General','2020-05-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(491,28,7,'Student','2020-05-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(492,29,7,'General','2020-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(493,30,7,'General','2017-10-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(507,27,6,'$ 100.00 - General Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(508,28,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(575,45,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(577,47,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(579,49,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(580,50,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(581,51,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(584,54,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(585,55,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(586,56,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(587,57,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(588,58,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(589,59,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(590,60,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(592,62,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(596,66,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(600,70,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(603,73,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(604,74,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(606,76,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(607,77,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(617,87,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(618,88,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(621,91,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(622,92,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(623,93,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'),(624,94,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-04 10:38:20',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-04 09:38:20','2020-06-04 09:38:20'); +INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES (1,NULL,10,'Subject for Pledge Acknowledgment','2019-12-23 00:52:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(2,NULL,10,'Subject for Pledge Acknowledgment','2020-04-16 02:44:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(3,NULL,10,'Subject for Pledge Acknowledgment','2019-11-08 01:59:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(4,NULL,9,'Subject for Tell a Friend','2019-10-06 17:52:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(5,NULL,10,'Subject for Pledge Acknowledgment','2020-02-19 07:55:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(6,NULL,10,'Subject for Pledge Acknowledgment','2020-01-08 15:52:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(7,NULL,10,'Subject for Pledge Acknowledgment','2019-11-01 05:05:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(8,NULL,10,'Subject for Pledge Acknowledgment','2020-01-01 18:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(9,NULL,10,'Subject for Pledge Acknowledgment','2019-12-24 23:18:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(10,NULL,10,'Subject for Pledge Acknowledgment','2019-10-17 18:29:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(11,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 21:54:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(12,NULL,9,'Subject for Tell a Friend','2020-03-16 22:59:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(13,NULL,9,'Subject for Tell a Friend','2019-12-16 02:48:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(14,NULL,10,'Subject for Pledge Acknowledgment','2019-12-24 12:10:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(15,NULL,10,'Subject for Pledge Acknowledgment','2020-04-24 01:17:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(16,NULL,9,'Subject for Tell a Friend','2020-05-24 17:31:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(17,NULL,9,'Subject for Tell a Friend','2019-07-31 12:30:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(18,NULL,10,'Subject for Pledge Acknowledgment','2019-06-15 23:09:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(19,NULL,9,'Subject for Tell a Friend','2019-12-22 21:08:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(20,NULL,9,'Subject for Tell a Friend','2019-10-19 22:51:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(21,NULL,10,'Subject for Pledge Acknowledgment','2020-03-28 08:18:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(22,NULL,9,'Subject for Tell a Friend','2020-04-23 14:31:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(23,NULL,9,'Subject for Tell a Friend','2019-12-17 03:28:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(24,NULL,10,'Subject for Pledge Acknowledgment','2020-04-24 14:49:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(25,NULL,10,'Subject for Pledge Acknowledgment','2019-06-26 17:20:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(26,NULL,9,'Subject for Tell a Friend','2019-09-02 07:38:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(27,NULL,9,'Subject for Tell a Friend','2020-01-03 06:23:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(28,NULL,9,'Subject for Tell a Friend','2019-12-03 17:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(29,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 23:57:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(30,NULL,9,'Subject for Tell a Friend','2019-11-19 23:48:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(31,NULL,10,'Subject for Pledge Acknowledgment','2020-05-25 17:06:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(32,NULL,10,'Subject for Pledge Acknowledgment','2020-05-20 10:23:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(33,NULL,10,'Subject for Pledge Acknowledgment','2019-10-18 03:17:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(34,NULL,9,'Subject for Tell a Friend','2019-08-06 23:11:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(35,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 20:27:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(36,NULL,10,'Subject for Pledge Acknowledgment','2020-05-24 12:18:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(37,NULL,9,'Subject for Tell a Friend','2019-09-20 04:40:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(38,NULL,9,'Subject for Tell a Friend','2020-04-06 02:45:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(39,NULL,9,'Subject for Tell a Friend','2020-01-12 20:17:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(40,NULL,9,'Subject for Tell a Friend','2019-08-01 06:36:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(41,NULL,10,'Subject for Pledge Acknowledgment','2020-05-26 19:32:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(42,NULL,9,'Subject for Tell a Friend','2019-09-20 13:23:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(43,NULL,9,'Subject for Tell a Friend','2019-10-26 04:36:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(44,NULL,10,'Subject for Pledge Acknowledgment','2019-06-18 17:35:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(45,NULL,9,'Subject for Tell a Friend','2019-08-01 23:09:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(46,NULL,10,'Subject for Pledge Acknowledgment','2020-04-24 17:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(47,NULL,10,'Subject for Pledge Acknowledgment','2020-02-19 15:24:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(48,NULL,10,'Subject for Pledge Acknowledgment','2020-03-04 01:11:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(49,NULL,10,'Subject for Pledge Acknowledgment','2020-03-06 09:42:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(50,NULL,10,'Subject for Pledge Acknowledgment','2019-07-19 06:05:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(51,NULL,10,'Subject for Pledge Acknowledgment','2020-04-03 23:12:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(52,NULL,9,'Subject for Tell a Friend','2019-11-26 10:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(53,NULL,9,'Subject for Tell a Friend','2020-04-26 23:14:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(54,NULL,9,'Subject for Tell a Friend','2019-08-21 22:50:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(55,NULL,10,'Subject for Pledge Acknowledgment','2019-11-26 10:48:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(56,NULL,9,'Subject for Tell a Friend','2020-02-11 13:34:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(57,NULL,10,'Subject for Pledge Acknowledgment','2019-07-06 06:22:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(58,NULL,9,'Subject for Tell a Friend','2019-12-16 12:59:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(59,NULL,10,'Subject for Pledge Acknowledgment','2019-09-02 20:22:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(60,NULL,10,'Subject for Pledge Acknowledgment','2020-03-29 16:48:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(61,NULL,10,'Subject for Pledge Acknowledgment','2019-11-19 08:10:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(62,NULL,10,'Subject for Pledge Acknowledgment','2019-09-02 04:36:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(63,NULL,10,'Subject for Pledge Acknowledgment','2019-06-25 19:55:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(64,NULL,10,'Subject for Pledge Acknowledgment','2020-03-20 19:49:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(65,NULL,9,'Subject for Tell a Friend','2019-06-27 14:57:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(66,NULL,10,'Subject for Pledge Acknowledgment','2020-03-01 16:38:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(67,NULL,9,'Subject for Tell a Friend','2019-10-17 20:34:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(68,NULL,9,'Subject for Tell a Friend','2019-07-16 15:24:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(69,NULL,10,'Subject for Pledge Acknowledgment','2020-03-18 10:07:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(70,NULL,10,'Subject for Pledge Acknowledgment','2020-03-15 15:43:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(71,NULL,10,'Subject for Pledge Acknowledgment','2020-01-25 23:44:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(72,NULL,10,'Subject for Pledge Acknowledgment','2019-09-26 17:35:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(73,NULL,9,'Subject for Tell a Friend','2020-04-08 12:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(74,NULL,10,'Subject for Pledge Acknowledgment','2019-12-02 15:48:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(75,NULL,9,'Subject for Tell a Friend','2019-09-08 01:01:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(76,NULL,10,'Subject for Pledge Acknowledgment','2020-04-24 22:22:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(77,NULL,9,'Subject for Tell a Friend','2020-01-11 05:10:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(78,NULL,10,'Subject for Pledge Acknowledgment','2020-02-14 10:22:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(79,NULL,10,'Subject for Pledge Acknowledgment','2019-10-14 05:57:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(80,NULL,10,'Subject for Pledge Acknowledgment','2020-01-23 08:05:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(81,NULL,10,'Subject for Pledge Acknowledgment','2019-11-11 13:21:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(82,NULL,9,'Subject for Tell a Friend','2020-04-02 18:20:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(83,NULL,9,'Subject for Tell a Friend','2020-01-27 02:24:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(84,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 16:13:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(85,NULL,10,'Subject for Pledge Acknowledgment','2019-09-03 18:00:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(86,NULL,9,'Subject for Tell a Friend','2019-09-24 16:11:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(87,NULL,10,'Subject for Pledge Acknowledgment','2019-10-02 17:37:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(88,NULL,9,'Subject for Tell a Friend','2020-05-22 16:55:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(89,NULL,9,'Subject for Tell a Friend','2019-06-26 15:15:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(90,NULL,9,'Subject for Tell a Friend','2019-12-12 16:32:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(91,NULL,10,'Subject for Pledge Acknowledgment','2020-04-16 10:25:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(92,NULL,10,'Subject for Pledge Acknowledgment','2019-06-19 10:14:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(93,NULL,9,'Subject for Tell a Friend','2020-02-24 15:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(94,NULL,9,'Subject for Tell a Friend','2020-02-08 23:28:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(95,NULL,9,'Subject for Tell a Friend','2019-08-11 13:08:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(96,NULL,10,'Subject for Pledge Acknowledgment','2019-11-01 04:36:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(97,NULL,10,'Subject for Pledge Acknowledgment','2020-01-31 19:33:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(98,NULL,9,'Subject for Tell a Friend','2020-03-02 18:16:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(99,NULL,9,'Subject for Tell a Friend','2019-09-18 03:21:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(100,NULL,9,'Subject for Tell a Friend','2019-10-06 06:01:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(101,NULL,9,'Subject for Tell a Friend','2019-09-04 16:26:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(102,NULL,10,'Subject for Pledge Acknowledgment','2020-03-03 10:38:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(103,NULL,9,'Subject for Tell a Friend','2019-10-21 06:06:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(104,NULL,9,'Subject for Tell a Friend','2019-10-17 19:21:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(105,NULL,10,'Subject for Pledge Acknowledgment','2020-03-19 19:32:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(106,NULL,9,'Subject for Tell a Friend','2019-09-04 14:28:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(107,NULL,9,'Subject for Tell a Friend','2020-01-02 08:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(108,NULL,10,'Subject for Pledge Acknowledgment','2020-03-10 12:12:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(109,NULL,9,'Subject for Tell a Friend','2019-09-07 00:14:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(110,NULL,9,'Subject for Tell a Friend','2020-06-09 08:38:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(111,NULL,10,'Subject for Pledge Acknowledgment','2020-01-23 03:29:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(112,NULL,10,'Subject for Pledge Acknowledgment','2019-11-22 13:34:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(113,NULL,9,'Subject for Tell a Friend','2020-04-11 06:07:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(114,NULL,10,'Subject for Pledge Acknowledgment','2020-02-04 04:05:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(115,NULL,10,'Subject for Pledge Acknowledgment','2020-06-09 20:24:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(116,NULL,10,'Subject for Pledge Acknowledgment','2020-01-30 04:44:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(117,NULL,9,'Subject for Tell a Friend','2020-05-01 21:14:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(118,NULL,10,'Subject for Pledge Acknowledgment','2019-08-28 04:20:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(119,NULL,10,'Subject for Pledge Acknowledgment','2019-10-15 09:30:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(120,NULL,9,'Subject for Tell a Friend','2019-09-14 04:13:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(121,NULL,10,'Subject for Pledge Acknowledgment','2019-10-31 11:02:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(122,NULL,9,'Subject for Tell a Friend','2019-09-01 15:08:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(123,NULL,9,'Subject for Tell a Friend','2019-09-01 04:20:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(124,NULL,9,'Subject for Tell a Friend','2020-03-06 13:21:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(125,NULL,10,'Subject for Pledge Acknowledgment','2020-03-08 17:11:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(126,NULL,9,'Subject for Tell a Friend','2019-10-18 22:30:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(127,NULL,9,'Subject for Tell a Friend','2020-04-15 18:55:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(128,NULL,10,'Subject for Pledge Acknowledgment','2020-01-01 05:27:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(129,NULL,9,'Subject for Tell a Friend','2020-01-14 08:52:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(130,NULL,10,'Subject for Pledge Acknowledgment','2019-09-05 20:41:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(131,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 13:53:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(132,NULL,10,'Subject for Pledge Acknowledgment','2019-07-05 01:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(133,NULL,10,'Subject for Pledge Acknowledgment','2020-01-13 19:20:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(134,NULL,9,'Subject for Tell a Friend','2019-12-12 03:05:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(135,NULL,10,'Subject for Pledge Acknowledgment','2020-01-17 16:08:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(136,NULL,9,'Subject for Tell a Friend','2020-04-19 08:42:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(137,NULL,10,'Subject for Pledge Acknowledgment','2019-12-07 00:08:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(138,NULL,10,'Subject for Pledge Acknowledgment','2019-08-23 22:05:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(139,NULL,9,'Subject for Tell a Friend','2020-01-01 00:03:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(140,NULL,10,'Subject for Pledge Acknowledgment','2019-10-11 09:41:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(141,NULL,9,'Subject for Tell a Friend','2019-12-14 00:14:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(142,NULL,9,'Subject for Tell a Friend','2020-03-19 16:17:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(143,NULL,10,'Subject for Pledge Acknowledgment','2020-05-17 13:17:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(144,NULL,9,'Subject for Tell a Friend','2020-04-02 01:45:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(145,NULL,9,'Subject for Tell a Friend','2019-08-23 11:15:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(146,NULL,10,'Subject for Pledge Acknowledgment','2019-11-25 00:48:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(147,NULL,10,'Subject for Pledge Acknowledgment','2020-01-29 10:59:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(148,NULL,9,'Subject for Tell a Friend','2019-11-27 19:33:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(149,NULL,9,'Subject for Tell a Friend','2020-03-17 14:01:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(150,NULL,10,'Subject for Pledge Acknowledgment','2020-05-04 02:52:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(151,NULL,10,'Subject for Pledge Acknowledgment','2020-04-29 22:45:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(152,NULL,9,'Subject for Tell a Friend','2020-02-05 00:29:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(153,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 09:51:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(154,NULL,9,'Subject for Tell a Friend','2019-07-10 21:21:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(155,NULL,10,'Subject for Pledge Acknowledgment','2019-10-05 04:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(156,NULL,9,'Subject for Tell a Friend','2019-06-22 10:01:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(157,NULL,10,'Subject for Pledge Acknowledgment','2019-11-02 14:39:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(158,NULL,10,'Subject for Pledge Acknowledgment','2020-04-01 07:26:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(159,NULL,9,'Subject for Tell a Friend','2019-06-18 22:39:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(160,NULL,10,'Subject for Pledge Acknowledgment','2019-12-02 19:43:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(161,NULL,9,'Subject for Tell a Friend','2020-04-28 17:23:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(162,NULL,9,'Subject for Tell a Friend','2020-05-28 19:28:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(163,NULL,10,'Subject for Pledge Acknowledgment','2020-06-03 10:58:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(164,NULL,9,'Subject for Tell a Friend','2019-08-03 14:10:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(165,NULL,9,'Subject for Tell a Friend','2019-10-17 04:15:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(166,NULL,9,'Subject for Tell a Friend','2020-03-14 07:47:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(167,NULL,9,'Subject for Tell a Friend','2019-07-20 06:01:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(168,NULL,9,'Subject for Tell a Friend','2019-09-06 07:48:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(169,NULL,10,'Subject for Pledge Acknowledgment','2020-03-29 16:57:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(170,NULL,10,'Subject for Pledge Acknowledgment','2019-12-08 14:09:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(171,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 14:05:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(172,NULL,9,'Subject for Tell a Friend','2020-01-14 06:45:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(173,NULL,9,'Subject for Tell a Friend','2019-07-04 07:39:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(174,NULL,9,'Subject for Tell a Friend','2019-08-01 04:44:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(175,NULL,9,'Subject for Tell a Friend','2019-09-25 05:54:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(176,NULL,9,'Subject for Tell a Friend','2020-05-03 18:23:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(177,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 22:17:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(178,NULL,9,'Subject for Tell a Friend','2019-12-26 05:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(179,NULL,10,'Subject for Pledge Acknowledgment','2019-07-12 09:38:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(180,NULL,9,'Subject for Tell a Friend','2020-01-11 14:35:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(181,NULL,9,'Subject for Tell a Friend','2019-07-19 05:47:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(182,NULL,9,'Subject for Tell a Friend','2019-12-12 06:28:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(183,NULL,10,'Subject for Pledge Acknowledgment','2020-01-13 11:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(184,NULL,10,'Subject for Pledge Acknowledgment','2019-09-14 00:56:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(185,NULL,9,'Subject for Tell a Friend','2019-12-04 12:37:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(186,NULL,10,'Subject for Pledge Acknowledgment','2019-10-26 14:31:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(187,NULL,10,'Subject for Pledge Acknowledgment','2020-02-10 21:29:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(188,NULL,9,'Subject for Tell a Friend','2019-07-27 11:50:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(189,NULL,9,'Subject for Tell a Friend','2019-12-28 00:50:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(190,NULL,9,'Subject for Tell a Friend','2020-01-09 22:35:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(191,NULL,10,'Subject for Pledge Acknowledgment','2020-05-08 20:17:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(192,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 11:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(193,NULL,9,'Subject for Tell a Friend','2019-11-12 05:50:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(194,NULL,9,'Subject for Tell a Friend','2019-11-19 02:51:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(195,NULL,9,'Subject for Tell a Friend','2019-08-11 09:40:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(196,NULL,9,'Subject for Tell a Friend','2019-10-19 09:08:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(197,NULL,9,'Subject for Tell a Friend','2019-07-26 16:04:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(198,NULL,9,'Subject for Tell a Friend','2019-08-30 23:33:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(199,NULL,9,'Subject for Tell a Friend','2020-01-21 15:46:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(200,NULL,9,'Subject for Tell a Friend','2020-02-06 06:50:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(201,NULL,9,'Subject for Tell a Friend','2019-10-11 23:17:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(202,NULL,9,'Subject for Tell a Friend','2020-05-15 04:05:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(203,NULL,10,'Subject for Pledge Acknowledgment','2020-01-04 05:57:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(204,NULL,9,'Subject for Tell a Friend','2020-03-09 05:31:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(205,NULL,9,'Subject for Tell a Friend','2020-01-07 04:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(206,NULL,10,'Subject for Pledge Acknowledgment','2019-09-19 00:58:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(207,NULL,9,'Subject for Tell a Friend','2019-09-27 03:32:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(208,NULL,10,'Subject for Pledge Acknowledgment','2019-08-01 00:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(209,NULL,9,'Subject for Tell a Friend','2019-12-15 11:25:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(210,NULL,10,'Subject for Pledge Acknowledgment','2019-11-02 03:49:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(211,NULL,10,'Subject for Pledge Acknowledgment','2020-04-14 21:59:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(212,NULL,10,'Subject for Pledge Acknowledgment','2019-12-07 14:02:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(213,NULL,10,'Subject for Pledge Acknowledgment','2019-06-26 18:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(214,NULL,9,'Subject for Tell a Friend','2020-05-23 17:03:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(215,NULL,9,'Subject for Tell a Friend','2019-09-18 17:38:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(216,NULL,9,'Subject for Tell a Friend','2020-02-29 01:05:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(217,NULL,9,'Subject for Tell a Friend','2019-12-17 00:06:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(218,NULL,9,'Subject for Tell a Friend','2020-02-05 08:07:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(219,NULL,9,'Subject for Tell a Friend','2019-09-11 05:54:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(220,NULL,9,'Subject for Tell a Friend','2019-11-02 15:57:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(221,NULL,9,'Subject for Tell a Friend','2019-12-23 08:20:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(222,NULL,9,'Subject for Tell a Friend','2020-03-18 15:21:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(223,NULL,10,'Subject for Pledge Acknowledgment','2020-04-21 23:43:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(224,NULL,10,'Subject for Pledge Acknowledgment','2019-09-15 06:04:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(225,NULL,9,'Subject for Tell a Friend','2019-07-06 07:02:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(226,NULL,9,'Subject for Tell a Friend','2020-05-18 23:30:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(227,NULL,10,'Subject for Pledge Acknowledgment','2019-12-31 03:18:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(228,NULL,9,'Subject for Tell a Friend','2019-11-28 21:51:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(229,NULL,9,'Subject for Tell a Friend','2020-05-03 10:15:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(230,NULL,9,'Subject for Tell a Friend','2020-01-02 13:17:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(231,NULL,9,'Subject for Tell a Friend','2020-03-27 16:23:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(232,NULL,10,'Subject for Pledge Acknowledgment','2019-11-03 00:51:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(233,NULL,10,'Subject for Pledge Acknowledgment','2019-09-25 18:23:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(234,NULL,10,'Subject for Pledge Acknowledgment','2019-06-16 21:03:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(235,NULL,10,'Subject for Pledge Acknowledgment','2019-11-06 04:46:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(236,NULL,9,'Subject for Tell a Friend','2019-08-02 04:10:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(237,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 04:55:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(238,NULL,9,'Subject for Tell a Friend','2019-08-13 01:32:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(239,NULL,10,'Subject for Pledge Acknowledgment','2020-02-11 21:15:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(240,NULL,9,'Subject for Tell a Friend','2019-07-29 22:25:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(241,NULL,10,'Subject for Pledge Acknowledgment','2019-12-22 20:40:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(242,NULL,9,'Subject for Tell a Friend','2019-11-14 04:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(243,NULL,10,'Subject for Pledge Acknowledgment','2020-05-18 08:17:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(244,NULL,10,'Subject for Pledge Acknowledgment','2019-07-07 04:26:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(245,NULL,9,'Subject for Tell a Friend','2020-05-08 07:12:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(246,NULL,10,'Subject for Pledge Acknowledgment','2019-06-25 15:22:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(247,NULL,9,'Subject for Tell a Friend','2020-04-21 08:29:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(248,NULL,9,'Subject for Tell a Friend','2019-11-12 05:15:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(249,NULL,10,'Subject for Pledge Acknowledgment','2019-07-05 04:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:51','2020-06-10 02:45:51'),(250,NULL,10,'Subject for Pledge Acknowledgment','2020-01-06 02:02:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(251,NULL,9,'Subject for Tell a Friend','2019-09-07 21:10:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(252,NULL,10,'Subject for Pledge Acknowledgment','2019-07-19 14:30:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(253,NULL,10,'Subject for Pledge Acknowledgment','2020-05-03 18:49:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(254,NULL,9,'Subject for Tell a Friend','2020-05-03 11:25:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(255,NULL,9,'Subject for Tell a Friend','2019-07-29 08:29:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(256,NULL,10,'Subject for Pledge Acknowledgment','2019-08-16 15:36:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(257,NULL,10,'Subject for Pledge Acknowledgment','2019-10-06 13:05:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(258,NULL,9,'Subject for Tell a Friend','2020-03-03 18:27:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(259,NULL,9,'Subject for Tell a Friend','2020-04-22 00:17:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(260,NULL,10,'Subject for Pledge Acknowledgment','2019-09-27 17:12:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(261,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 04:03:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(262,NULL,10,'Subject for Pledge Acknowledgment','2020-04-02 07:40:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(263,NULL,9,'Subject for Tell a Friend','2020-03-13 23:09:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(264,NULL,9,'Subject for Tell a Friend','2020-01-27 00:28:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(265,NULL,10,'Subject for Pledge Acknowledgment','2019-11-02 05:51:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(266,NULL,9,'Subject for Tell a Friend','2019-09-12 11:56:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(267,NULL,10,'Subject for Pledge Acknowledgment','2020-04-29 20:14:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(268,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 07:58:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(269,NULL,10,'Subject for Pledge Acknowledgment','2019-08-07 09:01:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(270,NULL,9,'Subject for Tell a Friend','2020-05-12 21:57:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(271,NULL,9,'Subject for Tell a Friend','2020-04-14 19:35:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(272,NULL,9,'Subject for Tell a Friend','2020-02-29 12:55:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(273,NULL,10,'Subject for Pledge Acknowledgment','2019-10-19 21:14:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(274,NULL,10,'Subject for Pledge Acknowledgment','2020-01-08 05:12:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(275,NULL,9,'Subject for Tell a Friend','2019-11-20 11:53:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(276,NULL,9,'Subject for Tell a Friend','2019-07-08 05:20:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(277,NULL,9,'Subject for Tell a Friend','2019-11-15 23:46:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(278,NULL,9,'Subject for Tell a Friend','2019-09-05 06:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(279,NULL,9,'Subject for Tell a Friend','2019-06-16 17:54:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(280,NULL,9,'Subject for Tell a Friend','2019-11-27 05:37:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(281,NULL,10,'Subject for Pledge Acknowledgment','2020-05-03 10:20:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(282,NULL,10,'Subject for Pledge Acknowledgment','2020-01-11 12:11:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(283,NULL,9,'Subject for Tell a Friend','2020-02-09 21:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(284,NULL,9,'Subject for Tell a Friend','2020-02-18 19:04:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(285,NULL,10,'Subject for Pledge Acknowledgment','2019-12-27 15:54:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(286,NULL,9,'Subject for Tell a Friend','2020-02-03 17:10:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(287,NULL,9,'Subject for Tell a Friend','2019-11-29 11:45:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(288,NULL,10,'Subject for Pledge Acknowledgment','2020-04-03 08:47:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(289,NULL,10,'Subject for Pledge Acknowledgment','2019-11-30 17:39:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(290,NULL,9,'Subject for Tell a Friend','2019-06-15 15:24:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(291,NULL,10,'Subject for Pledge Acknowledgment','2019-07-24 19:01:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(292,NULL,9,'Subject for Tell a Friend','2019-10-21 00:23:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(293,NULL,9,'Subject for Tell a Friend','2019-10-09 01:38:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(294,NULL,9,'Subject for Tell a Friend','2019-11-01 19:09:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(295,NULL,9,'Subject for Tell a Friend','2020-06-04 21:27:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(296,NULL,9,'Subject for Tell a Friend','2020-03-14 19:25:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(297,NULL,9,'Subject for Tell a Friend','2020-01-12 13:23:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(298,NULL,10,'Subject for Pledge Acknowledgment','2020-02-17 04:48:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(299,NULL,9,'Subject for Tell a Friend','2019-11-21 15:15:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(300,NULL,9,'Subject for Tell a Friend','2020-01-12 18:37:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(301,NULL,10,'Subject for Pledge Acknowledgment','2020-02-05 16:37:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(302,NULL,9,'Subject for Tell a Friend','2020-05-20 15:13:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(303,NULL,10,'Subject for Pledge Acknowledgment','2019-09-03 18:58:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(304,NULL,9,'Subject for Tell a Friend','2019-08-18 03:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(305,NULL,9,'Subject for Tell a Friend','2019-08-17 15:09:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(306,NULL,9,'Subject for Tell a Friend','2019-12-08 17:11:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(307,NULL,9,'Subject for Tell a Friend','2020-01-25 10:55:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(308,NULL,9,'Subject for Tell a Friend','2020-04-06 23:57:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(309,NULL,9,'Subject for Tell a Friend','2020-04-01 07:01:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(310,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 13:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(311,NULL,9,'Subject for Tell a Friend','2019-07-15 00:18:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(312,NULL,9,'Subject for Tell a Friend','2019-11-15 19:31:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(313,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 02:20:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(314,NULL,10,'Subject for Pledge Acknowledgment','2020-05-13 15:27:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(315,NULL,9,'Subject for Tell a Friend','2020-03-22 00:46:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(316,NULL,9,'Subject for Tell a Friend','2019-11-07 07:14:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(317,NULL,10,'Subject for Pledge Acknowledgment','2019-09-27 21:12:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(318,NULL,10,'Subject for Pledge Acknowledgment','2019-11-27 09:14:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(319,NULL,10,'Subject for Pledge Acknowledgment','2020-05-29 21:45:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(320,NULL,10,'Subject for Pledge Acknowledgment','2019-10-06 14:34:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(321,NULL,9,'Subject for Tell a Friend','2020-02-18 07:09:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(322,NULL,9,'Subject for Tell a Friend','2020-01-13 12:10:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(323,NULL,9,'Subject for Tell a Friend','2019-11-02 08:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(324,NULL,10,'Subject for Pledge Acknowledgment','2020-04-17 13:57:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(325,NULL,9,'Subject for Tell a Friend','2019-08-06 18:33:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(326,NULL,10,'Subject for Pledge Acknowledgment','2020-01-06 09:37:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(327,NULL,9,'Subject for Tell a Friend','2020-02-27 18:33:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(328,NULL,9,'Subject for Tell a Friend','2019-07-02 19:54:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(329,NULL,10,'Subject for Pledge Acknowledgment','2019-12-30 14:03:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(330,NULL,10,'Subject for Pledge Acknowledgment','2019-07-01 04:22:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(331,NULL,9,'Subject for Tell a Friend','2020-05-08 12:21:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(332,NULL,10,'Subject for Pledge Acknowledgment','2020-05-08 11:52:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(333,NULL,9,'Subject for Tell a Friend','2020-04-29 13:56:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(334,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 08:43:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(335,NULL,9,'Subject for Tell a Friend','2019-12-16 03:51:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(336,NULL,9,'Subject for Tell a Friend','2019-08-03 12:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(337,NULL,9,'Subject for Tell a Friend','2019-12-03 09:01:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(338,NULL,9,'Subject for Tell a Friend','2020-05-13 12:10:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(339,NULL,9,'Subject for Tell a Friend','2019-10-15 23:33:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(340,NULL,10,'Subject for Pledge Acknowledgment','2020-04-18 23:20:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(341,NULL,10,'Subject for Pledge Acknowledgment','2019-11-15 14:50:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(342,NULL,10,'Subject for Pledge Acknowledgment','2019-12-04 17:26:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(343,NULL,9,'Subject for Tell a Friend','2020-03-17 18:08:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(344,NULL,10,'Subject for Pledge Acknowledgment','2020-02-04 18:17:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(345,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 06:11:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(346,NULL,10,'Subject for Pledge Acknowledgment','2019-12-14 18:39:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(347,NULL,10,'Subject for Pledge Acknowledgment','2019-09-21 05:08:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(348,NULL,9,'Subject for Tell a Friend','2020-02-14 19:42:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(349,NULL,9,'Subject for Tell a Friend','2020-02-25 10:41:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(350,NULL,9,'Subject for Tell a Friend','2020-01-17 21:15:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(351,NULL,10,'Subject for Pledge Acknowledgment','2019-07-07 13:58:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(352,NULL,9,'Subject for Tell a Friend','2019-09-08 23:10:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(353,NULL,9,'Subject for Tell a Friend','2019-07-06 01:21:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(354,NULL,9,'Subject for Tell a Friend','2020-06-07 06:02:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(355,NULL,10,'Subject for Pledge Acknowledgment','2020-01-21 11:50:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(356,NULL,9,'Subject for Tell a Friend','2020-05-10 22:45:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(357,NULL,9,'Subject for Tell a Friend','2019-10-16 21:30:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(358,NULL,10,'Subject for Pledge Acknowledgment','2020-04-15 11:43:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(359,NULL,10,'Subject for Pledge Acknowledgment','2020-05-17 21:59:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(360,NULL,10,'Subject for Pledge Acknowledgment','2020-04-07 12:00:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(361,NULL,9,'Subject for Tell a Friend','2020-04-15 13:56:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(362,NULL,9,'Subject for Tell a Friend','2019-06-11 18:54:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(363,NULL,10,'Subject for Pledge Acknowledgment','2020-01-31 15:50:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(364,NULL,9,'Subject for Tell a Friend','2020-02-27 15:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(365,NULL,9,'Subject for Tell a Friend','2020-04-27 04:51:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(366,NULL,9,'Subject for Tell a Friend','2020-06-01 20:12:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(367,NULL,9,'Subject for Tell a Friend','2020-02-18 11:28:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(368,NULL,9,'Subject for Tell a Friend','2019-11-19 06:44:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(369,NULL,9,'Subject for Tell a Friend','2020-01-22 14:58:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(370,NULL,10,'Subject for Pledge Acknowledgment','2020-03-15 06:57:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(371,NULL,9,'Subject for Tell a Friend','2019-09-14 16:20:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(372,NULL,10,'Subject for Pledge Acknowledgment','2020-01-21 23:26:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(373,NULL,10,'Subject for Pledge Acknowledgment','2019-11-26 00:47:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(374,NULL,10,'Subject for Pledge Acknowledgment','2019-07-04 14:48:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(375,NULL,10,'Subject for Pledge Acknowledgment','2020-03-19 22:02:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(376,NULL,9,'Subject for Tell a Friend','2019-10-10 13:00:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(377,NULL,10,'Subject for Pledge Acknowledgment','2020-02-03 17:33:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(378,NULL,9,'Subject for Tell a Friend','2019-11-10 06:49:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(379,NULL,9,'Subject for Tell a Friend','2020-01-10 04:48:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(380,NULL,9,'Subject for Tell a Friend','2019-09-19 18:59:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(381,NULL,9,'Subject for Tell a Friend','2020-01-22 09:58:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(382,NULL,9,'Subject for Tell a Friend','2019-11-04 11:02:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(383,NULL,10,'Subject for Pledge Acknowledgment','2019-09-25 10:52:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(384,NULL,9,'Subject for Tell a Friend','2019-08-17 11:06:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(385,NULL,10,'Subject for Pledge Acknowledgment','2019-10-30 21:23:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(386,NULL,9,'Subject for Tell a Friend','2019-09-01 18:40:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(387,NULL,10,'Subject for Pledge Acknowledgment','2020-04-14 19:19:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(388,NULL,9,'Subject for Tell a Friend','2020-01-31 00:34:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(389,NULL,10,'Subject for Pledge Acknowledgment','2020-06-07 04:18:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(390,NULL,10,'Subject for Pledge Acknowledgment','2019-11-01 08:53:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(391,NULL,9,'Subject for Tell a Friend','2020-02-22 02:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(392,NULL,10,'Subject for Pledge Acknowledgment','2019-09-01 20:35:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(393,NULL,10,'Subject for Pledge Acknowledgment','2019-08-02 17:30:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(394,NULL,9,'Subject for Tell a Friend','2019-12-17 07:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(395,NULL,10,'Subject for Pledge Acknowledgment','2019-12-14 07:45:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(396,NULL,9,'Subject for Tell a Friend','2019-07-30 01:14:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(397,NULL,10,'Subject for Pledge Acknowledgment','2020-05-30 14:42:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(398,NULL,9,'Subject for Tell a Friend','2020-03-10 06:29:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(399,NULL,9,'Subject for Tell a Friend','2020-04-12 04:01:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(400,NULL,9,'Subject for Tell a Friend','2020-03-19 07:05:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(401,NULL,10,'Subject for Pledge Acknowledgment','2019-09-30 01:28:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(402,NULL,9,'Subject for Tell a Friend','2020-01-11 09:55:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(403,NULL,10,'Subject for Pledge Acknowledgment','2020-01-02 14:18:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(404,NULL,9,'Subject for Tell a Friend','2020-01-01 13:50:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(405,NULL,9,'Subject for Tell a Friend','2020-04-07 18:13:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(406,NULL,10,'Subject for Pledge Acknowledgment','2019-11-29 11:23:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(407,NULL,10,'Subject for Pledge Acknowledgment','2019-09-01 19:29:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(408,NULL,9,'Subject for Tell a Friend','2020-04-14 13:03:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(409,NULL,10,'Subject for Pledge Acknowledgment','2020-02-14 08:00:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(410,NULL,9,'Subject for Tell a Friend','2020-06-04 04:04:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(411,NULL,9,'Subject for Tell a Friend','2020-05-23 07:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(412,NULL,9,'Subject for Tell a Friend','2019-12-24 20:33:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(413,NULL,9,'Subject for Tell a Friend','2020-04-06 13:04:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(414,NULL,10,'Subject for Pledge Acknowledgment','2019-10-01 08:05:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(415,NULL,10,'Subject for Pledge Acknowledgment','2020-03-19 06:19:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(416,NULL,10,'Subject for Pledge Acknowledgment','2019-10-23 03:22:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(417,NULL,10,'Subject for Pledge Acknowledgment','2019-10-07 18:53:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(418,NULL,10,'Subject for Pledge Acknowledgment','2019-09-08 09:17:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(419,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 06:12:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(420,NULL,10,'Subject for Pledge Acknowledgment','2020-02-24 03:59:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(421,NULL,9,'Subject for Tell a Friend','2019-08-29 22:25:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(422,NULL,9,'Subject for Tell a Friend','2019-07-17 23:55:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(423,NULL,9,'Subject for Tell a Friend','2019-10-19 05:32:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(424,NULL,10,'Subject for Pledge Acknowledgment','2019-11-26 14:40:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(425,NULL,9,'Subject for Tell a Friend','2020-02-12 04:01:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(426,NULL,10,'Subject for Pledge Acknowledgment','2019-08-07 02:01:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(427,NULL,10,'Subject for Pledge Acknowledgment','2019-12-05 13:21:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(428,NULL,10,'Subject for Pledge Acknowledgment','2019-12-07 19:51:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(429,NULL,10,'Subject for Pledge Acknowledgment','2019-10-12 12:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(430,NULL,10,'Subject for Pledge Acknowledgment','2019-10-15 17:08:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(431,NULL,9,'Subject for Tell a Friend','2019-10-09 09:46:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(432,NULL,10,'Subject for Pledge Acknowledgment','2019-12-13 09:14:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(433,NULL,10,'Subject for Pledge Acknowledgment','2020-03-12 23:55:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(434,NULL,10,'Subject for Pledge Acknowledgment','2019-12-15 22:37:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(435,NULL,10,'Subject for Pledge Acknowledgment','2019-11-27 01:29:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(436,NULL,10,'Subject for Pledge Acknowledgment','2019-07-09 19:06:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(437,NULL,9,'Subject for Tell a Friend','2020-03-16 03:50:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(438,NULL,9,'Subject for Tell a Friend','2019-06-20 00:57:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(439,NULL,9,'Subject for Tell a Friend','2019-08-25 21:01:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(440,NULL,9,'Subject for Tell a Friend','2020-05-22 02:54:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(441,NULL,9,'Subject for Tell a Friend','2020-04-17 08:54:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(442,NULL,10,'Subject for Pledge Acknowledgment','2020-01-23 04:39:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(443,NULL,9,'Subject for Tell a Friend','2019-07-21 18:44:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(444,NULL,10,'Subject for Pledge Acknowledgment','2019-11-18 03:13:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(445,NULL,9,'Subject for Tell a Friend','2020-05-25 12:07:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(446,NULL,10,'Subject for Pledge Acknowledgment','2019-09-25 21:59:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(447,NULL,9,'Subject for Tell a Friend','2020-03-06 11:52:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(448,NULL,10,'Subject for Pledge Acknowledgment','2019-10-21 08:30:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(449,NULL,10,'Subject for Pledge Acknowledgment','2020-05-18 23:36:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(450,NULL,9,'Subject for Tell a Friend','2019-12-18 10:35:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(464,1,7,'General','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(465,2,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(466,3,7,'General','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(467,4,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(468,5,7,'General','2018-05-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(469,6,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(470,7,7,'General','2020-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(471,8,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(472,9,7,'General','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(473,10,7,'General','2018-03-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(474,11,7,'Lifetime','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(475,12,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(476,13,7,'General','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(477,14,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(478,15,7,'General','2018-02-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(479,16,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(480,17,7,'General','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(481,18,7,'Student','2020-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,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(482,19,7,'General','2020-05-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(483,20,7,'Student','2019-05-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(484,21,7,'General','2020-05-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(485,22,7,'Lifetime','2020-05-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(486,23,7,'General','2020-05-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(487,24,7,'Student','2020-05-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(488,25,7,'General','2017-11-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(489,26,7,'Student','2020-05-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(490,27,7,'General','2020-05-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(491,28,7,'Student','2020-05-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(492,29,7,'General','2020-05-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(493,30,7,'Student','2019-05-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(507,27,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(508,28,6,'$ 100.00 - General Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(575,45,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(576,46,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(578,48,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(579,49,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(580,50,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(581,51,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(582,52,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(585,55,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(586,56,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(587,57,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(588,58,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(589,59,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(591,61,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(592,62,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(595,65,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(599,69,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(600,70,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(601,71,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(604,74,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(607,77,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(609,79,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(612,82,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(614,84,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(617,87,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(618,88,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(622,92,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'),(624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-06-10 14:45:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-06-10 02:45:52','2020-06-10 02:45:52'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -97,7 +97,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity_contact` WRITE; /*!40000 ALTER TABLE `civicrm_activity_contact` DISABLE KEYS */; -INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES (460,314,1,3),(642,438,1,3),(38,24,2,3),(369,248,2,3),(662,451,2,2),(57,38,3,3),(483,330,3,3),(694,483,3,2),(713,502,3,2),(128,86,4,3),(241,160,4,3),(663,452,4,2),(406,275,5,3),(581,394,5,3),(695,484,5,2),(714,503,5,2),(239,159,6,3),(664,453,6,2),(231,154,7,3),(285,190,7,3),(355,239,7,3),(785,574,7,2),(123,83,8,3),(619,420,8,3),(665,454,8,2),(159,105,9,3),(297,197,10,3),(520,353,10,3),(640,437,10,3),(395,268,11,3),(616,418,11,3),(96,65,12,3),(540,367,12,3),(544,370,12,3),(682,471,12,2),(723,512,12,2),(453,310,13,3),(648,442,13,3),(60,40,14,3),(63,42,14,3),(75,51,14,3),(107,73,14,3),(486,332,14,3),(752,541,15,2),(200,132,16,3),(209,138,16,3),(244,162,16,3),(260,174,16,3),(666,455,16,2),(113,77,17,3),(141,94,17,3),(317,210,17,3),(768,557,18,2),(35,22,19,3),(265,177,19,3),(566,384,19,3),(667,456,19,2),(270,181,20,3),(344,231,20,3),(658,448,20,3),(742,531,20,2),(403,273,21,3),(408,276,21,3),(680,469,21,2),(722,511,21,2),(116,79,22,3),(613,416,22,3),(130,87,23,3),(121,82,24,3),(161,106,24,3),(546,371,24,3),(329,219,25,3),(379,256,25,3),(147,97,26,3),(274,183,26,3),(291,193,26,3),(423,287,26,3),(605,411,26,3),(320,212,27,3),(760,549,27,2),(6,3,28,3),(21,13,28,3),(72,49,28,3),(455,311,28,3),(611,415,29,3),(447,306,30,3),(309,205,32,3),(673,462,32,2),(674,463,32,2),(769,558,32,2),(670,459,34,2),(758,547,34,2),(225,149,35,3),(371,249,35,3),(41,26,36,3),(132,88,36,3),(136,91,36,3),(236,157,36,3),(481,329,36,3),(415,281,37,3),(594,404,37,3),(188,125,38,3),(283,189,38,3),(385,261,38,3),(433,294,38,3),(27,17,39,3),(94,64,39,3),(499,340,39,3),(783,572,39,2),(80,55,40,3),(677,466,40,2),(706,495,40,2),(741,530,41,2),(262,175,42,3),(341,229,42,3),(362,243,42,3),(672,461,43,2),(744,533,43,2),(312,207,44,3),(364,244,44,3),(557,379,44,3),(118,80,45,3),(636,435,45,3),(494,337,46,3),(18,11,47,3),(650,443,47,3),(138,92,48,3),(289,192,48,3),(213,140,49,3),(247,164,49,3),(737,526,49,2),(87,60,50,3),(197,130,50,3),(207,137,52,3),(253,168,52,3),(514,350,52,3),(779,568,52,2),(92,63,53,3),(661,450,53,3),(656,447,54,3),(4,2,55,3),(67,45,55,3),(314,208,55,3),(738,527,55,2),(390,265,56,3),(451,309,56,3),(476,326,56,3),(579,393,56,3),(602,409,56,3),(175,116,57,3),(195,129,57,3),(306,203,57,3),(216,142,58,3),(277,185,59,3),(327,218,59,3),(687,476,59,2),(709,498,59,2),(780,569,59,2),(548,372,60,3),(745,534,60,2),(441,301,61,2),(442,302,61,2),(443,303,61,2),(444,304,61,2),(445,305,61,2),(446,306,61,2),(448,307,61,2),(449,308,61,2),(450,309,61,2),(452,310,61,2),(454,311,61,2),(456,312,61,2),(457,313,61,2),(459,314,61,2),(461,315,61,2),(462,316,61,2),(464,317,61,2),(465,318,61,2),(466,319,61,2),(468,320,61,2),(469,321,61,2),(471,322,61,2),(472,323,61,2),(473,324,61,2),(474,325,61,2),(475,326,61,2),(477,327,61,2),(479,328,61,2),(480,329,61,2),(482,330,61,2),(484,331,61,2),(485,332,61,2),(487,333,61,2),(488,334,61,2),(490,335,61,2),(491,336,61,2),(493,337,61,2),(495,338,61,2),(497,339,61,2),(498,340,61,2),(500,341,61,2),(501,342,61,2),(503,343,61,2),(504,344,61,2),(505,345,61,2),(506,346,61,2),(508,347,61,2),(510,348,61,2),(512,349,61,2),(513,350,61,2),(515,351,61,2),(517,352,61,2),(518,352,61,3),(519,353,61,2),(521,354,61,2),(522,355,61,2),(523,356,61,2),(525,357,61,2),(526,358,61,2),(527,359,61,2),(529,360,61,2),(530,361,61,2),(532,362,61,2),(533,363,61,2),(534,364,61,2),(536,365,61,2),(537,366,61,2),(539,367,61,2),(541,368,61,2),(542,369,61,2),(543,370,61,2),(545,371,61,2),(547,372,61,2),(549,373,61,2),(551,374,61,2),(552,375,61,2),(553,376,61,2),(554,377,61,2),(555,378,61,2),(556,379,61,2),(558,380,61,2),(560,381,61,2),(562,382,61,2),(564,383,61,2),(565,384,61,2),(567,385,61,2),(568,386,61,2),(569,387,61,2),(570,388,61,2),(572,389,61,2),(573,389,61,3),(574,390,61,2),(575,391,61,2),(576,392,61,2),(578,393,61,2),(580,394,61,2),(582,395,61,2),(583,396,61,2),(584,397,61,2),(585,398,61,2),(587,399,61,2),(588,400,61,2),(589,401,61,2),(590,402,61,2),(591,403,61,2),(593,404,61,2),(595,405,61,2),(596,406,61,2),(597,407,61,2),(599,408,61,2),(601,409,61,2),(603,410,61,2),(604,411,61,2),(606,412,61,2),(608,413,61,2),(609,414,61,2),(610,415,61,2),(612,416,61,2),(614,417,61,2),(615,418,61,2),(617,419,61,2),(618,420,61,2),(620,421,61,2),(621,422,61,2),(622,423,61,2),(623,424,61,2),(625,425,61,2),(626,426,61,2),(627,427,61,2),(628,428,61,2),(629,429,61,2),(630,430,61,2),(631,431,61,2),(632,432,61,2),(633,433,61,2),(634,434,61,2),(635,435,61,2),(637,436,61,2),(639,437,61,2),(641,438,61,2),(643,439,61,2),(645,440,61,2),(646,441,61,2),(647,442,61,2),(649,443,61,2),(651,444,61,2),(653,445,61,2),(654,446,61,2),(655,447,61,2),(657,448,61,2),(659,449,61,2),(660,450,61,2),(689,478,61,2),(710,499,61,2),(126,85,62,3),(470,321,62,3),(83,57,63,3),(249,165,63,3),(411,278,63,3),(492,336,63,3),(767,556,63,2),(1,1,64,2),(3,2,64,2),(5,3,64,2),(7,4,64,2),(9,5,64,2),(10,6,64,2),(11,7,64,2),(13,8,64,2),(14,9,64,2),(15,10,64,2),(17,11,64,2),(19,12,64,2),(20,13,64,2),(22,14,64,2),(24,15,64,2),(25,16,64,2),(26,17,64,2),(28,18,64,2),(30,19,64,2),(31,20,64,2),(32,21,64,2),(34,22,64,2),(36,23,64,2),(37,24,64,2),(39,25,64,2),(40,26,64,2),(42,27,64,2),(43,28,64,2),(45,29,64,2),(46,30,64,2),(47,31,64,2),(49,32,64,2),(50,33,64,2),(51,34,64,2),(52,35,64,2),(53,36,64,2),(54,37,64,2),(56,38,64,2),(58,39,64,2),(59,40,64,2),(61,41,64,2),(62,42,64,2),(64,43,64,2),(65,44,64,2),(66,45,64,2),(68,46,64,2),(69,47,64,2),(70,48,64,2),(71,49,64,2),(73,50,64,2),(74,51,64,2),(76,52,64,2),(77,53,64,2),(78,54,64,2),(79,55,64,2),(81,56,64,2),(82,57,64,2),(84,58,64,2),(85,59,64,2),(86,60,64,2),(88,61,64,2),(90,62,64,2),(91,63,64,2),(93,64,64,2),(95,65,64,2),(97,66,64,2),(98,67,64,2),(99,68,64,2),(101,69,64,2),(102,70,64,2),(103,71,64,2),(105,72,64,2),(106,73,64,2),(108,74,64,2),(109,75,64,2),(110,76,64,2),(112,77,64,2),(114,78,64,2),(115,79,64,2),(117,80,64,2),(119,81,64,2),(120,82,64,2),(122,83,64,2),(124,84,64,2),(125,85,64,2),(127,86,64,2),(129,87,64,2),(131,88,64,2),(133,89,64,2),(134,90,64,2),(135,91,64,2),(137,92,64,2),(139,93,64,2),(140,94,64,2),(142,95,64,2),(144,96,64,2),(146,97,64,2),(148,98,64,2),(149,99,64,2),(150,100,64,2),(152,101,64,2),(153,102,64,2),(154,103,64,2),(156,104,64,2),(158,105,64,2),(160,106,64,2),(162,107,64,2),(163,108,64,2),(165,109,64,2),(167,110,64,2),(168,111,64,2),(169,112,64,2),(170,113,64,2),(171,114,64,2),(172,114,64,3),(173,115,64,2),(174,116,64,2),(176,117,64,2),(177,118,64,2),(179,119,64,2),(181,120,64,2),(183,121,64,2),(184,122,64,2),(185,123,64,2),(186,124,64,2),(187,125,64,2),(189,126,64,2),(191,127,64,2),(192,128,64,2),(194,129,64,2),(196,130,64,2),(198,131,64,2),(199,132,64,2),(201,133,64,2),(202,134,64,2),(203,135,64,2),(205,136,64,2),(206,137,64,2),(208,138,64,2),(210,139,64,2),(212,140,64,2),(214,141,64,2),(215,142,64,2),(217,143,64,2),(219,144,64,2),(220,145,64,2),(221,146,64,2),(222,147,64,2),(223,148,64,2),(224,149,64,2),(226,150,64,2),(295,196,64,3),(535,364,64,3),(561,381,64,3),(703,492,64,2),(717,506,64,2),(178,118,65,3),(421,286,65,3),(571,388,65,3),(358,241,66,3),(431,293,66,3),(437,297,66,3),(765,554,66,2),(29,18,67,3),(44,28,67,3),(166,109,68,3),(182,120,68,3),(218,143,68,3),(279,186,68,3),(467,319,68,3),(598,407,68,3),(702,491,68,2),(732,521,68,2),(55,37,69,3),(300,199,69,3),(401,272,70,3),(600,408,70,3),(774,563,70,2),(8,4,71,3),(671,460,71,2),(693,482,71,2),(712,501,71,2),(33,21,72,3),(48,31,72,3),(204,135,72,3),(180,119,73,3),(531,361,73,3),(143,95,74,3),(233,155,74,3),(507,346,75,3),(577,392,75,3),(644,439,75,3),(592,403,76,3),(773,562,76,2),(524,356,77,3),(559,380,77,3),(696,485,77,2),(734,523,77,2),(104,71,78,3),(272,182,78,3),(563,382,78,3),(652,444,78,3),(16,10,79,3),(392,266,79,3),(516,351,79,3),(756,545,79,2),(155,103,80,3),(331,220,80,3),(624,424,80,3),(586,398,81,3),(679,468,81,2),(721,510,81,2),(12,7,82,3),(668,457,82,2),(770,559,82,2),(478,327,83,3),(607,412,84,3),(743,532,84,2),(190,126,86,3),(164,108,87,3),(360,242,87,3),(23,14,88,3),(350,235,88,3),(782,571,88,2),(509,347,89,3),(157,104,90,3),(458,313,90,3),(511,348,90,3),(550,373,90,3),(686,475,90,2),(725,514,90,2),(111,76,92,3),(347,233,92,3),(399,271,92,3),(669,458,92,2),(211,139,94,3),(303,201,94,3),(701,490,94,2),(716,505,94,2),(502,342,95,3),(748,537,96,2),(2,1,97,3),(428,291,97,3),(463,316,97,3),(750,539,97,2),(145,96,98,3),(489,334,98,3),(538,366,98,3),(776,565,98,2),(496,338,99,3),(528,359,99,3),(638,436,99,3),(100,68,100,3),(151,100,100,3),(287,191,100,3),(89,61,101,3),(193,128,101,3),(772,561,101,2),(777,566,104,2),(755,544,108,2),(762,551,110,2),(685,474,111,2),(733,522,111,2),(227,151,114,2),(228,152,114,2),(229,153,114,2),(230,154,114,2),(232,155,114,2),(234,156,114,2),(235,157,114,2),(237,158,114,2),(238,159,114,2),(240,160,114,2),(242,161,114,2),(243,162,114,2),(245,163,114,2),(246,164,114,2),(248,165,114,2),(250,166,114,2),(251,167,114,2),(252,168,114,2),(254,169,114,2),(255,170,114,2),(256,171,114,2),(257,172,114,2),(258,173,114,2),(259,174,114,2),(261,175,114,2),(263,176,114,2),(264,177,114,2),(266,178,114,2),(267,179,114,2),(268,180,114,2),(269,181,114,2),(271,182,114,2),(273,183,114,2),(275,184,114,2),(276,185,114,2),(278,186,114,2),(280,187,114,2),(281,188,114,2),(282,189,114,2),(284,190,114,2),(286,191,114,2),(288,192,114,2),(290,193,114,2),(292,194,114,2),(293,195,114,2),(294,196,114,2),(296,197,114,2),(298,198,114,2),(299,199,114,2),(301,200,114,2),(302,201,114,2),(304,202,114,2),(305,203,114,2),(307,204,114,2),(308,205,114,2),(310,206,114,2),(311,207,114,2),(313,208,114,2),(315,209,114,2),(316,210,114,2),(318,211,114,2),(319,212,114,2),(321,213,114,2),(322,214,114,2),(323,215,114,2),(324,216,114,2),(325,217,114,2),(326,218,114,2),(328,219,114,2),(330,220,114,2),(332,221,114,2),(333,222,114,2),(334,223,114,2),(335,224,114,2),(336,225,114,2),(337,226,114,2),(338,227,114,2),(339,228,114,2),(340,229,114,2),(342,230,114,2),(343,231,114,2),(345,232,114,2),(346,233,114,2),(348,234,114,2),(349,235,114,2),(351,236,114,2),(352,237,114,2),(353,238,114,2),(354,239,114,2),(356,240,114,2),(357,241,114,2),(359,242,114,2),(361,243,114,2),(363,244,114,2),(365,245,114,2),(366,246,114,2),(367,247,114,2),(368,248,114,2),(370,249,114,2),(372,250,114,2),(373,251,114,2),(374,252,114,2),(375,253,114,2),(376,254,114,2),(377,255,114,2),(378,256,114,2),(380,257,114,2),(381,258,114,2),(382,259,114,2),(383,260,114,2),(384,261,114,2),(386,262,114,2),(387,263,114,2),(388,264,114,2),(389,265,114,2),(391,266,114,2),(393,267,114,2),(394,268,114,2),(396,269,114,2),(397,270,114,2),(398,271,114,2),(400,272,114,2),(402,273,114,2),(404,274,114,2),(405,275,114,2),(407,276,114,2),(409,277,114,2),(410,278,114,2),(412,279,114,2),(413,280,114,2),(414,281,114,2),(416,282,114,2),(417,283,114,2),(418,284,114,2),(419,285,114,2),(420,286,114,2),(422,287,114,2),(424,288,114,2),(425,289,114,2),(426,290,114,2),(427,291,114,2),(429,292,114,2),(430,293,114,2),(432,294,114,2),(434,295,114,2),(435,296,114,2),(436,297,114,2),(438,298,114,2),(439,299,114,2),(440,300,114,2),(700,489,118,2),(731,520,118,2),(753,542,119,2),(781,570,121,2),(739,528,124,2),(691,480,125,2),(711,500,125,2),(766,555,125,2),(678,467,126,2),(720,509,126,2),(699,488,129,2),(730,519,129,2),(754,543,129,2),(763,552,132,2),(761,550,133,2),(697,486,135,2),(715,504,135,2),(757,546,137,2),(759,548,139,2),(775,564,141,2),(751,540,145,2),(784,573,150,2),(684,473,151,2),(724,513,151,2),(749,538,154,2),(692,481,157,2),(728,517,157,2),(683,472,160,2),(708,497,160,2),(771,560,164,2),(681,470,168,2),(707,496,168,2),(746,535,169,2),(704,493,174,2),(718,507,174,2),(690,479,175,2),(727,516,175,2),(778,567,177,2),(675,464,181,2),(705,494,181,2),(740,529,183,2),(688,477,184,2),(726,515,184,2),(676,465,188,2),(719,508,188,2),(747,536,188,2),(736,525,189,2),(698,487,195,2),(729,518,195,2),(764,553,198,2); +INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES (22,17,1,3),(578,376,1,3),(773,535,1,2),(246,167,2,3),(349,229,2,3),(540,352,2,3),(556,362,2,3),(689,451,2,2),(287,193,3,3),(794,556,3,2),(446,293,4,3),(499,325,4,3),(631,410,4,3),(690,452,4,2),(724,486,4,2),(743,505,4,2),(790,552,4,2),(52,37,5,3),(293,196,5,3),(144,100,6,3),(691,453,6,2),(559,364,7,3),(805,567,7,2),(103,73,8,3),(151,104,8,3),(372,245,8,3),(692,454,8,2),(222,152,9,3),(502,327,9,3),(537,350,9,3),(704,466,9,2),(733,495,9,2),(426,280,10,3),(457,299,10,3),(713,475,10,2),(751,513,10,2),(189,129,11,3),(351,230,11,3),(508,331,11,3),(807,569,11,2),(261,176,12,3),(403,266,12,3),(430,283,12,3),(716,478,12,2),(739,501,12,2),(806,568,12,2),(165,113,13,3),(136,95,14,3),(269,181,14,3),(291,195,14,3),(465,304,14,3),(688,450,14,3),(146,101,15,3),(324,215,15,3),(725,487,15,2),(756,518,15,2),(693,455,16,2),(633,411,17,3),(232,159,18,3),(444,292,18,3),(720,482,18,2),(741,503,18,2),(802,564,18,2),(220,151,19,2),(221,152,19,2),(223,153,19,2),(224,154,19,2),(226,155,19,2),(227,156,19,2),(229,157,19,2),(230,158,19,2),(231,159,19,2),(233,160,19,2),(234,161,19,2),(236,162,19,2),(238,163,19,2),(239,164,19,2),(241,165,19,2),(243,166,19,2),(245,167,19,2),(247,168,19,2),(249,169,19,2),(250,170,19,2),(251,171,19,2),(252,172,19,2),(254,173,19,2),(256,174,19,2),(258,175,19,2),(260,176,19,2),(262,177,19,2),(263,178,19,2),(265,179,19,2),(266,180,19,2),(268,181,19,2),(270,182,19,2),(272,183,19,2),(273,184,19,2),(274,185,19,2),(276,186,19,2),(277,187,19,2),(278,188,19,2),(280,189,19,2),(282,190,19,2),(284,191,19,2),(285,192,19,2),(286,193,19,2),(288,194,19,2),(290,195,19,2),(292,196,19,2),(294,197,19,2),(296,198,19,2),(298,199,19,2),(300,200,19,2),(302,201,19,2),(304,202,19,2),(306,203,19,2),(307,204,19,2),(309,205,19,2),(311,206,19,2),(312,207,19,2),(314,208,19,2),(315,209,19,2),(317,210,19,2),(318,211,19,2),(319,212,19,2),(320,213,19,2),(321,214,19,2),(323,215,19,2),(325,216,19,2),(327,217,19,2),(329,218,19,2),(331,219,19,2),(333,220,19,2),(335,221,19,2),(336,221,19,3),(337,222,19,2),(339,223,19,2),(340,224,19,2),(341,225,19,2),(343,226,19,2),(345,227,19,2),(346,228,19,2),(348,229,19,2),(350,230,19,2),(352,231,19,2),(354,232,19,2),(355,233,19,2),(356,234,19,2),(357,235,19,2),(358,236,19,2),(360,237,19,2),(361,238,19,2),(363,239,19,2),(364,240,19,2),(366,241,19,2),(367,242,19,2),(369,243,19,2),(370,244,19,2),(371,245,19,2),(373,246,19,2),(374,247,19,2),(376,248,19,2),(378,249,19,2),(379,250,19,2),(380,251,19,2),(382,252,19,2),(383,253,19,2),(384,254,19,2),(386,255,19,2),(388,256,19,2),(389,257,19,2),(390,258,19,2),(392,259,19,2),(394,260,19,2),(395,261,19,2),(396,262,19,2),(397,263,19,2),(399,264,19,2),(401,265,19,2),(402,266,19,2),(404,267,19,2),(405,268,19,2),(406,269,19,2),(407,270,19,2),(409,271,19,2),(411,272,19,2),(413,273,19,2),(414,274,19,2),(415,275,19,2),(416,275,19,3),(417,276,19,2),(419,277,19,2),(421,278,19,2),(423,279,19,2),(425,280,19,2),(427,281,19,2),(428,282,19,2),(429,283,19,2),(431,284,19,2),(433,285,19,2),(434,286,19,2),(436,287,19,2),(438,288,19,2),(439,289,19,2),(440,290,19,2),(442,291,19,2),(443,292,19,2),(445,293,19,2),(447,294,19,2),(449,295,19,2),(451,296,19,2),(453,297,19,2),(455,298,19,2),(456,299,19,2),(458,300,19,2),(694,456,19,2),(161,110,20,3),(480,312,20,3),(554,361,20,3),(777,539,20,2),(344,226,21,3),(484,315,21,3),(117,83,23,3),(228,156,23,3),(381,251,23,3),(774,536,23,2),(368,242,25,3),(271,182,26,3),(301,200,26,3),(342,225,26,3),(637,413,26,3),(177,122,27,3),(398,263,27,3),(475,309,27,3),(533,348,27,3),(792,554,27,2),(202,139,28,3),(504,328,28,3),(624,405,28,3),(121,86,30,3),(514,335,30,3),(522,339,30,3),(788,550,30,2),(66,45,32,3),(592,384,32,3),(700,462,32,2),(701,463,32,2),(729,491,32,2),(758,520,32,2),(216,148,33,3),(812,574,33,2),(36,26,34,3),(78,54,34,3),(207,142,34,3),(561,365,34,3),(697,459,34,2),(316,209,35,3),(671,439,35,3),(235,161,36,3),(242,165,36,3),(516,336,36,3),(210,144,37,3),(259,175,38,3),(614,399,38,3),(115,82,39,3),(518,337,39,3),(585,380,39,3),(609,396,39,3),(385,254,40,3),(54,38,41,3),(462,302,41,3),(718,480,41,2),(740,502,41,2),(156,107,42,3),(240,164,42,3),(126,89,43,3),(184,126,43,3),(375,247,43,3),(535,349,43,3),(699,461,43,2),(48,34,44,3),(74,52,44,3),(212,145,44,3),(572,371,44,3),(598,388,44,3),(170,117,45,3),(424,279,45,3),(492,321,45,3),(678,443,45,3),(84,58,46,3),(279,188,46,3),(281,189,46,3),(448,294,46,3),(248,168,47,3),(612,398,47,3),(92,65,48,3),(547,356,48,3),(420,277,49,3),(544,354,49,3),(14,12,50,3),(124,88,51,3),(347,228,51,3),(353,231,51,3),(785,547,51,2),(435,286,52,3),(710,472,52,2),(736,498,52,2),(789,551,52,2),(16,13,54,3),(646,421,54,3),(56,39,55,3),(587,381,55,3),(264,178,56,3),(338,222,57,3),(650,423,57,3),(660,431,57,3),(764,526,57,2),(134,94,58,3),(181,124,58,3),(305,202,58,3),(494,322,58,3),(653,425,59,3),(708,470,59,2),(735,497,59,2),(765,527,59,2),(195,134,60,3),(244,166,60,3),(275,185,60,3),(310,205,60,3),(565,367,60,3),(450,295,61,3),(496,323,61,3),(595,386,61,3),(799,561,61,2),(27,20,62,3),(154,106,62,3),(186,127,62,3),(486,316,62,3),(728,490,62,2),(745,507,62,2),(38,27,63,3),(174,120,63,3),(267,180,63,3),(602,391,63,3),(25,19,64,3),(32,23,64,3),(289,194,64,3),(569,369,64,3),(622,404,64,3),(106,75,67,3),(542,353,67,3),(132,93,68,3),(619,402,68,3),(804,566,68,2),(511,333,69,3),(628,408,69,3),(330,218,70,3),(589,382,70,3),(769,531,70,2),(255,173,71,3),(322,214,71,3),(567,368,71,3),(675,441,71,3),(698,460,71,2),(359,236,72,3),(684,447,72,3),(61,42,73,3),(400,264,73,3),(459,300,73,3),(667,437,73,3),(714,476,73,2),(738,500,73,2),(787,549,74,2),(583,379,75,3),(798,560,75,2),(179,123,76,3),(297,198,76,3),(362,238,76,3),(412,272,76,3),(418,276,76,3),(766,528,76,2),(58,40,77,3),(303,201,77,3),(681,445,77,3),(257,174,78,3),(391,258,78,3),(142,99,79,3),(253,172,79,3),(387,255,79,3),(581,378,79,3),(225,154,80,3),(635,412,80,3),(20,16,81,3),(149,103,81,3),(719,481,81,2),(754,516,81,2),(63,43,82,3),(95,67,82,3),(695,457,82,2),(795,557,83,2),(299,199,84,3),(616,400,84,3),(334,220,85,3),(365,240,85,3),(454,297,85,3),(460,301,85,2),(461,302,85,2),(463,303,85,2),(464,304,85,2),(466,305,85,2),(468,306,85,2),(470,307,85,2),(472,308,85,2),(474,309,85,2),(476,310,85,2),(477,311,85,2),(479,312,85,2),(481,313,85,2),(482,314,85,2),(483,315,85,2),(485,316,85,2),(487,317,85,2),(488,318,85,2),(489,319,85,2),(490,320,85,2),(491,321,85,2),(493,322,85,2),(495,323,85,2),(497,324,85,2),(498,325,85,2),(500,326,85,2),(501,327,85,2),(503,328,85,2),(505,329,85,2),(506,330,85,2),(507,331,85,2),(509,332,85,2),(510,333,85,2),(512,334,85,2),(513,335,85,2),(515,336,85,2),(517,337,85,2),(519,338,85,2),(521,339,85,2),(523,340,85,2),(524,341,85,2),(525,342,85,2),(526,343,85,2),(528,344,85,2),(529,345,85,2),(530,346,85,2),(531,347,85,2),(532,348,85,2),(534,349,85,2),(536,350,85,2),(538,351,85,2),(539,352,85,2),(541,353,85,2),(543,354,85,2),(545,355,85,2),(546,356,85,2),(548,357,85,2),(550,358,85,2),(551,359,85,2),(552,360,85,2),(553,361,85,2),(555,362,85,2),(557,363,85,2),(558,364,85,2),(560,365,85,2),(562,366,85,2),(564,367,85,2),(566,368,85,2),(568,369,85,2),(570,370,85,2),(571,371,85,2),(573,372,85,2),(574,373,85,2),(575,374,85,2),(576,375,85,2),(577,376,85,2),(579,377,85,2),(580,378,85,2),(582,379,85,2),(584,380,85,2),(586,381,85,2),(588,382,85,2),(590,383,85,2),(591,384,85,2),(593,385,85,2),(594,386,85,2),(596,387,85,2),(597,388,85,2),(599,389,85,2),(600,390,85,2),(601,391,85,2),(603,392,85,2),(604,393,85,2),(605,394,85,2),(607,395,85,2),(608,396,85,2),(610,397,85,2),(611,398,85,2),(613,399,85,2),(615,400,85,2),(617,401,85,2),(618,402,85,2),(620,403,85,2),(621,404,85,2),(623,405,85,2),(625,406,85,2),(626,407,85,2),(627,408,85,2),(629,409,85,2),(630,410,85,2),(632,411,85,2),(634,412,85,2),(636,413,85,2),(638,414,85,2),(639,415,85,2),(640,416,85,2),(641,417,85,2),(642,418,85,2),(643,419,85,2),(644,420,85,2),(645,421,85,2),(647,422,85,2),(648,422,85,3),(649,423,85,2),(651,424,85,2),(652,425,85,2),(654,426,85,2),(655,427,85,2),(656,428,85,2),(657,429,85,2),(658,430,85,2),(659,431,85,2),(661,432,85,2),(662,433,85,2),(663,434,85,2),(664,435,85,2),(665,436,85,2),(666,437,85,2),(668,438,85,2),(670,439,85,2),(672,440,85,2),(674,441,85,2),(676,442,85,2),(677,443,85,2),(679,444,85,2),(680,445,85,2),(682,446,85,2),(683,447,85,2),(685,448,85,2),(686,449,85,2),(687,450,85,2),(128,90,86,3),(81,56,87,3),(432,284,87,3),(205,141,88,3),(377,248,88,3),(198,136,89,3),(283,190,89,3),(471,307,89,3),(469,306,90,3),(237,162,91,3),(437,287,91,3),(473,308,91,3),(218,149,92,3),(696,458,92,2),(726,488,92,2),(744,506,92,2),(30,22,93,3),(295,197,93,3),(452,296,93,3),(43,30,94,3),(40,28,95,3),(308,204,95,3),(328,217,95,3),(441,290,95,3),(527,343,95,3),(606,394,95,3),(467,305,96,3),(520,338,96,3),(76,53,97,3),(140,98,97,3),(159,109,97,3),(478,311,97,3),(410,271,98,3),(669,438,98,3),(723,485,98,2),(761,523,98,2),(109,77,99,3),(393,259,99,3),(549,357,99,3),(563,366,99,3),(97,68,100,3),(326,216,100,3),(408,270,100,3),(422,278,100,3),(673,440,100,3),(5,4,101,3),(313,207,101,3),(332,219,101,3),(731,493,107,2),(759,521,107,2),(709,471,109,2),(750,512,109,2),(717,479,110,2),(753,515,110,2),(780,542,110,2),(721,483,112,2),(755,517,112,2),(767,529,113,2),(730,492,117,2),(746,508,117,2),(793,555,118,2),(778,540,119,2),(801,563,121,2),(772,534,124,2),(722,484,126,2),(742,504,126,2),(727,489,134,2),(757,519,134,2),(763,525,134,2),(775,537,139,2),(809,571,141,2),(811,573,142,2),(786,548,146,2),(712,474,147,2),(760,522,147,2),(796,558,151,2),(771,533,152,2),(706,468,154,2),(734,496,154,2),(781,543,154,2),(702,464,158,2),(732,494,158,2),(779,541,159,2),(783,545,161,2),(803,565,162,2),(703,465,164,2),(747,509,164,2),(810,572,164,2),(1,1,166,2),(2,2,166,2),(3,3,166,2),(4,4,166,2),(6,5,166,2),(7,6,166,2),(8,7,166,2),(9,8,166,2),(10,9,166,2),(11,10,166,2),(12,11,166,2),(13,12,166,2),(15,13,166,2),(17,14,166,2),(18,15,166,2),(19,16,166,2),(21,17,166,2),(23,18,166,2),(24,19,166,2),(26,20,166,2),(28,21,166,2),(29,22,166,2),(31,23,166,2),(33,24,166,2),(34,25,166,2),(35,26,166,2),(37,27,166,2),(39,28,166,2),(41,29,166,2),(42,30,166,2),(44,31,166,2),(45,32,166,2),(46,33,166,2),(47,34,166,2),(49,35,166,2),(50,36,166,2),(51,37,166,2),(53,38,166,2),(55,39,166,2),(57,40,166,2),(59,41,166,2),(60,42,166,2),(62,43,166,2),(64,44,166,2),(65,45,166,2),(67,46,166,2),(68,47,166,2),(69,48,166,2),(70,49,166,2),(71,50,166,2),(72,51,166,2),(73,52,166,2),(75,53,166,2),(77,54,166,2),(79,55,166,2),(80,56,166,2),(82,57,166,2),(83,58,166,2),(85,59,166,2),(86,60,166,2),(87,61,166,2),(88,62,166,2),(89,63,166,2),(90,64,166,2),(91,65,166,2),(93,66,166,2),(94,67,166,2),(96,68,166,2),(98,69,166,2),(99,70,166,2),(100,71,166,2),(101,72,166,2),(102,73,166,2),(104,74,166,2),(105,75,166,2),(107,76,166,2),(108,77,166,2),(110,78,166,2),(111,79,166,2),(112,80,166,2),(113,81,166,2),(114,82,166,2),(116,83,166,2),(118,84,166,2),(119,85,166,2),(120,86,166,2),(122,87,166,2),(123,88,166,2),(125,89,166,2),(127,90,166,2),(129,91,166,2),(130,92,166,2),(131,93,166,2),(133,94,166,2),(135,95,166,2),(137,96,166,2),(138,97,166,2),(139,98,166,2),(141,99,166,2),(143,100,166,2),(145,101,166,2),(147,102,166,2),(148,103,166,2),(150,104,166,2),(152,105,166,2),(153,106,166,2),(155,107,166,2),(157,108,166,2),(158,109,166,2),(160,110,166,2),(162,111,166,2),(163,112,166,2),(164,113,166,2),(166,114,166,2),(167,115,166,2),(168,116,166,2),(169,117,166,2),(171,118,166,2),(172,119,166,2),(173,120,166,2),(175,121,166,2),(176,122,166,2),(178,123,166,2),(180,124,166,2),(182,125,166,2),(183,126,166,2),(185,127,166,2),(187,128,166,2),(188,129,166,2),(190,130,166,2),(191,131,166,2),(192,132,166,2),(193,133,166,2),(194,134,166,2),(196,135,166,2),(197,136,166,2),(199,137,166,2),(200,138,166,2),(201,139,166,2),(203,140,166,2),(204,141,166,2),(206,142,166,2),(208,143,166,2),(209,144,166,2),(211,145,166,2),(213,146,166,2),(214,147,166,2),(215,148,166,2),(217,149,166,2),(219,150,166,2),(770,532,171,2),(707,469,173,2),(749,511,173,2),(791,553,173,2),(705,467,174,2),(748,510,174,2),(768,530,177,2),(782,544,180,2),(784,546,183,2),(711,473,185,2),(737,499,185,2),(797,559,188,2),(715,477,190,2),(752,514,190,2),(800,562,197,2),(776,538,198,2),(808,570,199,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -107,7 +107,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_address` WRITE; /*!40000 ALTER TABLE `civicrm_address` DISABLE KEYS */; -INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES (1,54,1,1,0,'829U Second Path N',829,'U',NULL,'Second','Path','N',NULL,NULL,NULL,NULL,'Buckman',1,1022,NULL,'56317',NULL,1228,46.061307,-94.208731,0,NULL,NULL,NULL),(2,103,1,1,0,'316T Lincoln Pl NE',316,'T',NULL,'Lincoln','Pl','NE',NULL,NULL,NULL,NULL,'Opelika',1,1000,NULL,'36802',NULL,1228,32.578185,-85.349003,0,NULL,NULL,NULL),(3,195,1,1,0,'957G Beech Way NE',957,'G',NULL,'Beech','Way','NE',NULL,NULL,NULL,NULL,'Parlin',1,1029,NULL,'08859',NULL,1228,40.461851,-74.30343,0,NULL,NULL,NULL),(4,91,1,1,0,'476A Pine Ave SW',476,'A',NULL,'Pine','Ave','SW',NULL,NULL,NULL,NULL,'Florissant',1,1024,NULL,'63034',NULL,1228,38.832863,-90.29051,0,NULL,NULL,NULL),(5,172,1,1,0,'889U States Ln N',889,'U',NULL,'States','Ln','N',NULL,NULL,NULL,NULL,'Modesto',1,1004,NULL,'95357',NULL,1228,37.667196,-120.9061,0,NULL,NULL,NULL),(6,147,1,1,0,'458B Martin Luther King Rd SW',458,'B',NULL,'Martin Luther King','Rd','SW',NULL,NULL,NULL,NULL,'Huntington',1,1047,NULL,'25702',NULL,1228,38.431116,-82.37019,0,NULL,NULL,NULL),(7,113,1,1,0,'680Y El Camino Way S',680,'Y',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Salem',1,1036,NULL,'97313',NULL,1228,44.984941,-122.998756,0,NULL,NULL,NULL),(8,59,1,1,0,'699C States Blvd SW',699,'C',NULL,'States','Blvd','SW',NULL,NULL,NULL,NULL,'Union',1,1012,NULL,'60180',NULL,1228,42.229437,-88.52606,0,NULL,NULL,NULL),(9,117,1,1,0,'744C Second Ave NE',744,'C',NULL,'Second','Ave','NE',NULL,NULL,NULL,NULL,'Easton',1,1022,NULL,'56025',NULL,1228,43.764111,-93.90534,0,NULL,NULL,NULL),(10,199,1,1,0,'469U College Pl SE',469,'U',NULL,'College','Pl','SE',NULL,NULL,NULL,NULL,'Parma',1,1024,NULL,'63870',NULL,1228,36.611902,-89.83489,0,NULL,NULL,NULL),(11,125,1,1,0,'994P Bay Ln E',994,'P',NULL,'Bay','Ln','E',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77059',NULL,1228,29.601776,-95.11734,0,NULL,NULL,NULL),(12,67,1,1,0,'414E Main Rd SW',414,'E',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Port Republic',1,1045,NULL,'24471',NULL,1228,38.310311,-78.80409,0,NULL,NULL,NULL),(13,157,1,1,0,'838N Main Dr SE',838,'N',NULL,'Main','Dr','SE',NULL,NULL,NULL,NULL,'Lake Toxaway',1,1032,NULL,'28747',NULL,1228,35.146004,-82.92258,0,NULL,NULL,NULL),(14,6,1,1,0,'267Z Green Ave S',267,'Z',NULL,'Green','Ave','S',NULL,NULL,NULL,NULL,'Bucklin',1,1015,NULL,'67834',NULL,1228,37.523175,-99.63435,0,NULL,NULL,NULL),(15,94,1,1,0,'1V Maple St SE',1,'V',NULL,'Maple','St','SE',NULL,NULL,NULL,NULL,'Umbarger',1,1042,NULL,'79091',NULL,1228,34.938094,-102.11087,0,NULL,NULL,NULL),(16,149,1,1,0,'881Z El Camino Ave N',881,'Z',NULL,'El Camino','Ave','N',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'30360',NULL,1228,33.934536,-84.27215,0,NULL,NULL,NULL),(17,57,1,1,0,'143G Second Ln SE',143,'G',NULL,'Second','Ln','SE',NULL,NULL,NULL,NULL,'Stratford',1,1006,NULL,'06497',NULL,1228,41.207146,-73.130503,0,NULL,NULL,NULL),(18,112,1,1,0,'284C Woodbridge Rd N',284,'C',NULL,'Woodbridge','Rd','N',NULL,NULL,NULL,NULL,'Arecibo',1,1056,NULL,'00612',NULL,1228,18.449732,-66.69879,0,NULL,NULL,NULL),(19,139,1,1,0,'650T Maple Ln N',650,'T',NULL,'Maple','Ln','N',NULL,NULL,NULL,NULL,'Brownstown',1,1046,NULL,'98920',NULL,1228,46.56451,-120.694658,0,NULL,NULL,NULL),(20,58,1,1,0,'726P Jackson Rd NW',726,'P',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Hopland',1,1004,NULL,'95449',NULL,1228,38.955142,-123.08125,0,NULL,NULL,NULL),(21,18,1,1,0,'728J States Path SW',728,'J',NULL,'States','Path','SW',NULL,NULL,NULL,NULL,'Arley',1,1000,NULL,'35541',NULL,1228,34.059527,-87.18344,0,NULL,NULL,NULL),(22,161,1,1,0,'820R Jackson Pl E',820,'R',NULL,'Jackson','Pl','E',NULL,NULL,NULL,NULL,'Waxhaw',1,1032,NULL,'28173',NULL,1228,34.929433,-80.73061,0,NULL,NULL,NULL),(23,98,1,1,0,'806M Second Blvd N',806,'M',NULL,'Second','Blvd','N',NULL,NULL,NULL,NULL,'Humarock',1,1020,NULL,'02047',NULL,1228,42.142836,-70.69353,0,NULL,NULL,NULL),(24,140,1,1,0,'655Y Second Way S',655,'Y',NULL,'Second','Way','S',NULL,NULL,NULL,NULL,'Minisink Hills',1,1037,NULL,'18341',NULL,1228,40.999857,-75.13254,0,NULL,NULL,NULL),(25,47,1,1,0,'248G Bay Way E',248,'G',NULL,'Bay','Way','E',NULL,NULL,NULL,NULL,'Woody',1,1004,NULL,'93287',NULL,1228,35.702936,-118.8844,0,NULL,NULL,NULL),(26,65,1,1,0,'141M Second Way N',141,'M',NULL,'Second','Way','N',NULL,NULL,NULL,NULL,'Walnut Creek',1,1004,NULL,'94596',NULL,1228,37.905924,-122.05858,0,NULL,NULL,NULL),(27,44,1,1,0,'162N Cadell Rd S',162,'N',NULL,'Cadell','Rd','S',NULL,NULL,NULL,NULL,'Alakanuk',1,1001,NULL,'99554',NULL,1228,62.683391,-164.65455,0,NULL,NULL,NULL),(28,185,1,1,0,'362N Main Rd SW',362,'N',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Hatillo',1,1056,NULL,'00659',NULL,1228,18.432956,-66.80039,0,NULL,NULL,NULL),(29,28,1,1,0,'955R Jackson Dr NW',955,'R',NULL,'Jackson','Dr','NW',NULL,NULL,NULL,NULL,'Bloomer',1,1048,NULL,'54724',NULL,1228,45.101683,-91.48415,0,NULL,NULL,NULL),(30,119,1,1,0,'967O Northpoint Ln SW',967,'O',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Garner',1,1032,NULL,'27529',NULL,1228,35.679194,-78.60246,0,NULL,NULL,NULL),(31,123,1,1,0,'238I Main Ave W',238,'I',NULL,'Main','Ave','W',NULL,NULL,NULL,NULL,'Manchester',1,1028,NULL,'03111',NULL,1228,42.952124,-71.653939,0,NULL,NULL,NULL),(32,163,1,1,0,'432Q Dowlen Path SE',432,'Q',NULL,'Dowlen','Path','SE',NULL,NULL,NULL,NULL,'Cottageville',1,1047,NULL,'25239',NULL,1228,38.851872,-81.84501,0,NULL,NULL,NULL),(33,51,1,1,0,'154U Main Blvd E',154,'U',NULL,'Main','Blvd','E',NULL,NULL,NULL,NULL,'Heron',1,1025,NULL,'59844',NULL,1228,48.03036,-115.96844,0,NULL,NULL,NULL),(34,76,1,1,0,'654F Pine Rd NE',654,'F',NULL,'Pine','Rd','NE',NULL,NULL,NULL,NULL,'Washington',1,1050,NULL,'20403',NULL,1228,38.893311,-77.014647,0,NULL,NULL,NULL),(35,153,1,1,0,'911M Beech Ln NE',911,'M',NULL,'Beech','Ln','NE',NULL,NULL,NULL,NULL,'Lacona',1,1031,NULL,'13083',NULL,1228,43.647881,-76.0167,0,NULL,NULL,NULL),(36,126,1,1,0,'667N Lincoln Dr W',667,'N',NULL,'Lincoln','Dr','W',NULL,NULL,NULL,NULL,'Holmes',1,1037,NULL,'19043',NULL,1228,39.899812,-75.30893,0,NULL,NULL,NULL),(37,155,1,1,0,'124Q Caulder St E',124,'Q',NULL,'Caulder','St','E',NULL,NULL,NULL,NULL,'McDonald',1,1034,NULL,'44437',NULL,1228,41.159574,-80.73083,0,NULL,NULL,NULL),(38,55,1,1,0,'378T Cadell Ave NW',378,'T',NULL,'Cadell','Ave','NW',NULL,NULL,NULL,NULL,'The Villages',1,1008,NULL,'32162',NULL,1228,28.945246,-81.987609,0,NULL,NULL,NULL),(39,146,1,1,0,'90K Jackson Rd W',90,'K',NULL,'Jackson','Rd','W',NULL,NULL,NULL,NULL,'Kit Carson',1,1004,NULL,'95644',NULL,1228,38.463282,-120.550021,0,NULL,NULL,NULL),(40,5,1,1,0,'736H Maple Way N',736,'H',NULL,'Maple','Way','N',NULL,NULL,NULL,NULL,'Chebanse',1,1012,NULL,'60922',NULL,1228,41.005603,-87.90649,0,NULL,NULL,NULL),(41,118,1,1,0,'35Y Cadell Dr NE',35,'Y',NULL,'Cadell','Dr','NE',NULL,NULL,NULL,NULL,'Wyaconda',1,1024,NULL,'63474',NULL,1228,40.354422,-91.91063,0,NULL,NULL,NULL),(42,145,1,1,0,'762M Bay Rd NE',762,'M',NULL,'Bay','Rd','NE',NULL,NULL,NULL,NULL,'Weir',1,1015,NULL,'66781',NULL,1228,37.300262,-94.75259,0,NULL,NULL,NULL),(43,13,1,1,0,'716F Maple Way NE',716,'F',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Seelyville',1,1013,NULL,'47878',NULL,1228,39.492838,-87.266549,0,NULL,NULL,NULL),(44,175,1,1,0,'443W Pine Ln E',443,'W',NULL,'Pine','Ln','E',NULL,NULL,NULL,NULL,'Pennington',1,1042,NULL,'75856',NULL,1228,31.21349,-95.23475,0,NULL,NULL,NULL),(45,160,1,1,0,'832G Bay Ln S',832,'G',NULL,'Bay','Ln','S',NULL,NULL,NULL,NULL,'Maida',1,1033,NULL,'58255',NULL,1228,48.999101,-98.35241,0,NULL,NULL,NULL),(46,156,1,1,0,'163B Van Ness Blvd N',163,'B',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Cloutierville',1,1017,NULL,'71416',NULL,1228,31.541077,-92.89842,0,NULL,NULL,NULL),(47,166,1,1,0,'390M Main Rd SW',390,'M',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Aptos',1,1004,NULL,'95001',NULL,1228,37.05297,-121.949418,0,NULL,NULL,NULL),(48,162,1,1,0,'123M Bay Rd NW',123,'M',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Bowerston',1,1034,NULL,'44695',NULL,1228,40.433246,-81.18764,0,NULL,NULL,NULL),(49,136,1,1,0,'835I Main Path SE',835,'I',NULL,'Main','Path','SE',NULL,NULL,NULL,NULL,'Milford',1,1021,NULL,'48381',NULL,1228,42.571402,-83.59318,0,NULL,NULL,NULL),(50,96,1,1,0,'392R Cadell Dr E',392,'R',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Warren',1,1037,NULL,'16367',NULL,1228,41.811682,-79.264322,0,NULL,NULL,NULL),(51,33,1,1,0,'813B Martin Luther King Dr SE',813,'B',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Bensenville',1,1012,NULL,'60106',NULL,1228,41.956479,-87.95117,0,NULL,NULL,NULL),(52,158,1,1,0,'175L Dowlen Way SE',175,'L',NULL,'Dowlen','Way','SE',NULL,NULL,NULL,NULL,'Proctor',1,1047,NULL,'26055',NULL,1228,39.768143,-80.79867,0,NULL,NULL,NULL),(53,102,1,1,0,'857L Maple St NE',857,'L',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Trimont',1,1022,NULL,'56176',NULL,1228,43.771341,-94.72593,0,NULL,NULL,NULL),(54,79,1,1,0,'655T Second Way NE',655,'T',NULL,'Second','Way','NE',NULL,NULL,NULL,NULL,'Hughesville',1,1019,NULL,'20637',NULL,1228,38.523408,-76.75435,0,NULL,NULL,NULL),(55,148,1,1,0,'412O El Camino Ln N',412,'O',NULL,'El Camino','Ln','N',NULL,NULL,NULL,NULL,'Bock',1,1022,NULL,'56313',NULL,1228,45.785883,-93.55343,0,NULL,NULL,NULL),(56,23,1,1,0,'605T Pine Path S',605,'T',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Nursery',1,1042,NULL,'77976',NULL,1228,28.954273,-97.090604,0,NULL,NULL,NULL),(57,180,1,1,0,'12K Northpoint Dr W',12,'K',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Barstow',1,1004,NULL,'92311',NULL,1228,34.894181,-117.03636,0,NULL,NULL,NULL),(58,201,1,1,0,'638H Woodbridge St SW',638,'H',NULL,'Woodbridge','St','SW',NULL,NULL,NULL,NULL,'Urbana',1,1014,NULL,'52345',NULL,1228,42.222388,-91.87908,0,NULL,NULL,NULL),(59,25,1,1,0,'19Z Green Ave NW',19,'Z',NULL,'Green','Ave','NW',NULL,NULL,NULL,NULL,'North Brunswick',1,1029,NULL,'08902',NULL,1228,40.453131,-74.48287,0,NULL,NULL,NULL),(60,95,1,1,0,'682O Bay Pl NW',682,'O',NULL,'Bay','Pl','NW',NULL,NULL,NULL,NULL,'Williamston',1,1021,NULL,'48895',NULL,1228,42.68669,-84.27844,0,NULL,NULL,NULL),(61,130,1,1,0,'941F Green Pl SW',941,'F',NULL,'Green','Pl','SW',NULL,NULL,NULL,NULL,'Hernando',1,1023,NULL,'38632',NULL,1228,34.811777,-90.01917,0,NULL,NULL,NULL),(62,100,1,1,0,'630Q Martin Luther King Blvd NE',630,'Q',NULL,'Martin Luther King','Blvd','NE',NULL,NULL,NULL,NULL,'Millbury',1,1020,NULL,'01527',NULL,1228,42.196144,-71.76272,0,NULL,NULL,NULL),(63,89,1,1,0,'491Y Beech Dr N',491,'Y',NULL,'Beech','Dr','N',NULL,NULL,NULL,NULL,'Diamond Springs',1,1004,NULL,'95619',NULL,1228,38.689067,-120.82071,0,NULL,NULL,NULL),(64,193,1,1,0,'139P Main Pl NW',139,'P',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Wadesville',1,1013,NULL,'47638',NULL,1228,38.081681,-87.78055,0,NULL,NULL,NULL),(65,31,1,1,0,'740V Second Pl SE',740,'V',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'North Augusta',1,1039,NULL,'29861',NULL,1228,33.53773,-81.599891,0,NULL,NULL,NULL),(66,10,3,1,0,'469C Martin Luther King Blvd E',469,'C',NULL,'Martin Luther King','Blvd','E',NULL,'Subscriptions Dept',NULL,NULL,'La Fayette',1,1031,NULL,'13084',NULL,1228,42.883503,-76.10983,0,NULL,NULL,NULL),(67,29,2,1,0,'469C Martin Luther King Blvd E',469,'C',NULL,'Martin Luther King','Blvd','E',NULL,'Subscriptions Dept',NULL,NULL,'La Fayette',1,1031,NULL,'13084',NULL,1228,42.883503,-76.10983,0,NULL,NULL,66),(68,121,3,1,0,'429M Northpoint St W',429,'M',NULL,'Northpoint','St','W',NULL,'Mailstop 101',NULL,NULL,'Concord',1,1004,NULL,'94520',NULL,1228,37.986321,-122.03988,0,NULL,NULL,NULL),(69,106,3,1,0,'434W El Camino Path N',434,'W',NULL,'El Camino','Path','N',NULL,'Editorial Dept',NULL,NULL,'Hoopeston',1,1012,NULL,'60942',NULL,1228,40.465869,-87.66766,0,NULL,NULL,NULL),(70,72,2,1,0,'434W El Camino Path N',434,'W',NULL,'El Camino','Path','N',NULL,'Editorial Dept',NULL,NULL,'Hoopeston',1,1012,NULL,'60942',NULL,1228,40.465869,-87.66766,0,NULL,NULL,69),(71,150,3,1,0,'15G Van Ness Path NW',15,'G',NULL,'Van Ness','Path','NW',NULL,'Payables Dept.',NULL,NULL,'Pasadena',1,1019,NULL,'21123',NULL,1228,38.974203,-76.594942,0,NULL,NULL,NULL),(72,2,3,1,0,'233X States Path NW',233,'X',NULL,'States','Path','NW',NULL,'Disbursements',NULL,NULL,'Friendship',1,1019,NULL,'20758',NULL,1228,38.731822,-76.59378,0,NULL,NULL,NULL),(73,167,3,1,0,'557F Northpoint Blvd NW',557,'F',NULL,'Northpoint','Blvd','NW',NULL,'Urgent',NULL,NULL,'Colome',1,1040,NULL,'57528',NULL,1228,43.205207,-99.76123,0,NULL,NULL,NULL),(74,182,3,1,0,'148Q Cadell Ln SE',148,'Q',NULL,'Cadell','Ln','SE',NULL,'Community Relations',NULL,NULL,'Minden',1,1042,NULL,'75680',NULL,1228,32.00923,-94.71766,0,NULL,NULL,NULL),(75,200,3,1,0,'712X Maple Rd SW',712,'X',NULL,'Maple','Rd','SW',NULL,'Attn: Accounting',NULL,NULL,'Charleston',1,1039,NULL,'29415',NULL,1228,32.84885,-79.85773,0,NULL,NULL,NULL),(76,189,2,1,0,'712X Maple Rd SW',712,'X',NULL,'Maple','Rd','SW',NULL,'Attn: Accounting',NULL,NULL,'Charleston',1,1039,NULL,'29415',NULL,1228,32.84885,-79.85773,0,NULL,NULL,75),(77,52,3,1,0,'934P College Ln S',934,'P',NULL,'College','Ln','S',NULL,'Payables Dept.',NULL,NULL,'Milwaukee',1,1048,NULL,'53219',NULL,1228,42.996614,-87.99213,0,NULL,NULL,NULL),(78,144,3,1,0,'753S Caulder Pl SW',753,'S',NULL,'Caulder','Pl','SW',NULL,'Editorial Dept',NULL,NULL,'Shenandoah',1,1014,NULL,'51603',NULL,1228,40.738309,-95.149305,0,NULL,NULL,NULL),(79,91,2,0,0,'753S Caulder Pl SW',753,'S',NULL,'Caulder','Pl','SW',NULL,'Editorial Dept',NULL,NULL,'Shenandoah',1,1014,NULL,'51603',NULL,1228,40.738309,-95.149305,0,NULL,NULL,78),(80,69,3,1,0,'479A College Blvd NE',479,'A',NULL,'College','Blvd','NE',NULL,'Donor Relations',NULL,NULL,'Saint Edward',1,1026,NULL,'68660',NULL,1228,41.574309,-97.86898,0,NULL,NULL,NULL),(81,9,2,1,0,'479A College Blvd NE',479,'A',NULL,'College','Blvd','NE',NULL,'Donor Relations',NULL,NULL,'Saint Edward',1,1026,NULL,'68660',NULL,1228,41.574309,-97.86898,0,NULL,NULL,80),(82,122,3,1,0,'763E Dowlen Blvd SE',763,'E',NULL,'Dowlen','Blvd','SE',NULL,'Attn: Accounting',NULL,NULL,'Oscar',1,1035,NULL,'73561',NULL,1228,34.023916,-97.64801,0,NULL,NULL,NULL),(83,164,2,1,0,'763E Dowlen Blvd SE',763,'E',NULL,'Dowlen','Blvd','SE',NULL,'Attn: Accounting',NULL,NULL,'Oscar',1,1035,NULL,'73561',NULL,1228,34.023916,-97.64801,0,NULL,NULL,82),(84,101,3,1,0,'828Q Cadell Dr S',828,'Q',NULL,'Cadell','Dr','S',NULL,'Community Relations',NULL,NULL,'Hartford',1,1006,NULL,'06104',NULL,1228,41.791776,-72.718832,0,NULL,NULL,NULL),(85,184,2,1,0,'828Q Cadell Dr S',828,'Q',NULL,'Cadell','Dr','S',NULL,'Community Relations',NULL,NULL,'Hartford',1,1006,NULL,'06104',NULL,1228,41.791776,-72.718832,0,NULL,NULL,84),(86,50,3,1,0,'232U Green Ave SW',232,'U',NULL,'Green','Ave','SW',NULL,'Mailstop 101',NULL,NULL,'Carmel',1,1013,NULL,'46032',NULL,1228,39.970241,-86.15416,0,NULL,NULL,NULL),(87,176,3,1,0,'172F Van Ness Rd E',172,'F',NULL,'Van Ness','Rd','E',NULL,'Churchgate',NULL,NULL,'Butte',1,1025,NULL,'59701',NULL,1228,45.996957,-112.51279,0,NULL,NULL,NULL),(88,16,3,1,0,'998G Van Ness Ln NW',998,'G',NULL,'Van Ness','Ln','NW',NULL,'Attn: Accounting',NULL,NULL,'Santa Fe',1,1030,NULL,'87501',NULL,1228,35.755312,-105.99936,0,NULL,NULL,NULL),(89,49,3,1,0,'420N Main Ave N',420,'N',NULL,'Main','Ave','N',NULL,'Editorial Dept',NULL,NULL,'Truro',1,1014,NULL,'50257',NULL,1228,41.204733,-93.84553,0,NULL,NULL,NULL),(90,112,2,0,0,'420N Main Ave N',420,'N',NULL,'Main','Ave','N',NULL,'Editorial Dept',NULL,NULL,'Truro',1,1014,NULL,'50257',NULL,1228,41.204733,-93.84553,0,NULL,NULL,89),(91,152,3,1,0,'482A Dowlen Way NW',482,'A',NULL,'Dowlen','Way','NW',NULL,'Payables Dept.',NULL,NULL,'Suttons Bay',1,1021,NULL,'49682',NULL,1228,44.993085,-85.63635,0,NULL,NULL,NULL),(92,129,2,1,0,'482A Dowlen Way NW',482,'A',NULL,'Dowlen','Way','NW',NULL,'Payables Dept.',NULL,NULL,'Suttons Bay',1,1021,NULL,'49682',NULL,1228,44.993085,-85.63635,0,NULL,NULL,91),(93,27,3,1,0,'170H Lincoln Rd S',170,'H',NULL,'Lincoln','Rd','S',NULL,'Churchgate',NULL,NULL,'Oroville',1,1004,NULL,'95966',NULL,1228,39.491076,-121.49468,0,NULL,NULL,NULL),(94,19,2,1,0,'170H Lincoln Rd S',170,'H',NULL,'Lincoln','Rd','S',NULL,'Churchgate',NULL,NULL,'Oroville',1,1004,NULL,'95966',NULL,1228,39.491076,-121.49468,0,NULL,NULL,93),(95,83,3,1,0,'636V Pine Path S',636,'V',NULL,'Pine','Path','S',NULL,'Payables Dept.',NULL,NULL,'Granger',1,1024,NULL,'63442',NULL,1228,40.453333,-92.1474,0,NULL,NULL,NULL),(96,135,2,1,0,'636V Pine Path S',636,'V',NULL,'Pine','Path','S',NULL,'Payables Dept.',NULL,NULL,'Granger',1,1024,NULL,'63442',NULL,1228,40.453333,-92.1474,0,NULL,NULL,95),(97,75,1,1,0,'163B Van Ness Blvd N',163,'B',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Cloutierville',1,1017,NULL,'71416',NULL,1228,31.541077,-92.89842,0,NULL,NULL,46),(98,105,1,1,0,'163B Van Ness Blvd N',163,'B',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Cloutierville',1,1017,NULL,'71416',NULL,1228,31.541077,-92.89842,0,NULL,NULL,46),(99,71,1,1,0,'163B Van Ness Blvd N',163,'B',NULL,'Van Ness','Blvd','N',NULL,NULL,NULL,NULL,'Cloutierville',1,1017,NULL,'71416',NULL,1228,31.541077,-92.89842,0,NULL,NULL,46),(100,160,1,0,0,'571O Caulder Dr S',571,'O',NULL,'Caulder','Dr','S',NULL,NULL,NULL,NULL,'Fort Collins',1,1005,NULL,'80521',NULL,1228,40.586282,-105.10494,0,NULL,NULL,NULL),(101,88,1,1,0,'390M Main Rd SW',390,'M',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Aptos',1,1004,NULL,'95001',NULL,1228,37.05297,-121.949418,0,NULL,NULL,47),(102,34,1,1,0,'390M Main Rd SW',390,'M',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Aptos',1,1004,NULL,'95001',NULL,1228,37.05297,-121.949418,0,NULL,NULL,47),(103,90,1,1,0,'390M Main Rd SW',390,'M',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Aptos',1,1004,NULL,'95001',NULL,1228,37.05297,-121.949418,0,NULL,NULL,47),(104,154,1,1,0,'390M Main Rd SW',390,'M',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Aptos',1,1004,NULL,'95001',NULL,1228,37.05297,-121.949418,0,NULL,NULL,47),(105,64,1,1,0,'123M Bay Rd NW',123,'M',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Bowerston',1,1034,NULL,'44695',NULL,1228,40.433246,-81.18764,0,NULL,NULL,48),(106,82,1,1,0,'123M Bay Rd NW',123,'M',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Bowerston',1,1034,NULL,'44695',NULL,1228,40.433246,-81.18764,0,NULL,NULL,48),(107,108,1,1,0,'123M Bay Rd NW',123,'M',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Bowerston',1,1034,NULL,'44695',NULL,1228,40.433246,-81.18764,0,NULL,NULL,48),(108,74,1,1,0,'716K Main Ln W',716,'K',NULL,'Main','Ln','W',NULL,NULL,NULL,NULL,'Fort Lauderdale',1,1008,NULL,'33329',NULL,1228,26.145724,-80.448254,0,NULL,NULL,NULL),(109,134,1,1,0,'835I Main Path SE',835,'I',NULL,'Main','Path','SE',NULL,NULL,NULL,NULL,'Milford',1,1021,NULL,'48381',NULL,1228,42.571402,-83.59318,0,NULL,NULL,49),(110,11,1,1,0,'835I Main Path SE',835,'I',NULL,'Main','Path','SE',NULL,NULL,NULL,NULL,'Milford',1,1021,NULL,'48381',NULL,1228,42.571402,-83.59318,0,NULL,NULL,49),(111,42,1,1,0,'835I Main Path SE',835,'I',NULL,'Main','Path','SE',NULL,NULL,NULL,NULL,'Milford',1,1021,NULL,'48381',NULL,1228,42.571402,-83.59318,0,NULL,NULL,49),(112,35,1,1,0,'835I Main Path SE',835,'I',NULL,'Main','Path','SE',NULL,NULL,NULL,NULL,'Milford',1,1021,NULL,'48381',NULL,1228,42.571402,-83.59318,0,NULL,NULL,49),(113,46,1,1,0,'392R Cadell Dr E',392,'R',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Warren',1,1037,NULL,'16367',NULL,1228,41.811682,-79.264322,0,NULL,NULL,50),(114,197,1,1,0,'392R Cadell Dr E',392,'R',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Warren',1,1037,NULL,'16367',NULL,1228,41.811682,-79.264322,0,NULL,NULL,50),(115,9,1,0,0,'392R Cadell Dr E',392,'R',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Warren',1,1037,NULL,'16367',NULL,1228,41.811682,-79.264322,0,NULL,NULL,50),(116,62,1,1,0,'392R Cadell Dr E',392,'R',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Warren',1,1037,NULL,'16367',NULL,1228,41.811682,-79.264322,0,NULL,NULL,50),(117,178,1,1,0,'813B Martin Luther King Dr SE',813,'B',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Bensenville',1,1012,NULL,'60106',NULL,1228,41.956479,-87.95117,0,NULL,NULL,51),(118,45,1,1,0,'813B Martin Luther King Dr SE',813,'B',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Bensenville',1,1012,NULL,'60106',NULL,1228,41.956479,-87.95117,0,NULL,NULL,51),(119,142,1,1,0,'813B Martin Luther King Dr SE',813,'B',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Bensenville',1,1012,NULL,'60106',NULL,1228,41.956479,-87.95117,0,NULL,NULL,51),(120,20,1,1,0,'813B Martin Luther King Dr SE',813,'B',NULL,'Martin Luther King','Dr','SE',NULL,NULL,NULL,NULL,'Bensenville',1,1012,NULL,'60106',NULL,1228,41.956479,-87.95117,0,NULL,NULL,51),(121,170,1,1,0,'175L Dowlen Way SE',175,'L',NULL,'Dowlen','Way','SE',NULL,NULL,NULL,NULL,'Proctor',1,1047,NULL,'26055',NULL,1228,39.768143,-80.79867,0,NULL,NULL,52),(122,141,1,1,0,'175L Dowlen Way SE',175,'L',NULL,'Dowlen','Way','SE',NULL,NULL,NULL,NULL,'Proctor',1,1047,NULL,'26055',NULL,1228,39.768143,-80.79867,0,NULL,NULL,52),(123,190,1,1,0,'175L Dowlen Way SE',175,'L',NULL,'Dowlen','Way','SE',NULL,NULL,NULL,NULL,'Proctor',1,1047,NULL,'26055',NULL,1228,39.768143,-80.79867,0,NULL,NULL,52),(124,26,1,1,0,'175L Dowlen Way SE',175,'L',NULL,'Dowlen','Way','SE',NULL,NULL,NULL,NULL,'Proctor',1,1047,NULL,'26055',NULL,1228,39.768143,-80.79867,0,NULL,NULL,52),(125,120,1,1,0,'857L Maple St NE',857,'L',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Trimont',1,1022,NULL,'56176',NULL,1228,43.771341,-94.72593,0,NULL,NULL,53),(126,29,1,0,0,'857L Maple St NE',857,'L',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Trimont',1,1022,NULL,'56176',NULL,1228,43.771341,-94.72593,0,NULL,NULL,53),(127,109,1,1,0,'857L Maple St NE',857,'L',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Trimont',1,1022,NULL,'56176',NULL,1228,43.771341,-94.72593,0,NULL,NULL,53),(128,99,1,1,0,'857L Maple St NE',857,'L',NULL,'Maple','St','NE',NULL,NULL,NULL,NULL,'Trimont',1,1022,NULL,'56176',NULL,1228,43.771341,-94.72593,0,NULL,NULL,53),(129,77,1,1,0,'655T Second Way NE',655,'T',NULL,'Second','Way','NE',NULL,NULL,NULL,NULL,'Hughesville',1,1019,NULL,'20637',NULL,1228,38.523408,-76.75435,0,NULL,NULL,54),(130,107,1,1,0,'655T Second Way NE',655,'T',NULL,'Second','Way','NE',NULL,NULL,NULL,NULL,'Hughesville',1,1019,NULL,'20637',NULL,1228,38.523408,-76.75435,0,NULL,NULL,54),(131,78,1,1,0,'655T Second Way NE',655,'T',NULL,'Second','Way','NE',NULL,NULL,NULL,NULL,'Hughesville',1,1019,NULL,'20637',NULL,1228,38.523408,-76.75435,0,NULL,NULL,54),(132,41,1,1,0,'604Y Martin Luther King Rd E',604,'Y',NULL,'Martin Luther King','Rd','E',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'30378',NULL,1228,33.844371,-84.47405,0,NULL,NULL,NULL),(133,97,1,1,0,'412O El Camino Ln N',412,'O',NULL,'El Camino','Ln','N',NULL,NULL,NULL,NULL,'Bock',1,1022,NULL,'56313',NULL,1228,45.785883,-93.55343,0,NULL,NULL,55),(134,60,1,1,0,'412O El Camino Ln N',412,'O',NULL,'El Camino','Ln','N',NULL,NULL,NULL,NULL,'Bock',1,1022,NULL,'56313',NULL,1228,45.785883,-93.55343,0,NULL,NULL,55),(135,165,1,1,0,'412O El Camino Ln N',412,'O',NULL,'El Camino','Ln','N',NULL,NULL,NULL,NULL,'Bock',1,1022,NULL,'56313',NULL,1228,45.785883,-93.55343,0,NULL,NULL,55),(136,159,1,1,0,'21U College Ln SE',21,'U',NULL,'College','Ln','SE',NULL,NULL,NULL,NULL,'Saronville',1,1026,NULL,'68975',NULL,1228,40.605538,-97.94955,0,NULL,NULL,NULL),(137,12,1,1,0,'605T Pine Path S',605,'T',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Nursery',1,1042,NULL,'77976',NULL,1228,28.954273,-97.090604,0,NULL,NULL,56),(138,19,1,0,0,'605T Pine Path S',605,'T',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Nursery',1,1042,NULL,'77976',NULL,1228,28.954273,-97.090604,0,NULL,NULL,56),(139,14,1,1,0,'605T Pine Path S',605,'T',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Nursery',1,1042,NULL,'77976',NULL,1228,28.954273,-97.090604,0,NULL,NULL,56),(140,36,1,1,0,'238N Second Pl SE',238,'N',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'Rocky Ford',1,1009,NULL,'30455',NULL,1228,32.697762,-81.81036,0,NULL,NULL,NULL),(141,189,1,0,0,'12K Northpoint Dr W',12,'K',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Barstow',1,1004,NULL,'92311',NULL,1228,34.894181,-117.03636,0,NULL,NULL,57),(142,151,1,1,0,'12K Northpoint Dr W',12,'K',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Barstow',1,1004,NULL,'92311',NULL,1228,34.894181,-117.03636,0,NULL,NULL,57),(143,104,1,1,0,'12K Northpoint Dr W',12,'K',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Barstow',1,1004,NULL,'92311',NULL,1228,34.894181,-117.03636,0,NULL,NULL,57),(144,39,1,1,0,'12K Northpoint Dr W',12,'K',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Barstow',1,1004,NULL,'92311',NULL,1228,34.894181,-117.03636,0,NULL,NULL,57),(145,133,1,1,0,'638H Woodbridge St SW',638,'H',NULL,'Woodbridge','St','SW',NULL,NULL,NULL,NULL,'Urbana',1,1014,NULL,'52345',NULL,1228,42.222388,-91.87908,0,NULL,NULL,58),(146,3,1,1,0,'638H Woodbridge St SW',638,'H',NULL,'Woodbridge','St','SW',NULL,NULL,NULL,NULL,'Urbana',1,1014,NULL,'52345',NULL,1228,42.222388,-91.87908,0,NULL,NULL,58),(147,194,1,1,0,'638H Woodbridge St SW',638,'H',NULL,'Woodbridge','St','SW',NULL,NULL,NULL,NULL,'Urbana',1,1014,NULL,'52345',NULL,1228,42.222388,-91.87908,0,NULL,NULL,58),(148,40,1,1,0,'638H Woodbridge St SW',638,'H',NULL,'Woodbridge','St','SW',NULL,NULL,NULL,NULL,'Urbana',1,1014,NULL,'52345',NULL,1228,42.222388,-91.87908,0,NULL,NULL,58),(149,111,1,1,0,'19Z Green Ave NW',19,'Z',NULL,'Green','Ave','NW',NULL,NULL,NULL,NULL,'North Brunswick',1,1029,NULL,'08902',NULL,1228,40.453131,-74.48287,0,NULL,NULL,59),(150,21,1,1,0,'19Z Green Ave NW',19,'Z',NULL,'Green','Ave','NW',NULL,NULL,NULL,NULL,'North Brunswick',1,1029,NULL,'08902',NULL,1228,40.453131,-74.48287,0,NULL,NULL,59),(151,184,1,0,0,'19Z Green Ave NW',19,'Z',NULL,'Green','Ave','NW',NULL,NULL,NULL,NULL,'North Brunswick',1,1029,NULL,'08902',NULL,1228,40.453131,-74.48287,0,NULL,NULL,59),(152,110,1,1,0,'19Z Green Ave NW',19,'Z',NULL,'Green','Ave','NW',NULL,NULL,NULL,NULL,'North Brunswick',1,1029,NULL,'08902',NULL,1228,40.453131,-74.48287,0,NULL,NULL,59),(153,174,1,1,0,'682O Bay Pl NW',682,'O',NULL,'Bay','Pl','NW',NULL,NULL,NULL,NULL,'Williamston',1,1021,NULL,'48895',NULL,1228,42.68669,-84.27844,0,NULL,NULL,60),(154,22,1,1,0,'682O Bay Pl NW',682,'O',NULL,'Bay','Pl','NW',NULL,NULL,NULL,NULL,'Williamston',1,1021,NULL,'48895',NULL,1228,42.68669,-84.27844,0,NULL,NULL,60),(155,81,1,1,0,'682O Bay Pl NW',682,'O',NULL,'Bay','Pl','NW',NULL,NULL,NULL,NULL,'Williamston',1,1021,NULL,'48895',NULL,1228,42.68669,-84.27844,0,NULL,NULL,60),(156,127,1,1,0,'288X Cadell Rd NW',288,'X',NULL,'Cadell','Rd','NW',NULL,NULL,NULL,NULL,'Hanna City',1,1012,NULL,'61536',NULL,1228,40.690205,-89.78042,0,NULL,NULL,NULL),(157,183,1,1,0,'941F Green Pl SW',941,'F',NULL,'Green','Pl','SW',NULL,NULL,NULL,NULL,'Hernando',1,1023,NULL,'38632',NULL,1228,34.811777,-90.01917,0,NULL,NULL,61),(158,192,1,1,0,'941F Green Pl SW',941,'F',NULL,'Green','Pl','SW',NULL,NULL,NULL,NULL,'Hernando',1,1023,NULL,'38632',NULL,1228,34.811777,-90.01917,0,NULL,NULL,61),(159,169,1,1,0,'941F Green Pl SW',941,'F',NULL,'Green','Pl','SW',NULL,NULL,NULL,NULL,'Hernando',1,1023,NULL,'38632',NULL,1228,34.811777,-90.01917,0,NULL,NULL,61),(160,186,1,1,0,'864R Maple Blvd E',864,'R',NULL,'Maple','Blvd','E',NULL,NULL,NULL,NULL,'Haldeman',1,1016,NULL,'40329',NULL,1228,38.206706,-83.41725,0,NULL,NULL,NULL),(161,138,1,1,0,'630Q Martin Luther King Blvd NE',630,'Q',NULL,'Martin Luther King','Blvd','NE',NULL,NULL,NULL,NULL,'Millbury',1,1020,NULL,'01527',NULL,1228,42.196144,-71.76272,0,NULL,NULL,62),(162,86,1,1,0,'630Q Martin Luther King Blvd NE',630,'Q',NULL,'Martin Luther King','Blvd','NE',NULL,NULL,NULL,NULL,'Millbury',1,1020,NULL,'01527',NULL,1228,42.196144,-71.76272,0,NULL,NULL,62),(163,114,1,1,0,'630Q Martin Luther King Blvd NE',630,'Q',NULL,'Martin Luther King','Blvd','NE',NULL,NULL,NULL,NULL,'Millbury',1,1020,NULL,'01527',NULL,1228,42.196144,-71.76272,0,NULL,NULL,62),(164,61,1,1,0,'707W States Ave NE',707,'W',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Greencastle',1,1013,NULL,'46135',NULL,1228,39.652374,-86.87361,0,NULL,NULL,NULL),(165,56,1,1,0,'491Y Beech Dr N',491,'Y',NULL,'Beech','Dr','N',NULL,NULL,NULL,NULL,'Diamond Springs',1,1004,NULL,'95619',NULL,1228,38.689067,-120.82071,0,NULL,NULL,63),(166,181,1,1,0,'491Y Beech Dr N',491,'Y',NULL,'Beech','Dr','N',NULL,NULL,NULL,NULL,'Diamond Springs',1,1004,NULL,'95619',NULL,1228,38.689067,-120.82071,0,NULL,NULL,63),(167,116,1,1,0,'491Y Beech Dr N',491,'Y',NULL,'Beech','Dr','N',NULL,NULL,NULL,NULL,'Diamond Springs',1,1004,NULL,'95619',NULL,1228,38.689067,-120.82071,0,NULL,NULL,63),(168,73,1,1,0,'491Y Beech Dr N',491,'Y',NULL,'Beech','Dr','N',NULL,NULL,NULL,NULL,'Diamond Springs',1,1004,NULL,'95619',NULL,1228,38.689067,-120.82071,0,NULL,NULL,63),(169,87,1,1,0,'139P Main Pl NW',139,'P',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Wadesville',1,1013,NULL,'47638',NULL,1228,38.081681,-87.78055,0,NULL,NULL,64),(170,92,1,1,0,'139P Main Pl NW',139,'P',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Wadesville',1,1013,NULL,'47638',NULL,1228,38.081681,-87.78055,0,NULL,NULL,64),(171,85,1,1,0,'139P Main Pl NW',139,'P',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Wadesville',1,1013,NULL,'47638',NULL,1228,38.081681,-87.78055,0,NULL,NULL,64),(172,173,1,1,0,'56U Pine Ave E',56,'U',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Eagle Rock',1,1024,NULL,'65641',NULL,1228,36.536324,-93.73134,0,NULL,NULL,NULL),(173,128,1,1,0,'740V Second Pl SE',740,'V',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'North Augusta',1,1039,NULL,'29861',NULL,1228,33.53773,-81.599891,0,NULL,NULL,65),(174,143,1,1,0,'740V Second Pl SE',740,'V',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'North Augusta',1,1039,NULL,'29861',NULL,1228,33.53773,-81.599891,0,NULL,NULL,65),(175,24,1,1,0,'740V Second Pl SE',740,'V',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'North Augusta',1,1039,NULL,'29861',NULL,1228,33.53773,-81.599891,0,NULL,NULL,65),(176,187,1,1,0,'740V Second Pl SE',740,'V',NULL,'Second','Pl','SE',NULL,NULL,NULL,NULL,'North Augusta',1,1039,NULL,'29861',NULL,1228,33.53773,-81.599891,0,NULL,NULL,65),(177,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL),(178,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL),(179,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); +INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES (1,43,1,1,0,'265Q Northpoint Pl SW',265,'Q',NULL,'Northpoint','Pl','SW',NULL,NULL,NULL,NULL,'Saint Petersburg',1,1008,NULL,'33728',NULL,1228,27.891809,-82.724763,0,NULL,NULL,NULL),(2,71,1,1,0,'751E El Camino Rd SW',751,'E',NULL,'El Camino','Rd','SW',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'30331',NULL,1228,33.715558,-84.52728,0,NULL,NULL,NULL),(3,177,1,1,0,'116E Pine Ln SW',116,'E',NULL,'Pine','Ln','SW',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80264',NULL,1228,39.742486,-104.98563,0,NULL,NULL,NULL),(4,110,1,1,0,'840L Jackson Path SE',840,'L',NULL,'Jackson','Path','SE',NULL,NULL,NULL,NULL,'Cumberland Foreside',1,1018,NULL,'04110',NULL,1228,43.760369,-70.19681,0,NULL,NULL,NULL),(5,91,1,1,0,'19P Dowlen Pl SE',19,'P',NULL,'Dowlen','Pl','SE',NULL,NULL,NULL,NULL,'Newark',1,1007,NULL,'19713',NULL,1228,39.669211,-75.71796,0,NULL,NULL,NULL),(6,37,1,1,0,'433B Lincoln Way E',433,'B',NULL,'Lincoln','Way','E',NULL,NULL,NULL,NULL,'Palmdale',1,1004,NULL,'93590',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(7,175,1,1,0,'509R Van Ness Way SE',509,'R',NULL,'Van Ness','Way','SE',NULL,NULL,NULL,NULL,'Pasadena',1,1004,NULL,'91050',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(8,15,1,1,0,'315A Green Pl W',315,'A',NULL,'Green','Pl','W',NULL,NULL,NULL,NULL,'East Troy',1,1048,NULL,'53120',NULL,1228,42.797775,-88.40435,0,NULL,NULL,NULL),(9,106,1,1,0,'69H Jackson Rd N',69,'H',NULL,'Jackson','Rd','N',NULL,NULL,NULL,NULL,'Climbing Hill',1,1014,NULL,'51015',NULL,1228,42.345024,-96.087523,0,NULL,NULL,NULL),(10,147,1,1,0,'1000F Martin Luther King Dr N',1000,'F',NULL,'Martin Luther King','Dr','N',NULL,NULL,NULL,NULL,'Oakland',1,1004,NULL,'94624',NULL,1228,37.680181,-121.921498,0,NULL,NULL,NULL),(11,198,1,1,0,'644Z States Ave N',644,'Z',NULL,'States','Ave','N',NULL,NULL,NULL,NULL,'Omaha',1,1026,NULL,'68179',NULL,1228,41.291736,-96.171104,0,NULL,NULL,NULL),(12,18,1,1,0,'664C Martin Luther King Pl NE',664,'C',NULL,'Martin Luther King','Pl','NE',NULL,NULL,NULL,NULL,'Rudyard',1,1021,NULL,'49780',NULL,1228,46.204512,-84.73671,0,NULL,NULL,NULL),(13,108,1,1,0,'763W Cadell St W',763,'W',NULL,'Cadell','St','W',NULL,NULL,NULL,NULL,'Marietta',1,1037,NULL,'17547',NULL,1228,40.064862,-76.57145,0,NULL,NULL,NULL),(14,26,1,1,0,'877E Main St SE',877,'E',NULL,'Main','St','SE',NULL,NULL,NULL,NULL,'Flint',1,1021,NULL,'48556',NULL,1228,43.032677,-83.646255,0,NULL,NULL,NULL),(15,44,1,1,0,'780S Beech Way NE',780,'S',NULL,'Beech','Way','NE',NULL,NULL,NULL,NULL,'Ottawa Lake',1,1021,NULL,'49267',NULL,1228,41.757599,-83.70951,0,NULL,NULL,NULL),(16,121,1,1,0,'126R College Pl N',126,'R',NULL,'College','Pl','N',NULL,NULL,NULL,NULL,'Deweyville',1,1043,NULL,'84309',NULL,1228,41.714101,-112.08846,0,NULL,NULL,NULL),(17,47,1,1,0,'663C College St SE',663,'C',NULL,'College','St','SE',NULL,NULL,NULL,NULL,'Rockville',1,1019,NULL,'20850',NULL,1228,39.093408,-77.1718,0,NULL,NULL,NULL),(18,85,1,1,0,'763P Maple Path NE',763,'P',NULL,'Maple','Path','NE',NULL,NULL,NULL,NULL,'Richland',1,1039,NULL,'29675',NULL,1228,34.764076,-83.088332,0,NULL,NULL,NULL),(19,119,1,1,0,'608W Main Rd N',608,'W',NULL,'Main','Rd','N',NULL,NULL,NULL,NULL,'Maple Plain',1,1022,NULL,'55359',NULL,1228,45.002212,-93.69319,0,NULL,NULL,NULL),(20,10,1,1,0,'556F Beech Way N',556,'F',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Carrollton',1,1009,NULL,'30116',NULL,1228,33.560454,-85.02254,0,NULL,NULL,NULL),(21,159,1,1,0,'719I Main Pl S',719,'I',NULL,'Main','Pl','S',NULL,NULL,NULL,NULL,'Shallowater',1,1042,NULL,'79363',NULL,1228,33.701024,-102.01948,0,NULL,NULL,NULL),(22,61,1,1,0,'613D Woodbridge Dr N',613,'D',NULL,'Woodbridge','Dr','N',NULL,NULL,NULL,NULL,'Springfield',1,1034,NULL,'45504',NULL,1228,39.941827,-83.83702,0,NULL,NULL,NULL),(23,164,1,1,0,'382O Martin Luther King Path NE',382,'O',NULL,'Martin Luther King','Path','NE',NULL,NULL,NULL,NULL,'Martinsburg',1,1037,NULL,'16662',NULL,1228,40.306709,-78.31987,0,NULL,NULL,NULL),(24,41,1,1,0,'785M Pine Dr SE',785,'M',NULL,'Pine','Dr','SE',NULL,NULL,NULL,NULL,'Independence',1,1036,NULL,'97351',NULL,1228,44.849012,-123.18673,0,NULL,NULL,NULL),(25,16,1,1,0,'378K Woodbridge Blvd E',378,'K',NULL,'Woodbridge','Blvd','E',NULL,NULL,NULL,NULL,'Allen',1,1026,NULL,'68710',NULL,1228,42.450185,-96.85153,0,NULL,NULL,NULL),(26,143,1,1,0,'434E El Camino Dr SW',434,'E',NULL,'El Camino','Dr','SW',NULL,NULL,NULL,NULL,'Rockport',1,1018,NULL,'04856',NULL,1228,44.180867,-69.09812,0,NULL,NULL,NULL),(27,136,1,1,0,'5U Second Pl SW',5,'U',NULL,'Second','Pl','SW',NULL,NULL,NULL,NULL,'Felda',1,1008,NULL,'33930',NULL,1228,26.581172,-81.46202,0,NULL,NULL,NULL),(28,36,1,1,0,'873B El Camino Ave SE',873,'B',NULL,'El Camino','Ave','SE',NULL,NULL,NULL,NULL,'Columbus',1,1034,NULL,'43236',NULL,1228,40.135711,-83.007626,0,NULL,NULL,NULL),(29,7,1,1,0,'647X Lincoln Ave W',647,'X',NULL,'Lincoln','Ave','W',NULL,NULL,NULL,NULL,'Jackson',1,1023,NULL,'39283',NULL,1228,32.311287,-90.397157,0,NULL,NULL,NULL),(30,145,1,1,0,'38Q Pine Way S',38,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Washington',1,1050,NULL,'20426',NULL,1228,38.893311,-77.014647,0,NULL,NULL,NULL),(31,158,1,1,0,'812E Cadell Ln N',812,'E',NULL,'Cadell','Ln','N',NULL,NULL,NULL,NULL,'Belk',1,1000,NULL,'35545',NULL,1228,33.641227,-87.92911,0,NULL,NULL,NULL),(32,199,1,1,0,'74P College Pl E',74,'P',NULL,'College','Pl','E',NULL,NULL,NULL,NULL,'Monett',1,1024,NULL,'65708',NULL,1228,36.91816,-93.91488,0,NULL,NULL,NULL),(33,21,1,1,0,'352D Van Ness Path SW',352,'D',NULL,'Van Ness','Path','SW',NULL,NULL,NULL,NULL,'Viola',1,1012,NULL,'61486',NULL,1228,41.195087,-90.57923,0,NULL,NULL,NULL),(34,12,1,1,0,'1000Q Pine Blvd SE',1000,'Q',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Saint Joseph',1,1021,NULL,'49085',NULL,1228,42.074435,-86.47935,0,NULL,NULL,NULL),(35,81,1,1,0,'409T College Path SW',409,'T',NULL,'College','Path','SW',NULL,NULL,NULL,NULL,'Bay Saint Louis',1,1023,NULL,'39520',NULL,1228,30.304327,-89.40705,0,NULL,NULL,NULL),(36,185,1,1,0,'340G States Dr E',340,'G',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Boyd',1,1048,NULL,'54726',NULL,1228,44.946486,-91.02282,0,NULL,NULL,NULL),(37,62,1,1,0,'565W Lincoln Rd E',565,'W',NULL,'Lincoln','Rd','E',NULL,NULL,NULL,NULL,'Queens Village',1,1031,NULL,'11428',NULL,1228,40.719981,-73.74127,0,NULL,NULL,NULL),(38,78,1,1,0,'928V Main Pl W',928,'V',NULL,'Main','Pl','W',NULL,NULL,NULL,NULL,'Hewitt',1,1022,NULL,'56453',NULL,1228,46.32091,-95.14567,0,NULL,NULL,NULL),(39,117,1,1,0,'299C El Camino Path NW',299,'C',NULL,'El Camino','Path','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61105',NULL,1228,42.325364,-89.170527,0,NULL,NULL,NULL),(40,196,1,1,0,'568Z Martin Luther King Pl N',568,'Z',NULL,'Martin Luther King','Pl','N',NULL,NULL,NULL,NULL,'San Bruno',1,1004,NULL,'94098',NULL,1228,37.381144,-122.334825,0,NULL,NULL,NULL),(41,162,1,1,0,'965R Main Path S',965,'R',NULL,'Main','Path','S',NULL,NULL,NULL,NULL,'East Durham',1,1031,NULL,'12423',NULL,1228,42.378679,-74.10443,0,NULL,NULL,NULL),(42,90,1,1,0,'248I College Way SE',248,'I',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Waterloo',1,1014,NULL,'50703',NULL,1228,42.513636,-92.32418,0,NULL,NULL,NULL),(43,42,1,1,0,'786B Lincoln St W',786,'B',NULL,'Lincoln','St','W',NULL,NULL,NULL,NULL,'Wendell',1,1032,NULL,'27591',NULL,1228,35.781595,-78.37287,0,NULL,NULL,NULL),(44,40,1,1,0,'461P Northpoint St S',461,'P',NULL,'Northpoint','St','S',NULL,NULL,NULL,NULL,'Wells',1,1027,NULL,'89835',NULL,1228,41.208288,-114.86098,0,NULL,NULL,NULL),(45,2,1,1,0,'508U Jackson Dr S',508,'U',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Saint Catharine',1,1016,NULL,'40061',NULL,1228,37.773962,-85.201068,0,NULL,NULL,NULL),(46,68,1,1,0,'391L Dowlen Path N',391,'L',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00936',NULL,1228,18.410462,-66.060533,0,NULL,NULL,NULL),(47,76,1,1,0,'526V Maple Path SE',526,'V',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Keokuk',1,1014,NULL,'52632',NULL,1228,40.409641,-91.40001,0,NULL,NULL,NULL),(48,122,1,1,0,'192S Beech Dr W',192,'S',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Harveys Lake',1,1037,NULL,'18618',NULL,1228,41.37649,-76.03662,0,NULL,NULL,NULL),(49,102,1,1,0,'475W Lincoln St NE',475,'W',NULL,'Lincoln','St','NE',NULL,NULL,NULL,NULL,'Beaufort',1,1039,NULL,'29903',NULL,1228,32.443974,-80.735245,0,NULL,NULL,NULL),(50,49,1,1,0,'528E Beech Path W',528,'E',NULL,'Beech','Path','W',NULL,NULL,NULL,NULL,'Santa Fe',1,1024,NULL,'65282',NULL,1228,39.369471,-91.81864,0,NULL,NULL,NULL),(51,38,1,1,0,'975Z Dowlen Path NW',975,'Z',NULL,'Dowlen','Path','NW',NULL,NULL,NULL,NULL,'Ballinger',1,1042,NULL,'76821',NULL,1228,31.754011,-99.93695,0,NULL,NULL,NULL),(52,46,1,1,0,'965W Lincoln Blvd S',965,'W',NULL,'Lincoln','Blvd','S',NULL,NULL,NULL,NULL,'Danielsville',1,1009,NULL,'30633',NULL,1228,34.17085,-83.24654,0,NULL,NULL,NULL),(53,181,1,1,0,'797D Jackson Path NW',797,'D',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Millington',1,1041,NULL,'38083',NULL,1228,35.201738,-89.971538,0,NULL,NULL,NULL),(54,57,1,1,0,'321K Caulder Rd W',321,'K',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Scranton',1,1037,NULL,'18505',NULL,1228,41.39208,-75.66603,0,NULL,NULL,NULL),(55,161,1,1,0,'817P Woodbridge Ln E',817,'P',NULL,'Woodbridge','Ln','E',NULL,NULL,NULL,NULL,'Morley',1,1014,NULL,'52312',NULL,1228,42.006556,-91.24671,0,NULL,NULL,NULL),(56,17,1,1,0,'711N Northpoint Ln SW',711,'N',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Parkesburg',1,1037,NULL,'19365',NULL,1228,39.961094,-75.92047,0,NULL,NULL,NULL),(57,187,1,1,0,'479R Green Ln W',479,'R',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,NULL),(58,80,1,1,0,'207W Caulder Pl S',207,'W',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Harlan',1,1014,NULL,'51593',NULL,1228,41.332943,-95.587197,0,NULL,NULL,NULL),(59,51,1,1,0,'138S Jackson Rd E',138,'S',NULL,'Jackson','Rd','E',NULL,NULL,NULL,NULL,'Reseda',1,1004,NULL,'91337',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(60,131,1,1,0,'228F Cadell Pl NE',228,'F',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Alcester',1,1040,NULL,'57001',NULL,1228,42.974216,-96.63848,0,NULL,NULL,NULL),(61,79,1,1,0,'486G Caulder Ln NE',486,'G',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,NULL),(62,192,3,1,0,'336Y Bay St N',336,'Y',NULL,'Bay','St','N',NULL,'Donor Relations',NULL,NULL,'Burlingame',1,1004,NULL,'94012',NULL,1228,37.381144,-122.334825,0,NULL,NULL,NULL),(63,172,2,1,0,'336Y Bay St N',336,'Y',NULL,'Bay','St','N',NULL,'Donor Relations',NULL,NULL,'Burlingame',1,1004,NULL,'94012',NULL,1228,37.381144,-122.334825,0,NULL,NULL,62),(64,74,3,1,0,'37T Bay Rd SW',37,'T',NULL,'Bay','Rd','SW',NULL,'Disbursements',NULL,NULL,'West Palm Beach',1,1008,NULL,'33407',NULL,1228,26.750991,-80.07296,0,NULL,NULL,NULL),(65,160,2,1,0,'37T Bay Rd SW',37,'T',NULL,'Bay','Rd','SW',NULL,'Disbursements',NULL,NULL,'West Palm Beach',1,1008,NULL,'33407',NULL,1228,26.750991,-80.07296,0,NULL,NULL,64),(66,127,3,1,0,'151V Martin Luther King Way W',151,'V',NULL,'Martin Luther King','Way','W',NULL,'Disbursements',NULL,NULL,'Springfield',1,1034,NULL,'45505',NULL,1228,39.91086,-83.78579,0,NULL,NULL,NULL),(67,194,2,1,0,'151V Martin Luther King Way W',151,'V',NULL,'Martin Luther King','Way','W',NULL,'Disbursements',NULL,NULL,'Springfield',1,1034,NULL,'45505',NULL,1228,39.91086,-83.78579,0,NULL,NULL,66),(68,111,3,1,0,'7C Caulder Ave NE',7,'C',NULL,'Caulder','Ave','NE',NULL,'Mailstop 101',NULL,NULL,'Bird City',1,1015,NULL,'67731',NULL,1228,39.758864,-101.54448,0,NULL,NULL,NULL),(69,23,3,1,0,'423T Caulder Rd SE',423,'T',NULL,'Caulder','Rd','SE',NULL,'Cuffe Parade',NULL,NULL,'Carthage',1,1024,NULL,'64836',NULL,1228,37.168985,-94.31164,0,NULL,NULL,NULL),(70,65,3,1,0,'335K Woodbridge Pl E',335,'K',NULL,'Woodbridge','Pl','E',NULL,'Cuffe Parade',NULL,NULL,'Indiahoma',1,1035,NULL,'73552',NULL,1228,34.62256,-98.75386,0,NULL,NULL,NULL),(71,82,3,1,0,'66D Pine Pl NW',66,'D',NULL,'Pine','Pl','NW',NULL,'Cuffe Parade',NULL,NULL,'Harmony',1,1032,NULL,'28634',NULL,1228,35.97991,-80.77085,0,NULL,NULL,NULL),(72,123,3,1,0,'230P Martin Luther King Path SW',230,'P',NULL,'Martin Luther King','Path','SW',NULL,'Cuffe Parade',NULL,NULL,'South Amboy',1,1029,NULL,'08879',NULL,1228,40.469606,-74.27669,0,NULL,NULL,NULL),(73,55,3,1,0,'734R Main Path NW',734,'R',NULL,'Main','Path','NW',NULL,'Subscriptions Dept',NULL,NULL,'Hamilton',1,1021,NULL,'49419',NULL,1228,42.679762,-85.98996,0,NULL,NULL,NULL),(74,144,3,1,0,'127R Jackson Ave N',127,'R',NULL,'Jackson','Ave','N',NULL,'Receiving',NULL,NULL,'Pittsburgh',1,1037,NULL,'15226',NULL,1228,40.394002,-80.01655,0,NULL,NULL,NULL),(75,142,2,1,0,'127R Jackson Ave N',127,'R',NULL,'Jackson','Ave','N',NULL,'Receiving',NULL,NULL,'Pittsburgh',1,1037,NULL,'15226',NULL,1228,40.394002,-80.01655,0,NULL,NULL,74),(76,63,3,1,0,'152Y States Rd NE',152,'Y',NULL,'States','Rd','NE',NULL,'Cuffe Parade',NULL,NULL,'Angola',1,1031,NULL,'14006',NULL,1228,42.633375,-79.04567,0,NULL,NULL,NULL),(77,193,2,1,0,'152Y States Rd NE',152,'Y',NULL,'States','Rd','NE',NULL,'Cuffe Parade',NULL,NULL,'Angola',1,1031,NULL,'14006',NULL,1228,42.633375,-79.04567,0,NULL,NULL,76),(78,178,3,1,0,'470C Maple St SE',470,'C',NULL,'Maple','St','SE',NULL,'Urgent',NULL,NULL,'Loyal',1,1048,NULL,'54446',NULL,1228,44.758265,-90.48248,0,NULL,NULL,NULL),(79,18,2,0,0,'470C Maple St SE',470,'C',NULL,'Maple','St','SE',NULL,'Urgent',NULL,NULL,'Loyal',1,1048,NULL,'54446',NULL,1228,44.758265,-90.48248,0,NULL,NULL,78),(80,31,3,1,0,'999O Second Dr E',999,'O',NULL,'Second','Dr','E',NULL,'Urgent',NULL,NULL,'Arma',1,1015,NULL,'66712',NULL,1228,37.547763,-94.70622,0,NULL,NULL,NULL),(81,101,3,1,0,'279P Maple Ln NW',279,'P',NULL,'Maple','Ln','NW',NULL,'Urgent',NULL,NULL,'San Pablo',1,1005,NULL,'81153',NULL,1228,37.127132,-105.3675,0,NULL,NULL,NULL),(82,119,2,0,0,'279P Maple Ln NW',279,'P',NULL,'Maple','Ln','NW',NULL,'Urgent',NULL,NULL,'San Pablo',1,1005,NULL,'81153',NULL,1228,37.127132,-105.3675,0,NULL,NULL,81),(83,95,3,1,0,'813T Lincoln Rd E',813,'T',NULL,'Lincoln','Rd','E',NULL,'Disbursements',NULL,NULL,'Dauberville',1,1037,NULL,'19517',NULL,1228,40.407173,-75.984901,0,NULL,NULL,NULL),(84,70,2,1,0,'813T Lincoln Rd E',813,'T',NULL,'Lincoln','Rd','E',NULL,'Disbursements',NULL,NULL,'Dauberville',1,1037,NULL,'19517',NULL,1228,40.407173,-75.984901,0,NULL,NULL,83),(85,135,3,1,0,'788V Green Blvd S',788,'V',NULL,'Green','Blvd','S',NULL,'Attn: Accounting',NULL,NULL,'Austin',1,1042,NULL,'78778',NULL,1228,30.326374,-97.771258,0,NULL,NULL,NULL),(86,39,3,1,0,'522T Beech Way NE',522,'T',NULL,'Beech','Way','NE',NULL,'Subscriptions Dept',NULL,NULL,'Farmington',1,1003,NULL,'72730',NULL,1228,36.03667,-94.25261,0,NULL,NULL,NULL),(87,19,2,1,0,'522T Beech Way NE',522,'T',NULL,'Beech','Way','NE',NULL,'Subscriptions Dept',NULL,NULL,'Farmington',1,1003,NULL,'72730',NULL,1228,36.03667,-94.25261,0,NULL,NULL,86),(88,60,3,1,0,'411G Maple Blvd SE',411,'G',NULL,'Maple','Blvd','SE',NULL,'Urgent',NULL,NULL,'Paluxy',1,1042,NULL,'76467',NULL,1228,32.341365,-97.932083,0,NULL,NULL,NULL),(89,26,2,0,0,'411G Maple Blvd SE',411,'G',NULL,'Maple','Blvd','SE',NULL,'Urgent',NULL,NULL,'Paluxy',1,1042,NULL,'76467',NULL,1228,32.341365,-97.932083,0,NULL,NULL,88),(90,182,3,1,0,'741N States Rd W',741,'N',NULL,'States','Rd','W',NULL,'Editorial Dept',NULL,NULL,'Cleveland',1,1034,NULL,'44106',NULL,1228,41.507751,-81.60883,0,NULL,NULL,NULL),(91,106,2,0,0,'741N States Rd W',741,'N',NULL,'States','Rd','W',NULL,'Editorial Dept',NULL,NULL,'Cleveland',1,1034,NULL,'44106',NULL,1228,41.507751,-81.60883,0,NULL,NULL,90),(92,105,3,1,0,'453W Pine Rd N',453,'W',NULL,'Pine','Rd','N',NULL,'Donor Relations',NULL,NULL,'Acton',1,1025,NULL,'59002',NULL,1228,45.932174,-108.68933,0,NULL,NULL,NULL),(93,29,2,1,0,'453W Pine Rd N',453,'W',NULL,'Pine','Rd','N',NULL,'Donor Relations',NULL,NULL,'Acton',1,1025,NULL,'59002',NULL,1228,45.932174,-108.68933,0,NULL,NULL,92),(94,3,1,1,0,'248I College Way SE',248,'I',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Waterloo',1,1014,NULL,'50703',NULL,1228,42.513636,-92.32418,0,NULL,NULL,42),(95,84,1,1,0,'248I College Way SE',248,'I',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Waterloo',1,1014,NULL,'50703',NULL,1228,42.513636,-92.32418,0,NULL,NULL,42),(96,13,1,1,0,'248I College Way SE',248,'I',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Waterloo',1,1014,NULL,'50703',NULL,1228,42.513636,-92.32418,0,NULL,NULL,42),(97,162,1,0,0,'248I College Way SE',248,'I',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Waterloo',1,1014,NULL,'50703',NULL,1228,42.513636,-92.32418,0,NULL,NULL,42),(98,155,1,1,0,'786B Lincoln St W',786,'B',NULL,'Lincoln','St','W',NULL,NULL,NULL,NULL,'Wendell',1,1032,NULL,'27591',NULL,1228,35.781595,-78.37287,0,NULL,NULL,43),(99,165,1,1,0,'786B Lincoln St W',786,'B',NULL,'Lincoln','St','W',NULL,NULL,NULL,NULL,'Wendell',1,1032,NULL,'27591',NULL,1228,35.781595,-78.37287,0,NULL,NULL,43),(100,52,1,1,0,'786B Lincoln St W',786,'B',NULL,'Lincoln','St','W',NULL,NULL,NULL,NULL,'Wendell',1,1032,NULL,'27591',NULL,1228,35.781595,-78.37287,0,NULL,NULL,43),(101,180,1,1,0,'786B Lincoln St W',786,'B',NULL,'Lincoln','St','W',NULL,NULL,NULL,NULL,'Wendell',1,1032,NULL,'27591',NULL,1228,35.781595,-78.37287,0,NULL,NULL,43),(102,48,1,1,0,'461P Northpoint St S',461,'P',NULL,'Northpoint','St','S',NULL,NULL,NULL,NULL,'Wells',1,1027,NULL,'89835',NULL,1228,41.208288,-114.86098,0,NULL,NULL,44),(103,109,1,1,0,'461P Northpoint St S',461,'P',NULL,'Northpoint','St','S',NULL,NULL,NULL,NULL,'Wells',1,1027,NULL,'89835',NULL,1228,41.208288,-114.86098,0,NULL,NULL,44),(104,25,1,1,0,'461P Northpoint St S',461,'P',NULL,'Northpoint','St','S',NULL,NULL,NULL,NULL,'Wells',1,1027,NULL,'89835',NULL,1228,41.208288,-114.86098,0,NULL,NULL,44),(105,132,1,1,0,'461P Northpoint St S',461,'P',NULL,'Northpoint','St','S',NULL,NULL,NULL,NULL,'Wells',1,1027,NULL,'89835',NULL,1228,41.208288,-114.86098,0,NULL,NULL,44),(106,45,1,1,0,'508U Jackson Dr S',508,'U',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Saint Catharine',1,1016,NULL,'40061',NULL,1228,37.773962,-85.201068,0,NULL,NULL,45),(107,67,1,1,0,'508U Jackson Dr S',508,'U',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Saint Catharine',1,1016,NULL,'40061',NULL,1228,37.773962,-85.201068,0,NULL,NULL,45),(108,6,1,1,0,'508U Jackson Dr S',508,'U',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Saint Catharine',1,1016,NULL,'40061',NULL,1228,37.773962,-85.201068,0,NULL,NULL,45),(109,11,1,1,0,'508U Jackson Dr S',508,'U',NULL,'Jackson','Dr','S',NULL,NULL,NULL,NULL,'Saint Catharine',1,1016,NULL,'40061',NULL,1228,37.773962,-85.201068,0,NULL,NULL,45),(110,168,1,1,0,'391L Dowlen Path N',391,'L',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00936',NULL,1228,18.410462,-66.060533,0,NULL,NULL,46),(111,200,1,1,0,'391L Dowlen Path N',391,'L',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00936',NULL,1228,18.410462,-66.060533,0,NULL,NULL,46),(112,124,1,1,0,'391L Dowlen Path N',391,'L',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00936',NULL,1228,18.410462,-66.060533,0,NULL,NULL,46),(113,88,1,1,0,'391L Dowlen Path N',391,'L',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'San Juan',1,1056,NULL,'00936',NULL,1228,18.410462,-66.060533,0,NULL,NULL,46),(114,98,1,1,0,'526V Maple Path SE',526,'V',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Keokuk',1,1014,NULL,'52632',NULL,1228,40.409641,-91.40001,0,NULL,NULL,47),(115,166,1,1,0,'526V Maple Path SE',526,'V',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Keokuk',1,1014,NULL,'52632',NULL,1228,40.409641,-91.40001,0,NULL,NULL,47),(116,19,1,0,0,'526V Maple Path SE',526,'V',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Keokuk',1,1014,NULL,'52632',NULL,1228,40.409641,-91.40001,0,NULL,NULL,47),(117,125,1,1,0,'50I Pine Way SE',50,'I',NULL,'Pine','Way','SE',NULL,NULL,NULL,NULL,'Scappoose',1,1036,NULL,'97056',NULL,1228,45.778892,-122.92065,0,NULL,NULL,NULL),(118,54,1,1,0,'192S Beech Dr W',192,'S',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Harveys Lake',1,1037,NULL,'18618',NULL,1228,41.37649,-76.03662,0,NULL,NULL,48),(119,163,1,1,0,'192S Beech Dr W',192,'S',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Harveys Lake',1,1037,NULL,'18618',NULL,1228,41.37649,-76.03662,0,NULL,NULL,48),(120,83,1,1,0,'192S Beech Dr W',192,'S',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Harveys Lake',1,1037,NULL,'18618',NULL,1228,41.37649,-76.03662,0,NULL,NULL,48),(121,14,1,1,0,'879B Beech Ln SW',879,'B',NULL,'Beech','Ln','SW',NULL,NULL,NULL,NULL,'Springfield',1,1012,NULL,'62708',NULL,1228,39.806089,-89.586356,0,NULL,NULL,NULL),(122,104,1,1,0,'475W Lincoln St NE',475,'W',NULL,'Lincoln','St','NE',NULL,NULL,NULL,NULL,'Beaufort',1,1039,NULL,'29903',NULL,1228,32.443974,-80.735245,0,NULL,NULL,49),(123,151,1,1,0,'475W Lincoln St NE',475,'W',NULL,'Lincoln','St','NE',NULL,NULL,NULL,NULL,'Beaufort',1,1039,NULL,'29903',NULL,1228,32.443974,-80.735245,0,NULL,NULL,49),(124,190,1,1,0,'475W Lincoln St NE',475,'W',NULL,'Lincoln','St','NE',NULL,NULL,NULL,NULL,'Beaufort',1,1039,NULL,'29903',NULL,1228,32.443974,-80.735245,0,NULL,NULL,49),(125,189,1,1,0,'475W Lincoln St NE',475,'W',NULL,'Lincoln','St','NE',NULL,NULL,NULL,NULL,'Beaufort',1,1039,NULL,'29903',NULL,1228,32.443974,-80.735245,0,NULL,NULL,49),(126,176,1,1,0,'528E Beech Path W',528,'E',NULL,'Beech','Path','W',NULL,NULL,NULL,NULL,'Santa Fe',1,1024,NULL,'65282',NULL,1228,39.369471,-91.81864,0,NULL,NULL,50),(127,139,1,1,0,'528E Beech Path W',528,'E',NULL,'Beech','Path','W',NULL,NULL,NULL,NULL,'Santa Fe',1,1024,NULL,'65282',NULL,1228,39.369471,-91.81864,0,NULL,NULL,50),(128,140,1,1,0,'528E Beech Path W',528,'E',NULL,'Beech','Path','W',NULL,NULL,NULL,NULL,'Santa Fe',1,1024,NULL,'65282',NULL,1228,39.369471,-91.81864,0,NULL,NULL,50),(129,77,1,1,0,'528E Beech Path W',528,'E',NULL,'Beech','Path','W',NULL,NULL,NULL,NULL,'Santa Fe',1,1024,NULL,'65282',NULL,1228,39.369471,-91.81864,0,NULL,NULL,50),(130,193,1,0,0,'975Z Dowlen Path NW',975,'Z',NULL,'Dowlen','Path','NW',NULL,NULL,NULL,NULL,'Ballinger',1,1042,NULL,'76821',NULL,1228,31.754011,-99.93695,0,NULL,NULL,51),(131,174,1,1,0,'975Z Dowlen Path NW',975,'Z',NULL,'Dowlen','Path','NW',NULL,NULL,NULL,NULL,'Ballinger',1,1042,NULL,'76821',NULL,1228,31.754011,-99.93695,0,NULL,NULL,51),(132,73,1,1,0,'975Z Dowlen Path NW',975,'Z',NULL,'Dowlen','Path','NW',NULL,NULL,NULL,NULL,'Ballinger',1,1042,NULL,'76821',NULL,1228,31.754011,-99.93695,0,NULL,NULL,51),(133,150,1,1,0,'253K Bay St SE',253,'K',NULL,'Bay','St','SE',NULL,NULL,NULL,NULL,'Brooklyn',1,1031,NULL,'11248',NULL,1228,40.645099,-73.945032,0,NULL,NULL,NULL),(134,8,1,1,0,'965W Lincoln Blvd S',965,'W',NULL,'Lincoln','Blvd','S',NULL,NULL,NULL,NULL,'Danielsville',1,1009,NULL,'30633',NULL,1228,34.17085,-83.24654,0,NULL,NULL,52),(135,107,1,1,0,'965W Lincoln Blvd S',965,'W',NULL,'Lincoln','Blvd','S',NULL,NULL,NULL,NULL,'Danielsville',1,1009,NULL,'30633',NULL,1228,34.17085,-83.24654,0,NULL,NULL,52),(136,35,1,1,0,'965W Lincoln Blvd S',965,'W',NULL,'Lincoln','Blvd','S',NULL,NULL,NULL,NULL,'Danielsville',1,1009,NULL,'30633',NULL,1228,34.17085,-83.24654,0,NULL,NULL,52),(137,58,1,1,0,'480C Main Ave W',480,'C',NULL,'Main','Ave','W',NULL,NULL,NULL,NULL,'Oklahoma City',1,1035,NULL,'73140',NULL,1228,35.518509,-97.427464,0,NULL,NULL,NULL),(138,33,1,1,0,'797D Jackson Path NW',797,'D',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Millington',1,1041,NULL,'38083',NULL,1228,35.201738,-89.971538,0,NULL,NULL,53),(139,59,1,1,0,'797D Jackson Path NW',797,'D',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Millington',1,1041,NULL,'38083',NULL,1228,35.201738,-89.971538,0,NULL,NULL,53),(140,5,1,1,0,'797D Jackson Path NW',797,'D',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Millington',1,1041,NULL,'38083',NULL,1228,35.201738,-89.971538,0,NULL,NULL,53),(141,173,1,1,0,'511F Second Path W',511,'F',NULL,'Second','Path','W',NULL,NULL,NULL,NULL,'Anamoose',1,1033,NULL,'58710',NULL,1228,47.87756,-100.23677,0,NULL,NULL,NULL),(142,87,1,1,0,'321K Caulder Rd W',321,'K',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Scranton',1,1037,NULL,'18505',NULL,1228,41.39208,-75.66603,0,NULL,NULL,54),(143,201,1,1,0,'321K Caulder Rd W',321,'K',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Scranton',1,1037,NULL,'18505',NULL,1228,41.39208,-75.66603,0,NULL,NULL,54),(144,126,1,1,0,'321K Caulder Rd W',321,'K',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Scranton',1,1037,NULL,'18505',NULL,1228,41.39208,-75.66603,0,NULL,NULL,54),(145,64,1,1,0,'321K Caulder Rd W',321,'K',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Scranton',1,1037,NULL,'18505',NULL,1228,41.39208,-75.66603,0,NULL,NULL,54),(146,141,1,1,0,'817P Woodbridge Ln E',817,'P',NULL,'Woodbridge','Ln','E',NULL,NULL,NULL,NULL,'Morley',1,1014,NULL,'52312',NULL,1228,42.006556,-91.24671,0,NULL,NULL,55),(147,94,1,1,0,'817P Woodbridge Ln E',817,'P',NULL,'Woodbridge','Ln','E',NULL,NULL,NULL,NULL,'Morley',1,1014,NULL,'52312',NULL,1228,42.006556,-91.24671,0,NULL,NULL,55),(148,183,1,1,0,'817P Woodbridge Ln E',817,'P',NULL,'Woodbridge','Ln','E',NULL,NULL,NULL,NULL,'Morley',1,1014,NULL,'52312',NULL,1228,42.006556,-91.24671,0,NULL,NULL,55),(149,96,1,1,0,'817P Woodbridge Ln E',817,'P',NULL,'Woodbridge','Ln','E',NULL,NULL,NULL,NULL,'Morley',1,1014,NULL,'52312',NULL,1228,42.006556,-91.24671,0,NULL,NULL,55),(150,89,1,1,0,'711N Northpoint Ln SW',711,'N',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Parkesburg',1,1037,NULL,'19365',NULL,1228,39.961094,-75.92047,0,NULL,NULL,56),(151,191,1,1,0,'711N Northpoint Ln SW',711,'N',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Parkesburg',1,1037,NULL,'19365',NULL,1228,39.961094,-75.92047,0,NULL,NULL,56),(152,32,1,1,0,'711N Northpoint Ln SW',711,'N',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Parkesburg',1,1037,NULL,'19365',NULL,1228,39.961094,-75.92047,0,NULL,NULL,56),(153,153,1,1,0,'711N Northpoint Ln SW',711,'N',NULL,'Northpoint','Ln','SW',NULL,NULL,NULL,NULL,'Parkesburg',1,1037,NULL,'19365',NULL,1228,39.961094,-75.92047,0,NULL,NULL,56),(154,186,1,1,0,'479R Green Ln W',479,'R',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,57),(155,133,1,1,0,'479R Green Ln W',479,'R',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,57),(156,4,1,1,0,'479R Green Ln W',479,'R',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,57),(157,169,1,1,0,'479R Green Ln W',479,'R',NULL,'Green','Ln','W',NULL,NULL,NULL,NULL,'Shasta Lake',1,1004,NULL,'96079',NULL,1228,40.686639,-122.334778,0,NULL,NULL,57),(158,171,1,1,0,'207W Caulder Pl S',207,'W',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Harlan',1,1014,NULL,'51593',NULL,1228,41.332943,-95.587197,0,NULL,NULL,58),(159,184,1,1,0,'207W Caulder Pl S',207,'W',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Harlan',1,1014,NULL,'51593',NULL,1228,41.332943,-95.587197,0,NULL,NULL,58),(160,130,1,1,0,'207W Caulder Pl S',207,'W',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Harlan',1,1014,NULL,'51593',NULL,1228,41.332943,-95.587197,0,NULL,NULL,58),(161,197,1,1,0,'207W Caulder Pl S',207,'W',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Harlan',1,1014,NULL,'51593',NULL,1228,41.332943,-95.587197,0,NULL,NULL,58),(162,114,1,1,0,'138S Jackson Rd E',138,'S',NULL,'Jackson','Rd','E',NULL,NULL,NULL,NULL,'Reseda',1,1004,NULL,'91337',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59),(163,154,1,1,0,'138S Jackson Rd E',138,'S',NULL,'Jackson','Rd','E',NULL,NULL,NULL,NULL,'Reseda',1,1004,NULL,'91337',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59),(164,160,1,0,0,'138S Jackson Rd E',138,'S',NULL,'Jackson','Rd','E',NULL,NULL,NULL,NULL,'Reseda',1,1004,NULL,'91337',NULL,1228,33.786594,-118.298662,0,NULL,NULL,59),(165,170,1,1,0,'889L Northpoint Ln W',889,'L',NULL,'Northpoint','Ln','W',NULL,NULL,NULL,NULL,'Lakewood',1,1046,NULL,'98497',NULL,1228,47.066193,-122.113223,0,NULL,NULL,NULL),(166,100,1,1,0,'228F Cadell Pl NE',228,'F',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Alcester',1,1040,NULL,'57001',NULL,1228,42.974216,-96.63848,0,NULL,NULL,60),(167,148,1,1,0,'228F Cadell Pl NE',228,'F',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Alcester',1,1040,NULL,'57001',NULL,1228,42.974216,-96.63848,0,NULL,NULL,60),(168,179,1,1,0,'228F Cadell Pl NE',228,'F',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Alcester',1,1040,NULL,'57001',NULL,1228,42.974216,-96.63848,0,NULL,NULL,60),(169,113,1,1,0,'228F Cadell Pl NE',228,'F',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Alcester',1,1040,NULL,'57001',NULL,1228,42.974216,-96.63848,0,NULL,NULL,60),(170,70,1,0,0,'486G Caulder Ln NE',486,'G',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,61),(171,195,1,1,0,'486G Caulder Ln NE',486,'G',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,61),(172,156,1,1,0,'486G Caulder Ln NE',486,'G',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,61),(173,72,1,1,0,'486G Caulder Ln NE',486,'G',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,61),(174,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),(175,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),(176,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_address` ENABLE KEYS */; UNLOCK TABLES; @@ -208,7 +208,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact` WRITE; /*!40000 ALTER TABLE `civicrm_contact` DISABLE KEYS */; -INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2020-06-04 09:37:59'),(2,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'States Legal School','States Legal School',NULL,NULL,NULL,NULL,NULL,'Both','633939673',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'States Legal School',NULL,NULL,NULL,0,NULL,NULL,NULL,'States Legal School',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(3,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Ashley','Ashley McReynolds',NULL,NULL,NULL,'2',NULL,'Both','68872917',NULL,'Sample Data','Ashley','O','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley McReynolds',NULL,NULL,'1979-08-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(4,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Josefa','Josefa Olsen',NULL,NULL,NULL,'1',NULL,'Both','2520751648',NULL,'Sample Data','Josefa','U','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Olsen',NULL,1,'1996-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Brent','Mr. Brent Prentice III',NULL,NULL,NULL,NULL,NULL,'Both','279352372',NULL,'Sample Data','Brent','Z','Prentice',3,4,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Mr. Brent Prentice III',NULL,2,'1979-03-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kathleen','Dr. Kathleen Jensen',NULL,NULL,NULL,'2',NULL,'Both','2413791663',NULL,'Sample Data','Kathleen','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Dr. Kathleen Jensen',NULL,1,'1966-04-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Kenny','Kenny Smith II',NULL,NULL,NULL,'1',NULL,'Both','2487730925',NULL,'Sample Data','Kenny','C','Smith',NULL,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Smith II',NULL,2,'2002-11-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(8,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Jed','Jed Jones',NULL,NULL,NULL,NULL,NULL,'Both','4090118208',NULL,'Sample Data','Jed','X','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Jones',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(9,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson-Jensen, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Samson-Jensen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1650164624',NULL,'Sample Data','BrzÄ™czysÅ‚aw','P','Samson-Jensen',NULL,2,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Samson-Jensen Sr.',NULL,2,'1975-01-26',0,NULL,NULL,NULL,'College Environmental Center',NULL,NULL,69,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(10,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Rural Development Solutions','Rural Development Solutions',NULL,NULL,NULL,'1',NULL,'Both','3615491997',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Development Solutions',NULL,NULL,NULL,0,NULL,NULL,29,'Rural Development Solutions',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Brigette','Brigette Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3260851036',NULL,'Sample Data','Brigette','D','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Deforest',NULL,NULL,'1989-11-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Magan','Mrs. Magan DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','3991472147',NULL,'Sample Data','Magan','','DÃaz',1,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Mrs. Magan DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(13,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Arlyne','Ms. Arlyne Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2653015935',NULL,'Sample Data','Arlyne','','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Ms. Arlyne Jensen',NULL,NULL,'1942-11-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(14,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-DÃaz, Rosario','Dr. Rosario Jacobs-DÃaz Jr.',NULL,NULL,NULL,'1',NULL,'Both','2143728224',NULL,'Sample Data','Rosario','R','Jacobs-DÃaz',4,1,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Dr. Rosario Jacobs-DÃaz Jr.',NULL,2,'1991-09-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(15,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Wilson, Omar','Omar Wilson',NULL,NULL,NULL,'4',NULL,'Both','941814711',NULL,'Sample Data','Omar','K','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Wilson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(16,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Rural Empowerment Fellowship','Rural Empowerment Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','523985870',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Empowerment Fellowship',NULL,NULL,NULL,0,NULL,NULL,98,'Rural Empowerment Fellowship',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Irvin','Mr. Irvin Cooper',NULL,NULL,NULL,NULL,NULL,'Both','1295806812',NULL,'Sample Data','Irvin','','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Mr. Irvin Cooper',NULL,2,'1955-10-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(18,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Norris','Dr. Norris Deforest',NULL,NULL,NULL,'1',NULL,'Both','3342248355',NULL,'Sample Data','Norris','','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Deforest',NULL,2,'1982-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jacobs-daz.lou@testing.info','jacobs-daz.lou@testing.info',NULL,NULL,NULL,NULL,NULL,'Both','2765129680',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear jacobs-daz.lou@testing.info',1,NULL,'Dear jacobs-daz.lou@testing.info',1,NULL,'jacobs-daz.lou@testing.info',NULL,NULL,NULL,0,NULL,NULL,NULL,'Lincoln Wellness Systems',NULL,NULL,27,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Iris','Iris Grant',NULL,NULL,NULL,NULL,NULL,'Both','2380499675',NULL,'Sample Data','Iris','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Grant',NULL,NULL,'1986-07-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(21,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker-Yadav, Erik','Erik Parker-Yadav II',NULL,NULL,NULL,'3',NULL,'Both','484276151',NULL,'Sample Data','Erik','','Parker-Yadav',NULL,3,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Parker-Yadav II',NULL,2,'1994-12-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(22,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Herminia','Herminia Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2587007542',NULL,'Sample Data','Herminia','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Bachman',NULL,1,'2001-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(23,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-DÃaz family','Jacobs-DÃaz family',NULL,NULL,NULL,'5',NULL,'Both','119867798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs-DÃaz family',5,NULL,'Dear Jacobs-DÃaz family',2,NULL,'Jacobs-DÃaz family',NULL,NULL,NULL,0,NULL,'Jacobs-DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-Deforest, Elizabeth','Elizabeth Jacobs-Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2998065823',NULL,'Sample Data','Elizabeth','N','Jacobs-Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Jacobs-Deforest',NULL,1,'2012-06-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(25,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Parker-Yadav family','Parker-Yadav family',NULL,NULL,NULL,'1',NULL,'Both','3273197186',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker-Yadav family',5,NULL,'Dear Parker-Yadav family',2,NULL,'Parker-Yadav family',NULL,NULL,NULL,0,NULL,'Parker-Yadav family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(26,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'lincolnivanov54@fishmail.org','lincolnivanov54@fishmail.org',NULL,NULL,NULL,NULL,NULL,'Both','530522230',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear lincolnivanov54@fishmail.org',1,NULL,'Dear lincolnivanov54@fishmail.org',1,NULL,'lincolnivanov54@fishmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(27,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Lincoln Wellness Systems','Lincoln Wellness Systems',NULL,NULL,NULL,'2',NULL,'Both','3019785501',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Wellness Systems',NULL,NULL,NULL,0,NULL,NULL,19,'Lincoln Wellness Systems',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(28,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Russell','Russell Blackwell',NULL,NULL,NULL,'2',NULL,'Both','2850885391',NULL,'Sample Data','Russell','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Blackwell',NULL,NULL,'2001-08-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Irvin','Irvin Zope',NULL,NULL,NULL,NULL,NULL,'Both','1828686361',NULL,'Sample Data','Irvin','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Zope',NULL,2,'1991-11-07',0,NULL,NULL,NULL,'Rural Development Solutions',NULL,NULL,10,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Nicole','Dr. Nicole Nielsen',NULL,NULL,NULL,'2',NULL,'Both','1986505883',NULL,'Sample Data','Nicole','K','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Dr. Nicole Nielsen',NULL,1,'1979-06-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(31,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-Deforest family','Jacobs-Deforest family',NULL,NULL,NULL,NULL,NULL,'Both','2105138317',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs-Deforest family',5,NULL,'Dear Jacobs-Deforest family',2,NULL,'Jacobs-Deforest family',NULL,NULL,NULL,0,NULL,'Jacobs-Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Brent','Brent Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2357186266',NULL,'Sample Data','Brent','O','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Jacobs',NULL,2,'1982-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(33,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Grant family','Grant family',NULL,NULL,NULL,NULL,NULL,'Both','3228000340',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Grant family',5,NULL,'Dear Grant family',2,NULL,'Grant family',NULL,NULL,NULL,0,NULL,'Grant family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Winford','Winford Nielsen Sr.',NULL,NULL,NULL,'4',NULL,'Both','2406289221',NULL,'Sample Data','Winford','P','Nielsen',NULL,2,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Nielsen Sr.',NULL,2,'2006-03-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Lashawnda','Ms. Lashawnda Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1832484345',NULL,'Sample Data','Lashawnda','V','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Troy','Troy Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2945858562',NULL,'Sample Data','Troy','W','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Jacobs',NULL,2,'1969-04-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Alida','Ms. Alida Wagner',NULL,NULL,NULL,NULL,NULL,'Both','3788165868',NULL,'Sample Data','Alida','L','Wagner',2,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Ms. Alida Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Sharyn','Ms. Sharyn Terry',NULL,NULL,NULL,'3',NULL,'Both','3160433036',NULL,'Sample Data','Sharyn','U','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Ms. Sharyn Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Angelika','Angelika DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','4126805218',NULL,'Sample Data','Angelika','G','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika DÃaz',NULL,1,'1980-11-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(40,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Teddy','Teddy McReynolds Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3323367243',NULL,'Sample Data','Teddy','','McReynolds',NULL,1,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy McReynolds Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Troy','Mr. Troy Wattson Sr.',NULL,NULL,NULL,'3',NULL,'Both','189159826',NULL,'Sample Data','Troy','','Wattson',3,2,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Mr. Troy Wattson Sr.',NULL,NULL,'1989-05-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(42,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Betty','Betty Deforest',NULL,NULL,NULL,'3',NULL,'Both','189178139',NULL,'Sample Data','Betty','E','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Deforest',NULL,NULL,'1986-06-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Betty','Dr. Betty Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2283344606',NULL,'Sample Data','Betty','Y','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Dr. Betty Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(44,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Jacob','Dr. Jacob Terrell',NULL,NULL,NULL,NULL,NULL,'Both','218246160',NULL,'Sample Data','Jacob','','Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Dr. Jacob Terrell',NULL,NULL,'1939-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Laree','Laree Grant',NULL,NULL,NULL,'4',NULL,'Both','2029067467',NULL,'Sample Data','Laree','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Grant',NULL,NULL,'1999-12-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(46,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Junko','Ms. Junko Jensen',NULL,NULL,NULL,'1',NULL,'Both','2889888199',NULL,'Sample Data','Junko','F','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Ms. Junko Jensen',NULL,1,'1979-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(47,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell, Esta','Esta Terrell',NULL,NULL,NULL,NULL,NULL,'Both','3319173143',NULL,'Sample Data','Esta','S','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Terrell',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(48,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Teddy','Teddy Yadav Jr.',NULL,NULL,NULL,'3',NULL,'Both','456817363',NULL,'Sample Data','Teddy','G','Yadav',NULL,1,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Yadav Jr.',NULL,2,'1972-09-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(49,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Rural Empowerment Alliance','Rural Empowerment Alliance',NULL,NULL,NULL,'4',NULL,'Both','457022423',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Empowerment Alliance',NULL,NULL,NULL,0,NULL,NULL,112,'Rural Empowerment Alliance',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(50,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Carmel Culture Alliance','Carmel Culture Alliance',NULL,NULL,NULL,'3',NULL,'Both','818107355',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Carmel Culture Alliance',NULL,NULL,NULL,0,NULL,NULL,NULL,'Carmel Culture Alliance',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Rodrigo','Mr. Rodrigo DÃaz Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1921232492',NULL,'Sample Data','Rodrigo','X','DÃaz',3,2,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Mr. Rodrigo DÃaz Sr.',NULL,2,'1934-11-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(52,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Milwaukee Development Systems','Milwaukee Development Systems',NULL,NULL,NULL,NULL,NULL,'Both','639694741',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Milwaukee Development Systems',NULL,NULL,NULL,0,NULL,NULL,NULL,'Milwaukee Development Systems',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Carlos','Mr. Carlos McReynolds III',NULL,NULL,NULL,NULL,NULL,'Both','1986804051',NULL,'Sample Data','Carlos','M','McReynolds',3,4,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Mr. Carlos McReynolds III',NULL,2,'1972-01-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(54,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'DÃaz, Angelika','Mrs. Angelika DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','4126805218',NULL,'Sample Data','Angelika','','DÃaz',1,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Mrs. Angelika DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(55,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Terry, Megan','Mrs. Megan Terry',NULL,NULL,NULL,'1',NULL,'Both','3263409952',NULL,'Sample Data','Megan','F','Terry',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Terry',NULL,1,'1992-10-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(56,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Dimitrov, Sharyn','Sharyn Dimitrov',NULL,NULL,NULL,'5',NULL,'Both','1888129683',NULL,'Sample Data','Sharyn','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Dimitrov',NULL,1,'1968-11-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(57,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Kenny','Mr. Kenny Patel III',NULL,NULL,NULL,NULL,NULL,'Both','73584714',NULL,'Sample Data','Kenny','','Patel',3,4,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Patel III',NULL,2,'1936-07-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(58,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Kathlyn','Ms. Kathlyn Wilson',NULL,NULL,NULL,NULL,NULL,'Both','3568448992',NULL,'Sample Data','Kathlyn','R','Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Ms. Kathlyn Wilson',NULL,NULL,'1975-08-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Craig','Craig Olsen III',NULL,NULL,NULL,'5',NULL,'Both','1378827194',NULL,'Sample Data','Craig','U','Olsen',NULL,4,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Olsen III',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Billy','Billy Wilson',NULL,NULL,NULL,NULL,NULL,'Both','93183395',NULL,'Sample Data','Billy','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Wilson',NULL,2,'1990-10-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(61,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Elbert','Mr. Elbert Adams',NULL,NULL,NULL,NULL,NULL,'Both','3476535287',NULL,'Sample Data','Elbert','','Adams',3,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(62,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Maria','Maria Samson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1039221596',NULL,'Sample Data','Maria','K','Samson',NULL,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Samson Jr.',NULL,2,'1960-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Truman','Mr. Truman Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','2301494139',NULL,'Sample Data','Truman','N','Ivanov',3,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Mr. Truman Ivanov',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(64,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Adams-Ivanov, Margaret','Margaret Adams-Ivanov',NULL,NULL,NULL,'1',NULL,'Both','3449902709',NULL,'Sample Data','Margaret','','Adams-Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Adams-Ivanov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Lou','Dr. Lou Adams',NULL,NULL,NULL,NULL,NULL,'Both','4150447467',NULL,'Sample Data','Lou','Y','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Dr. Lou Adams',NULL,2,'1942-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Ivey','Mrs. Ivey Cooper',NULL,NULL,NULL,NULL,NULL,'Both','4197158146',NULL,'Sample Data','Ivey','','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey Cooper',NULL,1,'1949-02-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Ray','Mr. Ray Cruz',NULL,NULL,NULL,'3',NULL,'Both','1703831601',NULL,'Sample Data','Ray','','Cruz',3,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Cruz',NULL,2,'1949-10-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'rz.barkley@lol.co.pl','rz.barkley@lol.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','265872984',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear rz.barkley@lol.co.pl',1,NULL,'Dear rz.barkley@lol.co.pl',1,NULL,'rz.barkley@lol.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(69,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'College Environmental Center','College Environmental Center',NULL,NULL,NULL,NULL,NULL,'Both','440895939',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'College Environmental Center',NULL,NULL,NULL,0,NULL,NULL,9,'College Environmental Center',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Tanya','Mrs. Tanya Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2953066257',NULL,'Sample Data','Tanya','D','Barkley',1,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Mrs. Tanya Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(71,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Maxwell','Maxwell ÅÄ…chowski II',NULL,NULL,NULL,NULL,NULL,'Both','1815601516',NULL,'Sample Data','Maxwell','D','ÅÄ…chowski',NULL,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell ÅÄ…chowski II',NULL,NULL,'2000-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(72,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Grant, Jerome','Jerome Grant',NULL,NULL,NULL,'1',NULL,'Both','92527229',NULL,'Sample Data','Jerome','R','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Jerome Grant',NULL,2,'1960-07-31',0,NULL,NULL,NULL,'Hoopeston Education Academy',NULL,NULL,106,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Merrie','Merrie Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','779748961',NULL,'Sample Data','Merrie','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(74,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov, Clint','Clint Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3280498131',NULL,'Sample Data','Clint','','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Ivanov',NULL,2,'1958-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Esta','Esta ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','195412899',NULL,'Sample Data','Esta','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta ÅÄ…chowski',NULL,1,'1957-11-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(76,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Norris','Norris Yadav',NULL,NULL,NULL,NULL,NULL,'Both','3408497299',NULL,'Sample Data','Norris','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Yadav',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Wattson, Junko','Dr. Junko ÅÄ…chowski-Wattson',NULL,NULL,NULL,NULL,NULL,'Both','3169136614',NULL,'Sample Data','Junko','','ÅÄ…chowski-Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Dr. Junko ÅÄ…chowski-Wattson',NULL,1,'1964-03-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(78,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson, Carylon','Carylon Wattson',NULL,NULL,NULL,'4',NULL,'Both','1140408074',NULL,'Sample Data','Carylon','P','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Wattson',NULL,NULL,'2011-10-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(79,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson family','Wattson family',NULL,NULL,NULL,NULL,NULL,'Both','2851339192',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson family',5,NULL,'Dear Wattson family',2,NULL,'Wattson family',NULL,NULL,NULL,0,NULL,'Wattson family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Alida','Alida Smith',NULL,NULL,NULL,'2',NULL,'Both','1328804767',NULL,'Sample Data','Alida','A','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Alida Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'tbachman@testmail.net','tbachman@testmail.net',NULL,NULL,NULL,NULL,NULL,'Both','1703362243',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear tbachman@testmail.net',1,NULL,'Dear tbachman@testmail.net',1,NULL,'tbachman@testmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Carylon','Carylon Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3841280474',NULL,'Sample Data','Carylon','G','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Ivanov',NULL,1,'2007-05-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(83,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Missouri Advocacy Partnership','Missouri Advocacy Partnership',NULL,NULL,NULL,'5',NULL,'Both','2468596284',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Missouri Advocacy Partnership',NULL,NULL,NULL,0,NULL,NULL,135,'Missouri Advocacy Partnership',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Beula','Mrs. Beula Terrell',NULL,NULL,NULL,'5',NULL,'Both','413084989',NULL,'Sample Data','Beula','C','Terrell',1,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Mrs. Beula Terrell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Josefa','Josefa Bachman',NULL,NULL,NULL,NULL,NULL,'Both','3802069296',NULL,'Sample Data','Josefa','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Iris','Dr. Iris Adams',NULL,NULL,NULL,NULL,NULL,'Both','80644186',NULL,'Sample Data','Iris','O','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Adams',NULL,1,'1972-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(87,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Brigette','Brigette Bachman',NULL,NULL,NULL,NULL,NULL,'Both','692911964',NULL,'Sample Data','Brigette','Y','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Bachman',NULL,1,'1966-11-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Nicole','Nicole Nielsen',NULL,NULL,NULL,'1',NULL,'Both','1986505883',NULL,'Sample Data','Nicole','G','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Nielsen',NULL,1,'1964-04-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(89,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov family','Dimitrov family',NULL,NULL,NULL,'5',NULL,'Both','3351288571',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Dimitrov family',5,NULL,'Dear Dimitrov family',2,NULL,'Dimitrov family',NULL,NULL,NULL,0,NULL,'Dimitrov family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(90,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'nielsenw@infomail.info','nielsenw@infomail.info',NULL,NULL,NULL,'3',NULL,'Both','2193853686',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear nielsenw@infomail.info',1,NULL,'Dear nielsenw@infomail.info',1,NULL,'nielsenw@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Jay','Mr. Jay Blackwell II',NULL,NULL,NULL,'1',NULL,'Both','87759303',NULL,'Sample Data','Jay','I','Blackwell',3,3,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Mr. Jay Blackwell II',NULL,2,NULL,0,NULL,NULL,NULL,'Iowa Software Services',NULL,NULL,144,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(92,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Bachman, Josefa','Josefa Bachman',NULL,NULL,NULL,NULL,NULL,'Both','3802069296',NULL,'Sample Data','Josefa','A','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Bachman',NULL,1,'2016-03-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(93,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Clint','Dr. Clint McReynolds',NULL,NULL,NULL,'3',NULL,'Both','3847785527',NULL,'Sample Data','Clint','','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Dr. Clint McReynolds',NULL,2,'1980-01-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:17'),(94,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'swattson12@spamalot.co.nz','swattson12@spamalot.co.nz',NULL,NULL,NULL,'3',NULL,'Both','3572901193',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear swattson12@spamalot.co.nz',1,NULL,'Dear swattson12@spamalot.co.nz',1,NULL,'swattson12@spamalot.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(95,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,NULL,NULL,'Both','1714131215',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman family',5,NULL,'Dear Bachman family',2,NULL,'Bachman family',NULL,NULL,NULL,0,NULL,'Bachman family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(96,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Samson-Jensen family','Samson-Jensen family',NULL,NULL,NULL,NULL,NULL,'Both','2833861314',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson-Jensen family',5,NULL,'Dear Samson-Jensen family',2,NULL,'Samson-Jensen family',NULL,NULL,NULL,0,NULL,'Samson-Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(97,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry-Wilson, Eleonor','Ms. Eleonor Terry-Wilson',NULL,NULL,NULL,NULL,NULL,'Both','390950992',NULL,'Sample Data','Eleonor','','Terry-Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Ms. Eleonor Terry-Wilson',NULL,1,'1970-06-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Sanford','Sanford Blackwell',NULL,NULL,NULL,'3',NULL,'Both','3211231891',NULL,'Sample Data','Sanford','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Blackwell',NULL,NULL,'1968-12-25',0,NULL,NULL,NULL,'Rural Empowerment Fellowship',NULL,NULL,16,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Claudio','Dr. Claudio Zope Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3870428103',NULL,'Sample Data','Claudio','','Zope',4,1,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Dr. Claudio Zope Jr.',NULL,NULL,'1961-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(100,'Household',NULL,0,1,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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(101,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Hartford Legal Services','Hartford Legal Services',NULL,NULL,NULL,NULL,NULL,'Both','1318700439',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hartford Legal Services',NULL,NULL,NULL,0,NULL,NULL,184,'Hartford Legal Services',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(102,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Zope family','Zope family',NULL,NULL,NULL,'4',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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Kacey','Kacey Jacobs',NULL,NULL,NULL,'5',NULL,'Both','1510706462',NULL,'Sample Data','Kacey','Q','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Jacobs',NULL,NULL,'1986-01-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz-Cruz, Lashawnda','Lashawnda DÃaz-Cruz',NULL,NULL,NULL,'5',NULL,'Both','3516620787',NULL,'Sample Data','Lashawnda','','DÃaz-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda DÃaz-Cruz',NULL,NULL,'1987-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Errol','Errol ÅÄ…chowski II',NULL,NULL,NULL,NULL,NULL,'Both','4217414454',NULL,'Sample Data','Errol','','ÅÄ…chowski',NULL,3,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol ÅÄ…chowski II',NULL,2,'2002-07-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(106,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Hoopeston Education Academy','Hoopeston Education Academy',NULL,NULL,NULL,NULL,NULL,'Both','2938746154',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hoopeston Education Academy',NULL,NULL,NULL,0,NULL,NULL,72,'Hoopeston Education Academy',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Valene','Valene Wattson',NULL,NULL,NULL,NULL,NULL,'Both','3149820460',NULL,'Sample Data','Valene','S','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Sonny','Sonny Ivanov III',NULL,NULL,NULL,NULL,NULL,'Both','3391307655',NULL,'Sample Data','Sonny','','Ivanov',NULL,4,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Ivanov III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(109,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Ivey','Mrs. Ivey Zope',NULL,NULL,NULL,'3',NULL,'Both','2367978806',NULL,'Sample Data','Ivey','P','Zope',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey Zope',NULL,NULL,'1989-07-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Allan','Allan Parker III',NULL,NULL,NULL,NULL,NULL,'Both','1311923270',NULL,'Sample Data','Allan','R','Parker',NULL,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Parker III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(111,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Iris','Dr. Iris Yadav',NULL,NULL,NULL,NULL,NULL,'Both','3117553975',NULL,'Sample Data','Iris','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Yadav',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Herminia','Herminia Yadav',NULL,NULL,NULL,'5',NULL,'Both','201559464',NULL,'Sample Data','Herminia','J','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Yadav',NULL,NULL,'1999-11-07',0,NULL,NULL,NULL,'Rural Empowerment Alliance',NULL,NULL,49,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(113,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cruz, Sonny','Sonny Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3533503854',NULL,'Sample Data','Sonny','E','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Cruz',NULL,NULL,'1970-08-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(114,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Allan','Allan Adams Jr.',NULL,NULL,NULL,NULL,NULL,'Both','221973733',NULL,'Sample Data','Allan','O','Adams',NULL,1,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Adams Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(115,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Zope, Rebekah','Ms. Rebekah Zope',NULL,NULL,NULL,'5',NULL,'Both','1246541996',NULL,'Sample Data','Rebekah','S','Zope',2,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Ms. Rebekah Zope',NULL,NULL,'1949-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Kathlyn','Dr. Kathlyn Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3934921435',NULL,'Sample Data','Kathlyn','','Dimitrov',4,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Dr. Kathlyn Dimitrov',NULL,1,'1986-09-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Mei','Mei Cruz',NULL,NULL,NULL,'3',NULL,'Both','187652380',NULL,'Sample Data','Mei','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Cruz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(118,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Valene','Dr. Valene Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3505308616',NULL,'Sample Data','Valene','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Dr. Valene Ivanov',NULL,1,'1955-09-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Miguel','Mr. Miguel Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1633688376',NULL,'Sample Data','Miguel','J','Samuels',3,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Mr. Miguel Samuels',NULL,2,'1961-10-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(120,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Alexia','Ms. Alexia Zope',NULL,NULL,NULL,'5',NULL,'Both','2939872630',NULL,'Sample Data','Alexia','','Zope',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia Zope',NULL,1,'1970-04-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(121,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Progressive Development Fellowship','Progressive Development Fellowship',NULL,NULL,NULL,'5',NULL,'Both','3744338254',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Progressive Development Fellowship',NULL,NULL,NULL,0,NULL,NULL,NULL,'Progressive Development Fellowship',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(122,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Oklahoma Food Network','Oklahoma Food Network',NULL,NULL,NULL,NULL,NULL,'Both','2947187712',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Oklahoma Food Network',NULL,NULL,NULL,0,NULL,NULL,164,'Oklahoma Food Network',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Justina','Mrs. Justina McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1146130692',NULL,'Sample Data','Justina','L','McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Mrs. Justina McReynolds',NULL,1,'1939-09-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(124,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Herminia','Herminia Dimitrov',NULL,NULL,NULL,'5',NULL,'Both','4241728416',NULL,'Sample Data','Herminia','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Dimitrov',NULL,1,'1965-10-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(125,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González, Felisha','Felisha González',NULL,NULL,NULL,NULL,NULL,'Both','1431109871',NULL,'Sample Data','Felisha','','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha González',NULL,1,'1986-01-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Billy','Dr. Billy Samuels II',NULL,NULL,NULL,NULL,NULL,'Both','92935923',NULL,'Sample Data','Billy','A','Samuels',4,3,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Samuels II',NULL,2,'1949-03-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(127,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Scott','Dr. Scott Bachman',NULL,NULL,NULL,'3',NULL,'Both','3146978953',NULL,'Sample Data','Scott','Q','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Bachman',NULL,2,'1966-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(128,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Juliann','Juliann Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3366299166',NULL,'Sample Data','Juliann','N','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Deforest',NULL,1,'1976-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ivanov.j.santina62@sample.net','ivanov.j.santina62@sample.net',NULL,NULL,NULL,NULL,NULL,'Both','2263497143',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ivanov.j.santina62@sample.net',1,NULL,'Dear ivanov.j.santina62@sample.net',1,NULL,'ivanov.j.santina62@sample.net',NULL,NULL,NULL,0,NULL,NULL,NULL,'Dowlen Education School',NULL,NULL,152,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(130,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Smith family','Smith family',NULL,NULL,NULL,'5',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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Bernadette','Bernadette González',NULL,NULL,NULL,NULL,NULL,'Both','3507551861',NULL,'Sample Data','Bernadette','S','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette González',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Elina','Elina Terry',NULL,NULL,NULL,NULL,NULL,'Both','2453833535',NULL,'Sample Data','Elina','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Terry',NULL,1,'1939-06-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(133,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'McReynolds, Truman','Dr. Truman McReynolds Sr.',NULL,NULL,NULL,'3',NULL,'Both','779089403',NULL,'Sample Data','Truman','U','McReynolds',4,2,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Dr. Truman McReynolds Sr.',NULL,2,'1989-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Deforest, Mei','Mrs. Mei ÅÄ…chowski-Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2036331312',NULL,'Sample Data','Mei','','ÅÄ…chowski-Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mrs. Mei ÅÄ…chowski-Deforest',NULL,NULL,'1957-11-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(135,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Lee, Ray','Ray Lee',NULL,NULL,NULL,'1',NULL,'Both','77853179',NULL,'Sample Data','Ray','Z','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Lee',NULL,2,'1990-10-02',0,NULL,NULL,NULL,'Missouri Advocacy Partnership',NULL,NULL,83,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(136,'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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Norris','Norris Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','3047702889',NULL,'Sample Data','Norris','X','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Jacobs',NULL,2,'2011-03-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:17'),(138,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Esta','Esta Adams',NULL,NULL,NULL,'4',NULL,'Both','1125073025',NULL,'Sample Data','Esta','C','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Adams',NULL,1,'1955-05-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Erik','Erik ÅÄ…chowski Sr.',NULL,NULL,NULL,NULL,NULL,'Both','366881942',NULL,'Sample Data','Erik','N','ÅÄ…chowski',NULL,2,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik ÅÄ…chowski Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'russelldimitrov44@mymail.co.in','russelldimitrov44@mymail.co.in',NULL,NULL,NULL,'5',NULL,'Both','3263195812',NULL,'Sample Data',NULL,NULL,NULL,3,1,NULL,NULL,1,NULL,'Dear russelldimitrov44@mymail.co.in',1,NULL,'Dear russelldimitrov44@mymail.co.in',1,NULL,'russelldimitrov44@mymail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(141,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Allan','Mr. Allan Ivanov',NULL,NULL,NULL,'1',NULL,'Both','3313048045',NULL,'Sample Data','Allan','A','Ivanov',3,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Ivanov',NULL,2,'1983-05-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Bob','Bob Grant III',NULL,NULL,NULL,'5',NULL,'Both','2147877951',NULL,'Sample Data','Bob','G','Grant',NULL,4,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Grant III',NULL,2,'2000-02-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-Deforest, Alexia','Alexia Jacobs-Deforest',NULL,NULL,NULL,'5',NULL,'Both','708896717',NULL,'Sample Data','Alexia','T','Jacobs-Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Jacobs-Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(144,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Iowa Software Services','Iowa Software Services',NULL,NULL,NULL,NULL,NULL,'Both','2581080232',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Iowa Software Services',NULL,NULL,NULL,0,NULL,NULL,91,'Iowa Software Services',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Elina','Mrs. Elina Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1943101487',NULL,'Sample Data','Elina','K','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Mrs. Elina Deforest',NULL,1,'1992-10-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Billy','Mr. Billy Terrell',NULL,NULL,NULL,'4',NULL,'Both','1389531692',NULL,'Sample Data','Billy','Y','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Mr. Billy Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Teresa','Teresa ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','4252064413',NULL,'Sample Data','Teresa','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa ÅÄ…chowski',NULL,1,'1938-10-05',1,'2020-04-22',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(148,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,'4',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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(149,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Princess','Princess Prentice',NULL,NULL,NULL,NULL,NULL,'Both','4046145534',NULL,'Sample Data','Princess','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Prentice',NULL,1,'1947-02-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(150,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Pasadena Environmental School','Pasadena Environmental School',NULL,NULL,NULL,NULL,NULL,'Both','1675051761',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pasadena Environmental School',NULL,NULL,NULL,0,NULL,NULL,NULL,'Pasadena Environmental School',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(151,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz-Cruz, Shauna','Shauna DÃaz-Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3508550130',NULL,'Sample Data','Shauna','J','DÃaz-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna DÃaz-Cruz',NULL,NULL,'1984-07-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(152,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Dowlen Education School','Dowlen Education School',NULL,NULL,NULL,'5',NULL,'Both','2260602459',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dowlen Education School',NULL,NULL,NULL,0,NULL,NULL,129,'Dowlen Education School',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(153,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov, Merrie','Merrie Ivanov',NULL,NULL,NULL,'2',NULL,'Both','2861667534',NULL,'Sample Data','Merrie','B','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'nielsent77@example.co.uk','nielsent77@example.co.uk',NULL,NULL,NULL,'4',NULL,'Both','244806877',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear nielsent77@example.co.uk',1,NULL,'Dear nielsent77@example.co.uk',1,NULL,'nielsent77@example.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(155,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Grant, Bryon','Mr. Bryon Grant',NULL,NULL,NULL,NULL,NULL,'Both','3825566776',NULL,'Sample Data','Bryon','','Grant',3,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon Grant',NULL,2,'1970-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(156,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,'Both','2407077255',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski family',5,NULL,'Dear ÅÄ…chowski family',2,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Rebekah','Rebekah Barkley',NULL,NULL,NULL,'2',NULL,'Both','3218825396',NULL,'Sample Data','Rebekah','K','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Barkley',NULL,NULL,'1949-09-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(158,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,'2',NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(159,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Truman','Mr. Truman Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1537569075',NULL,'Sample Data','Truman','H','Wilson',3,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Mr. Truman Wilson',NULL,2,'1959-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(160,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'elizabetht@example.net','elizabetht@example.net',NULL,NULL,NULL,NULL,NULL,'Both','4190339068',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear elizabetht@example.net',1,NULL,'Dear elizabetht@example.net',1,NULL,'elizabetht@example.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(161,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Blackwell, Valene','Valene Blackwell',NULL,NULL,NULL,'3',NULL,'Both','3670255254',NULL,'Sample Data','Valene','I','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Blackwell',NULL,NULL,'1957-06-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(162,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,NULL,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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Beula','Beula Jameson',NULL,NULL,NULL,NULL,NULL,'Both','3713419157',NULL,'Sample Data','Beula','S','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Jameson',NULL,1,'2010-01-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Brigette','Brigette Cruz',NULL,NULL,NULL,'3',NULL,'Both','2081611913',NULL,'Sample Data','Brigette','A','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Cruz',NULL,1,'1995-10-07',0,NULL,NULL,NULL,'Oklahoma Food Network',NULL,NULL,122,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(165,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Carlos','Carlos Wilson Jr.',NULL,NULL,NULL,'1',NULL,'Both','61259163',NULL,'Sample Data','Carlos','','Wilson',NULL,1,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Wilson Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(166,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,NULL,NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(167,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'South Dakota Agriculture Solutions','South Dakota Agriculture Solutions',NULL,NULL,NULL,NULL,NULL,'Both','3201475721',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'South Dakota Agriculture Solutions',NULL,NULL,NULL,0,NULL,NULL,NULL,'South Dakota Agriculture Solutions',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(168,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Omar','Dr. Omar Jensen III',NULL,NULL,NULL,NULL,NULL,'Both','901398935',NULL,'Sample Data','Omar','','Jensen',4,4,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Dr. Omar Jensen III',NULL,NULL,'1958-06-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(169,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'sz.smith15@fakemail.net','sz.smith15@fakemail.net',NULL,NULL,NULL,'1',NULL,'Both','2465389626',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear sz.smith15@fakemail.net',1,NULL,'Dear sz.smith15@fakemail.net',1,NULL,'sz.smith15@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(170,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Ivanov, Heidi','Mrs. Heidi Ivanov',NULL,NULL,NULL,'1',NULL,'Both','1354340123',NULL,'Sample Data','Heidi','','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Mrs. Heidi Ivanov',NULL,1,'1952-09-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Nicole','Nicole Parker',NULL,NULL,NULL,NULL,NULL,'Both','693554904',NULL,'Sample Data','Nicole','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Parker',NULL,1,'1954-09-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(172,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Kathlyn','Dr. Kathlyn Müller',NULL,NULL,NULL,NULL,NULL,'Both','3374170651',NULL,'Sample Data','Kathlyn','Q','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Dr. Kathlyn Müller',NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Lawerence','Lawerence Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2961144560',NULL,'Sample Data','Lawerence','L','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Bachman',NULL,NULL,'1973-08-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav-Bachman, Shauna','Dr. Shauna Yadav-Bachman',NULL,NULL,NULL,'4',NULL,'Both','3566842349',NULL,'Sample Data','Shauna','','Yadav-Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Yadav-Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Kiara','Kiara Müller',NULL,NULL,NULL,NULL,NULL,'Both','2544954591',NULL,'Sample Data','Kiara','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Müller',NULL,1,'1999-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(176,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Van Ness Environmental Fund','Van Ness Environmental Fund',NULL,NULL,NULL,NULL,NULL,'Both','1496684029',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Environmental Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Van Ness Environmental Fund',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(177,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Shauna','Mrs. Shauna Deforest',NULL,NULL,NULL,'1',NULL,'Both','826633613',NULL,'Sample Data','Shauna','N','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Mrs. Shauna Deforest',NULL,NULL,'1953-04-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Elina','Elina Grant',NULL,NULL,NULL,NULL,NULL,'Both','1935800100',NULL,'Sample Data','Elina','P','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Grant',NULL,1,'1967-06-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(179,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Kathleen','Kathleen McReynolds',NULL,NULL,NULL,'4',NULL,'Both','3353878517',NULL,'Sample Data','Kathleen','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen McReynolds',NULL,1,'1944-07-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(180,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz-Cruz family','DÃaz-Cruz family',NULL,NULL,NULL,'4',NULL,'Both','1886033493',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz-Cruz family',5,NULL,'Dear DÃaz-Cruz family',2,NULL,'DÃaz-Cruz family',NULL,NULL,NULL,0,NULL,'DÃaz-Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Megan','Megan Dimitrov',NULL,NULL,NULL,'2',NULL,'Both','604448148',NULL,'Sample Data','Megan','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Dimitrov',NULL,NULL,'2005-03-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(182,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Cadell Education Solutions','Cadell Education Solutions',NULL,NULL,NULL,NULL,NULL,'Both','340508447',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cadell Education Solutions',NULL,NULL,NULL,0,NULL,NULL,NULL,'Cadell Education Solutions',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Beula','Ms. Beula Smith',NULL,NULL,NULL,'3',NULL,'Both','2826835673',NULL,'Sample Data','Beula','','Smith',2,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Ms. Beula Smith',NULL,1,'1958-01-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(184,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker-Yadav, Russell','Dr. Russell Parker-Yadav',NULL,NULL,NULL,NULL,NULL,'Both','1688015483',NULL,'Sample Data','Russell','I','Parker-Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Parker-Yadav',NULL,2,NULL,0,NULL,NULL,NULL,'Hartford Legal Services',NULL,NULL,101,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Billy','Billy Jones',NULL,NULL,NULL,NULL,NULL,'Both','1398318930',NULL,'Sample Data','Billy','T','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Jones',NULL,2,'1952-10-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(186,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Omar','Omar Smith III',NULL,NULL,NULL,'5',NULL,'Both','1048289209',NULL,'Sample Data','Omar','A','Smith',NULL,4,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Smith III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(187,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Sherman','Dr. Sherman Jacobs',NULL,NULL,NULL,'2',NULL,'Both','4209151044',NULL,'Sample Data','Sherman','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Jacobs',NULL,NULL,'1964-03-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Troy','Dr. Troy Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2399364740',NULL,'Sample Data','Troy','','Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Dr. Troy Wagner',NULL,2,'1947-10-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(189,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz, Teresa','Teresa Cruz',NULL,NULL,NULL,NULL,NULL,'Both','4189039028',NULL,'Sample Data','Teresa','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Cruz',NULL,1,'1990-08-25',0,NULL,NULL,NULL,'Charleston Education Partners',NULL,NULL,200,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(190,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Kiara','Dr. Kiara Ivanov',NULL,NULL,NULL,'5',NULL,'Both','1100955182',NULL,'Sample Data','Kiara','V','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Dr. Kiara Ivanov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(191,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Blackwell, Teddy','Teddy Blackwell Sr.',NULL,NULL,NULL,'5',NULL,'Both','3440187169',NULL,'Sample Data','Teddy','G','Blackwell',NULL,2,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Blackwell Sr.',NULL,2,'1953-04-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(192,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Smith, Roland','Roland Smith Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2353910553',NULL,'Sample Data','Roland','F','Smith',NULL,2,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Smith Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(193,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,'4',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,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Iris','Dr. Iris McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2556119128',NULL,'Sample Data','Iris','','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris McReynolds',NULL,1,'1984-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(195,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Merrie','Mrs. Merrie DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2834257935',NULL,'Sample Data','Merrie','','DÃaz',1,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Mrs. Merrie DÃaz',NULL,1,'1985-02-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(196,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'kb.smith86@notmail.biz','kb.smith86@notmail.biz',NULL,NULL,NULL,'2',NULL,'Both','794258017',NULL,'Sample Data',NULL,NULL,NULL,4,1,NULL,NULL,1,NULL,'Dear kb.smith86@notmail.biz',1,NULL,'Dear kb.smith86@notmail.biz',1,NULL,'kb.smith86@notmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Jensen, Maxwell','Maxwell Samson-Jensen III',NULL,NULL,NULL,'4',NULL,'Both','451752409',NULL,'Sample Data','Maxwell','J','Samson-Jensen',NULL,4,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Samson-Jensen III',NULL,NULL,'2002-03-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:19'),(198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'errololsen14@notmail.com','errololsen14@notmail.com',NULL,NULL,NULL,'1',NULL,'Both','3866516603',NULL,'Sample Data',NULL,NULL,NULL,4,3,NULL,NULL,1,NULL,'Dear errololsen14@notmail.com',1,NULL,'Dear errololsen14@notmail.com',1,NULL,'errololsen14@notmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(199,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Justina','Justina Lee',NULL,NULL,NULL,NULL,NULL,'Both','2721326696',NULL,'Sample Data','Justina','S','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Lee',NULL,1,'1937-05-22',1,'2019-08-07',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(200,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Charleston Education Partners','Charleston Education Partners',NULL,NULL,NULL,'3',NULL,'Both','2507837447',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Charleston Education Partners',NULL,NULL,NULL,0,NULL,NULL,189,'Charleston Education Partners',NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'),(201,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds family','McReynolds family',NULL,NULL,NULL,NULL,NULL,'Both','3032680972',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear McReynolds family',5,NULL,'Dear McReynolds family',2,NULL,'McReynolds family',NULL,NULL,NULL,0,NULL,'McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-04 09:38:17','2020-06-04 09:38:18'); +INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2020-06-10 02:45:21'),(2,'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,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Kandace','Dr. Kandace Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3097920317',NULL,'Sample Data','Kandace','Q','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Dr. Kandace Cooper',NULL,1,'1978-09-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(4,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'reynolds.errol@testmail.net','reynolds.errol@testmail.net',NULL,NULL,NULL,NULL,NULL,'Both','485029899',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear reynolds.errol@testmail.net',1,NULL,'Dear reynolds.errol@testmail.net',1,NULL,'reynolds.errol@testmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(5,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner-Jacobs, Russell','Russell Wagner-Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','4167485278',NULL,'Sample Data','Russell','','Wagner-Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Wagner-Jacobs',NULL,2,'1983-11-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Lincoln','Lincoln Smith',NULL,NULL,NULL,NULL,NULL,'Both','3833936283',NULL,'Sample Data','Lincoln','J','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Smith',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jackson','Dr. Jackson Lee III',NULL,NULL,NULL,'1',NULL,'Both','3405561048',NULL,'Sample Data','Jackson','R','Lee',4,4,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Lee III',NULL,2,'1979-11-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(8,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Megan','Mrs. Megan Wagner',NULL,NULL,NULL,'2',NULL,'Both','3194270905',NULL,'Sample Data','Megan','','Wagner',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Wagner',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jacobjensen58@infomail.biz','jacobjensen58@infomail.biz',NULL,NULL,NULL,'4',NULL,'Both','1537976553',NULL,'Sample Data',NULL,NULL,NULL,4,1,NULL,NULL,1,NULL,'Dear jacobjensen58@infomail.biz',1,NULL,'Dear jacobjensen58@infomail.biz',1,NULL,'jacobjensen58@infomail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Jerome','Jerome Terry',NULL,NULL,NULL,NULL,NULL,'Both','2399613153',NULL,'Sample Data','Jerome','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Jerome Terry',NULL,2,'1942-05-01',1,'2019-06-19',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ru.smith69@spamalot.co.in','ru.smith69@spamalot.co.in',NULL,NULL,NULL,NULL,NULL,'Both','1615929152',NULL,'Sample Data',NULL,NULL,NULL,3,2,NULL,NULL,1,NULL,'Dear ru.smith69@spamalot.co.in',1,NULL,'Dear ru.smith69@spamalot.co.in',1,NULL,'ru.smith69@spamalot.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(12,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Shad','Shad Terry',NULL,NULL,NULL,NULL,NULL,'Both','3306428162',NULL,'Sample Data','Shad','D','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Terry',NULL,2,'1997-11-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(13,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cooper, Landon','Landon Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3917161471',NULL,'Sample Data','Landon','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Cooper',NULL,2,'2010-09-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(14,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ivanov.shad38@lol.org','ivanov.shad38@lol.org',NULL,NULL,NULL,NULL,NULL,'Both','1194442870',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear ivanov.shad38@lol.org',1,NULL,'Dear ivanov.shad38@lol.org',1,NULL,'ivanov.shad38@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Jina','Jina Parker',NULL,NULL,NULL,'3',NULL,'Both','3662235074',NULL,'Sample Data','Jina','N','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Parker',NULL,1,'1963-06-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Rosario','Rosario Barkley III',NULL,NULL,NULL,NULL,NULL,'Both','2313743843',NULL,'Sample Data','Rosario','V','Barkley',NULL,4,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Barkley III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(17,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,'Both','2407077255',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski family',5,NULL,'Dear ÅÄ…chowski family',2,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(18,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Wattson III',NULL,NULL,NULL,NULL,NULL,'Both','1189364369',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Wattson',NULL,4,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Wattson III',NULL,2,NULL,0,NULL,NULL,NULL,'Wisconsin Wellness Alliance',NULL,NULL,178,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(19,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Adams-Wilson, Ray','Ray Adams-Wilson II',NULL,NULL,NULL,NULL,NULL,'Both','2328256588',NULL,'Sample Data','Ray','Z','Adams-Wilson',NULL,3,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Adams-Wilson II',NULL,2,'1986-08-30',0,NULL,NULL,NULL,'Farmington Poetry Services',NULL,NULL,39,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(20,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Roberts, Allen','Mr. Allen Roberts',NULL,NULL,NULL,'4',NULL,'Both','1308913179',NULL,'Sample Data','Allen','','Roberts',3,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Roberts',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Brigette','Ms. Brigette Wilson',NULL,NULL,NULL,'1',NULL,'Both','4271380473',NULL,'Sample Data','Brigette','','Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Ms. Brigette Wilson',NULL,NULL,'1987-05-19',0,NULL,NULL,NULL,'Martin Luther King Education Center',NULL,NULL,123,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(22,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Felisha','Mrs. Felisha Wilson',NULL,NULL,NULL,'2',NULL,'Both','314865628',NULL,'Sample Data','Felisha','','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Mrs. Felisha Wilson',NULL,1,'1944-04-14',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(23,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Education Academy','Creative Education Academy',NULL,NULL,NULL,'2',NULL,'Both','61414175',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Education Academy',NULL,NULL,NULL,0,NULL,NULL,121,'Creative Education Academy',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(24,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Smith, Brittney','Brittney Smith',NULL,NULL,NULL,NULL,NULL,'Both','1142724087',NULL,'Sample Data','Brittney','D','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen-Wilson, Erik','Erik Jensen-Wilson',NULL,NULL,NULL,NULL,NULL,'Both','2019829380',NULL,'Sample Data','Erik','L','Jensen-Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Jensen-Wilson',NULL,2,'1984-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(26,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Justina','Mrs. Justina Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','2840548306',NULL,'Sample Data','Justina','','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Mrs. Justina Ivanov',NULL,1,'1951-01-23',0,NULL,NULL,NULL,'Paluxy Environmental Systems',NULL,NULL,60,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Brittney','Brittney González',NULL,NULL,NULL,'2',NULL,'Both','3632495561',NULL,'Sample Data','Brittney','X','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney González',NULL,1,'2004-04-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Erik','Erik Adams',NULL,NULL,NULL,NULL,NULL,'Both','1567928244',NULL,'Sample Data','Erik','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Adams',NULL,2,'1941-02-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bachman.esta@infomail.co.pl','bachman.esta@infomail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','3758157657',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bachman.esta@infomail.co.pl',1,NULL,'Dear bachman.esta@infomail.co.pl',1,NULL,'bachman.esta@infomail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,'United Technology Alliance',NULL,NULL,105,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(30,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Brittney','Brittney Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1729401768',NULL,'Sample Data','Brittney','F','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Wilson',NULL,1,'1947-12-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(31,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Arma Food Academy','Arma Food Academy',NULL,NULL,NULL,NULL,NULL,'Both','1487843057',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Arma Food Academy',NULL,NULL,NULL,0,NULL,NULL,NULL,'Arma Food Academy',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(32,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Justina','Ms. Justina ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','288351947',NULL,'Sample Data','Justina','','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Ms. Justina ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(33,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Ivey','Dr. Ivey Jacobs',NULL,NULL,NULL,'1',NULL,'Both','4026790678',NULL,'Sample Data','Ivey','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Dr. Ivey Jacobs',NULL,NULL,'1958-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Justina','Justina ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','288351947',NULL,'Sample Data','Justina','D','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina ÅÄ…chowski',NULL,1,'1964-03-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Daren','Daren Wagner',NULL,NULL,NULL,'3',NULL,'Both','1117250816',NULL,'Sample Data','Daren','F','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Wagner',NULL,2,'2004-12-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Parker',NULL,NULL,NULL,'1',NULL,'Both','4128531876',NULL,'Sample Data','BrzÄ™czysÅ‚aw','J','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Parker',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Roland','Dr. Roland Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3609011575',NULL,'Sample Data','Roland','','Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Roberts',NULL,2,NULL,1,'2019-07-03',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(38,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,'5',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,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(39,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Farmington Poetry Services','Farmington Poetry Services',NULL,NULL,NULL,NULL,NULL,'Both','2394335707',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Farmington Poetry Services',NULL,NULL,NULL,0,NULL,NULL,19,'Farmington Poetry Services',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(40,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen-Wilson family','Jensen-Wilson family',NULL,NULL,NULL,NULL,NULL,'Both','2091769541',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen-Wilson family',5,NULL,'Dear Jensen-Wilson family',2,NULL,'Jensen-Wilson family',NULL,NULL,NULL,0,NULL,'Jensen-Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samuels.russell@testmail.co.uk','samuels.russell@testmail.co.uk',NULL,NULL,NULL,'3',NULL,'Both','454314156',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear samuels.russell@testmail.co.uk',1,NULL,'Dear samuels.russell@testmail.co.uk',1,NULL,'samuels.russell@testmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(42,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,NULL,NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz family',5,NULL,'Dear DÃaz family',2,NULL,'DÃaz family',NULL,NULL,NULL,0,NULL,'DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(43,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Toby','Mr. Toby Samuels',NULL,NULL,NULL,NULL,NULL,'Both','126496012',NULL,'Sample Data','Toby','Q','Samuels',3,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Mr. Toby Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(44,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker, Barry','Dr. Barry Parker Sr.',NULL,NULL,NULL,'5',NULL,'Both','259830884',NULL,'Sample Data','Barry','','Parker',4,2,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Parker Sr.',NULL,2,'1986-04-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Kandace','Kandace Smith',NULL,NULL,NULL,NULL,NULL,'Both','1249006988',NULL,'Sample Data','Kandace','D','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Smith',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(46,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner family','Wagner family',NULL,NULL,NULL,'5',NULL,'Both','1570966486',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner family',5,NULL,'Dear Wagner family',2,NULL,'Wagner family',NULL,NULL,NULL,0,NULL,'Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(47,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Carylon','Carylon ÅÄ…chowski',NULL,NULL,NULL,'3',NULL,'Both','1553333443',NULL,'Sample Data','Carylon','Z','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon ÅÄ…chowski',NULL,1,'2001-09-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(48,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Craig','Dr. Craig Wilson Sr.',NULL,NULL,NULL,'5',NULL,'Both','810909432',NULL,'Sample Data','Craig','','Wilson',4,2,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Dr. Craig Wilson Sr.',NULL,2,'1990-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(49,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,NULL,NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz family',5,NULL,'Dear DÃaz family',2,NULL,'DÃaz family',NULL,NULL,NULL,0,NULL,'DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(50,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Bachman, Jerome','Dr. Jerome Bachman III',NULL,NULL,NULL,'2',NULL,'Both','4187758320',NULL,'Sample Data','Jerome','V','Bachman',4,4,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Bachman III',NULL,2,'1994-01-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(51,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-González family','ÅÄ…chowski-González family',NULL,NULL,NULL,NULL,NULL,'Both','2074862954',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski-González family',5,NULL,'Dear ÅÄ…chowski-González family',2,NULL,'ÅÄ…chowski-González family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski-González family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bp.daz@mymail.co.in','bp.daz@mymail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2198426523',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bp.daz@mymail.co.in',1,NULL,'Dear bp.daz@mymail.co.in',1,NULL,'bp.daz@mymail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(53,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'dazm@lol.co.pl','dazm@lol.co.pl',NULL,NULL,NULL,'4',NULL,'Both','2050726131',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear dazm@lol.co.pl',1,NULL,'Dear dazm@lol.co.pl',1,NULL,'dazm@lol.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(54,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Dimitrov, Justina','Justina Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','4020373049',NULL,'Sample Data','Justina','Q','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Dimitrov',NULL,1,'1993-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(55,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Main Arts Academy','Main Arts Academy',NULL,NULL,NULL,'3',NULL,'Both','3634669757',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Main Arts Academy',NULL,NULL,NULL,0,NULL,NULL,NULL,'Main Arts Academy',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Margaret','Margaret Jones',NULL,NULL,NULL,'5',NULL,'Both','1031157711',NULL,'Sample Data','Margaret','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(57,'Household',NULL,1,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,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(58,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wagner, Erik','Erik Wagner III',NULL,NULL,NULL,NULL,NULL,'Both','3259334832',NULL,'Sample Data','Erik','','Wagner',NULL,4,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Wagner III',NULL,NULL,'1980-03-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Jacobs, Scarlet','Scarlet Wagner-Jacobs',NULL,NULL,NULL,'3',NULL,'Both','3833435771',NULL,'Sample Data','Scarlet','','Wagner-Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Wagner-Jacobs',NULL,1,'1997-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(60,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Paluxy Environmental Systems','Paluxy Environmental Systems',NULL,NULL,NULL,NULL,NULL,'Both','737347417',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Paluxy Environmental Systems',NULL,NULL,NULL,0,NULL,NULL,26,'Paluxy Environmental Systems',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Kathleen','Kathleen Wagner',NULL,NULL,NULL,'1',NULL,'Both','325058531',NULL,'Sample Data','Kathleen','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Wagner',NULL,1,'1999-10-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(62,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Elbert','Mr. Elbert Müller Sr.',NULL,NULL,NULL,'5',NULL,'Both','189304968',NULL,'Sample Data','Elbert','Y','Müller',3,2,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Müller Sr.',NULL,2,'1957-12-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(63,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'New York Health Systems','New York Health Systems',NULL,NULL,NULL,'3',NULL,'Both','1491859687',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New York Health Systems',NULL,NULL,NULL,0,NULL,NULL,193,'New York Health Systems',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'deforest.kenny95@example.co.pl','deforest.kenny95@example.co.pl',NULL,NULL,NULL,'5',NULL,'Both','2335925279',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear deforest.kenny95@example.co.pl',1,NULL,'Dear deforest.kenny95@example.co.pl',1,NULL,'deforest.kenny95@example.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(65,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Indiahoma Health Collective','Indiahoma Health Collective',NULL,NULL,NULL,NULL,NULL,'Both','1431833890',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Indiahoma Health Collective',NULL,NULL,NULL,0,NULL,NULL,84,'Indiahoma Health Collective',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(66,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Reynolds, Daren','Dr. Daren Reynolds',NULL,NULL,NULL,'2',NULL,'Both','3938117907',NULL,'Sample Data','Daren','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Dr. Daren Reynolds',NULL,NULL,'1976-06-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Brittney','Brittney Smith',NULL,NULL,NULL,'5',NULL,'Both','1142724087',NULL,'Sample Data','Brittney','I','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Smith',NULL,1,'1993-01-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(68,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson family','Jameson family',NULL,NULL,NULL,'3',NULL,'Both','2255649769',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson family',5,NULL,'Dear Jameson family',2,NULL,'Jameson family',NULL,NULL,NULL,0,NULL,'Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(69,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ashlie82@airmail.co.pl','ashlie82@airmail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','1567878755',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear ashlie82@airmail.co.pl',1,NULL,'Dear ashlie82@airmail.co.pl',1,NULL,'ashlie82@airmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Blackwell, Brigette','Mrs. Brigette Bachman-Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2481596724',NULL,'Sample Data','Brigette','Y','Bachman-Blackwell',1,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Mrs. Brigette Bachman-Blackwell',NULL,1,'1967-11-30',0,NULL,NULL,NULL,'Dauberville Arts Center',NULL,NULL,95,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(71,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'DÃaz, Lashawnda','Ms. Lashawnda DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2462862160',NULL,'Sample Data','Lashawnda','','DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(72,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Omar','Omar Blackwell Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3587375768',NULL,'Sample Data','Omar','U','Blackwell',NULL,1,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Blackwell Jr.',NULL,2,'1968-11-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:51'),(73,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'samsonb@example.co.pl','samsonb@example.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','3547419990',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear samsonb@example.co.pl',1,NULL,'Dear samsonb@example.co.pl',1,NULL,'samsonb@example.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(74,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Peace Fund','Urban Peace Fund',NULL,NULL,NULL,'2',NULL,'Both','3299542693',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Peace Fund',NULL,NULL,NULL,0,NULL,NULL,160,'Urban Peace Fund',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Rolando','Rolando Jameson III',NULL,NULL,NULL,'2',NULL,'Both','726163988',NULL,'Sample Data','Rolando','B','Jameson',NULL,4,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Jameson III',NULL,2,'2002-03-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(76,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Adams-Wilson family','Adams-Wilson family',NULL,NULL,NULL,'1',NULL,'Both','518408640',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams-Wilson family',5,NULL,'Dear Adams-Wilson family',2,NULL,'Adams-Wilson family',NULL,NULL,NULL,0,NULL,'Adams-Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'edaz@mymail.net','edaz@mymail.net',NULL,NULL,NULL,NULL,NULL,'Both','3624031063',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear edaz@mymail.net',1,NULL,'Dear edaz@mymail.net',1,NULL,'edaz@mymail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(78,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Prentice, Rolando','Dr. Rolando Prentice II',NULL,NULL,NULL,'4',NULL,'Both','1297722771',NULL,'Sample Data','Rolando','T','Prentice',4,3,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Prentice II',NULL,2,'1974-09-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(79,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Blackwell family','Bachman-Blackwell family',NULL,NULL,NULL,NULL,NULL,'Both','1235943467',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman-Blackwell family',5,NULL,'Dear Bachman-Blackwell family',2,NULL,'Bachman-Blackwell family',NULL,NULL,NULL,0,NULL,'Bachman-Blackwell family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(80,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Robertson family','Robertson family',NULL,NULL,NULL,NULL,NULL,'Both','3444393980',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Robertson family',5,NULL,'Dear Robertson family',2,NULL,'Robertson family',NULL,NULL,NULL,0,NULL,'Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Rolando','Rolando Terry Jr.',NULL,NULL,NULL,NULL,NULL,'Both','158688925',NULL,'Sample Data','Rolando','Q','Terry',NULL,1,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Terry Jr.',NULL,2,'1931-07-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(82,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Pine Action Association','Pine Action Association',NULL,NULL,NULL,NULL,NULL,'Both','1678128212',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Action Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Pine Action Association',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(83,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov-Dimitrov, Juliann','Juliann Ivanov-Dimitrov',NULL,NULL,NULL,'3',NULL,'Both','955994289',NULL,'Sample Data','Juliann','A','Ivanov-Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Ivanov-Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Sherman','Sherman Cooper',NULL,NULL,NULL,NULL,NULL,'Both','1707375456',NULL,'Sample Data','Sherman','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Cooper',NULL,2,'2004-08-09',0,NULL,NULL,NULL,'Indiahoma Health Collective',NULL,NULL,65,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Daren','Dr. Daren Adams II',NULL,NULL,NULL,NULL,NULL,'Both','1164251190',NULL,'Sample Data','Daren','S','Adams',4,3,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Dr. Daren Adams II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(86,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Terrell, Shauna','Ms. Shauna Terrell',NULL,NULL,NULL,NULL,NULL,'Both','3418962952',NULL,'Sample Data','Shauna','','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Terrell',NULL,NULL,'1952-06-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Deforest, Herminia','Herminia Roberts-Deforest',NULL,NULL,NULL,NULL,NULL,'Both','955797514',NULL,'Sample Data','Herminia','H','Roberts-Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Roberts-Deforest',NULL,1,'1990-03-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(88,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'jameson.q.teddy@notmail.org','jameson.q.teddy@notmail.org',NULL,NULL,NULL,'4',NULL,'Both','465702669',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jameson.q.teddy@notmail.org',1,NULL,'Dear jameson.q.teddy@notmail.org',1,NULL,'jameson.q.teddy@notmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(89,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Megan','Megan ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','1824434920',NULL,'Sample Data','Megan','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan ÅÄ…chowski',NULL,1,'1982-01-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(90,'Household',NULL,1,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,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Claudio','Claudio Patel',NULL,NULL,NULL,'2',NULL,'Both','2717427490',NULL,'Sample Data','Claudio','A','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Patel',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(92,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'roberts.r.nicole50@testing.biz','roberts.r.nicole50@testing.biz',NULL,NULL,NULL,'1',NULL,'Both','3589237036',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear roberts.r.nicole50@testing.biz',1,NULL,'Dear roberts.r.nicole50@testing.biz',1,NULL,'roberts.r.nicole50@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(93,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'McReynolds, Shad','Mr. Shad McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','4249147082',NULL,'Sample Data','Shad','N','McReynolds',3,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Mr. Shad McReynolds',NULL,2,'1944-07-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Laree','Ms. Laree DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','970611892',NULL,'Sample Data','Laree','R','DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Ms. Laree DÃaz',NULL,1,'1985-05-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(95,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Dauberville Arts Center','Dauberville Arts Center',NULL,NULL,NULL,'5',NULL,'Both','623673734',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dauberville Arts Center',NULL,NULL,NULL,0,NULL,NULL,70,'Dauberville Arts Center',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Jacob','Jacob DÃaz',NULL,NULL,NULL,'3',NULL,'Both','3488947578',NULL,'Sample Data','Jacob','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob DÃaz',NULL,2,'1949-11-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(97,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Maxwell','Maxwell Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','269604807',NULL,'Sample Data','Maxwell','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Jacobs',NULL,2,'2000-04-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(98,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Alexia','Ms. Alexia Wilson',NULL,NULL,NULL,'2',NULL,'Both','3321653861',NULL,'Sample Data','Alexia','N','Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia Wilson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(99,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Esta','Esta Smith',NULL,NULL,NULL,NULL,NULL,'Both','4101330541',NULL,'Sample Data','Esta','O','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Smith',NULL,NULL,'2001-11-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(100,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Teresa','Teresa Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','2760564229',NULL,'Sample Data','Teresa','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(101,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'San Pablo Action Services','San Pablo Action Services',NULL,NULL,NULL,'1',NULL,'Both','2589964231',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'San Pablo Action Services',NULL,NULL,NULL,0,NULL,NULL,119,'San Pablo Action Services',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(102,'Household',NULL,1,0,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,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Jacob','Jacob Müller',NULL,NULL,NULL,NULL,NULL,'Both','176489544',NULL,'Sample Data','Jacob','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Müller',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Roland','Roland Adams',NULL,NULL,NULL,NULL,NULL,'Both','2320657874',NULL,'Sample Data','Roland','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Adams',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(105,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'United Technology Alliance','United Technology Alliance',NULL,NULL,NULL,NULL,NULL,'Both','3413138562',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Technology Alliance',NULL,NULL,NULL,0,NULL,NULL,29,'United Technology Alliance',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Valene','Mrs. Valene McReynolds',NULL,NULL,NULL,'2',NULL,'Both','2007971144',NULL,'Sample Data','Valene','O','McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Mrs. Valene McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,'States Music Partnership',NULL,NULL,182,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(107,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner, Damaris','Damaris Wagner',NULL,NULL,NULL,'4',NULL,'Both','2489613287',NULL,'Sample Data','Damaris','T','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Wagner',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(108,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cruz, Maria','Maria Cruz',NULL,NULL,NULL,NULL,NULL,'Both','2760046395',NULL,'Sample Data','Maria','W','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Cruz',NULL,2,'1959-10-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(109,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jensen-Wilson, Ashley','Ms. Ashley Jensen-Wilson',NULL,NULL,NULL,NULL,NULL,'Both','3865771541',NULL,'Sample Data','Ashley','Y','Jensen-Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ms. Ashley Jensen-Wilson',NULL,NULL,'1981-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Errol','Dr. Errol Jameson II',NULL,NULL,NULL,NULL,NULL,'Both','4067151192',NULL,'Sample Data','Errol','G','Jameson',4,3,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Dr. Errol Jameson II',NULL,2,'1966-05-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(111,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Sierra Peace Initiative','Sierra Peace Initiative',NULL,NULL,NULL,NULL,NULL,'Both','1302696609',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sierra Peace Initiative',NULL,NULL,NULL,0,NULL,NULL,154,'Sierra Peace Initiative',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(112,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Laree','Laree Dimitrov',NULL,NULL,NULL,'1',NULL,'Both','2136401508',NULL,'Sample Data','Laree','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(113,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrov.b.brzczysaw@sample.co.nz','dimitrov.b.brzczysaw@sample.co.nz',NULL,NULL,NULL,'4',NULL,'Both','2839697415',NULL,'Sample Data',NULL,NULL,NULL,4,2,NULL,NULL,1,NULL,'Dear dimitrov.b.brzczysaw@sample.co.nz',1,NULL,'Dear dimitrov.b.brzczysaw@sample.co.nz',1,NULL,'dimitrov.b.brzczysaw@sample.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(114,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'gonzlez.bernadette25@example.net','gonzlez.bernadette25@example.net',NULL,NULL,NULL,'5',NULL,'Both','3441780988',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear gonzlez.bernadette25@example.net',1,NULL,'Dear gonzlez.bernadette25@example.net',1,NULL,'gonzlez.bernadette25@example.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'krobertson12@lol.biz','krobertson12@lol.biz',NULL,NULL,NULL,'5',NULL,'Both','2711873603',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear krobertson12@lol.biz',1,NULL,'Dear krobertson12@lol.biz',1,NULL,'krobertson12@lol.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(116,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Maxwell','Mr. Maxwell Wagner',NULL,NULL,NULL,NULL,NULL,'Both','899179200',NULL,'Sample Data','Maxwell','M','Wagner',3,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Mr. Maxwell Wagner',NULL,NULL,'1946-12-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(117,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Zope, Bob','Bob Zope II',NULL,NULL,NULL,'1',NULL,'Both','707485722',NULL,'Sample Data','Bob','','Zope',NULL,3,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Zope II',NULL,2,'2002-06-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(118,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Kandace','Dr. Kandace Terrell',NULL,NULL,NULL,'4',NULL,'Both','3245030049',NULL,'Sample Data','Kandace','','Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Dr. Kandace Terrell',NULL,1,'1947-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Jina','Ms. Jina Grant',NULL,NULL,NULL,'3',NULL,'Both','870157867',NULL,'Sample Data','Jina','J','Grant',2,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Ms. Jina Grant',NULL,1,'1994-03-21',0,NULL,NULL,NULL,'San Pablo Action Services',NULL,NULL,101,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(120,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Lou','Lou Roberts II',NULL,NULL,NULL,NULL,NULL,'Both','3476194906',NULL,'Sample Data','Lou','','Roberts',NULL,3,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Roberts II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'nlee@testmail.biz','nlee@testmail.biz',NULL,NULL,NULL,NULL,NULL,'Both','230563380',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear nlee@testmail.biz',1,NULL,'Dear nlee@testmail.biz',1,NULL,'nlee@testmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,'Creative Education Academy',NULL,NULL,23,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(122,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Dimitrov family','Ivanov-Dimitrov family',NULL,NULL,NULL,NULL,NULL,'Both','2067553646',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov-Dimitrov family',5,NULL,'Dear Ivanov-Dimitrov family',2,NULL,'Ivanov-Dimitrov family',NULL,NULL,NULL,0,NULL,'Ivanov-Dimitrov family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(123,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Education Center','Martin Luther King Education Center',NULL,NULL,NULL,'1',NULL,'Both','2317988135',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Education Center',NULL,NULL,NULL,0,NULL,NULL,21,'Martin Luther King Education Center',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(124,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'irisjameson76@lol.co.nz','irisjameson76@lol.co.nz',NULL,NULL,NULL,'2',NULL,'Both','2939542613',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear irisjameson76@lol.co.nz',1,NULL,'Dear irisjameson76@lol.co.nz',1,NULL,'irisjameson76@lol.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(125,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Rosario','Rosario Adams III',NULL,NULL,NULL,NULL,NULL,'Both','628774619',NULL,'Sample Data','Rosario','','Adams',NULL,4,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Adams III',NULL,2,'1974-01-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'kandaced42@sample.co.uk','kandaced42@sample.co.uk',NULL,NULL,NULL,'2',NULL,'Both','2678526306',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear kandaced42@sample.co.uk',1,NULL,'Dear kandaced42@sample.co.uk',1,NULL,'kandaced42@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(127,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Peace Initiative','Martin Luther King Peace Initiative',NULL,NULL,NULL,'1',NULL,'Both','75218906',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Peace Initiative',NULL,NULL,NULL,0,NULL,NULL,194,'Martin Luther King Peace Initiative',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(128,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Winford','Mr. Winford Grant',NULL,NULL,NULL,NULL,NULL,'Both','431528979',NULL,'Sample Data','Winford','D','Grant',3,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Mr. Winford Grant',NULL,NULL,'1984-07-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Betty','Mrs. Betty Olsen',NULL,NULL,NULL,'5',NULL,'Both','3171896776',NULL,'Sample Data','Betty','','Olsen',1,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Mrs. Betty Olsen',NULL,1,'1950-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(130,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Carlos','Carlos Robertson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3416802562',NULL,'Sample Data','Carlos','','Robertson',NULL,1,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Robertson Jr.',NULL,NULL,'1997-11-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(131,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov family','Dimitrov family',NULL,NULL,NULL,NULL,NULL,'Both','3351288571',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Dimitrov family',5,NULL,'Dear Dimitrov family',2,NULL,'Dimitrov family',NULL,NULL,NULL,0,NULL,'Dimitrov family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(132,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Allen','Allen Jensen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','478269877',NULL,'Sample Data','Allen','','Jensen',NULL,2,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Jensen Sr.',NULL,2,'1969-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'reynolds.elizabeth50@notmail.org','reynolds.elizabeth50@notmail.org',NULL,NULL,NULL,'1',NULL,'Both','1110955934',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear reynolds.elizabeth50@notmail.org',1,NULL,'Dear reynolds.elizabeth50@notmail.org',1,NULL,'reynolds.elizabeth50@notmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Landon','Landon Cruz',NULL,NULL,NULL,NULL,NULL,'Both','2389658974',NULL,'Sample Data','Landon','D','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Cruz',NULL,NULL,'2004-07-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(135,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Austin Health Trust','Austin Health Trust',NULL,NULL,NULL,NULL,NULL,'Both','2565452778',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Austin Health Trust',NULL,NULL,NULL,0,NULL,NULL,NULL,'Austin Health Trust',NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(136,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'robertson.ivey@example.co.in','robertson.ivey@example.co.in',NULL,NULL,NULL,NULL,NULL,'Both','4013252257',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear robertson.ivey@example.co.in',1,NULL,'Dear robertson.ivey@example.co.in',1,NULL,'robertson.ivey@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'cruz.sanford48@mymail.co.pl','cruz.sanford48@mymail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','3397158868',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear cruz.sanford48@mymail.co.pl',1,NULL,'Dear cruz.sanford48@mymail.co.pl',1,NULL,'cruz.sanford48@mymail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(138,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Heidi','Heidi Jameson',NULL,NULL,NULL,'1',NULL,'Both','1155008282',NULL,'Sample Data','Heidi','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Jameson',NULL,NULL,'1993-03-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Scarlet','Scarlet DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','3578692438',NULL,'Sample Data','Scarlet','C','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet DÃaz',NULL,1,'1979-01-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Ashley','Ashley DÃaz Sr.',NULL,NULL,NULL,'4',NULL,'Both','2703610004',NULL,'Sample Data','Ashley','H','DÃaz',NULL,2,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley DÃaz Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(141,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-DÃaz, Eleonor','Eleonor Smith-DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2841567695',NULL,'Sample Data','Eleonor','L','Smith-DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Smith-DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Scarlet','Ms. Scarlet Jones',NULL,NULL,NULL,'2',NULL,'Both','4237120359',NULL,'Sample Data','Scarlet','','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Ms. Scarlet Jones',NULL,1,'1984-09-05',0,NULL,NULL,NULL,'Urban Culture Initiative',NULL,NULL,144,0,'2020-06-10 02:45:48','2020-06-10 02:45:50'),(143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Mei','Mei Adams',NULL,NULL,NULL,'2',NULL,'Both','407770009',NULL,'Sample Data','Mei','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Adams',NULL,1,'1946-07-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:48','2020-06-10 02:45:49'),(144,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Culture Initiative','Urban Culture Initiative',NULL,NULL,NULL,'1',NULL,'Both','1678635405',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Culture Initiative',NULL,NULL,NULL,0,NULL,NULL,142,'Urban Culture Initiative',NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Jackson','Jackson Müller III',NULL,NULL,NULL,NULL,NULL,'Both','2768075849',NULL,'Sample Data','Jackson','G','Müller',NULL,4,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Müller III',NULL,2,'1978-10-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Tanya','Ms. Tanya ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','2472113675',NULL,'Sample Data','Tanya','Q','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Ms. Tanya ÅÄ…chowski',NULL,NULL,'1948-08-27',1,'2020-03-17',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samuels.u.erik@airmail.com','samuels.u.erik@airmail.com',NULL,NULL,NULL,NULL,NULL,'Both','438570743',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear samuels.u.erik@airmail.com',1,NULL,'Dear samuels.u.erik@airmail.com',1,NULL,'samuels.u.erik@airmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Lawerence','Lawerence Dimitrov III',NULL,NULL,NULL,'3',NULL,'Both','2843061688',NULL,'Sample Data','Lawerence','D','Dimitrov',NULL,4,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Dimitrov III',NULL,NULL,'2003-08-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(149,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Russell','Russell Roberts III',NULL,NULL,NULL,NULL,NULL,'Both','651288599',NULL,'Sample Data','Russell','H','Roberts',NULL,4,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Roberts III',NULL,2,'1936-01-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(150,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Kathleen','Mrs. Kathleen Samson',NULL,NULL,NULL,NULL,NULL,'Both','2829652278',NULL,'Sample Data','Kathleen','H','Samson',1,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Mrs. Kathleen Samson',NULL,1,'1985-06-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(151,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'adams.e.allan86@notmail.co.uk','adams.e.allan86@notmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','3110867001',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear adams.e.allan86@notmail.co.uk',1,NULL,'Dear adams.e.allan86@notmail.co.uk',1,NULL,'adams.e.allan86@notmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(152,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Shad','Dr. Shad Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3023273825',NULL,'Sample Data','Shad','C','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Dr. Shad Reynolds',NULL,2,'1968-08-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(153,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Kathlyn','Mrs. Kathlyn ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','336052777',NULL,'Sample Data','Kathlyn','B','ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Mrs. Kathlyn ÅÄ…chowski',NULL,NULL,'1983-05-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-González, Omar','Omar ÅÄ…chowski-González Jr.',NULL,NULL,NULL,'1',NULL,'Both','3354310241',NULL,'Sample Data','Omar','','ÅÄ…chowski-González',NULL,1,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar ÅÄ…chowski-González Jr.',NULL,2,'2014-10-01',0,NULL,NULL,NULL,'Sierra Peace Initiative',NULL,NULL,111,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(155,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen-DÃaz, Kathleen','Kathleen Nielsen-DÃaz',NULL,NULL,NULL,'2',NULL,'Both','2949897049',NULL,'Sample Data','Kathleen','','Nielsen-DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Nielsen-DÃaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(156,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman-Blackwell, Teddy','Mr. Teddy Bachman-Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','998147436',NULL,'Sample Data','Teddy','S','Bachman-Blackwell',3,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Mr. Teddy Bachman-Blackwell',NULL,2,'1993-05-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:51'),(157,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Zope, Allan','Dr. Allan Zope II',NULL,NULL,NULL,NULL,NULL,'Both','891375066',NULL,'Sample Data','Allan','','Zope',4,3,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Dr. Allan Zope II',NULL,2,'1946-10-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(158,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Arlyne','Mrs. Arlyne Terry',NULL,NULL,NULL,NULL,NULL,'Both','3024103197',NULL,'Sample Data','Arlyne','R','Terry',1,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Mrs. Arlyne Terry',NULL,1,'1951-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(159,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Erik','Dr. Erik Bachman',NULL,NULL,NULL,'1',NULL,'Both','620728720',NULL,'Sample Data','Erik','K','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Bachman',NULL,NULL,'1957-06-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(160,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-González, Brittney','Brittney ÅÄ…chowski-González',NULL,NULL,NULL,'2',NULL,'Both','1480019209',NULL,'Sample Data','Brittney','S','ÅÄ…chowski-González',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney ÅÄ…chowski-González',NULL,NULL,'2011-03-26',0,NULL,NULL,NULL,'Urban Peace Fund',NULL,NULL,74,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(161,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,NULL,NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz family',5,NULL,'Dear DÃaz family',2,NULL,'DÃaz family',NULL,NULL,NULL,0,NULL,'DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(162,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Arlyne','Arlyne Jones',NULL,NULL,NULL,NULL,NULL,'Both','3827704597',NULL,'Sample Data','Arlyne','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Jones',NULL,1,'2005-03-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Dimitrov, Miguel','Miguel Ivanov-Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3702666988',NULL,'Sample Data','Miguel','D','Ivanov-Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Ivanov-Dimitrov',NULL,2,'2008-06-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(164,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Scott','Scott Jensen',NULL,NULL,NULL,'5',NULL,'Both','4064239922',NULL,'Sample Data','Scott','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Jensen',NULL,2,'1936-08-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'tobydaz31@fakemail.net','tobydaz31@fakemail.net',NULL,NULL,NULL,'2',NULL,'Both','658008142',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear tobydaz31@fakemail.net',1,NULL,'Dear tobydaz31@fakemail.net',1,NULL,'tobydaz31@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams-Wilson, Miguel','Mr. Miguel Adams-Wilson',NULL,NULL,NULL,'5',NULL,'Both','3988349463',NULL,'Sample Data','Miguel','N','Adams-Wilson',3,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Mr. Miguel Adams-Wilson',NULL,2,'1987-02-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(167,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Irvin','Irvin Robertson III',NULL,NULL,NULL,NULL,NULL,'Both','3287904826',NULL,'Sample Data','Irvin','O','Robertson',NULL,4,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Robertson III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(168,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Brigette','Brigette Jameson',NULL,NULL,NULL,'5',NULL,'Both','839229848',NULL,'Sample Data','Brigette','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Jameson',NULL,1,'1962-11-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(169,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Craig','Craig Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3510577139',NULL,'Sample Data','Craig','F','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Reynolds',NULL,2,'1968-09-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Shad','Dr. Shad ÅÄ…chowski II',NULL,NULL,NULL,NULL,NULL,'Both','695965162',NULL,'Sample Data','Shad','C','ÅÄ…chowski',4,3,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Dr. Shad ÅÄ…chowski II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(171,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell-Robertson, Rosario','Mr. Rosario Terrell-Robertson',NULL,NULL,NULL,NULL,NULL,'Both','2367208597',NULL,'Sample Data','Rosario','','Terrell-Robertson',3,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Terrell-Robertson',NULL,NULL,'1989-12-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(172,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Blackwell, Merrie','Merrie Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','2696737168',NULL,'Sample Data','Merrie','X','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,'Burlingame Software Solutions',NULL,NULL,192,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Lou','Lou Wagner',NULL,NULL,NULL,'4',NULL,'Both','2041146413',NULL,'Sample Data','Lou','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Wagner',NULL,2,'1989-09-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(174,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Winford','Winford Samson',NULL,NULL,NULL,'3',NULL,'Both','935630203',NULL,'Sample Data','Winford','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Samson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'felishar2@infomail.co.nz','felishar2@infomail.co.nz',NULL,NULL,NULL,'1',NULL,'Both','3903995902',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear felishar2@infomail.co.nz',1,NULL,'Dear felishar2@infomail.co.nz',1,NULL,'felishar2@infomail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(176,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Kathlyn','Dr. Kathlyn DÃaz',NULL,NULL,NULL,'2',NULL,'Both','1074199514',NULL,'Sample Data','Kathlyn','O','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Dr. Kathlyn DÃaz',NULL,1,'1970-11-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(177,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Kiara','Kiara Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2419573895',NULL,'Sample Data','Kiara','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Terrell',NULL,1,'2001-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(178,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Wisconsin Wellness Alliance','Wisconsin Wellness Alliance',NULL,NULL,NULL,NULL,NULL,'Both','822473134',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Wisconsin Wellness Alliance',NULL,NULL,NULL,0,NULL,NULL,18,'Wisconsin Wellness Alliance',NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(179,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'scarletdimitrov53@sample.co.pl','scarletdimitrov53@sample.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','935628927',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear scarletdimitrov53@sample.co.pl',1,NULL,'Dear scarletdimitrov53@sample.co.pl',1,NULL,'scarletdimitrov53@sample.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(180,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'daza@lol.biz','daza@lol.biz',NULL,NULL,NULL,'4',NULL,'Both','2752648294',NULL,'Sample Data',NULL,NULL,NULL,4,1,NULL,NULL,1,NULL,'Dear daza@lol.biz',1,NULL,'Dear daza@lol.biz',1,NULL,'daza@lol.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(181,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Jacobs family','Wagner-Jacobs family',NULL,NULL,NULL,'5',NULL,'Both','1922403537',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner-Jacobs family',5,NULL,'Dear Wagner-Jacobs family',2,NULL,'Wagner-Jacobs family',NULL,NULL,NULL,0,NULL,'Wagner-Jacobs family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(182,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'States Music Partnership','States Music Partnership',NULL,NULL,NULL,'5',NULL,'Both','1452485960',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'States Music Partnership',NULL,NULL,NULL,0,NULL,NULL,106,'States Music Partnership',NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(183,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Arlyne','Arlyne DÃaz',NULL,NULL,NULL,'2',NULL,'Both','4265577068',NULL,'Sample Data','Arlyne','F','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne DÃaz',NULL,1,'1972-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Lawerence','Lawerence Robertson',NULL,NULL,NULL,'3',NULL,'Both','3742055546',NULL,'Sample Data','Lawerence','D','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Robertson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'daz.sonny@lol.net','daz.sonny@lol.net',NULL,NULL,NULL,NULL,NULL,'Both','2019483543',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear daz.sonny@lol.net',1,NULL,'Dear daz.sonny@lol.net',1,NULL,'daz.sonny@lol.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(186,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Reynolds, Tanya','Mrs. Tanya Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3920520265',NULL,'Sample Data','Tanya','','Reynolds',1,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Mrs. Tanya Reynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(187,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Teddy','Dr. Teddy Adams Sr.',NULL,NULL,NULL,'2',NULL,'Both','679771047',NULL,'Sample Data','Teddy','B','Adams',4,2,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Adams Sr.',NULL,NULL,'1977-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(189,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Adams, Troy','Dr. Troy Adams III',NULL,NULL,NULL,'1',NULL,'Both','271731072',NULL,'Sample Data','Troy','X','Adams',4,4,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Dr. Troy Adams III',NULL,NULL,'1977-09-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(190,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Josefa','Josefa Adams',NULL,NULL,NULL,'4',NULL,'Both','3524754614',NULL,'Sample Data','Josefa','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Adams',NULL,1,'2010-03-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Billy','Billy ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','2651887338',NULL,'Sample Data','Billy','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy ÅÄ…chowski',NULL,2,'2018-08-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(192,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Burlingame Software Solutions','Burlingame Software Solutions',NULL,NULL,NULL,NULL,NULL,'Both','429440746',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Burlingame Software Solutions',NULL,NULL,NULL,0,NULL,NULL,172,'Burlingame Software Solutions',NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Carlos','Carlos Samson II',NULL,NULL,NULL,NULL,NULL,'Both','3685526914',NULL,'Sample Data','Carlos','O','Samson',NULL,3,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Samson II',NULL,NULL,'1989-04-15',0,NULL,NULL,NULL,'New York Health Systems',NULL,NULL,63,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(194,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Kandace','Kandace Roberts',NULL,NULL,NULL,'5',NULL,'Both','3760408869',NULL,'Sample Data','Kandace','Y','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Roberts',NULL,NULL,NULL,0,NULL,NULL,NULL,'Martin Luther King Peace Initiative',NULL,NULL,127,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(195,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman-Blackwell, Landon','Dr. Landon Bachman-Blackwell',NULL,NULL,NULL,'5',NULL,'Both','1427604385',NULL,'Sample Data','Landon','G','Bachman-Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Bachman-Blackwell',NULL,2,'1984-05-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrove7@testmail.co.pl','dimitrove7@testmail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','3139713335',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear dimitrove7@testmail.co.pl',1,NULL,'Dear dimitrove7@testmail.co.pl',1,NULL,'dimitrove7@testmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Russell','Dr. Russell Robertson',NULL,NULL,NULL,'5',NULL,'Both','3573168465',NULL,'Sample Data','Russell','L','Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Robertson',NULL,2,'1961-07-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Errol','Mr. Errol Smith',NULL,NULL,NULL,NULL,NULL,'Both','2269355028',NULL,'Sample Data','Errol','','Smith',3,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Smith',NULL,2,'1938-02-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(199,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Winford','Winford Cooper Sr.',NULL,NULL,NULL,'1',NULL,'Both','1891762669',NULL,'Sample Data','Winford','','Cooper',NULL,2,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Cooper Sr.',NULL,2,'2010-03-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:49'),(200,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jameson, Brent','Brent Jameson',NULL,NULL,NULL,'1',NULL,'Both','1398082986',NULL,'Sample Data','Brent','B','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Jameson',NULL,NULL,'1992-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'),(201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Kathlyn','Kathlyn Deforest',NULL,NULL,NULL,'1',NULL,'Both','333595076',NULL,'Sample Data','Kathlyn','I','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Deforest',NULL,1,'1974-01-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-06-10 02:45:49','2020-06-10 02:45:50'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -228,7 +228,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution` WRITE; /*!40000 ALTER TABLE `civicrm_contribution` DISABLE KEYS */; -INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0),(2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0),(4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0),(5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0),(6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0),(7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(14,181,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,40,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,168,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,160,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,59,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,61,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,125,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,71,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,3,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,5,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,135,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,94,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,64,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,174,2,NULL,1,'2020-06-04 10:38:20',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,188,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,126,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,81,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,21,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,12,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,151,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,90,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,184,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,175,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,157,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(38,195,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(39,129,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(40,118,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(41,68,2,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(42,111,2,NULL,1,'2020-06-04 10:38:20',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(43,77,2,NULL,1,'2020-06-04 10:38:20',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(45,7,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(46,15,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(47,18,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(48,20,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(49,27,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(50,32,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(51,34,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(52,39,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(53,41,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(54,43,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(55,49,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(56,52,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(57,55,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(58,59,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(59,60,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(60,63,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(61,66,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(62,70,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(63,76,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(64,79,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(65,82,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(66,84,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(67,88,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(68,96,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(69,97,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(70,98,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(71,101,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(72,104,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(73,108,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(74,110,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(75,119,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(76,121,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(77,124,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(78,125,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(79,129,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(80,132,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(81,133,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(82,137,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(83,139,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(84,141,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(85,145,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(86,150,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(87,154,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(88,164,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(89,169,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(90,177,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(91,183,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(92,188,4,NULL,1,'2020-06-04 10:38:20',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(93,189,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(94,198,4,NULL,1,'2020-06-04 10:38:20',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-04 10:38:20',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0),(2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0),(4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0),(5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0),(6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0),(7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(14,158,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,9,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,154,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,59,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,52,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,185,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,73,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,12,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,41,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,18,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,126,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,4,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,92,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,62,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,117,2,NULL,1,'2020-06-10 14:45:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,164,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,174,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,173,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,109,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,10,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,190,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,110,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,81,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,112,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(38,15,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(39,134,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(40,32,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(41,107,2,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(42,147,2,NULL,1,'2020-06-10 14:45:52',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(43,98,2,NULL,1,'2020-06-10 14:45:52',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(45,1,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(46,3,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(47,4,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(48,7,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(49,11,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(50,12,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(51,18,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(52,20,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(53,23,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(54,27,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(55,30,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(56,33,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(57,51,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(58,52,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(59,57,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(60,59,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(61,61,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(62,68,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(63,70,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(64,74,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(65,75,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(66,76,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(67,83,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(68,110,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(69,113,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(70,118,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(71,119,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(72,121,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(73,124,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(74,134,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(75,139,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(76,141,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(77,142,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(78,146,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(79,151,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(80,152,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(81,154,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(82,159,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(83,161,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(84,162,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(85,164,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(86,171,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(87,173,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(88,177,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(89,180,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(90,183,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(91,188,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(92,197,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(93,198,4,NULL,1,'2020-06-10 14:45:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(94,199,4,NULL,1,'2020-06-10 14:45:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-06-10 14:45:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */; UNLOCK TABLES; @@ -266,7 +266,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_soft` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_soft` DISABLE KEYS */; -INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES (1,8,54,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,54,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); +INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES (1,8,177,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,177,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -399,7 +399,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.27.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.28.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -409,7 +409,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_email` WRITE; /*!40000 ALTER TABLE `civicrm_email` DISABLE KEYS */; -INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(2,137,1,'jacobsn@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(3,103,1,'kaceyjacobs@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(4,103,1,'jacobsk@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL),(5,195,1,'merriedaz3@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(6,91,1,'jayb@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(7,171,1,'nicolep@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(8,171,1,'nparker@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL),(9,172,1,'mller.kathlyn@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(10,147,1,'teresa@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(11,147,1,'chowski.teresa@infomail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(12,113,1,'cruz.e.sonny@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(13,129,1,'ivanov.j.santina62@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(14,177,1,'deforest.n.shauna27@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL),(15,177,1,'shaunadeforest@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(16,198,1,'olsene9@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(17,198,1,'errololsen14@notmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(18,115,1,'rebekahz@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(19,80,1,'smith.a.alida@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(20,80,1,'smitha3@spamalot.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(21,124,1,'dimitrov.herminia58@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(22,7,1,'kennys@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(23,6,1,'kathleenjensen27@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(24,168,1,'omarjensen@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(25,168,1,'jensen.omar@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL),(26,94,1,'wattson.shauna@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(27,94,1,'swattson12@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(28,131,1,'gonzlez.s.bernadette@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(29,131,1,'gonzlez.bernadette@example.net',0,0,0,0,NULL,NULL,NULL,NULL),(30,149,1,'prenticep16@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(31,149,1,'prentice.princess@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(32,68,1,'rz.barkley@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(33,57,1,'kennyp@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(34,57,1,'kennyp@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(35,132,1,'terrye78@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(36,139,1,'erikchowski92@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(37,139,1,'erik@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(38,53,1,'carlosmcreynolds34@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(39,53,1,'cm.mcreynolds20@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(40,66,1,'iveycooper48@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(41,18,1,'ndeforest81@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(42,18,1,'deforest.norris21@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(43,161,1,'blackwell.i.valene@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(44,98,1,'sblackwell84@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(45,98,1,'sblackwell@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(46,140,1,'russelldimitrov44@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(47,188,1,'wagner.troy79@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(48,188,1,'troywagner66@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(49,47,1,'terrell.s.esta50@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(50,65,1,'louadams@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(51,44,1,'jacobt@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(52,185,1,'jonesb@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(53,43,1,'bettyc@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(54,28,1,'blackwell.russell@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(55,28,1,'blackwellr58@infomail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(56,119,1,'samuelsm85@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(57,119,1,'samuels.j.miguel53@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(58,123,1,'justinamcreynolds99@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(59,163,1,'bs.jameson@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(60,163,1,'jamesonb58@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(61,38,1,'terry.u.sharyn@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(62,84,1,'beulaterrell82@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(63,76,1,'norrisy@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(64,76,1,'nyadav@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(65,15,1,'omarwilson62@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(66,15,1,'wilson.omar@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(67,126,1,'samuels.billy82@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(68,155,1,'grant.bryon@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL),(69,55,1,'terrym12@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(70,55,1,'terrym73@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL),(71,196,1,'kb.smith75@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(72,196,1,'kb.smith86@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(73,191,1,'tg.blackwell17@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(74,145,1,'elinadeforest@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(75,175,1,'kiaramller99@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL),(76,175,1,'kiaramller29@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(77,17,1,'cooperi17@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(78,160,1,'elizabetht@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(79,105,1,'chowski.errol7@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(80,105,1,'chowskie10@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(81,154,1,'nielsent77@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(82,88,1,'nielsen.nicole@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(83,90,1,'nielsenw3@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(84,90,1,'nielsenw@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL),(85,108,1,'ivanovs@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(86,35,1,'deforest.lashawnda8@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(87,42,1,'bettyd@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(88,42,1,'deforestb@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(89,62,1,'mariasamson@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(90,20,1,'grant.iris47@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(91,20,1,'irisg68@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(92,26,1,'lincolnivanov@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(93,26,1,'lincolnivanov54@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(94,170,1,'ivanovh@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(95,170,1,'hivanov@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(96,141,1,'ivanov.allan33@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(97,141,1,'ivanov.a.allan42@example.biz',0,0,0,0,NULL,NULL,NULL,NULL),(98,99,1,'claudiozope62@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(99,29,1,'irvinz16@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(100,29,1,'izope@lol.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(101,109,1,'zope.ivey@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(102,109,1,'zope.p.ivey81@example.net',0,0,0,0,NULL,NULL,NULL,NULL),(103,107,1,'wattsonv94@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(104,107,1,'valenew73@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(105,78,1,'wattson.carylon@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL),(106,159,1,'th.wilson@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(107,97,1,'terry-wilson.eleonor94@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(108,60,1,'billywilson@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(109,36,1,'troyj85@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(110,12,1,'mdaz@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(111,19,1,'ljacobs-daz@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(112,19,1,'jacobs-daz.lou@testing.info',0,0,0,0,NULL,NULL,NULL,NULL),(113,14,1,'jacobs-daz.r.rosario@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(114,14,1,'jacobs-dazr@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(115,39,1,'daz.g.angelika42@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(116,189,1,'teresac93@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(117,189,1,'tcruz94@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(118,151,1,'sj.daz-cruz@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(119,104,1,'lashawndad@sample.com',1,0,0,0,NULL,NULL,NULL,NULL),(120,40,1,'teddymcreynolds@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(121,133,1,'trumanmcreynolds@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(122,133,1,'mcreynolds.u.truman@spamalot.info',0,0,0,0,NULL,NULL,NULL,NULL),(123,194,1,'imcreynolds@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(124,194,1,'mcreynoldsi@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL),(125,110,1,'allanparker@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(126,110,1,'ar.parker@lol.net',0,0,0,0,NULL,NULL,NULL,NULL),(127,111,1,'yadav.iris@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(128,127,1,'scottbachman10@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(129,127,1,'scottb@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(130,22,1,'herminiabachman@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(131,22,1,'bachmanh67@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(132,81,1,'bachmant61@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(133,81,1,'tbachman@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(134,186,1,'omars@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(135,186,1,'smith.a.omar@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(136,183,1,'smith.beula@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(137,192,1,'smith.f.roland94@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(138,169,1,'smith.z.sanford@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(139,169,1,'sz.smith15@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(140,61,1,'elbertadams73@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(141,138,1,'adams.esta@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(142,114,1,'adams.o.allan78@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(143,73,1,'merried12@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(144,56,1,'dimitrov.sharyn@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(145,56,1,'dimitrov.sharyn@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(146,173,1,'lawerencebachman88@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(147,92,1,'ja.bachman33@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(148,92,1,'josefabachman10@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(149,85,1,'josefabachman86@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(150,187,1,'sjacobs14@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(151,128,1,'deforest.juliann35@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(152,128,1,'juliannd@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(153,143,1,'jacobs-deforest.t.alexia36@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(154,10,3,'sales@ruralsolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(155,29,2,'izope17@ruralsolutions.org',0,0,0,0,NULL,NULL,NULL,NULL),(156,106,3,'service@hoopestoneducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(157,72,2,'grantj46@hoopestoneducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(158,167,3,'contact@sdagriculturesolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(159,182,3,'info@cadelleducationsolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(160,200,3,'contact@charlestoneducationpartners.org',1,0,0,0,NULL,NULL,NULL,NULL),(161,189,2,'cruz.teresa86@charlestoneducationpartners.org',0,0,0,0,NULL,NULL,NULL,NULL),(162,52,3,'service@milwaukeedevelopment.org',1,0,0,0,NULL,NULL,NULL,NULL),(163,144,3,'contact@iowaservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(164,91,2,'blackwellj@iowaservices.org',0,0,0,0,NULL,NULL,NULL,NULL),(165,69,3,'feedback@collegecenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(166,9,2,'bp.samson-jensen@collegecenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(167,122,3,'feedback@oklahomafoodnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL),(168,164,2,'cruz.brigette37@oklahomafoodnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL),(169,101,3,'info@hartfordservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(170,184,2,'parker-yadav.russell43@hartfordservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(171,50,3,'sales@carmelculturealliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(172,176,3,'sales@vnenvironmentalfund.org',1,0,0,0,NULL,NULL,NULL,NULL),(173,16,3,'service@ruralempowermentfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,98,2,'blackwell.sanford66@ruralempowermentfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(175,49,3,'contact@ruralalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(176,112,2,'yadav.herminia@ruralalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(177,152,3,'info@dowlenschool.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,129,2,'@dowlenschool.org',0,0,0,0,NULL,NULL,NULL,NULL),(179,83,3,'service@missouriadvocacypartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,135,2,'raylee@missouriadvocacypartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(181,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(182,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(183,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(2,43,1,'samuelst9@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(3,43,1,'samuels.q.toby35@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(4,71,1,'daz.lashawnda@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(5,71,1,'daz.lashawnda@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(6,110,1,'jameson.errol57@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(7,91,1,'patel.claudio@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(8,91,1,'ca.patel@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(9,172,1,'blackwellm@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL),(10,172,1,'mx.blackwell95@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(11,37,1,'roberts.roland51@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(12,37,1,'rolandroberts8@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL),(13,175,1,'felishar2@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(14,15,1,'jinap@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(15,115,1,'krobertson12@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(16,147,1,'eriksamuels@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(17,147,1,'samuels.u.erik@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(18,198,1,'smithe22@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(19,198,1,'errols79@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(20,53,1,'megand91@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(21,53,1,'dazm@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(22,22,1,'wilson.felisha77@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(23,22,1,'wilson.felisha@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(24,18,1,'wattson.brzczysaw@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(25,18,1,'brzczysawwattson97@airmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(26,108,1,'cruz.w.maria@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(27,92,1,'roberts.r.nicole@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(28,92,1,'roberts.r.nicole50@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL),(29,44,1,'barryparker@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(30,44,1,'parker.barry@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(31,121,1,'nlee@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(32,47,1,'carylonchowski@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(33,47,1,'carylonchowski80@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(34,138,1,'jameson.heidi@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(35,138,1,'jamesonh@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL),(36,85,1,'darena@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(37,85,1,'adamsd@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(38,66,1,'darenr@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(39,157,1,'allanzope81@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(40,157,1,'allanz28@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL),(41,119,1,'jinag@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(42,119,1,'jj.grant93@sample.info',0,0,0,0,NULL,NULL,NULL,NULL),(43,142,1,'scarletjones@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(44,142,1,'jones.scarlet@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(45,164,1,'scottjensen23@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(46,134,1,'cruzl2@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(47,41,1,'samuels.russell@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(48,120,1,'roberts.lou48@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(49,16,1,'barkley.v.rosario65@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(50,29,1,'bachman.esta61@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(51,29,1,'bachman.esta@infomail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(52,103,1,'jmller@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(53,103,1,'mllerj@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(54,149,1,'robertsr@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(55,136,1,'robertson.ivey@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(56,24,1,'smith.brittney@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(57,24,1,'smith.d.brittney@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL),(58,36,1,'brzczysawparker50@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(59,36,1,'brzczysawp31@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(60,7,1,'jacksonl@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(61,7,1,'lee.jackson@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL),(62,158,1,'ar.terry71@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(63,20,1,'allenroberts@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(64,20,1,'robertsa@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(65,93,1,'shadmcreynolds6@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(66,93,1,'mcreynolds.shad8@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(67,69,1,'chowski.ashlie52@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(68,69,1,'ashlie82@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(69,21,1,'wilson.brigette49@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL),(70,137,1,'cruz.sanford48@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(71,152,1,'reynolds.shad@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(72,185,1,'daz.sonny@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(73,30,1,'brittneywilson@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(74,30,1,'brittneyw@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(75,62,1,'elbertmller39@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(76,9,1,'jacobjensen58@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(77,78,1,'prenticer36@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(78,78,1,'prentice.t.rolando88@fakemail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(79,117,1,'bzope56@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(80,117,1,'zope.bob93@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(81,196,1,'es.dimitrov@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(82,196,1,'dimitrove7@testmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(83,13,1,'cooperl@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(84,180,1,'daza@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(85,155,1,'kathleennielsen-daz79@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL),(86,165,1,'daz.toby@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(87,165,1,'tobydaz31@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(88,52,1,'bp.daz12@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(89,52,1,'bp.daz@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(90,132,1,'ajensen70@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(91,132,1,'allenjensen65@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(92,109,1,'ashleyj@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(93,109,1,'jensen-wilsona@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL),(94,11,1,'smithr13@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(95,11,1,'ru.smith69@spamalot.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(96,45,1,'smith.d.kandace@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(97,88,1,'jameson.q.teddy@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(98,200,1,'brentjameson@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(99,200,1,'brentjameson62@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL),(100,124,1,'irisjameson76@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(101,125,1,'adams.rosario@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL),(102,14,1,'ivanovs70@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL),(103,14,1,'ivanov.shad38@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(104,163,1,'ivanov-dimitrovm@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(105,163,1,'migueli@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(106,189,1,'troya@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(107,104,1,'adams.roland@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(108,151,1,'adams.e.allan86@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(109,190,1,'josefaadams@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(110,77,1,'edaz@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(111,77,1,'edaz@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL),(112,176,1,'dazk@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL),(113,139,1,'daz.scarlet@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(114,139,1,'sc.daz2@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(115,150,1,'kh.samson16@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(116,174,1,'samson.winford89@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(117,174,1,'samson.winford11@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(118,73,1,'bu.samson@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(119,73,1,'samsonb@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(120,107,1,'dt.wagner@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(121,173,1,'wagner.lou25@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(122,173,1,'lwagner95@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(123,33,1,'jacobsi6@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(124,59,1,'wagner-jacobs.scarlet97@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(125,59,1,'swagner-jacobs@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(126,5,1,'wagner-jacobsr9@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(127,64,1,'kp.deforest@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(128,64,1,'deforest.kenny95@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(129,87,1,'hh.roberts-deforest@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(130,201,1,'ki.deforest@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(131,126,1,'deforest.p.kandace89@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(132,126,1,'kandaced42@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(133,141,1,'smith-daz.l.eleonor@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(134,94,1,'daz.r.laree@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(135,153,1,'chowski.b.kathlyn@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(136,191,1,'chowski.billy@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(137,32,1,'chowski.justina@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(138,169,1,'reynoldsc@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(139,186,1,'reynolds.tanya14@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(140,133,1,'elizabethreynolds@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(141,133,1,'reynolds.elizabeth50@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(142,4,1,'errolreynolds@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(143,4,1,'reynolds.errol@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(144,197,1,'rl.robertson@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(145,171,1,'rosarioterrell-robertson82@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(146,184,1,'lawerencer@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(147,130,1,'carlosr@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(148,170,1,'chowski.shad@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(149,170,1,'shadchowski@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(150,114,1,'bernadetteg@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(151,114,1,'gonzlez.bernadette25@example.net',0,0,0,0,NULL,NULL,NULL,NULL),(152,160,1,'chowski-gonzlez.brittney@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(153,113,1,'dimitrov.b.brzczysaw@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(154,148,1,'dimitrov.d.lawerence@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(155,148,1,'dimitrov.d.lawerence@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(156,179,1,'scarletdimitrov53@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(157,72,1,'ou.blackwell@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(158,195,1,'bachman-blackwell.landon80@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(159,156,1,'ts.bachman-blackwell28@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(160,156,1,'bachman-blackwellt@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(161,74,3,'feedback@urbanpeacefund.org',1,0,0,0,NULL,NULL,NULL,NULL),(162,160,2,'brittneychowski-gonzlez@urbanpeacefund.org',0,0,0,0,NULL,NULL,NULL,NULL),(163,111,3,'service@sierrapeaceinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL),(164,154,2,'chowski-gonzlezo12@sierrapeaceinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL),(165,23,3,'service@creativeeducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(166,121,2,'@creativeeducation.org',0,0,0,0,NULL,NULL,NULL,NULL),(167,65,3,'sales@indiahomahealthcollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(168,84,2,'scooper13@indiahomahealthcollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(169,82,3,'feedback@pineassociation.org',1,0,0,0,NULL,NULL,NULL,NULL),(170,123,3,'service@mlkingeducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(171,21,2,'brigettew34@mlkingeducation.org',0,0,0,0,NULL,NULL,NULL,NULL),(172,55,3,'service@mainarts.org',1,0,0,0,NULL,NULL,NULL,NULL),(173,144,3,'feedback@urbaninitiative.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,142,2,'scarletjones@urbaninitiative.org',0,0,0,0,NULL,NULL,NULL,NULL),(175,63,3,'sales@nyhealthsystems.org',1,0,0,0,NULL,NULL,NULL,NULL),(176,193,2,'samson.o.carlos@nyhealthsystems.org',1,0,0,0,NULL,NULL,NULL,NULL),(177,178,3,'sales@wisconsinwellness.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,18,2,'wattsonb@wisconsinwellness.org',0,0,0,0,NULL,NULL,NULL,NULL),(179,101,3,'contact@spactionservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,119,2,'grant.j.jina@spactionservices.org',0,0,0,0,NULL,NULL,NULL,NULL),(181,135,3,'contact@austinhealth.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,39,3,'info@farmingtonservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(183,19,2,'adams-wilsonr7@farmingtonservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(184,60,3,'info@paluxyenvironmental.org',1,0,0,0,NULL,NULL,NULL,NULL),(185,26,2,'ivanov.justina@paluxyenvironmental.org',1,0,0,0,NULL,NULL,NULL,NULL),(186,182,3,'contact@statespartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(187,106,2,'mcreynoldsv@statespartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(188,105,3,'feedback@unitedtechnology.org',1,0,0,0,NULL,NULL,NULL,NULL),(189,29,2,'11@unitedtechnology.org',0,0,0,0,NULL,NULL,NULL,NULL),(190,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(191,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(192,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -447,7 +447,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES (1,'civicrm_contribution',1,1,125.00),(2,'civicrm_financial_item',1,1,125.00),(3,'civicrm_contribution',2,2,50.00),(4,'civicrm_financial_item',2,2,50.00),(5,'civicrm_contribution',3,3,25.00),(6,'civicrm_financial_item',3,3,25.00),(7,'civicrm_contribution',4,4,50.00),(8,'civicrm_financial_item',4,4,50.00),(9,'civicrm_contribution',5,5,500.00),(10,'civicrm_financial_item',5,5,500.00),(11,'civicrm_contribution',6,6,175.00),(12,'civicrm_financial_item',6,6,175.00),(13,'civicrm_contribution',7,7,50.00),(14,'civicrm_financial_item',7,7,50.00),(15,'civicrm_contribution',8,8,10.00),(16,'civicrm_financial_item',8,8,10.00),(17,'civicrm_contribution',9,9,250.00),(18,'civicrm_financial_item',9,9,250.00),(19,'civicrm_contribution',10,10,500.00),(20,'civicrm_financial_item',10,10,500.00),(21,'civicrm_contribution',11,11,200.00),(22,'civicrm_financial_item',11,11,200.00),(23,'civicrm_contribution',12,12,200.00),(24,'civicrm_financial_item',12,12,200.00),(25,'civicrm_contribution',13,13,200.00),(26,'civicrm_financial_item',13,13,200.00),(27,'civicrm_contribution',14,14,100.00),(28,'civicrm_financial_item',14,14,100.00),(29,'civicrm_contribution',15,15,100.00),(30,'civicrm_financial_item',15,15,100.00),(31,'civicrm_contribution',16,16,100.00),(32,'civicrm_financial_item',16,16,100.00),(33,'civicrm_contribution',17,17,100.00),(34,'civicrm_financial_item',17,17,100.00),(35,'civicrm_contribution',18,18,100.00),(36,'civicrm_financial_item',18,18,100.00),(37,'civicrm_contribution',19,19,100.00),(38,'civicrm_financial_item',19,19,100.00),(39,'civicrm_contribution',20,20,100.00),(40,'civicrm_financial_item',20,20,100.00),(41,'civicrm_contribution',21,21,100.00),(42,'civicrm_financial_item',21,21,100.00),(43,'civicrm_contribution',22,22,100.00),(44,'civicrm_financial_item',22,22,100.00),(45,'civicrm_contribution',23,23,100.00),(46,'civicrm_financial_item',23,23,100.00),(47,'civicrm_contribution',24,24,100.00),(48,'civicrm_financial_item',24,24,100.00),(49,'civicrm_contribution',25,25,100.00),(50,'civicrm_financial_item',25,25,100.00),(51,'civicrm_contribution',26,26,100.00),(52,'civicrm_financial_item',26,26,100.00),(53,'civicrm_contribution',27,27,100.00),(54,'civicrm_financial_item',27,27,100.00),(55,'civicrm_contribution',28,28,50.00),(56,'civicrm_financial_item',28,28,50.00),(57,'civicrm_contribution',29,29,50.00),(58,'civicrm_financial_item',29,29,50.00),(59,'civicrm_contribution',30,30,50.00),(60,'civicrm_financial_item',30,30,50.00),(61,'civicrm_contribution',31,31,50.00),(62,'civicrm_financial_item',31,31,50.00),(63,'civicrm_contribution',32,32,50.00),(64,'civicrm_financial_item',32,32,50.00),(65,'civicrm_contribution',33,33,50.00),(66,'civicrm_financial_item',33,33,50.00),(67,'civicrm_contribution',34,34,50.00),(68,'civicrm_financial_item',34,34,50.00),(69,'civicrm_contribution',35,35,50.00),(70,'civicrm_financial_item',35,35,50.00),(71,'civicrm_contribution',36,36,50.00),(72,'civicrm_financial_item',36,36,50.00),(73,'civicrm_contribution',37,37,50.00),(74,'civicrm_financial_item',37,37,50.00),(75,'civicrm_contribution',38,38,50.00),(76,'civicrm_financial_item',38,38,50.00),(77,'civicrm_contribution',39,39,50.00),(78,'civicrm_financial_item',39,39,50.00),(79,'civicrm_contribution',40,40,50.00),(80,'civicrm_financial_item',40,40,50.00),(81,'civicrm_contribution',41,41,50.00),(82,'civicrm_financial_item',41,41,50.00),(83,'civicrm_contribution',42,42,1200.00),(84,'civicrm_financial_item',42,42,1200.00),(85,'civicrm_contribution',43,43,1200.00),(86,'civicrm_financial_item',43,43,1200.00),(87,'civicrm_contribution',55,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',91,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',66,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',89,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',87,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',46,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',73,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',51,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',74,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',61,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',47,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',88,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',62,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',72,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',58,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',52,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',57,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',53,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',54,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',92,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',69,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',75,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',64,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',83,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',49,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',80,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',78,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',50,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',71,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',84,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',90,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',76,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',86,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',45,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',93,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',77,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',48,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',59,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',68,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',85,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',79,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',82,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',81,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',94,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',60,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',65,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',63,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',70,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',56,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',67,93,50.00),(186,'civicrm_financial_item',93,93,50.00); +INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES (1,'civicrm_contribution',1,1,125.00),(2,'civicrm_financial_item',1,1,125.00),(3,'civicrm_contribution',2,2,50.00),(4,'civicrm_financial_item',2,2,50.00),(5,'civicrm_contribution',3,3,25.00),(6,'civicrm_financial_item',3,3,25.00),(7,'civicrm_contribution',4,4,50.00),(8,'civicrm_financial_item',4,4,50.00),(9,'civicrm_contribution',5,5,500.00),(10,'civicrm_financial_item',5,5,500.00),(11,'civicrm_contribution',6,6,175.00),(12,'civicrm_financial_item',6,6,175.00),(13,'civicrm_contribution',7,7,50.00),(14,'civicrm_financial_item',7,7,50.00),(15,'civicrm_contribution',8,8,10.00),(16,'civicrm_financial_item',8,8,10.00),(17,'civicrm_contribution',9,9,250.00),(18,'civicrm_financial_item',9,9,250.00),(19,'civicrm_contribution',10,10,500.00),(20,'civicrm_financial_item',10,10,500.00),(21,'civicrm_contribution',11,11,200.00),(22,'civicrm_financial_item',11,11,200.00),(23,'civicrm_contribution',12,12,200.00),(24,'civicrm_financial_item',12,12,200.00),(25,'civicrm_contribution',13,13,200.00),(26,'civicrm_financial_item',13,13,200.00),(27,'civicrm_contribution',14,14,100.00),(28,'civicrm_financial_item',14,14,100.00),(29,'civicrm_contribution',15,15,100.00),(30,'civicrm_financial_item',15,15,100.00),(31,'civicrm_contribution',16,16,100.00),(32,'civicrm_financial_item',16,16,100.00),(33,'civicrm_contribution',17,17,100.00),(34,'civicrm_financial_item',17,17,100.00),(35,'civicrm_contribution',18,18,100.00),(36,'civicrm_financial_item',18,18,100.00),(37,'civicrm_contribution',19,19,100.00),(38,'civicrm_financial_item',19,19,100.00),(39,'civicrm_contribution',20,20,100.00),(40,'civicrm_financial_item',20,20,100.00),(41,'civicrm_contribution',21,21,100.00),(42,'civicrm_financial_item',21,21,100.00),(43,'civicrm_contribution',22,22,100.00),(44,'civicrm_financial_item',22,22,100.00),(45,'civicrm_contribution',23,23,100.00),(46,'civicrm_financial_item',23,23,100.00),(47,'civicrm_contribution',24,24,100.00),(48,'civicrm_financial_item',24,24,100.00),(49,'civicrm_contribution',25,25,100.00),(50,'civicrm_financial_item',25,25,100.00),(51,'civicrm_contribution',26,26,100.00),(52,'civicrm_financial_item',26,26,100.00),(53,'civicrm_contribution',27,27,100.00),(54,'civicrm_financial_item',27,27,100.00),(55,'civicrm_contribution',28,28,100.00),(56,'civicrm_financial_item',28,28,100.00),(57,'civicrm_contribution',29,29,50.00),(58,'civicrm_financial_item',29,29,50.00),(59,'civicrm_contribution',30,30,50.00),(60,'civicrm_financial_item',30,30,50.00),(61,'civicrm_contribution',31,31,50.00),(62,'civicrm_financial_item',31,31,50.00),(63,'civicrm_contribution',32,32,50.00),(64,'civicrm_financial_item',32,32,50.00),(65,'civicrm_contribution',33,33,50.00),(66,'civicrm_financial_item',33,33,50.00),(67,'civicrm_contribution',34,34,50.00),(68,'civicrm_financial_item',34,34,50.00),(69,'civicrm_contribution',35,35,50.00),(70,'civicrm_financial_item',35,35,50.00),(71,'civicrm_contribution',36,36,50.00),(72,'civicrm_financial_item',36,36,50.00),(73,'civicrm_contribution',37,37,50.00),(74,'civicrm_financial_item',37,37,50.00),(75,'civicrm_contribution',38,38,50.00),(76,'civicrm_financial_item',38,38,50.00),(77,'civicrm_contribution',39,39,50.00),(78,'civicrm_financial_item',39,39,50.00),(79,'civicrm_contribution',40,40,50.00),(80,'civicrm_financial_item',40,40,50.00),(81,'civicrm_contribution',41,41,50.00),(82,'civicrm_financial_item',41,41,50.00),(83,'civicrm_contribution',42,42,1200.00),(84,'civicrm_financial_item',42,42,1200.00),(85,'civicrm_contribution',43,43,1200.00),(86,'civicrm_financial_item',43,43,1200.00),(87,'civicrm_contribution',59,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',69,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',86,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',45,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',93,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',82,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',89,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',57,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',58,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',54,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',67,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',65,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',72,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',62,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',49,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',85,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',60,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',88,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',80,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',53,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',52,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',68,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',83,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',78,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',64,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',47,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',70,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',79,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',61,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',51,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',48,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',94,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',77,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',56,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',74,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',66,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',63,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',73,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',75,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',71,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',81,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',90,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',55,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',87,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',46,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',91,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',92,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',84,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',50,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',76,93,50.00),(186,'civicrm_financial_item',93,93,50.00); /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -457,7 +457,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_tag` WRITE; /*!40000 ALTER TABLE `civicrm_entity_tag` DISABLE KEYS */; -INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES (3,'civicrm_contact',2,3),(92,'civicrm_contact',3,4),(93,'civicrm_contact',3,5),(12,'civicrm_contact',4,4),(27,'civicrm_contact',6,4),(28,'civicrm_contact',6,5),(1,'civicrm_contact',10,1),(67,'civicrm_contact',11,5),(57,'civicrm_contact',13,5),(58,'civicrm_contact',17,5),(37,'civicrm_contact',18,4),(38,'civicrm_contact',18,5),(87,'civicrm_contact',19,4),(70,'civicrm_contact',20,4),(95,'civicrm_contact',21,4),(96,'civicrm_contact',21,5),(98,'civicrm_contact',22,4),(73,'civicrm_contact',26,4),(10,'civicrm_contact',27,1),(43,'civicrm_contact',28,5),(78,'civicrm_contact',29,5),(63,'civicrm_contact',34,5),(66,'civicrm_contact',35,4),(85,'civicrm_contact',36,4),(86,'civicrm_contact',36,5),(32,'civicrm_contact',37,5),(46,'civicrm_contact',38,4),(88,'civicrm_contact',39,4),(89,'civicrm_contact',39,5),(91,'civicrm_contact',40,4),(79,'civicrm_contact',41,5),(71,'civicrm_contact',45,4),(72,'civicrm_contact',45,5),(9,'civicrm_contact',49,1),(47,'civicrm_contact',51,4),(48,'civicrm_contact',51,5),(5,'civicrm_contact',52,1),(17,'civicrm_contact',59,5),(83,'civicrm_contact',60,4),(84,'civicrm_contact',60,5),(103,'civicrm_contact',61,5),(68,'civicrm_contact',62,5),(41,'civicrm_contact',65,4),(35,'civicrm_contact',66,4),(36,'civicrm_contact',66,5),(24,'civicrm_contact',67,4),(6,'civicrm_contact',69,1),(105,'civicrm_contact',73,5),(64,'civicrm_contact',74,4),(65,'civicrm_contact',82,4),(104,'civicrm_contact',86,4),(14,'civicrm_contact',91,5),(108,'civicrm_contact',92,4),(30,'civicrm_contact',94,5),(39,'civicrm_contact',98,4),(76,'civicrm_contact',99,4),(77,'civicrm_contact',99,5),(7,'civicrm_contact',101,2),(13,'civicrm_contact',103,5),(60,'civicrm_contact',105,4),(61,'civicrm_contact',105,5),(2,'civicrm_contact',106,3),(80,'civicrm_contact',107,5),(94,'civicrm_contact',110,4),(33,'civicrm_contact',112,5),(16,'civicrm_contact',113,4),(23,'civicrm_contact',115,4),(56,'civicrm_contact',118,4),(44,'civicrm_contact',119,5),(25,'civicrm_contact',124,5),(51,'civicrm_contact',126,4),(52,'civicrm_contact',126,5),(97,'civicrm_contact',127,5),(19,'civicrm_contact',129,4),(20,'civicrm_contact',129,5),(11,'civicrm_contact',137,4),(34,'civicrm_contact',139,5),(74,'civicrm_contact',141,4),(75,'civicrm_contact',141,5),(110,'civicrm_contact',143,5),(55,'civicrm_contact',146,4),(31,'civicrm_contact',149,5),(90,'civicrm_contact',151,5),(49,'civicrm_contact',153,4),(50,'civicrm_contact',153,5),(62,'civicrm_contact',154,4),(53,'civicrm_contact',155,5),(26,'civicrm_contact',157,5),(81,'civicrm_contact',159,4),(82,'civicrm_contact',159,5),(59,'civicrm_contact',160,5),(45,'civicrm_contact',163,4),(29,'civicrm_contact',164,5),(15,'civicrm_contact',172,4),(107,'civicrm_contact',173,4),(8,'civicrm_contact',176,3),(21,'civicrm_contact',177,4),(22,'civicrm_contact',177,5),(106,'civicrm_contact',181,5),(4,'civicrm_contact',182,1),(42,'civicrm_contact',185,4),(99,'civicrm_contact',186,4),(100,'civicrm_contact',186,5),(109,'civicrm_contact',187,5),(40,'civicrm_contact',188,4),(101,'civicrm_contact',192,4),(102,'civicrm_contact',192,5),(54,'civicrm_contact',196,5),(69,'civicrm_contact',197,5),(18,'civicrm_contact',199,5); +INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES (46,'civicrm_contact',7,4),(73,'civicrm_contact',11,4),(79,'civicrm_contact',14,4),(17,'civicrm_contact',15,4),(18,'civicrm_contact',15,5),(40,'civicrm_contact',16,5),(52,'civicrm_contact',21,4),(53,'civicrm_contact',21,5),(24,'civicrm_contact',22,5),(3,'civicrm_contact',23,1),(44,'civicrm_contact',24,4),(45,'civicrm_contact',24,5),(27,'civicrm_contact',26,5),(47,'civicrm_contact',28,5),(7,'civicrm_contact',31,2),(30,'civicrm_contact',34,5),(16,'civicrm_contact',37,4),(9,'civicrm_contact',39,1),(38,'civicrm_contact',41,4),(28,'civicrm_contact',44,5),(29,'civicrm_contact',47,5),(11,'civicrm_contact',50,4),(5,'civicrm_contact',55,2),(14,'civicrm_contact',56,5),(90,'civicrm_contact',58,5),(93,'civicrm_contact',59,4),(58,'civicrm_contact',62,5),(6,'civicrm_contact',63,3),(94,'civicrm_contact',64,5),(31,'civicrm_contact',66,4),(32,'civicrm_contact',66,5),(74,'civicrm_contact',67,4),(12,'civicrm_contact',71,5),(111,'civicrm_contact',72,4),(112,'civicrm_contact',72,5),(84,'civicrm_contact',77,5),(59,'civicrm_contact',78,4),(60,'civicrm_contact',78,5),(4,'civicrm_contact',82,2),(64,'civicrm_contact',84,4),(65,'civicrm_contact',84,5),(61,'civicrm_contact',86,5),(75,'civicrm_contact',88,4),(15,'civicrm_contact',91,5),(50,'civicrm_contact',93,4),(51,'civicrm_contact',93,5),(99,'civicrm_contact',94,4),(8,'civicrm_contact',95,3),(97,'civicrm_contact',96,4),(98,'civicrm_contact',96,5),(22,'civicrm_contact',99,4),(23,'civicrm_contact',99,5),(42,'civicrm_contact',103,5),(91,'civicrm_contact',107,4),(25,'civicrm_contact',108,4),(26,'civicrm_contact',108,5),(72,'civicrm_contact',109,4),(13,'civicrm_contact',110,4),(109,'civicrm_contact',113,5),(19,'civicrm_contact',115,4),(33,'civicrm_contact',119,4),(77,'civicrm_contact',125,4),(2,'civicrm_contact',127,2),(41,'civicrm_contact',128,4),(55,'civicrm_contact',129,4),(56,'civicrm_contact',129,5),(70,'civicrm_contact',132,4),(71,'civicrm_contact',132,5),(104,'civicrm_contact',133,4),(85,'civicrm_contact',139,5),(36,'civicrm_contact',142,5),(110,'civicrm_contact',148,5),(43,'civicrm_contact',149,4),(86,'civicrm_contact',150,4),(87,'civicrm_contact',150,5),(83,'civicrm_contact',151,4),(54,'civicrm_contact',152,4),(100,'civicrm_contact',153,4),(101,'civicrm_contact',153,5),(108,'civicrm_contact',154,4),(48,'civicrm_contact',158,5),(34,'civicrm_contact',159,4),(35,'civicrm_contact',159,5),(62,'civicrm_contact',162,4),(63,'civicrm_contact',162,5),(80,'civicrm_contact',163,4),(37,'civicrm_contact',164,4),(68,'civicrm_contact',165,4),(69,'civicrm_contact',165,5),(78,'civicrm_contact',166,4),(103,'civicrm_contact',169,4),(107,'civicrm_contact',170,5),(92,'civicrm_contact',173,5),(88,'civicrm_contact',174,4),(89,'civicrm_contact',174,5),(66,'civicrm_contact',180,4),(67,'civicrm_contact',180,5),(10,'civicrm_contact',182,3),(106,'civicrm_contact',184,4),(57,'civicrm_contact',185,5),(39,'civicrm_contact',188,4),(81,'civicrm_contact',189,4),(82,'civicrm_contact',189,5),(102,'civicrm_contact',191,4),(1,'civicrm_contact',192,3),(113,'civicrm_contact',195,4),(114,'civicrm_contact',195,5),(105,'civicrm_contact',197,4),(20,'civicrm_contact',198,4),(21,'civicrm_contact',198,5),(49,'civicrm_contact',199,4),(76,'civicrm_contact',200,4),(95,'civicrm_contact',201,4),(96,'civicrm_contact',201,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -467,7 +467,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_event` WRITE; /*!40000 ALTER TABLE `civicrm_event` DISABLE KEYS */; -INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2020-12-04 17:00:00','2020-12-06 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2020-06-03 12:00:00','2020-06-03 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2021-01-04 07:00:00','2021-01-07 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(4,NULL,NULL,NULL,4,1,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting without Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(5,NULL,NULL,NULL,4,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(6,NULL,NULL,NULL,1,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,1,4,NULL,0,1,'Conference Fee',1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,1,NULL,'Event Template Dept.','event_templates@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); +INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2020-12-10 17:00:00','2020-12-12 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2020-06-09 12:00:00','2020-06-09 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2021-01-10 07:00:00','2021-01-13 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(4,NULL,NULL,NULL,4,1,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting without Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(5,NULL,NULL,NULL,4,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0),(6,NULL,NULL,NULL,1,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,1,4,NULL,0,1,'Conference Fee',1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,1,NULL,'Event Template Dept.','event_templates@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_event` ENABLE KEYS */; UNLOCK TABLES; @@ -524,7 +524,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_item` WRITE; /*!40000 ALTER TABLE `civicrm_financial_item` DISABLE KEYS */; -INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES (1,'2020-06-04 09:38:20','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2020-06-04 09:38:20','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2020-06-04 09:38:20','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2020-06-04 09:38:20','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2020-06-04 09:38:20','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2020-06-04 09:38:20','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2020-06-04 09:38:20','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2020-06-04 09:38:20','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2020-06-04 09:38:20','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2020-06-04 09:38:20','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2020-06-04 09:38:20','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2020-06-04 09:38:20','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2020-06-04 09:38:20','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2020-06-04 09:38:20','2020-06-04 10:38:20',181,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2020-06-04 09:38:20','2020-06-04 10:38:20',40,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2020-06-04 09:38:20','2020-06-04 10:38:20',168,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2020-06-04 09:38:20','2020-06-04 10:38:20',160,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2020-06-04 09:38:20','2020-06-04 10:38:20',59,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2020-06-04 09:38:20','2020-06-04 10:38:20',61,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2020-06-04 09:38:20','2020-06-04 10:38:20',125,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2020-06-04 09:38:20','2020-06-04 10:38:20',71,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2020-06-04 09:38:20','2020-06-04 10:38:20',3,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2020-06-04 09:38:20','2020-06-04 10:38:20',5,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2020-06-04 09:38:20','2020-06-04 10:38:20',135,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2020-06-04 09:38:20','2020-06-04 10:38:20',94,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2020-06-04 09:38:20','2020-06-04 10:38:20',64,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2020-06-04 09:38:20','2020-06-04 10:38:20',174,'General',100.00,'USD',2,1,'civicrm_line_item',29),(28,'2020-06-04 09:38:20','2020-06-04 10:38:20',188,'Student',50.00,'USD',2,1,'civicrm_line_item',30),(29,'2020-06-04 09:38:20','2020-06-04 10:38:20',126,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2020-06-04 09:38:20','2020-06-04 10:38:20',81,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2020-06-04 09:38:20','2020-06-04 10:38:20',21,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2020-06-04 09:38:20','2020-06-04 10:38:20',12,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2020-06-04 09:38:20','2020-06-04 10:38:20',151,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2020-06-04 09:38:20','2020-06-04 10:38:20',90,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2020-06-04 09:38:20','2020-06-04 10:38:20',184,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2020-06-04 09:38:20','2020-06-04 10:38:20',175,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2020-06-04 09:38:20','2020-06-04 10:38:20',157,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2020-06-04 09:38:20','2020-06-04 10:38:20',195,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2020-06-04 09:38:20','2020-06-04 10:38:20',129,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2020-06-04 09:38:20','2020-06-04 10:38:20',118,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2020-06-04 09:38:20','2020-06-04 10:38:20',68,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2020-06-04 09:38:20','2020-06-04 10:38:20',111,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2020-06-04 09:38:20','2020-06-04 10:38:20',77,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2020-06-04 09:38:20','2020-06-04 10:38:20',49,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2020-06-04 09:38:20','2020-06-04 10:38:20',183,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2020-06-04 09:38:20','2020-06-04 10:38:20',84,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2020-06-04 09:38:20','2020-06-04 10:38:20',169,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2020-06-04 09:38:20','2020-06-04 10:38:20',154,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2020-06-04 09:38:20','2020-06-04 10:38:20',15,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2020-06-04 09:38:20','2020-06-04 10:38:20',108,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2020-06-04 09:38:20','2020-06-04 10:38:20',34,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2020-06-04 09:38:20','2020-06-04 10:38:20',110,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2020-06-04 09:38:20','2020-06-04 10:38:20',66,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2020-06-04 09:38:20','2020-06-04 10:38:20',18,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2020-06-04 09:38:20','2020-06-04 10:38:20',164,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2020-06-04 09:38:20','2020-06-04 10:38:20',70,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2020-06-04 09:38:20','2020-06-04 10:38:20',104,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2020-06-04 09:38:20','2020-06-04 10:38:20',59,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2020-06-04 09:38:20','2020-06-04 10:38:20',39,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2020-06-04 09:38:20','2020-06-04 10:38:20',55,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2020-06-04 09:38:20','2020-06-04 10:38:20',41,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2020-06-04 09:38:20','2020-06-04 10:38:20',43,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2020-06-04 09:38:20','2020-06-04 10:38:20',188,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2020-06-04 09:38:20','2020-06-04 10:38:20',97,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2020-06-04 09:38:20','2020-06-04 10:38:20',119,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2020-06-04 09:38:20','2020-06-04 10:38:20',79,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2020-06-04 09:38:20','2020-06-04 10:38:20',139,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2020-06-04 09:38:20','2020-06-04 10:38:20',27,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2020-06-04 09:38:20','2020-06-04 10:38:20',132,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2020-06-04 09:38:20','2020-06-04 10:38:20',125,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2020-06-04 09:38:20','2020-06-04 10:38:20',32,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2020-06-04 09:38:20','2020-06-04 10:38:20',101,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2020-06-04 09:38:20','2020-06-04 10:38:20',141,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2020-06-04 09:38:20','2020-06-04 10:38:20',177,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2020-06-04 09:38:20','2020-06-04 10:38:20',121,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2020-06-04 09:38:20','2020-06-04 10:38:20',150,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2020-06-04 09:38:20','2020-06-04 10:38:20',7,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2020-06-04 09:38:20','2020-06-04 10:38:20',189,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2020-06-04 09:38:20','2020-06-04 10:38:20',124,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2020-06-04 09:38:20','2020-06-04 10:38:20',20,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2020-06-04 09:38:20','2020-06-04 10:38:20',60,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2020-06-04 09:38:20','2020-06-04 10:38:20',96,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2020-06-04 09:38:20','2020-06-04 10:38:20',145,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2020-06-04 09:38:20','2020-06-04 10:38:20',129,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2020-06-04 09:38:20','2020-06-04 10:38:20',137,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2020-06-04 09:38:20','2020-06-04 10:38:20',133,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2020-06-04 09:38:20','2020-06-04 10:38:20',198,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2020-06-04 09:38:20','2020-06-04 10:38:20',63,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2020-06-04 09:38:20','2020-06-04 10:38:20',82,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2020-06-04 09:38:20','2020-06-04 10:38:20',76,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2020-06-04 09:38:20','2020-06-04 10:38:20',98,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2020-06-04 09:38:20','2020-06-04 10:38:20',52,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2020-06-04 09:38:20','2020-06-04 10:38:20',88,'Single',50.00,'USD',4,1,'civicrm_line_item',80); +INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES (1,'2020-06-10 02:45:52','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2020-06-10 02:45:52','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2020-06-10 02:45:52','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2020-06-10 02:45:52','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2020-06-10 02:45:52','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2020-06-10 02:45:52','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2020-06-10 02:45:52','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2020-06-10 02:45:52','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2020-06-10 02:45:52','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2020-06-10 02:45:52','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2020-06-10 02:45:52','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2020-06-10 02:45:52','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2020-06-10 02:45:52','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2020-06-10 02:45:53','2020-06-10 14:45:52',158,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2020-06-10 02:45:53','2020-06-10 14:45:52',9,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2020-06-10 02:45:53','2020-06-10 14:45:52',154,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2020-06-10 02:45:53','2020-06-10 14:45:52',59,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2020-06-10 02:45:53','2020-06-10 14:45:52',52,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2020-06-10 02:45:53','2020-06-10 14:45:52',185,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2020-06-10 02:45:53','2020-06-10 14:45:52',73,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2020-06-10 02:45:53','2020-06-10 14:45:52',12,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2020-06-10 02:45:53','2020-06-10 14:45:52',41,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2020-06-10 02:45:53','2020-06-10 14:45:52',18,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2020-06-10 02:45:53','2020-06-10 14:45:52',126,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2020-06-10 02:45:53','2020-06-10 14:45:52',4,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2020-06-10 02:45:53','2020-06-10 14:45:52',92,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2020-06-10 02:45:53','2020-06-10 14:45:52',62,'General',100.00,'USD',2,1,'civicrm_line_item',29),(28,'2020-06-10 02:45:53','2020-06-10 14:45:52',117,'General',100.00,'USD',2,1,'civicrm_line_item',30),(29,'2020-06-10 02:45:53','2020-06-10 14:45:52',164,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2020-06-10 02:45:53','2020-06-10 14:45:52',174,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2020-06-10 02:45:53','2020-06-10 14:45:52',173,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2020-06-10 02:45:53','2020-06-10 14:45:52',109,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2020-06-10 02:45:53','2020-06-10 14:45:52',10,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2020-06-10 02:45:53','2020-06-10 14:45:52',190,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2020-06-10 02:45:53','2020-06-10 14:45:52',110,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2020-06-10 02:45:53','2020-06-10 14:45:52',81,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2020-06-10 02:45:53','2020-06-10 14:45:52',112,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2020-06-10 02:45:53','2020-06-10 14:45:52',15,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2020-06-10 02:45:53','2020-06-10 14:45:52',134,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2020-06-10 02:45:53','2020-06-10 14:45:52',32,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2020-06-10 02:45:53','2020-06-10 14:45:52',107,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2020-06-10 02:45:53','2020-06-10 14:45:52',147,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2020-06-10 02:45:53','2020-06-10 14:45:52',98,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2020-06-10 02:45:53','2020-06-10 14:45:52',57,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2020-06-10 02:45:53','2020-06-10 14:45:52',113,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2020-06-10 02:45:53','2020-06-10 14:45:52',171,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2020-06-10 02:45:53','2020-06-10 14:45:52',1,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2020-06-10 02:45:53','2020-06-10 14:45:52',198,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2020-06-10 02:45:53','2020-06-10 14:45:52',159,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2020-06-10 02:45:53','2020-06-10 14:45:52',180,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2020-06-10 02:45:53','2020-06-10 14:45:52',51,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2020-06-10 02:45:53','2020-06-10 14:45:52',52,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2020-06-10 02:45:53','2020-06-10 14:45:52',27,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2020-06-10 02:45:53','2020-06-10 14:45:52',83,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2020-06-10 02:45:53','2020-06-10 14:45:52',75,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2020-06-10 02:45:53','2020-06-10 14:45:52',121,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2020-06-10 02:45:53','2020-06-10 14:45:52',68,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2020-06-10 02:45:53','2020-06-10 14:45:52',11,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2020-06-10 02:45:53','2020-06-10 14:45:52',164,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2020-06-10 02:45:53','2020-06-10 14:45:52',59,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2020-06-10 02:45:53','2020-06-10 14:45:52',177,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2020-06-10 02:45:53','2020-06-10 14:45:52',152,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2020-06-10 02:45:53','2020-06-10 14:45:52',23,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2020-06-10 02:45:53','2020-06-10 14:45:52',20,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2020-06-10 02:45:53','2020-06-10 14:45:52',110,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2020-06-10 02:45:53','2020-06-10 14:45:52',161,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2020-06-10 02:45:53','2020-06-10 14:45:52',146,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2020-06-10 02:45:53','2020-06-10 14:45:52',74,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2020-06-10 02:45:53','2020-06-10 14:45:52',4,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2020-06-10 02:45:53','2020-06-10 14:45:52',118,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2020-06-10 02:45:53','2020-06-10 14:45:52',151,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2020-06-10 02:45:53','2020-06-10 14:45:52',61,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2020-06-10 02:45:53','2020-06-10 14:45:52',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2020-06-10 02:45:53','2020-06-10 14:45:52',7,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2020-06-10 02:45:53','2020-06-10 14:45:52',199,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2020-06-10 02:45:53','2020-06-10 14:45:52',142,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2020-06-10 02:45:53','2020-06-10 14:45:52',33,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2020-06-10 02:45:53','2020-06-10 14:45:52',134,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2020-06-10 02:45:53','2020-06-10 14:45:52',76,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2020-06-10 02:45:53','2020-06-10 14:45:52',70,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2020-06-10 02:45:53','2020-06-10 14:45:52',124,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2020-06-10 02:45:53','2020-06-10 14:45:52',139,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2020-06-10 02:45:53','2020-06-10 14:45:52',119,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2020-06-10 02:45:53','2020-06-10 14:45:52',154,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2020-06-10 02:45:53','2020-06-10 14:45:52',183,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2020-06-10 02:45:53','2020-06-10 14:45:52',30,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2020-06-10 02:45:53','2020-06-10 14:45:52',173,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2020-06-10 02:45:53','2020-06-10 14:45:52',3,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2020-06-10 02:45:53','2020-06-10 14:45:52',188,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2020-06-10 02:45:53','2020-06-10 14:45:52',197,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2020-06-10 02:45:53','2020-06-10 14:45:52',162,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2020-06-10 02:45:53','2020-06-10 14:45:52',12,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2020-06-10 02:45:53','2020-06-10 14:45:52',141,'Single',50.00,'USD',4,1,'civicrm_line_item',80); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -534,7 +534,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(14,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(15,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(16,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(17,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(18,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(19,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(20,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(21,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(22,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(23,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(24,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(25,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(26,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(27,NULL,1,'2020-06-04 10:38:20',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(28,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(29,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(30,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(31,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(32,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(33,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(34,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(35,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(36,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(37,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(38,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(39,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(40,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(41,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(42,NULL,1,'2020-06-04 10:38:20',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(43,NULL,1,'2020-06-04 10:38:20',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(44,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(45,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(46,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(47,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(48,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(49,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(50,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(51,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(52,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(53,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(54,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(55,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(56,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(57,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(58,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(59,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(60,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(61,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(62,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(63,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(64,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(65,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(66,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(67,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(68,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(69,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(70,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(71,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(72,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(73,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(74,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(75,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(76,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(77,NULL,1,'2020-06-04 10:38:20',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(78,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(79,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(80,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(81,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(82,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(83,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(84,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(85,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(86,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(87,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(88,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(89,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(90,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(91,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(92,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(93,NULL,1,'2020-06-04 10:38:20',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(14,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(15,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(16,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(17,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(18,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(19,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(20,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(21,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(22,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(23,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(24,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(25,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(26,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(27,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(28,NULL,1,'2020-06-10 14:45:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(29,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(30,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(31,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(32,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(33,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(34,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(35,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(36,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(37,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(38,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(39,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(40,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(41,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(42,NULL,1,'2020-06-10 14:45:52',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(43,NULL,1,'2020-06-10 14:45:52',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(44,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(45,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(46,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(47,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(48,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(49,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(50,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(51,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(52,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(53,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(54,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(55,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(56,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(57,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(58,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(59,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(60,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(61,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(62,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(63,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(64,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(65,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(66,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(67,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(68,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(69,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(70,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(71,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(72,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(73,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(74,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(75,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(76,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(77,NULL,1,'2020-06-10 14:45:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(78,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(79,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(80,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(81,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(82,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(83,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(84,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(85,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(86,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(87,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(88,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(89,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(90,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(91,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(92,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(93,NULL,1,'2020-06-10 14:45:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -573,7 +573,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_group_contact` WRITE; /*!40000 ALTER TABLE `civicrm_group_contact` DISABLE KEYS */; -INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES (1,2,137,'Added',NULL,NULL),(2,2,93,'Added',NULL,NULL),(3,2,4,'Added',NULL,NULL),(4,2,54,'Added',NULL,NULL),(5,2,103,'Added',NULL,NULL),(6,2,195,'Added',NULL,NULL),(7,2,91,'Added',NULL,NULL),(8,2,171,'Added',NULL,NULL),(9,2,172,'Added',NULL,NULL),(10,2,147,'Added',NULL,NULL),(11,2,113,'Added',NULL,NULL),(12,2,63,'Added',NULL,NULL),(13,2,59,'Added',NULL,NULL),(14,2,117,'Added',NULL,NULL),(15,2,199,'Added',NULL,NULL),(16,2,125,'Added',NULL,NULL),(17,2,129,'Added',NULL,NULL),(18,2,135,'Added',NULL,NULL),(19,2,177,'Added',NULL,NULL),(20,2,198,'Added',NULL,NULL),(21,2,115,'Added',NULL,NULL),(22,2,80,'Added',NULL,NULL),(23,2,67,'Added',NULL,NULL),(24,2,179,'Added',NULL,NULL),(25,2,124,'Added',NULL,NULL),(26,2,7,'Added',NULL,NULL),(27,2,157,'Added',NULL,NULL),(28,2,72,'Added',NULL,NULL),(29,2,6,'Added',NULL,NULL),(30,2,168,'Added',NULL,NULL),(31,2,164,'Added',NULL,NULL),(32,2,48,'Added',NULL,NULL),(33,2,94,'Added',NULL,NULL),(34,2,131,'Added',NULL,NULL),(35,2,149,'Added',NULL,NULL),(36,2,68,'Added',NULL,NULL),(37,2,37,'Added',NULL,NULL),(38,2,57,'Added',NULL,NULL),(39,2,112,'Added',NULL,NULL),(40,2,132,'Added',NULL,NULL),(41,2,139,'Added',NULL,NULL),(42,2,53,'Added',NULL,NULL),(43,2,66,'Added',NULL,NULL),(44,2,58,'Added',NULL,NULL),(45,2,18,'Added',NULL,NULL),(46,2,161,'Added',NULL,NULL),(47,2,98,'Added',NULL,NULL),(48,2,140,'Added',NULL,NULL),(49,2,188,'Added',NULL,NULL),(50,2,47,'Added',NULL,NULL),(51,2,65,'Added',NULL,NULL),(52,2,44,'Added',NULL,NULL),(53,2,185,'Added',NULL,NULL),(54,2,43,'Added',NULL,NULL),(55,2,28,'Added',NULL,NULL),(56,2,70,'Added',NULL,NULL),(57,2,119,'Added',NULL,NULL),(58,2,123,'Added',NULL,NULL),(59,2,163,'Added',NULL,NULL),(60,2,8,'Added',NULL,NULL),(61,3,38,'Added',NULL,NULL),(62,3,84,'Added',NULL,NULL),(63,3,51,'Added',NULL,NULL),(64,3,76,'Added',NULL,NULL),(65,3,153,'Added',NULL,NULL),(66,3,15,'Added',NULL,NULL),(67,3,126,'Added',NULL,NULL),(68,3,32,'Added',NULL,NULL),(69,3,155,'Added',NULL,NULL),(70,3,55,'Added',NULL,NULL),(71,3,196,'Added',NULL,NULL),(72,3,191,'Added',NULL,NULL),(73,3,146,'Added',NULL,NULL),(74,3,5,'Added',NULL,NULL),(75,3,118,'Added',NULL,NULL),(76,4,137,'Added',NULL,NULL),(77,4,171,'Added',NULL,NULL),(78,4,199,'Added',NULL,NULL),(79,4,80,'Added',NULL,NULL),(80,4,6,'Added',NULL,NULL),(81,4,68,'Added',NULL,NULL),(82,4,66,'Added',NULL,NULL),(83,4,47,'Added',NULL,NULL); +INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES (1,2,50,'Added',NULL,NULL),(2,2,43,'Added',NULL,NULL),(3,2,71,'Added',NULL,NULL),(4,2,177,'Added',NULL,NULL),(5,2,110,'Added',NULL,NULL),(6,2,97,'Added',NULL,NULL),(7,2,56,'Added',NULL,NULL),(8,2,75,'Added',NULL,NULL),(9,2,91,'Added',NULL,NULL),(10,2,172,'Added',NULL,NULL),(11,2,37,'Added',NULL,NULL),(12,2,175,'Added',NULL,NULL),(13,2,15,'Added',NULL,NULL),(14,2,106,'Added',NULL,NULL),(15,2,115,'Added',NULL,NULL),(16,2,147,'Added',NULL,NULL),(17,2,198,'Added',NULL,NULL),(18,2,53,'Added',NULL,NULL),(19,2,99,'Added',NULL,NULL),(20,2,146,'Added',NULL,NULL),(21,2,22,'Added',NULL,NULL),(22,2,18,'Added',NULL,NULL),(23,2,108,'Added',NULL,NULL),(24,2,27,'Added',NULL,NULL),(25,2,26,'Added',NULL,NULL),(26,2,92,'Added',NULL,NULL),(27,2,44,'Added',NULL,NULL),(28,2,121,'Added',NULL,NULL),(29,2,47,'Added',NULL,NULL),(30,2,138,'Added',NULL,NULL),(31,2,34,'Added',NULL,NULL),(32,2,85,'Added',NULL,NULL),(33,2,66,'Added',NULL,NULL),(34,2,157,'Added',NULL,NULL),(35,2,119,'Added',NULL,NULL),(36,2,10,'Added',NULL,NULL),(37,2,159,'Added',NULL,NULL),(38,2,194,'Added',NULL,NULL),(39,2,142,'Added',NULL,NULL),(40,2,61,'Added',NULL,NULL),(41,2,164,'Added',NULL,NULL),(42,2,134,'Added',NULL,NULL),(43,2,41,'Added',NULL,NULL),(44,2,116,'Added',NULL,NULL),(45,2,188,'Added',NULL,NULL),(46,2,120,'Added',NULL,NULL),(47,2,16,'Added',NULL,NULL),(48,2,29,'Added',NULL,NULL),(49,2,128,'Added',NULL,NULL),(50,2,118,'Added',NULL,NULL),(51,2,103,'Added',NULL,NULL),(52,2,143,'Added',NULL,NULL),(53,2,149,'Added',NULL,NULL),(54,2,136,'Added',NULL,NULL),(55,2,24,'Added',NULL,NULL),(56,2,36,'Added',NULL,NULL),(57,2,7,'Added',NULL,NULL),(58,2,167,'Added',NULL,NULL),(59,2,28,'Added',NULL,NULL),(60,2,145,'Added',NULL,NULL),(61,3,158,'Added',NULL,NULL),(62,3,20,'Added',NULL,NULL),(63,3,199,'Added',NULL,NULL),(64,3,112,'Added',NULL,NULL),(65,3,93,'Added',NULL,NULL),(66,3,69,'Added',NULL,NULL),(67,3,21,'Added',NULL,NULL),(68,3,137,'Added',NULL,NULL),(69,3,152,'Added',NULL,NULL),(70,3,12,'Added',NULL,NULL),(71,3,129,'Added',NULL,NULL),(72,3,81,'Added',NULL,NULL),(73,3,185,'Added',NULL,NULL),(74,3,30,'Added',NULL,NULL),(75,3,62,'Added',NULL,NULL),(76,4,50,'Added',NULL,NULL),(77,4,75,'Added',NULL,NULL),(78,4,115,'Added',NULL,NULL),(79,4,18,'Added',NULL,NULL),(80,4,47,'Added',NULL,NULL),(81,4,10,'Added',NULL,NULL),(82,4,41,'Added',NULL,NULL),(83,4,118,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -638,7 +638,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_line_item` WRITE; /*!40000 ALTER TABLE `civicrm_line_item` DISABLE KEYS */; -INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL),(2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL),(4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL),(7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL),(9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL),(10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',7,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',9,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',13,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',15,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',17,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',19,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',20,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',21,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',23,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',27,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',29,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',30,27,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(30,'civicrm_membership',2,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(31,'civicrm_membership',4,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(32,'civicrm_membership',5,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',6,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',8,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(35,'civicrm_membership',10,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(36,'civicrm_membership',12,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(37,'civicrm_membership',14,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(38,'civicrm_membership',16,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(39,'civicrm_membership',18,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(40,'civicrm_membership',24,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(41,'civicrm_membership',25,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',26,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(47,'civicrm_participant',3,57,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,53,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,54,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,92,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,75,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,83,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,49,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,78,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,50,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,90,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,76,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,86,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,45,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,93,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,77,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,48,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,59,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,85,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,82,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,94,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,60,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,63,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,70,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,56,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,67,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,55,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,91,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,66,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,89,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,87,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,46,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,73,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,51,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,74,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,61,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,47,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,88,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,62,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,58,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,52,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); +INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL),(2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL),(4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL),(7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL),(9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL),(10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',5,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',7,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',9,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',10,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',13,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',15,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',17,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',19,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',21,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',23,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',25,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',27,27,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(30,'civicrm_membership',29,28,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(31,'civicrm_membership',2,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(32,'civicrm_membership',4,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',6,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',8,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(35,'civicrm_membership',12,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(36,'civicrm_membership',14,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(37,'civicrm_membership',16,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(38,'civicrm_membership',18,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(39,'civicrm_membership',20,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(40,'civicrm_membership',24,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(41,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',28,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',30,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(47,'civicrm_participant',3,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,88,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,53,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,52,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,68,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,83,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,78,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,70,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,79,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,61,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,51,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,48,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,77,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,56,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,74,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,66,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,63,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,73,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,75,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,71,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,55,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,87,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,46,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,91,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,92,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,84,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,50,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,76,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,59,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,69,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,86,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,45,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,82,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,89,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,57,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,58,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,67,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,65,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,62,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,49,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,85,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */; UNLOCK TABLES; @@ -648,7 +648,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_loc_block` WRITE; /*!40000 ALTER TABLE `civicrm_loc_block` DISABLE KEYS */; -INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES (1,177,181,157,NULL,NULL,NULL,NULL,NULL),(2,178,182,158,NULL,NULL,NULL,NULL,NULL),(3,179,183,159,NULL,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES (1,174,190,158,NULL,NULL,NULL,NULL,NULL),(2,175,191,159,NULL,NULL,NULL,NULL,NULL),(3,176,192,160,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -897,7 +897,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership` WRITE; /*!40000 ALTER TABLE `civicrm_membership` DISABLE KEYS */; -INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES (1,181,1,'2020-06-04','2020-06-04','2022-06-03','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,188,2,'2020-06-03','2020-06-03','2021-06-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,40,1,'2020-06-02','2020-06-02','2022-06-01','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,126,2,'2020-06-01','2020-06-01','2021-05-31','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,81,2,'2019-05-31','2019-05-31','2020-05-30','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,21,2,'2020-05-30','2020-05-30','2021-05-29','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,168,1,'2020-05-29','2020-05-29','2022-05-28','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,12,2,'2020-05-28','2020-05-28','2021-05-27','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,160,1,'2020-05-27','2020-05-27','2022-05-26','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,151,2,'2019-05-26','2019-05-26','2020-05-25','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,111,3,'2020-05-25','2020-05-25',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,90,2,'2020-05-24','2020-05-24','2021-05-23','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,59,1,'2020-05-23','2020-05-23','2022-05-22','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,184,2,'2020-05-22','2020-05-22','2021-05-21','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,61,1,'2018-02-12','2018-02-12','2020-02-11','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,175,2,'2020-05-20','2020-05-20','2021-05-19','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,125,1,'2020-05-19','2020-05-19','2022-05-18','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,157,2,'2020-05-18','2020-05-18','2021-05-17','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,71,1,'2020-05-17','2020-05-17','2022-05-16','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,3,1,'2018-01-03','2018-01-03','2020-01-02','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,5,1,'2020-05-15','2020-05-15','2022-05-14','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,77,3,'2020-05-14','2020-05-14',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,135,1,'2020-05-13','2020-05-13','2022-05-12','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,195,2,'2020-05-12','2020-05-12','2021-05-11','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,129,2,'2019-05-11','2019-05-11','2020-05-10','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,118,2,'2020-05-10','2020-05-10','2021-05-09','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,94,1,'2020-05-09','2020-05-09','2022-05-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,68,2,'2020-05-08','2020-05-08','2021-05-07','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,64,1,'2020-05-07','2020-05-07','2022-05-06','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,174,1,'2017-10-15','2017-10-15','2019-10-14','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL); +INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES (1,158,1,'2020-06-10','2020-06-10','2022-06-09','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,164,2,'2020-06-09','2020-06-09','2021-06-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,9,1,'2020-06-08','2020-06-08','2022-06-07','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,174,2,'2020-06-07','2020-06-07','2021-06-06','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,154,1,'2018-05-09','2018-05-09','2020-05-08','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,173,2,'2020-06-05','2020-06-05','2021-06-04','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,59,1,'2020-06-04','2020-06-04','2022-06-03','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,109,2,'2020-06-03','2020-06-03','2021-06-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,52,1,'2020-06-02','2020-06-02','2022-06-01','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,185,1,'2018-03-30','2018-03-30','2020-03-29','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,147,3,'2020-05-31','2020-05-31',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,10,2,'2020-05-30','2020-05-30','2021-05-29','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,73,1,'2020-05-29','2020-05-29','2022-05-28','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,190,2,'2020-05-28','2020-05-28','2021-05-27','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,12,1,'2018-02-18','2018-02-18','2020-02-17','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,110,2,'2020-05-26','2020-05-26','2021-05-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,41,1,'2020-05-25','2020-05-25','2022-05-24','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,81,2,'2020-05-24','2020-05-24','2021-05-23','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,18,1,'2020-05-23','2020-05-23','2022-05-22','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,112,2,'2019-05-22','2019-05-22','2020-05-21','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,126,1,'2020-05-21','2020-05-21','2022-05-20','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,98,3,'2020-05-20','2020-05-20',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,4,1,'2020-05-19','2020-05-19','2022-05-18','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,15,2,'2020-05-18','2020-05-18','2021-05-17','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,92,1,'2017-11-30','2017-11-30','2019-11-29','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,134,2,'2020-05-16','2020-05-16','2021-05-15','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,62,1,'2020-05-15','2020-05-15','2022-05-14','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,32,2,'2020-05-14','2020-05-14','2021-05-13','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,117,1,'2020-05-13','2020-05-13','2022-05-12','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,107,2,'2019-05-12','2019-05-12','2020-05-11','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -917,7 +917,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_log` WRITE; /*!40000 ALTER TABLE `civicrm_membership_log` DISABLE KEYS */; -INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES (1,20,3,'2018-01-03','2020-01-02',3,'2020-06-04',1,NULL),(2,21,1,'2020-05-15','2022-05-14',5,'2020-06-04',1,NULL),(3,8,1,'2020-05-28','2021-05-27',12,'2020-06-04',2,NULL),(4,6,1,'2020-05-30','2021-05-29',21,'2020-06-04',2,NULL),(5,3,1,'2020-06-02','2022-06-01',40,'2020-06-04',1,NULL),(6,13,1,'2020-05-23','2022-05-22',59,'2020-06-04',1,NULL),(7,15,3,'2018-02-12','2020-02-11',61,'2020-06-04',1,NULL),(8,29,1,'2020-05-07','2022-05-06',64,'2020-06-04',1,NULL),(9,28,1,'2020-05-08','2021-05-07',68,'2020-06-04',2,NULL),(10,19,1,'2020-05-17','2022-05-16',71,'2020-06-04',1,NULL),(11,22,1,'2020-05-14',NULL,77,'2020-06-04',3,NULL),(12,5,4,'2019-05-31','2020-05-30',81,'2020-06-04',2,NULL),(13,12,1,'2020-05-24','2021-05-23',90,'2020-06-04',2,NULL),(14,27,1,'2020-05-09','2022-05-08',94,'2020-06-04',1,NULL),(15,11,1,'2020-05-25',NULL,111,'2020-06-04',3,NULL),(16,26,1,'2020-05-10','2021-05-09',118,'2020-06-04',2,NULL),(17,17,1,'2020-05-19','2022-05-18',125,'2020-06-04',1,NULL),(18,4,1,'2020-06-01','2021-05-31',126,'2020-06-04',2,NULL),(19,25,4,'2019-05-11','2020-05-10',129,'2020-06-04',2,NULL),(20,23,1,'2020-05-13','2022-05-12',135,'2020-06-04',1,NULL),(21,10,4,'2019-05-26','2020-05-25',151,'2020-06-04',2,NULL),(22,18,1,'2020-05-18','2021-05-17',157,'2020-06-04',2,NULL),(23,9,1,'2020-05-27','2022-05-26',160,'2020-06-04',1,NULL),(24,7,1,'2020-05-29','2022-05-28',168,'2020-06-04',1,NULL),(25,30,3,'2017-10-15','2019-10-14',174,'2020-06-04',1,NULL),(26,16,1,'2020-05-20','2021-05-19',175,'2020-06-04',2,NULL),(27,1,1,'2020-06-04','2022-06-03',181,'2020-06-04',1,NULL),(28,14,1,'2020-05-22','2021-05-21',184,'2020-06-04',2,NULL),(29,2,1,'2020-06-03','2021-06-02',188,'2020-06-04',2,NULL),(30,24,1,'2020-05-12','2021-05-11',195,'2020-06-04',2,NULL); +INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES (1,23,1,'2020-05-19','2022-05-18',4,'2020-06-10',1,NULL),(2,3,1,'2020-06-08','2022-06-07',9,'2020-06-10',1,NULL),(3,12,1,'2020-05-30','2021-05-29',10,'2020-06-10',2,NULL),(4,15,3,'2018-02-18','2020-02-17',12,'2020-06-10',1,NULL),(5,24,1,'2020-05-18','2021-05-17',15,'2020-06-10',2,NULL),(6,19,1,'2020-05-23','2022-05-22',18,'2020-06-10',1,NULL),(7,28,1,'2020-05-14','2021-05-13',32,'2020-06-10',2,NULL),(8,17,1,'2020-05-25','2022-05-24',41,'2020-06-10',1,NULL),(9,9,1,'2020-06-02','2022-06-01',52,'2020-06-10',1,NULL),(10,7,1,'2020-06-04','2022-06-03',59,'2020-06-10',1,NULL),(11,27,1,'2020-05-15','2022-05-14',62,'2020-06-10',1,NULL),(12,13,1,'2020-05-29','2022-05-28',73,'2020-06-10',1,NULL),(13,18,1,'2020-05-24','2021-05-23',81,'2020-06-10',2,NULL),(14,25,3,'2017-11-30','2019-11-29',92,'2020-06-10',1,NULL),(15,22,1,'2020-05-20',NULL,98,'2020-06-10',3,NULL),(16,30,4,'2019-05-12','2020-05-11',107,'2020-06-10',2,NULL),(17,8,1,'2020-06-03','2021-06-02',109,'2020-06-10',2,NULL),(18,16,1,'2020-05-26','2021-05-25',110,'2020-06-10',2,NULL),(19,20,4,'2019-05-22','2020-05-21',112,'2020-06-10',2,NULL),(20,29,1,'2020-05-13','2022-05-12',117,'2020-06-10',1,NULL),(21,21,1,'2020-05-21','2022-05-20',126,'2020-06-10',1,NULL),(22,26,1,'2020-05-16','2021-05-15',134,'2020-06-10',2,NULL),(23,11,1,'2020-05-31',NULL,147,'2020-06-10',3,NULL),(24,5,3,'2018-05-09','2020-05-08',154,'2020-06-10',1,NULL),(25,1,1,'2020-06-10','2022-06-09',158,'2020-06-10',1,NULL),(26,2,1,'2020-06-09','2021-06-08',164,'2020-06-10',2,NULL),(27,6,1,'2020-06-05','2021-06-04',173,'2020-06-10',2,NULL),(28,4,1,'2020-06-07','2021-06-06',174,'2020-06-10',2,NULL),(29,10,3,'2018-03-30','2020-03-29',185,'2020-06-10',1,NULL),(30,14,1,'2020-05-28','2021-05-27',190,'2020-06-10',2,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -927,7 +927,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_payment` WRITE; /*!40000 ALTER TABLE `civicrm_membership_payment` DISABLE KEYS */; -INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES (1,1,14),(2,3,15),(3,7,16),(4,9,17),(5,13,18),(6,15,19),(7,17,20),(8,19,21),(9,20,22),(10,21,23),(11,23,24),(12,27,25),(13,29,26),(14,30,27),(15,2,28),(16,4,29),(17,5,30),(18,6,31),(19,8,32),(20,10,33),(21,12,34),(22,14,35),(23,16,36),(24,18,37),(25,24,38),(26,25,39),(27,26,40),(28,28,41),(29,11,42),(30,22,43); +INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES (1,1,14),(2,3,15),(3,5,16),(4,7,17),(5,9,18),(6,10,19),(7,13,20),(8,15,21),(9,17,22),(10,19,23),(11,21,24),(12,23,25),(13,25,26),(14,27,27),(15,29,28),(16,2,29),(17,4,30),(18,6,31),(19,8,32),(20,12,33),(21,14,34),(22,16,35),(23,18,36),(24,20,37),(25,24,38),(26,26,39),(27,28,40),(28,30,41),(29,11,42),(30,22,43); /*!40000 ALTER TABLE `civicrm_membership_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -957,7 +957,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_menu` WRITE; /*!40000 ALTER TABLE `civicrm_menu` DISABLE KEYS */; -INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES (1,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(2,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(3,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'),(4,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:31:\"/civicrm/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'),(5,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:31:\"/civicrm/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(6,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:31:\"/civicrm/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(7,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(8,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(9,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(10,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(11,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(12,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'),(13,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:30:\"/civicrm/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'),(14,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:30:\"/civicrm/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(15,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(16,1,'civicrm/tag',NULL,'Tags (Categories)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(17,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:28:\"/civicrm/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(18,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:28:\"/civicrm/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(19,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(20,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:47:\"/civicrm/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(21,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:47:\"/civicrm/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(22,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(23,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'),(24,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Page_Dashlet\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,1,NULL,'a:0:{}'),(25,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'),(26,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(27,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(28,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:39:\"/civicrm/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(29,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:39:\"/civicrm/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'),(30,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:39:\"/civicrm/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'),(31,1,'civicrm/contact/search/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:39:\"/civicrm/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(32,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:39:\"/civicrm/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'),(33,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(34,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:36:\"/civicrm/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(35,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:36:\"/civicrm/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(36,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:36:\"/civicrm/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(37,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(38,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(39,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(40,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(41,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:36:\"/civicrm/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(42,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(43,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(44,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(45,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(46,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(47,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(48,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(49,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(50,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(51,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(52,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(53,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(54,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(55,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(56,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(57,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(58,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(59,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(60,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(61,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(62,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(63,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(64,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(65,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(66,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(67,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(68,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(69,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(70,1,'civicrm/ajax/dashboard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"dashboard\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(71,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(72,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(73,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(74,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(75,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(76,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(77,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:32:\"/civicrm/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(78,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'),(79,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(80,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(81,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(82,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'),(83,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(84,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(85,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(86,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(87,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(88,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(89,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(90,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(91,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(92,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(93,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(94,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(95,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(96,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(97,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(98,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(99,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(100,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(101,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(102,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:71:\"/civicrm/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(103,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(104,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(105,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(106,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(107,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(108,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(109,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(110,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'),(111,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(112,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(113,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(114,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(115,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Custom_Form_ChangeFieldType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(116,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(117,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'),(118,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'),(119,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'),(120,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'),(121,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'),(122,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'),(123,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(124,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(125,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(126,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(127,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(128,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(129,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(130,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(131,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(132,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(133,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(134,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(135,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(136,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(137,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(138,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(139,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(140,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(141,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(142,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(143,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:47:\"/civicrm/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'),(144,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(145,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(146,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(147,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(148,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(149,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(150,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(151,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(152,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(153,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(154,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(155,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(156,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'),(157,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'),(158,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:37:\"/civicrm/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'),(159,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'),(160,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(161,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(162,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(163,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(164,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(165,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(166,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(167,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(168,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(169,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(170,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(171,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(172,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(173,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(174,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(175,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(176,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(177,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(178,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(179,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(180,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(181,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'),(182,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(183,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'),(184,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'),(185,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'),(186,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'),(187,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(188,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(189,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(190,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'),(191,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:36:\"/civicrm/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'),(192,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:36:\"/civicrm/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'),(193,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:36:\"/civicrm/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(194,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(195,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s: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:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(196,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(197,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(198,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(199,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(200,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:60:\"/civicrm/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(201,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(202,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(203,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(204,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:31:\"/civicrm/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(205,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:31:\"/civicrm/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(206,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(207,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(208,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:28:\"/civicrm/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(209,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:28:\"/civicrm/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(210,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(211,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:29:\"/civicrm/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(212,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(213,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'),(214,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(215,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(216,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(217,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(218,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(219,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(220,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(221,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(222,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(223,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(224,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(225,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(226,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:47:\"/civicrm/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(227,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(228,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:30:\"/civicrm/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(229,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:30:\"/civicrm/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(230,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(231,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(232,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(233,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(234,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(235,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(236,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(237,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(238,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(239,1,'civicrm/ajax/l10n-js',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Resources\";i:1;s:20:\"outputLocalizationJS\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(240,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(241,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(242,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(243,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(244,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(245,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(246,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(247,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(248,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(249,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(250,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(251,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(252,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(253,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(254,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(255,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(256,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(257,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(258,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(259,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(260,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(261,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(262,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(263,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(264,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(265,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(266,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(267,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'),(268,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'),(269,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(270,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'),(271,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(272,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'),(273,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(274,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'),(275,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(276,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'),(277,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(278,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'),(279,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'),(280,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'),(281,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'),(282,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'),(283,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'),(284,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:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(285,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:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(286,1,'civicrm/ajax/event/add_participant_to_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(287,1,'civicrm/ajax/event/remove_participant_from_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(288,1,'civicrm/event/add_to_cart',NULL,'Add Event To Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(289,1,'civicrm/event/cart_checkout',NULL,'Cart Checkout','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Controller_Checkout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(290,1,'civicrm/event/remove_from_cart',NULL,'Remove From Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Page_RemoveFromCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(291,1,'civicrm/event/view_cart',NULL,'View Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Cart_Page_ViewCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(292,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:42:\"/civicrm/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(293,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:37:\"/civicrm/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'),(294,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(295,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(296,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:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(297,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(298,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:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(299,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'),(300,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(301,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'),(302,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'),(303,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'),(304,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(305,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(306,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'),(307,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'),(308,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'),(309,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'),(310,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(311,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(312,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(313,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(314,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(315,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(316,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(317,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(318,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(319,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(320,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:50:\"/civicrm/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(321,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'),(322,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'),(323,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'),(324,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'),(325,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(326,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(327,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(328,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(329,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(330,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(331,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(332,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'),(333,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'),(334,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'),(335,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'),(336,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:40:\"/civicrm/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'),(337,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:47:\"/civicrm/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(338,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(339,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(340,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:43:\"/civicrm/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(341,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(342,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(343,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(344,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'),(345,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:35:\"/civicrm/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(346,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(347,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(348,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(349,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(350,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'),(351,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'),(352,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'),(353,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'),(354,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(355,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:52:\"/civicrm/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(356,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'),(357,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(358,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(359,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(360,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(361,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(362,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(363,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(364,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'),(365,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'),(366,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'),(367,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'),(368,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'),(369,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(370,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(371,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'),(372,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'),(373,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'),(374,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'),(375,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:55:\"/civicrm/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'),(376,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(377,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'),(378,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'),(379,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(380,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(381,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(382,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:32:\"/civicrm/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(383,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(384,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(385,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'),(386,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:30:\"/civicrm/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(387,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(388,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(389,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'),(390,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'),(391,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(392,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:31:\"/civicrm/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'),(393,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(394,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(395,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(396,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'),(397,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(398,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(399,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(400,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(401,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:38:\"/civicrm/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(402,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:53:\"/civicrm/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:42:\"/civicrm/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(403,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(404,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(405,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(406,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(407,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(408,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(409,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(410,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:36:\"/civicrm/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(411,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(412,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(413,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:29:\"/civicrm/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(414,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(415,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(416,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1200,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'),(417,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:31:\"/civicrm/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(418,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:31:\"/civicrm/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1220,1,1,NULL,'a:0:{}'),(419,1,'civicrm/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:31:\"/civicrm/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'),(420,1,'civicrm/admin/report/register',NULL,'Register Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'),(421,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:31:\"/civicrm/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(422,1,'civicrm/admin/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(423,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(424,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(425,1,'civicrm/campaign',NULL,'Campaign Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(426,1,'civicrm/campaign/add',NULL,'New Campaign','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:33:\"/civicrm/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,1,'civicrm/survey/add',NULL,'New Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:33:\"/civicrm/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,2,1,0,NULL,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(431,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,3,1,0,NULL,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(432,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:30:\"/civicrm/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,4,1,0,NULL,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(433,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(434,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:33:\"/civicrm/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(435,1,'civicrm/petition/add',NULL,'New Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(436,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(437,1,'civicrm/petition/browse',NULL,'View Petition Signatures','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Campaign_Page_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(438,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(439,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(440,1,'civicrm/campaign/registerInterview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:33:\"/civicrm/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(441,1,'civicrm/survey/configure/main',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(442,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(443,1,'civicrm/survey/configure/results',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(444,1,'civicrm/survey/delete',NULL,'Delete Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:24:\"/civicrm/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(445,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:15:\"Tags_Categories\";s:3:\"url\";s:28:\"/civicrm/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:39:\"/civicrm/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:52:\"/civicrm/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:46:\"/civicrm/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:45:\"/civicrm/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:56:\"/civicrm/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:56:\"/civicrm/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:51:\"/civicrm/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:64:\"/civicrm/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:49:\"/civicrm/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:45:\"/civicrm/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:35:\"/civicrm/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:52:\"/civicrm/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:44:\"/civicrm/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:41:\"/civicrm/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:37:\"/civicrm/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:56:\"/civicrm/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:56:\"/civicrm/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:61:\"/civicrm/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:47:\"/civicrm/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:48:\"/civicrm/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:69:\"/civicrm/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:53:\"/civicrm/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:48:\"/civicrm/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:51:\"/civicrm/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:48:\"/civicrm/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:37:\"/civicrm/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:40:\"/civicrm/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:18:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:48:\"/civicrm/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:47:\"/civicrm/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:46:\"/civicrm/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:62:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";a:6:{s:5:\"title\";s:53:\"Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:2:\"id\";s:46:\"Misc_Undelete_PDFs_Limits_Logging_Captcha_etc.\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:42:\"/civicrm/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:41:\"/civicrm/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:38:\"/civicrm/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:44:\"/civicrm/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:60:\"/civicrm/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:34:\"/civicrm/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:59:\"/civicrm/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:50:\"/civicrm/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:52:\"/civicrm/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:56:\"/civicrm/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:60:\"/civicrm/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:36:\"/civicrm/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:44:\"/civicrm/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:49:\"/civicrm/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:49:\"/civicrm/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:58:\"/civicrm/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:35:\"/civicrm/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:40:\"/civicrm/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:66:\"/civicrm/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:57:\"/civicrm/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:52:\"/civicrm/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:54:\"/civicrm/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:49:\"/civicrm/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:36:\"/civicrm/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:43:\"/civicrm/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:48:\"/civicrm/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:53:\"/civicrm/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:50:\"/civicrm/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:55:\"/civicrm/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:51:\"/civicrm/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:61:\"/civicrm/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:42:\"/civicrm/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); +INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES (1,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(2,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(3,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'),(4,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'),(5,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(6,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'),(7,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(8,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(9,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(10,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(11,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(12,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'),(13,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'),(14,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(15,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(16,1,'civicrm/tag',NULL,'Tags (Categories)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a: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\";}'),(17,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(18,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(19,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(20,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(21,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(22,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(23,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'),(24,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Page_Dashlet\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,1,NULL,'a:0:{}'),(25,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'),(26,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(27,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(28,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(29,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'),(30,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'),(31,1,'civicrm/contact/search/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(32,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'),(33,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(34,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(35,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(36,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(37,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(38,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(39,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(40,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(41,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(42,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(43,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(44,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(45,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(46,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(47,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(48,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(49,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(50,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(51,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(52,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(53,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(54,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(55,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(56,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(57,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(58,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(59,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(60,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(61,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(62,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(63,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(64,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(65,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(66,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(67,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(68,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(69,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(70,1,'civicrm/ajax/dashboard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"dashboard\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(71,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(72,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(73,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(74,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(75,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(76,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(77,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(78,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a: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\";}'),(79,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(80,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(81,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(82,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'),(83,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(84,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(85,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(86,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(87,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(88,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(89,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(90,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(91,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(92,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(93,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(94,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(95,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(96,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(97,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(98,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(99,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(100,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(101,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(102,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(103,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(104,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(105,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(106,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(107,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(108,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(109,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a: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\";}'),(110,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'),(111,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(112,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(113,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(114,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(115,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Custom_Form_ChangeFieldType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(116,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a: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\";}'),(117,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'),(118,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'),(119,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'),(120,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'),(121,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'),(122,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'),(123,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a: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\";}'),(124,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a: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\";}'),(125,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(126,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a: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\";}'),(127,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a: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\";}'),(128,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a: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\";}'),(129,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a: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\";}'),(130,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(131,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a: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\";}'),(132,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a: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\";}'),(133,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a: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\";}'),(134,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(135,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(136,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(137,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a: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\";}'),(138,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'),(139,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a: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\";}'),(140,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a: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\";}'),(141,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a: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\";}'),(142,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a: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\";}'),(143,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'),(144,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(145,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(146,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a: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\";}'),(147,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(148,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a: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\";}'),(149,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(150,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(151,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(152,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'),(153,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(154,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(155,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'),(156,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'),(157,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a: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\";}'),(158,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'),(159,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a: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\";}'),(160,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(161,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a: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\";}'),(162,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(163,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(164,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(165,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(166,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(167,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(168,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(169,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(170,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a: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\";}'),(171,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(172,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(173,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(174,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a: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\";}'),(175,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(176,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'),(177,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(178,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(179,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(180,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(181,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'),(182,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(183,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'),(184,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a: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\";}'),(185,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'),(186,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'),(187,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(188,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(189,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(190,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a: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\";}'),(191,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'),(192,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'),(193,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(194,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(195,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(196,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'),(197,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(198,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(199,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(200,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(201,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(202,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(203,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(204,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(205,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(206,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(207,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(208,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(209,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(210,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(211,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(212,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(213,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'),(214,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(215,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(216,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(217,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(218,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(219,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(220,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(221,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(222,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(223,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(224,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(225,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(226,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(227,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(228,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(229,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(230,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(231,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(232,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(233,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(234,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(235,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(236,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(237,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(238,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(239,1,'civicrm/ajax/l10n-js',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Resources\";i:1;s:20:\"outputLocalizationJS\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(240,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(241,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(242,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(243,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(244,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(245,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(246,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(247,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(248,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(249,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(250,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(251,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(252,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(253,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'),(254,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(255,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(256,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(257,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(258,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(259,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(260,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(261,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(262,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(263,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(264,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(265,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(266,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(267,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'),(268,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'),(269,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(270,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'),(271,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(272,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'),(273,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'),(274,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'),(275,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(276,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'),(277,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'),(278,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'),(279,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'),(280,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'),(281,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'),(282,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'),(283,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'),(284,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(285,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(286,1,'civicrm/ajax/event/add_participant_to_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(287,1,'civicrm/ajax/event/remove_participant_from_cart',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(288,1,'civicrm/event/add_to_cart',NULL,'Add Event To Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(289,1,'civicrm/event/cart_checkout',NULL,'Cart Checkout','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Controller_Checkout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'),(290,1,'civicrm/event/remove_from_cart',NULL,'Remove From Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Page_RemoveFromCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(291,1,'civicrm/event/view_cart',NULL,'View Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Cart_Page_ViewCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(292,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(293,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'),(294,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(295,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(296,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(297,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(298,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(299,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'),(300,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(301,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'),(302,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'),(303,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'),(304,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(305,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'),(306,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'),(307,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'),(308,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'),(309,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'),(310,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(311,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(312,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(313,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(314,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(315,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(316,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(317,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(318,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(319,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(320,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:42:\"/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(321,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'),(322,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'),(323,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'),(324,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'),(325,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(326,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(327,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(328,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(329,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(330,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(331,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(332,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'),(333,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'),(334,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'),(335,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'),(336,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:32:\"/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'),(337,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(338,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'),(339,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(340,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:35:\"/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(341,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(342,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(343,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(344,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'),(345,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(346,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(347,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'),(348,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(349,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'),(350,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'),(351,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'),(352,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'),(353,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'),(354,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(355,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(356,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'),(357,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(358,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(359,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(360,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'),(361,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'),(362,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(363,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'),(364,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'),(365,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'),(366,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'),(367,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'),(368,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'),(369,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(370,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'),(371,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'),(372,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'),(373,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'),(374,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'),(375,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'),(376,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(377,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'),(378,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'),(379,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(380,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(381,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(382,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(383,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(384,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'),(385,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'),(386,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'),(387,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(388,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(389,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'),(390,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'),(391,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'),(392,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'),(393,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(394,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(395,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'),(396,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'),(397,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(398,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(399,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(400,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(401,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:30:\"/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(402,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(403,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(404,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(405,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(406,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(407,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(408,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(409,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'),(410,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:28:\"/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(411,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(412,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'),(413,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(414,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(415,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(416,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1200,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'),(417,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(418,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1220,1,1,NULL,'a:0:{}'),(419,1,'civicrm/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'),(420,1,'civicrm/admin/report/register',NULL,'Register Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'),(421,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(422,1,'civicrm/admin/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(423,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(424,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'),(425,1,'civicrm/campaign',NULL,'Campaign Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(426,1,'civicrm/campaign/add',NULL,'New Campaign','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,1,'civicrm/survey/add',NULL,'New Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,2,1,0,NULL,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(431,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,3,1,0,NULL,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(432,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,4,1,0,NULL,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(433,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(434,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(435,1,'civicrm/petition/add',NULL,'New Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(436,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(437,1,'civicrm/petition/browse',NULL,'View Petition Signatures','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Campaign_Page_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(438,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(439,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(440,1,'civicrm/campaign/registerInterview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(441,1,'civicrm/survey/configure/main',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(442,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(443,1,'civicrm/survey/configure/results',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(444,1,'civicrm/survey/delete',NULL,'Delete Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(445,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:15:\"Tags_Categories\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:18:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:62:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";a:6:{s:5:\"title\";s:53:\"Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:2:\"id\";s:46:\"Misc_Undelete_PDFs_Limits_Logging_Captcha_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -987,7 +987,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_note` WRITE; /*!40000 ALTER TABLE `civicrm_note` DISABLE KEYS */; -INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',163,'Contact the Commissioner of Charities',1,'2019-11-05 18:06:17',NULL,'0'),(2,'civicrm_contact',2,'Send newsletter for April 2005',1,'2020-01-09 18:34:36',NULL,'0'),(3,'civicrm_contact',137,'Organize the Terry Fox run',1,'2019-08-02 22:26:47',NULL,'0'),(4,'civicrm_contact',58,'Contact the Commissioner of Charities',1,'2019-11-21 15:34:37',NULL,'0'),(5,'civicrm_contact',179,'Arrange for cricket match with Sunil Gavaskar',1,'2019-07-08 20:50:23',NULL,'0'),(6,'civicrm_contact',41,'Connect for presentation',1,'2019-09-18 10:46:02',NULL,'0'),(7,'civicrm_contact',8,'Chart out route map for next 10k run',1,'2020-01-15 16:23:55',NULL,'0'),(8,'civicrm_contact',192,'Get the registration done for NGO status',1,'2020-04-08 11:02:07',NULL,'0'),(9,'civicrm_contact',47,'Organize the Terry Fox run',1,'2019-11-14 10:09:44',NULL,'0'),(10,'civicrm_contact',158,'Organize the Terry Fox run',1,'2020-01-03 02:38:43',NULL,'0'),(11,'civicrm_contact',50,'Reminder screening of \"Black\" on next Friday',1,'2019-08-29 08:14:52',NULL,'0'),(12,'civicrm_contact',92,'Get the registration done for NGO status',1,'2020-03-08 02:16:50',NULL,'0'),(13,'civicrm_contact',154,'Contact the Commissioner of Charities',1,'2019-08-05 03:15:48',NULL,'0'),(14,'civicrm_contact',114,'Get the registration done for NGO status',1,'2019-11-12 13:08:08',NULL,'0'),(15,'civicrm_contact',126,'Organize the Terry Fox run',1,'2019-07-18 12:14:51',NULL,'0'),(16,'civicrm_contact',22,'Connect for presentation',1,'2019-08-02 22:49:17',NULL,'0'),(17,'civicrm_contact',191,'Arrange collection of funds from members',1,'2020-02-13 05:23:59',NULL,'0'),(18,'civicrm_contact',40,'Reminder screening of \"Black\" on next Friday',1,'2019-12-29 03:14:56',NULL,'0'),(19,'civicrm_contact',140,'Contact the Commissioner of Charities',1,'2019-11-05 17:12:58',NULL,'0'),(20,'civicrm_contact',121,'Invite members for the Steve Prefontaine 10k dream run',1,'2020-05-07 01:51:25',NULL,'0'); +INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',111,'Organize the Terry Fox run',1,'2020-03-15 13:56:17',NULL,'0'),(2,'civicrm_contact',180,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-12-27 08:16:05',NULL,'0'),(3,'civicrm_contact',144,'Reminder screening of \"Black\" on next Friday',1,'2019-08-13 00:36:17',NULL,'0'),(4,'civicrm_contact',144,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-12-08 18:56:53',NULL,'0'),(5,'civicrm_contact',37,'Send newsletter for April 2005',1,'2019-06-27 07:32:14',NULL,'0'),(6,'civicrm_contact',90,'Contact the Commissioner of Charities',1,'2020-05-17 06:21:42',NULL,'0'),(7,'civicrm_contact',76,'Reminder screening of \"Black\" on next Friday',1,'2019-06-30 09:38:54',NULL,'0'),(8,'civicrm_contact',80,'Contact the Commissioner of Charities',1,'2019-12-30 12:22:47',NULL,'0'),(9,'civicrm_contact',129,'Contact the Commissioner of Charities',1,'2019-11-03 06:00:26',NULL,'0'),(10,'civicrm_contact',114,'Organize the Terry Fox run',1,'2019-10-21 16:48:05',NULL,'0'),(11,'civicrm_contact',194,'Get the registration done for NGO status',1,'2019-07-15 09:46:22',NULL,'0'),(12,'civicrm_contact',129,'Send newsletter for April 2005',1,'2019-09-25 20:24:51',NULL,'0'),(13,'civicrm_contact',90,'Send reminder for annual dinner',1,'2019-12-18 08:59:41',NULL,'0'),(14,'civicrm_contact',71,'Arrange collection of funds from members',1,'2019-07-15 18:17:01',NULL,'0'),(15,'civicrm_contact',93,'Get the registration done for NGO status',1,'2020-05-07 01:26:49',NULL,'0'),(16,'civicrm_contact',151,'Get the registration done for NGO status',1,'2019-09-06 03:53:33',NULL,'0'),(17,'civicrm_contact',180,'Contact the Commissioner of Charities',1,'2019-12-14 07:56:34',NULL,'0'),(18,'civicrm_contact',36,'Send reminder for annual dinner',1,'2019-08-07 14:15:32',NULL,'0'),(19,'civicrm_contact',186,'Reminder screening of \"Black\" on next Friday',1,'2020-02-14 02:41:51',NULL,'0'),(20,'civicrm_contact',126,'Arrange for cricket match with Sunil Gavaskar',1,'2020-04-23 20:03:44',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -1026,7 +1026,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant` WRITE; /*!40000 ALTER TABLE `civicrm_participant` DISABLE KEYS */; -INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES (1,189,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,49,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,55,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,124,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,183,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,41,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,20,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,84,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,43,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,60,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,169,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,188,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,96,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,154,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,97,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,145,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,119,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,129,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,108,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,79,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,137,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,34,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,139,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,27,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,133,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,110,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(28,132,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,198,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,66,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,125,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,63,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,18,2,4,'4','2009-03-07 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(34,32,3,1,'1','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(35,82,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,164,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,101,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,76,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,70,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,141,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,98,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,177,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,52,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,59,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,121,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,88,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,39,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,150,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,7,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES (1,134,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,57,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,59,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,76,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,113,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,177,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,70,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,171,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,152,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,124,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,1,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,23,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,139,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,198,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,20,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,119,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,159,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,110,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,154,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,180,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,161,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,183,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,51,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,146,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,74,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,30,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,52,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,4,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,173,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,27,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,118,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,3,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,83,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,151,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,188,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,75,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,61,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,197,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,121,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,18,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,162,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,68,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,7,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,12,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,11,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,199,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,141,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,164,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,142,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,33,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; @@ -1036,7 +1036,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant_payment` WRITE; /*!40000 ALTER TABLE `civicrm_participant_payment` DISABLE KEYS */; -INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES (1,50,45),(2,17,46),(3,33,47),(4,7,48),(5,25,49),(6,34,50),(7,23,51),(8,48,52),(9,6,53),(10,9,54),(11,2,55),(12,44,56),(13,3,57),(14,45,58),(15,10,59),(16,32,60),(17,30,61),(18,39,62),(19,38,63),(20,21,64),(21,35,65),(22,8,66),(23,47,67),(24,13,68),(25,15,69),(26,41,70),(27,37,71),(28,42,72),(29,20,73),(30,27,74),(31,18,75),(32,46,76),(33,4,77),(34,31,78),(35,19,79),(36,28,80),(37,26,81),(38,22,82),(39,24,83),(40,40,84),(41,16,85),(42,49,86),(43,14,87),(44,36,88),(45,11,89),(46,43,90),(47,5,91),(48,12,92),(49,1,93),(50,29,94); +INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES (1,11,45),(2,32,46),(3,28,47),(4,43,48),(5,45,49),(6,44,50),(7,40,51),(8,15,52),(9,12,53),(10,30,54),(11,26,55),(12,50,56),(13,23,57),(14,27,58),(15,2,59),(16,3,60),(17,37,61),(18,42,62),(19,7,63),(20,25,64),(21,36,65),(22,4,66),(23,33,67),(24,18,68),(25,5,69),(26,31,70),(27,16,71),(28,39,72),(29,10,73),(30,1,74),(31,13,75),(32,47,76),(33,49,77),(34,24,78),(35,34,79),(36,9,80),(37,19,81),(38,17,82),(39,21,83),(40,41,84),(41,48,85),(42,8,86),(43,29,87),(44,6,88),(45,20,89),(46,22,90),(47,35,91),(48,38,92),(49,14,93),(50,46,94); /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -1084,7 +1084,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pcp` WRITE; /*!40000 ALTER TABLE `civicrm_pcp` DISABLE KEYS */; -INSERT INTO `civicrm_pcp` (`id`, `contact_id`, `status_id`, `title`, `intro_text`, `page_text`, `donate_link_text`, `page_id`, `page_type`, `pcp_block_id`, `is_thermometer`, `is_honor_roll`, `goal_amount`, `currency`, `is_active`, `is_notify`) VALUES (1,54,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); +INSERT INTO `civicrm_pcp` (`id`, `contact_id`, `status_id`, `title`, `intro_text`, `page_text`, `donate_link_text`, `page_id`, `page_type`, `pcp_block_id`, `is_thermometer`, `is_honor_roll`, `goal_amount`, `currency`, `is_active`, `is_notify`) VALUES (1,177,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; @@ -1104,7 +1104,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_phone` WRITE; /*!40000 ALTER TABLE `civicrm_phone` DISABLE KEYS */; -INSERT INTO `civicrm_phone` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `mobile_provider_id`, `phone`, `phone_ext`, `phone_numeric`, `phone_type_id`) VALUES (1,93,1,1,0,NULL,'466-8553',NULL,'4668553',1),(2,54,1,1,0,NULL,'(220) 301-4912',NULL,'2203014912',2),(3,54,1,0,0,NULL,'(493) 457-5846',NULL,'4934575846',2),(4,103,1,1,0,NULL,'824-2153',NULL,'8242153',1),(5,103,1,0,0,NULL,'(759) 428-5794',NULL,'7594285794',1),(6,195,1,1,0,NULL,'593-2980',NULL,'5932980',2),(7,195,1,0,0,NULL,'(696) 338-4564',NULL,'6963384564',1),(8,172,1,1,0,NULL,'(530) 397-6484',NULL,'5303976484',2),(9,113,1,1,0,NULL,'(447) 706-9481',NULL,'4477069481',1),(10,113,1,0,0,NULL,'510-1842',NULL,'5101842',1),(11,59,1,1,0,NULL,'413-4109',NULL,'4134109',1),(12,59,1,0,0,NULL,'(319) 576-6691',NULL,'3195766691',1),(13,117,1,1,0,NULL,'(543) 340-5227',NULL,'5433405227',1),(14,199,1,1,0,NULL,'364-9645',NULL,'3649645',1),(15,125,1,1,0,NULL,'466-1049',NULL,'4661049',1),(16,125,1,0,0,NULL,'(308) 323-3490',NULL,'3083233490',1),(17,135,1,1,0,NULL,'725-2756',NULL,'7252756',1),(18,177,1,1,0,NULL,'338-6158',NULL,'3386158',1),(19,177,1,0,0,NULL,'876-7810',NULL,'8767810',2),(20,198,1,1,0,NULL,'(361) 225-5014',NULL,'3612255014',2),(21,115,1,1,0,NULL,'680-8407',NULL,'6808407',1),(22,179,1,1,0,NULL,'690-7079',NULL,'6907079',2),(23,124,1,1,0,NULL,'(710) 258-4936',NULL,'7102584936',1),(24,124,1,0,0,NULL,'(816) 442-8789',NULL,'8164428789',1),(25,7,1,1,0,NULL,'(261) 523-6483',NULL,'2615236483',2),(26,7,1,0,0,NULL,'518-9166',NULL,'5189166',1),(27,157,1,1,0,NULL,'464-1562',NULL,'4641562',2),(28,168,1,1,0,NULL,'826-3010',NULL,'8263010',2),(29,164,1,1,0,NULL,'441-3377',NULL,'4413377',1),(30,164,1,0,0,NULL,'(509) 883-8094',NULL,'5098838094',1),(31,48,1,1,0,NULL,'761-9058',NULL,'7619058',1),(32,94,1,1,0,NULL,'210-7913',NULL,'2107913',1),(33,94,1,0,0,NULL,'(547) 250-1681',NULL,'5472501681',2),(34,131,1,1,0,NULL,'(226) 566-3772',NULL,'2265663772',2),(35,149,1,1,0,NULL,'(414) 854-9189',NULL,'4148549189',1),(36,149,1,0,0,NULL,'466-4123',NULL,'4664123',1),(37,57,1,1,0,NULL,'(565) 804-2599',NULL,'5658042599',1),(38,57,1,0,0,NULL,'(701) 315-2994',NULL,'7013152994',1),(39,132,1,1,0,NULL,'(713) 292-9652',NULL,'7132929652',2),(40,132,1,0,0,NULL,'(302) 702-2072',NULL,'3027022072',1),(41,139,1,1,0,NULL,'(522) 441-4447',NULL,'5224414447',1),(42,139,1,0,0,NULL,'777-8982',NULL,'7778982',2),(43,66,1,1,0,NULL,'268-8792',NULL,'2688792',2),(44,58,1,1,0,NULL,'720-5898',NULL,'7205898',2),(45,18,1,1,0,NULL,'357-2218',NULL,'3572218',1),(46,161,1,1,0,NULL,'343-5463',NULL,'3435463',1),(47,98,1,1,0,NULL,'(870) 482-6525',NULL,'8704826525',2),(48,98,1,0,0,NULL,'(301) 270-6997',NULL,'3012706997',1),(49,188,1,1,0,NULL,'218-6441',NULL,'2186441',1),(50,188,1,0,0,NULL,'355-5063',NULL,'3555063',1),(51,47,1,1,0,NULL,'368-4618',NULL,'3684618',1),(52,47,1,0,0,NULL,'582-4052',NULL,'5824052',1),(53,43,1,1,0,NULL,'490-9584',NULL,'4909584',2),(54,43,1,0,0,NULL,'(482) 281-4371',NULL,'4822814371',1),(55,28,1,1,0,NULL,'224-4539',NULL,'2244539',1),(56,70,1,1,0,NULL,'848-2397',NULL,'8482397',1),(57,70,1,0,0,NULL,'626-1427',NULL,'6261427',1),(58,119,1,1,0,NULL,'(821) 624-1965',NULL,'8216241965',2),(59,123,1,1,0,NULL,'298-2905',NULL,'2982905',1),(60,123,1,0,0,NULL,'(233) 405-6790',NULL,'2334056790',2),(61,8,1,1,0,NULL,'(808) 681-8822',NULL,'8086818822',2),(62,38,1,1,0,NULL,'319-8297',NULL,'3198297',2),(63,38,1,0,0,NULL,'400-3425',NULL,'4003425',1),(64,84,1,1,0,NULL,'297-4661',NULL,'2974661',1),(65,84,1,0,0,NULL,'(376) 603-1229',NULL,'3766031229',2),(66,51,1,1,0,NULL,'(410) 346-1355',NULL,'4103461355',1),(67,153,1,1,0,NULL,'(313) 503-4237',NULL,'3135034237',2),(68,153,1,0,0,NULL,'(780) 730-5334',NULL,'7807305334',1),(69,15,1,1,0,NULL,'(824) 202-9557',NULL,'8242029557',1),(70,15,1,0,0,NULL,'487-3969',NULL,'4873969',2),(71,32,1,1,0,NULL,'(554) 333-9055',NULL,'5543339055',2),(72,191,1,1,0,NULL,'217-4885',NULL,'2174885',1),(73,191,1,0,0,NULL,'365-8370',NULL,'3658370',2),(74,146,1,1,0,NULL,'724-4919',NULL,'7244919',1),(75,118,1,1,0,NULL,'(612) 589-4731',NULL,'6125894731',2),(76,118,1,0,0,NULL,'(360) 629-9375',NULL,'3606299375',1),(77,145,1,1,0,NULL,'(324) 411-9094',NULL,'3244119094',2),(78,145,1,0,0,NULL,'290-3087',NULL,'2903087',2),(79,175,1,1,0,NULL,'676-9646',NULL,'6769646',2),(80,17,1,1,0,NULL,'766-9801',NULL,'7669801',2),(81,30,1,1,0,NULL,'715-2344',NULL,'7152344',2),(82,160,1,1,0,NULL,'(672) 371-6186',NULL,'6723716186',2),(83,160,1,0,0,NULL,'203-3944',NULL,'2033944',1),(84,71,1,1,0,NULL,'710-4025',NULL,'7104025',2),(85,71,1,0,0,NULL,'(235) 835-5911',NULL,'2358355911',2),(86,88,1,1,0,NULL,'751-9217',NULL,'7519217',2),(87,74,1,1,0,NULL,'(422) 802-4916',NULL,'4228024916',2),(88,74,1,0,0,NULL,'641-7394',NULL,'6417394',2),(89,64,1,1,0,NULL,'(692) 481-7984',NULL,'6924817984',1),(90,108,1,1,0,NULL,'218-8753',NULL,'2188753',1),(91,108,1,0,0,NULL,'(877) 347-5064',NULL,'8773475064',1),(92,35,1,1,0,NULL,'403-5239',NULL,'4035239',1),(93,35,1,0,0,NULL,'(326) 512-5956',NULL,'3265125956',2),(94,134,1,1,0,NULL,'(737) 675-4029',NULL,'7376754029',1),(95,134,1,0,0,NULL,'486-3818',NULL,'4863818',1),(96,11,1,1,0,NULL,'(503) 291-3514',NULL,'5032913514',1),(97,11,1,0,0,NULL,'527-9321',NULL,'5279321',1),(98,62,1,1,0,NULL,'(432) 476-9689',NULL,'4324769689',2),(99,46,1,1,0,NULL,'(426) 816-5380',NULL,'4268165380',2),(100,46,1,0,0,NULL,'250-4038',NULL,'2504038',2),(101,9,1,1,0,NULL,'(825) 687-3743',NULL,'8256873743',2),(102,20,1,1,0,NULL,'751-3826',NULL,'7513826',2),(103,178,1,1,0,NULL,'(479) 515-2957',NULL,'4795152957',1),(104,178,1,0,0,NULL,'702-1670',NULL,'7021670',1),(105,45,1,1,0,NULL,'686-8894',NULL,'6868894',1),(106,45,1,0,0,NULL,'412-4081',NULL,'4124081',1),(107,142,1,1,0,NULL,'539-8969',NULL,'5398969',2),(108,26,1,1,0,NULL,'(603) 820-9853',NULL,'6038209853',1),(109,141,1,1,0,NULL,'522-5988',NULL,'5225988',1),(110,99,1,1,0,NULL,'(214) 280-3456',NULL,'2142803456',1),(111,120,1,1,0,NULL,'(676) 806-6812',NULL,'6768066812',1),(112,120,1,0,0,NULL,'484-2389',NULL,'4842389',2),(113,60,1,1,0,NULL,'497-4208',NULL,'4974208',1),(114,60,1,0,0,NULL,'701-4362',NULL,'7014362',1),(115,165,1,1,0,NULL,'(612) 353-4329',NULL,'6123534329',1),(116,36,1,1,0,NULL,'(729) 641-9861',NULL,'7296419861',2),(117,12,1,1,0,NULL,'(846) 439-3919',NULL,'8464393919',2),(118,19,1,1,0,NULL,'375-1086',NULL,'3751086',1),(119,19,1,0,0,NULL,'485-6441',NULL,'4856441',1),(120,14,1,1,0,NULL,'(383) 240-7635',NULL,'3832407635',2),(121,14,1,0,0,NULL,'(738) 213-3120',NULL,'7382133120',2),(122,39,1,1,0,NULL,'(773) 382-9349',NULL,'7733829349',2),(123,189,1,1,0,NULL,'(805) 308-9779',NULL,'8053089779',2),(124,151,1,1,0,NULL,'(868) 320-2555',NULL,'8683202555',1),(125,104,1,1,0,NULL,'(846) 825-8066',NULL,'8468258066',2),(126,104,1,0,0,NULL,'(815) 772-4329',NULL,'8157724329',1),(127,3,1,1,0,NULL,'472-6044',NULL,'4726044',2),(128,3,1,0,0,NULL,'(259) 387-9391',NULL,'2593879391',2),(129,194,1,1,0,NULL,'754-5838',NULL,'7545838',2),(130,21,1,1,0,NULL,'(837) 464-2267',NULL,'8374642267',2),(131,21,1,0,0,NULL,'731-9485',NULL,'7319485',2),(132,184,1,1,0,NULL,'(541) 793-4131',NULL,'5417934131',2),(133,127,1,1,0,NULL,'822-2177',NULL,'8222177',1),(134,174,1,1,0,NULL,'(830) 893-5783',NULL,'8308935783',1),(135,174,1,0,0,NULL,'290-2526',NULL,'2902526',1),(136,22,1,1,0,NULL,'(612) 602-9213',NULL,'6126029213',1),(137,81,1,1,0,NULL,'(790) 834-7287',NULL,'7908347287',2),(138,81,1,0,0,NULL,'(219) 221-3761',NULL,'2192213761',1),(139,183,1,1,0,NULL,'(804) 629-4684',NULL,'8046294684',2),(140,192,1,1,0,NULL,'(633) 225-6362',NULL,'6332256362',1),(141,192,1,0,0,NULL,'(678) 336-4866',NULL,'6783364866',1),(142,169,1,1,0,NULL,'785-9177',NULL,'7859177',2),(143,169,1,0,0,NULL,'(346) 543-1858',NULL,'3465431858',1),(144,86,1,1,0,NULL,'(857) 661-2708',NULL,'8576612708',1),(145,86,1,0,0,NULL,'870-7996',NULL,'8707996',2),(146,73,1,1,0,NULL,'391-6294',NULL,'3916294',2),(147,116,1,1,0,NULL,'(409) 854-3630',NULL,'4098543630',2),(148,116,1,0,0,NULL,'400-7798',NULL,'4007798',2),(149,173,1,1,0,NULL,'528-5522',NULL,'5285522',2),(150,87,1,1,0,NULL,'528-1289',NULL,'5281289',1),(151,92,1,1,0,NULL,'343-5622',NULL,'3435622',2),(152,85,1,1,0,NULL,'662-8184',NULL,'6628184',2),(153,85,1,0,0,NULL,'767-9141',NULL,'7679141',1),(154,187,1,1,0,NULL,'630-7634',NULL,'6307634',2),(155,187,1,0,0,NULL,'(608) 855-9066',NULL,'6088559066',1),(156,24,1,1,0,NULL,'(738) 599-8891',NULL,'7385998891',1),(157,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(158,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(159,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); +INSERT INTO `civicrm_phone` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `mobile_provider_id`, `phone`, `phone_ext`, `phone_numeric`, `phone_type_id`) VALUES (1,50,1,1,0,NULL,'305-3316',NULL,'3053316',2),(2,50,1,0,0,NULL,'(454) 624-9474',NULL,'4546249474',2),(3,177,1,1,0,NULL,'(362) 578-7116',NULL,'3625787116',1),(4,177,1,0,0,NULL,'422-6088',NULL,'4226088',1),(5,110,1,1,0,NULL,'(316) 717-9504',NULL,'3167179504',1),(6,97,1,1,0,NULL,'322-2980',NULL,'3222980',2),(7,56,1,1,0,NULL,'(498) 465-7043',NULL,'4984657043',2),(8,75,1,1,0,NULL,'681-1655',NULL,'6811655',1),(9,75,1,0,0,NULL,'297-5311',NULL,'2975311',1),(10,172,1,1,0,NULL,'613-8335',NULL,'6138335',2),(11,172,1,0,0,NULL,'877-1400',NULL,'8771400',2),(12,37,1,1,0,NULL,'450-5259',NULL,'4505259',1),(13,37,1,0,0,NULL,'875-2439',NULL,'8752439',1),(14,175,1,1,0,NULL,'(767) 739-1850',NULL,'7677391850',1),(15,175,1,0,0,NULL,'(648) 530-4866',NULL,'6485304866',1),(16,115,1,1,0,NULL,'597-6703',NULL,'5976703',1),(17,115,1,0,0,NULL,'453-6667',NULL,'4536667',2),(18,198,1,1,0,NULL,'(418) 520-9692',NULL,'4185209692',1),(19,53,1,1,0,NULL,'202-6113',NULL,'2026113',2),(20,18,1,1,0,NULL,'(784) 548-4483',NULL,'7845484483',2),(21,18,1,0,0,NULL,'665-4476',NULL,'6654476',2),(22,27,1,1,0,NULL,'(322) 288-9017',NULL,'3222889017',1),(23,27,1,0,0,NULL,'611-2082',NULL,'6112082',2),(24,44,1,1,0,NULL,'642-6320',NULL,'6426320',2),(25,121,1,1,0,NULL,'(551) 657-9639',NULL,'5516579639',1),(26,121,1,0,0,NULL,'(360) 876-7107',NULL,'3608767107',1),(27,47,1,1,0,NULL,'(600) 860-9782',NULL,'6008609782',1),(28,34,1,1,0,NULL,'615-7064',NULL,'6157064',2),(29,34,1,0,0,NULL,'(539) 304-2310',NULL,'5393042310',1),(30,85,1,1,0,NULL,'570-9522',NULL,'5709522',2),(31,85,1,0,0,NULL,'(544) 666-4455',NULL,'5446664455',2),(32,66,1,1,0,NULL,'601-8744',NULL,'6018744',1),(33,66,1,0,0,NULL,'324-6344',NULL,'3246344',2),(34,157,1,1,0,NULL,'481-2758',NULL,'4812758',1),(35,119,1,1,0,NULL,'(894) 517-8754',NULL,'8945178754',2),(36,10,1,1,0,NULL,'(353) 364-7675',NULL,'3533647675',1),(37,10,1,0,0,NULL,'353-4496',NULL,'3534496',2),(38,194,1,1,0,NULL,'636-8863',NULL,'6368863',2),(39,194,1,0,0,NULL,'(486) 294-5858',NULL,'4862945858',1),(40,142,1,1,0,NULL,'(540) 681-3975',NULL,'5406813975',1),(41,61,1,1,0,NULL,'310-2639',NULL,'3102639',1),(42,164,1,1,0,NULL,'(298) 402-2307',NULL,'2984022307',1),(43,41,1,1,0,NULL,'(607) 554-4804',NULL,'6075544804',1),(44,41,1,0,0,NULL,'(736) 463-2556',NULL,'7364632556',2),(45,116,1,1,0,NULL,'(360) 203-8830',NULL,'3602038830',2),(46,116,1,0,0,NULL,'488-9541',NULL,'4889541',1),(47,188,1,1,0,NULL,'547-3970',NULL,'5473970',1),(48,188,1,0,0,NULL,'456-5806',NULL,'4565806',1),(49,16,1,1,0,NULL,'(443) 847-8214',NULL,'4438478214',2),(50,16,1,0,0,NULL,'(228) 278-1640',NULL,'2282781640',1),(51,118,1,1,0,NULL,'668-5760',NULL,'6685760',1),(52,103,1,1,0,NULL,'227-3072',NULL,'2273072',1),(53,103,1,0,0,NULL,'(884) 379-1124',NULL,'8843791124',2),(54,143,1,1,0,NULL,'(700) 237-1525',NULL,'7002371525',1),(55,143,1,0,0,NULL,'554-9948',NULL,'5549948',2),(56,149,1,1,0,NULL,'(845) 446-1134',NULL,'8454461134',2),(57,149,1,0,0,NULL,'845-3918',NULL,'8453918',2),(58,24,1,1,0,NULL,'(577) 825-3615',NULL,'5778253615',1),(59,24,1,0,0,NULL,'539-8740',NULL,'5398740',2),(60,7,1,1,0,NULL,'343-9667',NULL,'3439667',1),(61,145,1,1,0,NULL,'841-3230',NULL,'8413230',1),(62,145,1,0,0,NULL,'515-7549',NULL,'5157549',2),(63,20,1,1,0,NULL,'623-7946',NULL,'6237946',2),(64,112,1,1,0,NULL,'225-6309',NULL,'2256309',1),(65,69,1,1,0,NULL,'223-1980',NULL,'2231980',2),(66,137,1,1,0,NULL,'530-6553',NULL,'5306553',2),(67,12,1,1,0,NULL,'(657) 850-4185',NULL,'6578504185',2),(68,12,1,0,0,NULL,'(463) 664-4121',NULL,'4636644121',2),(69,129,1,1,0,NULL,'807-9775',NULL,'8079775',2),(70,129,1,0,0,NULL,'770-3380',NULL,'7703380',2),(71,81,1,1,0,NULL,'800-2902',NULL,'8002902',2),(72,81,1,0,0,NULL,'(619) 445-9996',NULL,'6194459996',2),(73,30,1,1,0,NULL,'537-9409',NULL,'5379409',2),(74,78,1,1,0,NULL,'(764) 210-7528',NULL,'7642107528',2),(75,117,1,1,0,NULL,'554-7125',NULL,'5547125',2),(76,86,1,1,0,NULL,'(354) 519-9785',NULL,'3545199785',1),(77,196,1,1,0,NULL,'(728) 634-9991',NULL,'7286349991',1),(78,162,1,1,0,NULL,'299-6586',NULL,'2996586',1),(79,162,1,0,0,NULL,'223-8858',NULL,'2238858',1),(80,84,1,1,0,NULL,'(358) 628-7157',NULL,'3586287157',1),(81,13,1,1,0,NULL,'402-4916',NULL,'4024916',1),(82,180,1,1,0,NULL,'235-7892',NULL,'2357892',2),(83,180,1,0,0,NULL,'(569) 576-6938',NULL,'5695766938',2),(84,132,1,1,0,NULL,'264-5696',NULL,'2645696',2),(85,132,1,0,0,NULL,'(642) 874-3824',NULL,'6428743824',1),(86,109,1,1,0,NULL,'(360) 710-9845',NULL,'3607109845',1),(87,11,1,1,0,NULL,'232-9188',NULL,'2329188',1),(88,11,1,0,0,NULL,'490-4431',NULL,'4904431',2),(89,45,1,1,0,NULL,'(253) 293-5624',NULL,'2532935624',2),(90,45,1,0,0,NULL,'(749) 269-6171',NULL,'7492696171',2),(91,67,1,1,0,NULL,'(203) 511-8494',NULL,'2035118494',1),(92,67,1,0,0,NULL,'853-5016',NULL,'8535016',2),(93,6,1,1,0,NULL,'463-7805',NULL,'4637805',1),(94,6,1,0,0,NULL,'(206) 414-1901',NULL,'2064141901',1),(95,168,1,1,0,NULL,'787-6333',NULL,'7876333',2),(96,200,1,1,0,NULL,'(285) 820-6572',NULL,'2858206572',2),(97,124,1,1,0,NULL,'(330) 379-1414',NULL,'3303791414',2),(98,125,1,1,0,NULL,'491-4701',NULL,'4914701',1),(99,98,1,1,0,NULL,'276-6700',NULL,'2766700',2),(100,166,1,1,0,NULL,'(316) 319-8026',NULL,'3163198026',2),(101,166,1,0,0,NULL,'604-4282',NULL,'6044282',1),(102,19,1,1,0,NULL,'(714) 784-2050',NULL,'7147842050',2),(103,19,1,0,0,NULL,'(638) 778-8461',NULL,'6387788461',2),(104,163,1,1,0,NULL,'505-4418',NULL,'5054418',2),(105,83,1,1,0,NULL,'622-7211',NULL,'6227211',1),(106,83,1,0,0,NULL,'765-7929',NULL,'7657929',2),(107,189,1,1,0,NULL,'(699) 586-7204',NULL,'6995867204',2),(108,151,1,1,0,NULL,'398-1869',NULL,'3981869',1),(109,151,1,0,0,NULL,'816-2055',NULL,'8162055',1),(110,77,1,1,0,NULL,'(295) 673-4854',NULL,'2956734854',2),(111,176,1,1,0,NULL,'(406) 613-1410',NULL,'4066131410',1),(112,140,1,1,0,NULL,'(536) 824-3077',NULL,'5368243077',1),(113,140,1,0,0,NULL,'248-4676',NULL,'2484676',1),(114,150,1,1,0,NULL,'(676) 362-3906',NULL,'6763623906',1),(115,150,1,0,0,NULL,'(211) 414-5184',NULL,'2114145184',1),(116,174,1,1,0,NULL,'556-8340',NULL,'5568340',1),(117,73,1,1,0,NULL,'(297) 341-4134',NULL,'2973414134',2),(118,58,1,1,0,NULL,'(788) 692-1707',NULL,'7886921707',1),(119,58,1,0,0,NULL,'760-9748',NULL,'7609748',1),(120,8,1,1,0,NULL,'(730) 482-1283',NULL,'7304821283',2),(121,107,1,1,0,NULL,'663-5760',NULL,'6635760',2),(122,173,1,1,0,NULL,'220-5472',NULL,'2205472',2),(123,59,1,1,0,NULL,'(206) 892-7746',NULL,'2068927746',2),(124,5,1,1,0,NULL,'(344) 493-1760',NULL,'3444931760',2),(125,5,1,0,0,NULL,'597-5896',NULL,'5975896',1),(126,201,1,1,0,NULL,'367-9832',NULL,'3679832',2),(127,201,1,0,0,NULL,'630-6571',NULL,'6306571',2),(128,126,1,1,0,NULL,'(889) 862-9075',NULL,'8898629075',2),(129,96,1,1,0,NULL,'(274) 548-5083',NULL,'2745485083',2),(130,96,1,0,0,NULL,'(742) 299-5522',NULL,'7422995522',2),(131,141,1,1,0,NULL,'(665) 595-4111',NULL,'6655954111',2),(132,141,1,0,0,NULL,'(694) 354-1214',NULL,'6943541214',1),(133,94,1,1,0,NULL,'(724) 717-5992',NULL,'7247175992',2),(134,94,1,0,0,NULL,'(480) 525-6131',NULL,'4805256131',2),(135,153,1,1,0,NULL,'365-1641',NULL,'3651641',2),(136,191,1,1,0,NULL,'(834) 357-4554',NULL,'8343574554',1),(137,191,1,0,0,NULL,'340-2246',NULL,'3402246',1),(138,32,1,1,0,NULL,'247-6126',NULL,'2476126',2),(139,169,1,1,0,NULL,'508-9530',NULL,'5089530',1),(140,169,1,0,0,NULL,'270-2187',NULL,'2702187',2),(141,133,1,1,0,NULL,'784-7803',NULL,'7847803',1),(142,133,1,0,0,NULL,'(753) 411-8302',NULL,'7534118302',2),(143,184,1,1,0,NULL,'664-7649',NULL,'6647649',2),(144,130,1,1,0,NULL,'643-3945',NULL,'6433945',2),(145,130,1,0,0,NULL,'(436) 446-5599',NULL,'4364465599',1),(146,170,1,1,0,NULL,'763-8218',NULL,'7638218',1),(147,170,1,0,0,NULL,'(251) 898-7794',NULL,'2518987794',2),(148,154,1,1,0,NULL,'(681) 776-7426',NULL,'6817767426',2),(149,154,1,0,0,NULL,'721-5091',NULL,'7215091',2),(150,160,1,1,0,NULL,'(321) 545-9727',NULL,'3215459727',2),(151,160,1,0,0,NULL,'(278) 571-3422',NULL,'2785713422',1),(152,100,1,1,0,NULL,'(436) 832-2265',NULL,'4368322265',1),(153,100,1,0,0,NULL,'(368) 422-1857',NULL,'3684221857',2),(154,72,1,1,0,NULL,'(314) 791-4783',NULL,'3147914783',2),(155,72,1,0,0,NULL,'(793) 318-2359',NULL,'7933182359',1),(156,70,1,1,0,NULL,'697-3705',NULL,'6973705',1),(157,195,1,1,0,NULL,'(884) 369-8149',NULL,'8843698149',2),(158,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(159,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(160,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -1261,7 +1261,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship` WRITE; /*!40000 ALTER TABLE `civicrm_relationship` DISABLE KEYS */; -INSERT INTO `civicrm_relationship` (`id`, `contact_id_a`, `contact_id_b`, `relationship_type_id`, `start_date`, `end_date`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`, `case_id`) VALUES (1,105,160,1,NULL,NULL,1,NULL,0,0,NULL),(2,71,160,1,NULL,NULL,1,NULL,0,0,NULL),(3,105,75,1,NULL,NULL,1,NULL,0,0,NULL),(4,71,75,1,NULL,NULL,1,NULL,0,0,NULL),(5,71,105,4,NULL,NULL,1,NULL,0,0,NULL),(6,75,156,8,NULL,NULL,1,NULL,0,0,NULL),(7,105,156,8,NULL,NULL,1,NULL,0,0,NULL),(8,71,156,8,NULL,NULL,1,NULL,0,0,NULL),(9,160,156,7,NULL,NULL,0,NULL,0,0,NULL),(10,75,160,2,NULL,NULL,0,NULL,0,0,NULL),(11,34,154,1,NULL,NULL,1,NULL,0,0,NULL),(12,90,154,1,NULL,NULL,1,NULL,0,0,NULL),(13,34,88,1,NULL,NULL,1,NULL,0,0,NULL),(14,90,88,1,NULL,NULL,1,NULL,0,0,NULL),(15,90,34,4,NULL,NULL,1,NULL,0,0,NULL),(16,88,166,8,NULL,NULL,1,NULL,0,0,NULL),(17,34,166,8,NULL,NULL,1,NULL,0,0,NULL),(18,90,166,8,NULL,NULL,1,NULL,0,0,NULL),(19,154,166,7,NULL,NULL,1,NULL,0,0,NULL),(20,88,154,2,NULL,NULL,1,NULL,0,0,NULL),(21,82,74,1,NULL,NULL,1,NULL,0,0,NULL),(22,108,74,1,NULL,NULL,1,NULL,0,0,NULL),(23,82,64,1,NULL,NULL,1,NULL,0,0,NULL),(24,108,64,1,NULL,NULL,1,NULL,0,0,NULL),(25,108,82,4,NULL,NULL,1,NULL,0,0,NULL),(26,64,162,8,NULL,NULL,1,NULL,0,0,NULL),(27,82,162,8,NULL,NULL,1,NULL,0,0,NULL),(28,108,162,8,NULL,NULL,1,NULL,0,0,NULL),(29,74,162,7,NULL,NULL,0,NULL,0,0,NULL),(30,64,74,2,NULL,NULL,0,NULL,0,0,NULL),(31,11,35,1,NULL,NULL,1,NULL,0,0,NULL),(32,42,35,1,NULL,NULL,1,NULL,0,0,NULL),(33,11,134,1,NULL,NULL,1,NULL,0,0,NULL),(34,42,134,1,NULL,NULL,1,NULL,0,0,NULL),(35,42,11,4,NULL,NULL,1,NULL,0,0,NULL),(36,134,136,8,NULL,NULL,1,NULL,0,0,NULL),(37,11,136,8,NULL,NULL,1,NULL,0,0,NULL),(38,42,136,8,NULL,NULL,1,NULL,0,0,NULL),(39,35,136,7,NULL,NULL,1,NULL,0,0,NULL),(40,134,35,2,NULL,NULL,1,NULL,0,0,NULL),(41,197,62,1,NULL,NULL,1,NULL,0,0,NULL),(42,9,62,1,NULL,NULL,1,NULL,0,0,NULL),(43,197,46,1,NULL,NULL,1,NULL,0,0,NULL),(44,9,46,1,NULL,NULL,1,NULL,0,0,NULL),(45,9,197,4,NULL,NULL,1,NULL,0,0,NULL),(46,46,96,8,NULL,NULL,1,NULL,0,0,NULL),(47,197,96,8,NULL,NULL,1,NULL,0,0,NULL),(48,9,96,8,NULL,NULL,1,NULL,0,0,NULL),(49,62,96,7,NULL,NULL,1,NULL,0,0,NULL),(50,46,62,2,NULL,NULL,1,NULL,0,0,NULL),(51,45,20,1,NULL,NULL,1,NULL,0,0,NULL),(52,142,20,1,NULL,NULL,1,NULL,0,0,NULL),(53,45,178,1,NULL,NULL,1,NULL,0,0,NULL),(54,142,178,1,NULL,NULL,1,NULL,0,0,NULL),(55,142,45,4,NULL,NULL,1,NULL,0,0,NULL),(56,178,33,8,NULL,NULL,1,NULL,0,0,NULL),(57,45,33,8,NULL,NULL,1,NULL,0,0,NULL),(58,142,33,8,NULL,NULL,1,NULL,0,0,NULL),(59,20,33,7,NULL,NULL,1,NULL,0,0,NULL),(60,178,20,2,NULL,NULL,1,NULL,0,0,NULL),(61,141,26,1,NULL,NULL,1,NULL,0,0,NULL),(62,190,26,1,NULL,NULL,1,NULL,0,0,NULL),(63,141,170,1,NULL,NULL,1,NULL,0,0,NULL),(64,190,170,1,NULL,NULL,1,NULL,0,0,NULL),(65,190,141,4,NULL,NULL,1,NULL,0,0,NULL),(66,170,158,8,NULL,NULL,1,NULL,0,0,NULL),(67,141,158,8,NULL,NULL,1,NULL,0,0,NULL),(68,190,158,8,NULL,NULL,1,NULL,0,0,NULL),(69,26,158,7,NULL,NULL,1,NULL,0,0,NULL),(70,170,26,2,NULL,NULL,1,NULL,0,0,NULL),(71,29,99,1,NULL,NULL,1,NULL,0,0,NULL),(72,109,99,1,NULL,NULL,1,NULL,0,0,NULL),(73,29,120,1,NULL,NULL,1,NULL,0,0,NULL),(74,109,120,1,NULL,NULL,1,NULL,0,0,NULL),(75,109,29,4,NULL,NULL,1,NULL,0,0,NULL),(76,120,102,8,NULL,NULL,1,NULL,0,0,NULL),(77,29,102,8,NULL,NULL,1,NULL,0,0,NULL),(78,109,102,8,NULL,NULL,1,NULL,0,0,NULL),(79,99,102,7,NULL,NULL,1,NULL,0,0,NULL),(80,120,99,2,NULL,NULL,1,NULL,0,0,NULL),(81,107,41,1,NULL,NULL,1,NULL,0,0,NULL),(82,78,41,1,NULL,NULL,1,NULL,0,0,NULL),(83,107,77,1,NULL,NULL,1,NULL,0,0,NULL),(84,78,77,1,NULL,NULL,1,NULL,0,0,NULL),(85,78,107,4,NULL,NULL,1,NULL,0,0,NULL),(86,77,79,8,NULL,NULL,1,NULL,0,0,NULL),(87,107,79,8,NULL,NULL,1,NULL,0,0,NULL),(88,78,79,8,NULL,NULL,1,NULL,0,0,NULL),(89,41,79,7,NULL,NULL,0,NULL,0,0,NULL),(90,77,41,2,NULL,NULL,0,NULL,0,0,NULL),(91,60,159,1,NULL,NULL,1,NULL,0,0,NULL),(92,165,159,1,NULL,NULL,1,NULL,0,0,NULL),(93,60,97,1,NULL,NULL,1,NULL,0,0,NULL),(94,165,97,1,NULL,NULL,1,NULL,0,0,NULL),(95,165,60,4,NULL,NULL,1,NULL,0,0,NULL),(96,97,148,8,NULL,NULL,1,NULL,0,0,NULL),(97,60,148,8,NULL,NULL,1,NULL,0,0,NULL),(98,165,148,8,NULL,NULL,1,NULL,0,0,NULL),(99,159,148,7,NULL,NULL,0,NULL,0,0,NULL),(100,97,159,2,NULL,NULL,0,NULL,0,0,NULL),(101,19,36,1,NULL,NULL,1,NULL,0,0,NULL),(102,14,36,1,NULL,NULL,1,NULL,0,0,NULL),(103,19,12,1,NULL,NULL,1,NULL,0,0,NULL),(104,14,12,1,NULL,NULL,1,NULL,0,0,NULL),(105,14,19,4,NULL,NULL,1,NULL,0,0,NULL),(106,12,23,8,NULL,NULL,1,NULL,0,0,NULL),(107,19,23,8,NULL,NULL,1,NULL,0,0,NULL),(108,14,23,8,NULL,NULL,1,NULL,0,0,NULL),(109,36,23,7,NULL,NULL,0,NULL,0,0,NULL),(110,12,36,2,NULL,NULL,0,NULL,0,0,NULL),(111,151,39,1,NULL,NULL,1,NULL,0,0,NULL),(112,104,39,1,NULL,NULL,1,NULL,0,0,NULL),(113,151,189,1,NULL,NULL,1,NULL,0,0,NULL),(114,104,189,1,NULL,NULL,1,NULL,0,0,NULL),(115,104,151,4,NULL,NULL,1,NULL,0,0,NULL),(116,189,180,8,NULL,NULL,1,NULL,0,0,NULL),(117,151,180,8,NULL,NULL,1,NULL,0,0,NULL),(118,104,180,8,NULL,NULL,1,NULL,0,0,NULL),(119,39,180,7,NULL,NULL,1,NULL,0,0,NULL),(120,189,39,2,NULL,NULL,1,NULL,0,0,NULL),(121,3,40,1,NULL,NULL,1,NULL,0,0,NULL),(122,194,40,1,NULL,NULL,1,NULL,0,0,NULL),(123,3,133,1,NULL,NULL,1,NULL,0,0,NULL),(124,194,133,1,NULL,NULL,1,NULL,0,0,NULL),(125,194,3,4,NULL,NULL,1,NULL,0,0,NULL),(126,133,201,8,NULL,NULL,1,NULL,0,0,NULL),(127,3,201,8,NULL,NULL,1,NULL,0,0,NULL),(128,194,201,8,NULL,NULL,1,NULL,0,0,NULL),(129,40,201,7,NULL,NULL,1,NULL,0,0,NULL),(130,133,40,2,NULL,NULL,1,NULL,0,0,NULL),(131,21,110,1,NULL,NULL,1,NULL,0,0,NULL),(132,184,110,1,NULL,NULL,1,NULL,0,0,NULL),(133,21,111,1,NULL,NULL,1,NULL,0,0,NULL),(134,184,111,1,NULL,NULL,1,NULL,0,0,NULL),(135,184,21,4,NULL,NULL,1,NULL,0,0,NULL),(136,111,25,8,NULL,NULL,1,NULL,0,0,NULL),(137,21,25,8,NULL,NULL,1,NULL,0,0,NULL),(138,184,25,8,NULL,NULL,1,NULL,0,0,NULL),(139,110,25,7,NULL,NULL,1,NULL,0,0,NULL),(140,111,110,2,NULL,NULL,1,NULL,0,0,NULL),(141,22,127,1,NULL,NULL,1,NULL,0,0,NULL),(142,81,127,1,NULL,NULL,1,NULL,0,0,NULL),(143,22,174,1,NULL,NULL,1,NULL,0,0,NULL),(144,81,174,1,NULL,NULL,1,NULL,0,0,NULL),(145,81,22,4,NULL,NULL,1,NULL,0,0,NULL),(146,174,95,8,NULL,NULL,1,NULL,0,0,NULL),(147,22,95,8,NULL,NULL,1,NULL,0,0,NULL),(148,81,95,8,NULL,NULL,1,NULL,0,0,NULL),(149,127,95,7,NULL,NULL,0,NULL,0,0,NULL),(150,174,127,2,NULL,NULL,0,NULL,0,0,NULL),(151,192,186,1,NULL,NULL,1,NULL,0,0,NULL),(152,169,186,1,NULL,NULL,1,NULL,0,0,NULL),(153,192,183,1,NULL,NULL,1,NULL,0,0,NULL),(154,169,183,1,NULL,NULL,1,NULL,0,0,NULL),(155,169,192,4,NULL,NULL,1,NULL,0,0,NULL),(156,183,130,8,NULL,NULL,1,NULL,0,0,NULL),(157,192,130,8,NULL,NULL,1,NULL,0,0,NULL),(158,169,130,8,NULL,NULL,1,NULL,0,0,NULL),(159,186,130,7,NULL,NULL,0,NULL,0,0,NULL),(160,183,186,2,NULL,NULL,0,NULL,0,0,NULL),(161,86,61,1,NULL,NULL,1,NULL,0,0,NULL),(162,114,61,1,NULL,NULL,1,NULL,0,0,NULL),(163,86,138,1,NULL,NULL,1,NULL,0,0,NULL),(164,114,138,1,NULL,NULL,1,NULL,0,0,NULL),(165,114,86,4,NULL,NULL,1,NULL,0,0,NULL),(166,138,100,8,NULL,NULL,1,NULL,0,0,NULL),(167,86,100,8,NULL,NULL,1,NULL,0,0,NULL),(168,114,100,8,NULL,NULL,1,NULL,0,0,NULL),(169,61,100,7,NULL,NULL,0,NULL,0,0,NULL),(170,138,61,2,NULL,NULL,0,NULL,0,0,NULL),(171,181,73,1,NULL,NULL,1,NULL,0,0,NULL),(172,116,73,1,NULL,NULL,1,NULL,0,0,NULL),(173,181,56,1,NULL,NULL,1,NULL,0,0,NULL),(174,116,56,1,NULL,NULL,1,NULL,0,0,NULL),(175,116,181,4,NULL,NULL,1,NULL,0,0,NULL),(176,56,89,8,NULL,NULL,1,NULL,0,0,NULL),(177,181,89,8,NULL,NULL,1,NULL,0,0,NULL),(178,116,89,8,NULL,NULL,1,NULL,0,0,NULL),(179,73,89,7,NULL,NULL,1,NULL,0,0,NULL),(180,56,73,2,NULL,NULL,1,NULL,0,0,NULL),(181,92,173,1,NULL,NULL,1,NULL,0,0,NULL),(182,85,173,1,NULL,NULL,1,NULL,0,0,NULL),(183,92,87,1,NULL,NULL,1,NULL,0,0,NULL),(184,85,87,1,NULL,NULL,1,NULL,0,0,NULL),(185,85,92,4,NULL,NULL,1,NULL,0,0,NULL),(186,87,193,8,NULL,NULL,1,NULL,0,0,NULL),(187,92,193,8,NULL,NULL,1,NULL,0,0,NULL),(188,85,193,8,NULL,NULL,1,NULL,0,0,NULL),(189,173,193,7,NULL,NULL,0,NULL,0,0,NULL),(190,87,173,2,NULL,NULL,0,NULL,0,0,NULL),(191,143,187,1,NULL,NULL,1,NULL,0,0,NULL),(192,24,187,1,NULL,NULL,1,NULL,0,0,NULL),(193,143,128,1,NULL,NULL,1,NULL,0,0,NULL),(194,24,128,1,NULL,NULL,1,NULL,0,0,NULL),(195,24,143,4,NULL,NULL,1,NULL,0,0,NULL),(196,128,31,8,NULL,NULL,1,NULL,0,0,NULL),(197,143,31,8,NULL,NULL,1,NULL,0,0,NULL),(198,24,31,8,NULL,NULL,1,NULL,0,0,NULL),(199,187,31,7,NULL,NULL,1,NULL,0,0,NULL),(200,128,187,2,NULL,NULL,1,NULL,0,0,NULL),(201,29,10,5,NULL,NULL,1,NULL,0,0,NULL),(202,98,16,5,NULL,NULL,1,NULL,0,0,NULL),(203,19,27,5,NULL,NULL,1,NULL,0,0,NULL),(204,112,49,5,NULL,NULL,1,NULL,0,0,NULL),(205,9,69,5,NULL,NULL,1,NULL,0,0,NULL),(206,135,83,5,NULL,NULL,1,NULL,0,0,NULL),(207,184,101,5,NULL,NULL,1,NULL,0,0,NULL),(208,72,106,5,NULL,NULL,1,NULL,0,0,NULL),(209,164,122,5,NULL,NULL,1,NULL,0,0,NULL),(210,91,144,5,NULL,NULL,1,NULL,0,0,NULL),(211,129,152,5,NULL,NULL,1,NULL,0,0,NULL),(212,189,200,5,NULL,NULL,1,NULL,0,0,NULL); +INSERT INTO `civicrm_relationship` (`id`, `contact_id_a`, `contact_id_b`, `relationship_type_id`, `start_date`, `end_date`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`, `case_id`) VALUES (1,84,162,1,NULL,NULL,1,NULL,0,0,NULL),(2,13,162,1,NULL,NULL,1,NULL,0,0,NULL),(3,84,3,1,NULL,NULL,1,NULL,0,0,NULL),(4,13,3,1,NULL,NULL,1,NULL,0,0,NULL),(5,13,84,4,NULL,NULL,1,NULL,0,0,NULL),(6,3,90,8,NULL,NULL,1,NULL,0,0,NULL),(7,84,90,8,NULL,NULL,1,NULL,0,0,NULL),(8,13,90,8,NULL,NULL,1,NULL,0,0,NULL),(9,162,90,7,NULL,NULL,1,NULL,0,0,NULL),(10,3,162,2,NULL,NULL,1,NULL,0,0,NULL),(11,165,180,1,NULL,NULL,1,NULL,0,0,NULL),(12,52,180,1,NULL,NULL,1,NULL,0,0,NULL),(13,165,155,1,NULL,NULL,1,NULL,0,0,NULL),(14,52,155,1,NULL,NULL,1,NULL,0,0,NULL),(15,52,165,4,NULL,NULL,1,NULL,0,0,NULL),(16,155,42,8,NULL,NULL,1,NULL,0,0,NULL),(17,165,42,8,NULL,NULL,1,NULL,0,0,NULL),(18,52,42,8,NULL,NULL,1,NULL,0,0,NULL),(19,180,42,7,NULL,NULL,1,NULL,0,0,NULL),(20,155,180,2,NULL,NULL,1,NULL,0,0,NULL),(21,109,132,1,NULL,NULL,1,NULL,0,0,NULL),(22,25,132,1,NULL,NULL,1,NULL,0,0,NULL),(23,109,48,1,NULL,NULL,1,NULL,0,0,NULL),(24,25,48,1,NULL,NULL,1,NULL,0,0,NULL),(25,25,109,4,NULL,NULL,1,NULL,0,0,NULL),(26,48,40,8,NULL,NULL,1,NULL,0,0,NULL),(27,109,40,8,NULL,NULL,1,NULL,0,0,NULL),(28,25,40,8,NULL,NULL,1,NULL,0,0,NULL),(29,132,40,7,NULL,NULL,1,NULL,0,0,NULL),(30,48,132,2,NULL,NULL,1,NULL,0,0,NULL),(31,67,11,1,NULL,NULL,1,NULL,0,0,NULL),(32,6,11,1,NULL,NULL,1,NULL,0,0,NULL),(33,67,45,1,NULL,NULL,1,NULL,0,0,NULL),(34,6,45,1,NULL,NULL,1,NULL,0,0,NULL),(35,6,67,4,NULL,NULL,1,NULL,0,0,NULL),(36,45,2,8,NULL,NULL,1,NULL,0,0,NULL),(37,67,2,8,NULL,NULL,1,NULL,0,0,NULL),(38,6,2,8,NULL,NULL,1,NULL,0,0,NULL),(39,11,2,7,NULL,NULL,1,NULL,0,0,NULL),(40,45,11,2,NULL,NULL,1,NULL,0,0,NULL),(41,200,88,1,NULL,NULL,1,NULL,0,0,NULL),(42,124,88,1,NULL,NULL,1,NULL,0,0,NULL),(43,200,168,1,NULL,NULL,1,NULL,0,0,NULL),(44,124,168,1,NULL,NULL,1,NULL,0,0,NULL),(45,124,200,4,NULL,NULL,1,NULL,0,0,NULL),(46,168,68,8,NULL,NULL,1,NULL,0,0,NULL),(47,200,68,8,NULL,NULL,1,NULL,0,0,NULL),(48,124,68,8,NULL,NULL,1,NULL,0,0,NULL),(49,88,68,7,NULL,NULL,1,NULL,0,0,NULL),(50,168,88,2,NULL,NULL,1,NULL,0,0,NULL),(51,166,125,1,NULL,NULL,1,NULL,0,0,NULL),(52,19,125,1,NULL,NULL,1,NULL,0,0,NULL),(53,166,98,1,NULL,NULL,1,NULL,0,0,NULL),(54,19,98,1,NULL,NULL,1,NULL,0,0,NULL),(55,19,166,4,NULL,NULL,1,NULL,0,0,NULL),(56,98,76,8,NULL,NULL,1,NULL,0,0,NULL),(57,166,76,8,NULL,NULL,1,NULL,0,0,NULL),(58,19,76,8,NULL,NULL,1,NULL,0,0,NULL),(59,125,76,7,NULL,NULL,0,NULL,0,0,NULL),(60,98,125,2,NULL,NULL,0,NULL,0,0,NULL),(61,163,14,1,NULL,NULL,1,NULL,0,0,NULL),(62,83,14,1,NULL,NULL,1,NULL,0,0,NULL),(63,163,54,1,NULL,NULL,1,NULL,0,0,NULL),(64,83,54,1,NULL,NULL,1,NULL,0,0,NULL),(65,83,163,4,NULL,NULL,1,NULL,0,0,NULL),(66,54,122,8,NULL,NULL,1,NULL,0,0,NULL),(67,163,122,8,NULL,NULL,1,NULL,0,0,NULL),(68,83,122,8,NULL,NULL,1,NULL,0,0,NULL),(69,14,122,7,NULL,NULL,0,NULL,0,0,NULL),(70,54,14,2,NULL,NULL,0,NULL,0,0,NULL),(71,151,189,1,NULL,NULL,1,NULL,0,0,NULL),(72,190,189,1,NULL,NULL,1,NULL,0,0,NULL),(73,151,104,1,NULL,NULL,1,NULL,0,0,NULL),(74,190,104,1,NULL,NULL,1,NULL,0,0,NULL),(75,190,151,4,NULL,NULL,1,NULL,0,0,NULL),(76,104,102,8,NULL,NULL,1,NULL,0,0,NULL),(77,151,102,8,NULL,NULL,1,NULL,0,0,NULL),(78,190,102,8,NULL,NULL,1,NULL,0,0,NULL),(79,189,102,7,NULL,NULL,1,NULL,0,0,NULL),(80,104,189,2,NULL,NULL,1,NULL,0,0,NULL),(81,139,77,1,NULL,NULL,1,NULL,0,0,NULL),(82,140,77,1,NULL,NULL,1,NULL,0,0,NULL),(83,139,176,1,NULL,NULL,1,NULL,0,0,NULL),(84,140,176,1,NULL,NULL,1,NULL,0,0,NULL),(85,140,139,4,NULL,NULL,1,NULL,0,0,NULL),(86,176,49,8,NULL,NULL,1,NULL,0,0,NULL),(87,139,49,8,NULL,NULL,1,NULL,0,0,NULL),(88,140,49,8,NULL,NULL,1,NULL,0,0,NULL),(89,77,49,7,NULL,NULL,1,NULL,0,0,NULL),(90,176,77,2,NULL,NULL,1,NULL,0,0,NULL),(91,174,150,1,NULL,NULL,1,NULL,0,0,NULL),(92,73,150,1,NULL,NULL,1,NULL,0,0,NULL),(93,174,193,1,NULL,NULL,1,NULL,0,0,NULL),(94,73,193,1,NULL,NULL,1,NULL,0,0,NULL),(95,73,174,4,NULL,NULL,1,NULL,0,0,NULL),(96,193,38,8,NULL,NULL,1,NULL,0,0,NULL),(97,174,38,8,NULL,NULL,1,NULL,0,0,NULL),(98,73,38,8,NULL,NULL,1,NULL,0,0,NULL),(99,150,38,7,NULL,NULL,0,NULL,0,0,NULL),(100,193,150,2,NULL,NULL,0,NULL,0,0,NULL),(101,107,58,1,NULL,NULL,1,NULL,0,0,NULL),(102,35,58,1,NULL,NULL,1,NULL,0,0,NULL),(103,107,8,1,NULL,NULL,1,NULL,0,0,NULL),(104,35,8,1,NULL,NULL,1,NULL,0,0,NULL),(105,35,107,4,NULL,NULL,1,NULL,0,0,NULL),(106,8,46,8,NULL,NULL,1,NULL,0,0,NULL),(107,107,46,8,NULL,NULL,1,NULL,0,0,NULL),(108,35,46,8,NULL,NULL,1,NULL,0,0,NULL),(109,58,46,7,NULL,NULL,0,NULL,0,0,NULL),(110,8,58,2,NULL,NULL,0,NULL,0,0,NULL),(111,59,173,1,NULL,NULL,1,NULL,0,0,NULL),(112,5,173,1,NULL,NULL,1,NULL,0,0,NULL),(113,59,33,1,NULL,NULL,1,NULL,0,0,NULL),(114,5,33,1,NULL,NULL,1,NULL,0,0,NULL),(115,5,59,4,NULL,NULL,1,NULL,0,0,NULL),(116,33,181,8,NULL,NULL,1,NULL,0,0,NULL),(117,59,181,8,NULL,NULL,1,NULL,0,0,NULL),(118,5,181,8,NULL,NULL,1,NULL,0,0,NULL),(119,173,181,7,NULL,NULL,0,NULL,0,0,NULL),(120,33,173,2,NULL,NULL,0,NULL,0,0,NULL),(121,201,64,1,NULL,NULL,1,NULL,0,0,NULL),(122,126,64,1,NULL,NULL,1,NULL,0,0,NULL),(123,201,87,1,NULL,NULL,1,NULL,0,0,NULL),(124,126,87,1,NULL,NULL,1,NULL,0,0,NULL),(125,126,201,4,NULL,NULL,1,NULL,0,0,NULL),(126,87,57,8,NULL,NULL,1,NULL,0,0,NULL),(127,201,57,8,NULL,NULL,1,NULL,0,0,NULL),(128,126,57,8,NULL,NULL,1,NULL,0,0,NULL),(129,64,57,7,NULL,NULL,1,NULL,0,0,NULL),(130,87,64,2,NULL,NULL,1,NULL,0,0,NULL),(131,94,96,1,NULL,NULL,1,NULL,0,0,NULL),(132,183,96,1,NULL,NULL,1,NULL,0,0,NULL),(133,94,141,1,NULL,NULL,1,NULL,0,0,NULL),(134,183,141,1,NULL,NULL,1,NULL,0,0,NULL),(135,183,94,4,NULL,NULL,1,NULL,0,0,NULL),(136,141,161,8,NULL,NULL,1,NULL,0,0,NULL),(137,94,161,8,NULL,NULL,1,NULL,0,0,NULL),(138,183,161,8,NULL,NULL,1,NULL,0,0,NULL),(139,96,161,7,NULL,NULL,1,NULL,0,0,NULL),(140,141,96,2,NULL,NULL,1,NULL,0,0,NULL),(141,191,153,1,NULL,NULL,1,NULL,0,0,NULL),(142,32,153,1,NULL,NULL,1,NULL,0,0,NULL),(143,191,89,1,NULL,NULL,1,NULL,0,0,NULL),(144,32,89,1,NULL,NULL,1,NULL,0,0,NULL),(145,32,191,4,NULL,NULL,1,NULL,0,0,NULL),(146,89,17,8,NULL,NULL,1,NULL,0,0,NULL),(147,191,17,8,NULL,NULL,1,NULL,0,0,NULL),(148,32,17,8,NULL,NULL,1,NULL,0,0,NULL),(149,153,17,7,NULL,NULL,1,NULL,0,0,NULL),(150,89,153,2,NULL,NULL,1,NULL,0,0,NULL),(151,133,169,1,NULL,NULL,1,NULL,0,0,NULL),(152,4,169,1,NULL,NULL,1,NULL,0,0,NULL),(153,133,186,1,NULL,NULL,1,NULL,0,0,NULL),(154,4,186,1,NULL,NULL,1,NULL,0,0,NULL),(155,4,133,4,NULL,NULL,1,NULL,0,0,NULL),(156,186,187,8,NULL,NULL,1,NULL,0,0,NULL),(157,133,187,8,NULL,NULL,1,NULL,0,0,NULL),(158,4,187,8,NULL,NULL,1,NULL,0,0,NULL),(159,169,187,7,NULL,NULL,1,NULL,0,0,NULL),(160,186,169,2,NULL,NULL,1,NULL,0,0,NULL),(161,184,197,1,NULL,NULL,1,NULL,0,0,NULL),(162,130,197,1,NULL,NULL,1,NULL,0,0,NULL),(163,184,171,1,NULL,NULL,1,NULL,0,0,NULL),(164,130,171,1,NULL,NULL,1,NULL,0,0,NULL),(165,130,184,4,NULL,NULL,1,NULL,0,0,NULL),(166,171,80,8,NULL,NULL,1,NULL,0,0,NULL),(167,184,80,8,NULL,NULL,1,NULL,0,0,NULL),(168,130,80,8,NULL,NULL,1,NULL,0,0,NULL),(169,197,80,7,NULL,NULL,1,NULL,0,0,NULL),(170,171,197,2,NULL,NULL,1,NULL,0,0,NULL),(171,154,170,1,NULL,NULL,1,NULL,0,0,NULL),(172,160,170,1,NULL,NULL,1,NULL,0,0,NULL),(173,154,114,1,NULL,NULL,1,NULL,0,0,NULL),(174,160,114,1,NULL,NULL,1,NULL,0,0,NULL),(175,160,154,4,NULL,NULL,1,NULL,0,0,NULL),(176,114,51,8,NULL,NULL,1,NULL,0,0,NULL),(177,154,51,8,NULL,NULL,1,NULL,0,0,NULL),(178,160,51,8,NULL,NULL,1,NULL,0,0,NULL),(179,170,51,7,NULL,NULL,0,NULL,0,0,NULL),(180,114,170,2,NULL,NULL,0,NULL,0,0,NULL),(181,148,113,1,NULL,NULL,1,NULL,0,0,NULL),(182,179,113,1,NULL,NULL,1,NULL,0,0,NULL),(183,148,100,1,NULL,NULL,1,NULL,0,0,NULL),(184,179,100,1,NULL,NULL,1,NULL,0,0,NULL),(185,179,148,4,NULL,NULL,1,NULL,0,0,NULL),(186,100,131,8,NULL,NULL,1,NULL,0,0,NULL),(187,148,131,8,NULL,NULL,1,NULL,0,0,NULL),(188,179,131,8,NULL,NULL,1,NULL,0,0,NULL),(189,113,131,7,NULL,NULL,1,NULL,0,0,NULL),(190,100,113,2,NULL,NULL,1,NULL,0,0,NULL),(191,195,72,1,NULL,NULL,1,NULL,0,0,NULL),(192,156,72,1,NULL,NULL,1,NULL,0,0,NULL),(193,195,70,1,NULL,NULL,1,NULL,0,0,NULL),(194,156,70,1,NULL,NULL,1,NULL,0,0,NULL),(195,156,195,4,NULL,NULL,1,NULL,0,0,NULL),(196,70,79,8,NULL,NULL,1,NULL,0,0,NULL),(197,195,79,8,NULL,NULL,1,NULL,0,0,NULL),(198,156,79,8,NULL,NULL,1,NULL,0,0,NULL),(199,72,79,7,NULL,NULL,1,NULL,0,0,NULL),(200,70,72,2,NULL,NULL,1,NULL,0,0,NULL),(201,121,23,5,NULL,NULL,1,NULL,0,0,NULL),(202,19,39,5,NULL,NULL,1,NULL,0,0,NULL),(203,26,60,5,NULL,NULL,1,NULL,0,0,NULL),(204,193,63,5,NULL,NULL,1,NULL,0,0,NULL),(205,84,65,5,NULL,NULL,1,NULL,0,0,NULL),(206,160,74,5,NULL,NULL,1,NULL,0,0,NULL),(207,70,95,5,NULL,NULL,1,NULL,0,0,NULL),(208,119,101,5,NULL,NULL,1,NULL,0,0,NULL),(209,29,105,5,NULL,NULL,1,NULL,0,0,NULL),(210,154,111,5,NULL,NULL,1,NULL,0,0,NULL),(211,21,123,5,NULL,NULL,1,NULL,0,0,NULL),(212,194,127,5,NULL,NULL,1,NULL,0,0,NULL),(213,142,144,5,NULL,NULL,1,NULL,0,0,NULL),(214,18,178,5,NULL,NULL,1,NULL,0,0,NULL),(215,106,182,5,NULL,NULL,1,NULL,0,0,NULL),(216,172,192,5,NULL,NULL,1,NULL,0,0,NULL); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -1337,7 +1337,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_subscription_history` WRITE; /*!40000 ALTER TABLE `civicrm_subscription_history` DISABLE KEYS */; -INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES (1,137,2,'2019-11-28 22:08:12','Email','Added',NULL),(2,93,2,'2020-02-28 22:13:51','Email','Added',NULL),(3,4,2,'2019-07-10 07:49:37','Email','Added',NULL),(4,54,2,'2019-11-02 05:09:00','Email','Added',NULL),(5,103,2,'2019-09-06 02:57:28','Admin','Added',NULL),(6,195,2,'2019-09-30 17:40:47','Admin','Added',NULL),(7,91,2,'2019-09-19 04:43:35','Admin','Added',NULL),(8,171,2,'2020-05-02 19:03:49','Admin','Added',NULL),(9,172,2,'2019-12-07 21:21:41','Email','Added',NULL),(10,147,2,'2019-10-21 16:38:02','Admin','Added',NULL),(11,113,2,'2020-04-03 03:43:58','Admin','Added',NULL),(12,63,2,'2020-05-18 03:12:57','Admin','Added',NULL),(13,59,2,'2020-01-25 19:05:24','Admin','Added',NULL),(14,117,2,'2020-05-19 02:57:18','Email','Added',NULL),(15,199,2,'2020-03-29 14:16:00','Admin','Added',NULL),(16,125,2,'2020-01-14 02:01:53','Email','Added',NULL),(17,129,2,'2019-11-08 20:50:06','Email','Added',NULL),(18,135,2,'2020-03-03 09:38:05','Email','Added',NULL),(19,177,2,'2019-08-23 06:22:50','Admin','Added',NULL),(20,198,2,'2020-03-26 15:31:45','Email','Added',NULL),(21,115,2,'2020-03-31 01:22:49','Admin','Added',NULL),(22,80,2,'2019-10-24 22:27:07','Email','Added',NULL),(23,67,2,'2020-05-15 04:15:07','Email','Added',NULL),(24,179,2,'2019-07-10 09:14:41','Email','Added',NULL),(25,124,2,'2019-12-17 00:30:59','Admin','Added',NULL),(26,7,2,'2020-03-18 07:15:33','Admin','Added',NULL),(27,157,2,'2020-05-23 15:56:18','Email','Added',NULL),(28,72,2,'2019-09-14 10:53:29','Email','Added',NULL),(29,6,2,'2020-02-28 10:27:53','Email','Added',NULL),(30,168,2,'2019-11-24 03:22:35','Email','Added',NULL),(31,164,2,'2020-01-10 14:37:15','Admin','Added',NULL),(32,48,2,'2019-07-08 06:36:40','Admin','Added',NULL),(33,94,2,'2019-08-30 01:02:54','Email','Added',NULL),(34,131,2,'2019-06-23 07:40:37','Admin','Added',NULL),(35,149,2,'2020-01-21 18:54:34','Admin','Added',NULL),(36,68,2,'2019-11-01 04:19:35','Email','Added',NULL),(37,37,2,'2020-03-28 08:06:19','Admin','Added',NULL),(38,57,2,'2019-08-15 09:35:38','Admin','Added',NULL),(39,112,2,'2019-12-08 00:27:30','Admin','Added',NULL),(40,132,2,'2020-02-21 10:31:46','Admin','Added',NULL),(41,139,2,'2020-05-07 12:41:48','Email','Added',NULL),(42,53,2,'2019-06-16 19:46:23','Email','Added',NULL),(43,66,2,'2020-05-11 09:55:56','Email','Added',NULL),(44,58,2,'2020-01-11 16:44:58','Admin','Added',NULL),(45,18,2,'2020-04-24 10:42:12','Email','Added',NULL),(46,161,2,'2020-01-11 19:09:08','Email','Added',NULL),(47,98,2,'2019-06-21 14:41:18','Admin','Added',NULL),(48,140,2,'2019-10-11 05:17:47','Admin','Added',NULL),(49,188,2,'2020-02-19 08:23:18','Email','Added',NULL),(50,47,2,'2019-12-27 04:49:06','Email','Added',NULL),(51,65,2,'2019-07-30 17:43:43','Email','Added',NULL),(52,44,2,'2019-11-23 17:20:42','Admin','Added',NULL),(53,185,2,'2020-05-15 08:49:46','Email','Added',NULL),(54,43,2,'2019-07-30 03:16:25','Email','Added',NULL),(55,28,2,'2019-07-23 11:06:17','Admin','Added',NULL),(56,70,2,'2020-01-07 11:02:47','Admin','Added',NULL),(57,119,2,'2019-11-02 14:40:04','Admin','Added',NULL),(58,123,2,'2020-03-01 11:59:51','Admin','Added',NULL),(59,163,2,'2019-09-08 16:53:22','Email','Added',NULL),(60,8,2,'2020-02-12 21:18:30','Admin','Added',NULL),(61,38,3,'2020-03-26 14:59:02','Email','Added',NULL),(62,84,3,'2019-11-01 15:34:50','Admin','Added',NULL),(63,51,3,'2019-08-10 14:58:29','Admin','Added',NULL),(64,76,3,'2019-10-20 15:07:32','Email','Added',NULL),(65,153,3,'2020-04-30 11:04:16','Admin','Added',NULL),(66,15,3,'2020-04-04 22:12:01','Email','Added',NULL),(67,126,3,'2019-11-21 04:30:50','Email','Added',NULL),(68,32,3,'2020-04-08 18:01:20','Admin','Added',NULL),(69,155,3,'2020-05-29 03:53:54','Email','Added',NULL),(70,55,3,'2019-07-18 06:11:04','Admin','Added',NULL),(71,196,3,'2019-06-26 00:47:34','Email','Added',NULL),(72,191,3,'2020-04-18 05:18:05','Admin','Added',NULL),(73,146,3,'2020-01-25 20:36:38','Email','Added',NULL),(74,5,3,'2019-09-04 19:16:52','Email','Added',NULL),(75,118,3,'2020-01-29 19:13:58','Admin','Added',NULL),(76,137,4,'2020-03-14 05:26:36','Admin','Added',NULL),(77,171,4,'2019-10-03 07:26:08','Email','Added',NULL),(78,199,4,'2019-12-07 02:00:42','Admin','Added',NULL),(79,80,4,'2019-07-20 15:40:51','Email','Added',NULL),(80,6,4,'2019-08-11 03:01:15','Admin','Added',NULL),(81,68,4,'2019-08-17 13:55:04','Admin','Added',NULL),(82,66,4,'2020-03-12 00:43:32','Email','Added',NULL),(83,47,4,'2020-01-26 12:41:36','Email','Added',NULL); +INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES (1,50,2,'2020-05-13 14:53:48','Email','Added',NULL),(2,43,2,'2020-04-25 08:07:17','Admin','Added',NULL),(3,71,2,'2019-12-05 08:41:06','Email','Added',NULL),(4,177,2,'2020-01-24 06:40:14','Admin','Added',NULL),(5,110,2,'2020-04-02 11:48:17','Email','Added',NULL),(6,97,2,'2019-09-18 14:11:28','Admin','Added',NULL),(7,56,2,'2019-11-07 19:22:32','Admin','Added',NULL),(8,75,2,'2020-05-19 07:43:11','Admin','Added',NULL),(9,91,2,'2020-01-12 20:41:30','Admin','Added',NULL),(10,172,2,'2020-01-26 23:36:11','Email','Added',NULL),(11,37,2,'2019-09-26 19:43:21','Email','Added',NULL),(12,175,2,'2019-12-18 01:13:06','Email','Added',NULL),(13,15,2,'2019-12-12 12:08:24','Email','Added',NULL),(14,106,2,'2019-08-13 15:31:19','Email','Added',NULL),(15,115,2,'2019-10-25 19:36:36','Admin','Added',NULL),(16,147,2,'2019-10-06 03:04:07','Admin','Added',NULL),(17,198,2,'2019-09-02 22:34:44','Email','Added',NULL),(18,53,2,'2019-11-26 21:03:47','Email','Added',NULL),(19,99,2,'2019-09-10 22:14:27','Admin','Added',NULL),(20,146,2,'2020-02-21 01:19:57','Email','Added',NULL),(21,22,2,'2019-10-08 10:33:26','Admin','Added',NULL),(22,18,2,'2020-01-23 21:30:25','Email','Added',NULL),(23,108,2,'2020-03-26 08:34:08','Email','Added',NULL),(24,27,2,'2019-07-24 20:48:50','Admin','Added',NULL),(25,26,2,'2019-10-10 04:18:02','Email','Added',NULL),(26,92,2,'2019-09-14 04:18:10','Email','Added',NULL),(27,44,2,'2019-10-07 17:54:01','Admin','Added',NULL),(28,121,2,'2019-06-17 15:50:50','Admin','Added',NULL),(29,47,2,'2020-06-03 16:46:48','Admin','Added',NULL),(30,138,2,'2019-08-20 09:45:06','Email','Added',NULL),(31,34,2,'2019-10-13 23:53:58','Email','Added',NULL),(32,85,2,'2020-05-30 16:55:27','Admin','Added',NULL),(33,66,2,'2019-06-15 19:00:37','Admin','Added',NULL),(34,157,2,'2020-04-23 19:15:35','Admin','Added',NULL),(35,119,2,'2019-07-24 01:32:41','Admin','Added',NULL),(36,10,2,'2020-05-18 05:33:25','Email','Added',NULL),(37,159,2,'2020-01-20 22:08:22','Admin','Added',NULL),(38,194,2,'2019-08-23 13:13:22','Email','Added',NULL),(39,142,2,'2020-04-08 21:37:01','Email','Added',NULL),(40,61,2,'2020-03-10 17:34:44','Email','Added',NULL),(41,164,2,'2019-11-24 19:32:02','Email','Added',NULL),(42,134,2,'2019-07-06 20:16:56','Email','Added',NULL),(43,41,2,'2019-12-12 16:46:00','Admin','Added',NULL),(44,116,2,'2019-08-23 02:06:59','Admin','Added',NULL),(45,188,2,'2019-06-26 20:49:22','Email','Added',NULL),(46,120,2,'2020-04-19 10:11:06','Admin','Added',NULL),(47,16,2,'2020-05-14 05:05:59','Email','Added',NULL),(48,29,2,'2020-05-27 19:44:18','Email','Added',NULL),(49,128,2,'2020-03-18 13:14:49','Email','Added',NULL),(50,118,2,'2020-01-20 16:50:23','Email','Added',NULL),(51,103,2,'2020-01-29 13:06:47','Admin','Added',NULL),(52,143,2,'2019-08-06 06:47:09','Admin','Added',NULL),(53,149,2,'2019-10-15 16:39:59','Admin','Added',NULL),(54,136,2,'2020-03-11 04:03:13','Email','Added',NULL),(55,24,2,'2019-07-10 08:02:57','Email','Added',NULL),(56,36,2,'2019-08-22 00:56:45','Admin','Added',NULL),(57,7,2,'2020-02-24 20:30:37','Email','Added',NULL),(58,167,2,'2020-01-23 23:25:37','Admin','Added',NULL),(59,28,2,'2019-08-14 03:07:08','Email','Added',NULL),(60,145,2,'2020-02-04 15:15:13','Email','Added',NULL),(61,158,3,'2019-08-28 18:49:52','Admin','Added',NULL),(62,20,3,'2019-12-21 01:23:38','Email','Added',NULL),(63,199,3,'2020-04-24 14:05:33','Admin','Added',NULL),(64,112,3,'2019-12-31 06:31:48','Admin','Added',NULL),(65,93,3,'2019-09-05 23:32:40','Admin','Added',NULL),(66,69,3,'2019-07-23 03:20:42','Email','Added',NULL),(67,21,3,'2020-05-23 11:13:45','Admin','Added',NULL),(68,137,3,'2019-07-07 18:28:15','Admin','Added',NULL),(69,152,3,'2019-10-25 17:27:58','Admin','Added',NULL),(70,12,3,'2019-10-30 05:31:45','Email','Added',NULL),(71,129,3,'2019-10-16 21:40:00','Admin','Added',NULL),(72,81,3,'2020-03-21 22:25:15','Admin','Added',NULL),(73,185,3,'2019-08-26 12:30:47','Admin','Added',NULL),(74,30,3,'2019-06-14 16:15:18','Email','Added',NULL),(75,62,3,'2019-10-14 11:20:27','Admin','Added',NULL),(76,50,4,'2020-02-19 14:53:47','Email','Added',NULL),(77,75,4,'2019-09-22 19:15:11','Admin','Added',NULL),(78,115,4,'2019-11-10 22:22:54','Email','Added',NULL),(79,18,4,'2019-09-10 04:03:22','Admin','Added',NULL),(80,47,4,'2019-09-15 10:32:19','Email','Added',NULL),(81,10,4,'2019-09-14 09:37:32','Email','Added',NULL),(82,41,4,'2020-05-09 02:24:04','Email','Added',NULL),(83,118,4,'2019-12-18 12:17:55','Admin','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -1433,7 +1433,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_website` WRITE; /*!40000 ALTER TABLE `civicrm_website` DISABLE KEYS */; -INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES (1,10,'http://ruralsolutions.org',1),(2,106,'http://hoopestoneducation.org',1),(3,167,'http://sdagriculturesolutions.org',1),(4,182,'http://cadelleducationsolutions.org',1),(5,200,'http://charlestoneducationpartners.org',1),(6,52,'http://milwaukeedevelopment.org',1),(7,144,'http://iowaservices.org',1),(8,69,'http://collegecenter.org',1),(9,122,'http://oklahomafoodnetwork.org',1),(10,101,'http://hartfordservices.org',1),(11,50,'http://carmelculturealliance.org',1),(12,176,'http://vnenvironmentalfund.org',1),(13,16,'http://ruralempowermentfellowship.org',1),(14,49,'http://ruralalliance.org',1),(15,152,'http://dowlenschool.org',1),(16,83,'http://missouriadvocacypartnership.org',1); +INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES (1,74,'http://urbanpeacefund.org',1),(2,111,'http://sierrapeaceinitiative.org',1),(3,23,'http://creativeeducation.org',1),(4,65,'http://indiahomahealthcollective.org',1),(5,82,'http://pineassociation.org',1),(6,123,'http://mlkingeducation.org',1),(7,55,'http://mainarts.org',1),(8,144,'http://urbaninitiative.org',1),(9,63,'http://nyhealthsystems.org',1),(10,178,'http://wisconsinwellness.org',1),(11,101,'http://spactionservices.org',1),(12,135,'http://austinhealth.org',1),(13,39,'http://farmingtonservices.org',1),(14,60,'http://paluxyenvironmental.org',1),(15,182,'http://statespartnership.org',1),(16,105,'http://unitedtechnology.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -1465,7 +1465,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-06-04 10:38:21 +-- Dump completed on 2020-06-10 14:45:54 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl b/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl index c57fc1648071fdf22202f151ce341c4001402fe4..a89731bd3d0d03068e5fcde48661b95c8d314eb5 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl @@ -86,7 +86,7 @@ CRM.$(function($){ ajax: { url: sourceDataUrl, data: function(term) { - return { name: term,}; + return { name: term, id: 1}; }, results: function(response) { return { results: response }; diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl index 63e1ef0d62ba04cde7d68db9cceaa0e5a0f62134..5514bf8bd06cf99053f29a241e1390c8771da6d4 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl @@ -13,9 +13,9 @@ <table class="form-layout-compressed"> <tr class="crm-contribution-form-block-contribution_page"><td class="label">{$form.contribution_page_id.label}</td><td{$valueStyle}>{$form.contribution_page_id.html|crmAddClass:twenty}</td></tr> <tr class="crm-contribution-form-block-note"><td class="label" style="vertical-align:top;">{$form.note.label}</td><td>{$form.note.html}</td></tr> - <tr class="crm-contribution-form-block-non_deductible_amount"><td class="label">{$form.non_deductible_amount.label}</td><td{$valueStyle}>{$form.non_deductible_amount.html|crmMoney:$currency:'':1}<br /> + <tr class="crm-contribution-form-block-non_deductible_amount"><td class="label">{$form.non_deductible_amount.label}</td><td{$valueStyle}>{$form.non_deductible_amount.html}<br /> <span class="description">{ts}Non-deductible portion of this contribution.{/ts}</span></td></tr> - <tr class="crm-contribution-form-block-fee_amount"><td class="label">{$form.fee_amount.label}</td><td{$valueStyle}>{$form.fee_amount.html|crmMoney:$currency:'XXX':'YYY'}<br /> + <tr class="crm-contribution-form-block-fee_amount"><td class="label">{$form.fee_amount.label}</td><td{$valueStyle}>{$form.fee_amount.html}<br /> <span class="description">{ts}Processing fee for this transaction (if applicable).{/ts}</span></td></tr> <tr class="crm-contribution-form-block-invoice_id"><td class="label">{$form.invoice_id.label}</td><td{$valueStyle}>{$form.invoice_id.html}<br /> <span class="description">{ts}Unique internal reference ID for this contribution.{/ts}</span></td></tr> diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Payment.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Payment.tpl index a6810dd89aa5127b5fe0782d4ed240304e2473b5..0a3921c8cfd24ee17ac2695cc9c393ed2ede9733 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Payment.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Payment.tpl @@ -1,51 +1,57 @@ - +{* + +--------------------------------------------------------------------+ + | 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 | + +--------------------------------------------------------------------+ +*} {* build recurring contribution block. *} {if $buildRecurBlock} {literal} <script type="text/javascript" > - function enablePeriod( ) - { - var frUnit = cj( '#frequency_unit' ); - var frInerval = cj( '#frequency_interval' ); - var installments = cj( '#installments' ); + function enablePeriod() { + var frUnit = cj('#frequency_unit'); + var frInerval = cj('#frequency_interval'); + var installments = cj('#installments'); isDisabled = false; - if ( cj( 'input:radio[name="is_recur"]:checked').val() == 0 ) { + if (cj('input:radio[name="is_recur"]:checked').val() == 0) { isDisabled = true; - frInerval.val( '' ); - installments.val( '' ); + frInerval.val(''); + installments.val(''); } - frUnit.prop( 'disabled', isDisabled ); - frInerval.prop( 'disabled', isDisabled ); - installments.prop( 'disabled', isDisabled ); + frUnit.prop('disabled', isDisabled); + frInerval.prop('disabled', isDisabled); + installments.prop('disabled', isDisabled); } - function buildRecurBlock( processorId ) { - if ( !processorId ) processorId = cj( "#payment_processor_id" ).val( ); + function buildRecurBlock(processorId) { + if (!processorId) processorId = cj("#payment_processor_id").val(); var recurPaymentProIds = {/literal}'{$recurringPaymentProcessorIds}'{literal}; - var funName = ( cj.inArray(processorId, recurPaymentProIds.split(',')) > -1 ) ? 'show' : 'hide'; + var funName = (cj.inArray(processorId, recurPaymentProIds.split(',')) > -1) ? 'show' : 'hide'; var priceSet = cj("#price_set_id"); - if ( priceSet && priceSet.val( ) ) { + if (priceSet && priceSet.val()) { funName = 'hide'; //reset the values of recur block. - if ( cj( 'input:radio[name="is_recur"]:checked').val() ) { + if (cj('input:radio[name="is_recur"]:checked').val()) { cj("#installments").val(''); cj("#frequency_interval").val(''); - cj( 'input:radio[name="is_recur"]')[0].checked = true; + cj('input:radio[name="is_recur"]')[0].checked = true; } } - - enablePeriod( ); - eval( 'cj( "#recurringPaymentBlock" ).' + funName + "( )" ); + enablePeriod(); + eval('cj("#recurringPaymentBlock").' + funName + "()"); } CRM.$(function($) { - buildRecurBlock( null ); - enablePeriod( ); + buildRecurBlock(null); + enablePeriod(); }); </script> diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl index d3403fae9bb93fe6002718d40a8cd4dad041f9af..08a41ddfa144d94084910f592fd714860c4a1fc5 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl @@ -92,7 +92,7 @@ <td class="label">{$form.trxn_id.label}</td> <td>{$form.trxn_id.html} {help id="id-trans_id"}</td> </tr> - <tr class="crm-payment-form-block-fee_amount"><td class="label">{$form.fee_amount.label}</td><td{$valueStyle}>{$form.fee_amount.html|crmMoney:$currency:'XXX':'YYY'}<br /> + <tr class="crm-payment-form-block-fee_amount"><td class="label">{$form.fee_amount.label}</td><td{$valueStyle}>{$form.fee_amount.html}<br /> <span class="description">{ts}Processing fee for this transaction (if applicable).{/ts}</span></td></tr> </table> </div> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl index 0df23f41bd89addd667a48563990654425edaf8e..f3674420c14f564fe6499fb0f41158fb4cc5bab8 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl @@ -16,245 +16,244 @@ {else} {include file="CRM/Contribute/Form/AdditionalInfo/Payment.tpl"} {if $contributionMode} - <div class="help"> - {if $contactId && $payNow} - {ts 1=$displayName 2=$contributionMode|upper}Use this form to edit a contribution on behalf of %1. <strong>A - %2 transaction will be submitted</strong> using the selected payment processor.{/ts} - {elseif $contactId} - {ts 1=$displayName 2=$contributionMode|upper}Use this form to submit a new contribution on behalf of %1. <strong>A - %2 transaction will be submitted</strong> using the selected payment processor.{/ts} - {else} - {ts 1=$displayName 2=$contributionMode|upper}Use this form to submit a new contribution. <strong>A %2 transaction will be submitted</strong> using the selected payment processor.{/ts} - {/if} - </div> + <div class="help"> + {if $contactId && $payNow} + {ts 1=$displayName 2=$contributionMode|upper}Use this form to edit a contribution on behalf of %1. <strong>A + %2 transaction will be submitted</strong> using the selected payment processor.{/ts} + {elseif $contactId} + {ts 1=$displayName 2=$contributionMode|upper}Use this form to submit a new contribution on behalf of %1. <strong>A + %2 transaction will be submitted</strong> using the selected payment processor.{/ts} + {else} + {ts 1=$displayName 2=$contributionMode|upper}Use this form to submit a new contribution. <strong>A %2 transaction will be submitted</strong> using the selected payment processor.{/ts} + {/if} + </div> {/if} <div class="crm-block crm-form-block crm-contribution-form-block"> - {if !$email and $action neq 8 and $context neq 'standalone'} - <div class="messages status no-popup"> - <div class="icon inform-icon"></div> {ts}You will not be able to send an automatic email receipt for this contribution because there is no email address recorded for this contact. If you want a receipt to be sent when this contribution is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the contribution.{/ts} - </div> - {/if} - - {if $action eq 8} - <div class="messages status no-popup"> - <div class="icon inform-icon"></div> - {ts}WARNING: Deleting this contribution will result in the loss of the associated financial transactions (if any).{/ts} {ts}Do you want to continue?{/ts} - </div> - {else} - {if $newCredit AND $action EQ 1 AND $contributionMode EQ null} - <div class="action-link css_right crm-link-credit-card-mode"> - {if $contactId} - {capture assign=ccModeLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=add&cid=`$contactId`&context=`$context`&mode=live"}{/capture} - {else} - {capture assign=ccModeLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=add&context=standalone&mode=live"}{/capture} - {/if} - <a class="open-inline-noreturn action-item crm-hover-button" href="{$ccModeLink}"><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}submit credit card contribution{/ts}</a> - </div> + {if !$email and $action neq 8 and $context neq 'standalone'} + <div class="messages status no-popup"> + <div class="icon inform-icon"></div> {ts}You will not be able to send an automatic email receipt for this contribution because there is no email address recorded for this contact. If you want a receipt to be sent when this contribution is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the contribution.{/ts} + </div> {/if} - <div class="crm-submit-buttons"> - {include file="CRM/common/formButtons.tpl"} - </div> - {if $isOnline}{assign var=valueStyle value=" class='view-value'"}{else}{assign var=valueStyle value=""}{/if} - <table class="form-layout-compressed"> - <tr class="crm-contribution-form-block-contact_id"> - <td class="label">{$form.contact_id.label}</td> - <td>{$form.contact_id.html}</td> - </tr> - <tr class="crm-contribution-form-block-contribution_type_id crm-contribution-form-block-financial_type_id"> - <td class="label">{$form.financial_type_id.label}</td><td{$valueStyle}>{$form.financial_type_id.html} - {if $is_test} - {ts}(test){/ts} - {/if} {help id="id-financial_type"} - </td> - </tr> - {if $action eq 2 and $lineItem and !$defaultContribution} - <tr> - <td class="label">{ts}Contribution Amount{/ts}</td> - <td>{include file="CRM/Price/Page/LineItem.tpl" context="Contribution"}</td> - </tr> + + {if $action eq 8} + <div class="messages status no-popup"> + <div class="icon inform-icon"></div> + {ts}WARNING: Deleting this contribution will result in the loss of the associated financial transactions (if any).{/ts} {ts}Do you want to continue?{/ts} + </div> {else} - <tr class="crm-contribution-form-block-total_amount"> - <td class="label">{$form.total_amount.label}</td> - <td {$valueStyle}> - <span id='totalAmount'>{$form.currency.html|crmAddClass:eight} {$form.total_amount.html|crmAddClass:eight}</span> - {if $freezeFinancialType} - {help id="id-total_amount"} + {if $newCredit AND $action EQ 1 AND $contributionMode EQ null} + <div class="action-link css_right crm-link-credit-card-mode"> + {if $contactId} + {capture assign=ccModeLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=add&cid=`$contactId`&context=`$context`&mode=live"}{/capture} + {else} + {capture assign=ccModeLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=add&context=standalone&mode=live"}{/capture} {/if} - {if !$payNow} - {if $hasPriceSets} - <span id='totalAmountORPriceSet'> {ts}OR{/ts}</span> - <span id='selectPriceSet'>{$form.price_set_id.html}</span> - <div id="priceset" class="hiddenElement"></div> - {/if} + <a class="open-inline-noreturn action-item crm-hover-button" href="{$ccModeLink}"><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}submit credit card contribution{/ts}</a> + </div> + {/if} + <div class="crm-submit-buttons"> + {include file="CRM/common/formButtons.tpl"} + </div> + {if $isOnline}{assign var=valueStyle value=" class='view-value'"}{else}{assign var=valueStyle value=""}{/if} + <table class="form-layout-compressed"> + <tr class="crm-contribution-form-block-contact_id"> + <td class="label">{$form.contact_id.label}</td> + <td>{$form.contact_id.html}</td> + </tr> + <tr class="crm-contribution-form-block-contribution_type_id crm-contribution-form-block-financial_type_id"> + <td class="label">{$form.financial_type_id.label}</td><td{$valueStyle}>{$form.financial_type_id.html} + {if $is_test} + {ts}(test){/ts} + {/if} {help id="id-financial_type"} + </td> + </tr> + {if $action eq 2 and $lineItem and !$defaultContribution} + <tr> + <td class="label">{ts}Contribution Amount{/ts}</td> + <td>{include file="CRM/Price/Page/LineItem.tpl" context="Contribution"}</td> + </tr> + {else} + <tr class="crm-contribution-form-block-total_amount"> + <td class="label">{$form.total_amount.label}</td> + <td {$valueStyle}> + <span id='totalAmount'>{$form.currency.html|crmAddClass:eight} {$form.total_amount.html|crmAddClass:eight}</span> + {if $freezeFinancialType} + {help id="id-total_amount"} + {/if} + {if !$payNow} + {if $hasPriceSets} + <span id='totalAmountORPriceSet'> {ts}OR{/ts}</span> + <span id='selectPriceSet'>{$form.price_set_id.html}</span> + <div id="priceset" class="hiddenElement"></div> + {/if} - {if $ppID}{ts}<a class='action-item crm-hover-button' onclick='adjustPayment();'>adjust payment amount</a>{/ts}{help id="adjust-payment-amount"}{/if} - <div id="totalAmountBlock"> - {if $hasPriceSets}<span class="description">{ts}Alternatively, you can use a price set.{/ts}</span>{/if} - <div id="totalTaxAmount" class="label"></div> - </div> - {/if} - </td> - </tr> - - {if $buildRecurBlock && !$payNow} - <tr id='recurringPaymentBlock' class='hiddenElement'> - <td></td> - <td> - <strong>{$form.is_recur.html} {ts}every{/ts} - {$form.frequency_interval.html} - {$form.frequency_unit.html} - {ts}for{/ts} - {$form.installments.html} - {$form.installments.label} - </strong> - <br /> - <span class="description"> + {if $ppID}{ts}<a class='action-item crm-hover-button' onclick='adjustPayment();'>adjust payment amount</a>{/ts}{help id="adjust-payment-amount"}{/if} + <div id="totalAmountBlock"> + {if $hasPriceSets}<span class="description">{ts}Alternatively, you can use a price set.{/ts}</span>{/if} + <div id="totalTaxAmount" class="label"></div> + </div> + {/if} + </td> + </tr> + + {if $buildRecurBlock && !$payNow} + <tr id='recurringPaymentBlock' class='hiddenElement'> + <td></td> + <td> + <strong>{$form.is_recur.html} {ts}every{/ts} + {$form.frequency_interval.html} + {$form.frequency_unit.html} + {ts}for{/ts} + {$form.installments.html} + {$form.installments.label} + </strong> + <br /> + <span class="description"> {ts}Your recurring contribution will be processed automatically for the number of installments you specify. You can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time. You will receive an email receipt for each recurring contribution. The receipts will include a link you can use if you decide to modify or cancel your future contributions.{/ts} </span> - </td> - </tr> - {/if} + </td> + </tr> + {/if} - <tr id="adjust-option-type" class="crm-contribution-form-block-option_type"> - <td class="label"></td><td {$valueStyle}>{$form.option_type.html}</td> - </tr> - {/if} - {if $contributionMode && $processorSupportsFutureStartDate} - <tr id='start_date' class="crm-contribution-form-block-receive_date"> - <td class="label">{ts}Start Date{/ts}</td> - <td {$valueStyle}>{if $hideCalender neq true}{$form.receive_date.html}{/if}<br /> - <span class="description">{ts}You can set a start date for recurring contributions and the first payment will be on that date. For a single post-dated contribution you must select recurring and choose one installment{/ts}</span> - </td> - </tr> - {/if} + <tr id="adjust-option-type" class="crm-contribution-form-block-option_type"> + <td class="label"></td><td {$valueStyle}>{$form.option_type.html}</td> + </tr> + {/if} + {if $contributionMode && $processorSupportsFutureStartDate} + <tr id='start_date' class="crm-contribution-form-block-receive_date"> + <td class="label">{ts}Start Date{/ts}</td> + <td {$valueStyle}>{if $hideCalender neq true}{$form.receive_date.html}{/if}<br /> + <span class="description">{ts}You can set a start date for recurring contributions and the first payment will be on that date. For a single post-dated contribution you must select recurring and choose one installment{/ts}</span> + </td> + </tr> + {/if} + + <tr class="crm-contribution-form-block-source"> + <td class="label">{$form.source.label}</td> + <td {$valueStyle}>{$form.source.html|crmAddClass:huge} {help id="id-contrib_source"} + </td> + </tr> - <tr class="crm-contribution-form-block-source"> - <td class="label">{$form.source.label}</td> - <td {$valueStyle}>{$form.source.html|crmAddClass:huge} {help id="id-contrib_source"} - </td> - </tr> - - {* CRM-7362 --add campaign to contributions *} - {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignTrClass="crm-contribution-form-block-campaign_id"} - - {if !$contributionMode || $payNow} - <tr class="crm-contribution-form-block-contribution_status_id"> - <td class="label">{$form.contribution_status_id.label}</td> - <td>{$form.contribution_status_id.html} - {if $contribution_status_id eq 2}{if $is_pay_later }: {ts}Pay Later{/ts} {else}: {ts}Incomplete Transaction{/ts}{/if}{/if} - </td> - <td> - {if !$isUsePaymentBlock && $contactId && $contribID && $contributionMode EQ null && $contribution_status_id eq 2} - {capture assign=payNowLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=update&id=`$contribID`&cid=`$contactId`&context=`$context`&mode=live"}{/capture} - <a class="open-inline action-item crm-hover-button" href="{$payNowLink}"><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Pay with Credit Card{/ts}</a> + {* CRM-7362 --add campaign to contributions *} + {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignTrClass="crm-contribution-form-block-campaign_id"} + + {if !$contributionMode || $payNow} + <tr class="crm-contribution-form-block-contribution_status_id"> + <td class="label">{$form.contribution_status_id.label}</td> + <td>{$form.contribution_status_id.html} + {if $contribution_status_id eq 2}{if $is_pay_later }: {ts}Pay Later{/ts} {else}: {ts}Incomplete Transaction{/ts}{/if}{/if} + </td> + <td> + {if !$isUsePaymentBlock && $contactId && $contribID && $contributionMode EQ null && $contribution_status_id eq 2} + {capture assign=payNowLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=update&id=`$contribID`&cid=`$contactId`&context=`$context`&mode=live"}{/capture} + <a class="open-inline action-item crm-hover-button" href="{$payNowLink}"><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Pay with Credit Card{/ts}</a> + {/if} + </td> + </tr> + {/if} + + {if !$contributionMode} + {* Cancellation / Refunded fields are hidden unless contribution status is set to Cancelled or Refunded*} + <tr id="cancelInfo" class="crm-contribution-form-block-cancelInfo"> + <td> </td> + <td><fieldset><legend>{ts}Cancellation or Refund Information{/ts}</legend> + <table class="form-layout-compressed"> + <tr id="cancelDate" class="crm-contribution-form-block-cancel_date"> + <td class="label">{$form.cancel_date.label}</td> + <td> + {if $hideCalendar neq true} + {$form.cancel_date.html} + {else} + {$form.cancel_date.value|crmDate} + {/if} + </td> + </tr> + <tr id="cancelDescription" class="crm-contribution-form-block-cancel_reason"> + <td class="label"> </td> + <td class="description">{ts}Enter the cancellation or refunded date, or you can skip this field and the cancellation date or refunded date will be automatically set to TODAY.{/ts}</td> + </tr> + <tr id="cancelReason"> + <td class="label" style="vertical-align: top;">{$form.cancel_reason.label}</td> + <td>{$form.cancel_reason.html}</td> + </tr> + <tr id="refundTrxnID"> + <td class="label" style="vertical-align: top;">{$form.refund_trxn_id.label}</td> + <td>{$form.refund_trxn_id.html}</td> + </tr> + </table> + </fieldset> + </td> + </tr> + <tr class="crm-contribution-form-block-receive_date"> + <td class="label">{$form.receive_date.label}</td> + <td>{$form.receive_date.html}<br /> + <span class="description">{ts}The date this contribution was received.{/ts}</span> + </td> + </tr> + {/if} + {if $form.revenue_recognition_date && !$payNow} + <tr class="crm-contribution-form-block-revenue_recognition_date"> + <td class="label">{$form.revenue_recognition_date.label}</td> + <td>{$form.revenue_recognition_date.html}</td> + </tr> {/if} - </td> - </tr> - {/if} + + {if $email and $outBound_option != 2} + <tr class="crm-contribution-form-block-is_email_receipt"> + <td class="label">{$form.is_email_receipt.label}</td> + <td>{$form.is_email_receipt.html} + <span class="description">{ts 1=$email}Automatically email a receipt for this payment to %1?{/ts}</span> + </td> + </tr> + {elseif $context eq 'standalone' and $outBound_option != 2 } + <tr id="email-receipt" style="display:none;" class="crm-contribution-form-block-is_email_receipt"> + <td class="label">{$form.is_email_receipt.label}</td> + <td>{$form.is_email_receipt.html} <span class="description">{ts}Automatically email a receipt for this payment to {/ts}<span id="email-address"></span>?</span> + </td> + </tr> + {/if} + <tr id="fromEmail" class="crm-contribution-form-block-receipt_date" style="display:none;"> + <td class="label">{$form.from_email_address.label}</td> + <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin}</td> + </tr> + <tr id="receiptDate" class="crm-contribution-form-block-receipt_date"> + <td class="label">{$form.receipt_date.label}</td> + <td>{$form.receipt_date.html}<br /> + <span class="description">{ts}Date that a receipt was sent to the contributor.{/ts}</span> + </td> + </tr> + {if $form.payment_processor_id} + <tr class="crm-contribution-form-block-payment_processor_id"><td class="label nowrap">{$form.payment_processor_id.label}<span class="crm-marker"> * </span></td><td>{$form.payment_processor_id.html}</td></tr> + {/if} + </table> {if !$contributionMode} - {* Cancellation / Refunded fields are hidden unless contribution status is set to Cancelled or Refunded*} - <tr id="cancelInfo" class="crm-contribution-form-block-cancelInfo"> - <td> </td> - <td><fieldset><legend>{ts}Cancellation or Refund Information{/ts}</legend> - <table class="form-layout-compressed"> - <tr id="cancelDate" class="crm-contribution-form-block-cancel_date"> - <td class="label">{$form.cancel_date.label}</td> - <td> - {if $hideCalendar neq true} - {$form.cancel_date.html} - {else} - {$form.cancel_date.value|crmDate} - {/if} - </td> - </tr> - <tr id="cancelDescription" class="crm-contribution-form-block-cancel_reason"> - <td class="label"> </td> - <td class="description">{ts}Enter the cancellation or refunded date, or you can skip this field and the cancellation date or refunded date will be automatically set to TODAY.{/ts}</td> + <fieldset class="payment-details_group"> + <legend> + {ts}Payment Details{/ts} + </legend> + {if $isUsePaymentBlock} + {include file="CRM/Contribute/Form/PaymentInfoBlock.tpl"} + {else} + <table class="form-layout-compressed" > + <tr class="crm-contribution-form-block-payment_instrument_id"> + <td class="label">{$form.payment_instrument_id.label}</td> + <td {$valueStyle}>{$form.payment_instrument_id.html} {help id="payment_instrument_id"}</td> </tr> - <tr id="cancelReason"> - <td class="label" style="vertical-align: top;">{$form.cancel_reason.label}</td> - <td>{$form.cancel_reason.html}</td> - </tr> - <tr id="refundTrxnID"> - <td class="label" style="vertical-align: top;">{$form.refund_trxn_id.label}</td> - <td>{$form.refund_trxn_id.html}</td> + <tr class="crm-contribution-form-block-trxn_id"> + <td class="label">{$form.trxn_id.label}</td> + <td {$valueStyle}>{$form.trxn_id.html} {help id="id-trans_id"}</td> </tr> </table> - </fieldset> - </td> - </tr> - <tr class="crm-contribution-form-block-receive_date"> - <td class="label">{$form.receive_date.label}</td> - <td>{$form.receive_date.html}<br /> - <span class="description">{ts}The date this contribution was received.{/ts}</span> - </td> - </tr> - {/if} - {if $form.revenue_recognition_date && !$payNow} - <tr class="crm-contribution-form-block-revenue_recognition_date"> - <td class="label">{$form.revenue_recognition_date.label}</td> - <td>{$form.revenue_recognition_date.html}</td> - </tr> + {/if} + </fieldset> {/if} - {if $email and $outBound_option != 2} - <tr class="crm-contribution-form-block-is_email_receipt"> - <td class="label">{$form.is_email_receipt.label}</td> - <td>{$form.is_email_receipt.html} - <span class="description">{ts 1=$email}Automatically email a receipt for this payment to %1?{/ts}</span> - </td> - </tr> - {elseif $context eq 'standalone' and $outBound_option != 2 } - <tr id="email-receipt" style="display:none;" class="crm-contribution-form-block-is_email_receipt"> - <td class="label">{$form.is_email_receipt.label}</td> - <td>{$form.is_email_receipt.html} <span class="description">{ts}Automatically email a receipt for this payment to {/ts}<span id="email-address"></span>?</span> - </td> - </tr> - {/if} - <tr id="fromEmail" class="crm-contribution-form-block-receipt_date" style="display:none;"> - <td class="label">{$form.from_email_address.label}</td> - <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin}</td> - </tr> - <tr id="receiptDate" class="crm-contribution-form-block-receipt_date"> - <td class="label">{$form.receipt_date.label}</td> - <td>{$form.receipt_date.html}<br /> - <span class="description">{ts}Date that a receipt was sent to the contributor.{/ts}</span> - </td> - </tr> - {if $form.payment_processor_id} - <tr class="crm-contribution-form-block-payment_processor_id"><td class="label nowrap">{$form.payment_processor_id.label}<span class="crm-marker"> * </span></td><td>{$form.payment_processor_id.html}</td></tr> + {if !$isUsePaymentBlock} + {include file='CRM/Core/BillingBlockWrapper.tpl'} {/if} - </table> - - {if !$contributionMode} - <fieldset class="payment-details_group"> - <legend> - {ts}Payment Details{/ts} - </legend> - {if $isUsePaymentBlock} - {include file="CRM/Contribute/Form/PaymentInfoBlock.tpl"} - {else} - <table class="form-layout-compressed" > - <tr class="crm-contribution-form-block-payment_instrument_id"> - <td class="label">{$form.payment_instrument_id.label}</td> - <td {$valueStyle}>{$form.payment_instrument_id.html} {help id="payment_instrument_id"}</td> - </td> - </tr> - <tr class="crm-contribution-form-block-trxn_id"> - <td class="label">{$form.trxn_id.label}</td> - <td {$valueStyle}>{$form.trxn_id.html} {help id="id-trans_id"}</td> - </tr> - </table> - {/if} - </fieldset> - {/if} - - {if !$isUsePaymentBlock} - {include file='CRM/Core/BillingBlockWrapper.tpl'} - {/if} <!-- start of soft credit --> {if !$payNow} @@ -290,7 +289,7 @@ <div class="description">{ts}Search for the Personal Campaign Page by the fund-raiser's last name or email address.{/ts}</div> <div class="spacer"></div> - <div class="crm-contribution-form-block-pcp_details"> + <div class="crm-contribution-form-block-pcp_details"> <table class="crm-contribution-form-table-credit_to_pcp"> <tr id="pcpDisplayRollID" class="crm-contribution-form-block-pcp_display_in_roll"> <td class="label">{$form.pcp_display_in_roll.label}</td> @@ -306,8 +305,7 @@ <td class="label" style="vertical-align: top">{$form.pcp_personal_note.label}</td> <td> {$form.pcp_personal_note.html} - <div - class="description">{ts}Personal message submitted by contributor for display in the Honor Roll.{/ts}</div> + <div class="description">{ts}Personal message submitted by contributor for display in the Honor Roll.{/ts}</div> </td> </tr> </table> @@ -321,116 +319,111 @@ {/if} <!-- end of PCP --> - {if !$payNow} - {include file="CRM/common/customDataBlock.tpl"} - {/if} + {if !$payNow} + {include file="CRM/common/customDataBlock.tpl"} + {/if} - {literal} - <script type="text/javascript"> - CRM.$(function($) { - {/literal} - {if $buildPriceSet}{literal}buildAmount();{/literal}{/if} {literal} - - // bind first click of accordion header to load crm-accordion-body with snippet - // everything else taken care of by cj().crm-accordions() - cj('#adjust-option-type').hide(); - cj('.crm-ajax-accordion .crm-accordion-header').one('click', function() { - loadPanes(cj(this).attr('id')); - }); - cj('.crm-ajax-accordion:not(.collapsed) .crm-accordion-header').each(function(index) { - loadPanes(cj(this).attr('id')); - }); - }); - // load panes function calls for snippet based on id of crm-accordion-header - function loadPanes( id ) { - var url = "{/literal}{crmURL p='civicrm/contact/view/contribution' q="snippet=4&id=`$entityID`&formType=" h=0}{literal}" + id; - {/literal} - {if $contributionMode} - url = url + "&mode={$contributionMode}"; - {/if} - {if $qfKey} - url = url + "&qfKey={$qfKey}"; - {/if} - {literal} - if (! cj('div.'+id).html()) { - var loading = '<img src="{/literal}{$config->resourceBase}i/loading.gif{literal}" alt="{/literal}{ts escape='js'}loading{/ts}{literal}" /> {/literal}{ts escape='js'}Loading{/ts}{literal}...'; - cj('div.'+id).html(loading); - cj.ajax({ - url : url, - success: function(data) { cj('div.'+id).html(data).trigger('crmLoad'); } + <script type="text/javascript"> + CRM.$(function($) { + {/literal} + {if $buildPriceSet}{literal}buildAmount();{/literal}{/if} + {literal} + + // bind first click of accordion header to load crm-accordion-body with snippet + // everything else taken care of by cj().crm-accordions() + cj('#adjust-option-type').hide(); + cj('.crm-ajax-accordion .crm-accordion-header').one('click', function() { + loadPanes(cj(this).attr('id')); + }); + cj('.crm-ajax-accordion:not(.collapsed) .crm-accordion-header').each(function(index) { + loadPanes(cj(this).attr('id')); + }); }); - } - } - - var url = {/literal}{$dataUrl|@json_encode}{literal}; - - {/literal} - {if $context eq 'standalone' and $outBound_option != 2 } - {literal} - CRM.$(function($) { - - var $form = $("form.{/literal}{$form.formClass}{literal}"); - $("#contact_id", $form).change(checkEmail); - checkEmail( ); - - function checkEmail( ) { - var data = $("#contact_id", $form).select2('data'); - if (data && data.extra && data.extra.email && data.extra.email.length) { - $("#email-receipt", $form).show(); - $("#email-address", $form).html(data.extra.email); - } - else { - $("#email-receipt", $form).hide(); + // load panes function calls for snippet based on id of crm-accordion-header + function loadPanes(id) { + var url = "{/literal}{crmURL p='civicrm/contact/view/contribution' q="snippet=4&id=`$entityID`&formType=" h=0}{literal}" + id; + {/literal} + {if $contributionMode} + url = url + "&mode={$contributionMode}"; + {/if} + {if $qfKey} + url = url + "&qfKey={$qfKey}"; + {/if} + {literal} + if (! cj('div.'+id).html()) { + var loading = '<img src="{/literal}{$config->resourceBase}i/loading.gif{literal}" alt="{/literal}{ts escape='js'}loading{/ts}{literal}" /> {/literal}{ts escape='js'}Loading{/ts}{literal}...'; + cj('div.'+id).html(loading); + cj.ajax({ + url : url, + success: function(data) { cj('div.'+id).html(data).trigger('crmLoad'); } + }); } } - showHideByValue( 'is_email_receipt', '', 'receiptDate', 'table-row', 'radio', true); - showHideByValue( 'is_email_receipt', '', 'fromEmail', 'table-row', 'radio', false ); - }); + var url = {/literal}{$dataUrl|@json_encode}{literal}; - {/literal} - {/if} - </script> - - <div class="accordion ui-accordion ui-widget ui-helper-reset"> - {* Additional Detail / Honoree Information / Premium Information *} - {foreach from=$allPanes key=paneName item=paneValue} + {/literal} + {if $context eq 'standalone' and $outBound_option != 2} + {literal} + CRM.$(function($) { - <div class="crm-accordion-wrapper crm-ajax-accordion crm-{$paneValue.id}-accordion {if $paneValue.open neq 'true'}collapsed{/if}"> - <div class="crm-accordion-header" id="{$paneValue.id}"> + var $form = $("form.{/literal}{$form.formClass}{literal}"); + $("#contact_id", $form).change(checkEmail); + checkEmail(); - {$paneName} - </div><!-- /.crm-accordion-header --> - <div class="crm-accordion-body"> + function checkEmail() { + var data = $("#contact_id", $form).select2('data'); + if (data && data.extra && data.extra.email && data.extra.email.length) { + $("#email-receipt", $form).show(); + $("#email-address", $form).html(data.extra.email); + } + else { + $("#email-receipt", $form).hide(); + } + } - <div class="{$paneValue.id}"></div> - </div><!-- /.crm-accordion-body --> - </div><!-- /.crm-accordion-wrapper --> + showHideByValue('is_email_receipt', '', 'receiptDate', 'table-row', 'radio', true); + showHideByValue('is_email_receipt', '', 'fromEmail', 'table-row', 'radio', false); + }); - {/foreach} + {/literal} + {/if} + </script> + + <div class="accordion ui-accordion ui-widget ui-helper-reset"> + {* Additional Detail / Honoree Information / Premium Information *} + {foreach from=$allPanes key=paneName item=paneValue} + <div class="crm-accordion-wrapper crm-ajax-accordion crm-{$paneValue.id}-accordion {if $paneValue.open neq 'true'}collapsed{/if}"> + <div class="crm-accordion-header" id="{$paneValue.id}"> + {$paneName} + </div><!-- /.crm-accordion-header --> + <div class="crm-accordion-body"> + <div class="{$paneValue.id}"></div> + </div><!-- /.crm-accordion-body --> + </div><!-- /.crm-accordion-wrapper --> + {/foreach} + </div> + {/if} + <br /> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> </div> - {/if} -<br /> -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> -</div> - - {literal} +{literal} <script type="text/javascript"> - function verify( ) { - if (cj('#is_email_receipt').prop('checked' )) { - var ok = confirm( '{/literal}{ts escape='js'}Click OK to save this contribution record AND send a receipt to the contributor now{/ts}{literal}.' ); - if (!ok) { - return false; + function verify() { + if (cj('#is_email_receipt').prop('checked')) { + var ok = confirm('{/literal}{ts escape='js'}Click OK to save this contribution record AND send a receipt to the contributor now{/ts}{literal}.'); + if (!ok) { + return false; + } } } - } </script> - {/literal} +{/literal} {if $action neq 8} - {literal} + {literal} <script type="text/javascript"> CRM.$(function($) { var $form = $('form.{/literal}{$form.formClass}{literal}'); @@ -439,7 +432,7 @@ checkEmailDependancies(); }); - function checkEmailDependancies( ) { + function checkEmailDependancies() { if ($('#is_email_receipt', $form).prop('checked')) { $('#fromEmail', $form).show(); $('#receiptDate', $form).hide(); @@ -450,25 +443,25 @@ } } {/literal}{if !$contributionMode}{literal} - showHideCancelInfo($('#contribution_status_id', $form)); + showHideCancelInfo($('#contribution_status_id', $form)); - $('#contribution_status_id', $form).change(function() { - showHideCancelInfo($('#contribution_status_id', $form)); - }); + $('#contribution_status_id', $form).change(function() { + showHideCancelInfo($('#contribution_status_id', $form)); + }); - function showHideCancelInfo(obj) { - var cancelInfo_show_ids = [{/literal}{$cancelInfo_show_ids}{literal}]; - if (cancelInfo_show_ids.indexOf(obj.val()) > -1) { - $('#cancelInfo', $form).show(); - $('#total_amount', $form).attr('readonly', true); - } - else { - $("#cancel_date", $form).val(''); - $("#cancel_reason", $form).val(''); - $('#cancelInfo', $form).hide(); - $("#total_amount", $form).removeAttr('readonly'); - } + function showHideCancelInfo(obj) { + var cancelInfo_show_ids = [{/literal}{$cancelInfo_show_ids}{literal}]; + if (cancelInfo_show_ids.indexOf(obj.val()) > -1) { + $('#cancelInfo', $form).show(); + $('#total_amount', $form).attr('readonly', true); } + else { + $("#cancel_date", $form).val(''); + $("#cancel_reason", $form).val(''); + $('#cancelInfo', $form).hide(); + $("#total_amount", $form).removeAttr('readonly'); + } + } {/literal}{/if} }); </script> @@ -479,167 +472,167 @@ {literal} <script type="text/javascript"> -{/literal} + {/literal} -// load form during form rule. -{if $buildPriceSet}{literal}buildAmount( );{/literal}{/if} + // load form during form rule. + {if $buildPriceSet}{literal}buildAmount();{/literal}{/if} -{literal} + {literal} -// CRM-16451: set financial type of 'Price Set' in back office contribution -// instead of selecting manually -function buildAmount( priceSetId, financialtypeIds ) { - if (!priceSetId) priceSetId = cj("#price_set_id").val( ); - var fname = '#priceset'; - if (!priceSetId) { - // hide price set fields. - cj(fname).hide( ); - - // show/hide price set amount and total amount. - cj("#totalAmountORPriceSet").show( ); - cj("#totalAmount").show( ); - var choose = "{/literal}{ts escape='js'}Choose price set{/ts}{literal}"; - cj("#price_set_id option[value='']").html( choose ); - - cj('label[for="total_amount"]').text('{/literal}{ts}Total Amount{/ts}{literal}'); - cj(".crm-contribution-form-block-financial_type_id").show(); - cj("#financial_type_id option[value='']").attr('selected', true); - - //we might want to build recur block. - if (cj("#is_recur")) buildRecurBlock( null ); - return; - } + // CRM-16451: set financial type of 'Price Set' in back office contribution + // instead of selecting manually + function buildAmount(priceSetId, financialtypeIds) { + if (!priceSetId) { priceSetId = cj("#price_set_id").val(); } + var fname = '#priceset'; + if (!priceSetId) { + // hide price set fields. + cj(fname).hide(); + + // show/hide price set amount and total amount. + cj("#totalAmountORPriceSet").show(); + cj("#totalAmount").show(); + var choose = "{/literal}{ts escape='js'}Choose price set{/ts}{literal}"; + cj("#price_set_id option[value='']").html(choose); + + cj('label[for="total_amount"]').text('{/literal}{ts}Total Amount{/ts}{literal}'); + cj(".crm-contribution-form-block-financial_type_id").show(); + cj("#financial_type_id option[value='']").attr('selected', true); + + //we might want to build recur block. + if (cj("#is_recur")) { buildRecurBlock(null); } + return; + } - //don't allow recurring w/ priceset. - if ( cj( "#is_recur" ) && cj( 'input:radio[name="is_recur"]:checked').val( ) ) { - //reset the values of recur block. - cj("#installments").val(''); - cj("#frequency_interval").val(''); - cj('input:radio[name="is_recur"]')[0].checked = true; - cj("#recurringPaymentBlock").hide( ); - } + //don't allow recurring w/ priceset. + if (cj("#is_recur") && cj('input:radio[name="is_recur"]:checked').val()) { + //reset the values of recur block. + cj("#installments").val(''); + cj("#frequency_interval").val(''); + cj('input:radio[name="is_recur"]')[0].checked = true; + cj("#recurringPaymentBlock").hide(); + } - var dataUrl = {/literal}"{crmURL h=0 q='snippet=4'}"{literal} + '&priceSetId=' + priceSetId; + var dataUrl = {/literal}"{crmURL h=0 q='snippet=4'}"{literal} + '&priceSetId=' + priceSetId; - var response = cj.ajax({ - url: dataUrl, - async: false - }).responseText; + var response = cj.ajax({ + url: dataUrl, + async: false + }).responseText; - cj( fname ).show( ).html( response ).trigger('crmLoad'); - // freeze total amount text field. - cj( "#total_amount").val(''); + cj(fname).show().html(response).trigger('crmLoad'); + // freeze total amount text field. + cj( "#total_amount").val(''); - cj( "#totalAmountORPriceSet" ).hide( ); - cj( "#totalAmount").hide( ); - var manual = "{/literal}{ts escape='js'}Manual contribution amount{/ts}{literal}"; - cj("#price_set_id option[value='']").html( manual ); + cj( "#totalAmountORPriceSet" ).hide(); + cj( "#totalAmount").hide(); + var manual = "{/literal}{ts escape='js'}Manual contribution amount{/ts}{literal}"; + cj("#price_set_id option[value='']").html(manual); - cj('label[for="total_amount"]').text('{/literal}{ts}Price Sets{/ts}{literal}'); - if (financialtypeIds) { - cj("#financial_type_id option[value="+financialtypeIds[priceSetId]+"]").prop('selected', true); + cj('label[for="total_amount"]').text('{/literal}{ts}Price Sets{/ts}{literal}'); + if (financialtypeIds) { + cj("#financial_type_id option[value="+financialtypeIds[priceSetId]+"]").prop('selected', true); + } + cj(".crm-contribution-form-block-financial_type_id").css("display", "none"); } - cj(".crm-contribution-form-block-financial_type_id").css("display", "none"); -} -function adjustPayment( ) { - cj('#adjust-option-type').show(); - cj("#total_amount").removeAttr("READONLY"); - cj("#total_amount").css('background-color', '#ffffff'); -} + function adjustPayment() { + cj('#adjust-option-type').show(); + cj("#total_amount").removeAttr("READONLY"); + cj("#total_amount").css('background-color', '#ffffff'); + } -{/literal}{if $processorSupportsFutureStartDate}{literal} -cj ('#is_recur').click( function( ) { - showStartDate( ); -}); + {/literal}{if $processorSupportsFutureStartDate}{literal} + cj ('#is_recur').click(function() { + showStartDate(); + }); -showStartDate( ); + showStartDate(); -function showStartDate( ) { - if (!cj('#is_recur').is(':checked')) { - cj('#start_date').hide( ); - } - else { - cj('#start_date').show( ); + function showStartDate() { + if (!cj('#is_recur').is(':checked')) { + cj('#start_date').hide(); + } + else { + cj('#start_date').show(); + } } -} -{/literal}{/if}{literal} -var thousandMarker = "{/literal}{$config->monetaryThousandSeparator}{literal}"; -var separator = "{/literal}{$config->monetaryDecimalPoint}{literal}"; + {/literal}{/if}{literal} + var thousandMarker = "{/literal}{$config->monetaryThousandSeparator}{literal}"; + var separator = "{/literal}{$config->monetaryDecimalPoint}{literal}"; -cj("#financial_type_id").on("change",function(){ + cj("#financial_type_id").on("change", function() { cj('#total_amount').trigger("change"); -}) - -cj("#currency").on("change",function(){ - cj('#total_amount').trigger("change"); -}) - -{/literal}{if $taxRates && $invoicing}{literal} -CRM.$(function($) { - $('#total_amount').on("change",function(event) { - if (event.handled !== true) { - var freezeFinancialType = '{/literal}{$freezeFinancialType}{literal}'; - if (!freezeFinancialType) { - var financialType = $('#financial_type_id').val(); - var taxRates = '{/literal}{$taxRates}{literal}'; - var taxTerm = '{/literal}{$taxTerm}{literal}'; - taxRates = JSON.parse(taxRates); - var currencies = '{/literal}{$currencies}{literal}'; - currencies = JSON.parse(currencies); - var currencySelect = $('#currency').val(); - var currencySymbol = currencies[currencySelect]; - var re= /\((.*?)\)/g; - for(m = re.exec(currencySymbol); m; m = re.exec(currencySymbol)){ - currencySymbol = m[1]; - } - var taxRate = taxRates[financialType]; - if (!taxRate) { - taxRate = 0; - cj("#totalTaxAmount").hide( ); - } else { - cj("#totalTaxAmount").show( ); + }) + + cj("#currency").on("change", function() { + cj('#total_amount').trigger("change"); + }) + + {/literal}{if $taxRates && $invoicing}{literal} + CRM.$(function($) { + $('#total_amount').on("change", function(event) { + if (event.handled !== true) { + var freezeFinancialType = '{/literal}{$freezeFinancialType}{literal}'; + if (!freezeFinancialType) { + var financialType = $('#financial_type_id').val(); + var taxRates = '{/literal}{$taxRates}{literal}'; + var taxTerm = '{/literal}{$taxTerm}{literal}'; + taxRates = JSON.parse(taxRates); + var currencies = '{/literal}{$currencies}{literal}'; + currencies = JSON.parse(currencies); + var currencySelect = $('#currency').val(); + var currencySymbol = currencies[currencySelect]; + var re= /\((.*?)\)/g; + for(m = re.exec(currencySymbol); m; m = re.exec(currencySymbol)){ + currencySymbol = m[1]; + } + var taxRate = taxRates[financialType]; + if (!taxRate) { + taxRate = 0; + cj("#totalTaxAmount").hide(); + } else { + cj("#totalTaxAmount").show(); + } + var totalAmount = $('#total_amount').val(); + // replace all thousandMarker and change the separator to a dot + totalAmount = totalAmount.replace(thousandMarker,'').replace(separator,'.'); + + var totalTaxAmount = '{/literal}{$totalTaxAmount}{literal}'; + var taxAmount = (taxRate/100)*totalAmount; + taxAmount = isNaN (taxAmount) ? 0:taxAmount; + var totalTaxAmount = taxAmount + Number(totalAmount); + totalTaxAmount = formatMoney( totalTaxAmount, 2, separator, thousandMarker ); + $("#totalTaxAmount" ).html('{/literal}{ts 1=$taxTerm}Amount with %1 :{/ts}{literal} <span id="currencySymbolShow">' + currencySymbol + '</span> '+ totalTaxAmount); } - var totalAmount = $('#total_amount').val(); - // replace all thousandMarker and change the separator to a dot - totalAmount = totalAmount.replace(thousandMarker,'').replace(separator,'.'); - - var totalTaxAmount = '{/literal}{$totalTaxAmount}{literal}'; - var taxAmount = (taxRate/100)*totalAmount; - taxAmount = isNaN (taxAmount) ? 0:taxAmount; - var totalTaxAmount = taxAmount + Number(totalAmount); - totalTaxAmount = formatMoney( totalTaxAmount, 2, separator, thousandMarker ); - $("#totalTaxAmount" ).html('{/literal}{ts 1=$taxTerm}Amount with %1 :{/ts}{literal} <span id="currencySymbolShow">' + currencySymbol + '</span> '+ totalTaxAmount); + event.handled = true; } - event.handled = true; - } - return false; - }); + return false; + }); - $('#total_amount').trigger("change"); -}); -{/literal}{/if}{literal} + $('#total_amount').trigger("change"); + }); + {/literal}{/if}{literal} -CRM.$(function($) { - $('#price_set_id').click(function() { - if( $('#price_set_id').val() ) { - $('#totalAmountBlock').hide(); - } - else { - $('#totalAmountBlock').show(); - } + CRM.$(function($) { + $('#price_set_id').click(function() { + if($('#price_set_id').val()) { + $('#totalAmountBlock').hide(); + } + else { + $('#totalAmountBlock').show(); + } + }); }); -}); - -function formatMoney (amount, c, d, t){ - var n = amount, - c = isNaN(c = Math.abs(c)) ? 2 : c, - d = d == undefined ? "," : d, - t = t == undefined ? "." : t, s = n < 0 ? "-" : "", - i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", - j = (j = i.length) > 3 ? j % 3 : 0; -return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); -}; + + function formatMoney(amount, c, d, t) { + var n = amount, + c = isNaN(c = Math.abs(c)) ? 2 : c, + d = d == undefined ? "," : d, + t = t == undefined ? "." : t, s = n < 0 ? "-" : "", + i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", + j = (j = i.length) > 3 ? j % 3 : 0; + return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); + }; </script> {/literal} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl index 6077fe49fdc4d4ed6422841ce2c9a6793905de3c..0b6a9443bb633358a9cd5aa5907cb1eaafbb0bb5 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl @@ -13,188 +13,188 @@ {include file="CRM/Contribute/Form/Contribution/OnBehalfOf.tpl" context="front-end"} </div> {else} - {literal} +{literal} <script type="text/javascript"> - // Putting these functions directly in template so they are available for standalone forms - function useAmountOther() { - var priceset = {/literal}{if $contriPriceset}'{$contriPriceset}'{else}0{/if}{literal}; - - for( i=0; i < document.Main.elements.length; i++ ) { - element = document.Main.elements[i]; - if ( element.type == 'radio' && element.name == priceset ) { - if (element.value == '0' ) { - element.click(); - } - else { - element.checked = false; + // Putting these functions directly in template so they are available for standalone forms + function useAmountOther() { + var priceset = {/literal}{if $contriPriceset}'{$contriPriceset}'{else}0{/if}{literal}; + + for( i=0; i < document.Main.elements.length; i++ ) { + element = document.Main.elements[i]; + if ( element.type == 'radio' && element.name == priceset ) { + if (element.value == '0' ) { + element.click(); + } + else { + element.checked = false; + } } } } - } - function clearAmountOther() { - var priceset = {/literal}{if $priceset}'#{$priceset}'{else}0{/if}{literal} - if( priceset ){ - cj(priceset).val(''); - cj(priceset).blur(); + function clearAmountOther() { + var priceset = {/literal}{if $priceset}'#{$priceset}'{else}0{/if}{literal} + if( priceset ){ + cj(priceset).val(''); + cj(priceset).blur(); + } + if (document.Main.amount_other == null) return; // other_amt field not present; do nothing + document.Main.amount_other.value = ""; } - if (document.Main.amount_other == null) return; // other_amt field not present; do nothing - document.Main.amount_other.value = ""; - } </script> - {/literal} +{/literal} {if $action & 1024} - {include file="CRM/Contribute/Form/Contribution/PreviewHeader.tpl"} + {include file="CRM/Contribute/Form/Contribution/PreviewHeader.tpl"} {/if} {if $displayCaptchaWarning} - <div class="messages status no-popup"> + <div class="messages status no-popup"> {ts}To display reCAPTCHA on form you must get an API key from<br /> <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>{/ts} - </div> + </div> {/if} {include file="CRM/common/TrackingFields.tpl"} <div class="crm-contribution-page-id-{$contributionPageID} crm-block crm-contribution-main-form-block"> - {if $contact_id && !$ccid} - <div class="messages status no-popup crm-not-you-message"> - {ts 1=$display_name}Welcome %1{/ts}. (<a href="{crmURL p='civicrm/contribute/transact' q="cid=0&reset=1&id=`$contributionPageID`"}" title="{ts}Click here to do this for a different person.{/ts}">{ts 1=$display_name}Not %1, or want to do this for a different person{/ts}</a>?) - </div> - {/if} - - <div id="intro_text" class="crm-public-form-item crm-section intro_text-section"> - {$intro_text} - </div> - {include file="CRM/common/cidzero.tpl"} - {if $islifetime or $ispricelifetime } - <div class="help">{ts}You have a current Lifetime Membership which does not need to be renewed.{/ts}</div> - {/if} + {if $contact_id && !$ccid} + <div class="messages status no-popup crm-not-you-message"> + {ts 1=$display_name}Welcome %1{/ts}. (<a href="{crmURL p='civicrm/contribute/transact' q="cid=0&reset=1&id=`$contributionPageID`"}" title="{ts}Click here to do this for a different person.{/ts}">{ts 1=$display_name}Not %1, or want to do this for a different person{/ts}</a>?) + </div> + {/if} - {if !empty($useForMember) && !$ccid} - <div class="crm-public-form-item crm-section"> - {include file="CRM/Contribute/Form/Contribution/MembershipBlock.tpl" context="makeContribution"} + <div id="intro_text" class="crm-public-form-item crm-section intro_text-section"> + {$intro_text} </div> - {elseif !empty($ccid)} - {if $lineItem && $priceSetID && !$is_quick_config} - <div class="header-dark"> - {ts}Contribution Information{/ts}{if $display_name} – {$display_name}{/if} + {include file="CRM/common/cidzero.tpl"} + {if $islifetime or $ispricelifetime} + <div class="help">{ts}You have a current Lifetime Membership which does not need to be renewed.{/ts}</div> + {/if} + + {if !empty($useForMember) && !$ccid} + <div class="crm-public-form-item crm-section"> + {include file="CRM/Contribute/Form/Contribution/MembershipBlock.tpl" context="makeContribution"} </div> - {assign var="totalAmount" value=$pendingAmount} - {include file="CRM/Price/Page/LineItem.tpl" context="Contribution"} + {elseif !empty($ccid)} + {if $lineItem && $priceSetID && !$is_quick_config} + <div class="header-dark"> + {ts}Contribution Information{/ts}{if $display_name} – {$display_name}{/if} + </div> + {assign var="totalAmount" value=$pendingAmount} + {include file="CRM/Price/Page/LineItem.tpl" context="Contribution"} + {else} + <div class="display-block"> + <td class="label">{$form.total_amount.label}</td> + <td><span>{$form.total_amount.html|crmMoney} {if $taxAmount}{ts 1=$taxTerm 2=$taxAmount|crmMoney}(includes %1 of %2){/ts}{/if}</span></td> + </div> + {/if} {else} - <div class="display-block"> - <td class="label">{$form.total_amount.label}</td> - <td><span>{$form.total_amount.html|crmMoney} {if $taxAmount}{ts 1=$taxTerm 2=$taxAmount|crmMoney}(includes %1 of %2){/ts}{/if}</span></td> + <div id="priceset-div"> + {include file="CRM/Price/Form/PriceSet.tpl" extends="Contribution"} </div> {/if} - {else} - <div id="priceset-div"> - {include file="CRM/Price/Form/PriceSet.tpl" extends="Contribution"} - </div> - {/if} - {if !$ccid} - {crmRegion name='contribution-main-pledge-block'} - {if $pledgeBlock} - {if $is_pledge_payment} - <div class="crm-public-form-item crm-section {$form.pledge_amount.name}-section"> - <div class="label">{$form.pledge_amount.label} <span class="crm-marker">*</span></div> - <div class="content">{$form.pledge_amount.html}</div> - <div class="clear"></div> - </div> - {else} - <div class="crm-public-form-item crm-section {$form.is_pledge.name}-section"> + {if !$ccid} + {crmRegion name='contribution-main-pledge-block'} + {if $pledgeBlock} + {if $is_pledge_payment} + <div class="crm-public-form-item crm-section {$form.pledge_amount.name}-section"> + <div class="label">{$form.pledge_amount.label} <span class="crm-marker">*</span></div> + <div class="content">{$form.pledge_amount.html}</div> + <div class="clear"></div> + </div> + {else} + <div class="crm-public-form-item crm-section {$form.is_pledge.name}-section"> + <div class="label"> </div> + <div class="content"> + {$form.is_pledge.html} + {if $is_pledge_interval} + {$form.pledge_frequency_interval.html} + {/if} + {$form.pledge_frequency_unit.html}<span id="pledge_installments_num"> {ts}for{/ts} {$form.pledge_installments.html} {ts}installments.{/ts}</span> + </div> + <div class="clear"></div> + {if $start_date_editable} + {if $is_date} + <div class="label">{$form.start_date.label}</div><div class="content">{$form.start_date.html}</div> + {else} + <div class="label">{$form.start_date.label}</div><div class="content">{$form.start_date.html}</div> + {/if} + {else} + <div class="label">{$form.start_date.label}</div> + <div class="content">{$start_date_display|date_format}</div> + {/if} + <div class="clear"></div> + </div> + {/if} + {/if} + {/crmRegion} + + {if $form.is_recur} + <div class="crm-public-form-item crm-section {$form.is_recur.name}-section"> <div class="label"> </div> <div class="content"> - {$form.is_pledge.html} - {if $is_pledge_interval} - {$form.pledge_frequency_interval.html} + {$form.is_recur.html} {$form.is_recur.label} {ts}every{/ts} + {if $is_recur_interval} + {$form.frequency_interval.html} {/if} - {$form.pledge_frequency_unit.html}<span id="pledge_installments_num"> {ts}for{/ts} {$form.pledge_installments.html} {ts}installments.{/ts}</span> - </div> - <div class="clear"></div> - {if $start_date_editable} - {if $is_date} - <div class="label">{$form.start_date.label}</div><div class="content">{$form.start_date.html}</div> + {if $one_frequency_unit} + {$frequency_unit} {else} - <div class="label">{$form.start_date.label}</div><div class="content">{$form.start_date.html}</div> + {$form.frequency_unit.html} {/if} - {else} - <div class="label">{$form.start_date.label}</div> - <div class="content">{$start_date_display|date_format}</div> - {/if} - <div class="clear"></div> - </div> - {/if} - {/if} - {/crmRegion} - - {if $form.is_recur} - <div class="crm-public-form-item crm-section {$form.is_recur.name}-section"> - <div class="label"> </div> - <div class="content"> - {$form.is_recur.html} {$form.is_recur.label} {ts}every{/ts} - {if $is_recur_interval} - {$form.frequency_interval.html} - {/if} - {if $one_frequency_unit} - {$frequency_unit} - {else} - {$form.frequency_unit.html} - {/if} - {if $is_recur_installments} - <span id="recur_installments_num"> + {if $is_recur_installments} + <span id="recur_installments_num"> {ts}for{/ts} {$form.installments.html} {$form.installments.label} </span> - {/if} - <div id="recurHelp" class="description"> - {$recurringHelpText} + {/if} + <div id="recurHelp" class="description"> + {$recurringHelpText} + </div> + </div> + <div class="clear"></div> </div> - </div> - <div class="clear"></div> - </div> - {/if} - {if $pcpSupporterText} - <div class="crm-public-form-item crm-section pcpSupporterText-section"> - <div class="label"> </div> - <div class="content">{$pcpSupporterText}</div> - <div class="clear"></div> - </div> - {/if} - {if $showMainEmail} - {assign var=n value=email-$bltID} - <div class="crm-public-form-item crm-section {$form.$n.name}-section"> - <div class="label">{$form.$n.label}</div> - <div class="content"> - {$form.$n.html} + {/if} + {if $pcpSupporterText} + <div class="crm-public-form-item crm-section pcpSupporterText-section"> + <div class="label"> </div> + <div class="content">{$pcpSupporterText}</div> + <div class="clear"></div> </div> - <div class="clear"></div> - </div> - {/if} + {/if} + {if $showMainEmail} + {assign var=n value=email-$bltID} + <div class="crm-public-form-item crm-section {$form.$n.name}-section"> + <div class="label">{$form.$n.label}</div> + <div class="content"> + {$form.$n.html} + </div> + <div class="clear"></div> + </div> + {/if} - <div id='onBehalfOfOrg' class="crm-public-form-item crm-section"> - {include file="CRM/Contribute/Form/Contribution/OnBehalfOf.tpl"} - </div> + <div id='onBehalfOfOrg' class="crm-public-form-item crm-section"> + {include file="CRM/Contribute/Form/Contribution/OnBehalfOf.tpl"} + </div> - {* User account registration option. Displays if enabled for one of the profiles on this page. *} - <div class="crm-public-form-item crm-section cms_user-section"> - {include file="CRM/common/CMSUser.tpl"} - </div> - <div class="crm-public-form-item crm-section premium_block-section"> - {include file="CRM/Contribute/Form/Contribution/PremiumBlock.tpl" context="makeContribution"} - </div> + {* User account registration option. Displays if enabled for one of the profiles on this page. *} + <div class="crm-public-form-item crm-section cms_user-section"> + {include file="CRM/common/CMSUser.tpl"} + </div> + <div class="crm-public-form-item crm-section premium_block-section"> + {include file="CRM/Contribute/Form/Contribution/PremiumBlock.tpl" context="makeContribution"} + </div> - {if $honoreeProfileFields && $honoreeProfileFields|@count} - <fieldset class="crm-public-form-item crm-group honor_block-group"> - {crmRegion name="contribution-soft-credit-block"} - <legend>{$honor_block_title}</legend> - <div class="crm-public-form-item crm-section honor_block_text-section"> - {$honor_block_text} - </div> + {if $honoreeProfileFields && $honoreeProfileFields|@count} + <fieldset class="crm-public-form-item crm-group honor_block-group"> + {crmRegion name="contribution-soft-credit-block"} + <legend>{$honor_block_title}</legend> + <div class="crm-public-form-item crm-section honor_block_text-section"> + {$honor_block_text} + </div> {if $form.soft_credit_type_id.html} <div class="crm-public-form-item crm-section {$form.soft_credit_type_id.name}-section"> <div class="content" > @@ -203,198 +203,198 @@ </div> </div> {/if} - {/crmRegion} - <div id="honorType" class="honoree-name-email-section"> - {include file="CRM/UF/Form/Block.tpl" fields=$honoreeProfileFields mode=8 prefix='honor'} - </div> - </fieldset> - {/if} + {/crmRegion} + <div id="honorType" class="honoree-name-email-section"> + {include file="CRM/UF/Form/Block.tpl" fields=$honoreeProfileFields mode=8 prefix='honor'} + </div> + </fieldset> + {/if} - <div class="crm-public-form-item crm-group custom_pre_profile-group"> - {include file="CRM/UF/Form/Block.tpl" fields=$customPre} - </div> + <div class="crm-public-form-item crm-group custom_pre_profile-group"> + {include file="CRM/UF/Form/Block.tpl" fields=$customPre} + </div> - {if $isHonor} - <fieldset class="crm-public-form-item crm-group pcp-group"> - <div class="crm-public-form-item crm-section pcp-section"> - <div class="crm-public-form-item crm-section display_in_roll-section"> - <div class="content"> - {$form.pcp_display_in_roll.html} - {$form.pcp_display_in_roll.label} - </div> - <div class="clear"></div> - </div> - <div id="nameID" class="crm-public-form-item crm-section is_anonymous-section"> - <div class="content"> - {$form.pcp_is_anonymous.html} - </div> - <div class="clear"></div> - </div> - <div id="nickID" class="crm-public-form-item crm-section pcp_roll_nickname-section"> - <div class="label">{$form.pcp_roll_nickname.label}</div> - <div class="content">{$form.pcp_roll_nickname.html} - <div class="description">{ts}Enter the name you want listed with this contribution. You can use a nick name like 'The Jones Family' or 'Sarah and Sam'.{/ts}</div> + {if $isHonor} + <fieldset class="crm-public-form-item crm-group pcp-group"> + <div class="crm-public-form-item crm-section pcp-section"> + <div class="crm-public-form-item crm-section display_in_roll-section"> + <div class="content"> + {$form.pcp_display_in_roll.html} + {$form.pcp_display_in_roll.label} + </div> + <div class="clear"></div> + </div> + <div id="nameID" class="crm-public-form-item crm-section is_anonymous-section"> + <div class="content"> + {$form.pcp_is_anonymous.html} + </div> + <div class="clear"></div> + </div> + <div id="nickID" class="crm-public-form-item crm-section pcp_roll_nickname-section"> + <div class="label">{$form.pcp_roll_nickname.label}</div> + <div class="content">{$form.pcp_roll_nickname.html} + <div class="description">{ts}Enter the name you want listed with this contribution. You can use a nick name like 'The Jones Family' or 'Sarah and Sam'.{/ts}</div> + </div> + <div class="clear"></div> + </div> + <div id="personalNoteID" class="crm-public-form-item crm-section pcp_personal_note-section"> + <div class="label">{$form.pcp_personal_note.label}</div> + <div class="content"> + {$form.pcp_personal_note.html} + <div class="description">{ts}Enter a message to accompany this contribution.{/ts}</div> + </div> + <div class="clear"></div> + </div> </div> + </fieldset> + {/if} + + {* end of ccid loop *} + {/if} + + {if $form.payment_processor_id.label} + {* PP selection only works with JS enabled, so we hide it initially *} + <fieldset class="crm-public-form-item crm-group payment_options-group" style="display:none;"> + <legend>{ts}Payment Options{/ts}</legend> + <div class="crm-public-form-item crm-section payment_processor-section"> + <div class="label">{$form.payment_processor_id.label}</div> + <div class="content">{$form.payment_processor_id.html}</div> <div class="clear"></div> </div> - <div id="personalNoteID" class="crm-public-form-item crm-section pcp_personal_note-section"> - <div class="label">{$form.pcp_personal_note.label}</div> + </fieldset> + {/if} + + {if $is_pay_later} + <fieldset class="crm-public-form-item crm-group pay_later-group"> + <legend>{ts}Payment Options{/ts}</legend> + <div class="crm-public-form-item crm-section pay_later_receipt-section"> + <div class="label"> </div> <div class="content"> - {$form.pcp_personal_note.html} - <div class="description">{ts}Enter a message to accompany this contribution.{/ts}</div> + [x] {$pay_later_text} </div> <div class="clear"></div> </div> - </div> - </fieldset> + </fieldset> {/if} - {* end of ccid loop *} - {/if} + {include file="CRM/Core/BillingBlockWrapper.tpl"} - {if $form.payment_processor_id.label} - {* PP selection only works with JS enabled, so we hide it initially *} - <fieldset class="crm-public-form-item crm-group payment_options-group" style="display:none;"> - <legend>{ts}Payment Options{/ts}</legend> - <div class="crm-public-form-item crm-section payment_processor-section"> - <div class="label">{$form.payment_processor_id.label}</div> - <div class="content">{$form.payment_processor_id.html}</div> - <div class="clear"></div> + <div class="crm-public-form-item crm-group custom_post_profile-group"> + {include file="CRM/UF/Form/Block.tpl" fields=$customPost} </div> - </fieldset> - {/if} - {if $is_pay_later} - <fieldset class="crm-public-form-item crm-group pay_later-group"> - <legend>{ts}Payment Options{/ts}</legend> - <div class="crm-public-form-item crm-section pay_later_receipt-section"> - <div class="label"> </div> - <div class="content"> - [x] {$pay_later_text} + {if $is_monetary and $form.bank_account_number} + <div id="payment_notice"> + <fieldset class="crm-public-form-item crm-group payment_notice-group"> + <legend>{ts}Agreement{/ts}</legend> + {ts}Your account data will be used to charge your bank account via direct debit. While submitting this form you agree to the charging of your bank account via direct debit.{/ts} + </fieldset> </div> - <div class="clear"></div> - </div> - </fieldset> - {/if} - - {include file="CRM/Core/BillingBlockWrapper.tpl"} + {/if} - <div class="crm-public-form-item crm-group custom_post_profile-group"> - {include file="CRM/UF/Form/Block.tpl" fields=$customPost} + {if $isCaptcha} + {include file='CRM/common/ReCAPTCHA.tpl'} + {/if} + <div id="crm-submit-buttons" class="crm-submit-buttons"> + {include file="CRM/common/formButtons.tpl" location="bottom"} + </div> + {if $footer_text} + <div id="footer_text" class="crm-public-form-item crm-section contribution_footer_text-section"> + <p>{$footer_text}</p> + </div> + {/if} </div> + <script type="text/javascript"> + {if $isHonor} + pcpAnonymous(); + {/if} - {if $is_monetary and $form.bank_account_number} - <div id="payment_notice"> - <fieldset class="crm-public-form-item crm-group payment_notice-group"> - <legend>{ts}Agreement{/ts}</legend> - {ts}Your account data will be used to charge your bank account via direct debit. While submitting this form you agree to the charging of your bank account via direct debit.{/ts} - </fieldset> - </div> - {/if} + {literal} - {if $isCaptcha} - {include file='CRM/common/ReCAPTCHA.tpl'} - {/if} - <div id="crm-submit-buttons" class="crm-submit-buttons"> - {include file="CRM/common/formButtons.tpl" location="bottom"} - </div> - {if $footer_text} - <div id="footer_text" class="crm-public-form-item crm-section contribution_footer_text-section"> - <p>{$footer_text}</p> - </div> - {/if} -</div> -<script type="text/javascript"> - {if $isHonor} - pcpAnonymous(); - {/if} + cj('input[name="soft_credit_type_id"]').on('change', function() { + enableHonorType(); + }); - {literal} + function enableHonorType() { + var selectedValue = cj('input[name="soft_credit_type_id"]:checked'); + if ( selectedValue.val() > 0) { + cj('#honorType').show(); + } + else { + cj('#honorType').hide(); + } + } - cj('input[name="soft_credit_type_id"]').on('change', function() { - enableHonorType(); - }); + cj('input[id="is_recur"]').on('change', function() { + toggleRecur(); + }); - function enableHonorType( ) { - var selectedValue = cj('input[name="soft_credit_type_id"]:checked'); - if ( selectedValue.val() > 0) { - cj('#honorType').show(); - } - else { - cj('#honorType').hide(); - } - } - - cj('input[id="is_recur"]').on('change', function() { - toggleRecur(); - }); - - function toggleRecur( ) { - var isRecur = cj('input[id="is_recur"]:checked'); - var allowAutoRenew = {/literal}'{$allowAutoRenewMembership}'{literal}; - var quickConfig = {/literal}{$quickConfig}{literal}; - if ( allowAutoRenew && cj("#auto_renew") && quickConfig) { - showHideAutoRenew( null ); - } - if (isRecur.val() > 0) { - cj('#recurHelp').show(); - cj('#amount_sum_label').text('{/literal}{ts escape='js'}Regular amount{/ts}{literal}'); - } - else { - cj('#recurHelp').hide(); - cj('#amount_sum_label').text('{/literal}{ts escape='js'}Total Amount{/ts}{literal}'); + function toggleRecur() { + var isRecur = cj('input[id="is_recur"]:checked'); + var allowAutoRenew = {/literal}'{$allowAutoRenewMembership}'{literal}; + var quickConfig = {/literal}{$quickConfig}{literal}; + if ( allowAutoRenew && cj("#auto_renew") && quickConfig) { + showHideAutoRenew(null); + } + if (isRecur.val() > 0) { + cj('#recurHelp').show(); + cj('#amount_sum_label').text('{/literal}{ts escape='js'}Regular amount{/ts}{literal}'); + } + else { + cj('#recurHelp').hide(); + cj('#amount_sum_label').text('{/literal}{ts escape='js'}Total Amount{/ts}{literal}'); + } } - } - function pcpAnonymous( ) { - // clear nickname field if anonymous is true - if (document.getElementsByName("pcp_is_anonymous")[1].checked) { - document.getElementById('pcp_roll_nickname').value = ''; - } - if (!document.getElementsByName("pcp_display_in_roll")[0].checked) { - cj('#nickID').hide(); - cj('#nameID').hide(); - cj('#personalNoteID').hide(); - } - else { - if (document.getElementsByName("pcp_is_anonymous")[0].checked) { - cj('#nameID').show(); - cj('#nickID').show(); - cj('#personalNoteID').show(); + function pcpAnonymous() { + // clear nickname field if anonymous is true + if (document.getElementsByName("pcp_is_anonymous")[1].checked) { + document.getElementById('pcp_roll_nickname').value = ''; } - else { - cj('#nameID').show(); + if (!document.getElementsByName("pcp_display_in_roll")[0].checked) { cj('#nickID').hide(); + cj('#nameID').hide(); cj('#personalNoteID').hide(); } + else { + if (document.getElementsByName("pcp_is_anonymous")[0].checked) { + cj('#nameID').show(); + cj('#nickID').show(); + cj('#personalNoteID').show(); + } + else { + cj('#nameID').show(); + cj('#nickID').hide(); + cj('#personalNoteID').hide(); + } + } } - } - - CRM.$(function($) { - enableHonorType(); - toggleRecur(); - skipPaymentMethod(); - }); - - CRM.$(function($) { - // highlight price sets - function updatePriceSetHighlight() { - $('#priceset .price-set-row span').removeClass('highlight'); - $('#priceset .price-set-row input:checked').parent().addClass('highlight'); - } - $('#priceset input[type="radio"]').change(updatePriceSetHighlight); - updatePriceSetHighlight(); - - // Update pledge contribution amount when pledge checkboxes change - $("input[name^='pledge_amount']").on('change', function() { - var total = 0; - $("input[name^='pledge_amount']:checked").each(function() { - total += Number($(this).attr('amount')); + + CRM.$(function($) { + enableHonorType(); + toggleRecur(); + skipPaymentMethod(); + }); + + CRM.$(function($) { + // highlight price sets + function updatePriceSetHighlight() { + $('#priceset .price-set-row span').removeClass('highlight'); + $('#priceset .price-set-row input:checked').parent().addClass('highlight'); + } + $('#priceset input[type="radio"]').change(updatePriceSetHighlight); + updatePriceSetHighlight(); + + // Update pledge contribution amount when pledge checkboxes change + $("input[name^='pledge_amount']").on('change', function() { + var total = 0; + $("input[name^='pledge_amount']:checked").each(function() { + total += Number($(this).attr('amount')); + }); + $("input[name^='price_']").val(total.toFixed(2)); }); - $("input[name^='price_']").val(total.toFixed(2)); }); - }); - {/literal} -</script> + {/literal} + </script> {/if} {include file="CRM/Form/validate.tpl"} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl index 2f33d2291e11f24c4089c0bce9a23118775262da..26b67db9573ea4b5cf9bbf9f8b08b701bd707aa7 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl @@ -25,8 +25,8 @@ <div class="crm-public-form-item" id="on-behalf-block"> {crmRegion name="onbehalf-block"} - {if $onBehalfOfFields && $onBehalfOfFields|@count} - <fieldset> + {if $onBehalfOfFields && $onBehalfOfFields|@count} + <fieldset> <legend>{$fieldSetTitle}</legend> {if $form.org_option} <div id='orgOptions' class="section crm-public-form-item crm-section"> @@ -36,8 +36,8 @@ </div> {/if} {include file="CRM/UF/Form/Block.tpl" fields=$onBehalfOfFields mode=8 prefix='onbehalf'} - </fieldset> - {/if} + </fieldset> + {/if} {/crmRegion} </div> @@ -54,138 +54,149 @@ selectCreateOrg(orgOption, false); if (is_for_organization.length) { + showHideOnBehalfOfBlock(); + + is_for_organization.on('change', function() { + showHideOnBehalfOfBlock(); + }); + } + + function showHideOnBehalfOfBlock() { $('#on-behalf-block').toggle(is_for_organization.is(':checked')); + + if (is_for_organization.is(':checked')) { + $('#onBehalfOfOrg select.crm-select2').removeClass('crm-no-validate'); + } + else { + $('#onBehalfOfOrg select.crm-select2').addClass('crm-no-validate'); + } } - is_for_organization.on('change', function(){ - $('#on-behalf-block').toggle($(this).is(':checked')); + $("input:radio[name='org_option']").click( function( ) { + var orgOption = $(this).attr('id'); + selectCreateOrg(orgOption, true); }); - $("input:radio[name='org_option']").click( function( ) { - var orgOption = $(this).attr('id'); - selectCreateOrg(orgOption, true); - }); + onbehalfof_id.change(function() { + setLocationDetails($(this).val()); + }).change(); - onbehalfof_id.change(function() { - setLocationDetails($(this).val()); - }).change(); - - if (onbehalfof_id.length) { - setLocationDetails(onbehalfof_id.val()); - } + if (onbehalfof_id.length) { + setLocationDetails(onbehalfof_id.val()); + } function resetValues() { - // Don't trip chain-select when clearing values - $('.crm-chain-select-control', "#select_org div").select2('val', ''); - $('input[type=text], select, textarea', "#select_org div").not('.crm-chain-select-control, #onbehalfof_id').val('').change(); - $('input[type=radio], input[type=checkbox]', "#select_org div").prop('checked', false).change(); - - $('#on-behalf-block input').not('input[type=checkbox], input[type=radio], #onbehalfof_id').val(''); - // clear checkboxes and radio - $('#on-behalf-block') - .find('input[type=checkbox], input[type=radio]') - .not('input[name=org_option]') - .attr('checked', false); + // Don't trip chain-select when clearing values + $('.crm-chain-select-control', "#select_org div").select2('val', ''); + $('input[type=text], select, textarea', "#select_org div").not('.crm-chain-select-control, #onbehalfof_id').val('').change(); + $('input[type=radio], input[type=checkbox]', "#select_org div").prop('checked', false).change(); + + $('#on-behalf-block input').not('input[type=checkbox], input[type=radio], #onbehalfof_id').val(''); + // clear checkboxes and radio + $('#on-behalf-block') + .find('input[type=checkbox], input[type=radio]') + .not('input[name=org_option]') + .attr('checked', false); } - function selectCreateOrg( orgOption, reset ) { - if (orgOption == 'CIVICRM_QFID_0_org_option') { - $("#onbehalfof_id").show().change(); - $("input#onbehalf_organization_name").hide(); - } - else if (orgOption == 'CIVICRM_QFID_1_org_option') { - $("input#onbehalf_organization_name").show(); - $("#onbehalfof_id").hide(); - reset = true; + function selectCreateOrg( orgOption, reset ) { + if (orgOption == 'CIVICRM_QFID_0_org_option') { + $("#onbehalfof_id").show().change(); + $("input#onbehalf_organization_name").hide(); + } + else if (orgOption == 'CIVICRM_QFID_1_org_option') { + $("input#onbehalf_organization_name").show(); + $("#onbehalfof_id").hide(); + reset = true; + } + + if ( reset ) { + resetValues(); + } } - if ( reset ) { + function setLocationDetails(contactID , reset) { resetValues(); - } - } - - function setLocationDetails(contactID , reset) { - resetValues(); - var locationUrl = {/literal}'{$locDataURL}'{literal} + contactID; - var submittedOnBehalfInfo = {/literal}'{$submittedOnBehalfInfo}'{literal}; - var submittedCID = {/literal}"{$submittedOnBehalf}"{literal}; - - if (submittedOnBehalfInfo) { - submittedOnBehalfInfo = $.parseJSON(submittedOnBehalfInfo); - - if (submittedCID == contactID) { - $.each(submittedOnBehalfInfo, function(key, value) { - //handle checkboxes - if (typeof value === 'object') { - $.each(value, function(k, v) { - $('#onbehalf_' + key + '_' + k).prop('checked', v); - }); - } - else if ($('#onbehalf_' + key).length) { - $('#onbehalf_' + key ).val(value); - } - //radio buttons - else if ($("input[name='onbehalf[" + key + "]']").length) { - $("input[name='onbehalf[" + key + "]']").val([value]); - } - }); - return; - } - } - - $.ajax({ - url : locationUrl, - dataType : "json", - timeout : 5000, //Time in milliseconds - success : function(data, status) { - for (var ele in data) { - if ($("#"+ ele).hasClass('crm-chain-select-target')) { - $("#"+ ele).data('newVal', data[ele].value).off('.autofill').on('crmOptionsUpdated.autofill', function() { - $(this).off('.autofill').val($(this).data('newVal')).change(); + var locationUrl = {/literal}'{$locDataURL}'{literal} + contactID; + var submittedOnBehalfInfo = {/literal}'{$submittedOnBehalfInfo}'{literal}; + var submittedCID = {/literal}"{$submittedOnBehalf}"{literal}; + + if (submittedOnBehalfInfo) { + submittedOnBehalfInfo = $.parseJSON(submittedOnBehalfInfo); + + if (submittedCID == contactID) { + $.each(submittedOnBehalfInfo, function(key, value) { + //handle checkboxes + if (typeof value === 'object') { + $.each(value, function(k, v) { + $('#onbehalf_' + key + '_' + k).prop('checked', v); + }); + } + else if ($('#onbehalf_' + key).length) { + $('#onbehalf_' + key ).val(value); + } + //radio buttons + else if ($("input[name='onbehalf[" + key + "]']").length) { + $("input[name='onbehalf[" + key + "]']").val([value]); + } }); + return; } - else if ($('#' + ele).data('select2')) { - $('#' + ele).select2('val', data[ele].value); - } - if (data[ele].type == 'Radio') { - if (data[ele].value) { - var fldName = ele.replace('onbehalf_', ''); - $("input[name='onbehalf["+ fldName +"]']").filter("[value='" + data[ele].value + "']").prop('checked', true); - } - } - else if (data[ele].type == 'CheckBox') { - for (var selectedOption in data[ele].value) { - var fldName = ele.replace('onbehalf_', ''); - $("input[name='onbehalf["+ fldName+"]["+ selectedOption +"]']").prop('checked','checked'); - } - } - else if (data[ele].type == 'AdvMulti-Select') { - var customFld = ele.replace('onbehalf_', ''); - // remove empty value if any - $('#onbehalf\\['+ customFld +'\\]-f option[value=""]').remove(); - $('#onbehalf\\['+ customFld +'\\]-t option[value=""]').remove(); - - for (var selectedOption in data[ele].value) { - // remove selected values from left and selected values to right - $('#onbehalf\\['+ customFld +'\\]-f option[value="' + selectedOption + '"]').remove() - .appendTo('#onbehalf\\['+ customFld +'\\]-t'); - $('#onbehalf_'+ customFld).val(selectedOption); - } - } - else { - // do not set defaults to file type fields - if ($('#' + ele).attr('type') != 'file') { - $('#' + ele ).val(data[ele].value).change(); + } + + $.ajax({ + url : locationUrl, + dataType : "json", + timeout : 5000, //Time in milliseconds + success : function(data, status) { + for (var ele in data) { + if ($("#"+ ele).hasClass('crm-chain-select-target')) { + $("#"+ ele).data('newVal', data[ele].value).off('.autofill').on('crmOptionsUpdated.autofill', function() { + $(this).off('.autofill').val($(this).data('newVal')).change(); + }); + } + else if ($('#' + ele).data('select2')) { + $('#' + ele).select2('val', data[ele].value); + } + if (data[ele].type == 'Radio') { + if (data[ele].value) { + var fldName = ele.replace('onbehalf_', ''); + $("input[name='onbehalf["+ fldName +"]']").filter("[value='" + data[ele].value + "']").prop('checked', true); + } + } + else if (data[ele].type == 'CheckBox') { + for (var selectedOption in data[ele].value) { + var fldName = ele.replace('onbehalf_', ''); + $("input[name='onbehalf["+ fldName+"]["+ selectedOption +"]']").prop('checked','checked'); + } + } + else if (data[ele].type == 'AdvMulti-Select') { + var customFld = ele.replace('onbehalf_', ''); + // remove empty value if any + $('#onbehalf\\['+ customFld +'\\]-f option[value=""]').remove(); + $('#onbehalf\\['+ customFld +'\\]-t option[value=""]').remove(); + + for (var selectedOption in data[ele].value) { + // remove selected values from left and selected values to right + $('#onbehalf\\['+ customFld +'\\]-f option[value="' + selectedOption + '"]').remove() + .appendTo('#onbehalf\\['+ customFld +'\\]-t'); + $('#onbehalf_'+ customFld).val(selectedOption); + } + } + else { + // do not set defaults to file type fields + if ($('#' + ele).attr('type') != 'file') { + $('#' + ele ).val(data[ele].value).change(); + } + } } + }, + error : function(XMLHttpRequest, textStatus, errorThrown) { + CRM.console('error', "HTTP error status: ", textStatus); } - } - }, - error : function(XMLHttpRequest, textStatus, errorThrown) { - CRM.console('error', "HTTP error status: ", textStatus); + }); } }); -} -}); </script> {/literal} diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl index fbb678e7988a6024d3f1ce513537f7c3946e6ffb..ff7b972a45c561f83def97ac6074eb9c25cb77fd 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionRecurSelector.tpl @@ -14,6 +14,7 @@ <th scope="col">{ts}Frequency{/ts}</th> <th scope="col">{ts}Start Date{/ts}</th> <th scope="col">{ts}Installments{/ts}</th> + <th scope="col">{ts}Payment Processor{/ts}</th> <th scope="col">{ts}Status{/ts}</th> <th scope="col"></th> </tr> @@ -25,6 +26,7 @@ <td>{ts}Every{/ts} {$row.frequency_interval} {$row.frequency_unit} </td> <td>{$row.start_date|crmDate}</td> <td>{$row.installments}</td> + <td>{$row.payment_processor}</td> <td>{$row.contribution_status}</td> <td>{$row.action|replace:'xx':$row.recurId}</td> </tr> diff --git a/civicrm/templates/CRM/Core/BillingBlock.tpl b/civicrm/templates/CRM/Core/BillingBlock.tpl index f8bb2088f5064eb060a201e25cafe51ce1317bf6..10a830c1267b43a6c4265a1d74907bd71abb5eb9 100644 --- a/civicrm/templates/CRM/Core/BillingBlock.tpl +++ b/civicrm/templates/CRM/Core/BillingBlock.tpl @@ -20,9 +20,7 @@ {foreach from=$paymentFields item=paymentField} {assign var='name' value=$form.$paymentField.name} <div class="crm-section {$form.$paymentField.name}-section"> - <div class="label">{$form.$paymentField.label} - {if $requiredPaymentFields.$name}<span class="crm-marker" title="{ts}This field is required.{/ts}">*</span>{/if} - </div> + <div class="label">{$form.$paymentField.label}</div> <div class="content"> {$form.$paymentField.html} {if $paymentFieldsMetadata.$name.description} @@ -51,9 +49,7 @@ {foreach from=$billingDetailsFields item=billingField} {assign var='name' value=$form.$billingField.name} <div class="crm-section {$form.$billingField.name}-section"> - <div class="label">{$form.$billingField.label} - {if $requiredPaymentFields.$name}<span class="crm-marker" title="{ts}This field is required.{/ts}">*</span>{/if} - </div> + <div class="label">{$form.$billingField.label}</div> {if $form.$billingField.type == 'text'} <div class="content">{$form.$billingField.html}</div> {else} diff --git a/civicrm/templates/CRM/Custom/Form/Group.tpl b/civicrm/templates/CRM/Custom/Form/Group.tpl index 086864b2bdbe132af8713c63749c6882d1f022ac..c371d06f9b708c98ff10ffce1321cfd847491206 100644 --- a/civicrm/templates/CRM/Custom/Form/Group.tpl +++ b/civicrm/templates/CRM/Custom/Form/Group.tpl @@ -36,6 +36,10 @@ <td class="label">{$form.style.label}</td> <td>{$form.style.html} {help id="id-display_style"}</td> </tr> + <tr id="icon_row" class="hiddenElement"> + <td class="label">{$form.icon.label}</td> + <td>{$form.icon.html}</td> + </tr> <tr class="html-adjust"> <td> </td> <td>{$form.collapse_display.html} {$form.collapse_display.label} {help id="id-collapse"}</td> @@ -88,7 +92,9 @@ CRM.$(function($) { if ($(this).val() == 'Tab') { $('#collapse_display').prop('checked', false); } + $('#icon_row').toggle($(this).val() !== 'Inline'); }); + $('#icon_row').toggle($("select#style").val() !== 'Inline'); /** * Check if this is a contact-related set and show/hide other options accordingly @@ -138,12 +144,12 @@ CRM.$(function($) { $("tr#multiple_row").show(); if (onFormLoad !== true) { $('#collapse_display').prop('checked', false); - $("select#style").append(tabWithTableOption); - $("select#style").val('Tab with table'); + $("select#style").append(tabWithTableOption).val('Tab with table'); } + $('#icon_row').toggle($("select#style").val() !== 'Inline'); } else { - $("tr#multiple_row").hide(); + $("tr#multiple_row, #icon_row").hide(); if ($("select#style").val() === 'Tab with table') { $("select#style").val('Inline'); } diff --git a/civicrm/templates/CRM/Event/Cart/Form/Checkout/ThankYou.tpl b/civicrm/templates/CRM/Event/Cart/Form/Checkout/ThankYou.tpl index 6a46fac2476c7e222a9bb6362aebd833329ef8b3..f149c2247bf181be1b0ea95097755a4ed5813066 100644 --- a/civicrm/templates/CRM/Event/Cart/Form/Checkout/ThankYou.tpl +++ b/civicrm/templates/CRM/Event/Cart/Form/Checkout/ThankYou.tpl @@ -5,7 +5,7 @@ {ts}This is your receipt of payment made for the following event registration.{/ts} </p> <p> - {ts 1=$transaction_id 2=$transaction_date|date_format:"%D %I:%M %p %Z"}Your order number is <strong>#%1</strong>. Please print this confirmation for your records. You will receieve a confirmation email with the information below. Information about the workshops will be sent separately to each participant. Here's a summary of your transaction placed on %2:{/ts} + {ts 1=$transaction_id 2=$transaction_date|date_format:"%D %I:%M %p %Z"}Your order number is <strong>#%1</strong>. Please print this confirmation for your records. You will receive a confirmation email with the information below. Information about the workshops will be sent separately to each participant. Here's a summary of your transaction placed on %2:{/ts} </p> {if $pay_later_receipt && $is_pay_later} <p> diff --git a/civicrm/templates/CRM/Event/Page/EventInfo.tpl b/civicrm/templates/CRM/Event/Page/EventInfo.tpl index 6bb4cc6d244d8b7e1cb80806514b327d51554e44..38a9beaba2c67a1186a7924e614cf4c2e065f111 100644 --- a/civicrm/templates/CRM/Event/Page/EventInfo.tpl +++ b/civicrm/templates/CRM/Event/Page/EventInfo.tpl @@ -101,22 +101,19 @@ <div class="crm-section event_date_time-section"> <div class="label">{ts}When{/ts}</div> <div class="content"> - <abbr class="dtstart" title="{$event.event_start_date|crmDate}"> - {$event.event_start_date|crmDate}</abbr> + {strip} + {$event.event_start_date|crmDate} {if $event.event_end_date} - {ts}through{/ts} + {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"} - <abbr class="dtend" title="{$event.event_end_date|crmDate:0:1}"> {$event.event_end_date|crmDate:0:1} - </abbr> {else} - <abbr class="dtend" title="{$event.event_end_date|crmDate}"> {$event.event_end_date|crmDate} - </abbr> {/if} {/if} - </div> + {/strip} + </div> <div class="clear"></div> </div> @@ -137,7 +134,7 @@ <div class="content"> {assign var=showDirectly value="1"} {include file="CRM/Contact/Form/Task/Map/`$config->mapProvider`.tpl" fields=$showDirectly} - <br /><a href="{$mapURL}" title="{ts}Show large map{/ts}">{ts}Show large map{/ts}</a> + <a href="{$mapURL}" title="{ts}Show large map{/ts}">{ts}Show large map{/ts}</a> </div> <div class="clear"></div> </div> @@ -150,17 +147,20 @@ <div class="crm-section event_contact-section"> <div class="label">{ts}Contact{/ts}</div> <div class="content"> - {* loop on any phones and emails for this event *} {foreach from=$location.phone item=phone} {if $phone.phone} - {if $phone.phone_type_id}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: - <span class="tel">{$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} </span> <br /> - {/if} + <div class="crm-eventinfo-contact-phone"> + {* @todo This should use "{ts 1=$phone.phone_type_display 2=$phone}%1: %2{/ts}" because some language have nbsp before column *} + {if $phone.phone_type_id}{$phone.phone_type_display}:{else}{ts}Phone:{/ts}{/if} + <span class="tel">{$phone.phone}{if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}</span> + </div> + {/if} {/foreach} - {foreach from=$location.email item=email} {if $email.email} + <div class="crm-eventinfo-contact-email"> {ts}Email:{/ts} <span class="email"><a href="mailto:{$email.email}">{$email.email}</a></span> + </div> {/if} {/foreach} </div> @@ -217,7 +217,6 @@ {/crmRegion} </div> {if $event.is_public } - <br /> <div class="action-link section iCal_links-section"> {include file="CRM/Event/Page/iCalLinks.tpl"} </div> diff --git a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl index 2cd18c3ff59e1456db5ab04f7e06018c2d0693ee..c8c976fdbbee9b78de6025bacda0eb897c69016a 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl +++ b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl @@ -28,7 +28,9 @@ <thead class="sticky"> <th>{ts}Status{/ts}</th> <th>{ts}Start Event{/ts}</th> + <th>{ts}Start Adjustment{/ts}</th> <th>{ts}End Event{/ts}</th> + <th>{ts}End Adjustment{/ts}</th> <th>{ts}Member{/ts}</th> <th>{ts}Admin{/ts}</th> <th>{ts}Order{/ts}</th> @@ -38,8 +40,10 @@ {foreach from=$rows item=row} <tr id="membership_status-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"} {$row.class} {if NOT $row.is_active} disabled{/if} crmf"> <td class="crmf-label crm-editable" >{$row.label}</td> - <td class="crmf-start_event crm-editable" data-type="select" data-empty-option="{ts}- none -{/ts}">{$row.start_event}</td> - <td class="crmf-end_event crm-editable" data-type="select" data-empty-option="{ts}- none -{/ts}">{$row.end_event}</td> + <td class="nowrap crmf-start_event crm-editable" data-type="select" data-empty-option="{ts}- none -{/ts}">{$row.start_event}</td> + <td class="nowrap crmf-start_event_adjust_unit_interval">{$row.start_event_adjust_unit_interval}</td> + <td class="nowrap crmf-end_event crm-editable" data-type="select" data-empty-option="{ts}- none -{/ts}">{$row.end_event}</td> + <td class="nowrap crmf-end_event_adjust_interval">{$row.end_event_adjust_interval}</td> <td class="crmf-is_current_member crm-editable" data-type="boolean">{if $row.is_current_member eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crmf-is_admin crm-editable" data-type="boolean">{if $row.is_admin eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="nowrap crmf-weight">{$row.weight}</td> diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index 6bdab4ec760b77550da0ab950ddeed1c58e4d30e..28102ccd78ea53dcb0d82a2282db83214304073d 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -235,7 +235,7 @@ if (!defined('CIVICRM_UF_BASEURL')) { } /** - * Define any CiviCRM Settings Overrides per http://wiki.civicrm.org/confluence/display/CRMDOC/Override+CiviCRM+Settings + * Define any CiviCRM Settings Overrides per https://docs.civicrm.org/sysadmin/en/latest/customize/settings/ * * Uncomment and edit the below as appropriate. */ diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index fa49678644a0b629158046c0142b751eba4bd940..bba775f40a56419549d40d3d61cb88067a58f1f6 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -93,10 +93,10 @@ {literal} var params = { - errorClass: 'crm-inline-error', + errorClass: 'crm-inline-error alert-danger', messages: {}, - // TODO: remove after resolution of https://github.com/jzaefferer/jquery-validation/pull/1261 - ignore: ":hidden, [readonly]" + ignore: '.select2-offscreen, [readonly], :hidden:not(.crm-select2), .crm-no-validate', + ignoreTitle: true }; // use civicrm notifications when there are errors @@ -105,6 +105,7 @@ // but there will be no overall message. Currently the container is only available on backoffice pages. if ($('#crm-notification-container').length) { $.each(validator.errorList, function(k, error) { + $(error.element).parents('.crm-custom-accordion.collapsed').crmAccordionToggle(); $(error.element).crmError(error.message); }); } diff --git a/civicrm/vendor/adrienrn/php-mimetyper/.gitignore b/civicrm/vendor/adrienrn/php-mimetyper/.gitignore index 4a5fdabde319c275b2bbdf4865d18160498ea5a4..b5e4fa33a2b8407ffc0916b534e8e30bf796ea81 100644 --- a/civicrm/vendor/adrienrn/php-mimetyper/.gitignore +++ b/civicrm/vendor/adrienrn/php-mimetyper/.gitignore @@ -4,4 +4,5 @@ composer.phar # Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file # composer.lock -node_modules/ +node_modules/mime-db/* +!node_modules/mime-db/db.json diff --git a/civicrm/vendor/adrienrn/php-mimetyper/PATCHES.txt b/civicrm/vendor/adrienrn/php-mimetyper/PATCHES.txt new file mode 100644 index 0000000000000000000000000000000000000000..42a4984fd53831ff33bf54db042c210201ce7459 --- /dev/null +++ b/civicrm/vendor/adrienrn/php-mimetyper/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: + +Update gitignore to ensure that sites that manage via git don't miss out on the important db.json file +Source: https://patch-diff.githubusercontent.com/raw/adrienrn/php-mimetyper/pull/15.patch + + diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 8adc26af71e9bea469c085ca590f4c7791b1095c..a81209dbdf9ee5b5403c93ba21063e31c6f8f2b2 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b::getLoader(); +return ComposerAutoloaderInit295933fd472bb10cd7a2a298afef50f1::getLoader(); diff --git a/civicrm/vendor/brick/math/.github/FUNDING.yml b/civicrm/vendor/brick/math/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..882491c12d9074814d233fdd37ef39a2dd59bf42 --- /dev/null +++ b/civicrm/vendor/brick/math/.github/FUNDING.yml @@ -0,0 +1 @@ +tidelift: "packagist/brick/math" diff --git a/civicrm/vendor/brick/math/LICENSE b/civicrm/vendor/brick/math/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f9b724f00ab40ec5f99fe9724a0756212f2a610b --- /dev/null +++ b/civicrm/vendor/brick/math/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-present Benjamin Morel + +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/brick/math/SECURITY.md b/civicrm/vendor/brick/math/SECURITY.md new file mode 100644 index 0000000000000000000000000000000000000000..6bdc74f0df2d1069c4b5906f96c2963efd78cd8f --- /dev/null +++ b/civicrm/vendor/brick/math/SECURITY.md @@ -0,0 +1,16 @@ +# Security Policy + +## Supported Versions + +Only the latest release stream is supported. + +| Version | Supported | +| ------- | ------------------ | +| 0.8.x | :white_check_mark: | +| < 0.8 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/civicrm/vendor/brick/math/composer.json b/civicrm/vendor/brick/math/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..d347b6bdeb3db0fa2d89161946c87bb3598d0c92 --- /dev/null +++ b/civicrm/vendor/brick/math/composer.json @@ -0,0 +1,35 @@ +{ + "name": "brick/math", + "description": "Arbitrary-precision arithmetic library", + "type": "library", + "keywords": [ + "Brick", + "Math", + "Arbitrary-precision", + "Arithmetic", + "BigInteger", + "BigDecimal", + "BigRational", + "Bignum" + ], + "license": "MIT", + "require": { + "php": "^7.1|^8.0", + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.15|^8.5", + "php-coveralls/php-coveralls": "^2.2", + "vimeo/psalm": "^3.5" + }, + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Brick\\Math\\Tests\\": "tests/" + } + } +} diff --git a/civicrm/vendor/brick/math/psalm-baseline.xml b/civicrm/vendor/brick/math/psalm-baseline.xml new file mode 100644 index 0000000000000000000000000000000000000000..fe05b998cdffabb66f20c3c89d436c04a9b78886 --- /dev/null +++ b/civicrm/vendor/brick/math/psalm-baseline.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<files psalm-version="3.8.5@e6ec5fa22a7b9e61670a24d07b3119aff80dcd89"> + <file src="src/Internal/Calculator/BcMathCalculator.php"> + <InvalidNullableReturnType occurrences="3"> + <code>string</code> + <code>string</code> + <code>string</code> + </InvalidNullableReturnType> + <InvalidReturnStatement occurrences="1"> + <code>[$q, $r]</code> + </InvalidReturnStatement> + <InvalidReturnType occurrences="1"> + <code>array</code> + </InvalidReturnType> + <NullableReturnStatement occurrences="3"> + <code>\bcdiv($a, $b, 0)</code> + <code>\bcmod($a, $b)</code> + <code>\bcpowmod($base, $exp, $mod, 0)</code> + </NullableReturnStatement> + </file> + <file src="src/Internal/Calculator/NativeCalculator.php"> + <InvalidOperand occurrences="6"> + <code>$a</code> + <code>$a</code> + <code>$a</code> + <code>$b</code> + <code>$blockA</code> + <code>$blockA</code> + </InvalidOperand> + <LoopInvalidation occurrences="4"> + <code>$i</code> + <code>$i</code> + <code>$i</code> + <code>$j</code> + </LoopInvalidation> + <PossiblyInvalidArgument occurrences="1"> + <code>$e / 2</code> + </PossiblyInvalidArgument> + </file> +</files> diff --git a/civicrm/vendor/brick/math/psalm.xml b/civicrm/vendor/brick/math/psalm.xml new file mode 100644 index 0000000000000000000000000000000000000000..123263ef49177fa3e6fb40962a6caf652c4e1912 --- /dev/null +++ b/civicrm/vendor/brick/math/psalm.xml @@ -0,0 +1,56 @@ +<?xml version="1.0"?> +<psalm + totallyTyped="false" + resolveFromConfigFile="true" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="https://getpsalm.org/schema/config" + xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" + errorBaseline="psalm-baseline.xml" +> + <projectFiles> + <directory name="src" /> + <ignoreFiles> + <directory name="vendor" /> + </ignoreFiles> + </projectFiles> + + <issueHandlers> + <LessSpecificReturnType errorLevel="info" /> + + <!-- level 3 issues - slightly lazy code writing, but provably low false-negatives --> + + <DeprecatedMethod errorLevel="info" /> + <DeprecatedProperty errorLevel="info" /> + <DeprecatedClass errorLevel="info" /> + <DeprecatedConstant errorLevel="info" /> + <DeprecatedFunction errorLevel="info" /> + <DeprecatedInterface errorLevel="info" /> + <DeprecatedTrait errorLevel="info" /> + + <InternalMethod errorLevel="info" /> + <InternalProperty errorLevel="info" /> + <InternalClass errorLevel="info" /> + + <MissingClosureReturnType errorLevel="info" /> + <MissingReturnType errorLevel="info" /> + <MissingPropertyType errorLevel="info" /> + <InvalidDocblock errorLevel="info" /> + <MisplacedRequiredParam errorLevel="info" /> + + <PropertyNotSetInConstructor errorLevel="info" /> + <MissingConstructor errorLevel="info" /> + <MissingClosureParamType errorLevel="info" /> + <MissingParamType errorLevel="info" /> + + <RedundantCondition errorLevel="info" /> + + <DocblockTypeContradiction errorLevel="info" /> + <RedundantConditionGivenDocblockType errorLevel="info" /> + + <UnresolvableInclude errorLevel="info" /> + + <RawObjectIteration errorLevel="info" /> + + <InvalidStringClass errorLevel="info" /> + </issueHandlers> +</psalm> diff --git a/civicrm/vendor/brick/math/src/BigDecimal.php b/civicrm/vendor/brick/math/src/BigDecimal.php new file mode 100644 index 0000000000000000000000000000000000000000..29bdd320b039618449fc915c899c4f566a9f85ca --- /dev/null +++ b/civicrm/vendor/brick/math/src/BigDecimal.php @@ -0,0 +1,855 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math; + +use Brick\Math\Exception\DivisionByZeroException; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\NegativeNumberException; +use Brick\Math\Internal\Calculator; + +/** + * Immutable, arbitrary-precision signed decimal numbers. + * + * @psalm-immutable + */ +final class BigDecimal extends BigNumber +{ + /** + * The unscaled value of this decimal number. + * + * This is a string of digits with an optional leading minus sign. + * No leading zero must be present. + * No leading minus sign must be present if the value is 0. + * + * @var string + */ + private $value; + + /** + * The scale (number of digits after the decimal point) of this decimal number. + * + * This must be zero or more. + * + * @var int + */ + private $scale; + + /** + * Protected constructor. Use a factory method to obtain an instance. + * + * @param string $value The unscaled value, validated. + * @param int $scale The scale, validated. + */ + protected function __construct(string $value, int $scale = 0) + { + $this->value = $value; + $this->scale = $scale; + } + + /** + * Creates a BigDecimal of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigDecimal + * + * @throws MathException If the value cannot be converted to a BigDecimal. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigDecimal(); + } + + /** + * Creates a BigDecimal from an unscaled value and a scale. + * + * Example: `(12345, 3)` will result in the BigDecimal `12.345`. + * + * @param BigNumber|int|float|string $value The unscaled value. Must be convertible to a BigInteger. + * @param int $scale The scale of the number, positive or zero. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * + * @psalm-pure + */ + public static function ofUnscaledValue($value, int $scale = 0) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('The scale cannot be negative.'); + } + + return new BigDecimal((string) BigInteger::of($value), $scale); + } + + /** + * Returns a BigDecimal representing zero, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function zero() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigDecimal('0'); + } + + return $zero; + } + + /** + * Returns a BigDecimal representing one, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function one() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigDecimal('1'); + } + + return $one; + } + + /** + * Returns a BigDecimal representing ten, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function ten() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigDecimal('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function plus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + if ($this->value === '0' && $this->scale <= $that->scale) { + return $that; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->add($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the difference of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function minus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->sub($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the product of this number and the given one. + * + * The result has a scale of `$this->scale + $that->scale`. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigDecimal. + */ + public function multipliedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '1' && $that->scale === 0) { + return $this; + } + + if ($this->value === '1' && $this->scale === 0) { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + $scale = $this->scale + $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the result of the division of this number by the given one, at the given scale. + * + * @param BigNumber|int|float|string $that The divisor. + * @param int|null $scale The desired scale, or null to use the scale of this number. + * @param int $roundingMode An optional rounding mode. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale or rounding mode is invalid. + * @throws MathException If the number is invalid, is zero, or rounding was necessary. + */ + public function dividedBy($that, ?int $scale = null, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + if ($scale === null) { + $scale = $this->scale; + } elseif ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($that->value === '1' && $that->scale === 0 && $scale === $this->scale) { + return $this; + } + + $p = $this->valueWithMinScale($that->scale + $scale); + $q = $that->valueWithMinScale($this->scale - $scale); + + $result = Calculator::get()->divRound($p, $q, $roundingMode); + + return new BigDecimal($result, $scale); + } + + /** + * Returns the exact result of the division of this number by the given one. + * + * The scale of the result is automatically calculated to fit all the fraction digits. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigDecimal, is zero, + * or the result yields an infinite number of digits. + */ + public function exactlyDividedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [$a, $b] = $this->scaleValues($this, $that); + + $d = \rtrim($b, '0'); + $scale = \strlen($b) - \strlen($d); + + $calculator = Calculator::get(); + + foreach ([5, 2] as $prime) { + for (;;) { + $lastDigit = (int) $d[-1]; + + if ($lastDigit % $prime !== 0) { + break; + } + + $d = $calculator->divQ($d, (string) $prime); + $scale++; + } + } + + return $this->dividedBy($that, $scale)->stripTrailingZeros(); + } + + /** + * Returns this number exponentiated to the given value. + * + * The result has a scale of `$this->scale * $exponent`. + * + * @param int $exponent The exponent. + * + * @return BigDecimal The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigDecimal + { + if ($exponent === 0) { + return BigDecimal::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigDecimal(Calculator::get()->pow($this->value, $exponent), $this->scale * $exponent); + } + + /** + * Returns the quotient of the division of this number by this given one. + * + * The quotient has a scale of `0`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The quotient. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotient($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $quotient = Calculator::get()->divQ($p, $q); + + return new BigDecimal($quotient, 0); + } + + /** + * Returns the remainder of the division of this number by this given one. + * + * The remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function remainder($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $remainder = Calculator::get()->divR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($remainder, $scale); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * The quotient has a scale of `0`, and the remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal[] An array containing the quotient and the remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + [$quotient, $remainder] = Calculator::get()->divQR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + $quotient = new BigDecimal($quotient, 0); + $remainder = new BigDecimal($remainder, $scale); + + return [$quotient, $remainder]; + } + + /** + * Returns the square root of this number, rounded down to the given number of decimals. + * + * @param int $scale + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt(int $scale) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($this->value === '0') { + return new BigDecimal('0', $scale); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = $this->value; + $addDigits = 2 * $scale - $this->scale; + + if ($addDigits > 0) { + // add zeros + $value .= \str_repeat('0', $addDigits); + } elseif ($addDigits < 0) { + // trim digits + if (-$addDigits >= \strlen($this->value)) { + // requesting a scale too low, will always yield a zero result + return new BigDecimal('0', $scale); + } + + $value = \substr($value, 0, $addDigits); + } + + $value = Calculator::get()->sqrt($value); + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the left. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedLeft(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedRight(-$n); + } + + return new BigDecimal($this->value, $this->scale + $n); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the right. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedRight(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedLeft(-$n); + } + + $value = $this->value; + $scale = $this->scale - $n; + + if ($scale < 0) { + if ($value !== '0') { + $value .= \str_repeat('0', -$scale); + } + $scale = 0; + } + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with any trailing zeros removed from the fractional part. + * + * @return BigDecimal + */ + public function stripTrailingZeros() : BigDecimal + { + if ($this->scale === 0) { + return $this; + } + + $trimmedValue = \rtrim($this->value, '0'); + + if ($trimmedValue === '') { + return BigDecimal::zero(); + } + + $trimmableZeros = \strlen($this->value) - \strlen($trimmedValue); + + if ($trimmableZeros === 0) { + return $this; + } + + if ($trimmableZeros > $this->scale) { + $trimmableZeros = $this->scale; + } + + $value = \substr($this->value, 0, -$trimmableZeros); + $scale = $this->scale - $trimmableZeros; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the absolute value of this number. + * + * @return BigDecimal + */ + public function abs() : BigDecimal + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the negated value of this number. + * + * @return BigDecimal + */ + public function negated() : BigDecimal + { + return new BigDecimal(Calculator::get()->neg($this->value), $this->scale); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + $that = $that->toBigDecimal(); + } + + if ($that instanceof BigDecimal) { + [$a, $b] = $this->scaleValues($this, $that); + + return Calculator::get()->cmp($a, $b); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * @return BigInteger + */ + public function getUnscaledValue() : BigInteger + { + return BigInteger::create($this->value); + } + + /** + * @return int + */ + public function getScale() : int + { + return $this->scale; + } + + /** + * Returns a string representing the integral part of this decimal number. + * + * Example: `-123.456` => `-123`. + * + * @return string + */ + public function getIntegralPart() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale); + } + + /** + * Returns a string representing the fractional part of this decimal number. + * + * If the scale is zero, an empty string is returned. + * + * Examples: `-123.456` => '456', `123` => ''. + * + * @return string + */ + public function getFractionalPart() : string + { + if ($this->scale === 0) { + return ''; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, -$this->scale); + } + + /** + * Returns whether this decimal number has a non-zero fractional part. + * + * @return bool + */ + public function hasNonZeroFractionalPart() : bool + { + return $this->getFractionalPart() !== \str_repeat('0', $this->scale); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + if ($this->scale === 0) { + $zeroScaleDecimal = $this; + } else { + $zeroScaleDecimal = $this->dividedBy(1, 0); + } + + return BigInteger::create($zeroScaleDecimal->value); + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + $numerator = BigInteger::create($this->value); + $denominator = BigInteger::create('1' . \str_repeat('0', $this->scale)); + + return BigRational::create($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + if ($scale === $this->scale) { + return $this; + } + + return $this->dividedBy(BigDecimal::one(), $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) (string) $this; + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale) . '.' . \substr($value, -$this->scale); + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value . ':' . $this->scale; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$value, $scale] = \explode(':', $value); + + $this->value = $value; + $this->scale = (int) $scale; + } + + /** + * Puts the internal values of the given decimal numbers on the same scale. + * + * @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. + */ + private function scaleValues(BigDecimal $x, BigDecimal $y) : array + { + $a = $x->value; + $b = $y->value; + + if ($b !== '0' && $x->scale > $y->scale) { + $b .= \str_repeat('0', $x->scale - $y->scale); + } elseif ($a !== '0' && $x->scale < $y->scale) { + $a .= \str_repeat('0', $y->scale - $x->scale); + } + + return [$a, $b]; + } + + /** + * @param int $scale + * + * @return string + */ + private function valueWithMinScale(int $scale) : string + { + $value = $this->value; + + if ($this->value !== '0' && $scale > $this->scale) { + $value .= \str_repeat('0', $scale - $this->scale); + } + + return $value; + } + + /** + * Adds leading zeros if necessary to the unscaled value to represent the full decimal number. + * + * @return string + */ + private function getUnscaledValueWithLeadingZeros() : string + { + $value = $this->value; + $targetLength = $this->scale + 1; + $negative = ($value[0] === '-'); + $length = \strlen($value); + + if ($negative) { + $length--; + } + + if ($length >= $targetLength) { + return $this->value; + } + + if ($negative) { + $value = \substr($value, 1); + } + + $value = \str_pad($value, $targetLength, '0', STR_PAD_LEFT); + + if ($negative) { + $value = '-' . $value; + } + + return $value; + } +} diff --git a/civicrm/vendor/brick/math/src/BigInteger.php b/civicrm/vendor/brick/math/src/BigInteger.php new file mode 100644 index 0000000000000000000000000000000000000000..c811d17bd64c60ff421d139d17681e4d8f0a39e9 --- /dev/null +++ b/civicrm/vendor/brick/math/src/BigInteger.php @@ -0,0 +1,904 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math; + +use Brick\Math\Exception\DivisionByZeroException; +use Brick\Math\Exception\IntegerOverflowException; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\NegativeNumberException; +use Brick\Math\Exception\NumberFormatException; +use Brick\Math\Internal\Calculator; + +/** + * An arbitrary-size integer. + * + * All methods accepting a number as a parameter accept either a BigInteger instance, + * an integer, or a string representing an arbitrary size integer. + * + * @psalm-immutable + */ +final class BigInteger extends BigNumber +{ + /** + * The value, as a string of digits with optional leading minus sign. + * + * No leading zeros must be present. + * No leading minus sign must be present if the number is zero. + * + * @var string + */ + private $value; + + /** + * Protected constructor. Use a factory method to obtain an instance. + * + * @param string $value A string of digits, with optional leading minus sign. + */ + protected function __construct(string $value) + { + $this->value = $value; + } + + /** + * Creates a BigInteger of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigInteger + * + * @throws MathException If the value cannot be converted to a BigInteger. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigInteger(); + } + + /** + * Creates a number from a string in a given base. + * + * The string can optionally be prefixed with the `+` or `-` sign. + * + * Bases greater than 36 are not supported by this method, as there is no clear consensus on which of the lowercase + * or uppercase characters should come first. Instead, this method accepts any base up to 36, and does not + * differentiate lowercase and uppercase characters, which are considered equal. + * + * For bases greater than 36, and/or custom alphabets, use the fromArbitraryBase() method. + * + * @param string $number The number to convert, in the given base. + * @param int $base The base of the number, between 2 and 36. + * + * @return BigInteger + * + * @throws NumberFormatException If the number is empty, or contains invalid chars for the given base. + * @throws \InvalidArgumentException If the base is out of range. + * + * @psalm-pure + */ + public static function fromBase(string $number, int $base) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is not in range 2 to 36.', $base)); + } + + if ($number[0] === '-') { + $sign = '-'; + $number = \substr($number, 1); + } elseif ($number[0] === '+') { + $sign = ''; + $number = \substr($number, 1); + } else { + $sign = ''; + } + + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + // The result will be the same in any base, avoid further calculation. + return BigInteger::zero(); + } + + if ($number === '1') { + // The result will be the same in any base, avoid further calculation. + return new BigInteger($sign . '1'); + } + + $pattern = '/[^' . \substr(Calculator::ALPHABET, 0, $base) . ']/'; + + if (\preg_match($pattern, \strtolower($number), $matches) === 1) { + throw new NumberFormatException(\sprintf('"%s" is not a valid character in base %d.', $matches[0], $base)); + } + + if ($base === 10) { + // The number is usable as is, avoid further calculation. + return new BigInteger($sign . $number); + } + + $result = Calculator::get()->fromBase($number, $base); + + return new BigInteger($sign . $result); + } + + /** + * Parses a string containing an integer in an arbitrary base, using a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers. + * + * @param string $number The number to parse. + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return BigInteger + * + * @throws NumberFormatException If the given number is empty or contains invalid chars for the given alphabet. + * @throws \InvalidArgumentException If the alphabet does not contain at least 2 chars. + * + * @psalm-pure + */ + public static function fromArbitraryBase(string $number, string $alphabet) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + $pattern = '/[^' . \preg_quote($alphabet, '/') . ']/'; + + if (\preg_match($pattern, $number, $matches) === 1) { + throw NumberFormatException::charNotInAlphabet($matches[0]); + } + + $number = Calculator::get()->fromArbitraryBase($number, $alphabet, $base); + + return new BigInteger($number); + } + + /** + * Returns a BigInteger representing zero. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function zero() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigInteger('0'); + } + + return $zero; + } + + /** + * Returns a BigInteger representing one. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function one() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigInteger('1'); + } + + return $one; + } + + /** + * Returns a BigInteger representing ten. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function ten() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigInteger('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function plus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + if ($this->value === '0') { + return $that; + } + + $value = Calculator::get()->add($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function minus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + $value = Calculator::get()->sub($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigInteger. + */ + public function multipliedBy($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($this->value === '1') { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * @param int $roundingMode An optional rounding mode. + * + * @return BigInteger The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero, + * or RoundingMode::UNNECESSARY is used and the remainder is not zero. + */ + public function dividedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $result = Calculator::get()->divRound($this->value, $that->value, $roundingMode); + + return new BigInteger($result); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigInteger The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigInteger + { + if ($exponent === 0) { + return BigInteger::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigInteger(Calculator::get()->pow($this->value, $exponent)); + } + + /** + * Returns the quotient of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotient($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $quotient = Calculator::get()->divQ($this->value, $that->value); + + return new BigInteger($quotient); + } + + /** + * Returns the remainder of the division of this number by the given one. + * + * The remainder, when non-zero, has the same sign as the dividend. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function remainder($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return BigInteger::zero(); + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $remainder = Calculator::get()->divR($this->value, $that->value); + + return new BigInteger($remainder); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger[] An array containing the quotient and the remainder. + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [$quotient, $remainder] = Calculator::get()->divQR($this->value, $that->value); + + return [ + new BigInteger($quotient), + new BigInteger($remainder) + ]; + } + + /** + * Returns the modulo of this number and the given one. + * + * The modulo operation yields the same result as the remainder operation when both operands are of the same sign, + * and may differ when signs are different. + * + * The result of the modulo operation, when non-zero, has the same sign as the divisor. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function mod($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + return $this->remainder($that)->plus($that)->remainder($that); + } + + /** + * Returns this number raised into power with modulo. + * + * This operation only works on positive numbers. + * + * @param BigNumber|int|float|string $exp The positive exponent. + * @param BigNumber|int|float|string $mod The modulo. Must not be zero. + * + * @return BigInteger + * + * @throws NegativeNumberException If any of the operands is negative. + * @throws DivisionByZeroException If the modulo is zero. + */ + public function powerMod($exp, $mod) : BigInteger + { + $exp = BigInteger::of($exp); + $mod = BigInteger::of($mod); + + if ($this->isNegative() || $exp->isNegative() || $mod->isNegative()) { + throw new NegativeNumberException('The operands cannot be negative.'); + } + + if ($mod->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $result = Calculator::get()->powmod($this->value, $exp->value, $mod->value); + + return new BigInteger($result); + } + + /** + * Returns the greatest common divisor of this number and the given one. + * + * The GCD is always positive, unless both operands are zero, in which case it is zero. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function gcd($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0' && $this->value[0] !== '-') { + return $this; + } + + if ($this->value === '0' && $that->value[0] !== '-') { + return $that; + } + + $value = Calculator::get()->gcd($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the integer square root number of this number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * + * @return BigInteger + * + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt() : BigInteger + { + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = Calculator::get()->sqrt($this->value); + + return new BigInteger($value); + } + + /** + * Returns the absolute value of this number. + * + * @return BigInteger + */ + public function abs() : BigInteger + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the inverse of this number. + * + * @return BigInteger + */ + public function negated() : BigInteger + { + return new BigInteger(Calculator::get()->neg($this->value)); + } + + /** + * Returns the integer bitwise-and combined with another integer. + * + * This method returns a negative BigInteger if and only if both operands are negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function and($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->and($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-or combined with another integer. + * + * This method returns a negative BigInteger if and only if either of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function or($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->or($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-xor combined with another integer. + * + * This method returns a negative BigInteger if and only if exactly one of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function xor($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->xor($this->value, $that->value)); + } + + /** + * Returns the integer left shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedLeft(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedRight(- $distance); + } + + return $this->multipliedBy(BigInteger::of(2)->power($distance)); + } + + /** + * Returns the integer right shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedRight(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedLeft(- $distance); + } + + $operand = BigInteger::of(2)->power($distance); + + if ($this->isPositiveOrZero()) { + return $this->quotient($operand); + } + + return $this->dividedBy($operand, RoundingMode::UP); + } + + /** + * Returns the number of bits in the minimal two's-complement representation of this BigInteger, excluding a sign bit. + * + * For positive BigIntegers, this is equivalent to the number of bits in the ordinary binary representation. + * Computes (ceil(log2(this < 0 ? -this : this+1))). + * + * @return int + */ + public function getBitLength() : int + { + if ($this->value === '0') { + return 0; + } + + if ($this->isNegative()) { + return $this->abs()->minus(1)->getBitLength(); + } + + return strlen($this->toBase(2)); + } + + /** + * Returns the index of the rightmost (lowest-order) one bit in this BigInteger. + * + * Returns -1 if this BigInteger contains no one bits. + * + * @return int + */ + public function getLowestSetBit() : int + { + $n = $this; + $bitLength = $this->getBitLength(); + + for ($i = 0; $i <= $bitLength; $i++) { + if ($n->isOdd()) { + return $i; + } + + $n = $n->shiftedRight(1); + } + + return -1; + } + + /** + * Returns whether this number is even. + * + * @return bool + */ + public function isEven() : bool + { + return in_array($this->value[-1], ['0', '2', '4', '6', '8'], true); + } + + /** + * Returns whether this number is odd. + * + * @return bool + */ + public function isOdd() : bool + { + return in_array($this->value[-1], ['1', '3', '5', '7', '9'], true); + } + + /** + * Returns true if and only if the designated bit is set. + * + * Computes ((this & (1<<n)) != 0). + * + * @param int $n The bit to test, 0-based. + * + * @return bool + */ + public function testBit(int $n) : bool + { + if ($n < 0) { + throw new \InvalidArgumentException('The bit to test cannot be negative.'); + } + + return $this->shiftedRight($n)->isOdd(); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + return Calculator::get()->cmp($this->value, $that->value); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return BigDecimal::create($this->value); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return BigRational::create($this, BigInteger::one(), false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->toBigDecimal()->toScale($scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + $intValue = (int) $this->value; + + if ($this->value !== (string) $intValue) { + throw IntegerOverflowException::toIntOverflow($this); + } + + return $intValue; + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) $this->value; + } + + /** + * Returns a string representation of this number in the given base. + * + * The output will always be lowercase for bases greater than 10. + * + * @param int $base + * + * @return string + * + * @throws \InvalidArgumentException If the base is out of range. + */ + public function toBase(int $base) : string + { + if ($base === 10) { + return $this->value; + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is out of range [2, 36]', $base)); + } + + return Calculator::get()->toBase($this->value, $base); + } + + /** + * Returns a string representation of this number in an arbitrary base with a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers; + * a NegativeNumberException will be thrown when attempting to call this method on a negative number. + * + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return string + * + * @throws NegativeNumberException If this number is negative. + * @throws \InvalidArgumentException If the given alphabet does not contain at least 2 chars. + */ + public function toArbitraryBase(string $alphabet) : string + { + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException(__FUNCTION__ . '() does not support negative numbers.'); + } + + return Calculator::get()->toArbitraryBase($this->value, $alphabet, $base); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + return $this->value; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $value; + } +} diff --git a/civicrm/vendor/brick/math/src/BigNumber.php b/civicrm/vendor/brick/math/src/BigNumber.php new file mode 100644 index 0000000000000000000000000000000000000000..acd6b3d506de4c9fd24200d8cd3e9500b8f2ef55 --- /dev/null +++ b/civicrm/vendor/brick/math/src/BigNumber.php @@ -0,0 +1,528 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math; + +use Brick\Math\Exception\DivisionByZeroException; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\NumberFormatException; +use Brick\Math\Exception\RoundingNecessaryException; + +/** + * Common interface for arbitrary-precision rational numbers. + * + * @psalm-immutable + */ +abstract class BigNumber implements \Serializable, \JsonSerializable +{ + /** + * The regular expression used to parse integer, decimal and rational numbers. + * + * @var string + */ + private const PARSE_REGEXP = + '/^' . + '(?<integral>[\-\+]?[0-9]+)' . + '(?:' . + '(?:' . + '(?:\.(?<fractional>[0-9]+))?' . + '(?:[eE](?<exponent>[\-\+]?[0-9]+))?' . + ')' . '|' . '(?:' . + '(?:\/(?<denominator>[0-9]+))?' . + ')' . + ')?' . + '$/'; + + /** + * Creates a BigNumber of the given value. + * + * The concrete return type is dependent on the given value, with the following rules: + * + * - BigNumber instances are returned as is + * - integer numbers are returned as BigInteger + * - floating point numbers are converted to a string then parsed as such + * - strings containing a `/` character are returned as BigRational + * - strings containing a `.` character or using an exponential notation are returned as BigDecimal + * - strings containing only digits with an optional leading `+` or `-` sign are returned as BigInteger + * + * @param BigNumber|int|float|string $value + * + * @return BigNumber + * + * @throws NumberFormatException If the format of the number is not valid. + * @throws DivisionByZeroException If the value represents a rational number with a denominator of zero. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + if ($value instanceof BigNumber) { + return $value; + } + + if (\is_int($value)) { + return new BigInteger((string) $value); + } + + if (is_float($value)) { + $value = self::floatToString($value); + } else { + $value = (string) $value; + } + + if (\preg_match(self::PARSE_REGEXP, $value, $matches) !== 1) { + throw new NumberFormatException(\sprintf('The given value "%s" does not represent a valid number.', $value)); + } + + if (isset($matches['denominator'])) { + $numerator = self::cleanUp($matches['integral']); + $denominator = \ltrim($matches['denominator'], '0'); + + if ($denominator === '') { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + return new BigRational(new BigInteger($numerator), new BigInteger($denominator), false); + } + + if (isset($matches['fractional']) || isset($matches['exponent'])) { + $fractional = isset($matches['fractional']) ? $matches['fractional'] : ''; + $exponent = isset($matches['exponent']) ? (int) $matches['exponent'] : 0; + + $unscaledValue = self::cleanUp($matches['integral'] . $fractional); + + $scale = \strlen($fractional) - $exponent; + + if ($scale < 0) { + if ($unscaledValue !== '0') { + $unscaledValue .= \str_repeat('0', - $scale); + } + $scale = 0; + } + + return new BigDecimal($unscaledValue, $scale); + } + + $integral = self::cleanUp($matches['integral']); + + return new BigInteger($integral); + } + + /** + * Safely converts float to string, avoiding locale-dependent issues. + * + * @see https://github.com/brick/math/pull/20 + * + * @param float $float + * + * @return string + * + * @psalm-pure + * @psalm-suppress ImpureFunctionCall + */ + private static function floatToString(float $float) : string + { + $currentLocale = \setlocale(LC_NUMERIC, '0'); + \setlocale(LC_NUMERIC, 'C'); + + $result = (string) $float; + + \setlocale(LC_NUMERIC, $currentLocale); + + return $result; + } + + /** + * Proxy method to access protected constructors from sibling classes. + * + * @internal + * + * @param mixed ...$args The arguments to the constructor. + * + * @return static + * + * @psalm-pure + */ + protected static function create(... $args) : BigNumber + { + /** @psalm-suppress TooManyArguments */ + return new static(... $args); + } + + /** + * Returns the minimum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The minimum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function min(...$values) : BigNumber + { + $min = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($min === null || $value->isLessThan($min)) { + $min = $value; + } + } + + if ($min === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $min; + } + + /** + * Returns the maximum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The maximum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function max(...$values) : BigNumber + { + $max = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($max === null || $value->isGreaterThan($max)) { + $max = $value; + } + } + + if ($max === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $max; + } + + /** + * Returns the sum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to add. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The sum. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function sum(...$values) : BigNumber + { + /** @var BigNumber|null $sum */ + $sum = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($sum === null) { + $sum = $value; + } else { + $sum = self::add($sum, $value); + } + } + + if ($sum === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $sum; + } + + /** + * Adds two BigNumber instances in the correct order to avoid a RoundingNecessaryException. + * + * @todo This could be better resolved by creating an abstract protected method in BigNumber, and leaving to + * concrete classes the responsibility to perform the addition themselves or delegate it to the given number, + * depending on their ability to perform the operation. This will also require a version bump because we're + * potentially breaking custom BigNumber implementations (if any...) + * + * @param BigNumber $a + * @param BigNumber $b + * + * @return BigNumber + * + * @psalm-pure + */ + private static function add(BigNumber $a, BigNumber $b) : BigNumber + { + if ($a instanceof BigRational) { + return $a->plus($b); + } + + if ($b instanceof BigRational) { + return $b->plus($a); + } + + if ($a instanceof BigDecimal) { + return $a->plus($b); + } + + if ($b instanceof BigDecimal) { + return $b->plus($a); + } + + /** @var BigInteger $a */ + + return $a->plus($b); + } + + /** + * Removes optional leading zeros and + sign from the given number. + * + * @param string $number The number, validated as a non-empty string of digits with optional sign. + * + * @return string + * + * @psalm-pure + */ + private static function cleanUp(string $number) : string + { + $firstChar = $number[0]; + + if ($firstChar === '+' || $firstChar === '-') { + $number = \substr($number, 1); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + return '0'; + } + + if ($firstChar === '-') { + return '-' . $number; + } + + return $number; + } + + /** + * Checks if this number is equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isEqualTo($that) : bool + { + return $this->compareTo($that) === 0; + } + + /** + * Checks if this number is strictly lower than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThan($that) : bool + { + return $this->compareTo($that) < 0; + } + + /** + * Checks if this number is lower than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThanOrEqualTo($that) : bool + { + return $this->compareTo($that) <= 0; + } + + /** + * Checks if this number is strictly greater than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThan($that) : bool + { + return $this->compareTo($that) > 0; + } + + /** + * Checks if this number is greater than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThanOrEqualTo($that) : bool + { + return $this->compareTo($that) >= 0; + } + + /** + * Checks if this number equals zero. + * + * @return bool + */ + public function isZero() : bool + { + return $this->getSign() === 0; + } + + /** + * Checks if this number is strictly negative. + * + * @return bool + */ + public function isNegative() : bool + { + return $this->getSign() < 0; + } + + /** + * Checks if this number is negative or zero. + * + * @return bool + */ + public function isNegativeOrZero() : bool + { + return $this->getSign() <= 0; + } + + /** + * Checks if this number is strictly positive. + * + * @return bool + */ + public function isPositive() : bool + { + return $this->getSign() > 0; + } + + /** + * Checks if this number is positive or zero. + * + * @return bool + */ + public function isPositiveOrZero() : bool + { + return $this->getSign() >= 0; + } + + /** + * Returns the sign of this number. + * + * @return int -1 if the number is negative, 0 if zero, 1 if positive. + */ + abstract public function getSign() : int; + + /** + * Compares this number to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return int [-1,0,1] If `$this` is lower than, equal to, or greater than `$that`. + * + * @throws MathException If the number is not valid. + */ + abstract public function compareTo($that) : int; + + /** + * Converts this number to a BigInteger. + * + * @return BigInteger The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigInteger without rounding. + */ + abstract public function toBigInteger() : BigInteger; + + /** + * Converts this number to a BigDecimal. + * + * @return BigDecimal The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigDecimal without rounding. + */ + abstract public function toBigDecimal() : BigDecimal; + + /** + * Converts this number to a BigRational. + * + * @return BigRational The converted number. + */ + abstract public function toBigRational() : BigRational; + + /** + * Converts this number to a BigDecimal with the given scale, using rounding if necessary. + * + * @param int $scale The scale of the resulting `BigDecimal`. + * @param int $roundingMode A `RoundingMode` constant. + * + * @return BigDecimal + * + * @throws RoundingNecessaryException If this number cannot be converted to the given scale without rounding. + * This only applies when RoundingMode::UNNECESSARY is used. + */ + abstract public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal; + + /** + * Returns the exact value of this number as a native integer. + * + * If this number cannot be converted to a native integer without losing precision, an exception is thrown. + * Note that the acceptable range for an integer depends on the platform and differs for 32-bit and 64-bit. + * + * @return int The converted value. + * + * @throws MathException If this number cannot be exactly converted to a native integer. + */ + abstract public function toInt() : int; + + /** + * Returns an approximation of this number as a floating-point value. + * + * Note that this method can discard information as the precision of a floating-point value + * is inherently limited. + * + * If the number is greater than the largest representable floating point number, positive infinity is returned. + * If the number is less than the smallest representable floating point number, negative infinity is returned. + * + * @return float The converted value. + */ + abstract public function toFloat() : float; + + /** + * Returns a string representation of this number. + * + * The output of this method can be parsed by the `of()` factory method; + * this will yield an object equal to this one, without any information loss. + * + * @return string + */ + abstract public function __toString() : string; + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : string + { + return $this->__toString(); + } +} diff --git a/civicrm/vendor/brick/math/src/BigRational.php b/civicrm/vendor/brick/math/src/BigRational.php new file mode 100644 index 0000000000000000000000000000000000000000..ff035c5c068a182a70de42d3b71fe31ed58888bb --- /dev/null +++ b/civicrm/vendor/brick/math/src/BigRational.php @@ -0,0 +1,479 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math; + +use Brick\Math\Exception\DivisionByZeroException; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\NumberFormatException; +use Brick\Math\Exception\RoundingNecessaryException; + +/** + * An arbitrarily large rational number. + * + * This class is immutable. + * + * @psalm-immutable + */ +final class BigRational extends BigNumber +{ + /** + * The numerator. + * + * @var BigInteger + */ + private $numerator; + + /** + * The denominator. Always strictly positive. + * + * @var BigInteger + */ + private $denominator; + + /** + * Protected constructor. Use a factory method to obtain an instance. + * + * @param BigInteger $numerator The numerator. + * @param BigInteger $denominator The denominator. + * @param bool $checkDenominator Whether to check the denominator for negative and zero. + * + * @throws DivisionByZeroException If the denominator is zero. + */ + protected function __construct(BigInteger $numerator, BigInteger $denominator, bool $checkDenominator) + { + if ($checkDenominator) { + if ($denominator->isZero()) { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + if ($denominator->isNegative()) { + $numerator = $numerator->negated(); + $denominator = $denominator->negated(); + } + } + + $this->numerator = $numerator; + $this->denominator = $denominator; + } + + /** + * Creates a BigRational of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigRational + * + * @throws MathException If the value cannot be converted to a BigRational. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigRational(); + } + + /** + * Creates a BigRational out of a numerator and a denominator. + * + * If the denominator is negative, the signs of both the numerator and the denominator + * will be inverted to ensure that the denominator is always positive. + * + * @param BigNumber|int|float|string $numerator The numerator. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $denominator The denominator. Must be convertible to a BigInteger. + * + * @return BigRational + * + * @throws NumberFormatException If an argument does not represent a valid number. + * @throws RoundingNecessaryException If an argument represents a non-integer number. + * @throws DivisionByZeroException If the denominator is zero. + * + * @psalm-pure + */ + public static function nd($numerator, $denominator) : BigRational + { + $numerator = BigInteger::of($numerator); + $denominator = BigInteger::of($denominator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns a BigRational representing zero. + * + * @return BigRational + * + * @psalm-pure + */ + public static function zero() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigRational(BigInteger::zero(), BigInteger::one(), false); + } + + return $zero; + } + + /** + * Returns a BigRational representing one. + * + * @return BigRational + * + * @psalm-pure + */ + public static function one() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigRational(BigInteger::one(), BigInteger::one(), false); + } + + return $one; + } + + /** + * Returns a BigRational representing ten. + * + * @return BigRational + * + * @psalm-pure + */ + public static function ten() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigRational(BigInteger::ten(), BigInteger::one(), false); + } + + return $ten; + } + + /** + * @return BigInteger + */ + public function getNumerator() : BigInteger + { + return $this->numerator; + } + + /** + * @return BigInteger + */ + public function getDenominator() : BigInteger + { + return $this->denominator; + } + + /** + * Returns the quotient of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function quotient() : BigInteger + { + return $this->numerator->quotient($this->denominator); + } + + /** + * Returns the remainder of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function remainder() : BigInteger + { + return $this->numerator->remainder($this->denominator); + } + + /** + * Returns the quotient and remainder of the division of the numerator by the denominator. + * + * @return BigInteger[] + */ + public function quotientAndRemainder() : array + { + return $this->numerator->quotientAndRemainder($this->denominator); + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function plus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->plus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function minus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->minus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. + * + * @return BigRational The result. + * + * @throws MathException If the multiplier is not a valid number. + */ + public function multipliedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->numerator); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. + * + * @return BigRational The result. + * + * @throws MathException If the divisor is not a valid number, or is zero. + */ + public function dividedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $denominator = $this->denominator->multipliedBy($that->numerator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigRational The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigRational + { + if ($exponent === 0) { + $one = BigInteger::one(); + + return new BigRational($one, $one, false); + } + + if ($exponent === 1) { + return $this; + } + + return new BigRational( + $this->numerator->power($exponent), + $this->denominator->power($exponent), + false + ); + } + + /** + * Returns the reciprocal of this BigRational. + * + * The reciprocal has the numerator and denominator swapped. + * + * @return BigRational + * + * @throws DivisionByZeroException If the numerator is zero. + */ + public function reciprocal() : BigRational + { + return new BigRational($this->denominator, $this->numerator, true); + } + + /** + * Returns the absolute value of this BigRational. + * + * @return BigRational + */ + public function abs() : BigRational + { + return new BigRational($this->numerator->abs(), $this->denominator, false); + } + + /** + * Returns the negated value of this BigRational. + * + * @return BigRational + */ + public function negated() : BigRational + { + return new BigRational($this->numerator->negated(), $this->denominator, false); + } + + /** + * Returns the simplified value of this BigRational. + * + * @return BigRational + */ + public function simplified() : BigRational + { + $gcd = $this->numerator->gcd($this->denominator); + + $numerator = $this->numerator->quotient($gcd); + $denominator = $this->denominator->quotient($gcd); + + return new BigRational($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + return $this->minus($that)->getSign(); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return $this->numerator->getSign(); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + $simplified = $this->simplified(); + + if (! $simplified->denominator->isEqualTo(1)) { + throw new RoundingNecessaryException('This rational number cannot be represented as an integer value without rounding.'); + } + + return $simplified->numerator; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this->numerator->toBigDecimal()->exactlyDividedBy($this->denominator); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->numerator->toBigDecimal()->dividedBy($this->denominator, $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return $this->numerator->toFloat() / $this->denominator->toFloat(); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + $numerator = (string) $this->numerator; + $denominator = (string) $this->denominator; + + if ($denominator === '1') { + return $numerator; + } + + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->numerator)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$numerator, $denominator] = \explode('/', $value); + + $this->numerator = BigInteger::of($numerator); + $this->denominator = BigInteger::of($denominator); + } +} diff --git a/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php b/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php new file mode 100644 index 0000000000000000000000000000000000000000..49a9157f1145ccf888eb82326a7acf99264e9700 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +/** + * Exception thrown when a division by zero occurs. + */ +class DivisionByZeroException extends MathException +{ + /** + * @return DivisionByZeroException + * + * @psalm-pure + */ + public static function divisionByZero() : DivisionByZeroException + { + return new self('Division by zero.'); + } + + /** + * @return DivisionByZeroException + * + * @psalm-pure + */ + public static function denominatorMustNotBeZero() : DivisionByZeroException + { + return new self('The denominator of a rational number cannot be zero.'); + } +} diff --git a/civicrm/vendor/brick/math/src/Exception/IntegerOverflowException.php b/civicrm/vendor/brick/math/src/Exception/IntegerOverflowException.php new file mode 100644 index 0000000000000000000000000000000000000000..e0b07d3c73c27611ac259e19064163a14e4e4f68 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/IntegerOverflowException.php @@ -0,0 +1,27 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +use Brick\Math\BigInteger; + +/** + * Exception thrown when an integer overflow occurs. + */ +class IntegerOverflowException extends MathException +{ + /** + * @param BigInteger $value + * + * @return IntegerOverflowException + * + * @psalm-pure + */ + public static function toIntOverflow(BigInteger $value) : IntegerOverflowException + { + $message = '%s is out of range %d to %d and cannot be represented as an integer.'; + + return new self(\sprintf($message, (string) $value, PHP_INT_MIN, PHP_INT_MAX)); + } +} diff --git a/civicrm/vendor/brick/math/src/Exception/MathException.php b/civicrm/vendor/brick/math/src/Exception/MathException.php new file mode 100644 index 0000000000000000000000000000000000000000..3fc37a0d7d3f70bdf4425dcfe8b689f40f910881 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/MathException.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +/** + * Base class for all math exceptions. + * + * This class is abstract to ensure that only fine-grained exceptions are thrown throughout the code. + */ +abstract class MathException extends \RuntimeException +{ +} diff --git a/civicrm/vendor/brick/math/src/Exception/NegativeNumberException.php b/civicrm/vendor/brick/math/src/Exception/NegativeNumberException.php new file mode 100644 index 0000000000000000000000000000000000000000..4739113418d65d1ad3001268a521925e1752c067 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/NegativeNumberException.php @@ -0,0 +1,12 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +/** + * Exception thrown when attempting to perform an unsupported operation, such as a square root, on a negative number. + */ +class NegativeNumberException extends MathException +{ +} diff --git a/civicrm/vendor/brick/math/src/Exception/NumberFormatException.php b/civicrm/vendor/brick/math/src/Exception/NumberFormatException.php new file mode 100644 index 0000000000000000000000000000000000000000..2fd0be73a626288df9f6470bbb16bca4bcef17ba --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/NumberFormatException.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +/** + * Exception thrown when attempting to create a number from a string with an invalid format. + */ +class NumberFormatException extends MathException +{ + /** + * @param string $char The failing character. + * + * @return NumberFormatException + * + * @psalm-pure + */ + public static function charNotInAlphabet(string $char) : self + { + $ord = \ord($char); + + if ($ord < 32 || $ord > 126) { + $char = \strtoupper(\dechex($ord)); + + if ($ord < 10) { + $char = '0' . $char; + } + } else { + $char = '"' . $char . '"'; + } + + return new self(sprintf('Char %s is not a valid character in the given alphabet.', $char)); + } +} diff --git a/civicrm/vendor/brick/math/src/Exception/RoundingNecessaryException.php b/civicrm/vendor/brick/math/src/Exception/RoundingNecessaryException.php new file mode 100644 index 0000000000000000000000000000000000000000..1c61005637a44c107a5cf3d257239c1af45e9571 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Exception/RoundingNecessaryException.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Exception; + +/** + * Exception thrown when a number cannot be represented at the requested scale without rounding. + */ +class RoundingNecessaryException extends MathException +{ + /** + * @return RoundingNecessaryException + * + * @psalm-pure + */ + public static function roundingNecessary() : RoundingNecessaryException + { + return new self('Rounding is necessary to represent the result of the operation at this scale.'); + } +} diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator.php new file mode 100644 index 0000000000000000000000000000000000000000..3e59a2961e08fc9e344c9a61f3939f25687fc517 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Internal/Calculator.php @@ -0,0 +1,686 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Internal; + +use Brick\Math\Exception\RoundingNecessaryException; +use Brick\Math\RoundingMode; + +/** + * Performs basic operations on arbitrary size integers. + * + * Unless otherwise specified, all parameters must be validated as non-empty strings of digits, + * without leading zero, and with an optional leading minus sign if the number is not zero. + * + * Any other parameter format will lead to undefined behaviour. + * All methods must return strings respecting this format, unless specified otherwise. + * + * @internal + * + * @psalm-immutable + */ +abstract class Calculator +{ + /** + * The maximum exponent value allowed for the pow() method. + */ + public const MAX_POWER = 1000000; + + /** + * The alphabet for converting from and to base 2 to 36, lowercase. + */ + public const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; + + /** + * The Calculator instance in use. + * + * @var Calculator|null + */ + private static $instance; + + /** + * Sets the Calculator instance to use. + * + * An instance is typically set only in unit tests: the autodetect is usually the best option. + * + * @param Calculator|null $calculator The calculator instance, or NULL to revert to autodetect. + * + * @return void + */ + final public static function set(?Calculator $calculator) : void + { + self::$instance = $calculator; + } + + /** + * Returns the Calculator instance to use. + * + * If none has been explicitly set, the fastest available implementation will be returned. + * + * @return Calculator + * + * @psalm-pure + * @psalm-suppress ImpureStaticProperty + */ + final public static function get() : Calculator + { + if (self::$instance === null) { + /** @psalm-suppress ImpureMethodCall */ + self::$instance = self::detect(); + } + + return self::$instance; + } + + /** + * Returns the fastest available Calculator implementation. + * + * @codeCoverageIgnore + * + * @return Calculator + */ + private static function detect() : Calculator + { + if (\extension_loaded('gmp')) { + return new Calculator\GmpCalculator(); + } + + if (\extension_loaded('bcmath')) { + return new Calculator\BcMathCalculator(); + } + + return new Calculator\NativeCalculator(); + } + + /** + * Extracts the sign & digits of the operands. + * + * @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. + */ + final protected function init(string $a, string $b) : array + { + return [ + $aNeg = ($a[0] === '-'), + $bNeg = ($b[0] === '-'), + + $aNeg ? \substr($a, 1) : $a, + $bNeg ? \substr($b, 1) : $b, + ]; + } + + /** + * Returns the absolute value of a number. + * + * @param string $n The number. + * + * @return string The absolute value. + */ + final public function abs(string $n) : string + { + return ($n[0] === '-') ? \substr($n, 1) : $n; + } + + /** + * Negates a number. + * + * @param string $n The number. + * + * @return string The negated value. + */ + final public function neg(string $n) : string + { + if ($n === '0') { + return '0'; + } + + if ($n[0] === '-') { + return \substr($n, 1); + } + + return '-' . $n; + } + + /** + * Compares two numbers. + * + * @param string $a The first number. + * @param string $b The second number. + * + * @return int [-1, 0, 1] If the first number is less than, equal to, or greater than the second number. + */ + final public function cmp(string $a, string $b) : int + { + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + if ($aNeg && ! $bNeg) { + return -1; + } + + if ($bNeg && ! $aNeg) { + return 1; + } + + $aLen = \strlen($aDig); + $bLen = \strlen($bDig); + + if ($aLen < $bLen) { + $result = -1; + } elseif ($aLen > $bLen) { + $result = 1; + } else { + $result = $aDig <=> $bDig; + } + + return $aNeg ? -$result : $result; + } + + /** + * Adds two numbers. + * + * @param string $a The augend. + * @param string $b The addend. + * + * @return string The sum. + */ + abstract public function add(string $a, string $b) : string; + + /** + * Subtracts two numbers. + * + * @param string $a The minuend. + * @param string $b The subtrahend. + * + * @return string The difference. + */ + abstract public function sub(string $a, string $b) : string; + + /** + * Multiplies two numbers. + * + * @param string $a The multiplicand. + * @param string $b The multiplier. + * + * @return string The product. + */ + abstract public function mul(string $a, string $b) : string; + + /** + * Returns the quotient of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The quotient. + */ + abstract public function divQ(string $a, string $b) : string; + + /** + * Returns the remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The remainder. + */ + abstract public function divR(string $a, string $b) : string; + + /** + * Returns the quotient and remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string[] An array containing the quotient and remainder. + */ + abstract public function divQR(string $a, string $b) : array; + + /** + * Exponentiates a number. + * + * @param string $a The base number. + * @param int $e The exponent, validated as an integer between 0 and MAX_POWER. + * + * @return string The power. + */ + abstract public function pow(string $a, int $e) : string; + + /** + * Raises a number into power with modulo. + * + * @param string $base The base number; must be positive or zero. + * @param string $exp The exponent; must be positive or zero. + * @param string $mod The modulo; must be strictly positive. + * + * @return string The power. + */ + abstract function powmod(string $base, string $exp, string $mod) : string; + + /** + * Returns the greatest common divisor of the two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for GCD calculations. + * + * @param string $a The first number. + * @param string $b The second number. + * + * @return string The GCD, always positive, or zero if both arguments are zero. + */ + public function gcd(string $a, string $b) : string + { + if ($a === '0') { + return $this->abs($b); + } + + if ($b === '0') { + return $this->abs($a); + } + + return $this->gcd($b, $this->divR($a, $b)); + } + + /** + * Returns the square root of the given number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * The input MUST NOT be negative. + * + * @param string $n The number. + * + * @return string The square root. + */ + abstract public function sqrt(string $n) : string; + + /** + * Converts a number from an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number, positive or zero, non-empty, case-insensitively validated for the given base. + * @param int $base The base of the number, validated from 2 to 36. + * + * @return string The converted number, following the Calculator conventions. + */ + public function fromBase(string $number, int $base) : string + { + return $this->fromArbitraryBase(\strtolower($number), self::ALPHABET, $base); + } + + /** + * Converts a number to an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number to convert, following the Calculator conventions. + * @param int $base The base to convert to, validated from 2 to 36. + * + * @return string The converted number, lowercase. + */ + public function toBase(string $number, int $base) : string + { + $negative = ($number[0] === '-'); + + if ($negative) { + $number = \substr($number, 1); + } + + $number = $this->toArbitraryBase($number, self::ALPHABET, $base); + + if ($negative) { + return '-' . $number; + } + + return $number; + } + + /** + * Converts a non-negative number in an arbitrary base using a custom alphabet, to base 10. + * + * @param string $number The number to convert, validated as a non-empty string, + * containing only chars in the given alphabet/base. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base of the number, validated from 2 to alphabet length. + * + * @return string The number in base 10, following the Calculator conventions. + */ + final public function fromArbitraryBase(string $number, string $alphabet, int $base) : string + { + // remove leading "zeros" + $number = \ltrim($number, $alphabet[0]); + + if ($number === '') { + return '0'; + } + + // optimize for "one" + if ($number === $alphabet[1]) { + return '1'; + } + + $result = '0'; + $power = '1'; + + $base = (string) $base; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $index = \strpos($alphabet, $number[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, $base); + } + } + + return $result; + } + + /** + * Converts a non-negative number to an arbitrary base using a custom alphabet. + * + * @param string $number The number to convert, positive or zero, following the Calculator conventions. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base to convert to, validated from 2 to alphabet length. + * + * @return string The converted number in the given alphabet. + */ + final public function toArbitraryBase(string $number, string $alphabet, int $base) : string + { + if ($number === '0') { + return $alphabet[0]; + } + + $base = (string) $base; + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, $base); + $remainder = (int) $remainder; + + $result .= $alphabet[$remainder]; + } + + return \strrev($result); + } + + /** + * Performs a rounded division. + * + * Rounding is performed when the remainder of the division is not zero. + * + * @param string $a The dividend. + * @param string $b The divisor. + * @param int $roundingMode The rounding mode. + * + * @return string + * + * @throws \InvalidArgumentException If the rounding mode is invalid. + * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is provided but rounding is necessary. + */ + final public function divRound(string $a, string $b, int $roundingMode) : string + { + [$quotient, $remainder] = $this->divQR($a, $b); + + $hasDiscardedFraction = ($remainder !== '0'); + $isPositiveOrZero = ($a[0] === '-') === ($b[0] === '-'); + + $discardedFractionSign = function() use ($remainder, $b) : int { + $r = $this->abs($this->mul($remainder, '2')); + $b = $this->abs($b); + + return $this->cmp($r, $b); + }; + + $increment = false; + + switch ($roundingMode) { + case RoundingMode::UNNECESSARY: + if ($hasDiscardedFraction) { + throw RoundingNecessaryException::roundingNecessary(); + } + break; + + case RoundingMode::UP: + $increment = $hasDiscardedFraction; + break; + + case RoundingMode::DOWN: + break; + + case RoundingMode::CEILING: + $increment = $hasDiscardedFraction && $isPositiveOrZero; + break; + + case RoundingMode::FLOOR: + $increment = $hasDiscardedFraction && ! $isPositiveOrZero; + break; + + case RoundingMode::HALF_UP: + $increment = $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_DOWN: + $increment = $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_CEILING: + $increment = $isPositiveOrZero ? $discardedFractionSign() >= 0 : $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_FLOOR: + $increment = $isPositiveOrZero ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_EVEN: + $lastDigit = (int) $quotient[-1]; + $lastDigitIsEven = ($lastDigit % 2 === 0); + $increment = $lastDigitIsEven ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + default: + throw new \InvalidArgumentException('Invalid rounding mode.'); + } + + if ($increment) { + return $this->add($quotient, $isPositiveOrZero ? '1' : '-1'); + } + + return $quotient; + } + + /** + * Calculates bitwise AND of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function and(string $a, string $b) : string + { + return $this->bitwise('and', $a, $b); + } + + /** + * Calculates bitwise OR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function or(string $a, string $b) : string + { + return $this->bitwise('or', $a, $b); + } + + /** + * Calculates bitwise XOR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function xor(string $a, string $b) : string + { + return $this->bitwise('xor', $a, $b); + } + + /** + * Performs a bitwise operation on a decimal number. + * + * @param string $operator The operator to use, must be "and", "or" or "xor". + * @param string $a The left operand. + * @param string $b The right operand. + * + * @return string + */ + private function bitwise(string $operator, string $a, string $b) : string + { + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $aBin = $this->toBinary($aDig); + $bBin = $this->toBinary($bDig); + + $aLen = \strlen($aBin); + $bLen = \strlen($bBin); + + if ($aLen > $bLen) { + $bBin = \str_repeat("\x00", $aLen - $bLen) . $bBin; + } elseif ($bLen > $aLen) { + $aBin = \str_repeat("\x00", $bLen - $aLen) . $aBin; + } + + if ($aNeg) { + $aBin = $this->twosComplement($aBin); + } + if ($bNeg) { + $bBin = $this->twosComplement($bBin); + } + + switch ($operator) { + case 'and': + $value = $aBin & $bBin; + $negative = ($aNeg and $bNeg); + break; + + case 'or': + $value = $aBin | $bBin; + $negative = ($aNeg or $bNeg); + break; + + case 'xor': + $value = $aBin ^ $bBin; + $negative = ($aNeg xor $bNeg); + break; + + // @codeCoverageIgnoreStart + default: + throw new \InvalidArgumentException('Invalid bitwise operator.'); + // @codeCoverageIgnoreEnd + } + + if ($negative) { + $value = $this->twosComplement($value); + } + + $result = $this->toDecimal($value); + + return $negative ? $this->neg($result) : $result; + } + + /** + * @param string $number A positive, binary number. + * + * @return string + */ + private function twosComplement(string $number) : string + { + $xor = \str_repeat("\xff", \strlen($number)); + + $number = $number ^ $xor; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $byte = \ord($number[$i]); + + if (++$byte !== 256) { + $number[$i] = \chr($byte); + break; + } + + $number[$i] = \chr(0); + } + + return $number; + } + + /** + * Converts a decimal number to a binary string. + * + * @param string $number The number to convert, positive or zero, only digits. + * + * @return string + */ + private function toBinary(string $number) : string + { + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, '256'); + $result .= \chr((int) $remainder); + } + + return \strrev($result); + } + + /** + * Returns the positive decimal representation of a binary number. + * + * @param string $bytes The bytes representing the number. + * + * @return string + */ + private function toDecimal(string $bytes) : string + { + $result = '0'; + $power = '1'; + + for ($i = \strlen($bytes) - 1; $i >= 0; $i--) { + $index = \ord($bytes[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, '256'); + } + } + + return $result; + } +} diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php new file mode 100644 index 0000000000000000000000000000000000000000..944ee9edb8c2d2e6f75498a2fdcfbba1baf2f01d --- /dev/null +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php @@ -0,0 +1,92 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Internal\Calculator; + +use Brick\Math\Internal\Calculator; + +/** + * Calculator implementation built around the bcmath library. + * + * @internal + * + * @psalm-immutable + */ +class BcMathCalculator extends Calculator +{ + /** + * {@inheritdoc} + */ + public function add(string $a, string $b) : string + { + return \bcadd($a, $b, 0); + } + + /** + * {@inheritdoc} + */ + public function sub(string $a, string $b) : string + { + return \bcsub($a, $b, 0); + } + + /** + * {@inheritdoc} + */ + public function mul(string $a, string $b) : string + { + return \bcmul($a, $b, 0); + } + + /** + * {@inheritdoc} + */ + public function divQ(string $a, string $b) : string + { + return \bcdiv($a, $b, 0); + } + + /** + * {@inheritdoc} + */ + public function divR(string $a, string $b) : string + { + return \bcmod($a, $b); + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + $q = \bcdiv($a, $b, 0); + $r = \bcmod($a, $b); + + return [$q, $r]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + return \bcpow($a, (string) $e, 0); + } + + /** + * {@inheritdoc} + */ + public function powmod(string $base, string $exp, string $mod) : string + { + return \bcpowmod($base, $exp, $mod, 0); + } + + /** + * {@inheritDoc} + */ + public function sqrt(string $n) : string + { + return \bcsqrt($n, 0); + } +} diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php new file mode 100644 index 0000000000000000000000000000000000000000..01926da8756d89812d0c8ca1d0285234c1a9c995 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php @@ -0,0 +1,142 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Internal\Calculator; + +use Brick\Math\Internal\Calculator; + +/** + * Calculator implementation built around the GMP library. + * + * @internal + * + * @psalm-immutable + */ +class GmpCalculator extends Calculator +{ + /** + * {@inheritdoc} + */ + public function add(string $a, string $b) : string + { + return \gmp_strval(\gmp_add($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function sub(string $a, string $b) : string + { + return \gmp_strval(\gmp_sub($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function mul(string $a, string $b) : string + { + return \gmp_strval(\gmp_mul($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function divQ(string $a, string $b) : string + { + return \gmp_strval(\gmp_div_q($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function divR(string $a, string $b) : string + { + return \gmp_strval(\gmp_div_r($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + [$q, $r] = \gmp_div_qr($a, $b); + + return [ + \gmp_strval($q), + \gmp_strval($r) + ]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + return \gmp_strval(\gmp_pow($a, $e)); + } + + /** + * {@inheritdoc} + */ + public function powmod(string $base, string $exp, string $mod) : string + { + return \gmp_strval(\gmp_powm($base, $exp, $mod)); + } + + /** + * {@inheritdoc} + */ + public function gcd(string $a, string $b) : string + { + return \gmp_strval(\gmp_gcd($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function fromBase(string $number, int $base) : string + { + return \gmp_strval(\gmp_init($number, $base)); + } + + /** + * {@inheritdoc} + */ + public function toBase(string $number, int $base) : string + { + return \gmp_strval($number, $base); + } + + /** + * {@inheritdoc} + */ + public function and(string $a, string $b) : string + { + return \gmp_strval(\gmp_and($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function or(string $a, string $b) : string + { + return \gmp_strval(\gmp_or($a, $b)); + } + + /** + * {@inheritdoc} + */ + public function xor(string $a, string $b) : string + { + return \gmp_strval(\gmp_xor($a, $b)); + } + + /** + * {@inheritDoc} + */ + public function sqrt(string $n) : string + { + return \gmp_strval(\gmp_sqrt($n)); + } +} diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php new file mode 100644 index 0000000000000000000000000000000000000000..8264bf8aed6d1e972ddd69de075843983322f770 --- /dev/null +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php @@ -0,0 +1,616 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math\Internal\Calculator; + +use Brick\Math\Internal\Calculator; + +/** + * Calculator implementation using only native PHP code. + * + * @internal + * + * @psalm-immutable + */ +class NativeCalculator extends Calculator +{ + /** + * The max number of digits the platform can natively add, subtract, multiply or divide without overflow. + * For multiplication, this represents the max sum of the lengths of both operands. + * + * For addition, it is assumed that an extra digit can hold a carry (1) without overflowing. + * Example: 32-bit: max number 1,999,999,999 (9 digits + carry) + * 64-bit: max number 1,999,999,999,999,999,999 (18 digits + carry) + * + * @var int + */ + private $maxDigits; + + /** + * Class constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + switch (PHP_INT_SIZE) { + case 4: + $this->maxDigits = 9; + break; + + case 8: + $this->maxDigits = 18; + break; + + default: + throw new \RuntimeException('The platform is not 32-bit or 64-bit as expected.'); + } + } + + /** + * {@inheritdoc} + */ + public function add(string $a, string $b) : string + { + $result = $a + $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0') { + return $b; + } + + if ($b === '0') { + return $a; + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + if ($aNeg === $bNeg) { + $result = $this->doAdd($aDig, $bDig); + } else { + $result = $this->doSub($aDig, $bDig); + } + + if ($aNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function sub(string $a, string $b) : string + { + return $this->add($a, $this->neg($b)); + } + + /** + * {@inheritdoc} + */ + public function mul(string $a, string $b) : string + { + $result = $a * $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0' || $b === '0') { + return '0'; + } + + if ($a === '1') { + return $b; + } + + if ($b === '1') { + return $a; + } + + if ($a === '-1') { + return $this->neg($b); + } + + if ($b === '-1') { + return $this->neg($a); + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $result = $this->doMul($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function divQ(string $a, string $b) : string + { + return $this->divQR($a, $b)[0]; + } + + /** + * {@inheritdoc} + */ + public function divR(string $a, string $b): string + { + return $this->divQR($a, $b)[1]; + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + if ($a === '0') { + return ['0', '0']; + } + + if ($a === $b) { + return ['1', '0']; + } + + if ($b === '1') { + return [$a, '0']; + } + + if ($b === '-1') { + return [$this->neg($a), '0']; + } + + $na = $a * 1; // cast to number + + if (is_int($na)) { + $nb = $b * 1; + + if (is_int($nb)) { + // the only division that may overflow is PHP_INT_MIN / -1, + // which cannot happen here as we've already handled a divisor of -1 above. + $r = $na % $nb; + $q = ($na - $r) / $nb; + + assert(is_int($q)); + + return [ + (string) $q, + (string) $r + ]; + } + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + [$q, $r] = $this->doDiv($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $q = $this->neg($q); + } + + if ($aNeg) { + $r = $this->neg($r); + } + + return [$q, $r]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + if ($e === 0) { + return '1'; + } + + if ($e === 1) { + return $a; + } + + $odd = $e % 2; + $e -= $odd; + + $aa = $this->mul($a, $a); + $result = $this->pow($aa, $e / 2); + + if ($odd === 1) { + $result = $this->mul($result, $a); + } + + return $result; + } + + /** + * Algorithm from: https://www.geeksforgeeks.org/modular-exponentiation-power-in-modular-arithmetic/ + * + * {@inheritdoc} + */ + public function powmod(string $base, string $exp, string $mod) : string + { + // special case: the algorithm below fails with 0 power 0 mod 1 (returns 1 instead of 0) + if ($base === '0' && $exp === '0' && $mod === '1') { + return '0'; + } + + // special case: the algorithm below fails with power 0 mod 1 (returns 1 instead of 0) + if ($exp === '0' && $mod === '1') { + return '0'; + } + + $x = $base; + + $res = '1'; + + // numbers are positive, so we can use remainder instead of modulo + $x = $this->divR($x, $mod); + + while ($exp !== '0') { + if (in_array($exp[-1], ['1', '3', '5', '7', '9'])) { // odd + $res = $this->divR($this->mul($res, $x), $mod); + } + + $exp = $this->divQ($exp, '2'); + $x = $this->divR($this->mul($x, $x), $mod); + } + + return $res; + } + + /** + * Adapted from https://cp-algorithms.com/num_methods/roots_newton.html + * + * {@inheritDoc} + */ + public function sqrt(string $n) : string + { + if ($n === '0') { + return '0'; + } + + // initial approximation + $x = \str_repeat('9', \intdiv(\strlen($n), 2) ?: 1); + + $decreased = false; + + for (;;) { + $nx = $this->divQ($this->add($x, $this->divQ($n, $x)), '2'); + + if ($x === $nx || $this->cmp($nx, $x) > 0 && $decreased) { + break; + } + + $decreased = $this->cmp($nx, $x) < 0; + $x = $nx; + } + + return $x; + } + + /** + * Performs the addition of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doAdd(string $a, string $b) : string + { + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + $i = 0; + } + + $blockA = \substr($a, $i, $blockLength); + $blockB = \substr($b, $i, $blockLength); + + $sum = (string) ($blockA + $blockB + $carry); + $sumLength = \strlen($sum); + + if ($sumLength > $blockLength) { + $sum = \substr($sum, 1); + $carry = 1; + } else { + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + $carry = 0; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + if ($carry === 1) { + $result = '1' . $result; + } + + return $result; + } + + /** + * Performs the subtraction of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doSub(string $a, string $b) : string + { + if ($a === $b) { + return '0'; + } + + // Ensure that we always subtract to a positive result: biggest minus smallest. + $cmp = $this->doCmp($a, $b); + + $invert = ($cmp === -1); + + if ($invert) { + $c = $a; + $a = $b; + $b = $c; + } + + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + $complement = 10 ** $this->maxDigits; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + $i = 0; + } + + $blockA = \substr($a, $i, $blockLength); + $blockB = \substr($b, $i, $blockLength); + + $sum = $blockA - $blockB - $carry; + + if ($sum < 0) { + $sum += $complement; + $carry = 1; + } else { + $carry = 0; + } + + $sum = (string) $sum; + $sumLength = \strlen($sum); + + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + // Carry cannot be 1 when the loop ends, as a > b + assert($carry === 0); + + $result = \ltrim($result, '0'); + + if ($invert) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * Performs the multiplication of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doMul(string $a, string $b) : string + { + $x = \strlen($a); + $y = \strlen($b); + + $maxDigits = \intdiv($this->maxDigits, 2); + $complement = 10 ** $maxDigits; + + $result = '0'; + + for ($i = $x - $maxDigits;; $i -= $maxDigits) { + $blockALength = $maxDigits; + + if ($i < 0) { + $blockALength += $i; + $i = 0; + } + + $blockA = (int) \substr($a, $i, $blockALength); + + $line = ''; + $carry = 0; + + for ($j = $y - $maxDigits;; $j -= $maxDigits) { + $blockBLength = $maxDigits; + + if ($j < 0) { + $blockBLength += $j; + $j = 0; + } + + $blockB = (int) \substr($b, $j, $blockBLength); + + $mul = $blockA * $blockB + $carry; + $value = $mul % $complement; + $carry = ($mul - $value) / $complement; + + $value = (string) $value; + $value = \str_pad($value, $maxDigits, '0', STR_PAD_LEFT); + + $line = $value . $line; + + if ($j === 0) { + break; + } + } + + if ($carry !== 0) { + $line = $carry . $line; + } + + $line = \ltrim($line, '0'); + + if ($line !== '') { + $line .= \str_repeat('0', $x - $blockALength - $i); + $result = $this->add($result, $line); + } + + if ($i === 0) { + break; + } + } + + return $result; + } + + /** + * Performs the division of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string[] The quotient and remainder. + */ + private function doDiv(string $a, string $b) : array + { + $cmp = $this->doCmp($a, $b); + + if ($cmp === -1) { + return ['0', $a]; + } + + $x = \strlen($a); + $y = \strlen($b); + + // we now know that a >= b && x >= y + + $q = '0'; // quotient + $r = $a; // remainder + $z = $y; // focus length, always $y or $y+1 + + for (;;) { + $focus = \substr($a, 0, $z); + + $cmp = $this->doCmp($focus, $b); + + if ($cmp === -1) { + if ($z === $x) { // remainder < dividend + break; + } + + $z++; + } + + $zeros = \str_repeat('0', $x - $z); + + $q = $this->add($q, '1' . $zeros); + $a = $this->sub($a, $b . $zeros); + + $r = $a; + + if ($r === '0') { // remainder == 0 + break; + } + + $x = \strlen($a); + + if ($x < $y) { // remainder < dividend + break; + } + + $z = $y; + } + + return [$q, $r]; + } + + /** + * Compares two non-signed large numbers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return int [-1, 0, 1] + */ + private function doCmp(string $a, string $b) : int + { + $x = \strlen($a); + $y = \strlen($b); + + $cmp = $x <=> $y; + + if ($cmp !== 0) { + return $cmp; + } + + return \strcmp($a, $b) <=> 0; // enforce [-1, 0, 1] + } + + /** + * Pads the left of one of the given numbers with zeros if necessary to make both numbers the same length. + * + * The numbers must only consist of digits, without leading minus sign. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return array{0: string, 1: string, 2: int} + */ + private function pad(string $a, string $b) : array + { + $x = \strlen($a); + $y = \strlen($b); + + if ($x > $y) { + $b = \str_repeat('0', $x - $y) . $b; + + return [$a, $b, $x]; + } + + if ($x < $y) { + $a = \str_repeat('0', $y - $x) . $a; + + return [$a, $b, $y]; + } + + return [$a, $b, $x]; + } +} diff --git a/civicrm/vendor/brick/math/src/RoundingMode.php b/civicrm/vendor/brick/math/src/RoundingMode.php new file mode 100644 index 0000000000000000000000000000000000000000..06936d8db3ceaceb50506ae593f4d4bd08637c05 --- /dev/null +++ b/civicrm/vendor/brick/math/src/RoundingMode.php @@ -0,0 +1,107 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Math; + +/** + * Specifies a rounding behavior for numerical operations capable of discarding precision. + * + * Each rounding mode indicates how the least significant returned digit of a rounded result + * is to be calculated. If fewer digits are returned than the digits needed to represent the + * exact numerical result, the discarded digits will be referred to as the discarded fraction + * regardless the digits' contribution to the value of the number. In other words, considered + * as a numerical value, the discarded fraction could have an absolute value greater than one. + */ +final class RoundingMode +{ + /** + * Private constructor. This class is not instantiable. + * + * @codeCoverageIgnore + */ + private function __construct() + { + } + + /** + * Asserts that the requested operation has an exact result, hence no rounding is necessary. + * + * If this rounding mode is specified on an operation that yields a result that + * cannot be represented at the requested scale, a RoundingNecessaryException is thrown. + */ + public const UNNECESSARY = 0; + + /** + * Rounds away from zero. + * + * Always increments the digit prior to a nonzero discarded fraction. + * Note that this rounding mode never decreases the magnitude of the calculated value. + */ + public const UP = 1; + + /** + * Rounds towards zero. + * + * Never increments the digit prior to a discarded fraction (i.e., truncates). + * Note that this rounding mode never increases the magnitude of the calculated value. + */ + public const DOWN = 2; + + /** + * Rounds towards positive infinity. + * + * If the result is positive, behaves as for UP; if negative, behaves as for DOWN. + * Note that this rounding mode never decreases the calculated value. + */ + public const CEILING = 3; + + /** + * Rounds towards negative infinity. + * + * If the result is positive, behave as for DOWN; if negative, behave as for UP. + * Note that this rounding mode never increases the calculated value. + */ + public const FLOOR = 4; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round up. + * + * Behaves as for UP if the discarded fraction is >= 0.5; otherwise, behaves as for DOWN. + * Note that this is the rounding mode commonly taught at school. + */ + public const HALF_UP = 5; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. + * + * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN. + */ + public const HALF_DOWN = 6; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards positive infinity. + * + * If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN. + */ + public const HALF_CEILING = 7; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards negative infinity. + * + * If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP. + */ + public const HALF_FLOOR = 8; + + /** + * Rounds towards the "nearest neighbor" unless both neighbors are equidistant, in which case rounds towards the even neighbor. + * + * Behaves as for HALF_UP if the digit to the left of the discarded fraction is odd; + * behaves as for HALF_DOWN if it's even. + * + * Note that this is the rounding mode that statistically minimizes + * cumulative error when applied repeatedly over a sequence of calculations. + * It is sometimes known as "Banker's rounding", and is chiefly used in the USA. + */ + public const HALF_EVEN = 9; +} diff --git a/civicrm/vendor/brick/money/.github/FUNDING.yml b/civicrm/vendor/brick/money/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..020d5f651c6fb3ca50478fb2820eb77f254a5e3d --- /dev/null +++ b/civicrm/vendor/brick/money/.github/FUNDING.yml @@ -0,0 +1 @@ +tidelift: "packagist/brick/money" diff --git a/civicrm/vendor/brick/money/LICENSE b/civicrm/vendor/brick/money/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f9b724f00ab40ec5f99fe9724a0756212f2a610b --- /dev/null +++ b/civicrm/vendor/brick/money/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-present Benjamin Morel + +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/brick/money/SECURITY.md b/civicrm/vendor/brick/money/SECURITY.md new file mode 100644 index 0000000000000000000000000000000000000000..9d3282f564d6fa1a20a589082a0c4dc4038d3255 --- /dev/null +++ b/civicrm/vendor/brick/money/SECURITY.md @@ -0,0 +1,16 @@ +# Security Policy + +## Supported Versions + +Only the latest release stream is supported. + +| Version | Supported | +| ------- | ------------------ | +| 0.4.x | :white_check_mark: | +| < 0.4 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/civicrm/vendor/brick/money/composer.json b/civicrm/vendor/brick/money/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..24bfad29b6bff684b96a585038ffe05c196e36e1 --- /dev/null +++ b/civicrm/vendor/brick/money/composer.json @@ -0,0 +1,35 @@ +{ + "name": "brick/money", + "description": "Money and currency library", + "type": "library", + "keywords": [ + "Brick", + "Money", + "Currency" + ], + "license": "MIT", + "require": { + "php": "^7.1|^8.0", + "brick/math": "~0.7.3 || ~0.8.0" + }, + "require-dev": { + "brick/varexporter": "~0.2.1", + "phpunit/phpunit": "^7.5.15", + "php-coveralls/php-coveralls": "^2.2", + "ext-pdo": "*", + "ext-dom": "*" + }, + "suggest": { + "ext-intl": "Required to format Money objects" + }, + "autoload": { + "psr-4": { + "Brick\\Money\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Brick\\Money\\Tests\\": "tests/" + } + } +} diff --git a/civicrm/vendor/brick/money/data/country-to-currency.php b/civicrm/vendor/brick/money/data/country-to-currency.php new file mode 100644 index 0000000000000000000000000000000000000000..70b3dbdd55fc33d992078d45caa4fcd79f95fa82 --- /dev/null +++ b/civicrm/vendor/brick/money/data/country-to-currency.php @@ -0,0 +1,248 @@ +<?php return [ + 'AD' => ['EUR'], + 'AE' => ['AED'], + 'AF' => ['AFN'], + 'AG' => ['XCD'], + 'AI' => ['XCD'], + 'AL' => ['ALL'], + 'AM' => ['AMD'], + 'AO' => ['AOA'], + 'AR' => ['ARS'], + 'AS' => ['USD'], + 'AT' => ['EUR'], + 'AU' => ['AUD'], + 'AW' => ['AWG'], + 'AX' => ['EUR'], + 'AZ' => ['AZN'], + 'BA' => ['BAM'], + 'BB' => ['BBD'], + 'BD' => ['BDT'], + 'BE' => ['EUR'], + 'BF' => ['XOF'], + 'BG' => ['BGN'], + 'BH' => ['BHD'], + 'BI' => ['BIF'], + 'BJ' => ['XOF'], + 'BL' => ['EUR'], + 'BM' => ['BMD'], + 'BN' => ['BND'], + 'BO' => ['BOB'], + 'BQ' => ['USD'], + 'BR' => ['BRL'], + 'BS' => ['BSD'], + 'BT' => ['INR', 'BTN'], + 'BV' => ['NOK'], + 'BW' => ['BWP'], + 'BY' => ['BYN'], + 'BZ' => ['BZD'], + 'CA' => ['CAD'], + 'CC' => ['AUD'], + 'CD' => ['CDF'], + 'CF' => ['XAF'], + 'CG' => ['XAF'], + 'CH' => ['CHF'], + 'CI' => ['XOF'], + 'CK' => ['NZD'], + 'CL' => ['CLP'], + 'CM' => ['XAF'], + 'CN' => ['CNY'], + 'CO' => ['COP'], + 'CR' => ['CRC'], + 'CU' => ['CUP', 'CUC'], + 'CV' => ['CVE'], + 'CW' => ['ANG'], + 'CX' => ['AUD'], + 'CY' => ['EUR'], + 'CZ' => ['CZK'], + 'DE' => ['EUR'], + 'DJ' => ['DJF'], + 'DK' => ['DKK'], + 'DM' => ['XCD'], + 'DO' => ['DOP'], + 'DZ' => ['DZD'], + 'EC' => ['USD'], + 'EE' => ['EUR'], + 'EG' => ['EGP'], + 'EH' => ['MAD'], + 'ER' => ['ERN'], + 'ES' => ['EUR'], + 'ET' => ['ETB'], + 'FI' => ['EUR'], + 'FJ' => ['FJD'], + 'FK' => ['FKP'], + 'FM' => ['USD'], + 'FO' => ['DKK'], + 'FR' => ['EUR'], + 'GA' => ['XAF'], + 'GB' => ['GBP'], + 'GD' => ['XCD'], + 'GE' => ['GEL'], + 'GF' => ['EUR'], + 'GG' => ['GBP'], + 'GH' => ['GHS'], + 'GI' => ['GIP'], + 'GL' => ['DKK'], + 'GM' => ['GMD'], + 'GN' => ['GNF'], + 'GP' => ['EUR'], + 'GQ' => ['XAF'], + 'GR' => ['EUR'], + 'GT' => ['GTQ'], + 'GU' => ['USD'], + 'GW' => ['XOF'], + 'GY' => ['GYD'], + 'HK' => ['HKD'], + 'HM' => ['AUD'], + 'HN' => ['HNL'], + 'HR' => ['HRK'], + 'HT' => ['HTG', 'USD'], + 'HU' => ['HUF'], + 'ID' => ['IDR'], + 'IE' => ['EUR'], + 'IL' => ['ILS'], + 'IM' => ['GBP'], + 'IN' => ['INR'], + 'IO' => ['USD'], + 'IQ' => ['IQD'], + 'IR' => ['IRR'], + 'IS' => ['ISK'], + 'IT' => ['EUR'], + 'JE' => ['GBP'], + 'JM' => ['JMD'], + 'JO' => ['JOD'], + 'JP' => ['JPY'], + 'KE' => ['KES'], + 'KG' => ['KGS'], + 'KH' => ['KHR'], + 'KI' => ['AUD'], + 'KM' => ['KMF'], + 'KN' => ['XCD'], + 'KP' => ['KPW'], + 'KR' => ['KRW'], + 'KW' => ['KWD'], + 'KY' => ['KYD'], + 'KZ' => ['KZT'], + 'LA' => ['LAK'], + 'LB' => ['LBP'], + 'LC' => ['XCD'], + 'LI' => ['CHF'], + 'LK' => ['LKR'], + 'LR' => ['LRD'], + 'LS' => ['LSL', 'ZAR'], + 'LT' => ['EUR'], + 'LU' => ['EUR'], + 'LV' => ['EUR'], + 'LY' => ['LYD'], + 'MA' => ['MAD'], + 'MC' => ['EUR'], + 'MD' => ['MDL'], + 'ME' => ['EUR'], + 'MF' => ['EUR'], + 'MG' => ['MGA'], + 'MH' => ['USD'], + 'MK' => ['MKD'], + 'ML' => ['XOF'], + 'MM' => ['MMK'], + 'MN' => ['MNT'], + 'MO' => ['MOP'], + 'MP' => ['USD'], + 'MQ' => ['EUR'], + 'MR' => ['MRU'], + 'MS' => ['XCD'], + 'MT' => ['EUR'], + 'MU' => ['MUR'], + 'MV' => ['MVR'], + 'MW' => ['MWK'], + 'MX' => ['MXN'], + 'MY' => ['MYR'], + 'MZ' => ['MZN'], + 'NA' => ['NAD', 'ZAR'], + 'NC' => ['XPF'], + 'NE' => ['XOF'], + 'NF' => ['AUD'], + 'NG' => ['NGN'], + 'NI' => ['NIO'], + 'NL' => ['EUR'], + 'NO' => ['NOK'], + 'NP' => ['NPR'], + 'NR' => ['AUD'], + 'NU' => ['NZD'], + 'NZ' => ['NZD'], + 'OM' => ['OMR'], + 'PA' => ['PAB', 'USD'], + 'PE' => ['PEN'], + 'PF' => ['XPF'], + 'PG' => ['PGK'], + 'PH' => ['PHP'], + 'PK' => ['PKR'], + 'PL' => ['PLN'], + 'PM' => ['EUR'], + 'PN' => ['NZD'], + 'PR' => ['USD'], + 'PT' => ['EUR'], + 'PW' => ['USD'], + 'PY' => ['PYG'], + 'QA' => ['QAR'], + 'RE' => ['EUR'], + 'RO' => ['RON'], + 'RS' => ['RSD'], + 'RU' => ['RUB'], + 'RW' => ['RWF'], + 'SA' => ['SAR'], + 'SB' => ['SBD'], + 'SC' => ['SCR'], + 'SD' => ['SDG'], + 'SE' => ['SEK'], + 'SG' => ['SGD'], + 'SH' => ['SHP'], + 'SI' => ['EUR'], + 'SJ' => ['NOK'], + 'SK' => ['EUR'], + 'SL' => ['SLL'], + 'SM' => ['EUR'], + 'SN' => ['XOF'], + 'SO' => ['SOS'], + 'SR' => ['SRD'], + 'SS' => ['SSP'], + 'ST' => ['STN'], + 'SV' => ['SVC', 'USD'], + 'SX' => ['ANG'], + 'SY' => ['SYP'], + 'SZ' => ['SZL'], + 'TC' => ['USD'], + 'TD' => ['XAF'], + 'TF' => ['EUR'], + 'TG' => ['XOF'], + 'TH' => ['THB'], + 'TJ' => ['TJS'], + 'TK' => ['NZD'], + 'TL' => ['USD'], + 'TM' => ['TMT'], + 'TN' => ['TND'], + 'TO' => ['TOP'], + 'TR' => ['TRY'], + 'TT' => ['TTD'], + 'TV' => ['AUD'], + 'TW' => ['TWD'], + 'TZ' => ['TZS'], + 'UA' => ['UAH'], + 'UG' => ['UGX'], + 'UM' => ['USD'], + 'US' => ['USD'], + 'UY' => ['UYU', 'UYW'], + 'UZ' => ['UZS'], + 'VA' => ['EUR'], + 'VC' => ['XCD'], + 'VE' => ['VES'], + 'VG' => ['USD'], + 'VI' => ['USD'], + 'VN' => ['VND'], + 'VU' => ['VUV'], + 'WF' => ['XPF'], + 'WS' => ['WST'], + 'YE' => ['YER'], + 'YT' => ['EUR'], + 'ZA' => ['ZAR'], + 'ZM' => ['ZMW'], + 'ZW' => ['ZWL'] +]; diff --git a/civicrm/vendor/brick/money/data/iso-currencies.php b/civicrm/vendor/brick/money/data/iso-currencies.php new file mode 100644 index 0000000000000000000000000000000000000000..a6a6ad414be8c53fbca33203ac79b13312e6d838 --- /dev/null +++ b/civicrm/vendor/brick/money/data/iso-currencies.php @@ -0,0 +1,168 @@ +<?php return [ + 'AED' => ['AED', 784, 'UAE Dirham', 2], + 'AFN' => ['AFN', 971, 'Afghani', 2], + 'ALL' => ['ALL', 8, 'Lek', 2], + 'AMD' => ['AMD', 51, 'Armenian Dram', 2], + 'ANG' => ['ANG', 532, 'Netherlands Antillean Guilder', 2], + 'AOA' => ['AOA', 973, 'Kwanza', 2], + 'ARS' => ['ARS', 32, 'Argentine Peso', 2], + 'AUD' => ['AUD', 36, 'Australian Dollar', 2], + 'AWG' => ['AWG', 533, 'Aruban Florin', 2], + 'AZN' => ['AZN', 944, 'Azerbaijan Manat', 2], + 'BAM' => ['BAM', 977, 'Convertible Mark', 2], + 'BBD' => ['BBD', 52, 'Barbados Dollar', 2], + 'BDT' => ['BDT', 50, 'Taka', 2], + 'BGN' => ['BGN', 975, 'Bulgarian Lev', 2], + 'BHD' => ['BHD', 48, 'Bahraini Dinar', 3], + 'BIF' => ['BIF', 108, 'Burundi Franc', 0], + 'BMD' => ['BMD', 60, 'Bermudian Dollar', 2], + 'BND' => ['BND', 96, 'Brunei Dollar', 2], + 'BOB' => ['BOB', 68, 'Boliviano', 2], + 'BOV' => ['BOV', 984, 'Mvdol', 2], + 'BRL' => ['BRL', 986, 'Brazilian Real', 2], + 'BSD' => ['BSD', 44, 'Bahamian Dollar', 2], + 'BTN' => ['BTN', 64, 'Ngultrum', 2], + 'BWP' => ['BWP', 72, 'Pula', 2], + 'BYN' => ['BYN', 933, 'Belarusian Ruble', 2], + 'BZD' => ['BZD', 84, 'Belize Dollar', 2], + 'CAD' => ['CAD', 124, 'Canadian Dollar', 2], + 'CDF' => ['CDF', 976, 'Congolese Franc', 2], + 'CHE' => ['CHE', 947, 'WIR Euro', 2], + 'CHF' => ['CHF', 756, 'Swiss Franc', 2], + 'CHW' => ['CHW', 948, 'WIR Franc', 2], + 'CLF' => ['CLF', 990, 'Unidad de Fomento', 4], + 'CLP' => ['CLP', 152, 'Chilean Peso', 0], + 'CNY' => ['CNY', 156, 'Yuan Renminbi', 2], + 'COP' => ['COP', 170, 'Colombian Peso', 2], + 'COU' => ['COU', 970, 'Unidad de Valor Real', 2], + 'CRC' => ['CRC', 188, 'Costa Rican Colon', 2], + 'CUC' => ['CUC', 931, 'Peso Convertible', 2], + 'CUP' => ['CUP', 192, 'Cuban Peso', 2], + 'CVE' => ['CVE', 132, 'Cabo Verde Escudo', 2], + 'CZK' => ['CZK', 203, 'Czech Koruna', 2], + 'DJF' => ['DJF', 262, 'Djibouti Franc', 0], + 'DKK' => ['DKK', 208, 'Danish Krone', 2], + 'DOP' => ['DOP', 214, 'Dominican Peso', 2], + 'DZD' => ['DZD', 12, 'Algerian Dinar', 2], + 'EGP' => ['EGP', 818, 'Egyptian Pound', 2], + 'ERN' => ['ERN', 232, 'Nakfa', 2], + 'ETB' => ['ETB', 230, 'Ethiopian Birr', 2], + 'EUR' => ['EUR', 978, 'Euro', 2], + 'FJD' => ['FJD', 242, 'Fiji Dollar', 2], + 'FKP' => ['FKP', 238, 'Falkland Islands Pound', 2], + 'GBP' => ['GBP', 826, 'Pound Sterling', 2], + 'GEL' => ['GEL', 981, 'Lari', 2], + 'GHS' => ['GHS', 936, 'Ghana Cedi', 2], + 'GIP' => ['GIP', 292, 'Gibraltar Pound', 2], + 'GMD' => ['GMD', 270, 'Dalasi', 2], + 'GNF' => ['GNF', 324, 'Guinean Franc', 0], + 'GTQ' => ['GTQ', 320, 'Quetzal', 2], + 'GYD' => ['GYD', 328, 'Guyana Dollar', 2], + 'HKD' => ['HKD', 344, 'Hong Kong Dollar', 2], + 'HNL' => ['HNL', 340, 'Lempira', 2], + 'HRK' => ['HRK', 191, 'Kuna', 2], + 'HTG' => ['HTG', 332, 'Gourde', 2], + 'HUF' => ['HUF', 348, 'Forint', 2], + 'IDR' => ['IDR', 360, 'Rupiah', 2], + 'ILS' => ['ILS', 376, 'New Israeli Sheqel', 2], + 'INR' => ['INR', 356, 'Indian Rupee', 2], + 'IQD' => ['IQD', 368, 'Iraqi Dinar', 3], + 'IRR' => ['IRR', 364, 'Iranian Rial', 2], + 'ISK' => ['ISK', 352, 'Iceland Krona', 0], + 'JMD' => ['JMD', 388, 'Jamaican Dollar', 2], + 'JOD' => ['JOD', 400, 'Jordanian Dinar', 3], + 'JPY' => ['JPY', 392, 'Yen', 0], + 'KES' => ['KES', 404, 'Kenyan Shilling', 2], + 'KGS' => ['KGS', 417, 'Som', 2], + 'KHR' => ['KHR', 116, 'Riel', 2], + 'KMF' => ['KMF', 174, 'Comorian Franc ', 0], + 'KPW' => ['KPW', 408, 'North Korean Won', 2], + 'KRW' => ['KRW', 410, 'Won', 0], + 'KWD' => ['KWD', 414, 'Kuwaiti Dinar', 3], + 'KYD' => ['KYD', 136, 'Cayman Islands Dollar', 2], + 'KZT' => ['KZT', 398, 'Tenge', 2], + 'LAK' => ['LAK', 418, 'Lao Kip', 2], + 'LBP' => ['LBP', 422, 'Lebanese Pound', 2], + 'LKR' => ['LKR', 144, 'Sri Lanka Rupee', 2], + 'LRD' => ['LRD', 430, 'Liberian Dollar', 2], + 'LSL' => ['LSL', 426, 'Loti', 2], + 'LYD' => ['LYD', 434, 'Libyan Dinar', 3], + 'MAD' => ['MAD', 504, 'Moroccan Dirham', 2], + 'MDL' => ['MDL', 498, 'Moldovan Leu', 2], + 'MGA' => ['MGA', 969, 'Malagasy Ariary', 2], + 'MKD' => ['MKD', 807, 'Denar', 2], + 'MMK' => ['MMK', 104, 'Kyat', 2], + 'MNT' => ['MNT', 496, 'Tugrik', 2], + 'MOP' => ['MOP', 446, 'Pataca', 2], + 'MRU' => ['MRU', 929, 'Ouguiya', 2], + 'MUR' => ['MUR', 480, 'Mauritius Rupee', 2], + 'MVR' => ['MVR', 462, 'Rufiyaa', 2], + 'MWK' => ['MWK', 454, 'Malawi Kwacha', 2], + 'MXN' => ['MXN', 484, 'Mexican Peso', 2], + 'MXV' => ['MXV', 979, 'Mexican Unidad de Inversion (UDI)', 2], + 'MYR' => ['MYR', 458, 'Malaysian Ringgit', 2], + 'MZN' => ['MZN', 943, 'Mozambique Metical', 2], + 'NAD' => ['NAD', 516, 'Namibia Dollar', 2], + 'NGN' => ['NGN', 566, 'Naira', 2], + 'NIO' => ['NIO', 558, 'Cordoba Oro', 2], + 'NOK' => ['NOK', 578, 'Norwegian Krone', 2], + 'NPR' => ['NPR', 524, 'Nepalese Rupee', 2], + 'NZD' => ['NZD', 554, 'New Zealand Dollar', 2], + 'OMR' => ['OMR', 512, 'Rial Omani', 3], + 'PAB' => ['PAB', 590, 'Balboa', 2], + 'PEN' => ['PEN', 604, 'Sol', 2], + 'PGK' => ['PGK', 598, 'Kina', 2], + 'PHP' => ['PHP', 608, 'Philippine Peso', 2], + 'PKR' => ['PKR', 586, 'Pakistan Rupee', 2], + 'PLN' => ['PLN', 985, 'Zloty', 2], + 'PYG' => ['PYG', 600, 'Guarani', 0], + 'QAR' => ['QAR', 634, 'Qatari Rial', 2], + 'RON' => ['RON', 946, 'Romanian Leu', 2], + 'RSD' => ['RSD', 941, 'Serbian Dinar', 2], + 'RUB' => ['RUB', 643, 'Russian Ruble', 2], + 'RWF' => ['RWF', 646, 'Rwanda Franc', 0], + 'SAR' => ['SAR', 682, 'Saudi Riyal', 2], + 'SBD' => ['SBD', 90, 'Solomon Islands Dollar', 2], + 'SCR' => ['SCR', 690, 'Seychelles Rupee', 2], + 'SDG' => ['SDG', 938, 'Sudanese Pound', 2], + 'SEK' => ['SEK', 752, 'Swedish Krona', 2], + 'SGD' => ['SGD', 702, 'Singapore Dollar', 2], + 'SHP' => ['SHP', 654, 'Saint Helena Pound', 2], + 'SLL' => ['SLL', 694, 'Leone', 2], + 'SOS' => ['SOS', 706, 'Somali Shilling', 2], + 'SRD' => ['SRD', 968, 'Surinam Dollar', 2], + 'SSP' => ['SSP', 728, 'South Sudanese Pound', 2], + 'STN' => ['STN', 930, 'Dobra', 2], + 'SVC' => ['SVC', 222, 'El Salvador Colon', 2], + 'SYP' => ['SYP', 760, 'Syrian Pound', 2], + 'SZL' => ['SZL', 748, 'Lilangeni', 2], + 'THB' => ['THB', 764, 'Baht', 2], + 'TJS' => ['TJS', 972, 'Somoni', 2], + 'TMT' => ['TMT', 934, 'Turkmenistan New Manat', 2], + 'TND' => ['TND', 788, 'Tunisian Dinar', 3], + 'TOP' => ['TOP', 776, 'Pa’anga', 2], + 'TRY' => ['TRY', 949, 'Turkish Lira', 2], + 'TTD' => ['TTD', 780, 'Trinidad and Tobago Dollar', 2], + 'TWD' => ['TWD', 901, 'New Taiwan Dollar', 2], + 'TZS' => ['TZS', 834, 'Tanzanian Shilling', 2], + 'UAH' => ['UAH', 980, 'Hryvnia', 2], + 'UGX' => ['UGX', 800, 'Uganda Shilling', 0], + 'USD' => ['USD', 840, 'US Dollar', 2], + 'USN' => ['USN', 997, 'US Dollar (Next day)', 2], + 'UYI' => ['UYI', 940, 'Uruguay Peso en Unidades Indexadas (UI)', 0], + 'UYU' => ['UYU', 858, 'Peso Uruguayo', 2], + 'UYW' => ['UYW', 927, 'Unidad Previsional', 4], + 'UZS' => ['UZS', 860, 'Uzbekistan Sum', 2], + 'VES' => ['VES', 928, 'BolÃvar Soberano', 2], + 'VND' => ['VND', 704, 'Dong', 0], + 'VUV' => ['VUV', 548, 'Vatu', 0], + 'WST' => ['WST', 882, 'Tala', 2], + 'XAF' => ['XAF', 950, 'CFA Franc BEAC', 0], + 'XCD' => ['XCD', 951, 'East Caribbean Dollar', 2], + 'XOF' => ['XOF', 952, 'CFA Franc BCEAO', 0], + 'XPF' => ['XPF', 953, 'CFP Franc', 0], + 'YER' => ['YER', 886, 'Yemeni Rial', 2], + 'ZAR' => ['ZAR', 710, 'Rand', 2], + 'ZMW' => ['ZMW', 967, 'Zambian Kwacha', 2], + 'ZWL' => ['ZWL', 932, 'Zimbabwe Dollar', 2] +]; diff --git a/civicrm/vendor/brick/money/data/numeric-to-currency.php b/civicrm/vendor/brick/money/data/numeric-to-currency.php new file mode 100644 index 0000000000000000000000000000000000000000..9b57aa6eb9d03f191be5babe94cfc9e9d5271c6b --- /dev/null +++ b/civicrm/vendor/brick/money/data/numeric-to-currency.php @@ -0,0 +1,168 @@ +<?php return [ + 8 => 'ALL', + 12 => 'DZD', + 32 => 'ARS', + 36 => 'AUD', + 44 => 'BSD', + 48 => 'BHD', + 50 => 'BDT', + 51 => 'AMD', + 52 => 'BBD', + 60 => 'BMD', + 64 => 'BTN', + 68 => 'BOB', + 72 => 'BWP', + 84 => 'BZD', + 90 => 'SBD', + 96 => 'BND', + 104 => 'MMK', + 108 => 'BIF', + 116 => 'KHR', + 124 => 'CAD', + 132 => 'CVE', + 136 => 'KYD', + 144 => 'LKR', + 152 => 'CLP', + 156 => 'CNY', + 170 => 'COP', + 174 => 'KMF', + 188 => 'CRC', + 191 => 'HRK', + 192 => 'CUP', + 203 => 'CZK', + 208 => 'DKK', + 214 => 'DOP', + 222 => 'SVC', + 230 => 'ETB', + 232 => 'ERN', + 238 => 'FKP', + 242 => 'FJD', + 262 => 'DJF', + 270 => 'GMD', + 292 => 'GIP', + 320 => 'GTQ', + 324 => 'GNF', + 328 => 'GYD', + 332 => 'HTG', + 340 => 'HNL', + 344 => 'HKD', + 348 => 'HUF', + 352 => 'ISK', + 356 => 'INR', + 360 => 'IDR', + 364 => 'IRR', + 368 => 'IQD', + 376 => 'ILS', + 388 => 'JMD', + 392 => 'JPY', + 398 => 'KZT', + 400 => 'JOD', + 404 => 'KES', + 408 => 'KPW', + 410 => 'KRW', + 414 => 'KWD', + 417 => 'KGS', + 418 => 'LAK', + 422 => 'LBP', + 426 => 'LSL', + 430 => 'LRD', + 434 => 'LYD', + 446 => 'MOP', + 454 => 'MWK', + 458 => 'MYR', + 462 => 'MVR', + 480 => 'MUR', + 484 => 'MXN', + 496 => 'MNT', + 498 => 'MDL', + 504 => 'MAD', + 512 => 'OMR', + 516 => 'NAD', + 524 => 'NPR', + 532 => 'ANG', + 533 => 'AWG', + 548 => 'VUV', + 554 => 'NZD', + 558 => 'NIO', + 566 => 'NGN', + 578 => 'NOK', + 586 => 'PKR', + 590 => 'PAB', + 598 => 'PGK', + 600 => 'PYG', + 604 => 'PEN', + 608 => 'PHP', + 634 => 'QAR', + 643 => 'RUB', + 646 => 'RWF', + 654 => 'SHP', + 682 => 'SAR', + 690 => 'SCR', + 694 => 'SLL', + 702 => 'SGD', + 704 => 'VND', + 706 => 'SOS', + 710 => 'ZAR', + 728 => 'SSP', + 748 => 'SZL', + 752 => 'SEK', + 756 => 'CHF', + 760 => 'SYP', + 764 => 'THB', + 776 => 'TOP', + 780 => 'TTD', + 784 => 'AED', + 788 => 'TND', + 800 => 'UGX', + 807 => 'MKD', + 818 => 'EGP', + 826 => 'GBP', + 834 => 'TZS', + 840 => 'USD', + 858 => 'UYU', + 860 => 'UZS', + 882 => 'WST', + 886 => 'YER', + 901 => 'TWD', + 927 => 'UYW', + 928 => 'VES', + 929 => 'MRU', + 930 => 'STN', + 931 => 'CUC', + 932 => 'ZWL', + 933 => 'BYN', + 934 => 'TMT', + 936 => 'GHS', + 938 => 'SDG', + 940 => 'UYI', + 941 => 'RSD', + 943 => 'MZN', + 944 => 'AZN', + 946 => 'RON', + 947 => 'CHE', + 948 => 'CHW', + 949 => 'TRY', + 950 => 'XAF', + 951 => 'XCD', + 952 => 'XOF', + 953 => 'XPF', + 967 => 'ZMW', + 968 => 'SRD', + 969 => 'MGA', + 970 => 'COU', + 971 => 'AFN', + 972 => 'TJS', + 973 => 'AOA', + 975 => 'BGN', + 976 => 'CDF', + 977 => 'BAM', + 978 => 'EUR', + 979 => 'MXV', + 980 => 'UAH', + 981 => 'GEL', + 984 => 'BOV', + 985 => 'PLN', + 986 => 'BRL', + 990 => 'CLF', + 997 => 'USN' +]; diff --git a/civicrm/vendor/brick/money/src/AbstractMoney.php b/civicrm/vendor/brick/money/src/AbstractMoney.php new file mode 100644 index 0000000000000000000000000000000000000000..1dad5c44e92e625fb10969d453786eb8c470e7f4 --- /dev/null +++ b/civicrm/vendor/brick/money/src/AbstractMoney.php @@ -0,0 +1,245 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\MoneyMismatchException; + +use Brick\Math\BigNumber; +use Brick\Math\RoundingMode; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\RoundingNecessaryException; + +/** + * Base class for Money and RationalMoney. + */ +abstract class AbstractMoney implements MoneyContainer +{ + /** + * @return BigNumber + */ + abstract public function getAmount(); + + /** + * @return Currency + */ + abstract public function getCurrency() : Currency; + + /** + * Converts this money to a Money in the given Context. + * + * @param Context $context The context. + * @param int $roundingMode The rounding mode, if necessary. + * + * @return Money + * + * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is used but rounding is necessary. + */ + final public function to(Context $context, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + return Money::create($this->getAmount(), $this->getCurrency(), $context, $roundingMode); + } + + /** + * Required by interface MoneyContainer. + * + * @return BigNumber[] + */ + final public function getAmounts() : array + { + return [ + $this->getCurrency()->getCurrencyCode() => $this->getAmount() + ]; + } + + /** + * Returns the sign of this money. + * + * @return int -1 if the number is negative, 0 if zero, 1 if positive. + */ + final public function getSign() : int + { + return $this->getAmount()->getSign(); + } + + /** + * Returns whether this money has zero value. + * + * @return bool + */ + final public function isZero() : bool + { + return $this->getAmount()->isZero(); + } + + /** + * Returns whether this money has a negative value. + * + * @return bool + */ + final public function isNegative() : bool + { + return $this->getAmount()->isNegative(); + } + + /** + * Returns whether this money has a negative or zero value. + * + * @return bool + */ + final public function isNegativeOrZero() : bool + { + return $this->getAmount()->isNegativeOrZero(); + } + + /** + * Returns whether this money has a positive value. + * + * @return bool + */ + final public function isPositive() : bool + { + return $this->getAmount()->isPositive(); + } + + /** + * Returns whether this money has a positive or zero value. + * + * @return bool + */ + final public function isPositiveOrZero() : bool + { + return $this->getAmount()->isPositiveOrZero(); + } + + /** + * Compares this money to the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return int [-1, 0, 1] if `$this` is less than, equal to, or greater than `$that`. + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function compareTo($that) : int + { + return $this->getAmount()->compareTo($this->getAmountOf($that)); + } + + /** + * Returns whether this money is equal to the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return bool + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function isEqualTo($that) : bool + { + return $this->getAmount()->isEqualTo($this->getAmountOf($that)); + } + + /** + * Returns whether this money is less than the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return bool + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function isLessThan($that) : bool + { + return $this->getAmount()->isLessThan($this->getAmountOf($that)); + } + + /** + * Returns whether this money is less than or equal to the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return bool + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function isLessThanOrEqualTo($that) : bool + { + return $this->getAmount()->isLessThanOrEqualTo($this->getAmountOf($that)); + } + + /** + * Returns whether this money is greater than the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return bool + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function isGreaterThan($that) : bool + { + return $this->getAmount()->isGreaterThan($this->getAmountOf($that)); + } + + /** + * Returns whether this money is greater than or equal to the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that + * + * @return bool + * + * @throws MathException If the argument is an invalid number. + * @throws MoneyMismatchException If the argument is a money in a different currency. + */ + final public function isGreaterThanOrEqualTo($that) : bool + { + return $this->getAmount()->isGreaterThanOrEqualTo($this->getAmountOf($that)); + } + + /** + * Returns whether this money's amount and currency are equal to those of the given money. + * + * Unlike isEqualTo(), this method only accepts a money, and returns false if the given money is in another + * currency, instead of throwing a MoneyMismatchException. + * + * @param AbstractMoney $that + * + * @return bool + */ + final public function isAmountAndCurrencyEqualTo(AbstractMoney $that) : bool + { + return $this->getAmount()->isEqualTo($that->getAmount()) + && $this->getCurrency()->is($that->getCurrency()); + } + + /** + * Returns the amount of the given parameter. + * + * If the parameter is a money, its currency is checked against this money's currency. + * + * @param AbstractMoney|BigNumber|int|float|string $that A money or amount. + * + * @return BigNumber|int|float|string + * + * @throws MoneyMismatchException If currencies don't match. + */ + final protected function getAmountOf($that) + { + if ($that instanceof AbstractMoney) { + if (! $that->getCurrency()->is($this->getCurrency())) { + throw MoneyMismatchException::currencyMismatch($this->getCurrency(), $that->getCurrency()); + } + + return $that->getAmount(); + } + + return $that; + } +} diff --git a/civicrm/vendor/brick/money/src/Context.php b/civicrm/vendor/brick/money/src/Context.php new file mode 100644 index 0000000000000000000000000000000000000000..edf4c5426002a8b85a4dffdbd4e2417ccb0fd50e --- /dev/null +++ b/civicrm/vendor/brick/money/src/Context.php @@ -0,0 +1,52 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; +use Brick\Math\Exception\RoundingNecessaryException; + +/** + * Adjusts a rational number to a decimal amount. + */ +interface Context +{ + /** + * Applies this context to a rational amount, and returns a decimal number. + * + * The given rounding mode MUST be respected; no default rounding mode must be applied. + * In case the rounding mode is irrelevant, for example in AutoContext, this method MUST throw an exception if a + * rounding mode other than RoundingMode::UNNECESSARY is used. + * + * @param BigNumber $amount The amount. + * @param Currency $currency The target currency. + * @param int $roundingMode The rounding mode. + * + * @return BigDecimal + * + * @throws RoundingNecessaryException If the result cannot be represented at the required scale without rounding. + */ + public function applyTo(BigNumber $amount, Currency $currency, int $roundingMode) : BigDecimal; + + /** + * Returns the step used by this context. + * + * If no cash rounding is involved, this must return 1. + * This value is used by money allocation methods that do not go through the applyTo() method. + * + * @return int + */ + public function getStep() : int; + + /** + * Returns whether this context uses a fixed scale and step. + * + * When the scale and step are fixed, it is considered safe to add or subtract monies amounts directly —as long as + * they are in the same context— without going through the applyTo() method, allowing for an optimization. + * + * @return bool + */ + public function isFixedScale() : bool; +} diff --git a/civicrm/vendor/brick/money/src/Context/AutoContext.php b/civicrm/vendor/brick/money/src/Context/AutoContext.php new file mode 100644 index 0000000000000000000000000000000000000000..4e6bc56e7ea98f07d1ad5672709397ed26c04aca --- /dev/null +++ b/civicrm/vendor/brick/money/src/Context/AutoContext.php @@ -0,0 +1,46 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Context; + +use Brick\Money\Context; +use Brick\Money\Currency; + +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; +use Brick\Math\RoundingMode; + +/** + * Automatically adjusts the scale of a number to the strict minimum. + */ +final class AutoContext implements Context +{ + /** + * {@inheritdoc} + */ + public function applyTo(BigNumber $amount, Currency $currency, int $roundingMode) : BigDecimal + { + if ($roundingMode !== RoundingMode::UNNECESSARY) { + throw new \InvalidArgumentException('AutoContext only supports RoundingMode::UNNECESSARY'); + } + + return $amount->toBigDecimal()->stripTrailingZeros(); + } + + /** + * {@inheritdoc} + */ + public function getStep() : int + { + return 1; + } + + /** + * {@inheritdoc} + */ + public function isFixedScale() : bool + { + return false; + } +} diff --git a/civicrm/vendor/brick/money/src/Context/CashContext.php b/civicrm/vendor/brick/money/src/Context/CashContext.php new file mode 100644 index 0000000000000000000000000000000000000000..c5413cce74f1fbcea7340656cd974a649135945f --- /dev/null +++ b/civicrm/vendor/brick/money/src/Context/CashContext.php @@ -0,0 +1,68 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Context; + +use Brick\Money\Context; +use Brick\Money\Currency; + +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; + +/** + * Adjusts a number to the default scale for the currency, respecting a cash rounding. + */ +final class CashContext implements Context +{ + /** + * The cash rounding step, in minor units. + * + * For example, step 5 on CHF would allow CHF 0.00, CHF 0.05, CHF 0.10, etc. + * + * @var int + */ + private $step; + + /** + * @param int $step The cash rounding step, in minor units. Must be a multiple of 2 and/or 5. + */ + public function __construct(int $step) + { + $this->step = $step; + } + + /** + * {@inheritdoc} + */ + public function applyTo(BigNumber $amount, Currency $currency, int $roundingMode) : BigDecimal + { + $scale = $currency->getDefaultFractionDigits(); + + if ($this->step === 1) { + return $amount->toScale($scale, $roundingMode); + } + + return $amount + ->toBigRational() + ->dividedBy($this->step) + ->toScale($scale, $roundingMode) + ->multipliedBy($this->step); + } + + /** + * {@inheritdoc} + */ + public function getStep() : int + { + return $this->step; + } + + /** + * {@inheritdoc} + */ + public function isFixedScale() : bool + { + return true; + } +} diff --git a/civicrm/vendor/brick/money/src/Context/CustomContext.php b/civicrm/vendor/brick/money/src/Context/CustomContext.php new file mode 100644 index 0000000000000000000000000000000000000000..83e664abe6f251f0bc5afdbaa2e0265e8465ef60 --- /dev/null +++ b/civicrm/vendor/brick/money/src/Context/CustomContext.php @@ -0,0 +1,85 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Context; + +use Brick\Math\BigDecimal; +use Brick\Money\Context; +use Brick\Money\Currency; + +use Brick\Math\BigNumber; + +/** + * Adjusts a number to a custom scale, and optionally step. + */ +final class CustomContext implements Context +{ + /** + * The scale of the monies using this context. + * + * @var int + */ + private $scale; + + /** + * An optional cash rounding step. Must be a multiple of 2 and/or 5. + * + * For example, scale=4 and step=5 would allow amounts of 0.0000, 0.0005, 0.0010, etc. + * + * @var int + */ + private $step; + + /** + * @param int $scale The scale of the monies using this context. + * @param int $step An optional cash rounding step. Must be a multiple of 2 and/or 5. + */ + public function __construct(int $scale, int $step = 1) + { + $this->scale = $scale; + $this->step = $step; + } + + /** + * {@inheritdoc} + */ + public function applyTo(BigNumber $amount, Currency $currency, int $roundingMode) : BigDecimal + { + if ($this->step === 1) { + return $amount->toScale($this->scale, $roundingMode); + } + + return $amount + ->toBigRational() + ->dividedBy($this->step) + ->toScale($this->scale, $roundingMode) + ->multipliedBy($this->step); + } + + /** + * {@inheritdoc} + */ + public function getStep() : int + { + return $this->step; + } + + /** + * {@inheritdoc} + */ + public function isFixedScale() : bool + { + return true; + } + + /** + * Returns the scale used by this context. + * + * @return int + */ + public function getScale() : int + { + return $this->scale; + } +} diff --git a/civicrm/vendor/brick/money/src/Context/DefaultContext.php b/civicrm/vendor/brick/money/src/Context/DefaultContext.php new file mode 100644 index 0000000000000000000000000000000000000000..51b93e45dc8b1812ab9153ffa1c780d9debe2ee2 --- /dev/null +++ b/civicrm/vendor/brick/money/src/Context/DefaultContext.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Context; + +use Brick\Money\Context; +use Brick\Money\Currency; + +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; + +/** + * Adjusts a number to the default scale for the currency. + */ +final class DefaultContext implements Context +{ + /** + * @inheritdoc + */ + public function applyTo(BigNumber $amount, Currency $currency, int $roundingMode) : BigDecimal + { + return $amount->toScale($currency->getDefaultFractionDigits(), $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function getStep() : int + { + return 1; + } + + /** + * {@inheritdoc} + */ + public function isFixedScale() : bool + { + return true; + } +} diff --git a/civicrm/vendor/brick/money/src/Currency.php b/civicrm/vendor/brick/money/src/Currency.php new file mode 100644 index 0000000000000000000000000000000000000000..8a907439751447cc4643be3d1356eed88cfb47de --- /dev/null +++ b/civicrm/vendor/brick/money/src/Currency.php @@ -0,0 +1,187 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\UnknownCurrencyException; + +/** + * A currency. This class is immutable. + */ +final class Currency +{ + /** + * The currency code. + * + * For ISO currencies this will be the 3-letter uppercase ISO 4217 currency code. + * For non ISO currencies no constraints are defined, but the code must be unique across an application, and must + * not conflict with ISO currency codes. + * + * @var string + */ + private $currencyCode; + + /** + * The numeric currency code. + * + * For ISO currencies this will be the ISO 4217 numeric currency code, without leading zeros. + * For non ISO currencies no constraints are defined, but the code must be unique across an application, and must + * not conflict with ISO currency codes. + * + * If set to zero, the currency is considered to not have a numeric code. + * + * The numeric code can be useful when storing monies in a database. + * + * @var int + */ + private $numericCode; + + /** + * The name of the currency. + * + * For ISO currencies this will be the official English name of the currency. + * For non ISO currencies no constraints are defined. + * + * @var string + */ + private $name; + + /** + * The default number of fraction digits (typical scale) used with this currency. + * + * For example, the default number of fraction digits for the Euro is 2, while for the Japanese Yen it is 0. + * This cannot be a negative number. + * + * @var int + */ + private $defaultFractionDigits; + + /** + * Private constructor. Use getInstance() to obtain an instance. + * + * @param string $currencyCode The currency code. + * @param int $numericCode The numeric currency code. + * @param string $name The currency name. + * @param int $defaultFractionDigits The default number of fraction digits. + */ + public function __construct(string $currencyCode, int $numericCode, string $name, int $defaultFractionDigits) + { + if ($defaultFractionDigits < 0) { + throw new \InvalidArgumentException('The default fraction digits cannot be less than zero.'); + } + + $this->currencyCode = $currencyCode; + $this->numericCode = $numericCode; + $this->name = $name; + $this->defaultFractionDigits = $defaultFractionDigits; + } + + /** + * Returns a Currency instance matching the given ISO currency code. + * + * @param string|int $currencyCode The 3-letter or numeric ISO 4217 currency code. + * + * @return Currency + * + * @throws UnknownCurrencyException If an unknown currency code is given. + */ + public static function of($currencyCode) : Currency + { + return ISOCurrencyProvider::getInstance()->getCurrency($currencyCode); + } + + /** + * Returns a Currency instance for the given ISO country code. + * + * @param string $countryCode The 2-letter ISO 3166-1 country code. + * + * @return Currency + * + * @throws UnknownCurrencyException If the country code is unknown, or there is no single currency for the country. + */ + public static function ofCountry(string $countryCode) : Currency + { + return ISOCurrencyProvider::getInstance()->getCurrencyForCountry($countryCode); + } + + /** + * Returns the currency code. + * + * For ISO currencies this will be the 3-letter uppercase ISO 4217 currency code. + * For non ISO currencies no constraints are defined. + * + * @return string + */ + public function getCurrencyCode() : string + { + return $this->currencyCode; + } + + /** + * Returns the numeric currency code. + * + * For ISO currencies this will be the ISO 4217 numeric currency code, without leading zeros. + * For non ISO currencies no constraints are defined. + * + * @return int + */ + public function getNumericCode() : int + { + return $this->numericCode; + } + + /** + * Returns the name of the currency. + * + * For ISO currencies this will be the official English name of the currency. + * For non ISO currencies no constraints are defined. + * + * @return string + */ + public function getName() : string + { + return $this->name; + } + + /** + * Returns the default number of fraction digits (typical scale) used with this currency. + * + * For example, the default number of fraction digits for the Euro is 2, while for the Japanese Yen it is 0. + * + * @return int + */ + public function getDefaultFractionDigits() : int + { + return $this->defaultFractionDigits; + } + + /** + * Returns whether this currency is equal to the given currency. + * + * The currencies are considered equal if their currency codes are equal. + * + * @param Currency|string|int $currency The Currency instance, currency code or numeric currency code. + * + * @return bool + */ + public function is($currency) : bool + { + if ($currency instanceof Currency) { + return $this->currencyCode === $currency->currencyCode; + } + + return $this->currencyCode === (string) $currency + || ($this->numericCode !== 0 && $this->numericCode === (int) $currency); + } + + /** + * Returns the currency code. + * + * @return string + */ + public function __toString() : string + { + return $this->currencyCode; + } +} diff --git a/civicrm/vendor/brick/money/src/CurrencyConverter.php b/civicrm/vendor/brick/money/src/CurrencyConverter.php new file mode 100644 index 0000000000000000000000000000000000000000..5ed7cde13652f0fb7a3b45b19138d1314f1fbbc0 --- /dev/null +++ b/civicrm/vendor/brick/money/src/CurrencyConverter.php @@ -0,0 +1,100 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Context\DefaultContext; +use Brick\Money\Exception\CurrencyConversionException; + +use Brick\Math\BigRational; +use Brick\Math\Exception\RoundingNecessaryException; +use Brick\Math\RoundingMode; + +/** + * Converts monies into different currencies, using an exchange rate provider. + * + * @todo Now that this class provides methods to convert to both Money and RationalMoney, it makes little sense to + * provide the context in the constructor, as this only applies to convert() and not convertToRational(). + * This should probably be a parameter to convert(). + */ +final class CurrencyConverter +{ + /** + * The exchange rate provider. + * + * @var ExchangeRateProvider + */ + private $exchangeRateProvider; + + /** + * The context of the monies created by this currency converter. + * + * @var Context + */ + private $context; + + /** + * @param ExchangeRateProvider $exchangeRateProvider The exchange rate provider. + * @param Context|null $context A context to create the monies in, or null to use the default. + * The context only applies to convert(), not convertToRational(). + */ + public function __construct(ExchangeRateProvider $exchangeRateProvider, ?Context $context = null) + { + if ($context === null) { + $context = new DefaultContext(); + } + + $this->exchangeRateProvider = $exchangeRateProvider; + $this->context = $context; + } + + /** + * Converts the given money to the given currency. + * + * @param MoneyContainer $moneyContainer The Money, RationalMoney or MoneyBag to convert. + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * @param int $roundingMode The rounding mode, if necessary. + * + * @return Money + * + * @throws CurrencyConversionException If the exchange rate is not available. + * @throws RoundingNecessaryException If rounding is necessary and RoundingMode::UNNECESSARY is used. + */ + public function convert(MoneyContainer $moneyContainer, $currency, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + return $this->convertToRational($moneyContainer, $currency)->to($this->context, $roundingMode); + } + + /** + * Converts the given money to the given currency, and returns the result as a RationalMoney with no rounding. + * + * @param MoneyContainer $moneyContainer The Money, RationalMoney or MoneyBag to convert. + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * + * @return RationalMoney + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function convertToRational(MoneyContainer $moneyContainer, $currency) : RationalMoney + { + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + $currencyCode = $currency->getCurrencyCode(); + + $total = BigRational::zero(); + + foreach ($moneyContainer->getAmounts() as $sourceCurrencyCode => $amount) { + if ($sourceCurrencyCode !== $currencyCode) { + $exchangeRate = $this->exchangeRateProvider->getExchangeRate($sourceCurrencyCode, $currencyCode); + $amount = $amount->toBigRational()->multipliedBy($exchangeRate); + } + + $total = $total->plus($amount); + } + + return new RationalMoney($total, $currency); + } +} diff --git a/civicrm/vendor/brick/money/src/Exception/CurrencyConversionException.php b/civicrm/vendor/brick/money/src/Exception/CurrencyConversionException.php new file mode 100644 index 0000000000000000000000000000000000000000..30c0e82f26d7570c914c2cb96f85d7a940fbb5e8 --- /dev/null +++ b/civicrm/vendor/brick/money/src/Exception/CurrencyConversionException.php @@ -0,0 +1,74 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Exception; + +/** + * Exception thrown when an exchange rate is not available. + */ +class CurrencyConversionException extends MoneyException +{ + /** + * @var string + */ + private $sourceCurrencyCode; + + /** + * @var string + */ + private $targetCurrencyCode; + + /** + * CurrencyConversionException constructor. + * + * @param string $message + * @param string $sourceCurrencyCode + * @param string $targetCurrencyCode + */ + public function __construct(string $message, string $sourceCurrencyCode, string $targetCurrencyCode) + { + parent::__construct($message); + + $this->sourceCurrencyCode = $sourceCurrencyCode; + $this->targetCurrencyCode = $targetCurrencyCode; + } + + /** + * @param string $sourceCurrencyCode + * @param string $targetCurrencyCode + * @param string|null $info + * + * @return CurrencyConversionException + */ + public static function exchangeRateNotAvailable(string $sourceCurrencyCode, string $targetCurrencyCode, ?string $info = null) : self + { + $message = sprintf( + 'No exchange rate available to convert %s to %s', + $sourceCurrencyCode, + $targetCurrencyCode + ); + + if ($info !== null) { + $message .= ' (' . $info . ')'; + } + + return new self($message, $sourceCurrencyCode, $targetCurrencyCode); + } + + /** + * @return string + */ + public function getSourceCurrencyCode() : string + { + return $this->sourceCurrencyCode; + } + + /** + * @return string + */ + public function getTargetCurrencyCode() : string + { + return $this->targetCurrencyCode; + } +} diff --git a/civicrm/vendor/brick/money/src/Exception/MoneyException.php b/civicrm/vendor/brick/money/src/Exception/MoneyException.php new file mode 100644 index 0000000000000000000000000000000000000000..960b894c1469f69013504b88e139c0260709803e --- /dev/null +++ b/civicrm/vendor/brick/money/src/Exception/MoneyException.php @@ -0,0 +1,12 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Exception; + +/** + * Base class for money exceptions. + */ +abstract class MoneyException extends \Exception +{ +} diff --git a/civicrm/vendor/brick/money/src/Exception/MoneyMismatchException.php b/civicrm/vendor/brick/money/src/Exception/MoneyMismatchException.php new file mode 100644 index 0000000000000000000000000000000000000000..82444ebf198b26a4fd172ceef8f8aec3c8e0677c --- /dev/null +++ b/civicrm/vendor/brick/money/src/Exception/MoneyMismatchException.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Exception; + +use Brick\Money\Currency; + +/** + * Exception thrown when a money is not in the expected currency or context. + */ +class MoneyMismatchException extends MoneyException +{ + /** + * @param Currency $expected + * @param Currency $actual + * + * @return MoneyMismatchException + */ + public static function currencyMismatch(Currency $expected, Currency $actual) : self + { + return new self(sprintf( + 'The monies do not share the same currency: expected %s, got %s.', + $expected->getCurrencyCode(), + $actual->getCurrencyCode() + )); + } + + /** + * @param string $method + * + * @return MoneyMismatchException + */ + public static function contextMismatch(string $method) : self + { + return new self(sprintf( + 'The monies do not share the same context. ' . + 'If this is intended, use %s($money->toRational()) instead of %s($money).', + $method, + $method + )); + } +} diff --git a/civicrm/vendor/brick/money/src/Exception/UnknownCurrencyException.php b/civicrm/vendor/brick/money/src/Exception/UnknownCurrencyException.php new file mode 100644 index 0000000000000000000000000000000000000000..57944191bb955917d49245f664c77677aee19818 --- /dev/null +++ b/civicrm/vendor/brick/money/src/Exception/UnknownCurrencyException.php @@ -0,0 +1,42 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\Exception; + +/** + * Exception thrown when attempting to create a Currency from an unknown currency code. + */ +class UnknownCurrencyException extends MoneyException +{ + /** + * @param string|int $currencyCode + * + * @return UnknownCurrencyException + */ + public static function unknownCurrency($currencyCode) : self + { + return new self('Unknown currency code: ' . $currencyCode); + } + + /** + * @param string $countryCode + * + * @return UnknownCurrencyException + */ + public static function noCurrencyForCountry(string $countryCode) : self + { + return new self('No currency found for country ' . $countryCode); + } + + /** + * @param string $countryCode + * @param array $currencyCodes + * + * @return UnknownCurrencyException + */ + public static function noSingleCurrencyForCountry(string $countryCode, array $currencyCodes) : self + { + return new self('No single currency for country ' . $countryCode . ': ' . implode(', ', $currencyCodes)); + } +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..e1d921a6025273569203a0807516838b8bc08079 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider.php @@ -0,0 +1,25 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\CurrencyConversionException; + +use Brick\Math\BigNumber; + +/** + * Interface for exchange rate providers. + */ +interface ExchangeRateProvider +{ + /** + * @param string $sourceCurrencyCode The source currency code. + * @param string $targetCurrencyCode The target currency code. + * + * @return BigNumber|int|float|string The exchange rate. + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode); +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..254e015d9dd21cfe01b44ec2e12034eaf8300c55 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php @@ -0,0 +1,66 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +use Brick\Money\ExchangeRateProvider; + +use Brick\Math\BigRational; + +/** + * Calculates exchange rates relative to a base currency. + * + * This provider is useful when your exchange rates source only provides exchange rates relative to a single currency. + * + * For example, if your source only has exchange rates from USD to EUR and USD to GBP, + * using this provider on top of it would allow you to get an exchange rate from EUR to USD, GBP to USD, + * or even EUR to GBP and GBP to EUR. + */ +final class BaseCurrencyProvider implements ExchangeRateProvider +{ + /** + * The provider for rates relative to the base currency. + * + * @var ExchangeRateProvider + */ + private $provider; + + /** + * The code of the currency all the exchanges rates are based on. + * + * @var string + */ + private $baseCurrencyCode; + + /** + * @param ExchangeRateProvider $provider The provider for rates relative to the base currency. + * @param string $baseCurrencyCode The code of the currency all the exchanges rates are based on. + */ + public function __construct(ExchangeRateProvider $provider, string $baseCurrencyCode) + { + $this->provider = $provider; + $this->baseCurrencyCode = $baseCurrencyCode; + } + + /** + * {@inheritdoc} + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + { + if ($sourceCurrencyCode === $this->baseCurrencyCode) { + return $this->provider->getExchangeRate($sourceCurrencyCode, $targetCurrencyCode); + } + + if ($targetCurrencyCode === $this->baseCurrencyCode) { + $exchangeRate = $this->provider->getExchangeRate($targetCurrencyCode, $sourceCurrencyCode); + + return BigRational::of($exchangeRate)->reciprocal(); + } + + $baseToSource = $this->provider->getExchangeRate($this->baseCurrencyCode, $sourceCurrencyCode); + $baseToTarget = $this->provider->getExchangeRate($this->baseCurrencyCode, $targetCurrencyCode); + + return BigRational::of($baseToTarget)->dividedBy($baseToSource); + } +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..1c1eb4a22a6d6e4da0faabbedc3249976cdb5b33 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +use Brick\Money\ExchangeRateProvider; + +/** + * Caches the results of another exchange rate provider. + */ +final class CachedProvider implements ExchangeRateProvider +{ + /** + * The underlying exchange rate provider. + * + * @var ExchangeRateProvider + */ + private $provider; + + /** + * The cached exchange rates. + * + * @var array + */ + private $exchangeRates = []; + + /** + * Class constructor. + * + * @param ExchangeRateProvider $provider + */ + public function __construct(ExchangeRateProvider $provider) + { + $this->provider = $provider; + } + + /** + * {@inheritdoc} + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + { + if (isset($this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode])) { + return $this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode]; + } + + $exchangeRate = $this->provider->getExchangeRate($sourceCurrencyCode, $targetCurrencyCode); + + $this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode] = $exchangeRate; + + return $exchangeRate; + } + + /** + * Invalidates the cache. + * + * This forces the exchange rates to be fetched again from the underlying provider. + * + * @return void + */ + public function invalidate() : void + { + $this->exchangeRates = []; + } +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..3a5f7cf7fe0580b40c33ec678c414b9bf45030a5 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php @@ -0,0 +1,47 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +use Brick\Money\ExchangeRateProvider; +use Brick\Money\Exception\CurrencyConversionException; + +use Brick\Math\BigNumber; + +/** + * A configurable exchange rate provider. + */ +final class ConfigurableProvider implements ExchangeRateProvider +{ + /** + * @var array + */ + private $exchangeRates = []; + + /** + * @param string $sourceCurrencyCode + * @param string $targetCurrencyCode + * @param BigNumber|int|float|string $exchangeRate + * + * @return ConfigurableProvider This instance, for chaining. + */ + public function setExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode, $exchangeRate) : self + { + $this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode] = $exchangeRate; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + { + if (isset($this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode])) { + return $this->exchangeRates[$sourceCurrencyCode][$targetCurrencyCode]; + } + + throw CurrencyConversionException::exchangeRateNotAvailable($sourceCurrencyCode, $targetCurrencyCode); + } +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..f466f30c861f03bcd1caacd308997feda75234ba --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php @@ -0,0 +1,155 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +use Brick\Money\ExchangeRateProvider; +use Brick\Money\Exception\CurrencyConversionException; + +/** + * Reads exchange rates from a PDO database connection. + */ +final class PDOProvider implements ExchangeRateProvider +{ + /** + * The SELECT statement. + * + * @var \PDOStatement + */ + private $statement; + + /** + * The source currency code if fixed, or null if dynamic. + * + * @var string|null + */ + private $sourceCurrencyCode; + + /** + * The target currency code if fixed, or null if dynamic. + * + * @var string|null + */ + private $targetCurrencyCode; + + /** + * Extra parameters set dynamically to resolve the query placeholders. + * + * @var array + */ + private $parameters = []; + + /** + * @param \PDO $pdo + * @param PDOProviderConfiguration $configuration + * + * @throws \InvalidArgumentException + */ + public function __construct(\PDO $pdo, PDOProviderConfiguration $configuration) + { + $conditions = []; + + if ($configuration->tableName === null) { + throw new \InvalidArgumentException('Invalid configuration: $tableName is not set.'); + } + + if ($configuration->exchangeRateColumnName === null) { + throw new \InvalidArgumentException('Invalid configuration: $exchangeRateColumnName is not set.'); + } + + if ($configuration->sourceCurrencyCode !== null && $configuration->targetCurrencyCode !== null) { + throw new \InvalidArgumentException('Invalid configuration: $sourceCurrencyCode and $targetCurrencyCode cannot be both set.'); + } + + if ($configuration->whereConditions !== null) { + $conditions[] = '(' . $configuration->whereConditions . ')'; + } + + if ($configuration->sourceCurrencyCode !== null) { + $this->sourceCurrencyCode = $configuration->sourceCurrencyCode; + } elseif ($configuration->sourceCurrencyColumnName !== null) { + $conditions[] = $configuration->sourceCurrencyColumnName . ' = ?'; + } else { + throw new \InvalidArgumentException('Invalid configuration: one of $sourceCurrencyCode or $sourceCurrencyColumnName must be set.'); + } + + if ($configuration->targetCurrencyCode !== null) { + $this->targetCurrencyCode = $configuration->targetCurrencyCode; + } elseif ($configuration->targetCurrencyColumnName !== null) { + $conditions[] = $configuration->targetCurrencyColumnName . ' = ?'; + } else { + throw new \InvalidArgumentException('Invalid configuration: one of $targetCurrencyCode or $targetCurrencyColumnName must be set.'); + } + + $conditions = implode(' AND ' , $conditions); + + $query = sprintf( + 'SELECT %s FROM %s WHERE %s', + $configuration->exchangeRateColumnName, + $configuration->tableName, + $conditions + ); + + $this->statement = $pdo->prepare($query); + } + + /** + * Sets the parameters to dynamically resolve the extra query placeholders, if any. + * + * This is used in conjunction with $whereConditions in the configuration class. + * The number of parameters passed to this method must match the number of placeholders. + * + * @param mixed ...$parameters + * + * @return void + */ + public function setParameters(...$parameters) : void + { + $this->parameters = $parameters; + } + + /** + * {@inheritdoc} + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + { + $parameters = $this->parameters; + + if ($this->sourceCurrencyCode === null) { + $parameters[] = $sourceCurrencyCode; + } elseif ($this->sourceCurrencyCode !== $sourceCurrencyCode) { + $info = 'source currency must be ' . $this->sourceCurrencyCode; + + throw CurrencyConversionException::exchangeRateNotAvailable($sourceCurrencyCode, $targetCurrencyCode, $info); + } + + if ($this->targetCurrencyCode === null) { + $parameters[] = $targetCurrencyCode; + } elseif ($this->targetCurrencyCode !== $targetCurrencyCode) { + $info = 'target currency must be ' . $this->targetCurrencyCode; + + throw CurrencyConversionException::exchangeRateNotAvailable($sourceCurrencyCode, $targetCurrencyCode, $info); + } + + $this->statement->execute($parameters); + + $exchangeRate = $this->statement->fetchColumn(); + + if ($exchangeRate === false) { + if ($this->parameters !== []) { + $info = []; + foreach ($this->parameters as $parameter) { + $info[] = var_export($parameter, true); + } + $info = 'parameters: ' . implode(', ', $info); + } else { + $info = null; + } + + throw CurrencyConversionException::exchangeRateNotAvailable($sourceCurrencyCode, $targetCurrencyCode, $info); + } + + return $exchangeRate; + } +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php new file mode 100644 index 0000000000000000000000000000000000000000..00681663187fa9caa8bd238bf5e8ed9ed80d446f --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php @@ -0,0 +1,74 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +/** + * Configuration for the PDOExchangeRateProvider. + */ +final class PDOProviderConfiguration +{ + /** + * The name of the table that holds the exchange rates. Required. + * + * @var string + */ + public $tableName; + + /** + * The name of the column that holds the source currency code. Optional. + * + * If not set, $sourceCurrencyCode must be set. + * + * @var string|null + */ + public $sourceCurrencyColumnName; + + /** + * The source currency code, if it is fixed. Optional. + * + * If not set, $sourceCurrencyColumnName must be set. + * + * @var string|null + */ + public $sourceCurrencyCode; + + /** + * The name of the column that holds the target currency code. Optional. + * + * If not set, $targetCurrencyCode must be set. + * + * @var string|null + */ + public $targetCurrencyColumnName; + + /** + * The target currency code, if it is fixed. Optional. + * + * If not set, $targetCurrencyColumnName must be set. + * + * @var string|null + */ + public $targetCurrencyCode; + + /** + * The name of the column that holds the exchange rate for the currency pair. Required. + * + * @var string + */ + public $exchangeRateColumnName; + + /** + * Extra WHERE conditions that will be included in the database query. Optional. + * + * The conditions can include question mark placeholders, that will be resolved dynamically when loading + * exchange rates. The parameters need to be set using the setParameters() method. The number of parameters + * provided to setParameters() must match the number of placeholders. + * + * This can be used, for example, to query an exchange rate for a particular date. + * + * @var string|null + */ + public $whereConditions; +} diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/ProviderChain.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ProviderChain.php new file mode 100644 index 0000000000000000000000000000000000000000..f5a4baddedff9744732cdc21c9c1a2a9e884aeb0 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ProviderChain.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money\ExchangeRateProvider; + +use Brick\Money\Exception\CurrencyConversionException; +use Brick\Money\ExchangeRateProvider; + +/** + * A chain of exchange rate providers. + */ +final class ProviderChain implements ExchangeRateProvider +{ + /** + * The exchange rate providers, indexed by object hash. + * + * @var ExchangeRateProvider[] + */ + private $providers = []; + + /** + * Adds an exchange rate provider to the chain. + * + * If the provider is already registered, this method does nothing. + * + * @param ExchangeRateProvider $provider The exchange rate provider to add. + * + * @return ProviderChain This instance, for chaining. + */ + public function addExchangeRateProvider(ExchangeRateProvider $provider) : self + { + $hash = spl_object_hash($provider); + $this->providers[$hash] = $provider; + + return $this; + } + + /** + * Removes an exchange rate provider from the chain. + * + * If the provider is not registered, this method does nothing. + * + * @param ExchangeRateProvider $provider The exchange rate provider to remove. + * + * @return ProviderChain This instance, for chaining. + */ + public function removeExchangeRateProvider(ExchangeRateProvider $provider) : self + { + $hash = spl_object_hash($provider); + unset($this->providers[$hash]); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + { + foreach ($this->providers as $provider) { + try { + return $provider->getExchangeRate($sourceCurrencyCode, $targetCurrencyCode); + } catch (CurrencyConversionException $e) { + continue; + } + } + + throw CurrencyConversionException::exchangeRateNotAvailable($sourceCurrencyCode, $targetCurrencyCode); + } +} diff --git a/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php b/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..d90561a6305428aa236d1b13f8c69a7ad9180448 --- /dev/null +++ b/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php @@ -0,0 +1,195 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\UnknownCurrencyException; + +/** + * Provides ISO 4217 currencies. + */ +final class ISOCurrencyProvider +{ + /** + * @var ISOCurrencyProvider|null + */ + private static $instance; + + /** + * The raw currency data, indexed by currency code. + * + * @var array + */ + private $currencyData; + + /** + * An associative array of currency numeric code to currency code. + * + * This property is set on-demand, as soon as required. + * + * @var array|null + */ + private $numericToCurrency; + + /** + * An associative array of country code to currency codes. + * + * This property is set on-demand, as soon as required. + * + * @var array|null + */ + private $countryToCurrency; + + /** + * The Currency instances. + * + * The instances are created on-demand, as soon as they are requested. + * + * @var Currency[] + */ + private $currencies = []; + + /** + * Whether the provider is in a partial state. + * + * This is true as long as all the currencies have not been instantiated yet. + * + * @var bool + */ + private $isPartial = true; + + /** + * Private constructor. Use `getInstance()` to obtain the singleton instance. + */ + private function __construct() + { + $this->currencyData = require __DIR__ . '/../data/iso-currencies.php'; + } + + /** + * Returns the singleton instance of ISOCurrencyProvider. + * + * @return ISOCurrencyProvider + */ + public static function getInstance() : ISOCurrencyProvider + { + if (self::$instance === null) { + self::$instance = new ISOCurrencyProvider(); + } + + return self::$instance; + } + + /** + * Returns the currency matching the given currency code. + * + * @param string|int $currencyCode The 3-letter or numeric ISO 4217 currency code. + * + * @return Currency The currency. + * + * @throws UnknownCurrencyException If the currency code is not known. + */ + public function getCurrency($currencyCode) : Currency + { + if (isset($this->currencies[$currencyCode])) { + return $this->currencies[$currencyCode]; + } + + if (! isset($this->currencyData[$currencyCode])) { + if ($this->numericToCurrency === null) { + $this->numericToCurrency = require __DIR__ . '/../data/numeric-to-currency.php'; + } + + if (isset($this->numericToCurrency[$currencyCode])) { + return $this->getCurrency($this->numericToCurrency[$currencyCode]); + } + + throw UnknownCurrencyException::unknownCurrency($currencyCode); + } + + $currency = new Currency(... $this->currencyData[$currencyCode]); + + return $this->currencies[$currencyCode] = $currency; + } + + /** + * Returns all the available currencies. + * + * @return Currency[] The currencies, indexed by currency code. + */ + public function getAvailableCurrencies() : array + { + if ($this->isPartial) { + foreach ($this->currencyData as $currencyCode => $data) { + if (! isset($this->currencies[$currencyCode])) { + $this->currencies[$currencyCode] = new Currency(... $data); + } + } + + ksort($this->currencies); + + $this->isPartial = false; + } + + return $this->currencies; + } + + /** + * Returns the currency for the given ISO country code. + * + * @param string $countryCode The 2-letter ISO 3166-1 country code. + * + * @return Currency + * + * @throws UnknownCurrencyException If the country code is not known, or the country has no single currency. + */ + public function getCurrencyForCountry(string $countryCode) : Currency + { + $currencies = $this->getCurrenciesForCountry($countryCode); + + $count = count($currencies); + + if ($count === 1) { + return $currencies[0]; + } + + if ($count === 0) { + throw UnknownCurrencyException::noCurrencyForCountry($countryCode); + } + + $currencyCodes = []; + + foreach ($currencies as $currency) { + $currencyCodes[] = $currency->getCurrencyCode(); + } + + throw UnknownCurrencyException::noSingleCurrencyForCountry($countryCode, $currencyCodes); + } + + /** + * Returns the currencies for the given ISO country code. + * + * If the country code is not known, or if the country has no official currency, an empty array is returned. + * + * @param string $countryCode The 2-letter ISO 3166-1 country code. + * + * @return Currency[] + */ + public function getCurrenciesForCountry(string $countryCode) : array + { + if ($this->countryToCurrency === null) { + $this->countryToCurrency = require __DIR__ . '/../data/country-to-currency.php'; + } + + $result = []; + + if (isset($this->countryToCurrency[$countryCode])) { + foreach ($this->countryToCurrency[$countryCode] as $currencyCode) { + $result[] = $this->getCurrency($currencyCode); + } + } + + return $result; + } +} diff --git a/civicrm/vendor/brick/money/src/Money.php b/civicrm/vendor/brick/money/src/Money.php new file mode 100644 index 0000000000000000000000000000000000000000..67df7b02da08dbe5896d73d36d217e9f94ab8a66 --- /dev/null +++ b/civicrm/vendor/brick/money/src/Money.php @@ -0,0 +1,727 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Context\DefaultContext; +use Brick\Money\Exception\MoneyMismatchException; +use Brick\Money\Exception\UnknownCurrencyException; + +use Brick\Math\BigDecimal; +use Brick\Math\BigInteger; +use Brick\Math\BigNumber; +use Brick\Math\BigRational; +use Brick\Math\RoundingMode; +use Brick\Math\Exception\MathException; +use Brick\Math\Exception\NumberFormatException; +use Brick\Math\Exception\RoundingNecessaryException; + +/** + * A monetary value in a given currency. This class is immutable. + * + * A Money has an amount, a currency, and a context. The context defines the scale of the amount, and an optional cash + * rounding step, for monies that do not have coins or notes for their smallest units. + * + * All operations on a Money return another Money with the same context. The available contexts are: + * + * - DefaultContext handles monies with the default scale for the currency. + * - CashContext is similar to DefaultContext, but supports a cash rounding step. + * - CustomContext handles monies with a custom scale, and optionally step. + * - AutoContext automatically adjusts the scale of the money to the minimum required. + */ +final class Money extends AbstractMoney +{ + /** + * The amount. + * + * @var \Brick\Math\BigDecimal + */ + private $amount; + + /** + * The currency. + * + * @var \Brick\Money\Currency + */ + private $currency; + + /** + * The context that defines the capability of this Money. + * + * @var Context + */ + private $context; + + /** + * @param BigDecimal $amount + * @param Currency $currency + * @param Context $context + */ + private function __construct(BigDecimal $amount, Currency $currency, Context $context) + { + $this->amount = $amount; + $this->currency = $currency; + $this->context = $context; + } + + /** + * Returns the minimum of the given monies. + * + * If several monies are equal to the minimum value, the first one is returned. + * + * @param Money $money The first money. + * @param Money ...$monies The subsequent monies. + * + * @return Money + * + * @throws MoneyMismatchException If all the monies are not in the same currency. + */ + public static function min(Money $money, Money ...$monies) : Money + { + $min = $money; + + foreach ($monies as $money) { + if ($money->isLessThan($min)) { + $min = $money; + } + } + + return $min; + } + + /** + * Returns the maximum of the given monies. + * + * If several monies are equal to the maximum value, the first one is returned. + * + * @param Money $money The first money. + * @param Money ...$monies The subsequent monies. + * + * @return Money + * + * @throws MoneyMismatchException If all the monies are not in the same currency. + */ + public static function max(Money $money, Money ...$monies) : Money + { + $max = $money; + + foreach ($monies as $money) { + if ($money->isGreaterThan($max)) { + $max = $money; + } + } + + return $max; + } + + /** + * Returns the total of the given monies. + * + * The monies must share the same currency and context. + * + * @param Money $money The first money. + * @param Money ...$monies The subsequent monies. + * + * @return Money + * + * @throws MoneyMismatchException If all the monies are not in the same currency and context. + */ + public static function total(Money $money, Money ...$monies) : Money + { + $total = $money; + + foreach ($monies as $money) { + $total = $total->plus($money); + } + + return $total; + } + + /** + * Creates a Money from a rational amount, a currency, and a context. + * + * @param BigNumber $amount The amount. + * @param Currency $currency The currency. + * @param Context $context The context. + * @param int $roundingMode An optional rounding mode if the amount does not fit the context. + * + * @return Money + * + * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is used but rounding is necessary. + */ + public static function create(BigNumber $amount, Currency $currency, Context $context, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + $amount = $context->applyTo($amount, $currency, $roundingMode); + + return new Money($amount, $currency, $context); + } + + /** + * Returns a Money of the given amount and currency. + * + * By default, the money is created with a DefaultContext. This means that the amount is scaled to match the + * currency's default fraction digits. For example, `Money::of('2.5', 'USD')` will yield `USD 2.50`. + * If the amount cannot be safely converted to this scale, an exception is thrown. + * + * To override this behaviour, a Context instance can be provided. + * Operations on this Money return a Money with the same context. + * + * @param BigNumber|int|float|string $amount The monetary amount. + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * @param Context|null $context An optional Context. + * @param int $roundingMode An optional RoundingMode, if the amount does not fit the context. + * + * @return Money + * + * @throws NumberFormatException If the amount is a string in a non-supported format. + * @throws RoundingNecessaryException If the rounding was necessary to represent the amount at the requested scale. + */ + public static function of($amount, $currency, ?Context $context = null, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + if ($context === null) { + $context = new DefaultContext(); + } + + $amount = BigNumber::of($amount); + + return self::create($amount, $currency, $context, $roundingMode); + } + + /** + * Returns a Money from a number of minor units. + * + * By default, the money is created with a DefaultContext. This means that the amount is scaled to match the + * currency's default fraction digits. For example, `Money::ofMinor(1234, 'USD')` will yield `USD 12.34`. + * If the amount cannot be safely converted to this scale, an exception is thrown. + * + * @param BigNumber|int|float|string $minorAmount The amount, in minor currency units. + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * @param Context|null $context An optional Context. + * @param int $roundingMode An optional RoundingMode, if the amount does not fit the context. + * + * @return Money + * + * @throws UnknownCurrencyException If the currency is an unknown currency code. + * @throws MathException If the amount cannot be converted to a BigInteger. + */ + public static function ofMinor($minorAmount, $currency, ?Context $context = null, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + if ($context === null) { + $context = new DefaultContext(); + } + + $amount = BigRational::of($minorAmount)->dividedBy(10 ** $currency->getDefaultFractionDigits()); + + return self::create($amount, $currency, $context, $roundingMode); + } + + /** + * Returns a Money with zero value, in the given currency. + * + * By default, the money is created with a DefaultContext: it has the default scale for the currency. + * A Context instance can be provided to override the default. + * + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * @param Context|null $context An optional context. + * + * @return Money + */ + public static function zero($currency, ?Context $context = null) : Money + { + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + if ($context === null) { + $context = new DefaultContext(); + } + + $amount = BigDecimal::zero(); + + return self::create($amount, $currency, $context); + } + + /** + * Returns the amount of this Money, as a BigDecimal. + * + * @return BigDecimal + */ + public function getAmount() : BigDecimal + { + return $this->amount; + } + + /** + * Returns the amount of this Money in minor units (cents) for the currency. + * + * The value is returned as a BigDecimal. If this Money has a scale greater than that of the currency, the result + * will have a non-zero scale. + * + * For example, `USD 1.23` will return a BigDecimal of `123`, while `USD 1.2345` will return `123.45`. + * + * @return BigDecimal + */ + public function getMinorAmount() : BigDecimal + { + return $this->amount->withPointMovedRight($this->currency->getDefaultFractionDigits()); + } + + /** + * Returns a BigInteger containing the unscaled value (all digits) of this money. + * + * For example, `123.4567 USD` will return a BigInteger of `1234567`. + * + * @return BigInteger + */ + public function getUnscaledAmount() : BigInteger + { + return $this->amount->getUnscaledValue(); + } + + /** + * Returns the Currency of this Money. + * + * @return Currency + */ + public function getCurrency() : Currency + { + return $this->currency; + } + + /** + * Returns the Context of this Money. + * + * @return Context + */ + public function getContext() : Context + { + return $this->context; + } + + /** + * Returns the sum of this Money and the given amount. + * + * If the operand is a Money, it must have the same context as this Money, or an exception is thrown. + * This is by design, to ensure that contexts are not mixed accidentally. + * If you do need to add a Money in a different context, you can use `plus($money->toRational())`. + * + * The resulting Money has the same context as this Money. If the result needs rounding to fit this context, a + * rounding mode can be provided. If a rounding mode is not provided and rounding is necessary, an exception is + * thrown. + * + * @param AbstractMoney|BigNumber|int|float|string $that The money or amount to add. + * @param int $roundingMode An optional RoundingMode constant. + * + * @return Money + * + * @throws MathException If the argument is an invalid number or rounding is necessary. + * @throws MoneyMismatchException If the argument is a money in a different currency or in a different context. + */ + public function plus($that, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + $amount = $this->getAmountOf($that); + + if ($that instanceof Money) { + $this->checkContext($that->getContext(), __FUNCTION__); + + if ($this->context->isFixedScale()) { + return new Money($this->amount->plus($that->amount), $this->currency, $this->context); + } + } + + $amount = $this->amount->toBigRational()->plus($amount); + + return self::create($amount, $this->currency, $this->context, $roundingMode); + } + + /** + * Returns the difference of this Money and the given amount. + * + * If the operand is a Money, it must have the same context as this Money, or an exception is thrown. + * This is by design, to ensure that contexts are not mixed accidentally. + * If you do need to subtract a Money in a different context, you can use `minus($money->toRational())`. + * + * The resulting Money has the same context as this Money. If the result needs rounding to fit this context, a + * rounding mode can be provided. If a rounding mode is not provided and rounding is necessary, an exception is + * thrown. + * + * @param AbstractMoney|BigNumber|int|float|string $that The money or amount to subtract. + * @param int $roundingMode An optional RoundingMode constant. + * + * @return Money + * + * @throws MathException If the argument is an invalid number or rounding is necessary. + * @throws MoneyMismatchException If the argument is a money in a different currency or in a different context. + */ + public function minus($that, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + $amount = $this->getAmountOf($that); + + if ($that instanceof Money) { + $this->checkContext($that->getContext(), __FUNCTION__); + + if ($this->context->isFixedScale()) { + return new Money($this->amount->minus($that->amount), $this->currency, $this->context); + } + } + + $amount = $this->amount->toBigRational()->minus($amount); + + return self::create($amount, $this->currency, $this->context, $roundingMode); + } + + /** + * Returns the product of this Money and the given number. + * + * The resulting Money has the same context as this Money. If the result needs rounding to fit this context, a + * rounding mode can be provided. If a rounding mode is not provided and rounding is necessary, an exception is + * thrown. + * + * @param BigNumber|int|float|string $that The multiplier. + * @param int $roundingMode An optional RoundingMode constant. + * + * @return Money + * + * @throws MathException If the argument is an invalid number or rounding is necessary. + */ + public function multipliedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + $amount = $this->amount->toBigRational()->multipliedBy($that); + + return self::create($amount, $this->currency, $this->context, $roundingMode); + } + + /** + * Returns the result of the division of this Money by the given number. + * + * The resulting Money has the same context as this Money. If the result needs rounding to fit this context, a + * rounding mode can be provided. If a rounding mode is not provided and rounding is necessary, an exception is + * thrown. + * + * @param BigNumber|int|float|string $that The divisor. + * @param int $roundingMode An optional RoundingMode constant. + * + * @return Money + * + * @throws MathException If the argument is an invalid number or is zero, or rounding is necessary. + */ + public function dividedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + $amount = $this->amount->toBigRational()->dividedBy($that); + + return self::create($amount, $this->currency, $this->context, $roundingMode); + } + + /** + * Returns the quotient of the division of this Money by the given number. + * + * The given number must be a integer value. The resulting Money has the same context as this Money. + * This method can serve as a basis for a money allocation algorithm. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return Money + * + * @throws MathException If the divisor cannot be converted to a BigInteger. + */ + public function quotient($that) : Money + { + $that = BigInteger::of($that); + $step = $this->context->getStep(); + + $scale = $this->amount->getScale(); + $amount = $this->amount->withPointMovedRight($scale)->dividedBy($step); + + $q = $amount->quotient($that); + $q = $q->multipliedBy($step)->withPointMovedLeft($scale); + + return new Money($q, $this->currency, $this->context); + } + + /** + * Returns the quotient and the remainder of the division of this Money by the given number. + * + * The given number must be an integer value. The resulting monies have the same context as this Money. + * This method can serve as a basis for a money allocation algorithm. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return Money[] The quotient and the remainder. + * + * @throws MathException If the divisor cannot be converted to a BigInteger. + */ + public function quotientAndRemainder($that) : array + { + $that = BigInteger::of($that); + $step = $this->context->getStep(); + + $scale = $this->amount->getScale(); + $amount = $this->amount->withPointMovedRight($scale)->dividedBy($step); + + [$q, $r] = $amount->quotientAndRemainder($that); + + $q = $q->multipliedBy($step)->withPointMovedLeft($scale); + $r = $r->multipliedBy($step)->withPointMovedLeft($scale); + + $quotient = new Money($q, $this->currency, $this->context); + $remainder = new Money($r, $this->currency, $this->context); + + return [$quotient, $remainder]; + } + + /** + * Allocates this Money according to a list of ratios. + * + * If the allocation yields a remainder, its amount is split over the first monies in the list, + * so that the total of the resulting monies is always equal to this Money. + * + * For example, given a `USD 49.99` money in the default context, + * `allocate(1, 2, 3, 4)` returns [`USD 5.00`, `USD 10.00`, `USD 15.00`, `USD 19.99`] + * + * The resulting monies have the same context as this Money. + * + * @param int[] $ratios The ratios. + * + * @return Money[] + * + * @throws \InvalidArgumentException If called with invalid parameters. + */ + public function allocate(int ...$ratios) : array + { + if (! $ratios) { + throw new \InvalidArgumentException('Cannot allocate() an empty list of ratios.'); + } + + foreach ($ratios as $ratio) { + if ($ratio < 0) { + throw new \InvalidArgumentException('Cannot allocate() negative ratios.'); + } + } + + $total = array_sum($ratios); + + if ($total === 0) { + throw new \InvalidArgumentException('Cannot allocate() to zero ratios only.'); + } + + $step = $this->context->getStep(); + + $monies = []; + + $unit = BigDecimal::ofUnscaledValue($step, $this->amount->getScale()); + $unit = new Money($unit, $this->currency, $this->context); + + if ($this->isNegative()) { + $unit = $unit->negated(); + } + + $remainder = $this; + + foreach ($ratios as $ratio) { + $money = $this->multipliedBy($ratio)->quotient($total); + $remainder = $remainder->minus($money); + $monies[] = $money; + } + + foreach ($monies as $key => $money) { + if ($remainder->isZero()) { + break; + } + + $monies[$key] = $money->plus($unit); + $remainder = $remainder->minus($unit); + } + + return $monies; + } + + /** + * Splits this Money into a number of parts. + * + * If the division of this Money by the number of parts yields a remainder, its amount is split over the first + * monies in the list, so that the total of the resulting monies is always equal to this Money. + * + * For example, given a `USD 100.00` money in the default context, + * `split(3)` returns [`USD 33.34`, `USD 33.33`, `USD 33.33`] + * + * The resulting monies have the same context as this Money. + * + * @param int $parts The number of parts. + * + * @return Money[] + * + * @throws \InvalidArgumentException If called with invalid parameters. + */ + public function split(int $parts) : array + { + if ($parts < 1) { + throw new \InvalidArgumentException('Cannot split() into less than 1 part.'); + } + + return $this->allocate(...array_fill(0, $parts, 1)); + } + + /** + * Returns a Money whose value is the absolute value of this Money. + * + * The resulting Money has the same context as this Money. + * + * @return Money + */ + public function abs() : Money + { + return new Money($this->amount->abs(), $this->currency, $this->context); + } + + /** + * Returns a Money whose value is the negated value of this Money. + * + * The resulting Money has the same context as this Money. + * + * @return Money + */ + public function negated() : Money + { + return new Money($this->amount->negated(), $this->currency, $this->context); + } + + /** + * Converts this Money to another currency, using an exchange rate. + * + * By default, the resulting Money has the same context as this Money. + * This can be overridden by providing a Context. + * + * For example, converting a default money of `USD 1.23` to `EUR` with an exchange rate of `0.91` and + * RoundingMode::UP will yield `EUR 1.12`. + * + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * @param BigNumber|int|float|string $exchangeRate The exchange rate to multiply by. + * @param Context|null $context An optional context. + * @param int $roundingMode An optional rounding mode. + * + * @return Money + * + * @throws UnknownCurrencyException If an unknown currency code is given. + * @throws MathException If the exchange rate or rounding mode is invalid, or rounding is necessary. + */ + public function convertedTo($currency, $exchangeRate, ?Context $context = null, int $roundingMode = RoundingMode::UNNECESSARY) : Money + { + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + if ($context === null) { + $context = $this->context; + } + + $amount = $this->amount->toBigRational()->multipliedBy($exchangeRate); + + return self::create($amount, $currency, $context, $roundingMode); + } + + /** + * Formats this Money with the given NumberFormatter. + * + * Note that NumberFormatter internally represents values using floating point arithmetic, + * so discrepancies can appear when formatting very large monetary values. + * + * @param \NumberFormatter $formatter The formatter to format with. + * + * @return string + */ + public function formatWith(\NumberFormatter $formatter) : string + { + return $formatter->formatCurrency( + $this->amount->toFloat(), + $this->currency->getCurrencyCode() + ); + } + + /** + * Formats this Money to the given locale. + * + * Note that this method uses NumberFormatter, which internally represents values using floating point arithmetic, + * so discrepancies can appear when formatting very large monetary values. + * + * @param string $locale The locale to format to. + * @param bool $allowWholeNumber Whether to allow formatting as a whole number if the amount has no fraction. + * + * @return string + */ + public function formatTo(string $locale, bool $allowWholeNumber = false) : string + { + static $lastFormatter = null; + static $lastFormatterLocale; + static $lastFormatterScale; + + if ($allowWholeNumber && ! $this->amount->hasNonZeroFractionalPart()) { + $scale = 0; + } else { + $scale = $this->amount->getScale(); + } + + if ($lastFormatter !== null && $lastFormatterLocale === $locale) { + $formatter = $lastFormatter; + + if ($lastFormatterScale !== $scale) { + $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $scale); + $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $scale); + + $lastFormatterScale = $scale; + } + } else { + $formatter = new \NumberFormatter($locale, \NumberFormatter::CURRENCY); + + $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $scale); + $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $scale); + + $lastFormatter = $formatter; + $lastFormatterLocale = $locale; + $lastFormatterScale = $scale; + } + + return $this->formatWith($formatter); + } + + /** + * @return RationalMoney + */ + public function toRational() : RationalMoney + { + return new RationalMoney($this->amount->toBigRational(), $this->currency); + } + + /** + * Returns a non-localized string representation of this Money, e.g. "EUR 23.00". + * + * @return string + */ + public function __toString() : string + { + return $this->currency . ' ' . $this->amount; + } + + /** + * @param Context $context The Context to check against this Money. + * @param string $method The invoked method name. + * + * @return void + * + * @throws MoneyMismatchException If monies don't match. + */ + protected function checkContext(Context $context, string $method) : void + { + if ($this->context != $context) { // non-strict equality on purpose + throw MoneyMismatchException::contextMismatch($method); + } + } +} diff --git a/civicrm/vendor/brick/money/src/MoneyBag.php b/civicrm/vendor/brick/money/src/MoneyBag.php new file mode 100644 index 0000000000000000000000000000000000000000..01389bf0855395153677a583dd807cfd1860a4db --- /dev/null +++ b/civicrm/vendor/brick/money/src/MoneyBag.php @@ -0,0 +1,85 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Math\BigRational; +use Brick\Money\Tests\CurrencyTest; + +/** + * Container for monies in different currencies. + * + * This class is mutable. + */ +final class MoneyBag implements MoneyContainer +{ + /** + * The amounts in this bag, indexed by currency code. + * + * @var BigRational[] + */ + private $amounts = []; + + /** + * Returns the amount in the given currency contained in the bag, as a rational number. + * + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * + * @return BigRational + */ + public function getAmount($currency) : BigRational + { + if (is_int($currency)) { + $currencyCode = (string) Currency::of($currency); + } else { + $currencyCode = (string) $currency; + } + + return isset($this->amounts[$currencyCode]) + ? $this->amounts[$currencyCode] + : BigRational::zero(); + } + + /** + * Returns the amounts contained in this bag, as rational numbers, indexed by currency code. + * + * @return BigRational[] + */ + public function getAmounts() : array + { + return $this->amounts; + } + + /** + * Adds money to this bag. + * + * @param MoneyContainer $money A Money, RationalMoney, or MoneyBag instance. + * + * @return MoneyBag This instance. + */ + public function add(MoneyContainer $money) : MoneyBag + { + foreach ($money->getAmounts() as $currencyCode => $amount) { + $this->amounts[$currencyCode] = $this->getAmount($currencyCode)->plus($amount); + } + + return $this; + } + + /** + * Subtracts money from this bag. + * + * @param MoneyContainer $money A Money, RationalMoney, or MoneyBag instance. + * + * @return MoneyBag This instance. + */ + public function subtract(MoneyContainer $money) : MoneyBag + { + foreach ($money->getAmounts() as $currencyCode => $amount) { + $this->amounts[$currencyCode] = $this->getAmount($currencyCode)->minus($amount); + } + + return $this; + } +} diff --git a/civicrm/vendor/brick/money/src/MoneyComparator.php b/civicrm/vendor/brick/money/src/MoneyComparator.php new file mode 100644 index 0000000000000000000000000000000000000000..7c5df18abcb94e0aa07cd8347e6e128ac601e567 --- /dev/null +++ b/civicrm/vendor/brick/money/src/MoneyComparator.php @@ -0,0 +1,198 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\CurrencyConversionException; + +/** + * Compares monies in different currencies. + * + * The converted amounts are never rounded before comparison, so this comparator is more precise + * than converting a Money to another Currency, then using the resulting Money's built-in comparison methods. + * + * Note that the comparison is always performed by converting the first Money into the currency of the second Money. + * This order is important because some exchange rate providers may only have one-way rates, + * or may use a different rate in each direction. + */ +final class MoneyComparator +{ + /** + * The exchange rate provider. + * + * @var ExchangeRateProvider + */ + private $exchangeRateProvider; + + /** + * Class constructor. + * + * @param ExchangeRateProvider $provider The exchange rate provider. + */ + public function __construct(ExchangeRateProvider $provider) + { + $this->exchangeRateProvider = $provider; + } + + /** + * Compares the given monies. + * + * The amount is not rounded before comparison, so the results are more relevant than when using + * `convert($a, $b->getCurrency())->compareTo($b)`. + * + * Note that the comparison is performed by converting A into B's currency. + * This order is important if the exchange rate provider uses different exchange rates + * when converting back and forth two currencies. + * + * @param Money $a + * @param Money $b + * + * @return int -1, 0 or 1. + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function compare(Money $a, Money $b) : int + { + $aCurrencyCode = $a->getCurrency()->getCurrencyCode(); + $bCurrencyCode = $b->getCurrency()->getCurrencyCode(); + + if ($aCurrencyCode === $bCurrencyCode) { + return $a->compareTo($b); + } + + $aAmount = $a->getAmount(); + $bAmount = $b->getAmount(); + + $exchangeRate = $this->exchangeRateProvider->getExchangeRate($aCurrencyCode, $bCurrencyCode); + + $aAmount = $aAmount->toBigRational()->multipliedBy($exchangeRate); + + return $aAmount->compareTo($bAmount); + } + + /** + * @param Money $a + * @param Money $b + * + * @return bool + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function isEqual(Money $a, Money $b) : bool + { + return $this->compare($a, $b) === 0; + } + + /** + * @param Money $a + * @param Money $b + * + * @return bool + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function isLess(Money $a, Money $b) : bool + { + return $this->compare($a, $b) < 0; + } + + /** + * @param Money $a + * @param Money $b + * + * @return bool + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function isLessOrEqual(Money $a, Money $b) : bool + { + return $this->compare($a, $b) <= 0; + } + + /** + * @param Money $a + * @param Money $b + * + * @return bool + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function isGreater(Money $a, Money $b) : bool + { + return $this->compare($a, $b) > 0; + } + + /** + * @param Money $a + * @param Money $b + * + * @return bool + * + * @throws CurrencyConversionException If the exchange rate is not available. + */ + public function isGreaterOrEqual(Money $a, Money $b) : bool + { + return $this->compare($a, $b) >= 0; + } + + /** + * Returns the smallest of the given monies. + * + * The monies are compared from left to right. This distinction can be important if the exchange rate provider does + * not have bidirectional exchange rates, or applies different rates depending on the direction of the conversion. + * + * For example, when comparing [A, B, C], this method will first compare A against B, then min(A,B) against C. + * + * If several monies are equal to the minimum value, the first one is returned. + * + * @param Money $money The first money. + * @param Money ...$monies The subsequent monies. + * + * @return Money The smallest Money. + * + * @throws CurrencyConversionException If an exchange rate is not available. + */ + public function min(Money $money, Money ...$monies) : Money + { + $min = $money; + + foreach ($monies as $money) { + if ($this->isGreater($min, $money)) { + $min = $money; + } + } + + return $min; + } + + /** + * Returns the largest of the given monies. + * + * The monies are compared from left to right. This distinction can be important if the exchange rate provider does + * not have bidirectional exchange rates, or applies different rates depending on the direction of the conversion. + * + * For example, when comparing [A, B, C], this method will first compare A against B, then max(A,B) against C. + * + * If several monies are equal to the maximum value, the first one is returned. + * + * @param Money $money The first money. + * @param Money ...$monies The subsequent monies. + * + * @return Money The largest Money. + * + * @throws CurrencyConversionException If an exchange rate is not available. + */ + public function max(Money $money, Money ...$monies) : Money + { + $max = $money; + + foreach ($monies as $money) { + if ($this->isLess($max, $money)) { + $max = $money; + } + } + + return $max; + } +} diff --git a/civicrm/vendor/brick/money/src/MoneyContainer.php b/civicrm/vendor/brick/money/src/MoneyContainer.php new file mode 100644 index 0000000000000000000000000000000000000000..89031f348335ac4f8c6d3aaabdb4662f355ec8a1 --- /dev/null +++ b/civicrm/vendor/brick/money/src/MoneyContainer.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Math\BigNumber; + +/** + * Common interface for Money, RationalMoney and MoneyBag. + */ +interface MoneyContainer +{ + /** + * Returns the amounts contained in this money container, indexed by currency code. + * + * @return BigNumber[] + */ + public function getAmounts() : array; +} diff --git a/civicrm/vendor/brick/money/src/RationalMoney.php b/civicrm/vendor/brick/money/src/RationalMoney.php new file mode 100644 index 0000000000000000000000000000000000000000..b09849edca09468b27b052cbb935c0e90e2cd787 --- /dev/null +++ b/civicrm/vendor/brick/money/src/RationalMoney.php @@ -0,0 +1,163 @@ +<?php + +declare(strict_types=1); + +namespace Brick\Money; + +use Brick\Money\Exception\MoneyMismatchException; + +use Brick\Math\BigNumber; +use Brick\Math\BigRational; +use Brick\Math\Exception\MathException; + +/** + * An exact monetary amount, represented as a rational number. This class is immutable. + * + * This is used to represent intermediate calculation results, and may not be exactly convertible to a decimal amount + * with a finite number of digits. The final conversion to a Money may require rounding. + */ +final class RationalMoney extends AbstractMoney +{ + /** + * @var BigRational + */ + private $amount; + + /** + * @var Currency + */ + private $currency; + + /** + * Class constructor. + * + * @param BigRational $amount The amount. + * @param Currency $currency The currency. + */ + public function __construct(BigRational $amount, Currency $currency) + { + $this->amount = $amount; + $this->currency = $currency; + } + + /** + * Convenience factory method. + * + * @param BigNumber|int|float|string $amount The monetary amount. + * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * + * @return RationalMoney + */ + public static function of($amount, $currency) : RationalMoney + { + $amount = BigRational::of($amount); + + if (! $currency instanceof Currency) { + $currency = Currency::of($currency); + } + + return new RationalMoney($amount, $currency); + } + + /** + * @return BigRational + */ + public function getAmount() : BigRational + { + return $this->amount; + } + + /** + * @return Currency + */ + public function getCurrency() : Currency + { + return $this->currency; + } + + /** + * Returns the sum of this RationalMoney and the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that The money or amount to add. + * + * @return RationalMoney + * + * @throws MathException If the argument is not a valid number. + * @throws MoneyMismatchException If the argument is a money in another currency. + */ + public function plus($that) : RationalMoney + { + $that = $this->getAmountOf($that); + $amount = $this->amount->plus($that); + + return new self($amount, $this->currency); + } + + /** + * Returns the difference of this RationalMoney and the given amount. + * + * @param AbstractMoney|BigNumber|int|float|string $that The money or amount to subtract. + * + * @return RationalMoney + * + * @throws MathException If the argument is not a valid number. + * @throws MoneyMismatchException If the argument is a money in another currency. + */ + public function minus($that) : RationalMoney + { + $that = $this->getAmountOf($that); + $amount = $this->amount->minus($that); + + return new self($amount, $this->currency); + } + + /** + * Returns the product of this RationalMoney and the given number. + * + * @param BigNumber|int|float|string $that The multiplier. + * + * @return RationalMoney + * + * @throws MathException If the argument is not a valid number. + */ + public function multipliedBy($that) : RationalMoney + { + $amount = $this->amount->multipliedBy($that); + + return new self($amount, $this->currency); + } + + /** + * Returns the result of the division of this RationalMoney by the given number. + * + * @param BigNumber|int|float|string $that The divisor. + * + * @return RationalMoney + * + * @throws MathException If the argument is not a valid number. + */ + public function dividedBy($that) : RationalMoney + { + $amount = $this->amount->dividedBy($that); + + return new self($amount, $this->currency); + } + + /** + * Returns a copy of this BigRational, with the amount simplified. + * + * @return RationalMoney + */ + public function simplified() : RationalMoney + { + return new self($this->amount->simplified(), $this->currency); + } + + /** + * @return string + */ + public function __toString() : string + { + return $this->currency . ' ' . $this->amount; + } +} diff --git a/civicrm/vendor/civicrm/civicrm-cxn-rpc/.gitignore b/civicrm/vendor/civicrm/civicrm-cxn-rpc/.gitignore index 013f0b716abc7345769f4278dcec18a9b71798ce..7a62ded4f0eafd4d9e062890a8e377d862c3ec24 100644 --- a/civicrm/vendor/civicrm/civicrm-cxn-rpc/.gitignore +++ b/civicrm/vendor/civicrm/civicrm-cxn-rpc/.gitignore @@ -1,3 +1,4 @@ *~ vendor/ tmp/ +/composer.lock \ No newline at end of file diff --git a/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.json b/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.json index 41863dde2313272fa599a43099f126f83697e98b..affb45e01544354a9d7dacb82d3714e34ae5b2e0 100644 --- a/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.json +++ b/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.json @@ -2,7 +2,7 @@ "name": "civicrm/civicrm-cxn-rpc", "description": "RPC library for CiviConnect", "require": { - "psr/log": "~1.1", + "psr/log": "~1.0", "phpseclib/phpseclib": "1.0.*" }, "autoload": { diff --git a/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.lock b/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.lock deleted file mode 100644 index 0b9335dec61536649f7c78e288d907e3e19fdc80..0000000000000000000000000000000000000000 --- a/civicrm/vendor/civicrm/civicrm-cxn-rpc/composer.lock +++ /dev/null @@ -1,164 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "fde3b37f32e8701a021e744da2ab8c44", - "packages": [ - { - "name": "phpseclib/phpseclib", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/0bb6c9b974cada100cad40f72ef186a199274f9b", - "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b", - "shasum": "" - }, - "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", - "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 5.0.0." - }, - "type": "library", - "autoload": { - "psr-0": { - "Crypt": "phpseclib/", - "File": "phpseclib/", - "Math": "phpseclib/", - "Net": "phpseclib/", - "System": "phpseclib/" - }, - "files": [ - "phpseclib/bootstrap.php", - "phpseclib/Crypt/Random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "phpseclib/" - ], - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "time": "2017-06-05T06:30:30+00:00" - }, - { - "name": "psr/log", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2018-11-20T15:27:04+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/civicrm/vendor/composer/autoload_files.php b/civicrm/vendor/composer/autoload_files.php index dcd79a075add71b1b4dabb0432ae7fd205c338f1..4c42fbeae2637711fb5115d1b0948d153cc6e409 100644 --- a/civicrm/vendor/composer/autoload_files.php +++ b/civicrm/vendor/composer/autoload_files.php @@ -7,8 +7,12 @@ $baseDir = dirname($vendorDir); return array( '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '3919eeb97e98d4648304477f8ef734ba' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php index d2f8e023fc7ef826d88df2fec4286892cfda6080..3b1d36505253901ee02c98c67d21576242adb410 100644 --- a/civicrm/vendor/composer/autoload_psr4.php +++ b/civicrm/vendor/composer/autoload_psr4.php @@ -11,6 +11,9 @@ return array( 'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'), 'When\\' => array($vendorDir . '/tplaner/when/src'), 'TYPO3\\PharStreamWrapper\\' => array($vendorDir . '/typo3/phar-stream-wrapper/src'), + 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + '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\\Component\\Process\\' => array($vendorDir . '/symfony/process'), @@ -38,7 +41,9 @@ return array( 'FontLib\\' => array($vendorDir . '/phenx/php-font-lib/src/FontLib'), 'Dompdf\\' => array($vendorDir . '/dompdf/dompdf/src'), 'Civi\\Cxn\\Rpc\\' => array($vendorDir . '/civicrm/civicrm-cxn-rpc/src'), - 'Civi\\' => array($baseDir . '/', $baseDir . '/setup/src'), + 'Civi\\' => array($baseDir . '/', $baseDir . '/Civi', $baseDir . '/setup/src'), 'Cache\\TagInterop\\' => array($vendorDir . '/cache/tag-interop'), 'Cache\\IntegrationTests\\' => array($vendorDir . '/cache/integration-tests/src'), + 'Brick\\Money\\' => array($vendorDir . '/brick/money/src'), + 'Brick\\Math\\' => array($vendorDir . '/brick/math/src'), ); diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 764800436b82e08023273b6d536197eda3e5e635..b7d11681f559b4d1ad87451f7e126f47d3442610 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 ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b +class ComposerAutoloaderInit295933fd472bb10cd7a2a298afef50f1 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit295933fd472bb10cd7a2a298afef50f1', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit295933fd472bb10cd7a2a298afef50f1', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit329a6691f1578f9719198bc39d257f6b::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit329a6691f1578f9719198bc39d257f6b $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire329a6691f1578f9719198bc39d257f6b($fileIdentifier, $file); + composerRequire295933fd472bb10cd7a2a298afef50f1($fileIdentifier, $file); } return $loader; } } -function composerRequire329a6691f1578f9719198bc39d257f6b($fileIdentifier, $file) +function composerRequire295933fd472bb10cd7a2a298afef50f1($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 8879d9e7878319d0c964b5b43380cdd9aac9a9dd..ea0ff2944cacb39dcd523051b7a8477796b73491 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,12 +4,16 @@ namespace Composer\Autoload; -class ComposerStaticInit329a6691f1578f9719198bc39d257f6b +class ComposerStaticInit295933fd472bb10cd7a2a298afef50f1 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '3919eeb97e98d4648304477f8ef734ba' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', @@ -41,6 +45,9 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b ), 'S' => array ( + 'Symfony\\Polyfill\\Php72\\' => 23, + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, 'Symfony\\Polyfill\\Iconv\\' => 23, 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Component\\Process\\' => 26, @@ -93,6 +100,11 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b 'Cache\\TagInterop\\' => 17, 'Cache\\IntegrationTests\\' => 23, ), + 'B' => + array ( + 'Brick\\Money\\' => 12, + 'Brick\\Math\\' => 11, + ), ); public static $prefixDirsPsr4 = array ( @@ -116,6 +128,18 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b array ( 0 => __DIR__ . '/..' . '/typo3/phar-stream-wrapper/src', ), + 'Symfony\\Polyfill\\Php72\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php72', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Intl\\Idn\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', + ), 'Symfony\\Polyfill\\Iconv\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', @@ -227,7 +251,8 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b 'Civi\\' => array ( 0 => __DIR__ . '/../..' . '/', - 1 => __DIR__ . '/../..' . '/setup/src', + 1 => __DIR__ . '/../..' . '/Civi', + 2 => __DIR__ . '/../..' . '/setup/src', ), 'Cache\\TagInterop\\' => array ( @@ -237,6 +262,14 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b array ( 0 => __DIR__ . '/..' . '/cache/integration-tests/src', ), + 'Brick\\Money\\' => + array ( + 0 => __DIR__ . '/..' . '/brick/money/src', + ), + 'Brick\\Math\\' => + array ( + 0 => __DIR__ . '/..' . '/brick/math/src', + ), ); public static $prefixesPsr0 = array ( @@ -497,11 +530,11 @@ class ComposerStaticInit329a6691f1578f9719198bc39d257f6b public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit329a6691f1578f9719198bc39d257f6b::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit295933fd472bb10cd7a2a298afef50f1::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index f335899dddfa966b6f6247c3f258d232983d125e..4702aa1520bc78bad48dc18da3dbb60cff069216 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -19,6 +19,11 @@ }, "time": "2018-09-27T09:45:05+00:00", "type": "library", + "extra": { + "patches_applied": { + "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" + } + }, "installation-source": "dist", "autoload": { "psr-4": { @@ -37,6 +42,102 @@ ], "description": "PHP mime type and extension mapping library: compatible with Symfony, powered by jshttp/mime-db" }, + { + "name": "brick/math", + "version": "0.8.15", + "version_normalized": "0.8.15.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1|^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" + }, + "time": "2020-04-15T15:59:35+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ] + }, + { + "name": "brick/money", + "version": "0.4.5", + "version_normalized": "0.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/brick/money.git", + "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/money/zipball/91f2b5bc35646f172b038e46bb496ad18db59c3c", + "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c", + "shasum": "" + }, + "require": { + "brick/math": "~0.7.3 || ~0.8.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "brick/varexporter": "~0.2.1", + "ext-dom": "*", + "ext-pdo": "*", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15" + }, + "suggest": { + "ext-intl": "Required to format Money objects" + }, + "time": "2020-05-31T14:17:02+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Brick\\Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Money and currency library", + "keywords": [ + "brick", + "currency", + "money" + ] + }, { "name": "cache/integration-tests", "version": "0.16.0", @@ -164,24 +265,24 @@ }, { "name": "civicrm/civicrm-cxn-rpc", - "version": "v0.19.01.08", - "version_normalized": "0.19.01.08", + "version": "v0.19.01.09", + "version_normalized": "0.19.01.09", "source": { "type": "git", "url": "https://github.com/civicrm/civicrm-cxn-rpc.git", - "reference": "5a142bc4d24b7f8c830f59768b405ec74d582f22" + "reference": "3ea668bc651adb4d61e96276f55e76ae22baea7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/5a142bc4d24b7f8c830f59768b405ec74d582f22", - "reference": "5a142bc4d24b7f8c830f59768b405ec74d582f22", + "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/3ea668bc651adb4d61e96276f55e76ae22baea7a", + "reference": "3ea668bc651adb4d61e96276f55e76ae22baea7a", "shasum": "" }, "require": { "phpseclib/phpseclib": "1.0.*", - "psr/log": "~1.1" + "psr/log": "~1.0" }, - "time": "2019-01-08T19:20:09+00:00", + "time": "2020-02-05T03:24:26+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -442,6 +543,11 @@ }, "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": [ @@ -469,47 +575,49 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.0", - "version_normalized": "6.3.0.0", + "version": "6.5.4", + "version_normalized": "6.5.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "1.17.0" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", - "psr/log": "^1.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" }, - "time": "2017-06-22T18:50:49+00:00", + "time": "2020-05-25T19:35:05+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "6.5-dev" } }, "installation-source": "dist", "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -589,34 +697,39 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", - "version_normalized": "1.4.2.0", + "version": "1.6.1", + "version_normalized": "1.6.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, - "time": "2017-03-20T17:10:46+00:00", + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2019-07-01T23:21:34+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "installation-source": "dist", @@ -647,6 +760,7 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", @@ -1817,23 +1931,23 @@ }, { "name": "psr/log", - "version": "1.1.2", - "version_normalized": "1.1.2.0", + "version": "1.1.3", + "version_normalized": "1.1.3.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2019-11-01T11:05:21+00:00", + "time": "2020-03-23T09:12:05+00:00", "type": "library", "extra": { "branch-alias": { @@ -1914,6 +2028,48 @@ "simple-cache" ] }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders." + }, { "name": "sabberworm/php-css-parser", "version": "8.3.0", @@ -2389,6 +2545,188 @@ "shim" ] }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "version_normalized": "1.17.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-05-12T16:47:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ] + }, { "name": "symfony/process", "version": "v3.4.40", @@ -2442,23 +2780,23 @@ }, { "name": "tecnickcom/tcpdf", - "version": "6.2.26", - "version_normalized": "6.2.26.0", + "version": "6.3.5", + "version_normalized": "6.3.5.0", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "367241059ca166e3a76490f4448c284e0a161f15" + "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/367241059ca166e3a76490f4448c284e0a161f15", - "reference": "367241059ca166e3a76490f4448c284e0a161f15", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/19a535eaa7fb1c1cac499109deeb1a7a201b4549", + "reference": "19a535eaa7fb1c1cac499109deeb1a7a201b4549", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2018-10-16T17:24:05+00:00", + "time": "2020-02-14T14:20:12+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2483,7 +2821,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-only" ], "authors": [ { @@ -2840,26 +3178,27 @@ }, { "name": "zetacomponents/mail", - "version": "1.9.1", - "version_normalized": "1.9.1.0", + "version": "1.9.2", + "version_normalized": "1.9.2.0", "source": { "type": "git", "url": "https://github.com/zetacomponents/Mail.git", - "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d" + "reference": "c55267564d78724d4c25188fc653fef0da4c920a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", - "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/c55267564d78724d4c25188fc653fef0da4c920a", + "reference": "c55267564d78724d4c25188fc653fef0da4c920a", "shasum": "" }, "require": { "zetacomponents/base": "~1.8" }, "require-dev": { + "phpunit/phpunit": "~7.5", "zetacomponents/unit-test": "*" }, - "time": "2020-01-17T11:18:01+00:00", + "time": "2020-06-13T12:38:26+00:00", "type": "library", "extra": { "patches_applied": { diff --git a/civicrm/vendor/electrolinux/phpquery/PATCHES.txt b/civicrm/vendor/electrolinux/phpquery/PATCHES.txt new file mode 100644 index 0000000000000000000000000000000000000000..6d21d5461ec549894acadb41f5e717081200b37c --- /dev/null +++ b/civicrm/vendor/electrolinux/phpquery/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: + +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/phpQuery/phpQuery/phpQueryObject.php b/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php index f0dfa1dfea87d7bc523c5b2206ca24adf8339672..a41356cf1e6418a66f231fd0fc496d7746aa4630 100644 --- a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php +++ b/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php @@ -1037,7 +1037,7 @@ class phpQueryObject if (! $param) break; // nth-child(n+b) to nth-child(1n+b) - if ($param{0} == 'n') + if ($param[0] == 'n') $param = '1'.$param; // :nth-child(index/even/odd/equation) if ($param == 'even' || $param == 'odd') @@ -1052,17 +1052,17 @@ class phpQueryObject return null;'), new CallbackParam(), $param ); - else if (mb_strlen($param) > 1 && $param{1} == 'n') + else if (mb_strlen($param) > 1 && $param[1] == 'n') // an+b $mapped = $this->map( create_function('$node, $param', '$prevs = pq($node)->prevAll()->size(); $index = 1+$prevs; $b = mb_strlen($param) > 3 - ? $param{3} + ? $param[3] : 0; - $a = $param{0}; - if ($b && $param{2} == "-") + $a = $param[0]; + if ($b && $param[2] == "-") $b = -$b; if ($a > 0) { return ($index-$b)%$a == 0 diff --git a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php b/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php index e5e83d0e10d7439200de061aac77e4cf9d4e8122..5cee7e71a80e7ddd983b9118f44e0001c81b66c0 100644 --- a/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php +++ b/civicrm/vendor/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php @@ -385,7 +385,7 @@ function resolve_url($base, $url) { // Step 3 if (preg_match('!^[a-z]+:!i', $url)) return $url; $base = parse_url($base); - if ($url{0} == "#") { + if ($url[0] == "#") { // Step 2 (fragment) $base['fragment'] = substr($url, 1); return unparse_url($base); @@ -398,7 +398,7 @@ function resolve_url($base, $url) { 'scheme'=>$base['scheme'], 'path'=>substr($url,2), )); - } else if ($url{0} == "/") { + } else if ($url[0] == "/") { // Step 5 $base['path'] = $url; } else { diff --git a/civicrm/vendor/guzzlehttp/guzzle/.php_cs b/civicrm/vendor/guzzlehttp/guzzle/.php_cs new file mode 100644 index 0000000000000000000000000000000000000000..2dd5036c1f2b63fcf74a59df09d3b9e649e91e19 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/.php_cs @@ -0,0 +1,23 @@ +<?php + +$config = PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + 'array_syntax' => ['syntax' => 'short'], + 'declare_strict_types' => false, + 'concat_space' => ['spacing'=>'one'], + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'ordered_imports' => true, + // 'phpdoc_align' => ['align'=>'vertical'], + // 'native_function_invocation' => true, + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') + ->name('*.php') + ) +; + +return $config; diff --git a/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md b/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md index b265cbcd1afdd1710371ebe9f756b929b2039fdd..f5b183a0c1f770b8fc2524e42e08d3064d94837d 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -1,4 +1,74 @@ -# CHANGELOG +# Change Log + +## 6.5.4 - 2020-05-25 + +* Fix various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626) + +## 6.5.3 - 2020-04-18 + +* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550) +* Remove use of internal functions [#2548](https://github.com/guzzle/guzzle/pull/2548) + +## 6.5.2 - 2019-12-23 + +* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) + +## 6.5.1 - 2019-12-21 + +* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) +* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) + +## 6.5.0 - 2019-12-07 + +* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) +* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) +* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: `RetryMiddleware` did not do exponential delay between retries due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) + Previously, `RetryMiddleware` would sleep for 1 millisecond, then 2 milliseconds, then 4 milliseconds. + **After this change, `RetryMiddleware` will sleep for 1 second, then 2 seconds, then 4 seconds.** + `Middleware::retry()` accepts a second callback parameter to override the default timeouts if needed. +* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) +* Deprecated `ClientInterface::VERSION` + +## 6.4.1 - 2019-10-23 + +* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that +* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` + +## 6.4.0 - 2019-10-23 + +* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) +* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081) +* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161) +* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163) +* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242) +* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284) +* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273) +* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) +* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) + +## 6.3.3 - 2018-04-22 + +* Fix: Default headers when decode_content is specified + + +## 6.3.2 - 2018-03-26 + +* Fix: Release process + + +## 6.3.1 - 2018-03-26 + +* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014) +* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012) +* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999) +* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998) +* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953) +* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915) +* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916) + ++ Minor code cleanups, documentation fixes and clarifications. + ## 6.3.0 - 2017-06-22 diff --git a/civicrm/vendor/guzzlehttp/guzzle/Dockerfile b/civicrm/vendor/guzzlehttp/guzzle/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..f6a095230e85638cc9f98dd7beef2bcf8c87e98e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/Dockerfile @@ -0,0 +1,18 @@ +FROM composer:latest as setup + +RUN mkdir /guzzle + +WORKDIR /guzzle + +RUN set -xe \ + && composer init --name=guzzlehttp/test --description="Simple project for testing Guzzle scripts" --author="Márk Sági-Kazár <mark.sagikazar@gmail.com>" --no-interaction \ + && composer require guzzlehttp/guzzle + + +FROM php:7.3 + +RUN mkdir /guzzle + +WORKDIR /guzzle + +COPY --from=setup /guzzle /guzzle diff --git a/civicrm/vendor/guzzlehttp/guzzle/LICENSE b/civicrm/vendor/guzzlehttp/guzzle/LICENSE index ea7f07c54cdd915063011b69358fac8fa7773c0e..50a177b0320c3f1f201fe6c57d4ecc0971017037 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/LICENSE +++ b/civicrm/vendor/guzzlehttp/guzzle/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2016 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com> +Copyright (c) 2011-2018 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com> 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/guzzlehttp/guzzle/README.md b/civicrm/vendor/guzzlehttp/guzzle/README.md index 2f614d6f3ae3806fb9de478638f94c3910ffbd7e..5fdb6c5f42dba76d7d29d51dd23512478ac3ccdb 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/README.md +++ b/civicrm/vendor/guzzlehttp/guzzle/README.md @@ -1,7 +1,9 @@ Guzzle, PHP HTTP client ======================= -[](https://travis-ci.org/guzzle/guzzle) +[](https://github.com/guzzle/guzzle/releases) +[](https://travis-ci.org/guzzle/guzzle) +[](https://packagist.org/packages/guzzlehttp/guzzle) Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. @@ -19,19 +21,18 @@ trivial to integrate with web services. ```php $client = new \GuzzleHttp\Client(); -$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); -echo $res->getStatusCode(); -// 200 -echo $res->getHeaderLine('content-type'); -// 'application/json; charset=utf8' -echo $res->getBody(); -// '{"id": 1420053, "name": "guzzle", ...}' - -// Send an asynchronous request. +$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); + +echo $response->getStatusCode(); # 200 +echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8' +echo $response->getBody(); # '{"id": 1420053, "name": "guzzle", ...}' + +# Send an asynchronous request. $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); $promise = $client->sendAsync($request)->then(function ($response) { echo 'I completed! ' . $response->getBody(); }); + $promise->wait(); ``` @@ -55,7 +56,7 @@ curl -sS https://getcomposer.org/installer | php Next, run the Composer command to install the latest stable version of Guzzle: ```bash -php composer.phar require guzzlehttp/guzzle +composer require guzzlehttp/guzzle ``` After installing, you need to require Composer's autoloader: @@ -67,7 +68,7 @@ require 'vendor/autoload.php'; You can then later update Guzzle using composer: ```bash -composer.phar update +composer update ``` @@ -77,13 +78,13 @@ composer.phar update |---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------| | 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 | | 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 | -| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | +| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | | 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | [guzzle-3-repo]: https://github.com/guzzle/guzzle3 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x [guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3 [guzzle-6-repo]: https://github.com/guzzle/guzzle -[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/ +[guzzle-3-docs]: http://guzzle3.readthedocs.org [guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/ [guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/ diff --git a/civicrm/vendor/guzzlehttp/guzzle/composer.json b/civicrm/vendor/guzzlehttp/guzzle/composer.json index 65687a58219e682d850d2c87b7127e17612ed942..b7bff79a84445c13d5dc66a7e7d79be3794682ba 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/composer.json +++ b/civicrm/vendor/guzzlehttp/guzzle/composer.json @@ -2,7 +2,15 @@ "name": "guzzlehttp/guzzle", "type": "library", "description": "Guzzle is a PHP HTTP client library", - "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"], + "keywords": [ + "framework", + "http", + "rest", + "web service", + "curl", + "client", + "HTTP client" + ], "homepage": "http://guzzlephp.org/", "license": "MIT", "authors": [ @@ -14,31 +22,38 @@ ], "require": { "php": ">=5.5", - "guzzlehttp/psr7": "^1.4", - "guzzlehttp/promises": "^1.0" + "ext-json": "*", + "symfony/polyfill-intl-idn": "1.17.0", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", - "psr/log": "^1.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "config": { + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } }, "autoload": { - "files": ["src/functions_include.php"], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "autoload-dev": { "psr-4": { "GuzzleHttp\\Tests\\": "tests/" } - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } } } diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Client.php b/civicrm/vendor/guzzlehttp/guzzle/src/Client.php index de4df8a5ca144db7192d89f72f7cbba742573906..315a022cf4b74e69dfacdc0cd1b359b27cd2ef01 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Client.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Client.php @@ -2,11 +2,12 @@ namespace GuzzleHttp; use GuzzleHttp\Cookie\CookieJar; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Promise; use GuzzleHttp\Psr7; -use Psr\Http\Message\UriInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\UriInterface; /** * @method ResponseInterface get(string|UriInterface $uri, array $options = []) @@ -46,9 +47,8 @@ class Client implements ClientInterface * wire. The function is called with a Psr7\Http\Message\RequestInterface * and array of transfer options, and must return a * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a - * Psr7\Http\Message\ResponseInterface on success. "handler" is a - * constructor only option that cannot be overridden in per/request - * options. If no handler is provided, a default handler will be created + * Psr7\Http\Message\ResponseInterface on success. + * If no handler is provided, a default handler will be created * that enables all of the request options below by attaching all of the * default middleware to the handler. * - base_uri: (string|UriInterface) Base URI of the client that is merged @@ -75,6 +75,12 @@ class Client implements ClientInterface $this->configureDefaults($config); } + /** + * @param string $method + * @param array $args + * + * @return Promise\PromiseInterface + */ public function __call($method, $args) { if (count($args) < 1) { @@ -89,6 +95,14 @@ class Client implements ClientInterface : $this->request($method, $uri, $opts); } + /** + * Asynchronously send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @return Promise\PromiseInterface + */ public function sendAsync(RequestInterface $request, array $options = []) { // Merge the base URI into the request URI if needed. @@ -100,12 +114,35 @@ class Client implements ClientInterface ); } + /** + * Send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @return ResponseInterface + * @throws GuzzleException + */ public function send(RequestInterface $request, array $options = []) { $options[RequestOptions::SYNCHRONOUS] = true; return $this->sendAsync($request, $options)->wait(); } + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @return Promise\PromiseInterface + */ public function requestAsync($method, $uri = '', array $options = []) { $options = $this->prepareDefaults($options); @@ -125,12 +162,37 @@ class Client implements ClientInterface return $this->transfer($request, $options); } + /** + * Create and send an HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string $method HTTP method. + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @return ResponseInterface + * @throws GuzzleException + */ public function request($method, $uri = '', array $options = []) { $options[RequestOptions::SYNCHRONOUS] = true; return $this->requestAsync($method, $uri, $options)->wait(); } + /** + * Get a client configuration option. + * + * These options include default request options of the client, a "handler" + * (if utilized by the concrete client), and a "base_uri" if utilized by + * the concrete client. + * + * @param string|null $option The config option to retrieve. + * + * @return mixed + */ public function getConfig($option = null) { return $option === null @@ -138,6 +200,11 @@ class Client implements ClientInterface : (isset($this->config[$option]) ? $this->config[$option] : null); } + /** + * @param string|null $uri + * + * @return UriInterface + */ private function buildUri($uri, array $config) { // for BC we accept null which would otherwise fail in uri_for @@ -147,6 +214,11 @@ class Client implements ClientInterface $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri); } + if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) { + $idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion']; + $uri = Utils::idnUriConvert($uri, $idnOptions); + } + return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; } @@ -154,6 +226,7 @@ class Client implements ClientInterface * Configures the default options for a client. * * @param array $config + * @return void */ private function configureDefaults(array $config) { @@ -162,7 +235,8 @@ class Client implements ClientInterface 'http_errors' => true, 'decode_content' => true, 'verify' => true, - 'cookies' => false + 'cookies' => false, + 'idn_conversion' => true, ]; // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. @@ -170,7 +244,7 @@ class Client implements ClientInterface // We can only trust the HTTP_PROXY environment variable in a CLI // process due to the fact that PHP has no reliable mechanism to // get environment variables that start with "HTTP_". - if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) { + if (php_sapi_name() === 'cli' && getenv('HTTP_PROXY')) { $defaults['proxy']['http'] = getenv('HTTP_PROXY'); } @@ -210,7 +284,7 @@ class Client implements ClientInterface * * @return array */ - private function prepareDefaults($options) + private function prepareDefaults(array $options) { $defaults = $this->config; @@ -225,7 +299,7 @@ class Client implements ClientInterface if (array_key_exists('headers', $options)) { // Allows default headers to be unset. if ($options['headers'] === null) { - $defaults['_conditional'] = null; + $defaults['_conditional'] = []; unset($options['headers']); } elseif (!is_array($options['headers'])) { throw new \InvalidArgumentException('headers must be an array'); @@ -251,8 +325,7 @@ class Client implements ClientInterface * The URI of the request is not modified and the request options are used * as-is without merging in default options. * - * @param RequestInterface $request - * @param array $options + * @param array $options See \GuzzleHttp\RequestOptions. * * @return Promise\PromiseInterface */ @@ -271,6 +344,7 @@ class Client implements ClientInterface } $request = $this->applyOptions($request, $options); + /** @var HandlerStack $handler */ $handler = $options['handler']; try { @@ -290,7 +364,14 @@ class Client implements ClientInterface */ private function applyOptions(RequestInterface $request, array &$options) { - $modify = []; + $modify = [ + 'set_headers' => [], + ]; + + if (isset($options['headers'])) { + $modify['set_headers'] = $options['headers']; + unset($options['headers']); + } if (isset($options['form_params'])) { if (isset($options['multipart'])) { @@ -302,6 +383,8 @@ class Client implements ClientInterface } $options['body'] = http_build_query($options['form_params'], '', '&'); unset($options['form_params']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; } @@ -313,24 +396,19 @@ class Client implements ClientInterface if (isset($options['json'])) { $options['body'] = \GuzzleHttp\json_encode($options['json']); unset($options['json']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'application/json'; } if (!empty($options['decode_content']) && $options['decode_content'] !== true ) { + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $options['_conditional']); $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; } - if (isset($options['headers'])) { - if (isset($modify['set_headers'])) { - $modify['set_headers'] = $options['headers'] + $modify['set_headers']; - } else { - $modify['set_headers'] = $options['headers']; - } - unset($options['headers']); - } - if (isset($options['body'])) { if (is_array($options['body'])) { $this->invalidBody(); @@ -344,6 +422,8 @@ class Client implements ClientInterface $type = isset($value[2]) ? strtolower($value[2]) : 'basic'; switch ($type) { case 'basic': + // Ensure that we don't have the header in different case and set the new value. + $modify['set_headers'] = Psr7\_caseless_remove(['Authorization'], $modify['set_headers']); $modify['set_headers']['Authorization'] = 'Basic ' . base64_encode("$value[0]:$value[1]"); break; @@ -382,6 +462,8 @@ class Client implements ClientInterface $request = Psr7\modify_request($request, $modify); if ($request->getBody() instanceof Psr7\MultipartStream) { // Use a multipart/form-data POST if a Content-Type is not set. + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' . $request->getBody()->getBoundary(); } @@ -403,6 +485,11 @@ class Client implements ClientInterface return $request; } + /** + * Throw Exception with pre-set message. + * @return void + * @throws \InvalidArgumentException Invalid body. + */ private function invalidBody() { throw new \InvalidArgumentException('Passing in the "body" request ' diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 5a67b66bf866504129f91c95d12c64e09f8bfe36..54c759b96b33115c07d84d8d56a7e271c94a6537 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -1,8 +1,8 @@ <?php namespace GuzzleHttp; -use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Exception\GuzzleException; +use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\UriInterface; @@ -12,7 +12,10 @@ use Psr\Http\Message\UriInterface; */ interface ClientInterface { - const VERSION = '6.2.1'; + /** + * @deprecated Will be removed in Guzzle 7.0.0 + */ + const VERSION = '6.5.4'; /** * Send an HTTP request. diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php index 1c17b5a436ffa190c2af26d08b7250317eedfe46..38f98ad7c0c97fc1df0668c6639659e2870b4e4e 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -94,15 +94,17 @@ class CookieJar implements CookieJarInterface */ public function getCookieByName($name) { - // don't allow a null name - if($name === null) { + // don't allow a non string name + if ($name === null || !is_scalar($name)) { return null; } - foreach($this->cookies as $cookie) { - if($cookie->getName() !== null && strcasecmp($cookie->getName(), $name) === 0) { + foreach ($this->cookies as $cookie) { + if ($cookie->getName() !== null && strcasecmp($cookie->getName(), $name) === 0) { return $cookie; } } + + return null; } public function toArray() @@ -120,7 +122,7 @@ class CookieJar implements CookieJarInterface } elseif (!$path) { $this->cookies = array_filter( $this->cookies, - function (SetCookie $cookie) use ($path, $domain) { + function (SetCookie $cookie) use ($domain) { return !$cookie->matchesDomain($domain); } ); diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php index 2cf298a867b3713f6fa3143d5288ce2458c311c2..6ee11885e1f1f2cfc82ffc1d463966e24ddd9d25 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -58,9 +58,9 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * arguments, then the cookie with the specified name, path and domain is * removed. * - * @param string $domain Clears cookies matching a domain - * @param string $path Clears cookies matching a domain and path - * @param string $name Clears cookies matching a domain, path, and name + * @param string|null $domain Clears cookies matching a domain + * @param string|null $path Clears cookies matching a domain and path + * @param string|null $name Clears cookies matching a domain, path, and name * * @return CookieJarInterface */ diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php index 9887c1d54b2db295e6d9e5dfc67510d54941d940..3fb8600ef07be182db6d8ad607b73582ec1746e3 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php @@ -23,6 +23,7 @@ class FileCookieJar extends CookieJar */ public function __construct($cookieFile, $storeSessionCookies = false) { + parent::__construct(); $this->filename = $cookieFile; $this->storeSessionCookies = $storeSessionCookies; @@ -56,7 +57,7 @@ class FileCookieJar extends CookieJar } $jsonStr = \GuzzleHttp\json_encode($json); - if (false === file_put_contents($filename, $jsonStr)) { + if (false === file_put_contents($filename, $jsonStr, LOCK_EX)) { throw new \RuntimeException("Unable to save file {$filename}"); } } diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php index e4bfafd4fb034451f4e71b44c45a55f1f5810a2b..0224a2447b14c55eadac53831258e7bdc3041210 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -15,13 +15,14 @@ class SessionCookieJar extends CookieJar /** * Create a new SessionCookieJar object * - * @param string $sessionKey Session key name to store the cookie + * @param string $sessionKey Session key name to store the cookie * data in session * @param bool $storeSessionCookies Set to true to store session cookies * in the cookie jar. */ public function __construct($sessionKey, $storeSessionCookies = false) { + parent::__construct(); $this->sessionKey = $sessionKey; $this->storeSessionCookies = $storeSessionCookies; $this->load(); diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php index c911e2a3fca459736020d178964a5106de886c4c..3d776a70bc78c3eb5d7f10f325780eada7803244 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -35,14 +35,13 @@ class SetCookie $data = self::$defaults; // Explode the cookie string using a series of semicolons $pieces = array_filter(array_map('trim', explode(';', $cookie))); - // The name of the cookie (first kvp) must include an equal sign. - if (empty($pieces) || !strpos($pieces[0], '=')) { + // The name of the cookie (first kvp) must exist and include an equal sign. + if (empty($pieces[0]) || !strpos($pieces[0], '=')) { return new self($data); } // Add the cookie pieces into the parsed data array foreach ($pieces as $part) { - $cookieParts = explode('=', $part, 2); $key = trim($cookieParts[0]); $value = isset($cookieParts[1]) @@ -228,7 +227,7 @@ class SetCookie /** * Get whether or not this is a secure cookie * - * @return null|bool + * @return bool|null */ public function getSecure() { @@ -248,7 +247,7 @@ class SetCookie /** * Get whether or not this is a session cookie * - * @return null|bool + * @return bool|null */ public function getDiscard() { @@ -349,7 +348,7 @@ class SetCookie return false; } - return (bool) preg_match('/\.' . preg_quote($cookieDomain) . '$/', $domain); + return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/', $domain); } /** @@ -359,7 +358,7 @@ class SetCookie */ public function isExpired() { - return $this->getExpires() && time() > $this->getExpires(); + return $this->getExpires() !== null && time() > $this->getExpires(); } /** @@ -378,8 +377,8 @@ class SetCookie // Check if any of the invalid characters are present in the cookie name if (preg_match( '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', - $name) - ) { + $name + )) { return 'Cookie name must not contain invalid characters: ASCII ' . 'Control characters (0-31;127), space, tab and the ' . 'following characters: ()<>@,;:\"/?={}'; diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php index f95c09f2b1a50923056acbf108e1695e2a148bfa..4cfd393cc1a48c227f450caaf6f5eeac9bb7e214 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php @@ -4,4 +4,6 @@ namespace GuzzleHttp\Exception; /** * Exception when a client error is encountered (4xx codes) */ -class ClientException extends BadResponseException {} +class ClientException extends BadResponseException +{ +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php index c82998e0d7ef06fad4bbf048e2a61fc921b768ed..27b2722b0b6716d131b74631359cda86d3dcbbdb 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php @@ -1,4 +1,23 @@ <?php namespace GuzzleHttp\Exception; -interface GuzzleException {} +use Throwable; + +if (interface_exists(Throwable::class)) { + interface GuzzleException extends Throwable + { + } +} else { + /** + * @method string getMessage() + * @method \Throwable|null getPrevious() + * @method mixed getCode() + * @method string getFile() + * @method int getLine() + * @method array getTrace() + * @method string getTraceAsString() + */ + interface GuzzleException + { + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php new file mode 100644 index 0000000000000000000000000000000000000000..bfd20e232bba460f910e7c4ed7315e9a244ffad2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php @@ -0,0 +1,7 @@ +<?php + +namespace GuzzleHttp\Exception; + +final class InvalidArgumentException extends \InvalidArgumentException implements GuzzleException +{ +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php index 39de327e7b6ea887f0ebb904faa3340c2c1d5d0f..12dd081eb6c2b99f9561e5bb37ffd51bd968ea7f 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php @@ -1,9 +1,9 @@ <?php namespace GuzzleHttp\Exception; +use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; -use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\UriInterface; /** @@ -14,7 +14,7 @@ class RequestException extends TransferException /** @var RequestInterface */ private $request; - /** @var ResponseInterface */ + /** @var ResponseInterface|null */ private $response; /** @var array */ @@ -124,42 +124,17 @@ class RequestException extends TransferException */ public static function getResponseBodySummary(ResponseInterface $response) { - $body = $response->getBody(); - - if (!$body->isSeekable()) { - return null; - } - - $size = $body->getSize(); - - if ($size === 0) { - return null; - } - - $summary = $body->read(120); - $body->rewind(); - - if ($size > 120) { - $summary .= ' (truncated...)'; - } - - // Matches any printable character, including unicode characters: - // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { - return null; - } - - return $summary; + return \GuzzleHttp\Psr7\get_message_body_summary($response); } /** - * Obfuscates URI if there is an username and a password present + * Obfuscates URI if there is a username and a password present * * @param UriInterface $uri * * @return UriInterface */ - private static function obfuscateUri($uri) + private static function obfuscateUri(UriInterface $uri) { $userInfo = $uri->getUserInfo(); diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php index 7cdd340866b63b318e78b38981565d3e78eaacdd..127094c149959a8c95be188f699bc3e5219e0e19 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -4,4 +4,6 @@ namespace GuzzleHttp\Exception; /** * Exception when a server error is encountered (5xx codes) */ -class ServerException extends BadResponseException {} +class ServerException extends BadResponseException +{ +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php index b60a9678d650676bdecd6fab6740d0f9a39e7849..fff05251d502c010be4ad114381f8b5aa179d37f 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php @@ -1,4 +1,6 @@ <?php namespace GuzzleHttp\Exception; -class TooManyRedirectsException extends RequestException {} +class TooManyRedirectsException extends RequestException +{ +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php index b92071ca20630d1a988249a9befc247ab4e3d2de..7c11db3abc1d8b5c5ec60c9f9b9d4fa9d5603817 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php @@ -1,4 +1,6 @@ <?php namespace GuzzleHttp\Exception; -class TransferException extends \RuntimeException implements GuzzleException {} +class TransferException extends \RuntimeException implements GuzzleException +{ +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php index 49808e5c44679c724ecaacb3856973f3937a0607..4a28a96ebce6dbd41d31c2e24c1216052644344c 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php @@ -1,10 +1,9 @@ <?php namespace GuzzleHttp\Handler; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Promise\FulfilledPromise; -use GuzzleHttp\Promise\RejectedPromise; use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\LazyOpenStream; use GuzzleHttp\TransferStats; @@ -15,6 +14,9 @@ use Psr\Http\Message\RequestInterface; */ class CurlFactory implements CurlFactoryInterface { + const CURL_VERSION_STR = 'curl_version'; + const LOW_CURL_VERSION_NUMBER = '7.21.2'; + /** @var array */ private $handles = []; @@ -118,6 +120,7 @@ class CurlFactory implements CurlFactoryInterface private static function invokeStats(EasyHandle $easy) { $curlStats = curl_getinfo($easy->handle); + $curlStats['appconnect_time'] = curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME); $stats = new TransferStats( $easy->request, $easy->response, @@ -137,7 +140,9 @@ class CurlFactory implements CurlFactoryInterface $ctx = [ 'errno' => $easy->errno, 'error' => curl_error($easy->handle), + 'appconnect_time' => curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME), ] + curl_getinfo($easy->handle); + $ctx[self::CURL_VERSION_STR] = curl_version()['version']; $factory->release($easy); // Retry when nothing is present or when curl failed to rewind. @@ -173,13 +178,22 @@ class CurlFactory implements CurlFactoryInterface ) ); } - - $message = sprintf( - 'cURL error %s: %s (%s)', - $ctx['errno'], - $ctx['error'], - 'see http://curl.haxx.se/libcurl/c/libcurl-errors.html' - ); + if (version_compare($ctx[self::CURL_VERSION_STR], self::LOW_CURL_VERSION_NUMBER)) { + $message = sprintf( + 'cURL error %s: %s (%s)', + $ctx['errno'], + $ctx['error'], + 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html' + ); + } else { + $message = sprintf( + 'cURL error %s: %s (%s) for %s', + $ctx['errno'], + $ctx['error'], + 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html', + $easy->request->getUri() + ); + } // Create a connection exception if it was a specific error code. $error = isset($connectionErrors[$easy->errno]) @@ -288,7 +302,14 @@ class CurlFactory implements CurlFactoryInterface { foreach ($conf['_headers'] as $name => $values) { foreach ($values as $value) { - $conf[CURLOPT_HTTPHEADER][] = "$name: $value"; + $value = (string) $value; + if ($value === '') { + // cURL requires a special format for empty headers. + // See https://github.com/guzzle/guzzle/issues/1882 for more details. + $conf[CURLOPT_HTTPHEADER][] = "$name;"; + } else { + $conf[CURLOPT_HTTPHEADER][] = "$name: $value"; + } } } @@ -388,7 +409,7 @@ class CurlFactory implements CurlFactoryInterface if (isset($options['force_ip_resolve'])) { if ('v4' === $options['force_ip_resolve']) { $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; - } else if ('v6' === $options['force_ip_resolve']) { + } elseif ('v6' === $options['force_ip_resolve']) { $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V6; } } @@ -433,11 +454,16 @@ class CurlFactory implements CurlFactoryInterface } if (isset($options['ssl_key'])) { - $sslKey = $options['ssl_key']; - if (is_array($sslKey)) { - $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1]; - $sslKey = $sslKey[0]; + if (is_array($options['ssl_key'])) { + if (count($options['ssl_key']) === 2) { + list($sslKey, $conf[CURLOPT_SSLKEYPASSWD]) = $options['ssl_key']; + } else { + list($sslKey) = $options['ssl_key']; + } } + + $sslKey = isset($sslKey) ? $sslKey: $options['ssl_key']; + if (!file_exists($sslKey)) { throw new \InvalidArgumentException( "SSL private key not found: {$sslKey}" diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index 945d06ee4e2adae1fa28d5202b5b97efd62ad4ab..564c95f481e65fca0dc7b7631888f82fc3827044 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -3,7 +3,7 @@ namespace GuzzleHttp\Handler; use GuzzleHttp\Promise as P; use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Psr7; +use GuzzleHttp\Utils; use Psr\Http\Message\RequestInterface; /** @@ -23,6 +23,7 @@ class CurlMultiHandler private $active; private $handles = []; private $delays = []; + private $options = []; /** * This handler accepts the following options: @@ -30,6 +31,8 @@ class CurlMultiHandler * - handle_factory: An optional factory used to create curl handles * - select_timeout: Optional timeout (in seconds) to block before timing * out while selecting curl handles. Defaults to 1 second. + * - options: An associative array of CURLMOPT_* options and + * corresponding values for curl_multi_setopt() * * @param array $options */ @@ -37,14 +40,31 @@ class CurlMultiHandler { $this->factory = isset($options['handle_factory']) ? $options['handle_factory'] : new CurlFactory(50); - $this->selectTimeout = isset($options['select_timeout']) - ? $options['select_timeout'] : 1; + + if (isset($options['select_timeout'])) { + $this->selectTimeout = $options['select_timeout']; + } elseif ($selectTimeout = getenv('GUZZLE_CURL_SELECT_TIMEOUT')) { + $this->selectTimeout = $selectTimeout; + } else { + $this->selectTimeout = 1; + } + + $this->options = isset($options['options']) ? $options['options'] : []; } public function __get($name) { if ($name === '_mh') { - return $this->_mh = curl_multi_init(); + $this->_mh = curl_multi_init(); + + foreach ($this->options as $option => $value) { + // A warning is raised in case of a wrong option. + curl_multi_setopt($this->_mh, $option, $value); + } + + // Further calls to _mh will return the value directly, without entering the + // __get() method at all. + return $this->_mh; } throw new \BadMethodCallException(); @@ -65,7 +85,9 @@ class CurlMultiHandler $promise = new Promise( [$this, 'execute'], - function () use ($id) { return $this->cancel($id); } + function () use ($id) { + return $this->cancel($id); + } ); $this->addRequest(['easy' => $easy, 'deferred' => $promise]); @@ -80,7 +102,7 @@ class CurlMultiHandler { // Add any delayed handles if needed. if ($this->delays) { - $currentTime = microtime(true); + $currentTime = Utils::currentTime(); foreach ($this->delays as $id => $delay) { if ($currentTime >= $delay) { unset($this->delays[$id]); @@ -132,7 +154,7 @@ class CurlMultiHandler if (empty($easy->options['delay'])) { curl_multi_add_handle($this->_mh, $easy->handle); } else { - $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000); + $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000); } } @@ -184,7 +206,7 @@ class CurlMultiHandler private function timeToNext() { - $currentTime = microtime(true); + $currentTime = Utils::currentTime(); $nextTime = PHP_INT_MAX; foreach ($this->delays as $time) { if ($time < $nextTime) { diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php index d892061c7a0074063d33c20fea167c898dc2beb2..5b312bc0428ab910c00bfdbf4f962beba08c75b1 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php @@ -66,7 +66,7 @@ class MockHandler implements \Countable throw new \OutOfBoundsException('Mock queue is empty'); } - if (isset($options['delay'])) { + if (isset($options['delay']) && is_numeric($options['delay'])) { usleep($options['delay'] * 1000); } @@ -175,6 +175,11 @@ class MockHandler implements \Countable return count($this->queue); } + public function reset() + { + $this->queue = []; + } + private function invokeStats( RequestInterface $request, array $options, @@ -182,7 +187,8 @@ class MockHandler implements \Countable $reason = null ) { if (isset($options['on_stats'])) { - $stats = new TransferStats($request, $response, 0, $reason); + $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0; + $stats = new TransferStats($request, $response, $transferTime, $reason); call_user_func($options['on_stats'], $stats); } } diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php index b12bfd942398a63b3e6430e227dd05fa482e5a50..a15734a44de44695121f0d4827d04bbb360ef1bf 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php @@ -1,13 +1,13 @@ <?php namespace GuzzleHttp\Handler; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Promise\FulfilledPromise; -use GuzzleHttp\Promise\RejectedPromise; use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Psr7; use GuzzleHttp\TransferStats; +use GuzzleHttp\Utils; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; @@ -34,7 +34,7 @@ class StreamHandler usleep($options['delay'] * 1000); } - $startTime = isset($options['on_stats']) ? microtime(true) : null; + $startTime = isset($options['on_stats']) ? Utils::currentTime() : null; try { // Does not support the expect header. @@ -43,7 +43,7 @@ class StreamHandler // Append a content-length header if body size is zero to match // cURL's behavior. if (0 === $request->getBody()->getSize()) { - $request = $request->withHeader('Content-Length', 0); + $request = $request->withHeader('Content-Length', '0'); } return $this->createResponse( @@ -61,6 +61,7 @@ class StreamHandler if (strpos($message, 'getaddrinfo') // DNS lookup failed || strpos($message, 'Connection refused') || strpos($message, "couldn't connect to host") // error on HHVM + || strpos($message, "connection attempt failed") ) { $e = new ConnectException($e->getMessage(), $request, $e); } @@ -82,7 +83,7 @@ class StreamHandler $stats = new TransferStats( $request, $response, - microtime(true) - $startTime, + Utils::currentTime() - $startTime, $error, [] ); @@ -103,7 +104,7 @@ class StreamHandler $status = $parts[1]; $reason = isset($parts[2]) ? $parts[2] : null; $headers = \GuzzleHttp\headers_from_lines($hdrs); - list ($stream, $headers) = $this->checkDecode($options, $headers, $stream); + list($stream, $headers) = $this->checkDecode($options, $headers, $stream); $stream = Psr7\stream_for($stream); $sink = $stream; @@ -276,7 +277,7 @@ class StreamHandler } $params = []; - $context = $this->getDefaultContext($request, $options); + $context = $this->getDefaultContext($request); if (isset($options['on_headers']) && !is_callable($options['on_headers'])) { throw new \InvalidArgumentException('on_headers must be callable'); @@ -307,7 +308,6 @@ class StreamHandler && isset($options['auth'][2]) && 'ntlm' == $options['auth'][2] ) { - throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler'); } @@ -344,13 +344,25 @@ class StreamHandler if ('v4' === $options['force_ip_resolve']) { $records = dns_get_record($uri->getHost(), DNS_A); if (!isset($records[0]['ip'])) { - throw new ConnectException(sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); + throw new ConnectException( + sprintf( + "Could not resolve IPv4 address for host '%s'", + $uri->getHost() + ), + $request + ); } $uri = $uri->withHost($records[0]['ip']); } elseif ('v6' === $options['force_ip_resolve']) { $records = dns_get_record($uri->getHost(), DNS_AAAA); if (!isset($records[0]['ipv6'])) { - throw new ConnectException(sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); + throw new ConnectException( + sprintf( + "Could not resolve IPv6 address for host '%s'", + $uri->getHost() + ), + $request + ); } $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']'); } diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php index a72e38a532b2ee6a8f4da4a4f7ba49fdbf5be0a3..6a49cc0690cb0fa24b8987957aa8e4ba43b7cf05 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -1,7 +1,9 @@ <?php namespace GuzzleHttp; +use GuzzleHttp\Promise\PromiseInterface; use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; /** * Creates a composed Guzzle handler function by stacking middlewares on top of @@ -9,7 +11,7 @@ use Psr\Http\Message\RequestInterface; */ class HandlerStack { - /** @var callable */ + /** @var callable|null */ private $handler; /** @var array */ @@ -22,7 +24,7 @@ class HandlerStack * Creates a default handler stack that can be used by clients. * * The returned handler will wrap the provided handler or use the most - * appropriate default handler for you system. The returned HandlerStack has + * appropriate default handler for your system. The returned HandlerStack has * support for cookies, redirects, HTTP error exceptions, and preparing a body * before sending. * @@ -59,6 +61,8 @@ class HandlerStack * * @param RequestInterface $request * @param array $options + * + * @return ResponseInterface|PromiseInterface */ public function __invoke(RequestInterface $request, array $options) { @@ -206,7 +210,7 @@ class HandlerStack } /** - * @param $name + * @param string $name * @return int */ private function findByName($name) @@ -223,10 +227,10 @@ class HandlerStack /** * Splices a function into the middleware list at a specific position. * - * @param $findName - * @param $withName + * @param string $findName + * @param string $withName * @param callable $middleware - * @param $before + * @param bool $before */ private function splice($findName, $withName, callable $middleware, $before) { diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php index 6b090a977391a3903e580b05ff882965239a388d..dc36bb524d4b7f2515e9ce053c20557169c990aa 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -19,7 +19,6 @@ use Psr\Http\Message\ResponseInterface; * - {host}: Host of the request * - {method}: Method of the request * - {uri}: URI of the request - * - {host}: Host of the request * - {version}: Protocol version * - {target}: Request target of the request (path + query + fragment) * - {hostname}: Hostname of the machine that sent the request @@ -74,7 +73,6 @@ class MessageFormatter return preg_replace_callback( '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', function (array $matches) use ($request, $response, $error, &$cache) { - if (isset($cache[$matches[1]])) { return $cache[$matches[1]]; } @@ -170,6 +168,11 @@ class MessageFormatter ); } + /** + * Get headers from message as string + * + * @return string + */ private function headers(MessageInterface $message) { $result = ''; diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php index 9d79bd26e8ae31006a0ce68204b5393208398967..bffc1974bbe0d94287ff580d0cfe657e32cf041e 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -7,7 +7,6 @@ use GuzzleHttp\Promise\RejectedPromise; use GuzzleHttp\Psr7; use Psr\Http\Message\ResponseInterface; use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; /** * Functions used to create and wrap handlers with handler middleware. @@ -34,11 +33,12 @@ final class Middleware $cookieJar = $options['cookies']; $request = $cookieJar->withCookieHeader($request); return $handler($request, $options) - ->then(function ($response) use ($cookieJar, $request) { - $cookieJar->extractCookies($request, $response); - return $response; - } - ); + ->then( + function ($response) use ($cookieJar, $request) { + $cookieJar->extractCookies($request, $response); + return $response; + } + ); }; }; } @@ -57,7 +57,7 @@ final class Middleware return $handler($request, $options); } return $handler($request, $options)->then( - function (ResponseInterface $response) use ($request, $handler) { + function (ResponseInterface $response) use ($request) { $code = $response->getStatusCode(); if ($code < 400) { return $response; @@ -72,7 +72,7 @@ final class Middleware /** * Middleware that pushes history data to an ArrayAccess container. * - * @param array $container Container to hold the history (by reference). + * @param array|\ArrayAccess $container Container to hold the history (by reference). * * @return callable Returns a function that accepts the next handler. * @throws \InvalidArgumentException if container is not an array or ArrayAccess. @@ -182,7 +182,7 @@ final class Middleware * * @return callable Returns a function that accepts the next handler. */ - public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO) + public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = 'info' /* \Psr\Log\LogLevel::INFO */) { return function (callable $handler) use ($logger, $formatter, $logLevel) { return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) { diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php b/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php index 8f1be33cd396b60e9dd738fe81150cb62dd9e211..5838db4f4cf9a7e3596891a8dcf8c80ad5eef3ed 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php @@ -1,12 +1,13 @@ <?php namespace GuzzleHttp; +use GuzzleHttp\Promise\EachPromise; +use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Promise\PromisorInterface; use Psr\Http\Message\RequestInterface; -use GuzzleHttp\Promise\EachPromise; /** - * Sends and iterator of requests concurrently using a capped pool size. + * Sends an iterator of requests concurrently using a capped pool size. * * The pool will read from an iterator until it is cancelled or until the * iterator is consumed. When a request is yielded, the request is sent after @@ -69,6 +70,11 @@ class Pool implements PromisorInterface $this->each = new EachPromise($requests(), $config); } + /** + * Get promise + * + * @return PromiseInterface + */ public function promise() { return $this->each->promise(); @@ -106,6 +112,11 @@ class Pool implements PromisorInterface return $res; } + /** + * Execute callback(s) + * + * @return void + */ private static function cmpCallback(array &$options, $name, array &$results) { if (!isset($options[$name])) { diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php index 2eb95f9b2d3a1d9ce581f34bb01fcdf46ddd493d..568a1e906c97071c5d7220439278fc9aaf4058f2 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -66,6 +66,11 @@ class PrepareBodyMiddleware return $fn(Psr7\modify_request($request, $modify), $options); } + /** + * Add expect header + * + * @return void + */ private function addExpectHeader( RequestInterface $request, array $options, diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index 131b77179aa07f59ef65ff0945dd51083d58eb0e..e4644b7ac1d9dcf44cf31d1bf4f13742da3990ab 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -13,7 +13,7 @@ use Psr\Http\Message\UriInterface; * Request redirect middleware. * * Apply this middleware like other middleware using - * {@see GuzzleHttp\Middleware::redirect()}. + * {@see \GuzzleHttp\Middleware::redirect()}. */ class RedirectMiddleware { @@ -76,7 +76,7 @@ class RedirectMiddleware /** * @param RequestInterface $request * @param array $options - * @param ResponseInterface|PromiseInterface $response + * @param ResponseInterface $response * * @return ResponseInterface|PromiseInterface */ @@ -118,6 +118,11 @@ class RedirectMiddleware return $promise; } + /** + * Enable tracking on promise. + * + * @return PromiseInterface + */ private function withTracking(PromiseInterface $promise, $uri, $statusCode) { return $promise->then( @@ -135,6 +140,13 @@ class RedirectMiddleware ); } + /** + * Check for too many redirects + * + * @return void + * + * @throws TooManyRedirectsException Too many redirects. + */ private function guardMax(RequestInterface $request, array &$options) { $current = isset($options['__redirect_count']) @@ -172,13 +184,19 @@ class RedirectMiddleware // would do. $statusCode = $response->getStatusCode(); if ($statusCode == 303 || - ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict']) + ($statusCode <= 302 && !$options['allow_redirects']['strict']) ) { $modify['method'] = 'GET'; $modify['body'] = ''; } - $modify['uri'] = $this->redirectUri($request, $response, $protocols); + $uri = $this->redirectUri($request, $response, $protocols); + if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) { + $idnOptions = ($options['idn_conversion'] === true) ? IDNA_DEFAULT : $options['idn_conversion']; + $uri = Utils::idnUriConvert($uri, $idnOptions); + } + + $modify['uri'] = $uri; Psr7\rewind_body($request); // Add the Referer header if it is told to do so and only @@ -186,7 +204,7 @@ class RedirectMiddleware if ($options['allow_redirects']['referer'] && $modify['uri']->getScheme() === $request->getUri()->getScheme() ) { - $uri = $request->getUri()->withUserInfo('', ''); + $uri = $request->getUri()->withUserInfo(''); $modify['set_headers']['Referer'] = (string) $uri; } else { $modify['remove_headers'][] = 'Referer'; diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php index c6aacfb15782756a14e24ccc71143663795011fa..355f658f03457e48a615ec368a4fc6d31b83f1ad 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -22,7 +22,7 @@ final class RequestOptions * - strict: (bool, default=false) Set to true to use strict redirects * meaning redirect POST requests with POST requests vs. doing what most * browsers do which is redirect POST requests with GET requests - * - referer: (bool, default=true) Set to false to disable the Referer + * - referer: (bool, default=false) Set to true to enable the Referer * header. * - protocols: (array, default=['http', 'https']) Allowed redirect * protocols. @@ -132,6 +132,14 @@ final class RequestOptions */ const HTTP_ERRORS = 'http_errors'; + /** + * idn: (bool|int, default=true) A combination of IDNA_* constants for + * idn_to_ascii() PHP's function (see "options" parameter). Set to false to + * disable IDN support completely, or to true to use the default + * configuration (IDNA_DEFAULT constant). + */ + const IDN_CONVERSION = 'idn_conversion'; + /** * json: (mixed) Adds JSON data to a request. The provided value is JSON * encoded and a Content-Type header of application/json will be added to diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php index f27090fd197ab7ff443f12f6501d639f169871cf..5acc8c5c392eb717c00d0fc5643dacaf670b9149 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php @@ -19,6 +19,9 @@ class RetryMiddleware /** @var callable */ private $decider; + /** @var callable */ + private $delay; + /** * @param callable $decider Function that accepts the number of retries, * a request, [response], and [exception] and @@ -42,13 +45,13 @@ class RetryMiddleware /** * Default exponential backoff delay function. * - * @param $retries + * @param int $retries * - * @return int + * @return int milliseconds. */ public static function exponentialDelay($retries) { - return (int) pow(2, $retries - 1); + return (int) pow(2, $retries - 1) * 1000; } /** @@ -71,6 +74,11 @@ class RetryMiddleware ); } + /** + * Execute fulfilled closure + * + * @return mixed + */ private function onFulfilled(RequestInterface $req, array $options) { return function ($value) use ($req, $options) { @@ -87,6 +95,11 @@ class RetryMiddleware }; } + /** + * Execute rejected closure + * + * @return callable + */ private function onRejected(RequestInterface $req, array $options) { return function ($reason) use ($req, $options) { @@ -103,6 +116,9 @@ class RetryMiddleware }; } + /** + * @return self + */ private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null) { $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response); diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php b/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php index 15f717e1ea6e8edf6bc3a252f5a478e19e835b04..87fb3c00164d274d9b5cec535339bcfb059efc84 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -18,11 +18,11 @@ final class TransferStats private $handlerErrorData; /** - * @param RequestInterface $request Request that was sent. - * @param ResponseInterface $response Response received (if any) - * @param null $transferTime Total handler transfer time. - * @param mixed $handlerErrorData Handler error data. - * @param array $handlerStats Handler specific stats. + * @param RequestInterface $request Request that was sent. + * @param ResponseInterface|null $response Response received (if any) + * @param float|null $transferTime Total handler transfer time. + * @param mixed $handlerErrorData Handler error data. + * @param array $handlerStats Handler specific stats. */ public function __construct( RequestInterface $request, @@ -93,7 +93,7 @@ final class TransferStats /** * Get the estimated time the request was being transferred by the handler. * - * @return float Time in seconds. + * @return float|null Time in seconds. */ public function getTransferTime() { diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php index 0b1623ecaca007facc98ad039cf08037a213e98c..96dcfd09cd71fb4a2c40b38445faee78568ba0cc 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php @@ -107,7 +107,6 @@ class UriTemplate $useQuery = self::$operatorHash[$parsed['operator']]['query']; foreach ($parsed['values'] as $value) { - if (!isset($this->variables[$value['value']])) { continue; } @@ -117,11 +116,9 @@ class UriTemplate $expanded = ''; if (is_array($variable)) { - $isAssoc = $this->isAssoc($variable); $kvp = []; foreach ($variable as $key => $var) { - if ($isAssoc) { $key = rawurlencode($key); $isNestedArray = is_array($var); @@ -179,7 +176,6 @@ class UriTemplate } $expanded = implode(',', $kvp); } - } else { if ($value['modifier'] === ':') { $variable = substr($variable, 0, $value['position']); diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Utils.php b/civicrm/vendor/guzzlehttp/guzzle/src/Utils.php new file mode 100644 index 0000000000000000000000000000000000000000..dd90c2265ec81533a01cf52393620e8ac4e2eb89 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Utils.php @@ -0,0 +1,89 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Exception\InvalidArgumentException; +use Psr\Http\Message\UriInterface; +use Symfony\Polyfill\Intl\Idn\Idn; + +final class Utils +{ + /** + * Wrapper for the hrtime() or microtime() functions + * (depending on the PHP version, one of the two is used) + * + * @return float|mixed UNIX timestamp + * + * @internal + */ + public static function currentTime() + { + return function_exists('hrtime') ? hrtime(true) / 1e9 : microtime(true); + } + + /** + * @param int $options + * + * @return UriInterface + * @throws InvalidArgumentException + * + * @internal + */ + public static function idnUriConvert(UriInterface $uri, $options = 0) + { + if ($uri->getHost()) { + $asciiHost = self::idnToAsci($uri->getHost(), $options, $info); + if ($asciiHost === false) { + $errorBitSet = isset($info['errors']) ? $info['errors'] : 0; + + $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) { + return substr($name, 0, 11) === 'IDNA_ERROR_'; + }); + + $errors = []; + foreach ($errorConstants as $errorConstant) { + if ($errorBitSet & constant($errorConstant)) { + $errors[] = $errorConstant; + } + } + + $errorMessage = 'IDN conversion failed'; + if ($errors) { + $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; + } + + throw new InvalidArgumentException($errorMessage); + } else { + if ($uri->getHost() !== $asciiHost) { + // Replace URI only if the ASCII version is different + $uri = $uri->withHost($asciiHost); + } + } + } + + return $uri; + } + + /** + * @param string $domain + * @param int $options + * @param array $info + * + * @return string|false + */ + private static function idnToAsci($domain, $options, &$info = []) + { + if (\preg_match('%^[ -~]+$%', $domain) === 1) { + return $domain; + } + + if (\extension_loaded('intl') && defined('INTL_IDNA_VARIANT_UTS46')) { + return \idn_to_ascii($domain, $options, INTL_IDNA_VARIANT_UTS46, $info); + } + + /* + * The Idn class is marked as @internal. We've locked the version to + * symfony/polyfill-intl-idn to avoid issues in the future. + */ + return Idn::idn_to_ascii($domain, $options, Idn::INTL_IDNA_VARIANT_UTS46, $info); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/functions.php b/civicrm/vendor/guzzlehttp/guzzle/src/functions.php index 59e212edfad829c2b0a016cac8a2fdc9352b5da7..c2afd8c7bb19d1fa4e14f02da995348abd1414ab 100644 --- a/civicrm/vendor/guzzlehttp/guzzle/src/functions.php +++ b/civicrm/vendor/guzzlehttp/guzzle/src/functions.php @@ -56,7 +56,7 @@ function describe_type($input) /** * Parses an array of header lines into an associative array of headers. * - * @param array $lines Header lines array of strings in the following + * @param iterable $lines Header lines array of strings in the following * format: "Name: Value" * @return array */ @@ -97,8 +97,8 @@ function debug_resource($value = null) * * The returned handler is not wrapped by any default middlewares. * - * @throws \RuntimeException if no viable Handler is available. * @return callable Returns the best handler for the given system. + * @throws \RuntimeException if no viable Handler is available. */ function choose_handler() { @@ -196,7 +196,8 @@ function default_ca_bundle() } } - throw new \RuntimeException(<<< EOT + throw new \RuntimeException( + <<< EOT No system CA bundle could be found in any of the the common system locations. PHP versions earlier than 5.6 are not properly configured to use the system's CA bundle by default. In order to verify peer certificates, you will need to @@ -294,15 +295,16 @@ function is_host_in_noproxy($host, array $noProxyArray) * @param int $options Bitmask of JSON decode options. * * @return mixed - * @throws \InvalidArgumentException if the JSON cannot be decoded. + * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. * @link http://www.php.net/manual/en/function.json-decode.php */ function json_decode($json, $assoc = false, $depth = 512, $options = 0) { $data = \json_decode($json, $assoc, $depth, $options); if (JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException( - 'json_decode error: ' . json_last_error_msg()); + throw new Exception\InvalidArgumentException( + 'json_decode error: ' . json_last_error_msg() + ); } return $data; @@ -316,15 +318,16 @@ function json_decode($json, $assoc = false, $depth = 512, $options = 0) * @param int $depth Set the maximum depth. Must be greater than zero. * * @return string - * @throws \InvalidArgumentException if the JSON cannot be encoded. + * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. * @link http://www.php.net/manual/en/function.json-encode.php */ function json_encode($value, $options = 0, $depth = 512) { $json = \json_encode($value, $options, $depth); if (JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException( - 'json_encode error: ' . json_last_error_msg()); + throw new Exception\InvalidArgumentException( + 'json_encode error: ' . json_last_error_msg() + ); } return $json; diff --git a/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md b/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md index 5c252b3a208313cd73f7a84d63b752800edd96ff..8a3743dba5c5e88be197b4c38104cefbe56d96a2 100644 --- a/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -1,32 +1,102 @@ -# CHANGELOG +# Change Log -## 1.4.2 - 2017-03-20 -* Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + + +## [Unreleased] + + +## [1.6.0] + +### Added + +- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244) +- Added MIME type for WEBP image format (#246) +- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272) + +### Changed + +- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262) +- Accept port number 0 to be valid (#270) + +### Fixed + +- Fixed subsequent reads from `php://input` in ServerRequest (#247) +- Fixed readable/writable detection for certain stream modes (#248) +- Fixed encoding of special characters in the `userInfo` component of an URI (#253) + + +## [1.5.2] - 2018-12-04 + +### Fixed + +- Check body size when getting the message summary + + +## [1.5.1] - 2018-12-04 + +### Fixed + +- Get the summary of a body only if it is readable + + +## [1.5.0] - 2018-12-03 + +### Added + +- Response first-line to response string exception (fixes #145) +- A test for #129 behavior +- `get_message_body_summary` function in order to get the message summary +- `3gp` and `mkv` mime types + +### Changed + +- Clarify exception message when stream is detached + +### Deprecated + +- Deprecated parsing folded header lines as per RFC 7230 + +### Fixed + +- Fix `AppendStream::detach` to not close streams +- `InflateStream` preserves `isSeekable` attribute of the underlying stream +- `ServerRequest::getUriFromGlobals` to support URLs in query parameters + + +Several other fixes and improvements. + + +## [1.4.2] - 2017-03-20 + +### Fixed + +- Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing calls to `trigger_error` when deprecated methods are invoked. -## 1.4.1 - 2017-02-27 -* Reverted BC break by reintroducing behavior to automagically fix a URI with a +## [1.4.1] - 2017-02-27 + +### Added + +- Rriggering of silenced deprecation warnings. + +### Fixed + +- Reverted BC break by reintroducing behavior to automagically fix a URI with a relative path and an authority by adding a leading slash to the path. It's only deprecated now. -* Added triggering of silenced deprecation warnings. -## 1.4.0 - 2017-02-21 -* Fix `Stream::read` when length parameter <= 0. -* `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory. -* Fix `ServerRequest::getUriFromGlobals` when `Host` header contains port. -* Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form. -* Allow `parse_response` to parse a response without delimiting space and reason. -* Ensure each URI modification results in a valid URI according to PSR-7 discussions. - Invalid modifications will throw an exception instead of returning a wrong URI or - doing some magic. - - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception - because the path of a URI with an authority must start with a slash "/" or be empty - - `(new Uri())->withScheme('http')` will return `'http://localhost'` -* Fix compatibility of URIs with `file` scheme and empty host. -* Added common URI utility methods based on RFC 3986 (see documentation in the readme): +## [1.4.0] - 2017-02-21 + +### Added + +- Added common URI utility methods based on RFC 3986 (see documentation in the readme): - `Uri::isDefaultPort` - `Uri::isAbsolute` - `Uri::isNetworkPathReference` @@ -37,69 +107,117 @@ - `UriNormalizer::normalize` - `UriNormalizer::isEquivalent` - `UriResolver::relativize` -* Deprecated `Uri::resolve` in favor of `UriResolver::resolve` -* Deprecated `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments` -## 1.3.1 - 2016-06-25 +### Changed + +- Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form. +- Allow `parse_response` to parse a response without delimiting space and reason. +- Ensure each URI modification results in a valid URI according to PSR-7 discussions. + Invalid modifications will throw an exception instead of returning a wrong URI or + doing some magic. + - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception + because the path of a URI with an authority must start with a slash "/" or be empty + - `(new Uri())->withScheme('http')` will return `'http://localhost'` + +### Deprecated + +- `Uri::resolve` in favor of `UriResolver::resolve` +- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments` + +### Fixed + +- `Stream::read` when length parameter <= 0. +- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory. +- `ServerRequest::getUriFromGlobals` when `Host` header contains port. +- Compatibility of URIs with `file` scheme and empty host. + + +## [1.3.1] - 2016-06-25 + +### Fixed -* Fix `Uri::__toString` for network path references, e.g. `//example.org`. -* Fix missing lowercase normalization for host. -* Fix handling of URI components in case they are `'0'` in a lot of places, +- `Uri::__toString` for network path references, e.g. `//example.org`. +- Missing lowercase normalization for host. +- Handling of URI components in case they are `'0'` in a lot of places, e.g. as a user info password. -* Fix `Uri::withAddedHeader` to correctly merge headers with different case. -* Fix trimming of header values in `Uri::withAddedHeader`. Header values may +- `Uri::withAddedHeader` to correctly merge headers with different case. +- Trimming of header values in `Uri::withAddedHeader`. Header values may be surrounded by whitespace which should be ignored according to RFC 7230 Section 3.2.4. This does not apply to header names. -* Fix `Uri::withAddedHeader` with an array of header values. -* Fix `Uri::resolve` when base path has no slash and handling of fragment. -* Fix handling of encoding in `Uri::with(out)QueryValue` so one can pass the +- `Uri::withAddedHeader` with an array of header values. +- `Uri::resolve` when base path has no slash and handling of fragment. +- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the key/value both in encoded as well as decoded form to those methods. This is consistent with withPath, withQuery etc. -* Fix `ServerRequest::withoutAttribute` when attribute value is null. +- `ServerRequest::withoutAttribute` when attribute value is null. -## 1.3.0 - 2016-04-13 -* Added remaining interfaces needed for full PSR7 compatibility +## [1.3.0] - 2016-04-13 + +### Added + +- Remaining interfaces needed for full PSR7 compatibility (ServerRequestInterface, UploadedFileInterface, etc.). -* Added support for stream_for from scalars. -* Can now extend Uri. -* Fixed a bug in validating request methods by making it more permissive. +- Support for stream_for from scalars. + +### Changed + +- Can now extend Uri. + +### Fixed +- A bug in validating request methods by making it more permissive. -## 1.2.3 - 2016-02-18 -* Fixed support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote +## [1.2.3] - 2016-02-18 + +### Fixed + +- Support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote streams, which can sometimes return fewer bytes than requested with `fread`. -* Fixed handling of gzipped responses with FNAME headers. +- Handling of gzipped responses with FNAME headers. + + +## [1.2.2] - 2016-01-22 + +### Added -## 1.2.2 - 2016-01-22 +- Support for URIs without any authority. +- Support for HTTP 451 'Unavailable For Legal Reasons.' +- Support for using '0' as a filename. +- Support for including non-standard ports in Host headers. -* Added support for URIs without any authority. -* Added support for HTTP 451 'Unavailable For Legal Reasons.' -* Added support for using '0' as a filename. -* Added support for including non-standard ports in Host headers. -## 1.2.1 - 2015-11-02 +## [1.2.1] - 2015-11-02 -* Now supporting negative offsets when seeking to SEEK_END. +### Changes -## 1.2.0 - 2015-08-15 +- Now supporting negative offsets when seeking to SEEK_END. -* Body as `"0"` is now properly added to a response. -* Now allowing forward seeking in CachingStream. -* Now properly parsing HTTP requests that contain proxy targets in + +## [1.2.0] - 2015-08-15 + +### Changed + +- Body as `"0"` is now properly added to a response. +- Now allowing forward seeking in CachingStream. +- Now properly parsing HTTP requests that contain proxy targets in `parse_request`. -* functions.php is now conditionally required. -* user-info is no longer dropped when resolving URIs. +- functions.php is now conditionally required. +- user-info is no longer dropped when resolving URIs. + + +## [1.1.0] - 2015-06-24 -## 1.1.0 - 2015-06-24 +### Changed -* URIs can now be relative. -* `multipart/form-data` headers are now overridden case-insensitively. -* URI paths no longer encode the following characters because they are allowed +- URIs can now be relative. +- `multipart/form-data` headers are now overridden case-insensitively. +- URI paths no longer encode the following characters because they are allowed in URIs: "(", ")", "*", "!", "'" -* A port is no longer added to a URI when the scheme is missing and no port is +- A port is no longer added to a URI when the scheme is missing and no port is present. + ## 1.0.0 - 2015-05-19 Initial release. @@ -108,3 +226,21 @@ Currently unsupported: - `Psr\Http\Message\ServerRequestInterface` - `Psr\Http\Message\UploadedFileInterface` + + + +[Unreleased]: https://github.com/guzzle/psr7/compare/1.6.0...HEAD +[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0 +[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2 +[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1 +[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0 +[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2 +[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1 +[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0 +[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1 +[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0 +[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3 +[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2 +[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1 +[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0 diff --git a/civicrm/vendor/guzzlehttp/psr7/README.md b/civicrm/vendor/guzzlehttp/psr7/README.md index 16499358ea102a6d05d5cc44fcdb7abba19083ab..c60a6a38d3306f5c4b2e9ab7c1e19c5b65495c27 100644 --- a/civicrm/vendor/guzzlehttp/psr7/README.md +++ b/civicrm/vendor/guzzlehttp/psr7/README.md @@ -372,7 +372,7 @@ This method accepts the following `$resource` types: $stream = GuzzleHttp\Psr7\stream_for('foo'); $stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r')); -$generator function ($bytes) { +$generator = function ($bytes) { for ($i = 0; $i < $bytes; $i++) { yield ' '; } @@ -606,6 +606,12 @@ Creates a new URI with a specific query string value. Any existing query string provided key are removed and replaced with the given key value pair. A value of null will set the query string key without a value, e.g. "key" instead of "key=value". +### `GuzzleHttp\Psr7\Uri::withQueryValues` + +`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface` + +Creates a new URI with multiple query string values. It has the same behavior as `withQueryValue()` but for an +associative array of key => value. ### `GuzzleHttp\Psr7\Uri::withoutQueryValue` diff --git a/civicrm/vendor/guzzlehttp/psr7/composer.json b/civicrm/vendor/guzzlehttp/psr7/composer.json index b1c5a90ba71569e748dd46146a1cd31dd3509a5a..168a055b06bb295153fdeb876c51d1c66e2d7366 100644 --- a/civicrm/vendor/guzzlehttp/psr7/composer.json +++ b/civicrm/vendor/guzzlehttp/psr7/composer.json @@ -2,7 +2,7 @@ "name": "guzzlehttp/psr7", "type": "library", "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": ["request", "response", "message", "stream", "http", "uri", "url"], + "keywords": ["request", "response", "message", "stream", "http", "uri", "url", "psr-7"], "license": "MIT", "authors": [ { @@ -17,23 +17,33 @@ ], "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8", + "ext-zlib": "*" }, "provide": { "psr/http-message-implementation": "1.0" }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" }, "files": ["src/functions_include.php"] }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Tests\\Psr7\\": "tests/" + } + }, "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } } } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php b/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php index 23039fd794bbcaaf1fda658301e90d0a4b209c46..472a0d61ba47c1010aa61bd99a67ef0418efc24b 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -16,7 +16,6 @@ class AppendStream implements StreamInterface private $seekable = true; private $current = 0; private $pos = 0; - private $detached = false; /** * @param StreamInterface[] $streams Streams to decorate. Each stream must @@ -73,6 +72,7 @@ class AppendStream implements StreamInterface public function close() { $this->pos = $this->current = 0; + $this->seekable = true; foreach ($this->streams as $stream) { $stream->close(); @@ -82,14 +82,22 @@ class AppendStream implements StreamInterface } /** - * Detaches each attached stream + * Detaches each attached stream. + * + * Returns null as it's not clear which underlying stream resource to return. * * {@inheritdoc} */ public function detach() { - $this->close(); - $this->detached = true; + $this->pos = $this->current = 0; + $this->seekable = true; + + foreach ($this->streams as $stream) { + $stream->detach(); + } + + $this->streams = []; } public function tell() diff --git a/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php b/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php index cc9b4453f716150dacb93db04289b65a014c9186..73daea6f375c41cb49169dd0751d24a82f6a6abb 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php @@ -52,6 +52,15 @@ class FnStream implements StreamInterface } } + /** + * An unserialize would allow the __destruct to run when the unserialized value goes out of scope. + * @throws \LogicException + */ + public function __wakeup() + { + throw new \LogicException('FnStream should never be unserialized'); + } + /** * Adds custom functionality to an underlying stream by intercepting * specific method calls. diff --git a/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php b/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php index 0051d3fec5a8bdd2d906f85bad4c6120949c7f4b..5e4f6028ca0baaadcfc1facf71c02c8bb4c586d4 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -27,7 +27,7 @@ class InflateStream implements StreamInterface $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); $resource = StreamWrapper::getResource($stream); stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); - $this->stream = new Stream($resource); + $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource)); } /** diff --git a/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php b/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php index 3c13d4f41155dc292b81be222a4bde4d027a63fd..e4f239e30f8c5b5611b34f6d93923029a987848a 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php @@ -72,7 +72,7 @@ class LimitStream implements StreamInterface { if ($whence !== SEEK_SET || $offset < 0) { throw new \RuntimeException(sprintf( - 'Cannot seek to offset % with whence %s', + 'Cannot seek to offset %s with whence %s', $offset, $whence )); diff --git a/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php b/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php index 1e4da649ad5279f94c351f3ef95cc64a3cf837e3..a7966d10cfb57779358ad01604b547d3e9dfe1d1 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -66,11 +66,8 @@ trait MessageTrait public function withHeader($header, $value) { - if (!is_array($value)) { - $value = [$value]; - } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); $new = clone $this; @@ -85,11 +82,8 @@ trait MessageTrait public function withAddedHeader($header, $value) { - if (!is_array($value)) { - $value = [$value]; - } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); $new = clone $this; @@ -144,11 +138,13 @@ trait MessageTrait { $this->headerNames = $this->headers = []; foreach ($headers as $header => $value) { - if (!is_array($value)) { - $value = [$value]; + if (is_int($header)) { + // Numeric array keys are converted to int by PHP but having a header name '123' is not forbidden by the spec + // and also allowed in withHeader(). So we need to cast it to string again for the following assertion to pass. + $header = (string) $header; } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); if (isset($this->headerNames[$normalized])) { $header = $this->headerNames[$normalized]; @@ -160,6 +156,19 @@ trait MessageTrait } } + private function normalizeHeaderValue($value) + { + if (!is_array($value)) { + return $this->trimHeaderValues([$value]); + } + + if (count($value) === 0) { + throw new \InvalidArgumentException('Header value can not be an empty array.'); + } + + return $this->trimHeaderValues($value); + } + /** * Trims whitespace from the header values. * @@ -177,7 +186,28 @@ trait MessageTrait private function trimHeaderValues(array $values) { return array_map(function ($value) { - return trim($value, " \t"); + if (!is_scalar($value) && null !== $value) { + throw new \InvalidArgumentException(sprintf( + 'Header value must be scalar or null but %s provided.', + is_object($value) ? get_class($value) : gettype($value) + )); + } + + return trim((string) $value, " \t"); }, $values); } + + private function assertHeader($header) + { + if (!is_string($header)) { + throw new \InvalidArgumentException(sprintf( + 'Header name must be a string but %s provided.', + is_object($header) ? get_class($header) : gettype($header) + )); + } + + if ($header === '') { + throw new \InvalidArgumentException('Header name can not be empty.'); + } + } } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Request.php b/civicrm/vendor/guzzlehttp/psr7/src/Request.php index 08285484da22d738e3b7bc2781ef06e81d7f6b19..59f337db11d45efcdad5f2f6f0fe2ea7f8952048 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/Request.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/Request.php @@ -36,6 +36,7 @@ class Request implements RequestInterface $body = null, $version = '1.1' ) { + $this->assertMethod($method); if (!($uri instanceof UriInterface)) { $uri = new Uri($uri); } @@ -45,7 +46,7 @@ class Request implements RequestInterface $this->setHeaders($headers); $this->protocol = $version; - if (!$this->hasHeader('Host')) { + if (!isset($this->headerNames['host'])) { $this->updateHostFromUri(); } @@ -91,6 +92,7 @@ class Request implements RequestInterface public function withMethod($method) { + $this->assertMethod($method); $new = clone $this; $new->method = strtoupper($method); return $new; @@ -110,7 +112,7 @@ class Request implements RequestInterface $new = clone $this; $new->uri = $uri; - if (!$preserveHost) { + if (!$preserveHost || !isset($this->headerNames['host'])) { $new->updateHostFromUri(); } @@ -139,4 +141,11 @@ class Request implements RequestInterface // See: http://tools.ietf.org/html/rfc7230#section-5.4 $this->headers = [$header => [$host]] + $this->headers; } + + private function assertMethod($method) + { + if (!is_string($method) || $method === '') { + throw new \InvalidArgumentException('Method must be a non-empty string.'); + } + } } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Response.php b/civicrm/vendor/guzzlehttp/psr7/src/Response.php index 2830c6c9ee10229c613e94f7b4360d6796c3e752..e7e04d86a6593c3fc310be047b1a1ef06cc71b6d 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/Response.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/Response.php @@ -93,7 +93,11 @@ class Response implements ResponseInterface $version = '1.1', $reason = null ) { - $this->statusCode = (int) $status; + $this->assertStatusCodeIsInteger($status); + $status = (int) $status; + $this->assertStatusCodeRange($status); + + $this->statusCode = $status; if ($body !== '' && $body !== null) { $this->stream = stream_for($body); @@ -121,12 +125,30 @@ class Response implements ResponseInterface public function withStatus($code, $reasonPhrase = '') { + $this->assertStatusCodeIsInteger($code); + $code = (int) $code; + $this->assertStatusCodeRange($code); + $new = clone $this; - $new->statusCode = (int) $code; + $new->statusCode = $code; if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) { $reasonPhrase = self::$phrases[$new->statusCode]; } $new->reasonPhrase = $reasonPhrase; return $new; } + + private function assertStatusCodeIsInteger($statusCode) + { + if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) { + throw new \InvalidArgumentException('Status code must be an integer value.'); + } + } + + private function assertStatusCodeRange($statusCode) + { + if ($statusCode < 100 || $statusCode >= 600) { + throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); + } + } } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Rfc7230.php b/civicrm/vendor/guzzlehttp/psr7/src/Rfc7230.php new file mode 100644 index 0000000000000000000000000000000000000000..505e4742b6e749f85e69499c013617df20f7232e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -0,0 +1,18 @@ +<?php + +namespace GuzzleHttp\Psr7; + +final class Rfc7230 +{ + /** + * Header related regular expressions (copied from amphp/http package) + * (Note: once we require PHP 7.x we could just depend on the upstream package) + * + * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons. + * + * @link https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 + * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE + */ + const HEADER_REGEX = "(^([^()<>@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; + const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php b/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php index 575aab8489a60279366f1b1cca29d93ad77287cd..1a09a6c87c3af3ca9e315e48aee1e4da64c4eb31 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -166,9 +166,9 @@ class ServerRequest extends Request implements ServerRequestInterface public static function fromGlobals() { $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; - $headers = function_exists('getallheaders') ? getallheaders() : []; + $headers = getallheaders(); $uri = self::getUriFromGlobals(); - $body = new LazyOpenStream('php://input', 'r+'); + $body = new CachingStream(new LazyOpenStream('php://input', 'r+')); $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1'; $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER); @@ -180,23 +180,41 @@ class ServerRequest extends Request implements ServerRequestInterface ->withUploadedFiles(self::normalizeFiles($_FILES)); } + private static function extractHostAndPortFromAuthority($authority) + { + $uri = 'http://'.$authority; + $parts = parse_url($uri); + if (false === $parts) { + return [null, null]; + } + + $host = isset($parts['host']) ? $parts['host'] : null; + $port = isset($parts['port']) ? $parts['port'] : null; + + return [$host, $port]; + } + /** * Get a Uri populated with values from $_SERVER. * * @return UriInterface */ - public static function getUriFromGlobals() { + public static function getUriFromGlobals() + { $uri = new Uri(''); $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http'); $hasPort = false; if (isset($_SERVER['HTTP_HOST'])) { - $hostHeaderParts = explode(':', $_SERVER['HTTP_HOST']); - $uri = $uri->withHost($hostHeaderParts[0]); - if (isset($hostHeaderParts[1])) { + list($host, $port) = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']); + if ($host !== null) { + $uri = $uri->withHost($host); + } + + if ($port !== null) { $hasPort = true; - $uri = $uri->withPort($hostHeaderParts[1]); + $uri = $uri->withPort($port); } } elseif (isset($_SERVER['SERVER_NAME'])) { $uri = $uri->withHost($_SERVER['SERVER_NAME']); @@ -210,7 +228,7 @@ class ServerRequest extends Request implements ServerRequestInterface $hasQuery = false; if (isset($_SERVER['REQUEST_URI'])) { - $requestUriParts = explode('?', $_SERVER['REQUEST_URI']); + $requestUriParts = explode('?', $_SERVER['REQUEST_URI'], 2); $uri = $uri->withPath($requestUriParts[0]); if (isset($requestUriParts[1])) { $hasQuery = true; diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Stream.php b/civicrm/vendor/guzzlehttp/psr7/src/Stream.php index e33662879ffbac5ee1fc971f1dc17fdedfd8979f..d9e7409c7c070d94a88ad8cc4d44d26fa243dc91 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/Stream.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/Stream.php @@ -10,6 +10,17 @@ use Psr\Http\Message\StreamInterface; */ class Stream implements StreamInterface { + /** + * Resource modes. + * + * @var string + * + * @see http://php.net/manual/function.fopen.php + * @see http://php.net/manual/en/function.gzopen.php + */ + const READABLE_MODES = '/r|a\+|ab\+|w\+|wb\+|x\+|xb\+|c\+|cb\+/'; + const WRITABLE_MODES = '/a|w|r\+|rb\+|rw|x|c/'; + private $stream; private $size; private $seekable; @@ -18,22 +29,6 @@ class Stream implements StreamInterface private $uri; private $customMetadata; - /** @var array Hash of readable and writable stream types */ - private static $readWriteHash = [ - 'read' => [ - 'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true, - 'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true, - 'c+b' => true, 'rt' => true, 'w+t' => true, 'r+t' => true, - 'x+t' => true, 'c+t' => true, 'a+' => true - ], - 'write' => [ - 'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true, - 'c+' => true, 'wb' => true, 'w+b' => true, 'r+b' => true, - 'x+b' => true, 'c+b' => true, 'w+t' => true, 'r+t' => true, - 'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true - ] - ]; - /** * This constructor accepts an associative array of options. * @@ -65,20 +60,11 @@ class Stream implements StreamInterface $this->stream = $stream; $meta = stream_get_meta_data($this->stream); $this->seekable = $meta['seekable']; - $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]); - $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]); + $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']); $this->uri = $this->getMetadata('uri'); } - public function __get($name) - { - if ($name == 'stream') { - throw new \RuntimeException('The stream is detached'); - } - - throw new \BadMethodCallException('No value for ' . $name); - } - /** * Closes the stream when the destructed */ @@ -99,6 +85,10 @@ class Stream implements StreamInterface public function getContents() { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + $contents = stream_get_contents($this->stream); if ($contents === false) { @@ -173,11 +163,19 @@ class Stream implements StreamInterface public function eof() { - return !$this->stream || feof($this->stream); + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + + return feof($this->stream); } public function tell() { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + $result = ftell($this->stream); if ($result === false) { @@ -194,9 +192,15 @@ class Stream implements StreamInterface public function seek($offset, $whence = SEEK_SET) { + $whence = (int) $whence; + + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } if (!$this->seekable) { throw new \RuntimeException('Stream is not seekable'); - } elseif (fseek($this->stream, $offset, $whence) === -1) { + } + if (fseek($this->stream, $offset, $whence) === -1) { throw new \RuntimeException('Unable to seek to stream position ' . $offset . ' with whence ' . var_export($whence, true)); } @@ -204,6 +208,9 @@ class Stream implements StreamInterface public function read($length) { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } if (!$this->readable) { throw new \RuntimeException('Cannot read from non-readable stream'); } @@ -225,6 +232,9 @@ class Stream implements StreamInterface public function write($string) { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } if (!$this->writable) { throw new \RuntimeException('Cannot write to a non-writable stream'); } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php index cf7b2232e463e21dc3eb6de440fdef70c6d057e7..0f3a2856a2e592c1d57940fe6bb5be3cc8e46228 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -38,9 +38,21 @@ class StreamWrapper . 'writable, or both.'); } - return fopen('guzzle://stream', $mode, null, stream_context_create([ + return fopen('guzzle://stream', $mode, null, self::createStreamContext($stream)); + } + + /** + * Creates a stream context that can be used to open a stream as a php stream resource. + * + * @param StreamInterface $stream + * + * @return resource + */ + public static function createStreamContext(StreamInterface $stream) + { + return stream_context_create([ 'guzzle' => ['stream' => $stream] - ])); + ]); } /** @@ -94,12 +106,21 @@ class StreamWrapper return true; } + public function stream_cast($cast_as) + { + $stream = clone($this->stream); + + return $stream->detach(); + } + public function stream_stat() { static $modeMap = [ 'r' => 33060, + 'rb' => 33060, 'r+' => 33206, - 'w' => 33188 + 'w' => 33188, + 'wb' => 33188 ]; return [ @@ -118,4 +139,23 @@ class StreamWrapper 'blocks' => 0 ]; } + + public function url_stat($path, $flags) + { + return [ + 'dev' => 0, + 'ino' => 0, + 'mode' => 0, + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, + 'blksize' => 0, + 'blocks' => 0 + ]; + } } diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Uri.php b/civicrm/vendor/guzzlehttp/psr7/src/Uri.php index f46c1db9e07812e8d0069a4d9beb145ea3bfbf31..825a25eedb8270dcaeba9ca152c3e0621bab068c 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/Uri.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/Uri.php @@ -301,15 +301,7 @@ class Uri implements UriInterface */ public static function withoutQueryValue(UriInterface $uri, $key) { - $current = $uri->getQuery(); - if ($current === '') { - return $uri; - } - - $decodedKey = rawurldecode($key); - $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) { - return rawurldecode(explode('=', $part)[0]) !== $decodedKey; - }); + $result = self::getFilteredQueryString($uri, [$key]); return $uri->withQuery(implode('&', $result)); } @@ -331,26 +323,29 @@ class Uri implements UriInterface */ public static function withQueryValue(UriInterface $uri, $key, $value) { - $current = $uri->getQuery(); + $result = self::getFilteredQueryString($uri, [$key]); - if ($current === '') { - $result = []; - } else { - $decodedKey = rawurldecode($key); - $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) { - return rawurldecode(explode('=', $part)[0]) !== $decodedKey; - }); - } + $result[] = self::generateQueryString($key, $value); - // Query string separators ("=", "&") within the key or value need to be encoded - // (while preventing double-encoding) before setting the query string. All other - // chars that need percent-encoding will be encoded by withQuery(). - $key = strtr($key, self::$replaceQuery); + return $uri->withQuery(implode('&', $result)); + } - if ($value !== null) { - $result[] = $key . '=' . strtr($value, self::$replaceQuery); - } else { - $result[] = $key; + /** + * Creates a new URI with multiple specific query string values. + * + * It has the same behavior as withQueryValue() but for an associative array of key => value. + * + * @param UriInterface $uri URI to use as a base. + * @param array $keyValueArray Associative array of key and values + * + * @return UriInterface + */ + public static function withQueryValues(UriInterface $uri, array $keyValueArray) + { + $result = self::getFilteredQueryString($uri, array_keys($keyValueArray)); + + foreach ($keyValueArray as $key => $value) { + $result[] = self::generateQueryString($key, $value); } return $uri->withQuery(implode('&', $result)); @@ -442,9 +437,9 @@ class Uri implements UriInterface public function withUserInfo($user, $password = null) { - $info = $user; - if ($password != '') { - $info .= ':' . $password; + $info = $this->filterUserInfoComponent($user); + if ($password !== null) { + $info .= ':' . $this->filterUserInfoComponent($password); } if ($this->userInfo === $info) { @@ -542,7 +537,9 @@ class Uri implements UriInterface $this->scheme = isset($parts['scheme']) ? $this->filterScheme($parts['scheme']) : ''; - $this->userInfo = isset($parts['user']) ? $parts['user'] : ''; + $this->userInfo = isset($parts['user']) + ? $this->filterUserInfoComponent($parts['user']) + : ''; $this->host = isset($parts['host']) ? $this->filterHost($parts['host']) : ''; @@ -559,7 +556,7 @@ class Uri implements UriInterface ? $this->filterQueryAndFragment($parts['fragment']) : ''; if (isset($parts['pass'])) { - $this->userInfo .= ':' . $parts['pass']; + $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); } $this->removeDefaultPort(); @@ -581,6 +578,26 @@ class Uri implements UriInterface return strtolower($scheme); } + /** + * @param string $component + * + * @return string + * + * @throws \InvalidArgumentException If the user info is invalid. + */ + private function filterUserInfoComponent($component) + { + if (!is_string($component)) { + throw new \InvalidArgumentException('User info must be a string'); + } + + return preg_replace_callback( + '/(?:[^%' . self::$charUnreserved . self::$charSubDelims . ']+|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $component + ); + } + /** * @param string $host * @@ -611,15 +628,56 @@ class Uri implements UriInterface } $port = (int) $port; - if (1 > $port || 0xffff < $port) { + if (0 > $port || 0xffff < $port) { throw new \InvalidArgumentException( - sprintf('Invalid port: %d. Must be between 1 and 65535', $port) + sprintf('Invalid port: %d. Must be between 0 and 65535', $port) ); } return $port; } + /** + * @param UriInterface $uri + * @param array $keys + * + * @return array + */ + private static function getFilteredQueryString(UriInterface $uri, array $keys) + { + $current = $uri->getQuery(); + + if ($current === '') { + return []; + } + + $decodedKeys = array_map('rawurldecode', $keys); + + return array_filter(explode('&', $current), function ($part) use ($decodedKeys) { + return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true); + }); + } + + /** + * @param string $key + * @param string|null $value + * + * @return string + */ + private static function generateQueryString($key, $value) + { + // Query string separators ("=", "&") within the key or value need to be encoded + // (while preventing double-encoding) before setting the query string. All other + // chars that need percent-encoding will be encoded by withQuery(). + $queryString = strtr($key, self::$replaceQuery); + + if ($value !== null) { + $queryString .= '=' . strtr($value, self::$replaceQuery); + } + + return $queryString; + } + private function removeDefaultPort() { if ($this->port !== null && self::isDefaultPort($this)) { diff --git a/civicrm/vendor/guzzlehttp/psr7/src/functions.php b/civicrm/vendor/guzzlehttp/psr7/src/functions.php index e40348d6abdee0bafd739cae12f99f033b131da8..8e6dafe68ea0d4c53820faeac5f75de452e1c906 100644 --- a/civicrm/vendor/guzzlehttp/psr7/src/functions.php +++ b/civicrm/vendor/guzzlehttp/psr7/src/functions.php @@ -69,10 +69,10 @@ function uri_for($uri) * - metadata: Array of custom metadata. * - size: Size of the stream. * - * @param resource|string|null|int|float|bool|StreamInterface|callable $resource Entity body data - * @param array $options Additional options + * @param resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource Entity body data + * @param array $options Additional options * - * @return Stream + * @return StreamInterface * @throws \InvalidArgumentException if the $resource arg is not valid. */ function stream_for($resource = '', array $options = []) @@ -238,7 +238,7 @@ function modify_request(RequestInterface $request, array $changes) } if ($request instanceof ServerRequestInterface) { - return new ServerRequest( + return (new ServerRequest( isset($changes['method']) ? $changes['method'] : $request->getMethod(), $uri, $headers, @@ -247,7 +247,11 @@ function modify_request(RequestInterface $request, array $changes) ? $changes['version'] : $request->getProtocolVersion(), $request->getServerParams() - ); + )) + ->withParsedBody($request->getParsedBody()) + ->withQueryParams($request->getQueryParams()) + ->withCookieParams($request->getCookieParams()) + ->withUploadedFiles($request->getUploadedFiles()); } return new Request( @@ -431,7 +435,7 @@ function hash( * @param StreamInterface $stream Stream to read from * @param int $maxLength Maximum buffer length * - * @return string|bool + * @return string */ function readline(StreamInterface $stream, $maxLength = null) { @@ -495,7 +499,7 @@ function parse_response($message) // between status-code and reason-phrase is required. But browsers accept // responses without space and reason as well. if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { - throw new \InvalidArgumentException('Invalid response string'); + throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); } $parts = explode(' ', $data['start-line'], 3); @@ -516,8 +520,8 @@ function parse_response($message) * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']). * - * @param string $str Query string to parse - * @param bool|string $urlEncoding How the query string is encoded + * @param string $str Query string to parse + * @param int|bool $urlEncoding How the query string is encoded * * @return array */ @@ -533,9 +537,9 @@ function parse_query($str, $urlEncoding = true) $decoder = function ($value) { return rawurldecode(str_replace('+', ' ', $value)); }; - } elseif ($urlEncoding == PHP_QUERY_RFC3986) { + } elseif ($urlEncoding === PHP_QUERY_RFC3986) { $decoder = 'rawurldecode'; - } elseif ($urlEncoding == PHP_QUERY_RFC1738) { + } elseif ($urlEncoding === PHP_QUERY_RFC1738) { $decoder = 'urldecode'; } else { $decoder = function ($str) { return $str; }; @@ -633,6 +637,7 @@ function mimetype_from_filename($filename) function mimetype_from_extension($extension) { static $mimetypes = [ + '3gp' => 'video/3gpp', '7z' => 'application/x-7z-compressed', 'aac' => 'audio/x-aac', 'ai' => 'application/postscript', @@ -680,6 +685,7 @@ function mimetype_from_extension($extension) 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mov' => 'video/quicktime', + 'mkv' => 'video/x-matroska', 'mp3' => 'audio/mpeg', 'mp4' => 'video/mp4', 'mp4a' => 'audio/mp4', @@ -718,6 +724,7 @@ function mimetype_from_extension($extension) 'txt' => 'text/plain', 'wav' => 'audio/x-wav', 'webm' => 'video/webm', + 'webp' => 'image/webp', 'wma' => 'audio/x-ms-wma', 'wmv' => 'video/x-ms-wmv', 'woff' => 'application/x-font-woff', @@ -758,29 +765,53 @@ function _parse_message($message) throw new \InvalidArgumentException('Invalid message'); } - // Iterate over each line in the message, accounting for line endings - $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE); - $result = ['start-line' => array_shift($lines), 'headers' => [], 'body' => '']; - array_shift($lines); + $message = ltrim($message, "\r\n"); - for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) { - $line = $lines[$i]; - // If two line breaks were encountered, then this is the end of body - if (empty($line)) { - if ($i < $totalLines - 1) { - $result['body'] = implode('', array_slice($lines, $i + 2)); - } - break; - } - if (strpos($line, ':')) { - $parts = explode(':', $line, 2); - $key = trim($parts[0]); - $value = isset($parts[1]) ? trim($parts[1]) : ''; - $result['headers'][$key][] = $value; + $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); + + if ($messageParts === false || count($messageParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); + } + + list($rawHeaders, $body) = $messageParts; + $rawHeaders .= "\r\n"; // Put back the delimiter we split previously + $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); + + if ($headerParts === false || count($headerParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing status line'); + } + + list($startLine, $rawHeaders) = $headerParts; + + if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { + // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 + $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); + } + + /** @var array[] $headerLines */ + $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); + + // If these aren't the same, then one line didn't match and there's an invalid header. + if ($count !== substr_count($rawHeaders, "\n")) { + // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 + if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { + throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); } + + throw new \InvalidArgumentException('Invalid header syntax'); } - return $result; + $headers = []; + + foreach ($headerLines as $headerLine) { + $headers[$headerLine[1]][] = $headerLine[2]; + } + + return [ + 'start-line' => $startLine, + 'headers' => $headers, + 'body' => $body, + ]; } /** @@ -809,6 +840,46 @@ function _parse_request_uri($path, array $headers) return $scheme . '://' . $host . '/' . ltrim($path, '/'); } +/** + * Get a short summary of the message body + * + * Will return `null` if the response is not printable. + * + * @param MessageInterface $message The message to get the body summary + * @param int $truncateAt The maximum allowed size of the summary + * + * @return null|string + */ +function get_message_body_summary(MessageInterface $message, $truncateAt = 120) +{ + $body = $message->getBody(); + + if (!$body->isSeekable() || !$body->isReadable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read($truncateAt); + $body->rewind(); + + if ($size > $truncateAt) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { + return null; + } + + return $summary; +} + /** @internal */ function _caseless_remove($keys, array $data) { diff --git a/civicrm/vendor/psr/log/.gitignore b/civicrm/vendor/psr/log/.gitignore deleted file mode 100644 index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000 --- a/civicrm/vendor/psr/log/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor diff --git a/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php b/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php index e695046e30f737120f794e171a607c8226bfd390..2206cfde41aec794089817f90269a03d251db018 100644 --- a/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php +++ b/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -22,8 +22,8 @@ interface LoggerInterface /** * System is unusable. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -35,8 +35,8 @@ interface LoggerInterface * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -47,8 +47,8 @@ interface LoggerInterface * * Example: Application component unavailable, unexpected exception. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -58,8 +58,8 @@ interface LoggerInterface * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -71,8 +71,8 @@ interface LoggerInterface * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -81,8 +81,8 @@ interface LoggerInterface /** * Normal but significant events. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -93,8 +93,8 @@ interface LoggerInterface * * Example: User logs in, SQL logs. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -103,8 +103,8 @@ interface LoggerInterface /** * Detailed debug information. * - * @param string $message - * @param array $context + * @param string $message + * @param mixed[] $context * * @return void */ @@ -113,9 +113,9 @@ interface LoggerInterface /** * Logs with an arbitrary level. * - * @param mixed $level - * @param string $message - * @param array $context + * @param mixed $level + * @param string $message + * @param mixed[] $context * * @return void * diff --git a/civicrm/vendor/ralouphie/getallheaders/LICENSE b/civicrm/vendor/ralouphie/getallheaders/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..be5540c2af759b6e32172cbdcda5ccdf58816f2a --- /dev/null +++ b/civicrm/vendor/ralouphie/getallheaders/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Ralph Khattar + +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/ralouphie/getallheaders/README.md b/civicrm/vendor/ralouphie/getallheaders/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9430d76bbc2ff17f6626b7da94c6588fc8bc4c12 --- /dev/null +++ b/civicrm/vendor/ralouphie/getallheaders/README.md @@ -0,0 +1,27 @@ +getallheaders +============= + +PHP `getallheaders()` polyfill. Compatible with PHP >= 5.3. + +[](https://travis-ci.org/ralouphie/getallheaders) +[](https://coveralls.io/r/ralouphie/getallheaders?branch=master) +[](https://packagist.org/packages/ralouphie/getallheaders) +[](https://packagist.org/packages/ralouphie/getallheaders) +[](https://packagist.org/packages/ralouphie/getallheaders) + + +This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). + +## Install + +For PHP version **`>= 5.6`**: + +``` +composer require ralouphie/getallheaders +``` + +For PHP version **`< 5.6`**: + +``` +composer require ralouphie/getallheaders "^2" +``` diff --git a/civicrm/vendor/ralouphie/getallheaders/composer.json b/civicrm/vendor/ralouphie/getallheaders/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..de8ce62e45dc6d37f9021969baed2830ac6537ae --- /dev/null +++ b/civicrm/vendor/ralouphie/getallheaders/composer.json @@ -0,0 +1,26 @@ +{ + "name": "ralouphie/getallheaders", + "description": "A polyfill for getallheaders.", + "license": "MIT", + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^5 || ^6.5", + "php-coveralls/php-coveralls": "^2.1" + }, + "autoload": { + "files": ["src/getallheaders.php"] + }, + "autoload-dev": { + "psr-4": { + "getallheaders\\Tests\\": "tests/" + } + } +} diff --git a/civicrm/vendor/ralouphie/getallheaders/src/getallheaders.php b/civicrm/vendor/ralouphie/getallheaders/src/getallheaders.php new file mode 100644 index 0000000000000000000000000000000000000000..c7285a5ba166616c89ea98d7ac3ce5cb05b382aa --- /dev/null +++ b/civicrm/vendor/ralouphie/getallheaders/src/getallheaders.php @@ -0,0 +1,46 @@ +<?php + +if (!function_exists('getallheaders')) { + + /** + * Get all HTTP header key/values as an associative array for the current request. + * + * @return string[string] The HTTP header key/value pairs. + */ + function getallheaders() + { + $headers = array(); + + $copy_server = array( + 'CONTENT_TYPE' => 'Content-Type', + 'CONTENT_LENGTH' => 'Content-Length', + 'CONTENT_MD5' => 'Content-Md5', + ); + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $key = substr($key, 5); + if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) { + $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); + $headers[$key] = $value; + } + } elseif (isset($copy_server[$key])) { + $headers[$copy_server[$key]] = $value; + } + } + + if (!isset($headers['Authorization'])) { + if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($_SERVER['PHP_AUTH_USER'])) { + $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; + $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass); + } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + +} diff --git a/civicrm/vendor/symfony/polyfill-intl-idn/Idn.php b/civicrm/vendor/symfony/polyfill-intl-idn/Idn.php new file mode 100644 index 0000000000000000000000000000000000000000..f54ffd535c48727b2da6a0b723e1cb0c0cecfcfa --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-intl-idn/Idn.php @@ -0,0 +1,287 @@ +<?php + +/* + * Copyright (c) 2014 TrueServer B.V. + * + * 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. + * + * Originally forked from + * https://github.com/true/php-punycode/blob/v2.1.1/src/Punycode.php + */ + +namespace Symfony\Polyfill\Intl\Idn; + +/** + * Partial intl implementation in pure PHP. + * + * Implemented: + * - idn_to_ascii - Convert domain name to IDNA ASCII form + * - idn_to_utf8 - Convert domain name from IDNA ASCII to Unicode + * + * @author Renan Gonçalves <renan.saddam@gmail.com> + * @author Sebastian Kroczek <sk@xbug.de> + * @author Dmitry Lukashin <dmitry@lukashin.ru> + * @author Laurent Bassin <laurent@bassin.info> + * + * @internal + */ +final class Idn +{ + const INTL_IDNA_VARIANT_2003 = 0; + const INTL_IDNA_VARIANT_UTS46 = 1; + + private static $encodeTable = array( + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', + 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + ); + + private static $decodeTable = array( + 'a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, + 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, + 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, + 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, + 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, + '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35, + ); + + public static function idn_to_ascii($domain, $options, $variant, &$idna_info = array()) + { + if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { + @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); + } + + if (self::INTL_IDNA_VARIANT_UTS46 === $variant) { + $domain = mb_strtolower($domain, 'utf-8'); + } + + $parts = explode('.', $domain); + + foreach ($parts as $i => &$part) { + if ('' === $part && \count($parts) > 1 + $i) { + return false; + } + if (false === $part = self::encodePart($part)) { + return false; + } + } + + $output = implode('.', $parts); + + $idna_info = array( + 'result' => \strlen($output) > 255 ? false : $output, + 'isTransitionalDifferent' => false, + 'errors' => 0, + ); + + return $idna_info['result']; + } + + public static function idn_to_utf8($domain, $options, $variant, &$idna_info = array()) + { + if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { + @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); + } + + $parts = explode('.', $domain); + + foreach ($parts as &$part) { + $length = \strlen($part); + if ($length < 1 || 63 < $length) { + continue; + } + if (0 !== strpos($part, 'xn--')) { + continue; + } + + $part = substr($part, 4); + $part = self::decodePart($part); + } + + $output = implode('.', $parts); + + $idna_info = array( + 'result' => \strlen($output) > 255 ? false : $output, + 'isTransitionalDifferent' => false, + 'errors' => 0, + ); + + return $idna_info['result']; + } + + private static function encodePart($input) + { + if (\substr($input, 0, 1) === '-' || \substr($input, -1) === '-') { + return false; + } + + $codePoints = self::listCodePoints($input); + + $n = 128; + $bias = 72; + $delta = 0; + $h = $b = \count($codePoints['basic']); + + $output = ''; + foreach ($codePoints['basic'] as $code) { + $output .= mb_chr($code, 'utf-8'); + } + if ($input === $output) { + return $output; + } + if ($b > 0) { + $output .= '-'; + } + + $codePoints['nonBasic'] = array_unique($codePoints['nonBasic']); + sort($codePoints['nonBasic']); + + $i = 0; + $length = mb_strlen($input, 'utf-8'); + while ($h < $length) { + $m = $codePoints['nonBasic'][$i++]; + $delta += ($m - $n) * ($h + 1); + $n = $m; + + foreach ($codePoints['all'] as $c) { + if ($c < $n || $c < 128) { + ++$delta; + } + if ($c === $n) { + $q = $delta; + for ($k = 36;; $k += 36) { + $t = self::calculateThreshold($k, $bias); + if ($q < $t) { + break; + } + + $code = $t + (($q - $t) % (36 - $t)); + $output .= self::$encodeTable[$code]; + + $q = ($q - $t) / (36 - $t); + } + + $output .= self::$encodeTable[$q]; + $bias = self::adapt($delta, $h + 1, ($h === $b)); + $delta = 0; + ++$h; + } + } + + ++$delta; + ++$n; + } + + $output = 'xn--'.$output; + + return \strlen($output) < 1 || 63 < \strlen($output) ? false : strtolower($output); + } + + private static function listCodePoints($input) + { + $codePoints = array( + 'all' => array(), + 'basic' => array(), + 'nonBasic' => array(), + ); + + $length = mb_strlen($input, 'utf-8'); + for ($i = 0; $i < $length; ++$i) { + $char = mb_substr($input, $i, 1, 'utf-8'); + $code = mb_ord($char, 'utf-8'); + if ($code < 128) { + $codePoints['all'][] = $codePoints['basic'][] = $code; + } else { + $codePoints['all'][] = $codePoints['nonBasic'][] = $code; + } + } + + return $codePoints; + } + + private static function calculateThreshold($k, $bias) + { + if ($k <= $bias + 1) { + return 1; + } + if ($k >= $bias + 26) { + return 26; + } + + return $k - $bias; + } + + private static function adapt($delta, $numPoints, $firstTime) + { + $delta = (int) ($firstTime ? $delta / 700 : $delta / 2); + $delta += (int) ($delta / $numPoints); + + $k = 0; + while ($delta > 35 * 13) { + $delta = (int) ($delta / 35); + $k = $k + 36; + } + + return $k + (int) (36 * $delta / ($delta + 38)); + } + + private static function decodePart($input) + { + $n = 128; + $i = 0; + $bias = 72; + $output = ''; + + $pos = strrpos($input, '-'); + if (false !== $pos) { + $output = substr($input, 0, $pos++); + } else { + $pos = 0; + } + + $outputLength = \strlen($output); + $inputLength = \strlen($input); + + while ($pos < $inputLength) { + $oldi = $i; + $w = 1; + + for ($k = 36;; $k += 36) { + $digit = self::$decodeTable[$input[$pos++]]; + $i += $digit * $w; + $t = self::calculateThreshold($k, $bias); + + if ($digit < $t) { + break; + } + + $w *= 36 - $t; + } + + $bias = self::adapt($i - $oldi, ++$outputLength, 0 === $oldi); + $n = $n + (int) ($i / $outputLength); + $i = $i % $outputLength; + $output = mb_substr($output, 0, $i, 'utf-8').mb_chr($n, 'utf-8').mb_substr($output, $i, $outputLength - 1, 'utf-8'); + + ++$i; + } + + return $output; + } +} diff --git a/civicrm/vendor/symfony/polyfill-intl-idn/LICENSE b/civicrm/vendor/symfony/polyfill-intl-idn/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3f853aaf35fe186d4016761eb6e8a403de3e6e0d --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-intl-idn/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 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-intl-idn/README.md b/civicrm/vendor/symfony/polyfill-intl-idn/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2e75f2e520a45d87c6d17fd9b0fbef839b2fd5f8 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-intl-idn/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Intl: Idn +============================ + +This component provides [`idn_to_ascii`](https://php.net/idn-to-ascii) and [`idn_to_utf8`](https://php.net/idn-to-utf8) functions to users who run php versions without the [Intl](https://php.net/intl) extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/civicrm/vendor/symfony/polyfill-intl-idn/bootstrap.php b/civicrm/vendor/symfony/polyfill-intl-idn/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..f02d5de73d228e054e9bce4933e99fb8bd54cf21 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-intl-idn/bootstrap.php @@ -0,0 +1,141 @@ +<?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\Intl\Idn as p; + +if (extension_loaded('intl')) { + return; +} + +if (!defined('U_IDNA_PROHIBITED_ERROR')) { + define('U_IDNA_PROHIBITED_ERROR', 66560); +} +if (!defined('U_IDNA_ERROR_START')) { + define('U_IDNA_ERROR_START', 66560); +} +if (!defined('U_IDNA_UNASSIGNED_ERROR')) { + define('U_IDNA_UNASSIGNED_ERROR', 66561); +} +if (!defined('U_IDNA_CHECK_BIDI_ERROR')) { + define('U_IDNA_CHECK_BIDI_ERROR', 66562); +} +if (!defined('U_IDNA_STD3_ASCII_RULES_ERROR')) { + define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563); +} +if (!defined('U_IDNA_ACE_PREFIX_ERROR')) { + define('U_IDNA_ACE_PREFIX_ERROR', 66564); +} +if (!defined('U_IDNA_VERIFICATION_ERROR')) { + define('U_IDNA_VERIFICATION_ERROR', 66565); +} +if (!defined('U_IDNA_LABEL_TOO_LONG_ERROR')) { + define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566); +} +if (!defined('U_IDNA_ZERO_LENGTH_LABEL_ERROR')) { + define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567); +} +if (!defined('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR')) { + define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568); +} +if (!defined('U_IDNA_ERROR_LIMIT')) { + define('U_IDNA_ERROR_LIMIT', 66569); +} +if (!defined('U_STRINGPREP_PROHIBITED_ERROR')) { + define('U_STRINGPREP_PROHIBITED_ERROR', 66560); +} +if (!defined('U_STRINGPREP_UNASSIGNED_ERROR')) { + define('U_STRINGPREP_UNASSIGNED_ERROR', 66561); +} +if (!defined('U_STRINGPREP_CHECK_BIDI_ERROR')) { + define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562); +} +if (!defined('IDNA_DEFAULT')) { + define('IDNA_DEFAULT', 0); +} +if (!defined('IDNA_ALLOW_UNASSIGNED')) { + define('IDNA_ALLOW_UNASSIGNED', 1); +} +if (!defined('IDNA_USE_STD3_RULES')) { + define('IDNA_USE_STD3_RULES', 2); +} +if (!defined('IDNA_CHECK_BIDI')) { + define('IDNA_CHECK_BIDI', 4); +} +if (!defined('IDNA_CHECK_CONTEXTJ')) { + define('IDNA_CHECK_CONTEXTJ', 8); +} +if (!defined('IDNA_NONTRANSITIONAL_TO_ASCII')) { + define('IDNA_NONTRANSITIONAL_TO_ASCII', 16); +} +if (!defined('IDNA_NONTRANSITIONAL_TO_UNICODE')) { + define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32); +} +if (!defined('INTL_IDNA_VARIANT_2003')) { + define('INTL_IDNA_VARIANT_2003', 0); +} +if (!defined('INTL_IDNA_VARIANT_UTS46')) { + define('INTL_IDNA_VARIANT_UTS46', 1); +} +if (!defined('IDNA_ERROR_EMPTY_LABEL')) { + define('IDNA_ERROR_EMPTY_LABEL', 1); +} +if (!defined('IDNA_ERROR_LABEL_TOO_LONG')) { + define('IDNA_ERROR_LABEL_TOO_LONG', 2); +} +if (!defined('IDNA_ERROR_DOMAIN_NAME_TOO_LONG')) { + define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4); +} +if (!defined('IDNA_ERROR_LEADING_HYPHEN')) { + define('IDNA_ERROR_LEADING_HYPHEN', 8); +} +if (!defined('IDNA_ERROR_TRAILING_HYPHEN')) { + define('IDNA_ERROR_TRAILING_HYPHEN', 16); +} +if (!defined('IDNA_ERROR_HYPHEN_3_4')) { + define('IDNA_ERROR_HYPHEN_3_4', 32); +} +if (!defined('IDNA_ERROR_LEADING_COMBINING_MARK')) { + define('IDNA_ERROR_LEADING_COMBINING_MARK', 64); +} +if (!defined('IDNA_ERROR_DISALLOWED')) { + define('IDNA_ERROR_DISALLOWED', 128); +} +if (!defined('IDNA_ERROR_PUNYCODE')) { + define('IDNA_ERROR_PUNYCODE', 256); +} +if (!defined('IDNA_ERROR_LABEL_HAS_DOT')) { + define('IDNA_ERROR_LABEL_HAS_DOT', 512); +} +if (!defined('IDNA_ERROR_INVALID_ACE_LABEL')) { + define('IDNA_ERROR_INVALID_ACE_LABEL', 1024); +} +if (!defined('IDNA_ERROR_BIDI')) { + define('IDNA_ERROR_BIDI', 2048); +} +if (!defined('IDNA_ERROR_CONTEXTJ')) { + define('IDNA_ERROR_CONTEXTJ', 4096); +} + +if (PHP_VERSION_ID < 70400) { + if (!function_exists('idn_to_ascii')) { + function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } + } + if (!function_exists('idn_to_utf8')) { + function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } + } +} else { + if (!function_exists('idn_to_ascii')) { + function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } + } + if (!function_exists('idn_to_utf8')) { + function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } + } +} diff --git a/civicrm/vendor/symfony/polyfill-intl-idn/composer.json b/civicrm/vendor/symfony/polyfill-intl-idn/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..550bdc2a861d686bd8ab5d4b59a6e6f2fce6cf2c --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-intl-idn/composer.json @@ -0,0 +1,36 @@ +{ + "name": "symfony/polyfill-intl-idn", + "type": "library", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "idn"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-intl": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + } +} diff --git a/civicrm/vendor/symfony/polyfill-mbstring/LICENSE b/civicrm/vendor/symfony/polyfill-mbstring/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4cd8bdd3007da4d62985ec9e5ca81a1e18ae34d1 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 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-mbstring/Mbstring.php b/civicrm/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 0000000000000000000000000000000000000000..15503bc9dd3a0ca943356e84cffcd69069ec4566 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,847 @@ +<?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\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_str_split - Convert a string to an array + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas <p@tchwork.com> + * + * @internal + */ +final class Mbstring +{ + const MB_CASE_FOLD = PHP_INT_MAX; + + private static $encodingList = array('ASCII', 'UTF-8'); + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + private static $caseFold = array( + array('µ', 'Å¿', "\xCD\x85", 'Ï‚', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"), + array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'Ï€', 'κ', 'Ï', 'ε', "\xE1\xB9\xA1", 'ι'), + ); + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) + { + $vars = array(&$a, &$b, &$c, &$d, &$e, &$f); + + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return Mbstring::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !\is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s); + } else { + if (MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) { + self::$internalEncoding = $encoding; + + return true; + } + + return false; + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($lang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $lang; + + return true; + } + + return false; + } + + public static function mb_list_encodings() + { + return array('UTF-8'); + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return array('utf8'); + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var); + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING); + + return false; + } + + return iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + if (0 > $offset += self::mb_strlen($needle)) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + } + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_str_split($string, $split_length = 1, $encoding = null) + { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) { + trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING); + + return null; + } + + if (1 > $split_length = (int) $split_length) { + trigger_error('The length of each segment must be greater than zero', E_USER_WARNING); + + return false; + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + if ('UTF-8' === $encoding = self::getEncoding($encoding)) { + $rx = '/('; + while (65535 < $split_length) { + $rx .= '.{65535}'; + $split_length -= 65535; + } + $rx .= '.{'.$split_length.'})/us'; + + return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + } + + $result = array(); + $length = mb_strlen($string, $encoding); + + for ($i = 0; $i < $length; $i += $split_length) { + $result[] = mb_substr($string, $i, $split_length, $encoding); + } + + return $result; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (0 === strcasecmp($c, 'none')) { + return true; + } + + return null !== $c ? false : 'none'; + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return (string) substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrchr($haystack, $needle, $part); + } + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = array( + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ); + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + if ('UTF-8' === $encoding) { + return 'UTF-8'; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } +} diff --git a/civicrm/vendor/symfony/polyfill-mbstring/README.md b/civicrm/vendor/symfony/polyfill-mbstring/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4efb599d81fcc2374cbf42273628660f40c6c683 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/README.md @@ -0,0 +1,13 @@ +Symfony Polyfill / Mbstring +=========================== + +This component provides a partial, native PHP implementation for the +[Mbstring](https://php.net/mbstring) extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa64e6215a3e572d3d99f794cc6a85ea8af8 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1096 @@ +<?php + +return array( + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à ', + 'Ã' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Ã…' => 'Ã¥', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'ÃŒ' => 'ì', + 'Ã' => 'Ã', + 'ÃŽ' => 'î', + 'Ã' => 'ï', + 'Ã' => 'ð', + 'Ñ' => 'ñ', + 'Ã’' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ãœ' => 'ü', + 'Ã' => 'ý', + 'Þ' => 'þ', + 'Ä€' => 'Ä', + 'Ä‚' => 'ă', + 'Ä„' => 'Ä…', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'ÄŠ' => 'Ä‹', + 'ÄŒ' => 'Ä', + 'ÄŽ' => 'Ä', + 'Ä' => 'Ä‘', + 'Ä’' => 'Ä“', + 'Ä”' => 'Ä•', + 'Ä–' => 'Ä—', + 'Ę' => 'Ä™', + 'Äš' => 'Ä›', + 'Äœ' => 'Ä', + 'Äž' => 'ÄŸ', + 'Ä ' => 'Ä¡', + 'Ä¢' => 'Ä£', + 'Ĥ' => 'Ä¥', + 'Ħ' => 'ħ', + 'Ĩ' => 'Ä©', + 'Ī' => 'Ä«', + 'Ĭ' => 'Ä', + 'Ä®' => 'į', + 'Ä°' => 'i', + 'IJ' => 'ij', + 'Ä´' => 'ĵ', + 'Ķ' => 'Ä·', + 'Ĺ' => 'ĺ', + 'Ä»' => 'ļ', + 'Ľ' => 'ľ', + 'Ä¿' => 'Å€', + 'Å' => 'Å‚', + 'Ń' => 'Å„', + 'Å…' => 'ņ', + 'Ň' => 'ň', + 'ÅŠ' => 'Å‹', + 'ÅŒ' => 'Å', + 'ÅŽ' => 'Å', + 'Å' => 'Å‘', + 'Å’' => 'Å“', + 'Å”' => 'Å•', + 'Å–' => 'Å—', + 'Ř' => 'Å™', + 'Åš' => 'Å›', + 'Åœ' => 'Å', + 'Åž' => 'ÅŸ', + 'Å ' => 'Å¡', + 'Å¢' => 'Å£', + 'Ť' => 'Å¥', + 'Ŧ' => 'ŧ', + 'Ũ' => 'Å©', + 'Ū' => 'Å«', + 'Ŭ' => 'Å', + 'Å®' => 'ů', + 'Å°' => 'ű', + 'Ų' => 'ų', + 'Å´' => 'ŵ', + 'Ŷ' => 'Å·', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Å»' => 'ż', + 'Ž' => 'ž', + 'Æ' => 'É“', + 'Æ‚' => 'ƃ', + 'Æ„' => 'Æ…', + 'Ɔ' => 'É”', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'É–', + 'ÆŠ' => 'É—', + 'Æ‹' => 'ÆŒ', + 'ÆŽ' => 'Ç', + 'Æ' => 'É™', + 'Æ' => 'É›', + 'Æ‘' => 'Æ’', + 'Æ“' => 'É ', + 'Æ”' => 'É£', + 'Æ–' => 'É©', + 'Æ—' => 'ɨ', + 'Ƙ' => 'Æ™', + 'Æœ' => 'ɯ', + 'Æ' => 'ɲ', + 'ÆŸ' => 'ɵ', + 'Æ ' => 'Æ¡', + 'Æ¢' => 'Æ£', + 'Ƥ' => 'Æ¥', + 'Ʀ' => 'Ê€', + 'Ƨ' => 'ƨ', + 'Æ©' => 'ʃ', + 'Ƭ' => 'Æ', + 'Æ®' => 'ʈ', + 'Ư' => 'Æ°', + 'Ʊ' => 'ÊŠ', + 'Ʋ' => 'Ê‹', + 'Ƴ' => 'Æ´', + 'Ƶ' => 'ƶ', + 'Æ·' => 'Ê’', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'Ç„' => 'dž', + 'Ç…' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'ÇŠ' => 'ÇŒ', + 'Ç‹' => 'ÇŒ', + 'Ç' => 'ÇŽ', + 'Ç' => 'Ç', + 'Ç‘' => 'Ç’', + 'Ç“' => 'Ç”', + 'Ç•' => 'Ç–', + 'Ç—' => 'ǘ', + 'Ç™' => 'Çš', + 'Ç›' => 'Çœ', + 'Çž' => 'ÇŸ', + 'Ç ' => 'Ç¡', + 'Ç¢' => 'Ç£', + 'Ǥ' => 'Ç¥', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'Ç©', + 'Ǫ' => 'Ç«', + 'Ǭ' => 'Ç', + 'Ç®' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ç´' => 'ǵ', + 'Ƕ' => 'Æ•', + 'Ç·' => 'Æ¿', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'Ç»', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'Ç¿', + 'È€' => 'È', + 'È‚' => 'ȃ', + 'È„' => 'È…', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'ÈŠ' => 'È‹', + 'ÈŒ' => 'È', + 'ÈŽ' => 'È', + 'È' => 'È‘', + 'È’' => 'È“', + 'È”' => 'È•', + 'È–' => 'È—', + 'Ș' => 'È™', + 'Èš' => 'È›', + 'Èœ' => 'È', + 'Èž' => 'ÈŸ', + 'È ' => 'Æž', + 'È¢' => 'È£', + 'Ȥ' => 'È¥', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'È©', + 'Ȫ' => 'È«', + 'Ȭ' => 'È', + 'È®' => 'ȯ', + 'È°' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'â±¥', + 'È»' => 'ȼ', + 'Ƚ' => 'Æš', + 'Ⱦ' => 'ⱦ', + 'É' => 'É‚', + 'Ƀ' => 'Æ€', + 'É„' => 'ʉ', + 'É…' => 'ÊŒ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'ÉŠ' => 'É‹', + 'ÉŒ' => 'É', + 'ÉŽ' => 'É', + 'Í°' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'Í·', + 'Í¿' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'Î', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'ÎŒ' => 'ÏŒ', + 'ÎŽ' => 'Ï', + 'Î' => 'ÏŽ', + 'Α' => 'α', + 'Î’' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Îœ' => 'μ', + 'Î' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Î ' => 'Ï€', + 'Ρ' => 'Ï', + 'Σ' => 'σ', + 'Τ' => 'Ï„', + 'Î¥' => 'Ï…', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ÏŠ', + 'Ϋ' => 'Ï‹', + 'Ï' => 'Ï—', + 'Ϙ' => 'Ï™', + 'Ïš' => 'Ï›', + 'Ïœ' => 'Ï', + 'Ïž' => 'ÏŸ', + 'Ï ' => 'Ï¡', + 'Ï¢' => 'Ï£', + 'Ϥ' => 'Ï¥', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'Ï©', + 'Ϫ' => 'Ï«', + 'Ϭ' => 'Ï', + 'Ï®' => 'ϯ', + 'Ï´' => 'θ', + 'Ï·' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'Ï»', + 'Ͻ' => 'Í»', + 'Ͼ' => 'ͼ', + 'Ï¿' => 'ͽ', + 'Ѐ' => 'Ñ', + 'Ð' => 'Ñ‘', + 'Ђ' => 'Ñ’', + 'Ѓ' => 'Ñ“', + 'Є' => 'Ñ”', + 'Ð…' => 'Ñ•', + 'І' => 'Ñ–', + 'Ї' => 'Ñ—', + 'Ј' => 'ј', + 'Љ' => 'Ñ™', + 'Њ' => 'Ñš', + 'Ћ' => 'Ñ›', + 'ÐŒ' => 'Ñœ', + 'Ð' => 'Ñ', + 'ÐŽ' => 'Ñž', + 'Ð' => 'ÑŸ', + 'Ð' => 'а', + 'Б' => 'б', + 'Ð’' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'Ðœ' => 'м', + 'Ð' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Ð ' => 'Ñ€', + 'С' => 'Ñ', + 'Т' => 'Ñ‚', + 'У' => 'у', + 'Ф' => 'Ñ„', + 'Ð¥' => 'Ñ…', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ÑŠ', + 'Ы' => 'Ñ‹', + 'Ь' => 'ÑŒ', + 'Ð' => 'Ñ', + 'Ю' => 'ÑŽ', + 'Я' => 'Ñ', + 'Ñ ' => 'Ñ¡', + 'Ñ¢' => 'Ñ£', + 'Ѥ' => 'Ñ¥', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'Ñ©', + 'Ѫ' => 'Ñ«', + 'Ѭ' => 'Ñ', + 'Ñ®' => 'ѯ', + 'Ñ°' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ñ´' => 'ѵ', + 'Ѷ' => 'Ñ·', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'Ñ»', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'Ñ¿', + 'Ò€' => 'Ò', + 'ÒŠ' => 'Ò‹', + 'ÒŒ' => 'Ò', + 'ÒŽ' => 'Ò', + 'Ò' => 'Ò‘', + 'Ò’' => 'Ò“', + 'Ò”' => 'Ò•', + 'Ò–' => 'Ò—', + 'Ò˜' => 'Ò™', + 'Òš' => 'Ò›', + 'Òœ' => 'Ò', + 'Òž' => 'ÒŸ', + 'Ò ' => 'Ò¡', + 'Ò¢' => 'Ò£', + 'Ò¤' => 'Ò¥', + 'Ò¦' => 'Ò§', + 'Ò¨' => 'Ò©', + 'Òª' => 'Ò«', + 'Ò¬' => 'Ò', + 'Ò®' => 'Ò¯', + 'Ò°' => 'Ò±', + 'Ò²' => 'Ò³', + 'Ò´' => 'Òµ', + 'Ò¶' => 'Ò·', + 'Ò¸' => 'Ò¹', + 'Òº' => 'Ò»', + 'Ò¼' => 'Ò½', + 'Ò¾' => 'Ò¿', + 'Ó€' => 'Ó', + 'Ó' => 'Ó‚', + 'Óƒ' => 'Ó„', + 'Ó…' => 'Ó†', + 'Ó‡' => 'Óˆ', + 'Ó‰' => 'ÓŠ', + 'Ó‹' => 'ÓŒ', + 'Ó' => 'ÓŽ', + 'Ó' => 'Ó‘', + 'Ó’' => 'Ó“', + 'Ó”' => 'Ó•', + 'Ó–' => 'Ó—', + 'Ó˜' => 'Ó™', + 'Óš' => 'Ó›', + 'Óœ' => 'Ó', + 'Óž' => 'ÓŸ', + 'Ó ' => 'Ó¡', + 'Ó¢' => 'Ó£', + 'Ó¤' => 'Ó¥', + 'Ó¦' => 'Ó§', + 'Ó¨' => 'Ó©', + 'Óª' => 'Ó«', + 'Ó¬' => 'Ó', + 'Ó®' => 'Ó¯', + 'Ó°' => 'Ó±', + 'Ó²' => 'Ó³', + 'Ó´' => 'Óµ', + 'Ó¶' => 'Ó·', + 'Ó¸' => 'Ó¹', + 'Óº' => 'Ó»', + 'Ó¼' => 'Ó½', + 'Ó¾' => 'Ó¿', + 'Ô€' => 'Ô', + 'Ô‚' => 'Ôƒ', + 'Ô„' => 'Ô…', + 'Ô†' => 'Ô‡', + 'Ôˆ' => 'Ô‰', + 'ÔŠ' => 'Ô‹', + 'ÔŒ' => 'Ô', + 'ÔŽ' => 'Ô', + 'Ô' => 'Ô‘', + 'Ô’' => 'Ô“', + 'Ô”' => 'Ô•', + 'Ô–' => 'Ô—', + 'Ô˜' => 'Ô™', + 'Ôš' => 'Ô›', + 'Ôœ' => 'Ô', + 'Ôž' => 'ÔŸ', + 'Ô ' => 'Ô¡', + 'Ô¢' => 'Ô£', + 'Ô¤' => 'Ô¥', + 'Ô¦' => 'Ô§', + 'Ô¨' => 'Ô©', + 'Ôª' => 'Ô«', + 'Ô¬' => 'Ô', + 'Ô®' => 'Ô¯', + 'Ô±' => 'Õ¡', + 'Ô²' => 'Õ¢', + 'Ô³' => 'Õ£', + 'Ô´' => 'Õ¤', + 'Ôµ' => 'Õ¥', + 'Ô¶' => 'Õ¦', + 'Ô·' => 'Õ§', + 'Ô¸' => 'Õ¨', + 'Ô¹' => 'Õ©', + 'Ôº' => 'Õª', + 'Ô»' => 'Õ«', + 'Ô¼' => 'Õ¬', + 'Ô½' => 'Õ', + 'Ô¾' => 'Õ®', + 'Ô¿' => 'Õ¯', + 'Õ€' => 'Õ°', + 'Õ' => 'Õ±', + 'Õ‚' => 'Õ²', + 'Õƒ' => 'Õ³', + 'Õ„' => 'Õ´', + 'Õ…' => 'Õµ', + 'Õ†' => 'Õ¶', + 'Õ‡' => 'Õ·', + 'Õˆ' => 'Õ¸', + 'Õ‰' => 'Õ¹', + 'ÕŠ' => 'Õº', + 'Õ‹' => 'Õ»', + 'ÕŒ' => 'Õ¼', + 'Õ' => 'Õ½', + 'ÕŽ' => 'Õ¾', + 'Õ' => 'Õ¿', + 'Õ' => 'Ö€', + 'Õ‘' => 'Ö', + 'Õ’' => 'Ö‚', + 'Õ“' => 'Öƒ', + 'Õ”' => 'Ö„', + 'Õ•' => 'Ö…', + 'Õ–' => 'Ö†', + 'á‚ ' => 'â´€', + 'á‚¡' => 'â´', + 'á‚¢' => 'â´‚', + 'á‚£' => 'â´ƒ', + 'Ⴄ' => 'â´„', + 'á‚¥' => 'â´…', + 'Ⴆ' => 'â´†', + 'Ⴇ' => 'â´‡', + 'Ⴈ' => 'â´ˆ', + 'á‚©' => 'â´‰', + 'Ⴊ' => 'â´Š', + 'á‚«' => 'â´‹', + 'Ⴌ' => 'â´Œ', + 'á‚' => 'â´', + 'á‚®' => 'â´Ž', + 'Ⴏ' => 'â´', + 'á‚°' => 'â´', + 'Ⴑ' => 'â´‘', + 'Ⴒ' => 'â´’', + 'Ⴓ' => 'â´“', + 'á‚´' => 'â´”', + 'Ⴕ' => 'â´•', + 'Ⴖ' => 'â´–', + 'á‚·' => 'â´—', + 'Ⴘ' => 'â´˜', + 'Ⴙ' => 'â´™', + 'Ⴚ' => 'â´š', + 'á‚»' => 'â´›', + 'Ⴜ' => 'â´œ', + 'Ⴝ' => 'â´', + 'Ⴞ' => 'â´ž', + 'á‚¿' => 'â´Ÿ', + 'Ⴠ' => 'â´ ', + 'áƒ' => 'â´¡', + 'Ⴢ' => 'â´¢', + 'Ⴣ' => 'â´£', + 'Ⴤ' => 'â´¤', + 'Ⴥ' => 'â´¥', + 'Ⴧ' => 'â´§', + 'áƒ' => 'â´', + 'Ḁ' => 'á¸', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'á¸', + 'Ḏ' => 'á¸', + 'á¸' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'á¸', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'á¸', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'á¹€' => 'á¹', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'á¹…', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'á¹', + 'Ṏ' => 'á¹', + 'á¹' => 'ṑ', + 'á¹’' => 'ṓ', + 'á¹”' => 'ṕ', + 'á¹–' => 'á¹—', + 'Ṙ' => 'á¹™', + 'Ṛ' => 'á¹›', + 'Ṝ' => 'á¹', + 'Ṟ' => 'ṟ', + 'á¹ ' => 'ṡ', + 'á¹¢' => 'á¹£', + 'Ṥ' => 'á¹¥', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'á¹', + 'á¹®' => 'ṯ', + 'á¹°' => 'á¹±', + 'á¹²' => 'á¹³', + 'á¹´' => 'á¹µ', + 'Ṷ' => 'á¹·', + 'Ṹ' => 'á¹¹', + 'Ṻ' => 'á¹»', + 'á¹¼' => 'á¹½', + 'á¹¾' => 'ṿ', + 'Ẁ' => 'áº', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'áº', + 'Ẏ' => 'áº', + 'áº' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'áº', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'á»', + 'Ể' => 'ể', + 'Ễ' => 'á»…', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'á»', + 'Ỏ' => 'á»', + 'á»' => 'ố', + 'á»’' => 'ồ', + 'á»”' => 'ổ', + 'á»–' => 'á»—', + 'Ộ' => 'á»™', + 'Ớ' => 'á»›', + 'Ờ' => 'á»', + 'Ở' => 'ở', + 'á» ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'á»', + 'á»®' => 'ữ', + 'á»°' => 'á»±', + 'Ỳ' => 'ỳ', + 'á»´' => 'ỵ', + 'Ỷ' => 'á»·', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'á»»', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'á¼€', + 'Ἁ' => 'á¼', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'á¼' => 'á¼…', + 'Ἆ' => 'ἆ', + 'á¼' => 'ἇ', + 'Ἐ' => 'á¼', + 'á¼™' => 'ἑ', + 'Ἒ' => 'á¼’', + 'á¼›' => 'ἓ', + 'Ἔ' => 'á¼”', + 'á¼' => 'ἕ', + 'Ἠ' => 'á¼ ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'á¼¢', + 'Ἣ' => 'á¼£', + 'Ἤ' => 'ἤ', + 'á¼' => 'á¼¥', + 'á¼®' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'á¼°', + 'á¼¹' => 'á¼±', + 'Ἲ' => 'á¼²', + 'á¼»' => 'á¼³', + 'á¼¼' => 'á¼´', + 'á¼½' => 'á¼µ', + 'á¼¾' => 'ἶ', + 'Ἷ' => 'á¼·', + 'Ὀ' => 'á½€', + 'Ὁ' => 'á½', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'á½' => 'á½…', + 'á½™' => 'ὑ', + 'á½›' => 'ὓ', + 'á½' => 'ὕ', + 'Ὗ' => 'á½—', + 'Ὠ' => 'á½ ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'á½¢', + 'Ὣ' => 'á½£', + 'Ὤ' => 'ὤ', + 'á½' => 'á½¥', + 'á½®' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'á¾€', + 'ᾉ' => 'á¾', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'á¾' => 'á¾…', + 'ᾎ' => 'ᾆ', + 'á¾' => 'ᾇ', + 'ᾘ' => 'á¾', + 'á¾™' => 'ᾑ', + 'ᾚ' => 'á¾’', + 'á¾›' => 'ᾓ', + 'ᾜ' => 'á¾”', + 'á¾' => 'ᾕ', + 'ᾞ' => 'á¾–', + 'ᾟ' => 'á¾—', + 'ᾨ' => 'á¾ ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'á¾¢', + 'ᾫ' => 'á¾£', + 'ᾬ' => 'ᾤ', + 'á¾' => 'á¾¥', + 'á¾®' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'á¾°', + 'á¾¹' => 'á¾±', + 'Ὰ' => 'á½°', + 'á¾»' => 'á½±', + 'á¾¼' => 'á¾³', + 'Ὲ' => 'á½²', + 'Έ' => 'á½³', + 'á¿Š' => 'á½´', + 'á¿‹' => 'á½µ', + 'á¿Œ' => 'ῃ', + 'Ῐ' => 'á¿', + 'á¿™' => 'á¿‘', + 'á¿š' => 'ὶ', + 'á¿›' => 'á½·', + 'Ῠ' => 'á¿ ', + 'á¿©' => 'á¿¡', + 'Ὺ' => 'ὺ', + 'á¿«' => 'á½»', + 'Ῥ' => 'á¿¥', + 'Ὸ' => 'ὸ', + 'Ό' => 'á½¹', + 'Ὼ' => 'á½¼', + 'á¿»' => 'á½½', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'â„«' => 'Ã¥', + 'Ⅎ' => 'â…Ž', + 'â… ' => 'â…°', + 'â…¡' => 'â…±', + 'â…¢' => 'â…²', + 'â…£' => 'â…³', + 'â…¤' => 'â…´', + 'â…¥' => 'â…µ', + 'â…¦' => 'â…¶', + 'â…§' => 'â…·', + 'â…¨' => 'â…¸', + 'â…©' => 'â…¹', + 'â…ª' => 'â…º', + 'â…«' => 'â…»', + 'â…¬' => 'â…¼', + 'â…' => 'â…½', + 'â…®' => 'â…¾', + 'â…¯' => 'â…¿', + 'Ↄ' => 'ↄ', + 'â’¶' => 'â“', + 'â’·' => 'â“‘', + 'â’¸' => 'â“’', + 'â’¹' => 'â““', + 'â’º' => 'â“”', + 'â’»' => 'â“•', + 'â’¼' => 'â“–', + 'â’½' => 'â“—', + 'â’¾' => 'ⓘ', + 'â’¿' => 'â“™', + 'â“€' => 'â“š', + 'â“' => 'â“›', + 'â“‚' => 'â“œ', + 'Ⓝ' => 'â“', + 'â“„' => 'â“ž', + 'â“…' => 'â“Ÿ', + 'Ⓠ' => 'â“ ', + 'Ⓡ' => 'â“¡', + 'Ⓢ' => 'â“¢', + 'Ⓣ' => 'â“£', + 'â“Š' => 'ⓤ', + 'â“‹' => 'â“¥', + 'â“Œ' => 'ⓦ', + 'â“' => 'ⓧ', + 'â“Ž' => 'ⓨ', + 'â“' => 'â“©', + 'â°€' => 'â°°', + 'â°' => 'â°±', + 'â°‚' => 'â°²', + 'â°ƒ' => 'â°³', + 'â°„' => 'â°´', + 'â°…' => 'â°µ', + 'â°†' => 'â°¶', + 'â°‡' => 'â°·', + 'â°ˆ' => 'â°¸', + 'â°‰' => 'â°¹', + 'â°Š' => 'â°º', + 'â°‹' => 'â°»', + 'â°Œ' => 'â°¼', + 'â°' => 'â°½', + 'â°Ž' => 'â°¾', + 'â°' => 'â°¿', + 'â°' => 'â±€', + 'â°‘' => 'â±', + 'â°’' => 'ⱂ', + 'â°“' => 'ⱃ', + 'â°”' => 'ⱄ', + 'â°•' => 'â±…', + 'â°–' => 'ⱆ', + 'â°—' => 'ⱇ', + 'â°˜' => 'ⱈ', + 'â°™' => 'ⱉ', + 'â°š' => 'ⱊ', + 'â°›' => 'ⱋ', + 'â°œ' => 'ⱌ', + 'â°' => 'â±', + 'â°ž' => 'ⱎ', + 'â°Ÿ' => 'â±', + 'â° ' => 'â±', + 'â°¡' => 'ⱑ', + 'â°¢' => 'â±’', + 'â°£' => 'ⱓ', + 'â°¤' => 'â±”', + 'â°¥' => 'ⱕ', + 'â°¦' => 'â±–', + 'â°§' => 'â±—', + 'â°¨' => 'ⱘ', + 'â°©' => 'â±™', + 'â°ª' => 'ⱚ', + 'â°«' => 'â±›', + 'â°¬' => 'ⱜ', + 'â°' => 'â±', + 'â°®' => 'ⱞ', + 'â± ' => 'ⱡ', + 'â±¢' => 'É«', + 'â±£' => 'áµ½', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'â±' => 'É‘', + 'â±®' => 'ɱ', + 'Ɐ' => 'É', + 'â±°' => 'É’', + 'â±²' => 'â±³', + 'â±µ' => 'ⱶ', + 'â±¾' => 'È¿', + 'Ɀ' => 'É€', + 'â²€' => 'â²', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'â²…', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'â²', + 'Ⲏ' => 'â²', + 'â²' => 'ⲑ', + 'â²’' => 'ⲓ', + 'â²”' => 'ⲕ', + 'â²–' => 'â²—', + 'Ⲙ' => 'â²™', + 'Ⲛ' => 'â²›', + 'Ⲝ' => 'â²', + 'Ⲟ' => 'ⲟ', + 'â² ' => 'ⲡ', + 'â²¢' => 'â²£', + 'Ⲥ' => 'â²¥', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'â²', + 'â²®' => 'ⲯ', + 'â²°' => 'â²±', + 'â²²' => 'â²³', + 'â²´' => 'â²µ', + 'Ⲷ' => 'â²·', + 'Ⲹ' => 'â²¹', + 'Ⲻ' => 'â²»', + 'â²¼' => 'â²½', + 'â²¾' => 'ⲿ', + 'â³€' => 'â³', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'â³…', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'â³', + 'Ⳏ' => 'â³', + 'â³' => 'ⳑ', + 'â³’' => 'ⳓ', + 'â³”' => 'ⳕ', + 'â³–' => 'â³—', + 'Ⳙ' => 'â³™', + 'Ⳛ' => 'â³›', + 'Ⳝ' => 'â³', + 'Ⳟ' => 'ⳟ', + 'â³ ' => 'ⳡ', + 'â³¢' => 'â³£', + 'Ⳬ' => 'ⳬ', + 'â³' => 'â³®', + 'â³²' => 'â³³', + 'Ꙁ' => 'ê™', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ê™…', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ê™', + 'Ꙏ' => 'ê™', + 'ê™' => 'ꙑ', + 'ê™’' => 'ꙓ', + 'ê™”' => 'ꙕ', + 'ê™–' => 'ê™—', + 'Ꙙ' => 'ê™™', + 'Ꙛ' => 'ê™›', + 'Ꙝ' => 'ê™', + 'Ꙟ' => 'ꙟ', + 'ê™ ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ê™', + 'Ꚁ' => 'êš', + 'êš‚' => 'ꚃ', + 'êš„' => 'êš…', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'êš‹', + 'Ꚍ' => 'êš', + 'Ꚏ' => 'êš', + 'êš' => 'êš‘', + 'êš’' => 'êš“', + 'êš”' => 'êš•', + 'êš–' => 'êš—', + 'Ꚙ' => 'êš™', + 'êšš' => 'êš›', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'êœ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'ê€' => 'ê', + 'ê‚' => 'êƒ', + 'ê„' => 'ê…', + 'ê†' => 'ê‡', + 'êˆ' => 'ê‰', + 'êŠ' => 'ê‹', + 'êŒ' => 'ê', + 'êŽ' => 'ê', + 'ê' => 'ê‘', + 'ê’' => 'ê“', + 'ê”' => 'ê•', + 'ê–' => 'ê—', + 'ê˜' => 'ê™', + 'êš' => 'ê›', + 'êœ' => 'ê', + 'êž' => 'êŸ', + 'ê ' => 'ê¡', + 'ê¢' => 'ê£', + 'ê¤' => 'ê¥', + 'ê¦' => 'ê§', + 'ê¨' => 'ê©', + 'êª' => 'ê«', + 'ê¬' => 'ê', + 'ê®' => 'ê¯', + 'ê¹' => 'êº', + 'ê»' => 'ê¼', + 'ê½' => 'áµ¹', + 'ê¾' => 'ê¿', + 'Ꞁ' => 'êž', + 'êž‚' => 'ꞃ', + 'êž„' => 'êž…', + 'Ꞇ' => 'ꞇ', + 'êž‹' => 'ꞌ', + 'êž' => 'É¥', + 'êž' => 'êž‘', + 'êž’' => 'êž“', + 'êž–' => 'êž—', + 'Ꞙ' => 'êž™', + 'êžš' => 'êž›', + 'êžœ' => 'êž', + 'êžž' => 'ꞟ', + 'êž ' => 'êž¡', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'êž©', + 'Ɦ' => 'ɦ', + 'êž«' => 'Éœ', + 'Ɡ' => 'É¡', + 'êž' => 'ɬ', + 'êž°' => 'Êž', + 'êž±' => 'ʇ', + 'A' => 'ï½', + 'ï¼¢' => 'b', + 'ï¼£' => 'c', + 'D' => 'd', + 'ï¼¥' => 'ï½…', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'ï¼' => 'ï½', + 'ï¼®' => 'n', + 'O' => 'ï½', + 'ï¼°' => 'ï½', + 'ï¼±' => 'q', + 'ï¼²' => 'ï½’', + 'ï¼³' => 's', + 'ï¼´' => 'ï½”', + 'ï¼µ' => 'u', + 'V' => 'ï½–', + 'ï¼·' => 'ï½—', + 'X' => 'x', + 'ï¼¹' => 'ï½™', + 'Z' => 'z', + 'ð€' => 'ð¨', + 'ð' => 'ð©', + 'ð‚' => 'ðª', + 'ðƒ' => 'ð«', + 'ð„' => 'ð¬', + 'ð…' => 'ð', + 'ð†' => 'ð®', + 'ð‡' => 'ð¯', + 'ðˆ' => 'ð°', + 'ð‰' => 'ð±', + 'ðŠ' => 'ð²', + 'ð‹' => 'ð³', + 'ðŒ' => 'ð´', + 'ð' => 'ðµ', + 'ðŽ' => 'ð¶', + 'ð' => 'ð·', + 'ð' => 'ð¸', + 'ð‘' => 'ð¹', + 'ð’' => 'ðº', + 'ð“' => 'ð»', + 'ð”' => 'ð¼', + 'ð•' => 'ð½', + 'ð–' => 'ð¾', + 'ð—' => 'ð¿', + 'ð˜' => 'ð‘€', + 'ð™' => 'ð‘', + 'ðš' => 'ð‘‚', + 'ð›' => 'ð‘ƒ', + 'ðœ' => 'ð‘„', + 'ð' => 'ð‘…', + 'ðž' => 'ð‘†', + 'ðŸ' => 'ð‘‡', + 'ð ' => 'ð‘ˆ', + 'ð¡' => 'ð‘‰', + 'ð¢' => 'ð‘Š', + 'ð£' => 'ð‘‹', + 'ð¤' => 'ð‘Œ', + 'ð¥' => 'ð‘', + 'ð¦' => 'ð‘Ž', + 'ð§' => 'ð‘', + 'ð‘¢ ' => 'ð‘£€', + '𑢡' => 'ð‘£', + 'ð‘¢¢' => '𑣂', + 'ð‘¢£' => '𑣃', + '𑢤' => '𑣄', + 'ð‘¢¥' => 'ð‘£…', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + 'ð‘¢' => 'ð‘£', + 'ð‘¢®' => '𑣎', + '𑢯' => 'ð‘£', + 'ð‘¢°' => 'ð‘£', + 'ð‘¢±' => '𑣑', + 'ð‘¢²' => 'ð‘£’', + 'ð‘¢³' => '𑣓', + 'ð‘¢´' => 'ð‘£”', + 'ð‘¢µ' => '𑣕', + '𑢶' => 'ð‘£–', + 'ð‘¢·' => 'ð‘£—', + '𑢸' => '𑣘', + 'ð‘¢¹' => 'ð‘£™', + '𑢺' => '𑣚', + 'ð‘¢»' => 'ð‘£›', + 'ð‘¢¼' => '𑣜', + 'ð‘¢½' => 'ð‘£', + 'ð‘¢¾' => '𑣞', + '𑢿' => '𑣟', +); diff --git a/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php new file mode 100644 index 0000000000000000000000000000000000000000..2a8f6e73b99301469991b2bb835324b39d96cd60 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -0,0 +1,5 @@ +<?php + +// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt + +return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u'; diff --git a/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php new file mode 100644 index 0000000000000000000000000000000000000000..b8103b2e808dd0a670c04868f20edcc969ea7e70 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php @@ -0,0 +1,1104 @@ +<?php + +return array( + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Îœ', + 'à ' => 'À', + 'á' => 'Ã', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'Ã¥' => 'Ã…', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'ÃŒ', + 'Ã' => 'Ã', + 'î' => 'ÃŽ', + 'ï' => 'Ã', + 'ð' => 'Ã', + 'ñ' => 'Ñ', + 'ò' => 'Ã’', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ãœ', + 'ý' => 'Ã', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'Ä' => 'Ä€', + 'ă' => 'Ä‚', + 'Ä…' => 'Ä„', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'Ä‹' => 'ÄŠ', + 'Ä' => 'ÄŒ', + 'Ä' => 'ÄŽ', + 'Ä‘' => 'Ä', + 'Ä“' => 'Ä’', + 'Ä•' => 'Ä”', + 'Ä—' => 'Ä–', + 'Ä™' => 'Ę', + 'Ä›' => 'Äš', + 'Ä' => 'Äœ', + 'ÄŸ' => 'Äž', + 'Ä¡' => 'Ä ', + 'Ä£' => 'Ä¢', + 'Ä¥' => 'Ĥ', + 'ħ' => 'Ħ', + 'Ä©' => 'Ĩ', + 'Ä«' => 'Ī', + 'Ä' => 'Ĭ', + 'į' => 'Ä®', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ä´', + 'Ä·' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ä»', + 'ľ' => 'Ľ', + 'Å€' => 'Ä¿', + 'Å‚' => 'Å', + 'Å„' => 'Ń', + 'ņ' => 'Å…', + 'ň' => 'Ň', + 'Å‹' => 'ÅŠ', + 'Å' => 'ÅŒ', + 'Å' => 'ÅŽ', + 'Å‘' => 'Å', + 'Å“' => 'Å’', + 'Å•' => 'Å”', + 'Å—' => 'Å–', + 'Å™' => 'Ř', + 'Å›' => 'Åš', + 'Å' => 'Åœ', + 'ÅŸ' => 'Åž', + 'Å¡' => 'Å ', + 'Å£' => 'Å¢', + 'Å¥' => 'Ť', + 'ŧ' => 'Ŧ', + 'Å©' => 'Ũ', + 'Å«' => 'Ū', + 'Å' => 'Ŭ', + 'ů' => 'Å®', + 'ű' => 'Å°', + 'ų' => 'Ų', + 'ŵ' => 'Å´', + 'Å·' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Å»', + 'ž' => 'Ž', + 'Å¿' => 'S', + 'Æ€' => 'Ƀ', + 'ƃ' => 'Æ‚', + 'Æ…' => 'Æ„', + 'ƈ' => 'Ƈ', + 'ÆŒ' => 'Æ‹', + 'Æ’' => 'Æ‘', + 'Æ•' => 'Ƕ', + 'Æ™' => 'Ƙ', + 'Æš' => 'Ƚ', + 'Æž' => 'È ', + 'Æ¡' => 'Æ ', + 'Æ£' => 'Æ¢', + 'Æ¥' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'Æ' => 'Ƭ', + 'Æ°' => 'Ư', + 'Æ´' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'Æ¿' => 'Ç·', + 'Ç…' => 'Ç„', + 'dž' => 'Ç„', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Ç‹' => 'ÇŠ', + 'ÇŒ' => 'ÇŠ', + 'ÇŽ' => 'Ç', + 'Ç' => 'Ç', + 'Ç’' => 'Ç‘', + 'Ç”' => 'Ç“', + 'Ç–' => 'Ç•', + 'ǘ' => 'Ç—', + 'Çš' => 'Ç™', + 'Çœ' => 'Ç›', + 'Ç' => 'ÆŽ', + 'ÇŸ' => 'Çž', + 'Ç¡' => 'Ç ', + 'Ç£' => 'Ç¢', + 'Ç¥' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'Ç©' => 'Ǩ', + 'Ç«' => 'Ǫ', + 'Ç' => 'Ǭ', + 'ǯ' => 'Ç®', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ç´', + 'ǹ' => 'Ǹ', + 'Ç»' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'Ç¿' => 'Ǿ', + 'È' => 'È€', + 'ȃ' => 'È‚', + 'È…' => 'È„', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'È‹' => 'ÈŠ', + 'È' => 'ÈŒ', + 'È' => 'ÈŽ', + 'È‘' => 'È', + 'È“' => 'È’', + 'È•' => 'È”', + 'È—' => 'È–', + 'È™' => 'Ș', + 'È›' => 'Èš', + 'È' => 'Èœ', + 'ÈŸ' => 'Èž', + 'È£' => 'È¢', + 'È¥' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'È©' => 'Ȩ', + 'È«' => 'Ȫ', + 'È' => 'Ȭ', + 'ȯ' => 'È®', + 'ȱ' => 'È°', + 'ȳ' => 'Ȳ', + 'ȼ' => 'È»', + 'È¿' => 'â±¾', + 'É€' => 'Ɀ', + 'É‚' => 'É', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'É‹' => 'ÉŠ', + 'É' => 'ÉŒ', + 'É' => 'ÉŽ', + 'É' => 'Ɐ', + 'É‘' => 'â±', + 'É’' => 'â±°', + 'É“' => 'Æ', + 'É”' => 'Ɔ', + 'É–' => 'Ɖ', + 'É—' => 'ÆŠ', + 'É™' => 'Æ', + 'É›' => 'Æ', + 'Éœ' => 'êž«', + 'É ' => 'Æ“', + 'É¡' => 'Ɡ', + 'É£' => 'Æ”', + 'É¥' => 'êž', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Æ—', + 'É©' => 'Æ–', + 'É«' => 'â±¢', + 'ɬ' => 'êž', + 'ɯ' => 'Æœ', + 'ɱ' => 'â±®', + 'ɲ' => 'Æ', + 'ɵ' => 'ÆŸ', + 'ɽ' => 'Ɽ', + 'Ê€' => 'Ʀ', + 'ʃ' => 'Æ©', + 'ʇ' => 'êž±', + 'ʈ' => 'Æ®', + 'ʉ' => 'É„', + 'ÊŠ' => 'Ʊ', + 'Ê‹' => 'Ʋ', + 'ÊŒ' => 'É…', + 'Ê’' => 'Æ·', + 'Êž' => 'êž°', + 'Í…' => 'Ι', + 'ͱ' => 'Í°', + 'ͳ' => 'Ͳ', + 'Í·' => 'Ͷ', + 'Í»' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ï¿', + 'ά' => 'Ά', + 'Î' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Î’', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Îœ', + 'ν' => 'Î', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'Ï€' => 'Î ', + 'Ï' => 'Ρ', + 'Ï‚' => 'Σ', + 'σ' => 'Σ', + 'Ï„' => 'Τ', + 'Ï…' => 'Î¥', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ÏŠ' => 'Ϊ', + 'Ï‹' => 'Ϋ', + 'ÏŒ' => 'ÎŒ', + 'Ï' => 'ÎŽ', + 'ÏŽ' => 'Î', + 'Ï' => 'Î’', + 'Ï‘' => 'Θ', + 'Ï•' => 'Φ', + 'Ï–' => 'Î ', + 'Ï—' => 'Ï', + 'Ï™' => 'Ϙ', + 'Ï›' => 'Ïš', + 'Ï' => 'Ïœ', + 'ÏŸ' => 'Ïž', + 'Ï¡' => 'Ï ', + 'Ï£' => 'Ï¢', + 'Ï¥' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'Ï©' => 'Ϩ', + 'Ï«' => 'Ϫ', + 'Ï' => 'Ϭ', + 'ϯ' => 'Ï®', + 'Ï°' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Í¿', + 'ϵ' => 'Ε', + 'ϸ' => 'Ï·', + 'Ï»' => 'Ϻ', + 'а' => 'Ð', + 'б' => 'Б', + 'в' => 'Ð’', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'Ðœ', + 'н' => 'Ð', + 'о' => 'О', + 'п' => 'П', + 'Ñ€' => 'Ð ', + 'Ñ' => 'С', + 'Ñ‚' => 'Т', + 'у' => 'У', + 'Ñ„' => 'Ф', + 'Ñ…' => 'Ð¥', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ÑŠ' => 'Ъ', + 'Ñ‹' => 'Ы', + 'ÑŒ' => 'Ь', + 'Ñ' => 'Ð', + 'ÑŽ' => 'Ю', + 'Ñ' => 'Я', + 'Ñ' => 'Ѐ', + 'Ñ‘' => 'Ð', + 'Ñ’' => 'Ђ', + 'Ñ“' => 'Ѓ', + 'Ñ”' => 'Є', + 'Ñ•' => 'Ð…', + 'Ñ–' => 'І', + 'Ñ—' => 'Ї', + 'ј' => 'Ј', + 'Ñ™' => 'Љ', + 'Ñš' => 'Њ', + 'Ñ›' => 'Ћ', + 'Ñœ' => 'ÐŒ', + 'Ñ' => 'Ð', + 'Ñž' => 'ÐŽ', + 'ÑŸ' => 'Ð', + 'Ñ¡' => 'Ñ ', + 'Ñ£' => 'Ñ¢', + 'Ñ¥' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'Ñ©' => 'Ѩ', + 'Ñ«' => 'Ѫ', + 'Ñ' => 'Ѭ', + 'ѯ' => 'Ñ®', + 'ѱ' => 'Ñ°', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ñ´', + 'Ñ·' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'Ñ»' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'Ñ¿' => 'Ѿ', + 'Ò' => 'Ò€', + 'Ò‹' => 'ÒŠ', + 'Ò' => 'ÒŒ', + 'Ò' => 'ÒŽ', + 'Ò‘' => 'Ò', + 'Ò“' => 'Ò’', + 'Ò•' => 'Ò”', + 'Ò—' => 'Ò–', + 'Ò™' => 'Ò˜', + 'Ò›' => 'Òš', + 'Ò' => 'Òœ', + 'ÒŸ' => 'Òž', + 'Ò¡' => 'Ò ', + 'Ò£' => 'Ò¢', + 'Ò¥' => 'Ò¤', + 'Ò§' => 'Ò¦', + 'Ò©' => 'Ò¨', + 'Ò«' => 'Òª', + 'Ò' => 'Ò¬', + 'Ò¯' => 'Ò®', + 'Ò±' => 'Ò°', + 'Ò³' => 'Ò²', + 'Òµ' => 'Ò´', + 'Ò·' => 'Ò¶', + 'Ò¹' => 'Ò¸', + 'Ò»' => 'Òº', + 'Ò½' => 'Ò¼', + 'Ò¿' => 'Ò¾', + 'Ó‚' => 'Ó', + 'Ó„' => 'Óƒ', + 'Ó†' => 'Ó…', + 'Óˆ' => 'Ó‡', + 'ÓŠ' => 'Ó‰', + 'ÓŒ' => 'Ó‹', + 'ÓŽ' => 'Ó', + 'Ó' => 'Ó€', + 'Ó‘' => 'Ó', + 'Ó“' => 'Ó’', + 'Ó•' => 'Ó”', + 'Ó—' => 'Ó–', + 'Ó™' => 'Ó˜', + 'Ó›' => 'Óš', + 'Ó' => 'Óœ', + 'ÓŸ' => 'Óž', + 'Ó¡' => 'Ó ', + 'Ó£' => 'Ó¢', + 'Ó¥' => 'Ó¤', + 'Ó§' => 'Ó¦', + 'Ó©' => 'Ó¨', + 'Ó«' => 'Óª', + 'Ó' => 'Ó¬', + 'Ó¯' => 'Ó®', + 'Ó±' => 'Ó°', + 'Ó³' => 'Ó²', + 'Óµ' => 'Ó´', + 'Ó·' => 'Ó¶', + 'Ó¹' => 'Ó¸', + 'Ó»' => 'Óº', + 'Ó½' => 'Ó¼', + 'Ó¿' => 'Ó¾', + 'Ô' => 'Ô€', + 'Ôƒ' => 'Ô‚', + 'Ô…' => 'Ô„', + 'Ô‡' => 'Ô†', + 'Ô‰' => 'Ôˆ', + 'Ô‹' => 'ÔŠ', + 'Ô' => 'ÔŒ', + 'Ô' => 'ÔŽ', + 'Ô‘' => 'Ô', + 'Ô“' => 'Ô’', + 'Ô•' => 'Ô”', + 'Ô—' => 'Ô–', + 'Ô™' => 'Ô˜', + 'Ô›' => 'Ôš', + 'Ô' => 'Ôœ', + 'ÔŸ' => 'Ôž', + 'Ô¡' => 'Ô ', + 'Ô£' => 'Ô¢', + 'Ô¥' => 'Ô¤', + 'Ô§' => 'Ô¦', + 'Ô©' => 'Ô¨', + 'Ô«' => 'Ôª', + 'Ô' => 'Ô¬', + 'Ô¯' => 'Ô®', + 'Õ¡' => 'Ô±', + 'Õ¢' => 'Ô²', + 'Õ£' => 'Ô³', + 'Õ¤' => 'Ô´', + 'Õ¥' => 'Ôµ', + 'Õ¦' => 'Ô¶', + 'Õ§' => 'Ô·', + 'Õ¨' => 'Ô¸', + 'Õ©' => 'Ô¹', + 'Õª' => 'Ôº', + 'Õ«' => 'Ô»', + 'Õ¬' => 'Ô¼', + 'Õ' => 'Ô½', + 'Õ®' => 'Ô¾', + 'Õ¯' => 'Ô¿', + 'Õ°' => 'Õ€', + 'Õ±' => 'Õ', + 'Õ²' => 'Õ‚', + 'Õ³' => 'Õƒ', + 'Õ´' => 'Õ„', + 'Õµ' => 'Õ…', + 'Õ¶' => 'Õ†', + 'Õ·' => 'Õ‡', + 'Õ¸' => 'Õˆ', + 'Õ¹' => 'Õ‰', + 'Õº' => 'ÕŠ', + 'Õ»' => 'Õ‹', + 'Õ¼' => 'ÕŒ', + 'Õ½' => 'Õ', + 'Õ¾' => 'ÕŽ', + 'Õ¿' => 'Õ', + 'Ö€' => 'Õ', + 'Ö' => 'Õ‘', + 'Ö‚' => 'Õ’', + 'Öƒ' => 'Õ“', + 'Ö„' => 'Õ”', + 'Ö…' => 'Õ•', + 'Ö†' => 'Õ–', + 'áµ¹' => 'ê½', + 'áµ½' => 'â±£', + 'á¸' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'á¸' => 'Ḍ', + 'á¸' => 'Ḏ', + 'ḑ' => 'á¸', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'á¸' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'á¸' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'á¹' => 'á¹€', + 'ṃ' => 'Ṃ', + 'á¹…' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'á¹' => 'Ṍ', + 'á¹' => 'Ṏ', + 'ṑ' => 'á¹', + 'ṓ' => 'á¹’', + 'ṕ' => 'á¹”', + 'á¹—' => 'á¹–', + 'á¹™' => 'Ṙ', + 'á¹›' => 'Ṛ', + 'á¹' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'á¹ ', + 'á¹£' => 'á¹¢', + 'á¹¥' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'á¹' => 'Ṭ', + 'ṯ' => 'á¹®', + 'á¹±' => 'á¹°', + 'á¹³' => 'á¹²', + 'á¹µ' => 'á¹´', + 'á¹·' => 'Ṷ', + 'á¹¹' => 'Ṹ', + 'á¹»' => 'Ṻ', + 'á¹½' => 'á¹¼', + 'ṿ' => 'á¹¾', + 'áº' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'áº' => 'Ẍ', + 'áº' => 'Ẏ', + 'ẑ' => 'áº', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'á¹ ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'áº' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'á»' => 'Ề', + 'ể' => 'Ể', + 'á»…' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'á»' => 'Ọ', + 'á»' => 'Ỏ', + 'ố' => 'á»', + 'ồ' => 'á»’', + 'ổ' => 'á»”', + 'á»—' => 'á»–', + 'á»™' => 'Ộ', + 'á»›' => 'Ớ', + 'á»' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'á» ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'á»' => 'Ử', + 'ữ' => 'á»®', + 'á»±' => 'á»°', + 'ỳ' => 'Ỳ', + 'ỵ' => 'á»´', + 'á»·' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'á»»' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'á¼€' => 'Ἀ', + 'á¼' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'á¼…' => 'á¼', + 'ἆ' => 'Ἆ', + 'ἇ' => 'á¼', + 'á¼' => 'Ἐ', + 'ἑ' => 'á¼™', + 'á¼’' => 'Ἒ', + 'ἓ' => 'á¼›', + 'á¼”' => 'Ἔ', + 'ἕ' => 'á¼', + 'á¼ ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'á¼¢' => 'Ἢ', + 'á¼£' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'á¼¥' => 'á¼', + 'ἦ' => 'á¼®', + 'ἧ' => 'Ἧ', + 'á¼°' => 'Ἰ', + 'á¼±' => 'á¼¹', + 'á¼²' => 'Ἲ', + 'á¼³' => 'á¼»', + 'á¼´' => 'á¼¼', + 'á¼µ' => 'á¼½', + 'ἶ' => 'á¼¾', + 'á¼·' => 'Ἷ', + 'á½€' => 'Ὀ', + 'á½' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'á½…' => 'á½', + 'ὑ' => 'á½™', + 'ὓ' => 'á½›', + 'ὕ' => 'á½', + 'á½—' => 'Ὗ', + 'á½ ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'á½¢' => 'Ὢ', + 'á½£' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'á½¥' => 'á½', + 'ὦ' => 'á½®', + 'ὧ' => 'Ὧ', + 'á½°' => 'Ὰ', + 'á½±' => 'á¾»', + 'á½²' => 'Ὲ', + 'á½³' => 'Έ', + 'á½´' => 'á¿Š', + 'á½µ' => 'á¿‹', + 'ὶ' => 'á¿š', + 'á½·' => 'á¿›', + 'ὸ' => 'Ὸ', + 'á½¹' => 'Ό', + 'ὺ' => 'Ὺ', + 'á½»' => 'á¿«', + 'á½¼' => 'Ὼ', + 'á½½' => 'á¿»', + 'á¾€' => 'ᾈ', + 'á¾' => 'ᾉ', + 'ᾂ' => 'ᾊ', + 'ᾃ' => 'ᾋ', + 'ᾄ' => 'ᾌ', + 'á¾…' => 'á¾', + 'ᾆ' => 'ᾎ', + 'ᾇ' => 'á¾', + 'á¾' => 'ᾘ', + 'ᾑ' => 'á¾™', + 'á¾’' => 'ᾚ', + 'ᾓ' => 'á¾›', + 'á¾”' => 'ᾜ', + 'ᾕ' => 'á¾', + 'á¾–' => 'ᾞ', + 'á¾—' => 'ᾟ', + 'á¾ ' => 'ᾨ', + 'ᾡ' => 'ᾩ', + 'á¾¢' => 'ᾪ', + 'á¾£' => 'ᾫ', + 'ᾤ' => 'ᾬ', + 'á¾¥' => 'á¾', + 'ᾦ' => 'á¾®', + 'ᾧ' => 'ᾯ', + 'á¾°' => 'Ᾰ', + 'á¾±' => 'á¾¹', + 'á¾³' => 'á¾¼', + 'á¾¾' => 'Ι', + 'ῃ' => 'á¿Œ', + 'á¿' => 'Ῐ', + 'á¿‘' => 'á¿™', + 'á¿ ' => 'Ῠ', + 'á¿¡' => 'á¿©', + 'á¿¥' => 'Ῥ', + 'ῳ' => 'ῼ', + 'â…Ž' => 'Ⅎ', + 'â…°' => 'â… ', + 'â…±' => 'â…¡', + 'â…²' => 'â…¢', + 'â…³' => 'â…£', + 'â…´' => 'â…¤', + 'â…µ' => 'â…¥', + 'â…¶' => 'â…¦', + 'â…·' => 'â…§', + 'â…¸' => 'â…¨', + 'â…¹' => 'â…©', + 'â…º' => 'â…ª', + 'â…»' => 'â…«', + 'â…¼' => 'â…¬', + 'â…½' => 'â…', + 'â…¾' => 'â…®', + 'â…¿' => 'â…¯', + 'ↄ' => 'Ↄ', + 'â“' => 'â’¶', + 'â“‘' => 'â’·', + 'â“’' => 'â’¸', + 'â““' => 'â’¹', + 'â“”' => 'â’º', + 'â“•' => 'â’»', + 'â“–' => 'â’¼', + 'â“—' => 'â’½', + 'ⓘ' => 'â’¾', + 'â“™' => 'â’¿', + 'â“š' => 'â“€', + 'â“›' => 'â“', + 'â“œ' => 'â“‚', + 'â“' => 'Ⓝ', + 'â“ž' => 'â“„', + 'â“Ÿ' => 'â“…', + 'â“ ' => 'Ⓠ', + 'â“¡' => 'Ⓡ', + 'â“¢' => 'Ⓢ', + 'â“£' => 'Ⓣ', + 'ⓤ' => 'â“Š', + 'â“¥' => 'â“‹', + 'ⓦ' => 'â“Œ', + 'ⓧ' => 'â“', + 'ⓨ' => 'â“Ž', + 'â“©' => 'â“', + 'â°°' => 'â°€', + 'â°±' => 'â°', + 'â°²' => 'â°‚', + 'â°³' => 'â°ƒ', + 'â°´' => 'â°„', + 'â°µ' => 'â°…', + 'â°¶' => 'â°†', + 'â°·' => 'â°‡', + 'â°¸' => 'â°ˆ', + 'â°¹' => 'â°‰', + 'â°º' => 'â°Š', + 'â°»' => 'â°‹', + 'â°¼' => 'â°Œ', + 'â°½' => 'â°', + 'â°¾' => 'â°Ž', + 'â°¿' => 'â°', + 'â±€' => 'â°', + 'â±' => 'â°‘', + 'ⱂ' => 'â°’', + 'ⱃ' => 'â°“', + 'ⱄ' => 'â°”', + 'â±…' => 'â°•', + 'ⱆ' => 'â°–', + 'ⱇ' => 'â°—', + 'ⱈ' => 'â°˜', + 'ⱉ' => 'â°™', + 'ⱊ' => 'â°š', + 'ⱋ' => 'â°›', + 'ⱌ' => 'â°œ', + 'â±' => 'â°', + 'ⱎ' => 'â°ž', + 'â±' => 'â°Ÿ', + 'â±' => 'â° ', + 'ⱑ' => 'â°¡', + 'â±’' => 'â°¢', + 'ⱓ' => 'â°£', + 'â±”' => 'â°¤', + 'ⱕ' => 'â°¥', + 'â±–' => 'â°¦', + 'â±—' => 'â°§', + 'ⱘ' => 'â°¨', + 'â±™' => 'â°©', + 'ⱚ' => 'â°ª', + 'â±›' => 'â°«', + 'ⱜ' => 'â°¬', + 'â±' => 'â°', + 'ⱞ' => 'â°®', + 'ⱡ' => 'â± ', + 'â±¥' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'â±³' => 'â±²', + 'ⱶ' => 'â±µ', + 'â²' => 'â²€', + 'ⲃ' => 'Ⲃ', + 'â²…' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'â²' => 'Ⲍ', + 'â²' => 'Ⲏ', + 'ⲑ' => 'â²', + 'ⲓ' => 'â²’', + 'ⲕ' => 'â²”', + 'â²—' => 'â²–', + 'â²™' => 'Ⲙ', + 'â²›' => 'Ⲛ', + 'â²' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'â² ', + 'â²£' => 'â²¢', + 'â²¥' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'â²' => 'Ⲭ', + 'ⲯ' => 'â²®', + 'â²±' => 'â²°', + 'â²³' => 'â²²', + 'â²µ' => 'â²´', + 'â²·' => 'Ⲷ', + 'â²¹' => 'Ⲹ', + 'â²»' => 'Ⲻ', + 'â²½' => 'â²¼', + 'ⲿ' => 'â²¾', + 'â³' => 'â³€', + 'ⳃ' => 'Ⳃ', + 'â³…' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'â³' => 'Ⳍ', + 'â³' => 'Ⳏ', + 'ⳑ' => 'â³', + 'ⳓ' => 'â³’', + 'ⳕ' => 'â³”', + 'â³—' => 'â³–', + 'â³™' => 'Ⳙ', + 'â³›' => 'Ⳛ', + 'â³' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'â³ ', + 'â³£' => 'â³¢', + 'ⳬ' => 'Ⳬ', + 'â³®' => 'â³', + 'â³³' => 'â³²', + 'â´€' => 'á‚ ', + 'â´' => 'á‚¡', + 'â´‚' => 'á‚¢', + 'â´ƒ' => 'á‚£', + 'â´„' => 'Ⴄ', + 'â´…' => 'á‚¥', + 'â´†' => 'Ⴆ', + 'â´‡' => 'Ⴇ', + 'â´ˆ' => 'Ⴈ', + 'â´‰' => 'á‚©', + 'â´Š' => 'Ⴊ', + 'â´‹' => 'á‚«', + 'â´Œ' => 'Ⴌ', + 'â´' => 'á‚', + 'â´Ž' => 'á‚®', + 'â´' => 'Ⴏ', + 'â´' => 'á‚°', + 'â´‘' => 'Ⴑ', + 'â´’' => 'Ⴒ', + 'â´“' => 'Ⴓ', + 'â´”' => 'á‚´', + 'â´•' => 'Ⴕ', + 'â´–' => 'Ⴖ', + 'â´—' => 'á‚·', + 'â´˜' => 'Ⴘ', + 'â´™' => 'Ⴙ', + 'â´š' => 'Ⴚ', + 'â´›' => 'á‚»', + 'â´œ' => 'Ⴜ', + 'â´' => 'Ⴝ', + 'â´ž' => 'Ⴞ', + 'â´Ÿ' => 'á‚¿', + 'â´ ' => 'Ⴠ', + 'â´¡' => 'áƒ', + 'â´¢' => 'Ⴢ', + 'â´£' => 'Ⴣ', + 'â´¤' => 'Ⴤ', + 'â´¥' => 'Ⴥ', + 'â´§' => 'Ⴧ', + 'â´' => 'áƒ', + 'ê™' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ê™…' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ê™' => 'Ꙍ', + 'ê™' => 'Ꙏ', + 'ꙑ' => 'ê™', + 'ꙓ' => 'ê™’', + 'ꙕ' => 'ê™”', + 'ê™—' => 'ê™–', + 'ê™™' => 'Ꙙ', + 'ê™›' => 'Ꙛ', + 'ê™' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'ê™ ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ê™' => 'Ꙭ', + 'êš' => 'Ꚁ', + 'ꚃ' => 'êš‚', + 'êš…' => 'êš„', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'êš‹' => 'Ꚋ', + 'êš' => 'Ꚍ', + 'êš' => 'Ꚏ', + 'êš‘' => 'êš', + 'êš“' => 'êš’', + 'êš•' => 'êš”', + 'êš—' => 'êš–', + 'êš™' => 'Ꚙ', + 'êš›' => 'êšš', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'êœ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ê' => 'ê€', + 'êƒ' => 'ê‚', + 'ê…' => 'ê„', + 'ê‡' => 'ê†', + 'ê‰' => 'êˆ', + 'ê‹' => 'êŠ', + 'ê' => 'êŒ', + 'ê' => 'êŽ', + 'ê‘' => 'ê', + 'ê“' => 'ê’', + 'ê•' => 'ê”', + 'ê—' => 'ê–', + 'ê™' => 'ê˜', + 'ê›' => 'êš', + 'ê' => 'êœ', + 'êŸ' => 'êž', + 'ê¡' => 'ê ', + 'ê£' => 'ê¢', + 'ê¥' => 'ê¤', + 'ê§' => 'ê¦', + 'ê©' => 'ê¨', + 'ê«' => 'êª', + 'ê' => 'ê¬', + 'ê¯' => 'ê®', + 'êº' => 'ê¹', + 'ê¼' => 'ê»', + 'ê¿' => 'ê¾', + 'êž' => 'Ꞁ', + 'ꞃ' => 'êž‚', + 'êž…' => 'êž„', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'êž‹', + 'êž‘' => 'êž', + 'êž“' => 'êž’', + 'êž—' => 'êž–', + 'êž™' => 'Ꞙ', + 'êž›' => 'êžš', + 'êž' => 'êžœ', + 'ꞟ' => 'êžž', + 'êž¡' => 'êž ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'êž©' => 'Ꞩ', + 'ï½' => 'A', + 'b' => 'ï¼¢', + 'c' => 'ï¼£', + 'd' => 'D', + 'ï½…' => 'ï¼¥', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'ï½' => 'ï¼', + 'n' => 'ï¼®', + 'ï½' => 'O', + 'ï½' => 'ï¼°', + 'q' => 'ï¼±', + 'ï½’' => 'ï¼²', + 's' => 'ï¼³', + 'ï½”' => 'ï¼´', + 'u' => 'ï¼µ', + 'ï½–' => 'V', + 'ï½—' => 'ï¼·', + 'x' => 'X', + 'ï½™' => 'ï¼¹', + 'z' => 'Z', + 'ð¨' => 'ð€', + 'ð©' => 'ð', + 'ðª' => 'ð‚', + 'ð«' => 'ðƒ', + 'ð¬' => 'ð„', + 'ð' => 'ð…', + 'ð®' => 'ð†', + 'ð¯' => 'ð‡', + 'ð°' => 'ðˆ', + 'ð±' => 'ð‰', + 'ð²' => 'ðŠ', + 'ð³' => 'ð‹', + 'ð´' => 'ðŒ', + 'ðµ' => 'ð', + 'ð¶' => 'ðŽ', + 'ð·' => 'ð', + 'ð¸' => 'ð', + 'ð¹' => 'ð‘', + 'ðº' => 'ð’', + 'ð»' => 'ð“', + 'ð¼' => 'ð”', + 'ð½' => 'ð•', + 'ð¾' => 'ð–', + 'ð¿' => 'ð—', + 'ð‘€' => 'ð˜', + 'ð‘' => 'ð™', + 'ð‘‚' => 'ðš', + 'ð‘ƒ' => 'ð›', + 'ð‘„' => 'ðœ', + 'ð‘…' => 'ð', + 'ð‘†' => 'ðž', + 'ð‘‡' => 'ðŸ', + 'ð‘ˆ' => 'ð ', + 'ð‘‰' => 'ð¡', + 'ð‘Š' => 'ð¢', + 'ð‘‹' => 'ð£', + 'ð‘Œ' => 'ð¤', + 'ð‘' => 'ð¥', + 'ð‘Ž' => 'ð¦', + 'ð‘' => 'ð§', + 'ð‘£€' => 'ð‘¢ ', + 'ð‘£' => '𑢡', + '𑣂' => 'ð‘¢¢', + '𑣃' => 'ð‘¢£', + '𑣄' => '𑢤', + 'ð‘£…' => 'ð‘¢¥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + 'ð‘£' => 'ð‘¢', + '𑣎' => 'ð‘¢®', + 'ð‘£' => '𑢯', + 'ð‘£' => 'ð‘¢°', + '𑣑' => 'ð‘¢±', + 'ð‘£’' => 'ð‘¢²', + '𑣓' => 'ð‘¢³', + 'ð‘£”' => 'ð‘¢´', + '𑣕' => 'ð‘¢µ', + 'ð‘£–' => '𑢶', + 'ð‘£—' => 'ð‘¢·', + '𑣘' => '𑢸', + 'ð‘£™' => 'ð‘¢¹', + '𑣚' => '𑢺', + 'ð‘£›' => 'ð‘¢»', + '𑣜' => 'ð‘¢¼', + 'ð‘£' => 'ð‘¢½', + '𑣞' => 'ð‘¢¾', + '𑣟' => '𑢿', +); diff --git a/civicrm/vendor/symfony/polyfill-mbstring/bootstrap.php b/civicrm/vendor/symfony/polyfill-mbstring/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..b36a0926f2038e0e51a3646e87f10d4590b53f3a --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -0,0 +1,141 @@ +<?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\Mbstring as p; + +if (!function_exists('mb_convert_encoding')) { + function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); } +} +if (!function_exists('mb_decode_mimeheader')) { + function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); } +} +if (!function_exists('mb_encode_mimeheader')) { + function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); } +} +if (!function_exists('mb_decode_numericentity')) { + function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); } +} +if (!function_exists('mb_encode_numericentity')) { + function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); } +} +if (!function_exists('mb_convert_case')) { + function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); } +} +if (!function_exists('mb_internal_encoding')) { + function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); } +} +if (!function_exists('mb_language')) { + function mb_language($lang = null) { return p\Mbstring::mb_language($lang); } +} +if (!function_exists('mb_list_encodings')) { + function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } +} +if (!function_exists('mb_encoding_aliases')) { + function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } +} +if (!function_exists('mb_check_encoding')) { + function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); } +} +if (!function_exists('mb_detect_encoding')) { + function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); } +} +if (!function_exists('mb_detect_order')) { + function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); } +} +if (!function_exists('mb_parse_str')) { + function mb_parse_str($s, &$result = array()) { parse_str($s, $result); } +} +if (!function_exists('mb_strlen')) { + function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); } +} +if (!function_exists('mb_strpos')) { + function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); } +} +if (!function_exists('mb_strtolower')) { + function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); } +} +if (!function_exists('mb_strtoupper')) { + function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); } +} +if (!function_exists('mb_substitute_character')) { + function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); } +} +if (!function_exists('mb_substr')) { + function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); } +} +if (!function_exists('mb_stripos')) { + function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); } +} +if (!function_exists('mb_stristr')) { + function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); } +} +if (!function_exists('mb_strrchr')) { + function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); } +} +if (!function_exists('mb_strrichr')) { + function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); } +} +if (!function_exists('mb_strripos')) { + function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); } +} +if (!function_exists('mb_strrpos')) { + function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); } +} +if (!function_exists('mb_strstr')) { + function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); } +} +if (!function_exists('mb_get_info')) { + function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } +} +if (!function_exists('mb_http_output')) { + function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); } +} +if (!function_exists('mb_strwidth')) { + function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); } +} +if (!function_exists('mb_substr_count')) { + function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); } +} +if (!function_exists('mb_output_handler')) { + function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); } +} +if (!function_exists('mb_http_input')) { + function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); } +} +if (!function_exists('mb_convert_variables')) { + function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); } +} +if (!function_exists('mb_ord')) { + function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); } +} +if (!function_exists('mb_chr')) { + function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } +} +if (!function_exists('mb_str_split')) { + function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); } +} + +if (extension_loaded('mbstring')) { + return; +} + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); +} +if (!defined('MB_CASE_LOWER')) { + define('MB_CASE_LOWER', 1); +} +if (!defined('MB_CASE_TITLE')) { + define('MB_CASE_TITLE', 2); +} diff --git a/civicrm/vendor/symfony/polyfill-mbstring/composer.json b/civicrm/vendor/symfony/polyfill-mbstring/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..d3dcc244c3386d9f062fdb0a81dbbdc1d85887b2 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-mbstring/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-mbstring", + "type": "library", + "description": "Symfony polyfill for the Mbstring extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + } +} diff --git a/civicrm/vendor/symfony/polyfill-php72/LICENSE b/civicrm/vendor/symfony/polyfill-php72/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4cd8bdd3007da4d62985ec9e5ca81a1e18ae34d1 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php72/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 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-php72/Php72.php b/civicrm/vendor/symfony/polyfill-php72/Php72.php new file mode 100644 index 0000000000000000000000000000000000000000..9b3edc7c7922fcf48e0e0cdafde43c1ebf5fd790 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php72/Php72.php @@ -0,0 +1,217 @@ +<?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\Php72; + +/** + * @author Nicolas Grekas <p@tchwork.com> + * @author Dariusz RumiÅ„ski <dariusz.ruminski@gmail.com> + * + * @internal + */ +final class Php72 +{ + private static $hashMask; + + public static function utf8_encode($s) + { + $s .= $s; + $len = \strlen($s); + + for ($i = $len >> 1, $j = 0; $i < $len; ++$i, ++$j) { + switch (true) { + case $s[$i] < "\x80": $s[$j] = $s[$i]; break; + case $s[$i] < "\xC0": $s[$j] = "\xC2"; $s[++$j] = $s[$i]; break; + default: $s[$j] = "\xC3"; $s[++$j] = \chr(\ord($s[$i]) - 64); break; + } + } + + return substr($s, 0, $j); + } + + public static function utf8_decode($s) + { + $s = (string) $s; + $len = \strlen($s); + + for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) { + switch ($s[$i] & "\xF0") { + case "\xC0": + case "\xD0": + $c = (\ord($s[$i] & "\x1F") << 6) | \ord($s[++$i] & "\x3F"); + $s[$j] = $c < 256 ? \chr($c) : '?'; + break; + + case "\xF0": + ++$i; + // no break + + case "\xE0": + $s[$j] = '?'; + $i += 2; + break; + + default: + $s[$j] = $s[$i]; + } + } + + return substr($s, 0, $j); + } + + public static function php_os_family() + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return 'Windows'; + } + + $map = array( + 'Darwin' => 'Darwin', + 'DragonFly' => 'BSD', + 'FreeBSD' => 'BSD', + 'NetBSD' => 'BSD', + 'OpenBSD' => 'BSD', + 'Linux' => 'Linux', + 'SunOS' => 'Solaris', + ); + + return isset($map[PHP_OS]) ? $map[PHP_OS] : 'Unknown'; + } + + public static function spl_object_id($object) + { + if (null === self::$hashMask) { + self::initHashMask(); + } + if (null === $hash = spl_object_hash($object)) { + return; + } + + // On 32-bit systems, PHP_INT_SIZE is 4, + return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + } + + public static function sapi_windows_vt100_support($stream, $enable = null) + { + if (!\is_resource($stream)) { + trigger_error('sapi_windows_vt100_support() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); + + return false; + } + + $meta = stream_get_meta_data($stream); + + if ('STDIO' !== $meta['stream_type']) { + trigger_error('sapi_windows_vt100_support() was not able to analyze the specified stream', E_USER_WARNING); + + return false; + } + + // We cannot actually disable vt100 support if it is set + if (false === $enable || !self::stream_isatty($stream)) { + return false; + } + + // The native function does not apply to stdin + $meta = array_map('strtolower', $meta); + $stdin = 'php://stdin' === $meta['uri'] || 'php://fd/0' === $meta['uri']; + + return !$stdin + && (false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM') + || 'Hyper' === getenv('TERM_PROGRAM')); + } + + public static function stream_isatty($stream) + { + if (!\is_resource($stream)) { + trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); + + return false; + } + + if ('\\' === \DIRECTORY_SEPARATOR) { + $stat = @fstat($stream); + // Check if formatted mode is S_IFCHR + return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + } + + return \function_exists('posix_isatty') && @posix_isatty($stream); + } + + private static function initHashMask() + { + $obj = (object) array(); + self::$hashMask = -1; + + // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below + $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'); + foreach (debug_backtrace(\PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) { + if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { + $frame['line'] = 0; + break; + } + } + if (!empty($frame['line'])) { + ob_start(); + debug_zval_dump($obj); + self::$hashMask = (int) substr(ob_get_clean(), 17); + } + + self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if (null == $encoding) { + $s = mb_convert_encoding($s, 'UTF-8'); + } elseif ('UTF-8' !== $encoding) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } +} diff --git a/civicrm/vendor/symfony/polyfill-php72/README.md b/civicrm/vendor/symfony/polyfill-php72/README.md new file mode 100644 index 0000000000000000000000000000000000000000..59dec8a237f5d96cbcb969651e50a099e7ac38cd --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php72/README.md @@ -0,0 +1,28 @@ +Symfony Polyfill / Php72 +======================== + +This component provides functions added to PHP 7.2 core: + +- [`spl_object_id`](https://php.net/spl_object_id) +- [`stream_isatty`](https://php.net/stream_isatty) + +On Windows only: + +- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) + +Moved to core since 7.2 (was in the optional XML extension earlier): + +- [`utf8_encode`](https://php.net/utf8_encode) +- [`utf8_decode`](https://php.net/utf8_decode) + +Also, it provides constants added to PHP 7.2: +- [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig) +- [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/civicrm/vendor/symfony/polyfill-php72/bootstrap.php b/civicrm/vendor/symfony/polyfill-php72/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..a27a900a4fdeab10d89da20d777d637dd0dd4ce9 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php72/bootstrap.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. + */ + +use Symfony\Polyfill\Php72 as p; + +if (PHP_VERSION_ID >= 70200) { + return; +} + +if (!defined('PHP_FLOAT_DIG')) { + define('PHP_FLOAT_DIG', 15); +} +if (!defined('PHP_FLOAT_EPSILON')) { + define('PHP_FLOAT_EPSILON', 2.2204460492503E-16); +} +if (!defined('PHP_FLOAT_MIN')) { + define('PHP_FLOAT_MIN', 2.2250738585072E-308); +} +if (!defined('PHP_FLOAT_MAX')) { + define('PHP_FLOAT_MAX', 1.7976931348623157E+308); +} +if (!defined('PHP_OS_FAMILY')) { + define('PHP_OS_FAMILY', p\Php72::php_os_family()); +} + +if ('\\' === DIRECTORY_SEPARATOR && !function_exists('sapi_windows_vt100_support')) { + function sapi_windows_vt100_support($stream, $enable = null) { return p\Php72::sapi_windows_vt100_support($stream, $enable); } +} +if (!function_exists('stream_isatty')) { + function stream_isatty($stream) { return p\Php72::stream_isatty($stream); } +} +if (!function_exists('utf8_encode')) { + function utf8_encode($s) { return p\Php72::utf8_encode($s); } +} +if (!function_exists('utf8_decode')) { + function utf8_decode($s) { return p\Php72::utf8_decode($s); } +} +if (!function_exists('spl_object_id')) { + function spl_object_id($s) { return p\Php72::spl_object_id($s); } +} +if (!function_exists('mb_ord')) { + function mb_ord($s, $enc = null) { return p\Php72::mb_ord($s, $enc); } +} +if (!function_exists('mb_chr')) { + function mb_chr($code, $enc = null) { return p\Php72::mb_chr($code, $enc); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } +} diff --git a/civicrm/vendor/symfony/polyfill-php72/composer.json b/civicrm/vendor/symfony/polyfill-php72/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..314d7136244acdd351069938005bf5204de2ca04 --- /dev/null +++ b/civicrm/vendor/symfony/polyfill-php72/composer.json @@ -0,0 +1,31 @@ +{ + "name": "symfony/polyfill-php72", + "type": "library", + "description": "Symfony polyfill backporting some PHP 7.2+ 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": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, + "files": [ "bootstrap.php" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + } +} diff --git a/civicrm/vendor/tecnickcom/tcpdf/.github/FUNDING.yml b/civicrm/vendor/tecnickcom/tcpdf/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..ca5b4292e034acb966867bf096c8d104082a8a18 --- /dev/null +++ b/civicrm/vendor/tecnickcom/tcpdf/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ['https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tcpdf%20project'] diff --git a/civicrm/vendor/tecnickcom/tcpdf/.gitignore b/civicrm/vendor/tecnickcom/tcpdf/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..723ef36f4e4f32c4560383aa5987c575a30c6535 --- /dev/null +++ b/civicrm/vendor/tecnickcom/tcpdf/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/civicrm/vendor/tecnickcom/tcpdf/LICENSE.TXT b/civicrm/vendor/tecnickcom/tcpdf/LICENSE.TXT index daf21f7d3eb8748eed5ff70c23ed24729175bce5..49147d01a7123f51040afb7483420e9fa8c8d5e4 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/LICENSE.TXT +++ b/civicrm/vendor/tecnickcom/tcpdf/LICENSE.TXT @@ -6,6 +6,8 @@ under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + 2002-2019 Nicola Asuni - Tecnick.com LTD ********************************************************************** ********************************************************************** diff --git a/civicrm/vendor/tecnickcom/tcpdf/README.md b/civicrm/vendor/tecnickcom/tcpdf/README.md index baa518137cb47b37aab9c44cdcba1d2842eee3ec..db0149f69cbce367b1afa7cfa0b9858d8bac474e 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/README.md +++ b/civicrm/vendor/tecnickcom/tcpdf/README.md @@ -6,7 +6,7 @@ * **category** Library * **author** Nicola Asuni <info@tecnick.com> -* **copyright** 2002-2018 Nicola Asuni - Tecnick.com LTD +* **copyright** 2002-2020 Nicola Asuni - Tecnick.com LTD * **license** http://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE.TXT) * **link** http://www.tcpdf.org * **source** https://github.com/tecnickcom/TCPDF diff --git a/civicrm/vendor/tecnickcom/tcpdf/VERSION b/civicrm/vendor/tecnickcom/tcpdf/VERSION new file mode 100644 index 0000000000000000000000000000000000000000..b98d1d3fa746f67079f0a6fc24649c7aff21ddea --- /dev/null +++ b/civicrm/vendor/tecnickcom/tcpdf/VERSION @@ -0,0 +1 @@ +6.3.5 diff --git a/civicrm/vendor/tecnickcom/tcpdf/composer.json b/civicrm/vendor/tecnickcom/tcpdf/composer.json index 1f19dfd86412e341a3ed189c6c44462b6bfab3b8..9f1cc67194b3c10d03199e2da1eaca7edc3fd76a 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/composer.json +++ b/civicrm/vendor/tecnickcom/tcpdf/composer.json @@ -1,6 +1,6 @@ { "name": "tecnickcom/tcpdf", - "version": "6.2.26", + "version": "6.3.5", "homepage": "http://www.tcpdf.org/", "type": "library", "description": "TCPDF is a PHP class for generating PDF documents and barcodes.", @@ -13,7 +13,7 @@ "pdf417", "barcodes" ], - "license": "LGPL-3.0", + "license": "LGPL-3.0-only", "authors": [ { "name": "Nicola Asuni", diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/datamatrix.php b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/datamatrix.php index 19b46fadaf1ec2c003b1788888b95fbb0e2fe581..783f99da4cd54b0f416000db04ee8bf449bb5fbb 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/datamatrix.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/datamatrix.php @@ -629,7 +629,7 @@ class Datamatrix { if ($numch[ENC_C40] == $numch[ENC_X12]) { $k = ($pos + $charscount + 1); while ($k < $data_length) { - $tmpchr = ord($data{$k}); + $tmpchr = ord($data[$k]); if ($this->isCharMode($tmpchr, ENC_X12)) { return ENC_X12; } elseif (!($this->isCharMode($tmpchr, ENC_X12) OR $this->isCharMode($tmpchr, ENC_C40))) { diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php index 3b1774eaae46dbbac869ae16e2d944b9be33eb24..9a58a21f67375a72451ac73dae524534b3218610 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php @@ -878,7 +878,7 @@ class PDF417 { $txtarr = array(); // array of characters and sub-mode switching characters $codelen = strlen($code); for ($i = 0; $i < $codelen; ++$i) { - $chval = ord($code{$i}); + $chval = ord($code[$i]); if (($k = array_search($chval, $this->textsubmodes[$submode])) !== false) { // we are on the same sub-mode $txtarr[] = $k; @@ -888,7 +888,7 @@ class PDF417 { // search new sub-mode if (($s != $submode) AND (($k = array_search($chval, $this->textsubmodes[$s])) !== false)) { // $s is the new submode - if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code{($i + 1)}), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) { + if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code[($i + 1)]), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) { // shift (temporary change only for this char) if ($s == 3) { // shift to puntuaction @@ -952,7 +952,7 @@ class PDF417 { $cw = array_merge($cw, $cw6); } else { for ($i = 0; $i < $sublen; ++$i) { - $cw[] = ord($code{$i}); + $cw[] = ord($code[$i]); } } $code = $rest; diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php index 77f1c4cc841a7186f2e37d09cf6346cbee8a2410..27fb7afd1929484666ce2771f4698612afba8489 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_colors.php @@ -358,7 +358,7 @@ class TCPDF_COLORS { $color_code = self::$webcolor[$color]; } else { // spot color - $returncolor = self::getSpotColor($color, $spotc); + $returncolor = self::getSpotColor($hcolor, $spotc); if ($returncolor === false) { $returncolor = $defcol; } diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_filters.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_filters.php index dfb80c5d25913982cfb270adfc49b3433b18c2cf..3bb89c092add0291c7bddb7c79e78e30edd6cc54 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_filters.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_filters.php @@ -279,7 +279,7 @@ class TCPDF_FILTERS { // convert string to binary string $bitstring = ''; for ($i = 0; $i < $data_length; ++$i) { - $bitstring .= sprintf('%08b', ord($data{$i})); + $bitstring .= sprintf('%08b', ord($data[$i])); } // get the number of bits $data_length = strlen($bitstring); @@ -376,7 +376,7 @@ class TCPDF_FILTERS { $i = 0; while($i < $data_length) { // get current byte value - $byte = ord($data{$i}); + $byte = ord($data[$i]); if ($byte == 128) { // a length value of 128 denote EOD break; @@ -389,7 +389,7 @@ class TCPDF_FILTERS { } else { // if length is in the range 129 to 255, // the following single byte shall be copied 257 - length (2 to 128) times during decompression - $decoded .= str_repeat($data{($i + 1)}, (257 - $byte)); + $decoded .= str_repeat($data[($i + 1)], (257 - $byte)); // move to next block $i += 2; } diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php index 9242ca4bfdb5290c47f0a10f8694bbd4673e51df..218fb6df1e5bb0938ab4ec4243c434e8f6a7acc1 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php @@ -1664,6 +1664,7 @@ class TCPDF_FONTS { * @public static */ public static function unichr($c, $unicode=true) { + $c = intval($c); if (!$unicode) { return chr($c); } elseif ($c <= 0x7F) { diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php index 86b3c20dbd8b55321c12fffb04f39b8923a248ca..5e504f2101caa6491cc8585c8a60e0ab992cc9d2 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php @@ -311,7 +311,7 @@ class TCPDF_IMAGES { if ($n > 0) { $trns = array(); for ($i = 0; $i < $n; ++ $i) { - $trns[] = ord($t{$i}); + $trns[] = ord($t[$i]); } } } diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php index df1b28e1ef87467a9f3bee38b58556802d488fc6..0139dbe9bea73de7cb28bf71d06313a54ddf1575 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php +++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php @@ -1,9 +1,9 @@ <?php //============================================================+ // File name : tcpdf_static.php -// Version : 1.1.3 +// Version : 1.1.4 // Begin : 2002-08-03 -// Last Update : 2015-04-28 +// Last Update : 2019-11-01 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com // License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- @@ -55,7 +55,7 @@ class TCPDF_STATIC { * Current TCPDF version. * @private static */ - private static $tcpdf_version = '6.2.26'; + private static $tcpdf_version = '6.3.5'; /** * String alias for total number of pages. @@ -1829,6 +1829,8 @@ class TCPDF_STATIC { */ public static function url_exists($url) { $crs = curl_init(); + // encode query params in URL to get right response form the server + $url = self::encodeUrlQuery($url); curl_setopt($crs, CURLOPT_URL, $url); curl_setopt($crs, CURLOPT_NOBODY, true); curl_setopt($crs, CURLOPT_FAILONERROR, true); @@ -1846,6 +1848,26 @@ class TCPDF_STATIC { return ($code == 200); } + /** + * Encode query params in URL + * + * @param string $url + * @return string + * @since 6.3.3 (2019-11-01) + * @public static + */ + public static function encodeUrlQuery($url) { + $urlData = parse_url($url); + if (isset($urlData['query']) && $urlData['query']) { + $urlQueryData = []; + parse_str(urldecode($urlData['query']), $urlQueryData); + $updatedUrl = $urlData['scheme'] . '://' . $urlData['host'] . $urlData['path'] . '?' . http_build_query($urlQueryData); + } else { + $updatedUrl = $url; + } + return $updatedUrl; + } + /** * Wrapper for file_exists. * Checks whether a file or directory exists. @@ -1926,10 +1948,10 @@ class TCPDF_STATIC { $alt = array_unique($alt); foreach ($alt as $path) { if (!self::file_exists($path)) { - return false; + continue; } $ret = @file_get_contents($path); - if ($ret !== false) { + if ( $ret != false ) { return $ret; } // try to use CURL for URLs diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php index 24ef434ab8a58523e06289e1a46b3647f69c2ac8..8b7d812236116282e52a148220cf2f9ff63546f9 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php +++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php @@ -1,13 +1,13 @@ <?php //============================================================+ // File name : tcpdf.php -// Version : 6.2.26 +// Version : 6.3.2 // Begin : 2002-08-03 -// Last Update : 2018-09-14 +// Last Update : 2019-09-20 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com // License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2002-2018 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2002-2019 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -45,7 +45,7 @@ // * font subsetting; // * methods to publish some XHTML + CSS code, Javascript and Forms; // * images, graphic (geometric figures) and transformation methods; -// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html) +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html) // * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417; // * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies; // * automatic page header and footer management; @@ -80,7 +80,7 @@ * <li>font subsetting;</li> * <li>methods to publish some XHTML + CSS code, Javascript and Forms;</li> * <li>images, graphic (geometric figures) and transformation methods; - * <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)</li> + * <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html)</li> * <li>1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;</li> * <li>JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;</li> * <li>automatic page header and footer management;</li> @@ -104,7 +104,7 @@ * Tools to encode your unicode fonts are on fonts/utils directory.</p> * @package com.tecnick.tcpdf * @author Nicola Asuni - * @version 6.2.26 + * @version 6.3.2 */ // TCPDF configuration @@ -128,7 +128,7 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php'); * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br> * @package com.tecnick.tcpdf * @brief PHP class for generating PDF documents without requiring external extensions. - * @version 6.2.26 + * @version 6.3.2 * @author Nicola Asuni - info@tecnick.com * @IgnoreAnnotation("protected") * @IgnoreAnnotation("public") @@ -1760,6 +1760,13 @@ class TCPDF { */ protected $pdfa_mode = false; + /** + * version of PDF/A mode (1 - 3). + * @protected + * @since 6.2.26 (2019-03-12) + */ + protected $pdfa_version = 1; + /** * Document creation date-time * @protected @@ -1781,6 +1788,13 @@ class TCPDF { */ protected $custom_xmp = ''; + /** + * Custom XMP RDF data. + * @protected + * @since 6.3.0 (2019-09-19) + */ + protected $custom_xmp_rdf = ''; + /** * Overprint mode array. * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). @@ -1834,7 +1848,7 @@ class TCPDF { * @param $unicode (boolean) TRUE means that the input text is unicode (default = true) * @param $encoding (string) Charset encoding (used only when converting back html entities); default is UTF-8. * @param $diskcache (boolean) DEPRECATED FEATURE - * @param $pdfa (boolean) If TRUE set the document to PDF/A mode. + * @param $pdfa (integer) If not false, set the document to PDF/A mode and the good version (1 or 3). * @public * @see getPageSizeFromFormat(), setPageFormat() */ @@ -1850,8 +1864,14 @@ class TCPDF { $this->font_obj_ids = array(); $this->page_obj_id = array(); $this->form_obj_id = array(); + // set pdf/a mode - $this->pdfa_mode = $pdfa; + if ($pdfa != false) { + $this->pdfa_mode = true; + $this->pdfa_version = $pdfa; // 1 or 3 + } else + $this->pdfa_mode = false; + $this->force_srgb = false; // set language direction $this->rtl = false; @@ -1960,7 +1980,7 @@ class TCPDF { // set default JPEG quality $this->jpeg_quality = 75; // initialize some settings - TCPDF_FONTS::utf8Bidi(array(''), '', false, $this->isunicode, $this->CurrentFont); + TCPDF_FONTS::utf8Bidi(array(), '', false, $this->isunicode, $this->CurrentFont); // set default font $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); $this->setHeaderFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); @@ -1986,6 +2006,7 @@ class TCPDF { $this->default_graphic_vars = $this->getGraphicVars(); $this->header_xobj_autoreset = false; $this->custom_xmp = ''; + $this->custom_xmp_rdf = ''; // Call cleanup method after script execution finishes or exit() is called. // NOTE: This will not be executed if the process is killed with a SIGTERM or SIGKILL signal. register_shutdown_function(array($this, '_destroy'), true); @@ -2828,10 +2849,13 @@ class TCPDF { * @since 1.4 */ public function SetCompression($compress=true) { + $this->compress = false; if (function_exists('gzcompress')) { - $this->compress = $compress ? true : false; - } else { - $this->compress = false; + if ($compress) { + if ( !$this->pdfa_mode) { + $this->compress = true; + } + } } } @@ -4691,14 +4715,14 @@ class TCPDF { * Defines the page and position a link points to. * @param $link (int) The link identifier returned by AddLink() * @param $y (float) Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) - * @param $page (int) Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param $page (int|string) Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. * @public * @since 1.5 * @see AddLink() */ public function SetLink($link, $y=0, $page=-1) { $fixed = false; - if (!empty($page) AND ($page[0] == '*')) { + if (!empty($page) AND (substr($page, 0, 1) == '*')) { $page = intval(substr($page, 1)); // this page number will not be changed when moving/add/deleting pages $fixed = true; @@ -4807,7 +4831,7 @@ class TCPDF { $this->PageAnnots[$page] = array(); } $this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); - if (!$this->pdfa_mode) { + if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) { if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { @@ -4833,8 +4857,8 @@ class TCPDF { * @see Annotation() */ protected function _putEmbeddedFiles() { - if ($this->pdfa_mode) { - // embedded files are not allowed in PDF/A mode + if ($this->pdfa_mode && $this->pdfa_version != 3) { + // embedded files are not allowed in PDF/A mode version 1 and 2 return; } reset($this->embeddedfiles); @@ -4847,7 +4871,10 @@ class TCPDF { $this->efnames[$filename] = $filedata['f'].' 0 R'; // embedded file specification object $out = $this->_getobj($filedata['f'])."\n"; - $out .= '<</Type /Filespec /F '.$this->_datastring($filename, $filedata['f']).' /EF <</F '.$filedata['n'].' 0 R>> >>'; + $out .= '<</Type /Filespec /F '.$this->_datastring($filename, $filedata['f']); + $out .= ' /UF '.$this->_datastring($filename, $filedata['f']); + $out .= ' /AFRelationship /Source'; + $out .= ' /EF <</F '.$filedata['n'].' 0 R>> >>'; $out .= "\n".'endobj'; $this->_out($out); // embedded file object @@ -4856,6 +4883,11 @@ class TCPDF { $data = gzcompress($data); $filter = ' /Filter /FlateDecode'; } + + if ($this->pdfa_version == 3) { + $filter = ' /Subtype /text#2Fxml'; + } + $stream = $this->_getrawstream($data, $filedata['n']); $out = $this->_getobj($filedata['n'])."\n"; $out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <</Size '.$rawsize.'>> >>'; @@ -6219,12 +6251,12 @@ class TCPDF { * $this->setPage($page); * if ($page == $start_page) { * // first page - * $height = $this->h - $start_y - $this->bMargin; + * $height += $this->h - $start_y - $this->bMargin; * } elseif ($page == $end_page) { * // last page - * $height = $end_y - $this->tMargin; + * $height += $end_y - $this->tMargin; * } else { - * $height = $this->h - $this->tMargin - $this->bMargin; + * $height += $this->h - $this->tMargin - $this->bMargin; * } * } * } @@ -7133,31 +7165,20 @@ class TCPDF { $info['i'] = $this->setImageBuffer($file, $info); } // set alignment + $this->img_rb_x = $x + $w; $this->img_rb_y = $y + $h; + // set alignment - if ($this->rtl) { - if ($palign == 'L') { - $ximg = $this->lMargin; - } elseif ($palign == 'C') { - $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($palign == 'R') { - $ximg = $this->w - $this->rMargin - $w; - } else { - $ximg = $x - $w; - } - $this->img_rb_x = $ximg; + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; } else { - if ($palign == 'L') { - $ximg = $this->lMargin; - } elseif ($palign == 'C') { - $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($palign == 'R') { - $ximg = $this->w - $this->rMargin - $w; - } else { - $ximg = $x; - } - $this->img_rb_x = $ximg + $w; + $ximg = $x; } + if ($ismask OR $hidden) { // image is not displayed return $info['i']; @@ -7737,6 +7758,7 @@ class TCPDF { return ''; } + protected static $cleaned_ids = array(); /** * Unset all class variables except the following critical variables. * @param $destroyall (boolean) if true destroys all class variables, otherwise preserves critical variables. @@ -7749,11 +7771,26 @@ class TCPDF { if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) { mb_internal_encoding($this->internal_encoding); } + if (isset(self::$cleaned_ids[$this->file_id])) { + $destroyall = false; + } if ($destroyall AND !$preserve_objcopy) { + self::$cleaned_ids[$this->file_id] = true; // remove all temporary files - $tmpfiles = glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*'); - if (!empty($tmpfiles)) { - array_map('unlink', $tmpfiles); + if ($handle = @opendir(K_PATH_CACHE)) { + while ( false !== ( $file_name = readdir( $handle ) ) ) { + if (strpos($file_name, '__tcpdf_'.$this->file_id.'_') === 0) { + unlink(K_PATH_CACHE.$file_name); + } + } + closedir($handle); + } + if (isset($this->imagekeys)) { + foreach($this->imagekeys as $file) { + if (strpos($file, K_PATH_CACHE) === 0) { + @unlink($file); + } + } } } $preserve = array( @@ -7763,6 +7800,7 @@ class TCPDF { 'bufferlen', 'buffer', 'cached_files', + 'imagekeys', 'sign', 'signature_data', 'signature_max_length', @@ -8368,7 +8406,7 @@ class TCPDF { if (is_string($pl['txt']) && !empty($pl['txt'])) { if ($pl['txt'][0] == '#') { // internal destination - $annots .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($pl['txt'], 1)); + $annots .= ' /A <</S /GoTo /D '.TCPDF_STATIC::encodeNameObject(substr($pl['txt'], 1)).'>>'; } elseif ($pl['txt'][0] == '%') { // embedded PDF file $filename = basename(substr($pl['txt'], 1)); @@ -8380,7 +8418,7 @@ class TCPDF { $annots .= ' /A << /S /JavaScript /JS '.$this->_textstring($jsa, $annot_obj_id).'>>'; } else { $parsedUrl = parse_url($pl['txt']); - if (empty($parsedUrl['scheme']) AND (strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) { + if (empty($parsedUrl['scheme']) AND (!empty($parsedUrl['path']) && strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) { // relative link to a PDF file $dest = '[0 /Fit]'; // default page 0 if (!empty($parsedUrl['fragment'])) { @@ -8487,8 +8525,8 @@ class TCPDF { break; } case 'fileattachment': { - if ($this->pdfa_mode) { - // embedded files are not allowed in PDF/A mode + if ($this->pdfa_mode && $this->pdfa_version != 3) { + // embedded files are not allowed in PDF/A mode version 1 and 2 break; } if (!isset($pl['opt']['fs'])) { @@ -9500,6 +9538,17 @@ class TCPDF { $this->custom_xmp = $xmp; } + /** + * Set additional XMP data to be added on the default XMP data just before the end of "rdf:RDF" tag. + * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! + * @param $xmp (string) Custom XMP RDF data. + * @since 6.3.0 (2019-09-19) + * @public + */ + public function setExtraXMPRDF($xmp) { + $this->custom_xmp_rdf = $xmp; + } + /** * Put XMP data object and return ID. * @return (int) The object ID. @@ -9569,7 +9618,7 @@ class TCPDF { $xmp .= "\t\t".'</rdf:Description>'."\n"; if ($this->pdfa_mode) { $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">'."\n"; - $xmp .= "\t\t\t".'<pdfaid:part>1</pdfaid:part>'."\n"; + $xmp .= "\t\t\t".'<pdfaid:part>'.$this->pdfa_version.'</pdfaid:part>'."\n"; $xmp .= "\t\t\t".'<pdfaid:conformance>B</pdfaid:conformance>'."\n"; $xmp .= "\t\t".'</rdf:Description>'."\n"; } @@ -9581,6 +9630,16 @@ class TCPDF { $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>'."\n"; $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:prefix>pdf</pdfaSchema:prefix>'."\n"; $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:property>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'<rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>Adobe PDF Schema</pdfaProperty:description>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>InstanceID</pdfaProperty:name>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>URI</pdfaProperty:valueType>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'</rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t".'</pdfaSchema:property>'."\n"; $xmp .= "\t\t\t\t\t".'</rdf:li>'."\n"; $xmp .= "\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>'."\n"; @@ -9627,6 +9686,7 @@ class TCPDF { $xmp .= "\t\t\t\t".'</rdf:Bag>'."\n"; $xmp .= "\t\t\t".'</pdfaExtension:schemas>'."\n"; $xmp .= "\t\t".'</rdf:Description>'."\n"; + $xmp .= $this->custom_xmp_rdf; $xmp .= "\t".'</rdf:RDF>'."\n"; $xmp .= $this->custom_xmp; $xmp .= '</x:xmpmeta>'."\n"; @@ -12221,7 +12281,7 @@ class TCPDF { $x = $this->w; } $fixed = false; - if (!empty($page) AND ($page[0] == '*')) { + if (!empty($page) AND (substr($page, 0, 1) == '*')) { $page = intval(substr($page, 1)); // this page number will not be changed when moving/add/deleting pages $fixed = true; @@ -12324,7 +12384,8 @@ class TCPDF { $x = $this->w; } $fixed = false; - if (!empty($page) AND ($page[0] == '*')) { + $pageAsString = (string) $page; + if ($pageAsString && $pageAsString[0] == '*') { $page = intval(substr($page, 1)); // this page number will not be changed when moving/add/deleting pages $fixed = true; @@ -13988,7 +14049,7 @@ class TCPDF { * @since 3.1.000 (2008-06-09) */ public function setPDFVersion($version='1.7') { - if ($this->pdfa_mode) { + if ($this->pdfa_mode && $this->pdfa_version == 1 ) { // PDF/A mode $this->PDFVersion = '1.4'; } else { @@ -15502,8 +15563,7 @@ class TCPDF { * <li>int $style['module_height'] height of a single module in points</li> * <li>array $style['fgcolor'] color array for bars and text</li> * <li>mixed $style['bgcolor'] color array for background or false for transparent</li> - * <li>string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch</li><li>$style['module_width'] width of a single module in points</li> - * <li>$style['module_height'] height of a single module in points</li></ul> + * <li>string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch</li> * @param $align (string) Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> * @param $distort (boolean) if true distort the barcode to fit width and height, otherwise preserve aspect ratio * @author Nicola Asuni @@ -16897,10 +16957,10 @@ class TCPDF { if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) { $dom[$key]['fontname'] = $this->default_monospaced_font; } - if (!empty($dom[$key]['value']) AND ($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) { + if (!empty($dom[$key]['value']) AND ($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value'][1]) > 0) AND (intval($dom[$key]['value'][1]) < 7)) { // headings h1, h2, h3, h4, h5, h6 if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) { - $headsize = (4 - intval($dom[$key]['value']{1})) * 2; + $headsize = (4 - intval($dom[$key]['value'][1])) * 2; $dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize; } if (!isset($dom[$key]['style']['font-weight'])) { @@ -18686,7 +18746,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: $hbz = 0; // distance from y to line bottom $hb = 0; // vertical space between block tags // calculate vertical space for block tags - if (isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) { + if (isset($this->tagvspaces[$tag['value']][0]['h']) && !empty($this->tagvspaces[$tag['value']][0]['h']) && ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) { $cur_h = $this->tagvspaces[$tag['value']][0]['h']; } elseif (isset($tag['fontsize'])) { $cur_h = $this->getCellHeight($tag['fontsize'] / $this->k); @@ -18718,7 +18778,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: } // closing vertical space $hbc = 0; - if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { + if (isset($this->tagvspaces[$tag['value']][1]['h']) && !empty($this->tagvspaces[$tag['value']][1]['h']) && ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { $pre_h = $this->tagvspaces[$tag['value']][1]['h']; } elseif (isset($parent['fontsize'])) { $pre_h = $this->getCellHeight($parent['fontsize'] / $this->k); @@ -19379,7 +19439,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: $hbz = 0; // distance from y to line bottom $hb = 0; // vertical space between block tags // calculate vertical space for block tags - if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { + if (isset($this->tagvspaces[$tag['value']][1]['h']) && !empty($this->tagvspaces[$tag['value']][1]['h']) && ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { $pre_h = $this->tagvspaces[$tag['value']][1]['h']; } elseif (isset($parent['fontsize'])) { $pre_h = $this->getCellHeight($parent['fontsize'] / $this->k); @@ -23349,7 +23409,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: */ protected function SVGPath($d, $style='') { if ($this->state != 2) { - return; + return; } // set fill/stroke style $op = TCPDF_STATIC::getPathPaintOperator($style, ''); @@ -23369,6 +23429,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: $xmax = 0; $ymin = 2147483647; $ymax = 0; + $xinitial = 0; + $yinitial = 0; $relcoord = false; $minlen = (0.01 / $this->k); // minimum acceptable length (3 point) $firstcmd = true; // used to print first point @@ -23413,6 +23475,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: if ($ck == 1) { $this->_outPoint($x, $y); $firstcmd = false; + $xinitial = $x; + $yinitial = $y; } else { $this->_outLine($x, $y); } @@ -23600,8 +23664,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: if ((($ck + 1) % 7) == 0) { $x0 = $x; $y0 = $y; - $rx = abs($params[($ck - 6)]); - $ry = abs($params[($ck - 5)]); + $rx = max(abs($params[($ck - 6)]), .000000001); + $ry = max(abs($params[($ck - 5)]), .000000001); $ang = -$rawparams[($ck - 4)]; $angle = deg2rad($ang); $fa = $rawparams[($ck - 3)]; // large-arc-flag @@ -23688,6 +23752,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: } case 'Z': { $this->_out('h'); + $x = $x0 = $xinitial; + $y = $y0 = $yinitial; break; } } @@ -23995,7 +24061,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: case 'stop': { // gradient stops if (substr($attribs['offset'], -1) == '%') { - $offset = floatval(substr($attribs['offset'], -1)) / 100; + $offset = floatval(substr($attribs['offset'], 0, -1)) / 100; } else { $offset = floatval($attribs['offset']); if ($offset > 1) { diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php index 0c389aeb54a1402c9a6eaa3951a54c6dac31f1ef..78bfc5b5bf4a53ba717f483a3d83a7ac6a33a124 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php +++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_barcodes_1d.php @@ -453,7 +453,7 @@ class TCPDFBarcode { $k = 0; $clen = strlen($code); for ($i = 0; $i < $clen; ++$i) { - $char = $code{$i}; + $char = $code[$i]; if(!isset($chr[$char])) { // invalid character return false; @@ -464,7 +464,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $chr[$char]{$j}; + $w = $chr[$char][$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -520,10 +520,10 @@ class TCPDFBarcode { $code_ext = ''; $clen = strlen($code); for ($i = 0 ; $i < $clen; ++$i) { - if (ord($code{$i}) > 127) { + if (ord($code[$i]) > 127) { return false; } - $code_ext .= $encode[$code{$i}]; + $code_ext .= $encode[$code[$i]]; } return $code_ext; } @@ -543,7 +543,7 @@ class TCPDFBarcode { $sum = 0; $clen = strlen($code); for ($i = 0 ; $i < $clen; ++$i) { - $k = array_keys($chars, $code{$i}); + $k = array_keys($chars, $code[$i]); $sum += $k[0]; } $j = ($sum % 43); @@ -643,10 +643,10 @@ class TCPDFBarcode { $code_ext = ''; $clen = strlen($code); for ($i = 0 ; $i < $clen; ++$i) { - if (ord($code{$i}) > 127) { + if (ord($code[$i]) > 127) { return false; } - $code_ext .= $encode[$code{$i}]; + $code_ext .= $encode[$code[$i]]; } // checksum $code_ext .= $this->checksum_code93($code_ext); @@ -656,7 +656,7 @@ class TCPDFBarcode { $k = 0; $clen = strlen($code); for ($i = 0; $i < $clen; ++$i) { - $char = ord($code{$i}); + $char = ord($code[$i]); if(!isset($chr[$char])) { // invalid character return false; @@ -667,7 +667,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $chr[$char]{$j}; + $w = $chr[$char][$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -699,7 +699,7 @@ class TCPDFBarcode { $p = 1; $check = 0; for ($i = ($len - 1); $i >= 0; --$i) { - $k = array_keys($chars, $code{$i}); + $k = array_keys($chars, $code[$i]); $check += ($k[0] * $p); ++$p; if ($p > 20) { @@ -713,7 +713,7 @@ class TCPDFBarcode { $p = 1; $check = 0; for ($i = $len; $i >= 0; --$i) { - $k = array_keys($chars, $code{$i}); + $k = array_keys($chars, $code[$i]); $check += ($k[0] * $p); ++$p; if ($p > 15) { @@ -738,11 +738,11 @@ class TCPDFBarcode { $len = strlen($code); $sum = 0; for ($i = 0; $i < $len; $i+=2) { - $sum += $code{$i}; + $sum += $code[$i]; } $sum *= 3; for ($i = 1; $i < $len; $i+=2) { - $sum += ($code{$i}); + $sum += ($code[$i]); } $r = $sum % 10; if($r > 0) { @@ -783,7 +783,7 @@ class TCPDFBarcode { $p = 2; $check = 0; for ($i = ($clen - 1); $i >= 0; --$i) { - $check += (hexdec($code{$i}) * $p); + $check += (hexdec($code[$i]) * $p); ++$p; if ($p > 7) { $p = 2; @@ -798,7 +798,7 @@ class TCPDFBarcode { $seq = '110'; // left guard $clen = strlen($code); for ($i = 0; $i < $clen; ++$i) { - $digit = $code{$i}; + $digit = $code[$i]; if (!isset($chr[$digit])) { // invalid character return false; @@ -841,7 +841,7 @@ class TCPDFBarcode { $seq = '11011010'; $clen = strlen($code); for ($i = 0; $i < $clen; ++$i) { - $digit = $code{$i}; + $digit = $code[$i]; if (!isset($chr[$digit])) { // invalid character return false; @@ -867,8 +867,8 @@ class TCPDFBarcode { $k = 0; for ($i = 0; $i < $len; ++$i) { $w += 1; - if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq{$i} != $seq{($i+1)}))) { - if ($seq{$i} == '1') { + if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq[$i] != $seq[($i+1)]))) { + if ($seq[$i] == '1') { $t = true; // bar } else { $t = false; // space @@ -919,8 +919,8 @@ class TCPDFBarcode { $k = 0; $clen = strlen($code); for ($i = 0; $i < $clen; $i = ($i + 2)) { - $char_bar = $code{$i}; - $char_space = $code{$i+1}; + $char_bar = $code[$i]; + $char_space = $code[$i+1]; if((!isset($chr[$char_bar])) OR (!isset($chr[$char_space]))) { // invalid character return false; @@ -929,7 +929,7 @@ class TCPDFBarcode { $seq = ''; $chrlen = strlen($chr[$char_bar]); for ($s = 0; $s < $chrlen; $s++){ - $seq .= $chr[$char_bar]{$s} . $chr[$char_space]{$s}; + $seq .= $chr[$char_bar][$s] . $chr[$char_space][$s]; } $seqlen = strlen($seq); for ($j = 0; $j < $seqlen; ++$j) { @@ -938,7 +938,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq{$j}; + $w = $seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -1085,7 +1085,7 @@ class TCPDFBarcode { case 'A': { // MODE A $startid = 103; for ($i = 0; $i < $len; ++$i) { - $char = $code{$i}; + $char = $code[$i]; $char_id = ord($char); if (($char_id >= 241) AND ($char_id <= 244)) { $code_data[] = $fnc_a[$char_id]; @@ -1100,7 +1100,7 @@ class TCPDFBarcode { case 'B': { // MODE B $startid = 104; for ($i = 0; $i < $len; ++$i) { - $char = $code{$i}; + $char = $code[$i]; $char_id = ord($char); if (($char_id >= 241) AND ($char_id <= 244)) { $code_data[] = $fnc_b[$char_id]; @@ -1124,7 +1124,7 @@ class TCPDFBarcode { return false; } for ($i = 0; $i < $len; $i+=2) { - $chrnum = $code{$i}.$code{$i+1}; + $chrnum = $code[$i].$code[$i+1]; if (preg_match('/([0-9]{2})/', $chrnum) > 0) { $code_data[] = intval($chrnum); } else { @@ -1180,7 +1180,7 @@ class TCPDFBarcode { } } for ($i = 0; $i < $seq[2]; ++$i) { - $char = $seq[1]{$i}; + $char = $seq[1][$i]; $char_id = ord($char); if (($char_id >= 241) AND ($char_id <= 244)) { $code_data[] = $fnc_a[$char_id]; @@ -1223,7 +1223,7 @@ class TCPDFBarcode { } } for ($i = 0; $i < $seq[2]; ++$i) { - $char = $seq[1]{$i}; + $char = $seq[1][$i]; $char_id = ord($char); if (($char_id >= 241) AND ($char_id <= 244)) { $code_data[] = $fnc_b[$char_id]; @@ -1240,7 +1240,7 @@ class TCPDFBarcode { $code_data[] = 99; } for ($i = 0; $i < $seq[2]; $i+=2) { - $chrnum = $seq[1]{$i}.$seq[1]{$i+1}; + $chrnum = $seq[1][$i].$seq[1][$i+1]; $code_data[] = intval($chrnum); } break; @@ -1271,7 +1271,7 @@ class TCPDFBarcode { } else { $t = false; // space } - $w = $seq{$j}; + $w = $seq[$j]; $bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; } @@ -1337,14 +1337,14 @@ class TCPDFBarcode { // calculate check digit $sum_a = 0; for ($i = 1; $i < $data_len; $i+=2) { - $sum_a += $code{$i}; + $sum_a += $code[$i]; } if ($len > 12) { $sum_a *= 3; } $sum_b = 0; for ($i = 0; $i < $data_len; $i+=2) { - $sum_b += ($code{$i}); + $sum_b += ($code[$i]); } if ($len < 13) { $sum_b *= 3; @@ -1356,7 +1356,7 @@ class TCPDFBarcode { if ($code_len == $data_len) { // add check digit $code .= $r; - } elseif ($r !== intval($code{$data_len})) { + } elseif ($r !== intval($code[$data_len])) { // wrong checkdigit return false; } @@ -1467,7 +1467,7 @@ class TCPDFBarcode { $bararray = array('code' => $upce_code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); $p = $upce_parities[$code[1]][$r]; for ($i = 0; $i < 6; ++$i) { - $seq .= $codes[$p[$i]][$upce_code{$i}]; + $seq .= $codes[$p[$i]][$upce_code[$i]]; } $seq .= '010101'; // right guard bar } else { @@ -1475,17 +1475,17 @@ class TCPDFBarcode { $half_len = intval(ceil($len / 2)); if ($len == 8) { for ($i = 0; $i < $half_len; ++$i) { - $seq .= $codes['A'][$code{$i}]; + $seq .= $codes['A'][$code[$i]]; } } else { $p = $parities[$code[0]]; for ($i = 1; $i < $half_len; ++$i) { - $seq .= $codes[$p[$i-1]][$code{$i}]; + $seq .= $codes[$p[$i-1]][$code[$i]]; } } $seq .= '01010'; // center guard bar for ($i = $half_len; $i < $len; ++$i) { - $seq .= $codes['C'][$code{$i}]; + $seq .= $codes['C'][$code[$i]]; } $seq .= '101'; // right guard bar } @@ -1493,8 +1493,8 @@ class TCPDFBarcode { $w = 0; for ($i = 0; $i < $clen; ++$i) { $w += 1; - if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq{$i} != $seq{($i+1)}))) { - if ($seq{$i} == '1') { + if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq[$i] != $seq[$i+1]))) { + if ($seq[$i] == '1') { $t = true; // bar } else { $t = false; // space @@ -1578,7 +1578,7 @@ class TCPDFBarcode { $seq .= $codes[$p[0]][$code[0]]; for ($i = 1; $i < $len; ++$i) { $seq .= '01'; // separator - $seq .= $codes[$p[$i]][$code{$i}]; + $seq .= $codes[$p[$i]][$code[$i]]; } $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); return $this->binseq_to_array($seq, $bararray); @@ -1629,7 +1629,7 @@ class TCPDFBarcode { // calculate checksum $sum = 0; for ($i = 0; $i < $len; ++$i) { - $sum += intval($code{$i}); + $sum += intval($code[$i]); } $chkd = ($sum % 10); if($chkd > 0) { @@ -1643,7 +1643,7 @@ class TCPDFBarcode { $bararray['maxw'] += 2; for ($i = 0; $i < $len; ++$i) { for ($j = 0; $j < 5; ++$j) { - $h = $barlen[$code{$i}][$j]; + $h = $barlen[$code[$i]][$j]; $p = floor(1 / $h); $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); @@ -1756,8 +1756,8 @@ class TCPDFBarcode { $row = 0; $col = 0; for ($i = 0; $i < $len; ++$i) { - $row += $checktable[$code{$i}][0]; - $col += $checktable[$code{$i}][1]; + $row += $checktable[$code[$i]][0]; + $col += $checktable[$code[$i]][1]; } $row %= 6; $col %= 6; @@ -1774,7 +1774,7 @@ class TCPDFBarcode { } for ($i = 0; $i < $len; ++$i) { for ($j = 0; $j < 4; ++$j) { - switch ($barmode[$code{$i}][$j]) { + switch ($barmode[$code[$i]][$j]) { case 1: { $p = 0; $h = 2; @@ -1846,17 +1846,17 @@ class TCPDFBarcode { $code = 'A'.strtoupper($code).'A'; $len = strlen($code); for ($i = 0; $i < $len; ++$i) { - if (!isset($chr[$code{$i}])) { + if (!isset($chr[$code[$i]])) { return false; } - $seq = $chr[$code{$i}]; + $seq = $chr[$code[$i]]; for ($j = 0; $j < 8; ++$j) { if (($j % 2) == 0) { $t = true; // bar } else { $t = false; // space } - $w = $seq{$j}; + $w = $seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -1896,7 +1896,7 @@ class TCPDFBarcode { $p = 1; $check = 0; for ($i = ($len - 1); $i >= 0; --$i) { - $digit = $code{$i}; + $digit = $code[$i]; if ($digit == '-') { $dval = 10; } else { @@ -1918,7 +1918,7 @@ class TCPDFBarcode { $p = 1; $check = 0; for ($i = $len; $i >= 0; --$i) { - $digit = $code{$i}; + $digit = $code[$i]; if ($digit == '-') { $dval = 10; } else { @@ -1937,17 +1937,17 @@ class TCPDFBarcode { $code = 'S'.$code.'S'; $len += 3; for ($i = 0; $i < $len; ++$i) { - if (!isset($chr[$code{$i}])) { + if (!isset($chr[$code[$i]])) { return false; } - $seq = $chr[$code{$i}]; + $seq = $chr[$code[$i]]; for ($j = 0; $j < 6; ++$j) { if (($j % 2) == 0) { $t = true; // bar } else { $t = false; // space } - $w = $seq{$j}; + $w = $seq[$j]; $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); $bararray['maxw'] += $w; ++$k; @@ -2016,7 +2016,7 @@ class TCPDFBarcode { $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array()); $len = strlen($seq); for ($i = 0; $i < $len; ++$i) { - switch ($seq{$i}) { + switch ($seq[$i]) { case '1': { $p = 1; $h = 1; @@ -2255,7 +2255,7 @@ class TCPDFBarcode { $bitval = 1; $len = strlen($hex); for($pos = ($len - 1); $pos >= 0; --$pos) { - $dec = bcadd($dec, bcmul(hexdec($hex{$pos}), $bitval)); + $dec = bcadd($dec, bcmul(hexdec($hex[$pos]), $bitval)); $bitval = bcmul($bitval, 16); } return $dec; diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_parser.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_parser.php index 780ec2129d19bf8655dc95e278221fda90b3b6b6..bd3d719c7acb187ce41c379fd4b7fda849b7c369 100644 --- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf_parser.php +++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf_parser.php @@ -531,10 +531,10 @@ class TCPDF_PARSER { if ($char == '(') { $open_bracket = 1; while ($open_bracket > 0) { - if (!isset($this->pdfdata{$strpos})) { + if (!isset($this->pdfdata[$strpos])) { break; } - $ch = $this->pdfdata{$strpos}; + $ch = $this->pdfdata[$strpos]; switch ($ch) { case '\\': { // REVERSE SOLIDUS (5Ch) (Backslash) // skip next character @@ -578,7 +578,7 @@ class TCPDF_PARSER { } case '<': // \x3C LESS-THAN SIGN case '>': { // \x3E GREATER-THAN SIGN - if (isset($this->pdfdata{($offset + 1)}) AND ($this->pdfdata{($offset + 1)} == $char)) { + if (isset($this->pdfdata[($offset + 1)]) AND ($this->pdfdata[($offset + 1)] == $char)) { // dictionary object $objtype = $char.$char; $offset += 2; diff --git a/civicrm/vendor/zetacomponents/mail/.travis.yml b/civicrm/vendor/zetacomponents/mail/.travis.yml index 4b181527db0bceed67ce145475d0d09c7b74e0bd..52e2ad9c1775053fd684c3aae2b990d886b63dc0 100644 --- a/civicrm/vendor/zetacomponents/mail/.travis.yml +++ b/civicrm/vendor/zetacomponents/mail/.travis.yml @@ -1,22 +1,18 @@ language: php php: - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 + - 7.1 + - 7.2 + - 7.3 - nightly - - hhvm matrix: allow_failures: - php: nightly - - php: hhvm before_script: - composer self-update - composer update script: - - phpunit + - vendor/bin/phpunit diff --git a/civicrm/vendor/zetacomponents/mail/ChangeLog b/civicrm/vendor/zetacomponents/mail/ChangeLog index de8b12300f5891fa8233d94f316ee271942f9077..273b5db58d8f70c8ff0dd7c4a7fa135a8fa83335 100644 --- a/civicrm/vendor/zetacomponents/mail/ChangeLog +++ b/civicrm/vendor/zetacomponents/mail/ChangeLog @@ -1,3 +1,13 @@ +1.9.2 - Saturday 13 June 2020 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Fixed #45: File name too long when parsing attachments. +- Fixed #66: Attachment filename too long. +- Fixed #80: Fixed bug in openFile() function. (Michael Kliewe) +- Fixed #82: Fix issue where using array_key_exists on an object is deprecated + in PHP 7.4. (Seamus Lee) + + 1.9.1 - Friday 17 January 2020 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/civicrm/vendor/zetacomponents/mail/composer.json b/civicrm/vendor/zetacomponents/mail/composer.json index f3fcc44c893de6c695b2ca3472edfade2c4ca38b..68e4e1fec2e9039f9c73ce90c6afcf5728820f63 100644 --- a/civicrm/vendor/zetacomponents/mail/composer.json +++ b/civicrm/vendor/zetacomponents/mail/composer.json @@ -54,6 +54,7 @@ "zetacomponents/base": "~1.8" }, "require-dev": { + "phpunit/phpunit": "~7.5", "zetacomponents/unit-test": "*" } } diff --git a/civicrm/vendor/zetacomponents/mail/phpunit.xml.dist b/civicrm/vendor/zetacomponents/mail/phpunit.xml.dist index caf2bea302f2cb614002b700f517f6be25c0ae8f..4ca087d8ffd86fceab72d0674657d7486105686e 100644 --- a/civicrm/vendor/zetacomponents/mail/phpunit.xml.dist +++ b/civicrm/vendor/zetacomponents/mail/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<phpunit bootstrap="./tests/bootstrap.php" colors="true"> +<phpunit bootstrap="./tests/bootstrap.php" colors="true" beStrictAboutTestsThatDoNotTestAnything="false"> <testsuites> <testsuite name="Zeta Components Mail"> <directory suffix="_test.php">./tests</directory> diff --git a/civicrm/vendor/zetacomponents/mail/src/parser/parts/delivery_status_parser.php b/civicrm/vendor/zetacomponents/mail/src/parser/parts/delivery_status_parser.php index 764d7ac409e58ed6b0f4066c8095db4b92307b1f..dceae29a2cb0ec599f1b94447cdcd3839df0e69e 100644 --- a/civicrm/vendor/zetacomponents/mail/src/parser/parts/delivery_status_parser.php +++ b/civicrm/vendor/zetacomponents/mail/src/parser/parts/delivery_status_parser.php @@ -123,7 +123,7 @@ class ezcMailDeliveryStatusParser extends ezcMailPartParser */ public function finish() { - if ( array_key_exists( $this->section - 1, $this->part->recipients ) ) + if ( array_key_exists( $this->section - 1, (array) $this->part->recipients ) ) { unset( $this->part->recipients[$this->section - 1] ); // because one extra recipient is created in parseHeader() } diff --git a/civicrm/vendor/zetacomponents/mail/src/parser/parts/file_parser.php b/civicrm/vendor/zetacomponents/mail/src/parser/parts/file_parser.php index b6f80066c883064e07cc49aa137e13802c6d9e46..2e5cff05e98f27f0c773742f998017c048f99d5f 100644 --- a/civicrm/vendor/zetacomponents/mail/src/parser/parts/file_parser.php +++ b/civicrm/vendor/zetacomponents/mail/src/parser/parts/file_parser.php @@ -9,9 +9,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -142,7 +142,12 @@ class ezcMailFileParser extends ezcMailPartParser } // clean file name (replace unsafe characters with underscores) - $fileName = strtr( $fileName, "/\\\0\"|?*<:;>+[]", '______________' ); + $fileName = preg_replace( '/[^A-Za-z0-9-. ]/', '_', $fileName ); + + if ( strlen( $fileName ) > 200 ) + { + $fileName = substr( $fileName, 0, 200 ) . '.' . pathinfo( $fileName, PATHINFO_EXTENSION ); + } $this->fp = $this->openFile( $fileName ); // propagate exception } @@ -172,8 +177,8 @@ class ezcMailFileParser extends ezcMailPartParser ezcMailParserShutdownHandler::registerForRemoval( $dirName ); $this->fileName = $dirName . $fileName; - $fp = fopen( $this->fileName, 'w' ); - if ( $this->fp === false ) + $fp = @fopen( $this->fileName, 'w' ); + if ( $fp === false ) { throw new ezcBaseFileNotFoundException( $this->fileName ); } diff --git a/civicrm/vendor/zetacomponents/mail/src/tools.php b/civicrm/vendor/zetacomponents/mail/src/tools.php index 6bac570bee1bca97575c9e5cd8470e62ef624e66..5d79253446bdaea20e43377e50035053a62d6574 100644 --- a/civicrm/vendor/zetacomponents/mail/src/tools.php +++ b/civicrm/vendor/zetacomponents/mail/src/tools.php @@ -608,9 +608,15 @@ class ezcMailTools // Try it as latin 1 string $text = preg_replace( '/=\?([^?]+)\?/', '=?iso-8859-1?', $origtext ); - $text = iconv_mime_decode( $text, 0, $charset ); + $text = @iconv_mime_decode( $text, 0, $charset ); - return $text; + if ( $text !== false ) + { + return $text; + } + + // Return text as-is + return $origtext; } /** diff --git a/civicrm/xml/schema/Activity/Activity.xml b/civicrm/xml/schema/Activity/Activity.xml index 8b322d0953c97d81d9a046037dfa1b36c7f5d3de..8a37ea3d76156f28972b2e351b017acfc9d004cd 100644 --- a/civicrm/xml/schema/Activity/Activity.xml +++ b/civicrm/xml/schema/Activity/Activity.xml @@ -6,6 +6,7 @@ <comment>Other Activity details stored here include contact, location, details.</comment> <add>1.1</add> <log>true</log> + <icon>fa-tasks</icon> <field> <name>id</name> <uniqueName>activity_id</uniqueName> @@ -121,6 +122,9 @@ <field> <name>activity_date_time</name> <import>true</import> + <required>false</required> + <export>true</export> + <default>CURRENT_TIMESTAMP</default> <title>Activity Date</title> <type>datetime</type> <headerPattern>/(activity.)?date(.time$)?/i</headerPattern> @@ -319,6 +323,7 @@ <name>index_medium_id</name> <fieldName>medium_id</fieldName> <add>2.2</add> + <drop>5.28</drop> </index> <field> <name>is_auto</name> @@ -466,7 +471,7 @@ <comment>When was the activity was created.</comment> <required>false</required> <export>true</export> - <default>NULL</default> + <default>CURRENT_TIMESTAMP</default> <add>4.7</add> </field> <field> diff --git a/civicrm/xml/schema/Batch/Batch.xml b/civicrm/xml/schema/Batch/Batch.xml index 24fdbf4f6132daa921815cc77d3bc75bb7fe7bcd..3bcbc444092122a5c7359b5b9ad20f832cafae1b 100644 --- a/civicrm/xml/schema/Batch/Batch.xml +++ b/civicrm/xml/schema/Batch/Batch.xml @@ -91,6 +91,7 @@ <add>3.3</add> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> </field> <field> diff --git a/civicrm/xml/schema/Campaign/Campaign.xml b/civicrm/xml/schema/Campaign/Campaign.xml index da4ec8cbb073ac9872b0409bac7504a324889899..c87c03730d137ee4a5864854214f6caf1a23718e 100644 --- a/civicrm/xml/schema/Campaign/Campaign.xml +++ b/civicrm/xml/schema/Campaign/Campaign.xml @@ -5,7 +5,7 @@ <name>civicrm_campaign</name> <comment>Campaign Details.</comment> <add>3.3</add> - + <icon>fa-bullhorn</icon> <field> <name>id</name> <title>Campaign ID</title> @@ -69,6 +69,7 @@ <import>true</import> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> <add>3.3</add> </field> @@ -82,6 +83,7 @@ <import>true</import> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> <add>3.3</add> </field> @@ -204,6 +206,7 @@ <add>3.3</add> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> </field> diff --git a/civicrm/xml/schema/Campaign/Survey.xml b/civicrm/xml/schema/Campaign/Survey.xml index 4e810ccb85e2937841c1960f27f7d734e2de6bbd..5d13bbd79b4ab94f30a4e6fbd8d0a1f7c3133b05 100644 --- a/civicrm/xml/schema/Campaign/Survey.xml +++ b/civicrm/xml/schema/Campaign/Survey.xml @@ -5,7 +5,7 @@ <name>civicrm_survey</name> <comment>Campaign Survey Details.</comment> <add>3.2</add> - + <icon>fa-clipboard</icon> <field> <name>id</name> <title>Survey ID</title> diff --git a/civicrm/xml/schema/Case/Case.xml b/civicrm/xml/schema/Case/Case.xml index 17db8122e16886d7b64b8fd5630c0afc366deb5d..a91e955a55eb23023095746ff079285cc0c32825 100644 --- a/civicrm/xml/schema/Case/Case.xml +++ b/civicrm/xml/schema/Case/Case.xml @@ -6,6 +6,7 @@ <comment>This table stores information about cases grouping activities.</comment> <add>1.8</add> <log>true</log> + <icon>fa-folder-open</icon> <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml index 036ad4edd3cbc6a6c51631cfec10d18559757535..dda19acd7f4b70ecc8f5c3a661ddb0b3609ab84b 100644 --- a/civicrm/xml/schema/Contact/Contact.xml +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -7,6 +7,7 @@ <comment>Contact objects are defined by a civicrm_contact record plus a related civicrm_contact_type record.</comment> <add>1.1</add> <log>true</log> + <icon>fa-address-book-o</icon> <field> <name>id</name> <type>int unsigned</type> @@ -854,6 +855,7 @@ <html> <type>CheckBox</type> </html> + <permission>access deleted contacts</permission> </field> <index> <name>index_is_deleted</name> diff --git a/civicrm/xml/schema/Contact/ContactType.xml b/civicrm/xml/schema/Contact/ContactType.xml index 8a701d53e032fc1af454ec918318895b7f237c76..a09c6e14244eef71a4ecad23287b3e4dcdfa8ae0 100644 --- a/civicrm/xml/schema/Contact/ContactType.xml +++ b/civicrm/xml/schema/Contact/ContactType.xml @@ -24,6 +24,7 @@ <length>64</length> <comment>Internal name of Contact Type (or Subtype).</comment> <add>3.1</add> + <required>true</required> </field> <index> <name>contact_type</name> @@ -84,6 +85,7 @@ <name>is_active</name> <title>Contact Type Is Active?</title> <type>boolean</type> + <default>1</default> <comment>Is this entry active?</comment> <add>3.1</add> </field> @@ -91,6 +93,7 @@ <name>is_reserved</name> <title>Contact Type is Reserved?</title> <type>boolean</type> + <default>0</default> <comment>Is this contact type a predefined system type</comment> <add>3.1</add> </field> diff --git a/civicrm/xml/schema/Contact/Group.xml b/civicrm/xml/schema/Contact/Group.xml index 330e1a42dbc35b86bcdca5c8e9ca165b7c03d22e..509f20debcc3751cae8216a4dc326594292fe068 100644 --- a/civicrm/xml/schema/Contact/Group.xml +++ b/civicrm/xml/schema/Contact/Group.xml @@ -7,6 +7,7 @@ <comment>Provide grouping of related contacts</comment> <add>1.1</add> <log>true</log> + <icon>fa-users</icon> <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Contact/Relationship.xml b/civicrm/xml/schema/Contact/Relationship.xml index 3228534dcd3059711d96b00a3a21d4917b220f9e..f073e75587aee0d6852ad0a2c7a227e71b8964ed 100644 --- a/civicrm/xml/schema/Contact/Relationship.xml +++ b/civicrm/xml/schema/Contact/Relationship.xml @@ -7,6 +7,7 @@ <comment>Relationship between any 2 types of contacts.</comment> <add>1.1</add> <log>true</log> + <icon>fa-handshake-o</icon> <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Contribute/Contribution.xml b/civicrm/xml/schema/Contribute/Contribution.xml index ad1656a1be5480a7905127c7597d0235608b9b08..246c55bd32abbbd2aa7b8a85fe9e649bd155b7e6 100644 --- a/civicrm/xml/schema/Contribute/Contribution.xml +++ b/civicrm/xml/schema/Contribute/Contribution.xml @@ -6,6 +6,7 @@ <name>civicrm_contribution</name> <add>1.3</add> <log>true</log> + <icon>fa-credit-card</icon> <field> <name>id</name> <uniqueName>contribution_id</uniqueName> diff --git a/civicrm/xml/schema/Contribute/ContributionRecur.xml b/civicrm/xml/schema/Contribute/ContributionRecur.xml index d5295ff4557c05bb75489b2a7e6707500094b456..eddc342d9c5ad8e6f719d84646a96a9ddae02343 100644 --- a/civicrm/xml/schema/Contribute/ContributionRecur.xml +++ b/civicrm/xml/schema/Contribute/ContributionRecur.xml @@ -5,6 +5,7 @@ <name>civicrm_contribution_recur</name> <add>1.6</add> <log>true</log> + <title>Recurring Contributions</title> <field> <name>id</name> <uniqueName>contribution_recur_id</uniqueName> diff --git a/civicrm/xml/schema/Core/Address.xml b/civicrm/xml/schema/Core/Address.xml index 49bbcc38b5b12dd2b8014aeab7a61dcec6b7f7b0..d4dd2a49df6816087581d4418faf75ca474a7040 100644 --- a/civicrm/xml/schema/Core/Address.xml +++ b/civicrm/xml/schema/Core/Address.xml @@ -7,6 +7,7 @@ <comment>Stores the physical street / mailing address. This format should be capable of storing ALL international addresses.</comment> <add>1.1</add> <log>true</log> + <icon>fa-map-marker</icon> <field> <name>id</name> <uniqueName>address_id</uniqueName> diff --git a/civicrm/xml/schema/Core/CustomGroup.xml b/civicrm/xml/schema/Core/CustomGroup.xml index 1f64dc3b836578c47d9da2729b2fc897c630aed1..e0f424ddfc49ed037432389bf02b1682d6d3bfc5 100644 --- a/civicrm/xml/schema/Core/CustomGroup.xml +++ b/civicrm/xml/schema/Core/CustomGroup.xml @@ -231,4 +231,13 @@ <comment>Is this property public?</comment> <add>4.7</add> </field> + <field> + <name>icon</name> + <title>Icon</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <comment>crm-i icon class</comment> + <add>5.28</add> + </field> </table> diff --git a/civicrm/xml/schema/Core/Domain.xml b/civicrm/xml/schema/Core/Domain.xml index 1dc87d1bc93a049f77f56c95b1166e9795bbbc02..ddb2a0dc6a2fde41068815f620a48d1aa11df71b 100644 --- a/civicrm/xml/schema/Core/Domain.xml +++ b/civicrm/xml/schema/Core/Domain.xml @@ -128,6 +128,7 @@ <type>text</type> <title>Supported Languages</title> <comment>list of locales supported by the current db state (NULL for single-lang install)</comment> + <serialize>SEPARATOR_TRIMMED</serialize> <add>2.1</add> </field> <field> diff --git a/civicrm/xml/schema/Core/Email.xml b/civicrm/xml/schema/Core/Email.xml index 90f7a7bef53230c6642967eca5870a6d5c71f57d..3a07e9e06ab170198bf8dbbb88dbb525ca072d61 100644 --- a/civicrm/xml/schema/Core/Email.xml +++ b/civicrm/xml/schema/Core/Email.xml @@ -7,6 +7,7 @@ <comment>Email information for a specific location.</comment> <add>1.1</add> <log>true</log> + <icon>fa-envelope-o</icon> <field> <name>id</name> <title>Email ID</title> diff --git a/civicrm/xml/schema/Core/IM.xml b/civicrm/xml/schema/Core/IM.xml index 74b0cd8e6c794483e7a28a49afb11cd3d77bc481..f7738d969cbcb3a5ebc102954d0e87c60502beac 100644 --- a/civicrm/xml/schema/Core/IM.xml +++ b/civicrm/xml/schema/Core/IM.xml @@ -7,6 +7,8 @@ <comment>IM information for a specific location.</comment> <add>1.1</add> <log>true</log> + <title>Instant Messaging</title> + <icon>fa-comments-o</icon> <field> <name>id</name> <title>Instant Messenger ID</title> diff --git a/civicrm/xml/schema/Core/Navigation.xml b/civicrm/xml/schema/Core/Navigation.xml index 8a60e331656812d737daac4eb6de596e7b349d13..5de7ea9d379a7ca98191ca087f2e894adb607fa3 100644 --- a/civicrm/xml/schema/Core/Navigation.xml +++ b/civicrm/xml/schema/Core/Navigation.xml @@ -115,10 +115,14 @@ </field> <field> <name>has_separator</name> - <title>Use separator</title> - <type>boolean</type> - <comment>If separator needs to be added after this menu item</comment> + <title>Separator</title> + <type>tinyint</type> + <comment>Place a separator either before or after this menu item.</comment> + <default>0</default> <add>3.0</add> + <pseudoconstant> + <callback>CRM_Core_SelectValues::navigationMenuSeparator</callback> + </pseudoconstant> </field> <field> <name>weight</name> diff --git a/civicrm/xml/schema/Core/Note.xml b/civicrm/xml/schema/Core/Note.xml index 473277f3b553b903809b3976955e9719ffdf607d..a9466da05d9fd976fa995b7f38aba69dbaf3ec79 100644 --- a/civicrm/xml/schema/Core/Note.xml +++ b/civicrm/xml/schema/Core/Note.xml @@ -7,6 +7,7 @@ <comment>Notes can be linked to any object in the application.</comment> <add>1.1</add> <log>true</log> + <icon>fa-sticky-note</icon> <field> <name>id</name> <title>Note ID</title> diff --git a/civicrm/xml/schema/Core/Phone.xml b/civicrm/xml/schema/Core/Phone.xml index f6531dbf7cae8210899178f660d8a9284167564e..453c64db5f5eaf6523e62c34002408ffef1a10be 100644 --- a/civicrm/xml/schema/Core/Phone.xml +++ b/civicrm/xml/schema/Core/Phone.xml @@ -7,6 +7,7 @@ <comment>Phone information for a specific location.</comment> <add>1.1</add> <log>true</log> + <icon>fa-phone</icon> <field> <name>id</name> <title>Phone ID</title> diff --git a/civicrm/xml/schema/Core/Tag.xml b/civicrm/xml/schema/Core/Tag.xml index db74bb8e0196b0472cb8c81e297758b82fdc1bf3..6ea2e8e1e27aae12b9d594540a019df0d8f340a9 100644 --- a/civicrm/xml/schema/Core/Tag.xml +++ b/civicrm/xml/schema/Core/Tag.xml @@ -7,6 +7,7 @@ <comment>Provides support for flat or hierarchical classification of various types of entities (contacts, groups, actions...).</comment> <add>1.1</add> <log>true</log> + <icon>fa-tag</icon> <field> <name>id</name> <title>Tag ID</title> diff --git a/civicrm/xml/schema/Core/Website.xml b/civicrm/xml/schema/Core/Website.xml index 7eda447a1081ef57eb44983ffe2e50d4775de29d..e94f80ecc238390da30c7dfad833e4b677ae6b6d 100644 --- a/civicrm/xml/schema/Core/Website.xml +++ b/civicrm/xml/schema/Core/Website.xml @@ -6,6 +6,7 @@ <name>civicrm_website</name> <comment>Website information for a specific location.</comment> <add>3.2</add> + <icon>fa-desktop</icon> <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Event/Event.xml b/civicrm/xml/schema/Event/Event.xml index 4dd1e206b67a16140693d65ef0851b185e3930b9..d4c9c65299dfa31b57f30e1687622fe03d3e2b7c 100644 --- a/civicrm/xml/schema/Event/Event.xml +++ b/civicrm/xml/schema/Event/Event.xml @@ -6,6 +6,7 @@ <name>civicrm_event</name> <add>1.7</add> <log>true</log> + <icon>fa-calendar</icon> <field> <name>id</name> <type>int unsigned</type> @@ -85,7 +86,7 @@ <type>int unsigned</type> <uniqueName>participant_listing_id</uniqueName> <title>Participant Listing</title> - <default>0</default> + <default>NULL</default> <pseudoconstant> <optionGroupName>participant_listing</optionGroupName> </pseudoconstant> diff --git a/civicrm/xml/schema/Event/Participant.xml b/civicrm/xml/schema/Event/Participant.xml index 96db3000eb9a2c9b4b64ff6e6ff6d78fe6288531..cefaeef59b3ab7c22545bf93effdccbdb88428ce 100644 --- a/civicrm/xml/schema/Event/Participant.xml +++ b/civicrm/xml/schema/Event/Participant.xml @@ -6,6 +6,7 @@ <name>civicrm_participant</name> <add>1.7</add> <log>true</log> + <icon>fa-ticket</icon> <field> <name>id</name> <uniqueName>participant_id</uniqueName> diff --git a/civicrm/xml/schema/Grant/Grant.xml b/civicrm/xml/schema/Grant/Grant.xml index d76e52bd5668e405390bc2b077dc0c604e5e6d71..6e222f8e0d6995c37a57f1aec0e910cf3bd7abaa 100644 --- a/civicrm/xml/schema/Grant/Grant.xml +++ b/civicrm/xml/schema/Grant/Grant.xml @@ -6,6 +6,7 @@ <comment>This table stores information about grants given to a contact.</comment> <add>1.8</add> <log>true</log> + <icon>fa-money</icon> <field> <name>id</name> <type>int unsigned</type> diff --git a/civicrm/xml/schema/Mailing/Mailing.xml b/civicrm/xml/schema/Mailing/Mailing.xml index 975e67d15e1663e1662ee4a10be87c1981f4d722..389b30be964d2d99ef448e7616bbfdbd28f83e5f 100644 --- a/civicrm/xml/schema/Mailing/Mailing.xml +++ b/civicrm/xml/schema/Mailing/Mailing.xml @@ -6,6 +6,7 @@ <name>civicrm_mailing</name> <comment>Stores information about a mailing.</comment> <archive>true</archive> + <icon>fa-envelope-o</icon> <field> <name>id</name> <title>Mailing ID</title> diff --git a/civicrm/xml/schema/Mailing/MailingAB.xml b/civicrm/xml/schema/Mailing/MailingAB.xml index 14d224f98c98ffbe535e770f10ea00a1348135ad..61716bef1e6aa0387ee26f15fd8a6b6c3fa5027b 100644 --- a/civicrm/xml/schema/Mailing/MailingAB.xml +++ b/civicrm/xml/schema/Mailing/MailingAB.xml @@ -129,6 +129,7 @@ <add>4.6</add> <html> <type>Select Date</type> + <formatType>mailing</formatType> </html> </field> </table> diff --git a/civicrm/xml/schema/Member/Membership.xml b/civicrm/xml/schema/Member/Membership.xml index 15d53ab3a2e15dc660b2d891e1bc219ecc62bf01..e0f35ffb3afde61e2498249b03409837a0246cbd 100644 --- a/civicrm/xml/schema/Member/Membership.xml +++ b/civicrm/xml/schema/Member/Membership.xml @@ -7,6 +7,7 @@ <comment>Contact Membership records.</comment> <add>1.5</add> <log>true</log> + <icon>fa-id-badge</icon> <field> <name>id</name> <uniqueName>membership_id</uniqueName> @@ -180,6 +181,7 @@ <add>4.7</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> </field> <field> diff --git a/civicrm/xml/schema/Pledge/Pledge.xml b/civicrm/xml/schema/Pledge/Pledge.xml index 7fd1cf35cc2c5c8e74100cafb2d7f1d0c11de829..39943c58efa93b78611d6b290c2cbcb2ae5834df 100644 --- a/civicrm/xml/schema/Pledge/Pledge.xml +++ b/civicrm/xml/schema/Pledge/Pledge.xml @@ -5,6 +5,7 @@ <name>civicrm_pledge</name> <add>2.1</add> <log>true</log> + <icon>fa-paper-plane</icon> <field> <name>id</name> <uniqueName>pledge_id</uniqueName> @@ -201,6 +202,7 @@ <add>2.1</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> <uniqueName>pledge_start_date</uniqueName> <uniqueTitle>Payments Start Date</uniqueTitle> @@ -217,6 +219,7 @@ <add>2.1</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> </field> <field> @@ -227,6 +230,7 @@ <add>2.1</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> </field> <field> @@ -244,6 +248,7 @@ <add>2.1</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> </field> <field> @@ -255,6 +260,7 @@ <add>2.1</add> <html> <type>Select Date</type> + <formatType>activityDate</formatType> </html> <uniqueName>pledge_end_date</uniqueName> <uniqueTitle>Payments Ended Date</uniqueTitle> diff --git a/civicrm/xml/schema/Queue/QueueItem.xml b/civicrm/xml/schema/Queue/QueueItem.xml index e67bca990a07ec5b4b59cee1f94f5f83a09eb685..f5e68e3989c8696ca122f6f64af3eee3d3259c8e 100644 --- a/civicrm/xml/schema/Queue/QueueItem.xml +++ b/civicrm/xml/schema/Queue/QueueItem.xml @@ -48,6 +48,7 @@ <required>true</required> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> </field> <field> @@ -57,6 +58,7 @@ <comment>date on which this job becomes available; null if ASAP</comment> <html> <type>Select Date</type> + <formatType>activityDateTime</formatType> </html> </field> diff --git a/civicrm/xml/schema/Report/ReportInstance.xml b/civicrm/xml/schema/Report/ReportInstance.xml index 8811719e4a28acfa1dfd0c75941afbc48712c760..028c6fb722e8612d0149ced4cc1e666cd1b6eac9 100644 --- a/civicrm/xml/schema/Report/ReportInstance.xml +++ b/civicrm/xml/schema/Report/ReportInstance.xml @@ -6,6 +6,8 @@ <name>civicrm_report_instance</name> <comment>Users can save their report instance and put in a cron tab etc.</comment> <add>2.2</add> + <title>Reports</title> + <icon>fa-bar-chart</icon> <field> <name>id</name> <title>Report Instance ID</title> diff --git a/civicrm/xml/templates/dao.tpl b/civicrm/xml/templates/dao.tpl index 3fb9b9772a4c6f51f42ee00434d5de6e331d2dde..3a0c51e328a14abcd315670d808e7bdb143ceb06 100644 --- a/civicrm/xml/templates/dao.tpl +++ b/civicrm/xml/templates/dao.tpl @@ -20,6 +20,14 @@ class {$table.className} extends CRM_Core_DAO {ldelim} */ public static $_tableName = '{$table.name}'; + {if $table.icon} + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = '{$table.icon}'; + {/if} /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * @@ -48,6 +56,15 @@ class {$table.className} extends CRM_Core_DAO {ldelim} parent::__construct( ); {rdelim} + /** + * Returns localized title of this entity. + */ + public static function getEntityTitle() {ldelim} + return ts('{$table.title}'); + {rdelim} + + + {if $table.foreignKey || $table.dynamicForeignKey} /** * Returns foreign keys and entity references. diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index bc63dfd7c700ef432e37f73f58c174a5412cbeb5..a33634d10543e2a863f800b4c8d827989fd7ba9e 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.27.4</version_no> + <version_no>5.28.0</version_no> </version> diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php index 82847ef7c9aa50e1221e679a0a57764b3955fe89..0454a6a1c94744ab5b5ba547ce59e9815b17ecec 100644 --- a/includes/civicrm.basepage.php +++ b/includes/civicrm.basepage.php @@ -596,8 +596,18 @@ class CiviCRM_For_WordPress_Basepage { */ public function basepage_template( $template ) { - // Get template filename - $template_name = basename( $template ); + // Get template path relative to the theme's root directory. + $template_name = str_replace( trailingslashit( get_stylesheet_directory() ), '', $template ); + + // If the above fails, try parent theme. + if ( $template_name == $template ) { + $template_name = str_replace( trailingslashit( get_template_directory() ), '', $template ); + } + + // Bail in the unlikely event that the template name has not been found. + if ( $template_name == $template ) { + return $template; + } // Use the provided page template, but allow overrides. $page_template = locate_template( array( @@ -618,12 +628,12 @@ class CiviCRM_For_WordPress_Basepage { ) ); - // If not homepage and template is found + // If not homepage and template is found. if ( '' != $page_template && !is_front_page() ) { return $page_template; } - // Find homepage the template + // Find homepage the template. $home_template = locate_template( array( /** @@ -648,12 +658,12 @@ class CiviCRM_For_WordPress_Basepage { ) ); - // Use it if found + // Use it if found. if ( '' != $home_template ) { return $home_template; } - // Fall back to provided template + // Fall back to provided template. return $template; } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index ae5a224392df84905e21c04a21f8c84a7fc0f429..49b4a593f8d55a78bf24750b03be745325ea4beb 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,7 +6,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" beStrictAboutTestsThatDoNotTestAnything="false" bootstrap="tests/phpunit/bootstrap.php" > diff --git a/wp-cli/civicrm.php b/wp-cli/civicrm.php index 1b4c2561e4d3df101828b244325857fc232e765a..d8ecde858ef873765cf7bf445aeb7a806b34b782 100644 --- a/wp-cli/civicrm.php +++ b/wp-cli/civicrm.php @@ -1046,6 +1046,10 @@ if ( ! defined( 'CIVICRM_WPCLI_LOADED' ) ) { civicrm_initialize(); + if ( ! defined( 'CIVICRM_UPGRADE_ACTIVE' ) ) { + define( 'CIVICRM_UPGRADE_ACTIVE', 1 ); + } + if ( class_exists( 'CRM_Upgrade_Headless' ) ) { # Note: CRM_Upgrade_Headless introduced in 4.2 -- at the same time as class auto-loading try {