Eileen has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/384906 )
Change subject: WIP Switch Omnimail job progress tracking to it's own table. ...................................................................... WIP Switch Omnimail job progress tracking to it's own table. Turns out we have logging enabled on the civicrm_settings table which makes it really inapproprite We could have stopped logging on that table but it feels like we might someday want to do forensics on a setting Bug: T177451 Change-Id: I7f795f38c34e6d992dd42bd989479fac25225294 --- A sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/BAO/OmnimailJobProgress.php A sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/DAO/OmnimailJobProgress.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnimail.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Upgrader.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/Omnigroupmember/Load.php A sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/OmnimailJobProgress.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/omnimail.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/sql/omnimail_install.sql M sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnigroupmemberLoadTest.php M sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnimailBaseTestClass.php A sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.entityType.php A sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.xml 12 files changed, 507 insertions(+), 36 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/crm refs/changes/06/384906/1 diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/BAO/OmnimailJobProgress.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/BAO/OmnimailJobProgress.php new file mode 100644 index 0000000..fdc3049 --- /dev/null +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/BAO/OmnimailJobProgress.php @@ -0,0 +1,25 @@ +<?php + +class CRM_Omnimail_BAO_OmnimailJobProgress extends CRM_Omnimail_DAO_OmnimailJobProgress { + + /** + * Create a new OmnimailJobProgress based on array-data + * + * @param array $params key-value pairs + * @return CRM_Omnimail_DAO_OmnimailJobProgress + * + * public static function create($params) { + * $className = 'CRM_Omnimail_DAO_OmnimailJobProgress'; + * $entityName = 'OmnimailJobProgress'; + * $hook = empty($params['id']) ? 'create' : 'edit'; + * +* CRM_Utils_Hook::pre($hook, $entityName, CRM_Utils_Array::value('id', $params), $params); + * $instance = new $className(); + * $instance->copyValues($params); + * $instance->save(); + * CRM_Utils_Hook::post($hook, $entityName, $instance->id, $instance); + * +* return $instance; + * } */ + +} diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/DAO/OmnimailJobProgress.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/DAO/OmnimailJobProgress.php new file mode 100644 index 0000000..3d1063c --- /dev/null +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/DAO/OmnimailJobProgress.php @@ -0,0 +1,266 @@ +<?php +/* ++--------------------------------------------------------------------+ +| CiviCRM version 4.7 | ++--------------------------------------------------------------------+ +| Copyright CiviCRM LLC (c) 2004-2017 | ++--------------------------------------------------------------------+ +| This file is a part of CiviCRM. | +| | +| CiviCRM is free software; you can copy, modify, and distribute it | +| under the terms of the GNU Affero General Public License | +| Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +| | +| CiviCRM is distributed in the hope that it will be useful, but | +| WITHOUT ANY WARRANTY; without even the implied warranty of | +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | +| See the GNU Affero General Public License for more details. | +| | +| You should have received a copy of the GNU Affero General Public | +| License and the CiviCRM Licensing Exception along | +| with this program; if not, contact CiviCRM LLC | +| at info[AT]civicrm[DOT]org. If you have questions about the | +| GNU Affero General Public License or the licensing of CiviCRM, | +| see the CiviCRM license FAQ at http://civicrm.org/licensing | ++--------------------------------------------------------------------+ +*/ +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2017 + * + * Generated from xml/schema/CRM/Omnimail/OmnimailJobProgress.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:9b5f9397769a4b1c942fcf3181cb8b17) + */ +require_once 'CRM/Core/DAO.php'; +require_once 'CRM/Utils/Type.php'; +/** + * CRM_Omnimail_DAO_OmnimailJobProgress constructor. + */ +class CRM_Omnimail_DAO_OmnimailJobProgress extends CRM_Core_DAO { + /** + * Static instance to hold the table name. + * + * @var string + */ + static $_tableName = 'civicrm_omnimail_job_progress'; + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var boolean + */ + static $_log = false; + /** + * Unique OmnimailJobProgress ID + * + * @var int unsigned + */ + public $id; + /** + * Mailing provider name + * + * @var string + */ + public $mailing_provider; + /** + * job name + * + * @var string + */ + public $job; + /** + * optional suffix to disambiguate the job + * + * @var string + */ + public $job_identifier; + /** + * Mailing provider name + * + * @var timestamp + */ + public $last_timestamp; + /** + * End timestamp of current retrieval + * + * @var timestamp + */ + public $progress_end_timestamp; + /** + * json copy of any paramters that need to be passed to the provider. + * + * @var string + */ + public $retrieval_parameters; + /** + * How many lines have been processed + * + * @var int unsigned + */ + public $offset; + /** + * Class constructor. + */ + function __construct() { + $this->__table = 'civicrm_omnimail_job_progress'; + parent::__construct(); + } + /** + * Returns all the column names of this table + * + * @return array + */ + static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = array( + 'id' => array( + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'description' => 'Unique OmnimailJobProgress ID', + 'required' => true, + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'mailing_provider' => array( + 'name' => 'mailing_provider', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Mailing Provider') , + 'description' => 'Mailing provider name', + 'maxlength' => 32, + 'size' => CRM_Utils_Type::MEDIUM, + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'job' => array( + 'name' => 'job', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Job') , + 'description' => 'job name', + 'maxlength' => 32, + 'size' => CRM_Utils_Type::MEDIUM, + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'job_identifier' => array( + 'name' => 'job_identifier', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Job Identifier') , + 'description' => 'optional suffix to disambiguate the job', + 'maxlength' => 32, + 'size' => CRM_Utils_Type::MEDIUM, + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'last_timestamp' => array( + 'name' => 'last_timestamp', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Last Timestamp') , + 'description' => 'Mailing provider name', + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'progress_end_timestamp' => array( + 'name' => 'progress_end_timestamp', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Progress End Timestamp') , + 'description' => 'End timestamp of current retrieval', + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'retrieval_parameters' => array( + 'name' => 'retrieval_parameters', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Retrieval Parameters') , + 'description' => 'json copy of any paramters that need to be passed to the provider.', + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + 'offset' => array( + 'name' => 'offset', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Offset') , + 'description' => 'How many lines have been processed', + 'table_name' => 'civicrm_omnimail_job_progress', + 'entity' => 'OmnimailJobProgress', + 'bao' => '_OmnimailJobProgress', + 'localizable' => 0, + ) , + ); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + /** + * Return a mapping from field-name to the corresponding key (as used in fields()). + * + * @return array + * Array(string $name => string $uniqueName). + */ + static function &fieldKeys() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + /** + * Returns the names of this table + * + * @return string + */ + static function getTableName() { + return self::$_tableName; + } + /** + * Returns if this table needs to be logged + * + * @return boolean + */ + function getLog() { + return self::$_log; + } + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + static function &import($prefix = false) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'omnimail_job_progress', $prefix, array()); + return $r; + } + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + static function &export($prefix = false) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'omnimail_job_progress', $prefix, array()); + return $r; + } + /** + * Returns the list of indices + */ + public static function indices($localize = TRUE) { + $indices = array(); + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } +} diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnimail.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnimail.php index a6a5174..c359b76 100644 --- a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnimail.php +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Omnimail.php @@ -63,7 +63,7 @@ * @throws \API_Exception */ public function __construct($params) { - $this->job_suffix = !empty($params['job_suffix']) ? $params['job_suffix'] : ''; + $this->job_suffix = !empty($params['job_suffix']) ? $params['job_suffix'] : NULL; $this->mail_provider = $params['mail_provider']; $this->settings = CRM_Omnimail_Helper::getSettings(); $this->setJobSettings($params); @@ -163,10 +163,35 @@ } /** - * @param $params + * Setter for job settings. + * + * @param array $params + * Api input parameters. */ protected function setJobSettings($params) { - $this->jobSettings = CRM_Utils_Array::value($params['mail_provider'] . $this->job_suffix, $this->settings['omnimail_' . $this->job . '_load'], array()); + $this->jobSettings = array( + 'mailing_provider' => $params['mail_provider'], + 'job' => 'omnimail_' . $this->job . '_load', + 'job_identifier' => $this->job_suffix ? : NULL, + ); + $savedSettings = civicrm_api3('OmnimailJobProgress', 'get', $this->jobSettings); + + if ($savedSettings['count']) { + foreach ($savedSettings['values'] as $savedSetting) { + // filter for job_identifier since NULL will not have been respected. + if (CRM_Utils_Array::value('job_identifier', $savedSetting) === $this->job_suffix) { + foreach (array('last_timestamp', 'progress_end_timestamp') as $dateField) { + if (isset($savedSetting[$dateField])) { + $savedSetting[$dateField] = strtotime($savedSetting[$dateField]); + } + } + if (isset($savedSetting['retrieval_parameters'])) { + $savedSetting['retrieval_parameters'] = json_decode($savedSetting['retrieval_parameters'], TRUE); + } + $this->jobSettings = $savedSetting; + } + } + } } /** @@ -175,12 +200,13 @@ * @param array $setting */ function saveJobSetting($setting) { - $key = 'omnimail_' . $this->job . '_load'; - civicrm_api3('Setting', 'create', array( - $key => array_merge($this->settings[$key], array( - $this->mail_provider . $this->job_suffix => $setting, - )) - )); + $this->jobSettings = $setting = array_merge($this->jobSettings, $setting); + foreach (array('last_timestamp', 'progress_end_timestamp') as $dateField) { + if (isset($setting[$dateField])) { + $setting[$dateField] = date('Y-m-d H:i:s', $setting[$dateField]); + } + } + civicrm_api3('OmnimailJobProgress', 'create', $setting); } } \ No newline at end of file diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Upgrader.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Upgrader.php index 76c8f16..4bcb3a2 100644 --- a/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Upgrader.php +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/CRM/Omnimail/Upgrader.php @@ -53,19 +53,49 @@ public function disable() { CRM_Core_DAO::executeQuery('UPDATE foo SET is_active = 0 WHERE bar = "whiz"'); } + */ /** - * Example: Run a couple simple queries. + * Convert setting tracking to table. * * @return TRUE on success * @throws Exception - * - public function upgrade_4200() { - $this->ctx->log->info('Applying update 4200'); - CRM_Core_DAO::executeQuery('UPDATE foo SET bar = "whiz"'); - CRM_Core_DAO::executeQuery('DELETE FROM bang WHERE willy = wonka(2)'); + */ + public function upgrade_1000() { + $this->ctx->log->info('Applying update 1000'); + CRM_Core_DAO::executeQuery(' + CREATE TABLE civicrm_omnimail_job_progress ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `mailing_provider` VARCHAR(32) NOT NULL, + `job` VARCHAR(32) NULL, + `job_identifier` VARCHAR(32) NULL, + `last_timestamp` timestamp NULL, + `progress_end_timestamp` timestamp NULL, + `retrieval_parameters` VARCHAR(255) NULL, + `offset` INT(10) unsigned, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_unicode_ci'); + + foreach (array('omnimail_omnigroupmembers_load', 'omnimail_omnirecipient_load') as $job) { + $settings = civicrm_api3('Setting', 'get', array('return' => $job)); + foreach ($settings['values'][CRM_Core_Config::domainId()][$job] as $mailingProvider => $setting) { + $mailingProviderParts = explode('_', $mailingProvider); + $jobIdentifier = isset($mailingProviderParts[1]) ? "'" . $mailingProviderParts[1] . "'" : 'NULL'; + $progressEndTimestamp = isset($setting['progress_end_date']) ? 'FROM_UNIXTIME(' . $setting['progress_end_date'] . ')' : 'NULL'; + $retrievalParameters = isset($setting['retrieval_parameters']) ? "'" . json_encode($setting['retrieval_parameters']) . "'" : 'NULL'; + $offset = isset($setting['offset']) ? $setting['offset'] : 0; + CRM_Core_DAO::executeQuery( + "INSERT INTO civicrm_omnimail_job_progress + (`mailing_provider`, `job`, `job_identifier`, `last_timestamp`, `progress_end_timestamp`, `retrieval_parameters`, `offset`) + values ('{$mailingProviderParts[0]}', '{$job}', $jobIdentifier, FROM_UNIXTIME( {$setting['last_timestamp']} ), $progressEndTimestamp, $retrievalParameters, $offset) + " + ); + } + } + return TRUE; - } // */ + } + /* /** 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 e0e8b7f..782f5f6 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 @@ -28,9 +28,8 @@ } catch (CRM_Omnimail_IncompleteDownloadException $e) { $job->saveJobSetting(array( - 'last_timestamp' => $jobSettings['last_timestamp'], 'retrieval_parameters' => $e->getRetrievalParameters(), - 'progress_end_date' => $e->getEndTimestamp(), + 'progress_end_timestamp' => $e->getEndTimestamp(), 'offset' => 0, )); return civicrm_api3_create_success(1); @@ -48,7 +47,7 @@ $job->saveJobSetting(array( 'last_timestamp' => $jobSettings['last_timestamp'], 'retrieval_parameters' => $job->getRetrievalParameters(), - 'progress_end_date' => $job->endTimeStamp, + 'progress_end_timestamp' => $job->endTimeStamp, 'offset' => $offset + $count, )); // Do this here - ie. before processing a new row rather than at the end of the last row diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/OmnimailJobProgress.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/OmnimailJobProgress.php new file mode 100644 index 0000000..1aa1835 --- /dev/null +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/api/v3/OmnimailJobProgress.php @@ -0,0 +1,37 @@ +<?php + +/** + * OmnimailJobProgress.create API + * + * @param array $params + * @return array API result descriptor + * @throws API_Exception + */ +function civicrm_api3_omnimail_job_progress_create($params) { + if (is_array($params['retrieval_parameters'])) { + $params['retrieval_parameters'] = json_encode($params['retrieval_parameters']); + } + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); +} + +/** + * OmnimailJobProgress.delete API + * + * @param array $params + * @return array API result descriptor + * @throws API_Exception + */ +function civicrm_api3_omnimail_job_progress_delete($params) { + return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params); +} + +/** + * OmnimailJobProgress.get API + * + * @param array $params + * @return array API result descriptor + * @throws API_Exception + */ +function civicrm_api3_omnimail_job_progress_get($params) { + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); +} diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/omnimail.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/omnimail.php index bc4e479..77bc511 100644 --- a/sites/default/civicrm/extensions/org.wikimedia.omnimail/omnimail.php +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/omnimail.php @@ -103,6 +103,11 @@ 'class' => 'CRM_Omnimail_DAO_MailingProviderData', 'table' => 'civicrm_maiing_provider_data', ); + $entityTypes['CRM_Omnimail_DAO_OmnimailJobProgress'] = array ( + 'name' => 'OmnimailJobProgress', + 'class' => 'CRM_Omnimail_DAO_OmnimailJobProgress', + 'table' => 'civicrm_omnimail_job_progress', + ); } /** diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/sql/omnimail_install.sql b/sites/default/civicrm/extensions/org.wikimedia.omnimail/sql/omnimail_install.sql index 75bc2fe..7357c50 100644 --- a/sites/default/civicrm/extensions/org.wikimedia.omnimail/sql/omnimail_install.sql +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/sql/omnimail_install.sql @@ -14,3 +14,15 @@ KEY `event_type` (`event_type`), KEY `recipient_action_datetime` (`recipient_action_datetime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE civicrm_omnimail_job_progress ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `mailing_provider` VARCHAR(32) NOT NULL, + `job` VARCHAR(32) NULL, + `job_identifier` VARCHAR(32) NULL, + `last_timestamp` timestamp NULL, + `progress_end_timestamp` timestamp NULL, + `retrieval_parameters` VARCHAR(255) NULL, + `offset` INT(10) unsigned, + PRIMARY KEY (`id`) +) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_unicode_ci; 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 a2a9876..9777eb4 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 @@ -98,12 +98,12 @@ $this->assertEquals(array( 'last_timestamp' => '1487890800', - 'progress_end_date' => '1488495600', 'offset' => 2, 'retrieval_parameters' => array( 'jobId' => '101719657', 'filePath' => '/download/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv', ), + 'progress_end_timestamp' => '1488495600', ), $this->getJobSettings()); } @@ -112,10 +112,8 @@ * 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'), - ), + $this->createSetting('omnimail_omnigroupmembers_load', array( + 'Silverpop' => array('last_timestamp' => date('Y-m-d H:i:s', '1487890800')), )); $responses = array( file_get_contents(__DIR__ . '/Responses/ExportListResponse.txt'), @@ -137,7 +135,7 @@ 'jobId' => '101719657', 'filePath' => '/download/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv', ), - 'progress_end_date' => '1488495600', + 'progress_end_timestamp' => '1488495600', 'offset' => 0, ), $this->getJobSettings()); $this->cleanupGroup($group); @@ -180,7 +178,7 @@ 'jobId' => '101719657', 'filePath' => '/download/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv', ), - 'progress_end_date' => '1488495600', + 'progress_end_timestamp' => '1488495600', 'offset' => 0, ), $this->getJobSettings(array('mail_provider' => 'Silverpop', 'job_suffix' => '_woot'))); $this->cleanupGroup($group); @@ -200,7 +198,7 @@ 'jobId' => '101719657', 'filePath' => '/download/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv', ), - 'progress_end_date' => '1488150000', + 'progress_end_timestamp' => '1488150000', ), ), )); @@ -238,7 +236,7 @@ copy(__DIR__ . '/Responses/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv', sys_get_temp_dir() . '/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv'); fopen(sys_get_temp_dir() . '/20170509_noCID - All - Jul 5 2017 06-27-45 AM.csv.complete', 'c'); if ($isUpdateSetting) { - $this->createSetting('omnimail_omnigroupmembers_load', array('Silverpop' => array('last_timestamp' => '1487890800'))); + $this->createSetting('omnimail_omnigroupmembers_load', array('Silverpop' => array('last_timestamp' => date('YmdHis', '1487890800')))); } $client = $this->getMockRequest($responses); @@ -254,7 +252,9 @@ */ public function getJobSettings($params = array('mail_provider' => 'Silverpop')) { $omnimail = new CRM_Omnimail_Omnigroupmembers($params); - return $omnimail->getJobSettings(); + $result = $omnimail->getJobSettings(); + unset($result['id'], $result['mailing_provider'], $result['job'], $result['job_identifier']); + return $result; } /** diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnimailBaseTestClass.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnimailBaseTestClass.php index 120d607..6aa9571 100644 --- a/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnimailBaseTestClass.php +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/tests/phpunit/OmnimailBaseTestClass.php @@ -76,14 +76,15 @@ * @param $value */ protected function createSetting($setting, $value) { + foreach ($value as $key => $v) { + $values = array_merge(array('mailing_provider' => $key), $v); + } + $values['job'] = $setting; try { - civicrm_api3('Setting', 'create', array( - 'debug' => 1, - $setting => $value, - )); - } catch (CiviCRM_API3_Exception $e) { - $settings = \Civi\Core\SettingsMetadata::getMetadata(); - $this->fail(print_r(array_keys($settings), 1), $e->getMessage() . $e->getTraceAsString() . print_r($e->getExtraParams(), TRUE)); + civicrm_api3('OmnimailJobProgress', 'create', $values); + } + catch (CiviCRM_API3_Exception $e) { + $this->fail(print_r($values, 1), $e->getMessage() . $e->getTraceAsString() . print_r($e->getExtraParams(), TRUE)); } } } \ No newline at end of file diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.entityType.php b/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.entityType.php new file mode 100644 index 0000000..7dc8562 --- /dev/null +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.entityType.php @@ -0,0 +1,11 @@ +<?php +// This file declares a new entity type. For more details, see "hook_civicrm_entityTypes" at: +// http://wiki.civicrm.org/confluence/display/CRMDOC/Hook+Reference +return array ( + 0 => + array ( + 'name' => 'OmnimailJobProgress', + 'class' => '_OmnimailJobProgress', + 'table' => 'civicrm_omnimail_job_progress', + ), +); diff --git a/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.xml b/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.xml new file mode 100644 index 0000000..109674f --- /dev/null +++ b/sites/default/civicrm/extensions/org.wikimedia.omnimail/xml/schema/CRM/Omnimail/OmnimailJobProgress.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Omnimail</base> + <class>OmnimailJobProgress</class> + <name>civicrm_omnimail_job_progress</name> + <comment>FIXME</comment> + <log>false</log> + + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique OmnimailJobProgress ID</comment> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>mailing_provider</name> + <type>varchar</type> + <comment>Mailing provider name</comment> + <length>32</length> + </field> + <field> + <name>job</name> + <type>varchar</type> + <comment>job name</comment> + <length>32</length> + </field> + <field> + <name>job_identifier</name> + <type>varchar</type> + <comment>optional suffix to disambiguate the job</comment> + <length>32</length> + </field> + <field> + <name>last_timestamp</name> + <type>timestamp</type> + <comment>Mailing provider name</comment> + </field> + <field> + <name>progress_end_timestamp</name> + <type>timestamp</type> + <comment>End timestamp of current retrieval</comment> + </field> + <field> + <name>retrieval_parameters</name> + <type>varchar</type> + <comment>json copy of any paramters that need to be passed to the provider.</comment> + <length>255</length> + </field> + <field> + <name>offset</name> + <type>int unsigned</type> + <comment>How many lines have been processed</comment> + </field> +</table> -- To view, visit https://gerrit.wikimedia.org/r/384906 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7f795f38c34e6d992dd42bd989479fac25225294 Gerrit-PatchSet: 1 Gerrit-Project: wikimedia/fundraising/crm Gerrit-Branch: master Gerrit-Owner: Eileen <emcnaugh...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits