Ejegg has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/350086 )
Change subject: Merge branch 'master' into deployment
......................................................................
Merge branch 'master' into deployment
And update vendor submodule
7250d79 Delete old PP-specific normalization
c5ee155 Fix civibuild options for updated amp
e2a5c5f Always update c_t table for initial recurring
f584563 Backfill missing contribution_tracking links
8480400 Use : after host in mysql dsn
f550a8c Add de Bijenkorf card
56d8d15 Update SmashPig library
Change-Id: Id090f5f995ce64be5e682984f3673db69a9f47a8
---
D sites/all/modules/queue2civicrm/tests/data/recurring_payment.json
D sites/all/modules/queue2civicrm/tests/data/recurring_signup.json
D sites/all/modules/queue2civicrm/tests/includes/Message.php
D sites/all/modules/queue2civicrm/tests/phpunit/RecurringQueueTest.php
D sites/all/modules/wmf_civicrm/tests/phpunit/HelperFunctionsTest.php
M vendor
6 files changed, 1 insertion(+), 607 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/crm
refs/changes/86/350086/1
diff --git a/sites/all/modules/queue2civicrm/tests/data/recurring_payment.json
b/sites/all/modules/queue2civicrm/tests/data/recurring_payment.json
deleted file mode 100644
index c4af77c..0000000
--- a/sites/all/modules/queue2civicrm/tests/data/recurring_payment.json
+++ /dev/null
@@ -1,25 +0,0 @@
-<<<<<<< HEAD (51dbba Merge branch 'master' into deployment)
-=======
-{
- "date": 1383346353,
- "subscr_id": null,
- "txn_type": "subscr_payment",
- "contribution_tracking_id": "15017277",
- "email": "[email protected]",
- "first_name": "Gen",
- "middle_name": "",
- "last_name": "Russ",
- "street_address": "1211122 132 st",
- "city": "Edmonton",
- "state_province": "Alberta",
- "country": "CA",
- "postal_code": "T4V 2L2",
- "gateway_txn_id": 1765009520,
- "currency": "CAD",
- "gross": "3.00",
- "fee": "0.33",
- "net": 2.67,
- "gateway": "paypal",
- "recurring": true
-}
->>>>>>> BRANCH (56d8d1 Update SmashPig library)
diff --git a/sites/all/modules/queue2civicrm/tests/data/recurring_signup.json
b/sites/all/modules/queue2civicrm/tests/data/recurring_signup.json
deleted file mode 100644
index 5a72bb4..0000000
--- a/sites/all/modules/queue2civicrm/tests/data/recurring_signup.json
+++ /dev/null
@@ -1,27 +0,0 @@
-<<<<<<< HEAD (51dbba Merge branch 'master' into deployment)
-=======
-{
- "subscr_id": 2048343366,
- "txn_type": "subscr_signup",
- "contribution_tracking_id": "15028173",
- "email": "[email protected]",
- "first_name": "Gen D",
- "middle_name": "",
- "last_name": "Russ",
- "street_address": "5109 Lockwood Rd",
- "city": "Bethel Park",
- "state_province": "PA",
- "country": "US",
- "postal_code": "15110-1232",
- "frequency_interval": "1",
- "frequency_unit": "month",
- "installments": 0,
- "gross": "3.00",
- "currency": "CAD",
- "create_date": 1383347225,
- "start_date": 1383347225,
- "date": 1383347225,
- "gateway": "paypal",
- "recurring": true
-}
->>>>>>> BRANCH (56d8d1 Update SmashPig library)
diff --git a/sites/all/modules/queue2civicrm/tests/includes/Message.php
b/sites/all/modules/queue2civicrm/tests/includes/Message.php
deleted file mode 100644
index 3ba532f..0000000
--- a/sites/all/modules/queue2civicrm/tests/includes/Message.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<<<<<<< HEAD (51dbba Merge branch 'master' into deployment)
-=======
-<?php
-
-class Message {
- protected $defaults = array();
-
- public $body;
- public $headers;
-
- protected $data;
-
- function __construct( $values = array() ) {
- $this->data = $this->defaults;
- $this->headers = array();
- $this->set( $values );
- }
-
- function set( $values ) {
- if ( is_array( $values ) ) {
- $this->data = $values + $this->data;
- }
-
- $this->body = json_encode( $this->data );
- }
-
- function setHeaders( $values ) {
- if ( is_array( $values ) ) {
- $this->headers = array_merge( $this->headers, $values );
- }
- }
-
- function getBody() {
- return $this->data;
- }
-
- function getHeaders() {
- return $this->headers;
- }
-
- function loadDefaults( $name ) {
- if ( !$this->defaults ) {
- $path = __DIR__ . "/../data/{$name}.json";
- $this->defaults = json_decode( file_get_contents( $path ), true );
- }
- }
-
- /**
- * Generates random data for queue and donation insertion testing
- */
- public static function generateRandom() {
- //language codes
- $lang = array( 'en', 'de', 'fr' );
-
- $currency_codes = array( 'USD', 'GBP', 'EUR', 'ILS' );
- shuffle( $currency_codes );
- $currency = ( mt_rand( 0, 1 ) ) ? 'USD' : $currency_codes[0];
-
- $message = array(
- 'contribution_tracking_id' => '',
- 'optout' => mt_rand( 0, 1 ),
- 'anonymous' => mt_rand( 0, 1 ),
- 'comment' => mt_rand(),
- 'utm_source' => mt_rand(),
- 'utm_medium' => mt_rand(),
- 'utm_campaign' => mt_rand(),
- 'language' => $lang[array_rand( $lang )],
- 'email' => mt_rand() . '@example.com',
- 'first_name' => mt_rand(),
- 'middle_name' => mt_rand(),
- 'last_name' => mt_rand(),
- 'street_address' => mt_rand(),
- 'supplemental_address_1' => '',
- 'city' => 'San Francisco',
- 'state_province' => 'CA',
- 'country' => 'USA',
- 'countryID' => 'US',
- 'postal_code' => mt_rand( 2801, 99999 ),
- 'gateway' => 'insert_test',
- 'gateway_txn_id' => mt_rand(),
- 'response' => mt_rand(),
- 'currency' => $currency,
- 'original_currency' => $currency_codes[0],
- 'original_gross' => mt_rand( 0, 10000 ) / 100,
- 'fee' => '0',
- 'gross' => mt_rand( 0, 10000 ) / 100,
- 'net' => mt_rand( 0, 10000 ) / 100,
- 'date' => date( 'r' ), //time(),
- );
- return $message;
- }
-}
-
-class TransactionMessage extends Message {
- protected $txn_id_key = 'gateway_txn_id';
-
- function __construct( $values = array() ) {
- $this->loadDefaults( "donation" );
-
- parent::__construct( array(
- $this->txn_id_key => mt_rand(),
- 'order_id' => mt_rand(),
- ) + $values );
-
- $this->setHeaders( array(
- "persistent" => 'true',
- // FIXME: this might indicate a key error in our application code.
- "correlation-id" =>
"{$this->data['gateway']}-{$this->data[$this->txn_id_key]}",
- "JMSCorrelationID" =>
"{$this->data['gateway']}-{$this->data[$this->txn_id_key]}",
- ) );
- }
-
- function getGateway() {
- return $this->data['gateway'];
- }
-
- function getGatewayTxnId() {
- return $this->data[$this->txn_id_key];
- }
-
- function get( $key ) {
- return $this->data[$key];
- }
-}
-
-class RefundMessage extends TransactionMessage {
- function __construct( $values = array() ) {
- $this->loadDefaults( "refund" );
-
- $this->txn_id_key = 'gateway_refund_id';
-
- parent::__construct( $values );
- }
-}
-
-class RecurringPaymentMessage extends TransactionMessage {
- function __construct( $values = array() ) {
- $this->loadDefaults( "recurring_payment" );
-
- $this->txn_id_key = 'gateway_txn_id';
-
- parent::__construct( $values );
- }
-}
-
-class RecurringSignupMessage extends TransactionMessage {
- function __construct( $values = array() ) {
- $this->loadDefaults( "recurring_signup" );
-
- parent::__construct( $values );
- }
-}
-
-/**
- * Class AmazonDonationMessage Sparse message format pointing to donor
- * details in the pending database
- */
-class AmazonDonationMessage extends TransactionMessage {
- function __construct( $values = array() ) {
- $this->loadDefaults( "sparse_donation_amazon" );
-
- parent::__construct( $values );
- $this->data['completion_message_id'] =
- 'amazon-' . $this->get( 'order_id' );
- }
-}
-
-/**
- * Class AstroPayDonationMessage Sparse message format pointing to donor
- * details in the pending database
- */
-class AstroPayDonationMessage extends TransactionMessage {
- function __construct( $values = array() ) {
- $this->loadDefaults( "sparse_donation_astropay" );
-
- parent::__construct( $values );
- $this->data['completion_message_id'] =
- 'astropay-' . $this->get( 'order_id' );
- }
-}
->>>>>>> BRANCH (56d8d1 Update SmashPig library)
diff --git
a/sites/all/modules/queue2civicrm/tests/phpunit/RecurringQueueTest.php
b/sites/all/modules/queue2civicrm/tests/phpunit/RecurringQueueTest.php
deleted file mode 100644
index ff68ecb..0000000
--- a/sites/all/modules/queue2civicrm/tests/phpunit/RecurringQueueTest.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<<<<<<< HEAD (51dbba Merge branch 'master' into deployment)
-=======
-<?php
-use queue2civicrm\recurring\RecurringQueueConsumer;
-use SmashPig\Core\Context;
-use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
-
-/**
- * @group Queue2Civicrm
- */
-class RecurringQueueTest extends BaseWmfDrupalPhpUnitTestCase {
-
- /**
- * @var RecurringQueueConsumer
- */
- protected $consumer;
-
- protected $contributions = array();
- protected $ctIds = array();
-
- public function setUp() {
- parent::setUp();
- $config = TestingSmashPigDbQueueConfiguration::instance();
- Context::initWithLogger( $config );
- $queue = BaseQueueConsumer::getQueue( 'test' );
- $queue->createTable( 'test' );
- $this->consumer = new RecurringQueueConsumer(
- 'test'
- );
- }
-
- // TODO: other queue import tests need to clean up like this!
- public function tearDown() {
- foreach ( $this->ctIds as $ctId ) {
- db_delete( 'contribution_tracking' )
- ->condition( 'id', $ctId )
- ->execute();
- }
- foreach( $this->contributions as $contribution ) {
- if ( !empty( $contribution['contribution_recur_id'] ) )
{
- CRM_Core_DAO::executeQuery(
- "
- DELETE FROM civicrm_contribution_recur
- WHERE id = %1",
- array( 1 => array(
$contribution['contribution_recur_id'], 'Positive' ) )
- );
- }
- CRM_Core_DAO::executeQuery(
- "
- DELETE FROM civicrm_contribution
- WHERE id = %1",
- array( 1 => array( $contribution['id'],
'Positive' ) )
- );
- CRM_Core_DAO::executeQuery(
- "
- DELETE FROM civicrm_contact
- WHERE id = %1",
- array( 1 => array( $contribution['contact_id'],
'Positive' ) )
- );
- }
- parent::tearDown();
- }
-
- protected function addContributionTracking( $ctId ) {
- $this->ctIds[] = $ctId;
- db_insert( 'contribution_tracking' )
- ->fields( array( 'id' => $ctId ) )
- ->execute();
- }
-
- protected function importMessage( TransactionMessage $message ) {
- $payment_time = $message->get( 'date' );
- exchange_rate_cache_set( 'USD', $payment_time, 1 );
- $currency = $message->get( 'currency' );
- if ( $currency !== 'USD' ) {
- exchange_rate_cache_set( $currency, $payment_time, 3 );
- }
- $this->consumer->processMessage( $message->getBody() );
- $contributions = wmf_civicrm_get_contributions_from_gateway_id(
- $message->getGateway(),
- $message->getGatewayTxnId()
- );
- $this->contributions[] = $contributions[0];
- return $contributions;
- }
-
- public function testCreateDistinctContributions() {
- civicrm_initialize();
- $subscr_id = mt_rand();
- $values = $this->processRecurringSignup( $subscr_id );
-
- $message = new RecurringPaymentMessage( $values );
- $message2 = new RecurringPaymentMessage( $values );
-
- $msg = $message->getBody();
- $this->addContributionTracking(
$msg['contribution_tracking_id'] );
-
- $contributions = $this->importMessage( $message );
- $ctRecord = db_select( 'contribution_tracking', 'ct' )
- ->fields( 'ct' )
- ->condition( 'id', $msg['contribution_tracking_id'],
'=' )
- ->execute()
- ->fetchAssoc();
-
- $this->assertEquals(
- $contributions[0]['id'],
- $ctRecord['contribution_id']
- );
- $contributions2 = $this->importMessage( $message2 );
-
- $ctRecord2 = db_select( 'contribution_tracking', 'ct' )
- ->fields( 'ct' )
- ->condition( 'id', $msg['contribution_tracking_id'],
'=' )
- ->execute()
- ->fetchAssoc();
-
- // The ct_id record should still link to the first contribution
- $this->assertEquals(
- $contributions[0]['id'],
- $ctRecord2['contribution_id']
- );
- $recur_record = wmf_civicrm_get_recur_record( $subscr_id );
-
- $this->assertNotEquals( false, $recur_record );
-
- $this->assertEquals( 1, count( $contributions ) );
- $this->assertEquals( $recur_record->id,
$contributions[0]['contribution_recur_id'] );
- $this->assertEquals( 1, count( $contributions2 ) );
- $this->assertEquals( $recur_record->id,
$contributions2[0]['contribution_recur_id'] );
-
- $this->assertEquals( $contributions[0]['contact_id'],
$contributions2[0]['contact_id'] );
- $addresses = $this->callAPISuccess(
- 'Address',
- 'get',
- array( 'contact_id' => $contributions2[0]['contact_id']
)
- );
- $this->assertEquals( 1, $addresses['count'] );
- // The address comes from the recurring_payment.json not the
recurring_signup.json as it
- // has been overwritten. This is perhaps not a valid scenario
in production but it is
- // the scenario the code works to. In production they would
probably always be the same.
- $this->assertEquals( '1211122 132 st',
$addresses['values'][$addresses['id']]['street_address'] );
-
- $emails = $this->callAPISuccess( 'Email', 'get', array(
'contact_id' => $contributions2[0]['contact_id'] ) );
- $this->assertEquals( 1, $addresses['count'] );
- $this->assertEquals( '[email protected]',
$emails['values'][$emails['id']]['email'] );
- }
-
- public function testNormalizedMessages() {
- civicrm_initialize();
- $subscr_id = mt_rand();
- $values = $this->processRecurringSignup( $subscr_id );
-
- $message = new RecurringPaymentMessage( $values );
-
- $this->addContributionTracking( $message->get(
'contribution_tracking_id' ) );
-
- $contributions = $this->importMessage( $message );
-
- $recur_record = wmf_civicrm_get_recur_record( $subscr_id );
- $this->assertNotEquals( false, $recur_record );
-
- $this->assertEquals( 1, count( $contributions ) );
- $this->assertEquals( $recur_record->id,
$contributions[0]['contribution_recur_id'] );
-
- $addresses = $this->callAPISuccess(
- 'Address',
- 'get',
- array( 'contact_id' => $contributions[0]['contact_id'] )
- );
- $this->assertEquals( 1, $addresses['count'] );
-
- $emails = $this->callAPISuccess( 'Email', 'get', array(
'contact_id' => $contributions[0]['contact_id'] ) );
- $this->assertEquals( 1, $addresses['count'] );
- $this->assertEquals( '[email protected]',
$emails['values'][$emails['id']]['email'] );
- }
-
- /**
- * Test that a blank address is not written to the DB.
- */
- public function testBlankEmail() {
- civicrm_initialize();
- $subscr_id = mt_rand();
- $values = $this->processRecurringSignup( $subscr_id );
-
- $message = new RecurringPaymentMessage( $values );
- $messageBody = $message->getBody();
-
- $addressFields = array( 'city', 'country', 'state_province',
'street_address', 'postal_code' );
- foreach ( $addressFields as $addressField ) {
- $messageBody[$addressField] = '';
- }
-
- $this->addContributionTracking(
$messageBody['contribution_tracking_id'] );
-
- $this->consumer->processMessage( $messageBody );
-
- $contributions = wmf_civicrm_get_contributions_from_gateway_id(
- $message->getGateway(),
- $message->getGatewayTxnId()
- );
- $this->contributions[] = $contributions[0];
- $addresses = $this->callAPISuccess(
- 'Address',
- 'get',
- array( 'contact_id' => $contributions[0]['contact_id'],
'sequential' => 1 )
- );
- $this->assertEquals( 1, $addresses['count'] );
- // The address created by the sign up (Lockwood Rd) should not
have been overwritten by the blank.
- $this->assertEquals( '5109 Lockwood Rd',
$addresses['values'][0]['street_address'] );
- }
-
- /**
- * @expectedException WmfException
- * @expectedExceptionCode WmfException::MISSING_PREDECESSOR
- */
- public function testMissingPredecessor() {
- $message = new RecurringPaymentMessage(
- array(
- 'subscr_id' => mt_rand(),
- )
- );
-
- $this->importMessage( $message );
- }
-
- /**
- * @expectedException WmfException
- * @expectedExceptionCode WmfException::INVALID_RECURRING
- */
- public function testNoSubscrId() {
- $message = new RecurringPaymentMessage(
- array(
- 'subscr_id' => null,
- )
- );
-
- $this->importMessage( $message );
- }
-
- /**
- * Process the original recurring sign up message.
- *
- * @param string $subscr_id
- * @return array
- */
- private function processRecurringSignup( $subscr_id ) {
- $values = array( 'subscr_id' => $subscr_id );
- $signup_message = new RecurringSignupMessage( $values );
- $subscr_time = $signup_message->get( 'date' );
- exchange_rate_cache_set( 'USD', $subscr_time, 1 );
- exchange_rate_cache_set( $signup_message->get( 'currency' ),
$subscr_time, 2 );
- $this->consumer->processMessage( $signup_message->getBody() );
- return $values;
- }
-}
->>>>>>> BRANCH (56d8d1 Update SmashPig library)
diff --git
a/sites/all/modules/wmf_civicrm/tests/phpunit/HelperFunctionsTest.php
b/sites/all/modules/wmf_civicrm/tests/phpunit/HelperFunctionsTest.php
deleted file mode 100644
index 5789c1d..0000000
--- a/sites/all/modules/wmf_civicrm/tests/phpunit/HelperFunctionsTest.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<<<<<<< HEAD (51dbba Merge branch 'master' into deployment)
-=======
-<?php
-
-/**
- * @group WmfCivicrm
- * @group WmfCivicrmHelpers
- */
-class HelperFunctionsTest extends BaseWmfDrupalPhpUnitTestCase {
-
- /**
- * Test wmf_ensure_language_exists
- *
- * Maintenance note: the civicrm entity_tag get api returns an odd syntax.
- *
- * If that ever gets fixed it may break this test - but only the test would
- * need to be altered to adapt.
- *
- * @throws \CiviCRM_API3_Exception
- */
- public function testEnsureLanguageExists() {
- civicrm_initialize();
- wmf_civicrm_ensure_language_exists('en_IL');
- $languages = civicrm_api3('OptionValue', 'get', array(
- 'option_group_name' => 'languages',
- 'name' => 'en_IL',
- ));
- $this->assertEquals(1, $languages['count']);
- }
-
- /**
- * Test wmf custom api entity get detail.
- *
- * @todo consider moving test to thank_you module or helper function out
of there.
- *
- * @throws \CiviCRM_API3_Exception
- */
- public function testGetEntityTagDetail() {
- civicrm_initialize();
- $contact = $this->callAPISuccess('Contact', 'create', array(
- 'first_name' => 'Papa',
- 'last_name' => 'Smurf',
- 'contact_type' => 'Individual',
- ));
- $contribution = $this->callAPISuccess('Contribution', 'create', array(
- 'contact_id' => $contact['id'],
- 'total_amount' => 40,
- 'financial_type_id' => 'Donation',
- ));
-
- $tag1 = $this->ensureTagExists('smurfy');
- $tag2 = $this->ensureTagExists('smurfalicious');
-
- $this->callAPISuccess('EntityTag', 'create', array('entity_id' =>
$contribution['id'], 'entity_table' => 'civicrm_contribution', 'tag_id' =>
'smurfy'));
- $this->callAPISuccess('EntityTag', 'create', array('entity_id' =>
$contribution['id'], 'entity_table' => 'civicrm_contribution', 'tag_id' =>
'smurfalicious'));
-
- $smurfiestTags = wmf_thank_you_get_tag_names($contribution['id']);
- $this->assertEquals(array('smurfy', 'smurfalicious'), $smurfiestTags);
-
- $this->callAPISuccess('Tag', 'delete', array('id' => $tag1));
- $this->callAPISuccess('Tag', 'delete', array('id' => $tag2));
- }
-
- /**
- * Helper function to protect test against cleanup issues.
- *
- * @param string $name
- * @return int
- */
- public function ensureTagExists($name) {
- $tags = $this->callAPISuccess('EntityTag', 'getoptions', array('field'
=> 'tag_id'));
- if (in_array($name, $tags['values'])) {
- return array_search($name, $tags['values']);
- }
- $tag = $this->callAPISuccess('Tag', 'create', array(
- 'used_for' => 'civicrm_contribution',
- 'name' => $name
- ));
- $this->callAPISuccess('Tag', 'getfields', array('cache_clear' => 1));
- return $tag['id'];
- }
-
- public function testParseWatchdogLog() {
- $logLine = "Apr 21 17:00:02 mach1001 drupal:
RecurringQueueConsumer|1492791234|127.0.0.1|https://example.wikimedia.org/index.php||1||Array#012(#012
[date] => 1492791234#012 [txn_type] => subscr_payment#012
[gateway_txn_id] => 1X123456TJ0987654#012 [currency] => EUR#012
[contribution_tracking_id] => 47012345#012 [email] => [email protected]#012
[first_name] => DONNY#012 [last_name] => DONOR#012 [street_address] =>
123 GOLDFISH POND RD#012 [city] => LONDON#012 [state_province] => #012
[country] => GB#012 [postal_code] => 1000#012 [gross] => 10.00#012
[fee] => 0.62#012 [order_id] => 47012345#012 [recurring] => 1#012
[subscr_id] => S-9TN12345BR9987654#012 [middle_name] => #012 [gateway] =>
paypal#012 [source_name] => SmashPig#012 [source_type] => listener#012
[source_host] => mach1001#012 [source_run_id] => 113106#012
[source_version] => 200f63eedb05f5e6665d9837bba97e7e7237a41d#012
[source_enqueued_time] => 1492793225#012)";
- $parsed = wmf_civicrm_parse_watchdog_array( $logLine );
- $expected = array(
- 'date' => '1492791234',
- 'txn_type' => 'subscr_payment',
- 'gateway_txn_id' => '1X123456TJ0987654',
- 'currency' => 'EUR',
- 'contribution_tracking_id' => '47012345',
- 'email' => '[email protected]',
- 'first_name' => 'DONNY',
- 'last_name' => 'DONOR',
- 'street_address' => '123 GOLDFISH POND RD',
- 'city' => 'LONDON',
- 'state_province' => '',
- 'country' => 'GB',
- 'postal_code' => '1000',
- 'gross' => '10.00',
- 'fee' => '0.62',
- 'order_id' => '47012345',
- 'recurring' => '1',
- 'subscr_id' => 'S-9TN12345BR9987654',
- 'middle_name' => '',
- 'gateway' => 'paypal',
- 'source_name' => 'SmashPig',
- 'source_type' => 'listener',
- 'source_host' => 'mach1001',
- 'source_run_id' => '113106',
- 'source_version' => '200f63eedb05f5e6665d9837bba97e7e7237a41d',
- 'source_enqueued_time' => '1492793225',
- );
- $this->assertEquals( $expected, $parsed );
- }
-}
->>>>>>> BRANCH (56d8d1 Update SmashPig library)
diff --git a/vendor b/vendor
index 91d1300..17c4516 160000
--- a/vendor
+++ b/vendor
@@ -1 +1 @@
-Subproject commit 91d130095b7102a59608f969ef890ae7a17e0dbc
+Subproject commit 17c45169fef1dbd6d8bfe61b0cc8a96cf169b408
--
To view, visit https://gerrit.wikimedia.org/r/350086
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id090f5f995ce64be5e682984f3673db69a9f47a8
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/crm
Gerrit-Branch: deployment
Gerrit-Owner: Ejegg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits