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

Reply via email to