Ejegg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/200092
Change subject: Define common filters in one file
......................................................................
Define common filters in one file
Less duplication, easier to add all the filters to all the widgets.
Change-Id: I7bc14b8ba486d23a10c4014060c1a00c23c77105
---
M widgets/big-english.js
A widgets/common-filters.js
M widgets/fraud-gauge.js
M widgets/x-by-y.js
4 files changed, 290 insertions(+), 256 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/dash
refs/changes/92/200092/1
diff --git a/widgets/big-english.js b/widgets/big-english.js
index 22d84f0..10d9ae9 100644
--- a/widgets/big-english.js
+++ b/widgets/big-english.js
@@ -1,34 +1,12 @@
-var config = require( '../config.js' );
+var commonFilters = require( './common-filters.js' ),
+ config = require( '../config.js' );
module.exports = {
name: 'big-english',
query: 'select count(*) as donations, sum(total_amount) as usd_total,\n
IF( day(receive_date) = day(utc_timestamp()) and hour(receive_date) =
hour(utc_timestamp()), CEILING(TIMESTAMPDIFF(SECOND, MIN(receive_date),
MAX(receive_date))/60), 60) as minutes, sum(total_amount)/IF( day(receive_date)
= day(utc_timestamp()) and hour(receive_date) = hour(utc_timestamp()),
CEILING(TIMESTAMPDIFF(SECOND, MIN(receive_date), MAX(receive_date))/60), 60)/60
as usd_per_second, DAY(receive_date) as day, HOUR(receive_date) as hour from '
+ config.civicrmDb + '.civicrm_contribution cc [[WHERE]] GROUP BY
DAY(receive_date), HOUR(receive_date) ORDER BY day ASC, hour ASC;',
mainTableAlias: 'cc',
optionalJoins: {},
- filters: {
- Year: {
- table: 'cc',
- func: 'YEAR',
- column: 'receive_date',
- display: 'Year',
- type: 'number'
- },
- Month: {
- table: 'cc',
- func: 'MONTH',
- column: 'receive_date',
- display: 'Month',
- type: 'number'
- },
- Amount: {
- table: 'cc',
- column : 'total_amount',
- display : 'Amount',
- type : 'number',
- min : 0,
- max : 10000
- }
- },
+ filters: commonFilters.civicrmContribution,
defaultFilter: {
type: 'and',
left: {
diff --git a/widgets/common-filters.js b/widgets/common-filters.js
new file mode 100644
index 0000000..1ca2ef9
--- /dev/null
+++ b/widgets/common-filters.js
@@ -0,0 +1,267 @@
+/*
+ * Use these to extend() your widget's filters. Note that some filters are
+ * defined for multiple tables. Extend with the filter set of your primary
+ * table last to make sure you get the correct version.
+ */
+
+module.exports = {
+ civicrmContribution: {
+ DT: {
+ table: 'cc',
+ column : 'receive_date',
+ display: 'Date',
+ type: 'datetime',
+ //TODO: dynamic min/max
+ min: '2005-01-01',
+ max: '2099-12-31'
+ },
+ Year: {
+ table: 'cc',
+ func: 'YEAR',
+ column: 'receive_date',
+ display: 'Year',
+ type: 'number',
+ canGroup: true
+ },
+ Month: {
+ table: 'cc',
+ func: 'MONTH',
+ column: 'receive_date',
+ display: 'Month',
+ type: 'number',
+ canGroup: true
+ },
+ Day: {
+ table: 'cc',
+ func: 'DAY',
+ column: 'receive_date',
+ display: 'Year',
+ type: 'number',
+ canGroup: true
+ },
+ Hour: {
+ table: 'cc',
+ func: 'HOUR',
+ column: 'receive_date',
+ display: 'Hour',
+ type: 'number',
+ canGroup: true
+ },
+ YearsAgo: {
+ table: 'cc',
+ column : 'receive_date',
+ func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())',
+ display: 'Years ago',
+ type: 'number',
+ min: 0,
+ max: 12
+ },
+ MonthsAgo: {
+ table: 'cc',
+ column : 'receive_date',
+ func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())',
+ display: 'Months ago',
+ type: 'number',
+ min: 0,
+ max: 10000
+ },
+ DaysAgo: {
+ table: 'cc',
+ column : 'receive_date',
+ func: 'timestampdiff(DAY, [[COL]], utc_timestamp())',
+ display: 'Days ago',
+ type: 'number',
+ min: 0,
+ max: 10000
+ },
+ Amount: {
+ table: 'cc',
+ column : 'total_amount',
+ display : 'Amount',
+ type : 'number',
+ min : 0,
+ max : 10000
+ },
+ Country: {
+ table: 'pi',
+ column: 'country',
+ display: 'Country',
+ type: 'dropdown',
+ values: [ 'AE', 'AF', 'AL', 'AM', 'AO', 'AR', 'AT',
'AU', 'AW', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BG', 'BH', 'BJ', 'BM', 'BN', 'BO',
'BR', 'BS', 'CA', 'CH', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CW', 'CY', 'CZ',
'DE', 'DJ', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FR', 'GB', 'GE', 'GH',
'GR', 'GT', 'GU', 'HK', 'HN', 'HR', 'HU', 'IE', 'IL', 'IM', 'IN', 'IS', 'IT',
'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LI', 'LK',
'LR', 'LT', 'LU', 'LV', 'MA', 'ME', 'MG', 'MK', 'MN', 'MR', 'MT', 'MX', 'MY',
'MZ', 'NC', 'NE', 'NG', 'NI', 'NL', 'NO', 'NP', 'NZ', 'OM', 'PA', 'PE', 'PH',
'PK', 'PL', 'PR', 'PS', 'PT', 'QA', 'RO', 'RS', 'SC', 'SE', 'SG', 'SI', 'SV',
'TH', 'TN', 'TW', 'TZ', 'UA', 'US', 'UY', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
'XX', 'ZA', 'ZM' ],
+ canGroup: true
+ },
+ Action: {
+ table: 'pf',
+ column: 'validation_action',
+ func: 'COALESCE([[COL]], \'no action\')',
+ display: 'Validation Action',
+ type: 'dropdown',
+ values: [ 'process', 'reject' ],
+ canGroup: true
+ },
+ Status: {
+ table: 'cc',
+ column: 'contribution_status_id',
+ display: 'Contribution Status',
+ type: 'dropdown',
+ values: [ '1', '2', '3', '4', '5', '6', '7', '8', '9' ],
+ labels: [ 'Completed', 'Pending', 'Cancelled',
'Failed', 'In Progress', 'Overdue', 'Settled', 'Paid', 'Refunded' ],
+ canGroup: true
+ }
+ },
+ contributionTracking: {
+ Source: {
+ table: 'ct',
+ column: 'utm_source',
+ display: 'Source',
+ type: 'text',
+ canGroup: true
+ },
+ Campaign: {
+ table: 'ct',
+ column: 'utm_campaign',
+ display: 'Campaign',
+ type: 'text',
+ canGroup: true
+ },
+ Medium: {
+ table: 'ct',
+ column: 'utm_medium',
+ display: 'Medium',
+ type: 'dropdown',
+ values: [ 'sitenotice', 'sidebar', 'email',
'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event',
'externalbanner', 'outage' ],
+ canGroup: true
+ },
+ Referrer: {
+ table: 'ct',
+ column : 'referrer',
+ display : 'Referrer',
+ type : 'text'
+ }
+ },
+ paymentsInitial: {
+ Currency: {
+ table: 'pi',
+ column : 'currency_code',
+ display : 'Currency',
+ type : 'dropdown',
+ //TODO: get values dynamically
+ values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN',
'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK',
'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF',
'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL',
'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP',
'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD',
'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ],
+ canGroup: true
+ },
+ Method: {
+ table: 'pi',
+ column: 'payment_method',
+ display: 'Method',
+ type: 'dropdown',
+ values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew',
'obt', 'bt'],
+ canGroup: true
+ },
+ Gateway: {
+ table: 'pi',
+ column: 'gateway',
+ display: 'Gateway',
+ type: 'dropdown',
+ values: [ 'globalcollect', 'worldpay', 'amazon',
'paypal' ],
+ canGroup: true
+ },
+ Amount: {
+ table: 'pi',
+ column : 'amount',
+ display : 'Amount',
+ type : 'number',
+ min : 0,
+ max : 10000
+ }
+ },
+ paymentsFraud: {
+ DT: {
+ table: 'pf',
+ column : 'date',
+ display: 'Date',
+ type: 'datetime',
+ //TODO: dynamic min/max
+ min: '2005-01-01',
+ max: '2099-12-31'
+ },
+ Year: {
+ table: 'pf',
+ func: 'YEAR',
+ column: 'date',
+ display: 'Year',
+ type: 'number',
+ canGroup: true
+ },
+ Month: {
+ table: 'pf',
+ func: 'MONTH',
+ column: 'date',
+ display: 'Month',
+ type: 'number',
+ canGroup: true
+ },
+ Day: {
+ table: 'pf',
+ func: 'DAY',
+ column: 'date',
+ display: 'Year',
+ type: 'number',
+ canGroup: true
+ },
+ Hour: {
+ table: 'pf',
+ func: 'HOUR',
+ column: 'date',
+ display: 'Hour',
+ type: 'number',
+ canGroup: true
+ },
+ YearsAgo: {
+ table: 'pf',
+ column : 'date',
+ func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())',
+ display: 'Years ago',
+ type: 'number',
+ min: 0,
+ max: 12
+ },
+ MonthsAgo: {
+ table: 'pf',
+ column : 'date',
+ func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())',
+ display: 'Months ago',
+ type: 'number',
+ min: 0,
+ max: 10000
+ },
+ DaysAgo: {
+ table: 'pf',
+ column : 'date',
+ func: 'timestampdiff(DAY, [[COL]], utc_timestamp())',
+ display: 'Days ago',
+ type: 'number',
+ min: 0,
+ max: 10000
+ },
+ Method: {
+ table: 'pf',
+ column: 'payment_method',
+ display: 'Method',
+ type: 'dropdown',
+ values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew',
'obt', 'bt']
+ },
+ Gateway: {
+ table: 'pf',
+ column: 'gateway',
+ display: 'Gateway',
+ type: 'dropdown',
+ values: [ 'globalcollect', 'worldpay' ]
+ },
+ Score: {
+ table: 'pf',
+ column: 'risk_score',
+ display: 'Score',
+ type: 'number'
+ }
+ }
+};
diff --git a/widgets/fraud-gauge.js b/widgets/fraud-gauge.js
index 64e3434..fae6ebe 100644
--- a/widgets/fraud-gauge.js
+++ b/widgets/fraud-gauge.js
@@ -1,3 +1,11 @@
+var extend = require( 'node.extend' ),
+ commonFilters = require( './common-filters.js' ),
+ filters = {};
+
+extend( filters, commonFilters.contributionTracking );
+extend( filters, commonFilters.paymentsInitial );
+extend( filters, commonFilters.paymentsFraud );
+
module.exports = {
name: 'fraud',
query: 'SELECT AVG(CASE pf.validation_action WHEN \'reject\' THEN 100
ELSE 0 END) AS fraud_percent\nFROM payments_fraud pf [[JOINS]] [[WHERE]]',
@@ -10,76 +18,5 @@
text: 'LEFT JOIN drupal.contribution_tracking ct ON
ct.id = pf.contribution_tracking_id'
}
},
- filters: {
- Currency: {
- table: 'pi',
- column : 'currency_code',
- display : 'Currency',
- type : 'dropdown',
- //TODO: get values dynamically
- values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN',
'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK',
'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF',
'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL',
'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP',
'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD',
'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ]
- },
- Method: {
- table: 'pf',
- column: 'payment_method',
- display: 'Method',
- type: 'dropdown',
- values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew',
'obt', 'bt']
- },
- Source: {
- table: 'ct',
- column: 'utm_source',
- display: 'Source',
- type: 'text'
- },
- Campaign: {
- table: 'ct',
- column: 'utm_campaign',
- display: 'Campaign',
- type: 'text'
- },
- Medium: {
- table: 'ct',
- column: 'utm_medium',
- display: 'Medium',
- type: 'dropdown',
- values: [ 'sitenotice', 'sidebar', 'email',
'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event',
'externalbanner', 'outage' ]
- },
- Referrer: {
- table: 'ct',
- column : 'referrer',
- display : 'Referrer',
- type : 'text'
- },
- Gateway: {
- table: 'pf',
- column: 'gateway',
- display: 'Gateway',
- type: 'dropdown',
- values: [ 'globalcollect', 'worldpay' ]
- },
- Score: {
- table: 'pf',
- column: 'risk_score',
- display: 'Score',
- type: 'number'
- },
- DT: {
- table: 'pf',
- column : 'date',
- display: 'Date',
- type: 'datetime',
- //TODO: dynamic min/max
- min: '2005-01-01',
- max: '2099-12-31'
- },
- Amount: {
- table: 'pi',
- column : 'amount',
- display : 'Amount',
- type : 'number',
- min : 0,
- max : 10000
- }
- }
-};
\ No newline at end of file
+ filters: filters
+};
diff --git a/widgets/x-by-y.js b/widgets/x-by-y.js
index 7bd09d2..619c29e 100644
--- a/widgets/x-by-y.js
+++ b/widgets/x-by-y.js
@@ -1,4 +1,12 @@
-var config = require( '../config.js' );
+var extend = require( 'node.extend' ),
+ commonFilters = require( './common-filters.js' ),
+ config = require( '../config.js' ),
+ filters = {};
+
+extend( filters, commonFilters.paymentsFraud );
+extend( filters, commonFilters.paymentsInitial );
+extend( filters, commonFilters.contributionTracking );
+extend( filters, commonFilters.civicrmContributions );
module.exports = {
name: 'x-by-y',
@@ -17,161 +25,5 @@
requires: [ 'ct', 'pi' ]
}
},
- filters: {
- Year: {
- table: 'cc',
- func: 'YEAR',
- column: 'receive_date',
- display: 'Year',
- type: 'number',
- canGroup: true
- },
- Month: {
- table: 'cc',
- func: 'MONTH',
- column: 'receive_date',
- display: 'Month',
- type: 'number',
- canGroup: true
- },
- Day: {
- table: 'cc',
- func: 'DAY',
- column: 'receive_date',
- display: 'Year',
- type: 'number',
- canGroup: true
- },
- Hour: {
- table: 'cc',
- func: 'HOUR',
- column: 'receive_date',
- display: 'Hour',
- type: 'number',
- canGroup: true
- },
- Amount: {
- table: 'cc',
- column : 'total_amount',
- display : 'Amount',
- type : 'number',
- min : 0,
- max : 10000
- },
- Currency: {
- table: 'pi',
- column : 'currency_code',
- display : 'Currency',
- type : 'dropdown',
- //TODO: get values dynamically
- values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN',
'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK',
'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF',
'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL',
'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP',
'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD',
'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ],
- canGroup: true
- },
- Method: {
- table: 'pi',
- column: 'payment_method',
- display: 'Method',
- type: 'dropdown',
- values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew',
'obt', 'bt'],
- canGroup: true
- },
- Source: {
- table: 'ct',
- column: 'utm_source',
- display: 'Source',
- type: 'text',
- canGroup: true
- },
- Campaign: {
- table: 'ct',
- column: 'utm_campaign',
- display: 'Campaign',
- type: 'text',
- canGroup: true
- },
- Medium: {
- table: 'ct',
- column: 'utm_medium',
- display: 'Medium',
- type: 'dropdown',
- values: [ 'sitenotice', 'sidebar', 'email',
'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event',
'externalbanner', 'outage' ],
- canGroup: true
- },
- Referrer: {
- table: 'ct',
- column : 'referrer',
- display : 'Referrer',
- type : 'text'
- },
- Gateway: {
- table: 'pi',
- column: 'gateway',
- display: 'Gateway',
- type: 'dropdown',
- values: [ 'globalcollect', 'worldpay', 'amazon',
'paypal' ],
- canGroup: true
- },
- DT: {
- table: 'cc',
- column : 'receive_date',
- display: 'Date',
- type: 'datetime',
- //TODO: dynamic min/max
- min: '2005-01-01',
- max: '2099-12-31'
- },
- Country: {
- table: 'pi',
- column: 'country',
- display: 'Country',
- type: 'dropdown',
- values: [ 'AE', 'AF', 'AL', 'AM', 'AO', 'AR', 'AT',
'AU', 'AW', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BG', 'BH', 'BJ', 'BM', 'BN', 'BO',
'BR', 'BS', 'CA', 'CH', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CW', 'CY', 'CZ',
'DE', 'DJ', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FR', 'GB', 'GE', 'GH',
'GR', 'GT', 'GU', 'HK', 'HN', 'HR', 'HU', 'IE', 'IL', 'IM', 'IN', 'IS', 'IT',
'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LI', 'LK',
'LR', 'LT', 'LU', 'LV', 'MA', 'ME', 'MG', 'MK', 'MN', 'MR', 'MT', 'MX', 'MY',
'MZ', 'NC', 'NE', 'NG', 'NI', 'NL', 'NO', 'NP', 'NZ', 'OM', 'PA', 'PE', 'PH',
'PK', 'PL', 'PR', 'PS', 'PT', 'QA', 'RO', 'RS', 'SC', 'SE', 'SG', 'SI', 'SV',
'TH', 'TN', 'TW', 'TZ', 'UA', 'US', 'UY', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
'XX', 'ZA', 'ZM' ],
- canGroup: true
- },
- Action: {
- table: 'pf',
- column: 'validation_action',
- func: 'COALESCE([[COL]], \'no action\')',
- display: 'Validation Action',
- type: 'dropdown',
- values: [ 'process', 'reject' ],
- canGroup: true
- },
- Status: {
- table: 'cc',
- column: 'contribution_status',
- display: 'Contribution Status',
- type: 'dropdown',
- values: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
- labels: [ 'Completed', 'Pending', 'Cancelled',
'Failed', 'In Progress', 'Overdue', 'Settled', 'Paid', 'Refunded' ],
- canGroup: true
- },
- YearsAgo: {
- table: 'cc',
- column : 'receive_date',
- func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())',
- display: 'Years ago',
- type: 'number',
- min: 0,
- max: 12
- },
- MonthsAgo: {
- table: 'cc',
- column : 'receive_date',
- func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())',
- display: 'Months ago',
- type: 'number',
- min: 0,
- max: 10000
- },
- DaysAgo: {
- table: 'cc',
- column : 'receive_date',
- func: 'timestampdiff(DAY, [[COL]], utc_timestamp())',
- display: 'Days ago',
- type: 'number',
- min: 0,
- max: 10000
- }
- }
+ filters: filters
};
--
To view, visit https://gerrit.wikimedia.org/r/200092
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7bc14b8ba486d23a10c4014060c1a00c23c77105
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/dash
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits