Eileen has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/369830 )
Change subject: Omnimail::omnigroupmember.get job: add slow download handling.
......................................................................
Omnimail::omnigroupmember.get job: add slow download handling.
This adds handling to for when the download takes a while, same as the
recipient job.
Bug T160949
Change-Id: Id65ab87235de86000393e66b0f7e7679692115bf
---
M
sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnigroupmembers.php
M
sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Get.php
M
sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php
M
sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php
4 files changed, 152 insertions(+), 25 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/crm
refs/changes/30/369830/1
diff --git
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnigroupmembers.php
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnigroupmembers.php
index fd9a6b7..b5007ab 100644
---
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnigroupmembers.php
+++
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnigroupmembers.php
@@ -66,7 +66,7 @@
$params['mail_provider'] => array('last_timestamp' =>
$endTimestamp),
),
));
- return $data;
+ return $this->formatResult($params, $data);
}
else {
sleep($settings['omnimail_job_retry_interval']);
@@ -80,4 +80,34 @@
}
+ /**
+ * @param $params
+ * @param $result
+ * @return array
+ */
+ public function formatResult($params, $result) {
+ $options = _civicrm_api3_get_options_from_params($params);
+ $values = array();
+ foreach ($result as $groupMember) {
+ $value = array(
+ 'email' => (string) $groupMember->getEmail(),
+ 'is_opt_out' => (string) $groupMember->isOptOut(),
+ 'opt_in_date' => (string) $groupMember->getOptInIsoDateTime(),
+ 'opt_in_source' => (string) $groupMember->getOptInSource(),
+ 'opt_out_source' => (string) $groupMember->getOptOutSource(),
+ 'opt_out_date' => (string) $groupMember->getOptOutIsoDateTime(),
+ 'contact_id' => (string) $groupMember->getContactReference(),
+ );
+ foreach ($params['custom_data_map'] as $fieldName => $dataKey) {
+ $value[$fieldName] = (string) $groupMember->getCustomData($dataKey);
+ }
+ $values[] = $value;
+ if ($options['limit'] > 0 && count($values) === (int) $options['limit'])
{
+ break;
+ }
+ }
+ return $values;
+ }
+
+
}
diff --git
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Get.php
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Get.php
index 0281f62..8e114d8 100644
---
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Get.php
+++
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Get.php
@@ -15,27 +15,7 @@
*/
function civicrm_api3_omnigroupmember_get($params) {
$job = new CRM_Omnimail_Omnigroupmembers();
- $result = $job->getResult($params);
- $options = _civicrm_api3_get_options_from_params($params);
- $values = array();
- foreach ($result as $groupMember) {
- $value = array(
- 'email' => (string) $groupMember->getEmail(),
- 'is_opt_out' => (string) $groupMember->isOptOut(),
- 'opt_in_date' => (string) $groupMember->getOptInIsoDateTime(),
- 'opt_in_source' => (string) $groupMember->getOptInSource(),
- 'opt_out_source' => (string) $groupMember->getOptOutSource(),
- 'opt_out_date' => (string) $groupMember->getOptOutIsoDateTime(),
- 'contact_id' => (string) $groupMember->getContactReference(),
- );
- foreach ($params['custom_data_map'] as $fieldName => $dataKey) {
- $value[$fieldName] = (string) $groupMember->getCustomData($dataKey);
- }
- $values[] = $value;
- if ($options['limit'] > 0 && count($values) === (int) $options['limit']) {
- break;
- }
- }
+ $values = $job->getResult($params);
return civicrm_api3_create_success($values);
}
diff --git
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php
index 5fcc26f..59e0cd7 100644
---
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php
+++
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php
@@ -14,11 +14,32 @@
* @return array
*/
function civicrm_api3_omnigroupmember_load($params) {
- $contacts = civicrm_api3('Omnigroupmember', 'get', $params);
+ $omnimail = new CRM_Omnimail_Omnigroupmembers($params);
+ if (!isset($params['options']) || !isset($params['options'])) {
+ $params['options'] = 0;
+ }
+ try {
+ $job = new CRM_Omnimail_Omnigroupmembers();
+ $contacts = $job->getResult($params);
+ }
+ catch (CRM_Omnimail_IncompleteDownloadException $e) {
+ $jobSettings = $omnimail->getJobSettings($params);
+ civicrm_api3('Setting', 'create', array(
+ 'omnimail_omnigroupmembers_load' => array(
+ $params['mail_provider'] => array(
+ 'last_timestamp' => $jobSettings['last_timestamp'],
+ 'retrieval_parameters' => $e->getRetrievalParameters(),
+ 'progress_end_date' => $e->getEndTimestamp(),
+ ),
+ ),
+ ));
+ return civicrm_api3_create_success(1);
+ }
+
$defaultLocationType = CRM_Core_BAO_LocationType::getDefault();
$locationTypeID = $defaultLocationType->id;
- foreach ($contacts['values'] as $groupMember) {
+ foreach ($contacts as $groupMember) {
if (!empty($groupMember['email']) && !civicrm_api3('email', 'getcount',
array('email' => $groupMember['email']))) {
// If there is already a contact with this email we will skip for now.
// It might that we want to create duplicates, update contacts or do
other actions later
@@ -126,7 +147,6 @@
);
$params['start_date'] = array(
'title' => ts('Date to fetch from'),
- 'api.default' => '3 days ago',
'type' => CRM_Utils_Type::T_TIMESTAMP,
);
$params['end_date'] = array(
@@ -141,5 +161,22 @@
$params['retrieval_parameters'] = array(
'title' => ts('Additional information for retrieval of pre-stored
requests'),
);
+ $params['custom_data_map'] = array(
+ 'type' => CRM_Utils_Type::T_STRING,
+ 'title' => ts('Custom fields map'),
+ 'description' => array('custom mappings pertaining to the mail provider
fields'),
+ 'api.default' => array(
+ 'language' => 'rml_language',
+ 'source' => 'rml_source',
+ 'created_date' => 'rml_submitdate',
+ 'country' => 'rml_country',
+ ),
+ );
+ $params['is_opt_in_only'] = array(
+ 'type' => CRM_Utils_Type::T_BOOLEAN,
+ 'title' => ts('Opted in contacts only'),
+ 'description' => array('Restrict to opted in contacts'),
+ 'api.default' => 1,
+ );
}
diff --git
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php
index 27c9c94..a4752a0 100644
---
a/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php
+++
b/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php
@@ -66,6 +66,75 @@
}
+ /**
+ * Test when download does not complete in time.
+ */
+ public function testOmnigroupmemberLoadIncomplete() {
+ civicrm_api3('Setting', 'create', array(
+ 'omnimail_omnigroupmembers_load' => array(
+ 'Silverpop' => array('last_timestamp' => '1487890800'),
+ ),
+ ));
+ $responses = array(
+ file_get_contents(__DIR__ . '/Responses/ExportListResponse.txt'),
+ );
+ for ($i = 0; $i < 15; $i++) {
+ $responses[] = file_get_contents(__DIR__ .
'/Responses/JobStatusWaitingResponse.txt');
+ }
+ civicrm_api3('setting', 'create', array('omnimail_job_retry_interval' =>
0.01));
+ $group = civicrm_api3('Group', 'create', array('name' => 'Omnimailers',
'title' => 'Omni'));
+
+ civicrm_api3('Omnigroupmember', 'load', array('mail_provider' =>
'Silverpop', 'username' => 'Donald', 'password' => 'Duck', 'client' =>
$this->getMockRequest($responses), 'group_identifier' => 123, 'group_id' =>
$group['id'], 'start_date' => '2017-02-20'));
+
+ $groupMembers = civicrm_api3('GroupContact', 'get', array('group_id' =>
$group['id']));
+ $this->assertEquals(0, $groupMembers['count']);
+
+ $this->assertEquals(array(
+ 'last_timestamp' => '1487890800',
+ 'retrieval_parameters' => array(
+ 'jobId' => '101719657',
+ 'filePath' => '/download/20170509_noCID - All - Jul 5 2017 06-27-45
AM.csv',
+ ),
+ 'progress_end_date' => '1488150000',
+ ), $this->getJobSettings());
+ }
+
+ /**
+ * After completing an incomplete download the end date should be the
progress end date.
+ */
+ public function testCompleteIncomplete() {
+ $client = $this->setupSuccessfulDownloadClient();
+ $group = civicrm_api3('Group', 'create', array('name' => 'Omnimailers',
'title' => 'Omni'));
+ civicrm_api3('setting', 'create', array(
+ 'omnimail_omnigroupmembers_load' => array(
+ 'Silverpop' => array(
+ 'last_timestamp' => '1487890800',
+ 'retrieval_parameters' => array(
+ 'jobId' => '101719657',
+ 'filePath' => '/download/20170509_noCID - All - Jul 5 2017
06-27-45 AM.csv',
+ ),
+ 'progress_end_date' => '1488150000',
+ ),
+ ),
+ ));
+
+ civicrm_api3('Omnigroupmember', 'load', array(
+ 'mail_provider' => 'Silverpop',
+ 'username' => 'Shrek',
+ 'password' => 'Fiona',
+ 'options' => array('limit' => 3),
+ 'client' => $client,
+ 'group_identifier' => 123,
+ 'group_id' => $group['id'],
+ ));
+
+ $groupMembers = civicrm_api3('GroupContact', 'get', array('group_id' =>
$group['id']));
+ $this->assertEquals(3, $groupMembers['count']);
+
+ $this->assertEquals(array(
+ 'last_timestamp' => '1488495600',
+ ), $this->getJobSettings(array('mail_provider' => 'Silverpop')));
+ }
/**
* @return \GuzzleHttp\Client
@@ -82,4 +151,15 @@
$client = $this->getMockRequest($responses);
return $client;
}
+
+ /**
+ * Get job settings.
+ *
+ * @return array
+ */
+ public function getJobSettings() {
+ $omnimail = new CRM_Omnimail_Omnigroupmembers();
+ return $omnimail->getJobSettings(array('mail_provider' => 'Silverpop'));
+ }
+
}
--
To view, visit https://gerrit.wikimedia.org/r/369830
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id65ab87235de86000393e66b0f7e7679692115bf
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/crm
Gerrit-Branch: master
Gerrit-Owner: Eileen <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits