diff --git a/app/config.js.j2 b/app/config.js.j2 index c1a5dd2a78..962519e3fa 100644 --- a/app/config.js.j2 +++ b/app/config.js.j2 @@ -18,5 +18,8 @@ window.ushahidi = { intercomAppId: '{{ INTERCOM_APPID }}', appStoreId: '{{ APP_STORE_ID }}', ravenUrl: '{{ RAVEN_URL }}', - tosReleaseDate: '{{ TOS_RELEASE_DATE }}' + tosReleaseDate: '{{ TOS_RELEASE_DATE }}', +{% if ENABLED_SOURCES %}} + sources: {{ ENABLED_SOURCES.split(',') | map('trim') | list }}, +{% endif %} } diff --git a/legacy/app/app.js b/legacy/app/app.js index 265b5879f9..2675319036 100644 --- a/legacy/app/app.js +++ b/legacy/app/app.js @@ -119,7 +119,8 @@ angular ? new Date(window.ushahidi.tosReleaseDate) : false, // Date in UTC EXPORT_POLLING_INTERVAL: - window.ushahidi.export_polling_interval || 30000 + window.ushahidi.export_polling_interval || 30000, + ENABLED_SOURCES: window.ushahidi.sources || ['sms', 'twitter', 'web', 'email'] }) .config([ '$compileProvider', diff --git a/legacy/app/common/services/post-filters.service.js b/legacy/app/common/services/post-filters.service.js index 410e51f5e0..9aaa9b7afa 100644 --- a/legacy/app/common/services/post-filters.service.js +++ b/legacy/app/common/services/post-filters.service.js @@ -1,7 +1,7 @@ module.exports = PostFiltersService; -PostFiltersService.$inject = ['_', 'FormEndpoint', 'TagEndpoint', '$q', '$rootScope']; -function PostFiltersService(_, FormEndpoint, TagEndpoint, $q, $rootScope) { +PostFiltersService.$inject = ['_', 'FormEndpoint', 'TagEndpoint', '$q', '$rootScope', 'CONST']; +function PostFiltersService(_, FormEndpoint, TagEndpoint, $q, $rootScope, CONST) { // Create initial filter state var filterState = window.filterState = getDefaults(); var forms = []; @@ -210,7 +210,7 @@ function PostFiltersService(_, FormEndpoint, TagEndpoint, $q, $rootScope) { form: _.pluck(forms, 'id'), set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: CONST.ENABLED_SOURCES }; } diff --git a/legacy/app/map/mode-context/mode-context-form-filter.directive.js b/legacy/app/map/mode-context/mode-context-form-filter.directive.js index f31638120f..d8c47e85b9 100644 --- a/legacy/app/map/mode-context/mode-context-form-filter.directive.js +++ b/legacy/app/map/mode-context/mode-context-form-filter.directive.js @@ -9,8 +9,8 @@ function ModeContextFormFilterDirective() { template: require('./mode-context-form-filter.html') }; } -ModeContextFormFilter.$inject = ['$scope', 'PostEndpoint', '$q', '_', '$rootScope', 'PostSurveyService', 'PostFilters', '$location', 'SurveysSdk','TranslationService']; -function ModeContextFormFilter($scope, PostEndpoint, $q, _, $rootScope, PostSurveyService, PostFilters, $location, SurveysSdk, TranslationService) { +ModeContextFormFilter.$inject = ['$scope', 'PostEndpoint', '$q', '_', '$rootScope', 'PostSurveyService', 'PostFilters', '$location', 'SurveysSdk','TranslationService', 'CONST']; +function ModeContextFormFilter($scope, PostEndpoint, $q, _, $rootScope, PostSurveyService, PostFilters, $location, SurveysSdk, TranslationService, CONST) { $scope.forms = []; $scope.showOnly = showOnly; $scope.hide = hide; @@ -124,9 +124,9 @@ function ModeContextFormFilter($scope, PostEndpoint, $q, _, $rootScope, PostSurv function getSourceStats(stats) { var sourceStats = []; - var providers = ['email', 'sms', 'twitter', 'web']; + // calculating stats for each datasource, based on the current form-filter - _.each(providers, function (provider) { + _.each(CONST.ENABLED_SOURCES, function (provider) { var posts = _.filter(stats.totals[0].values, function (value) { // including posts without a form in the stats var id = value.id === null ? 'none' : value.id; diff --git a/legacy/app/map/post-toolbar/filters/filter-source.directive.js b/legacy/app/map/post-toolbar/filters/filter-source.directive.js index ba04a6919f..764d8cc4af 100644 --- a/legacy/app/map/post-toolbar/filters/filter-source.directive.js +++ b/legacy/app/map/post-toolbar/filters/filter-source.directive.js @@ -1,7 +1,7 @@ module.exports = SourceSelectDirective; -SourceSelectDirective.$inject = ['$rootScope']; -function SourceSelectDirective($rootScope) { +SourceSelectDirective.$inject = ['$rootScope', 'CONST']; +function SourceSelectDirective($rootScope, CONST) { return { restrict: 'E', replace: true, @@ -12,6 +12,9 @@ function SourceSelectDirective($rootScope) { }; function SourceSelectLink(scope, element, attrs, ngModel) { + scope.isAmongEnabledSources = function (source) { + return CONST.ENABLED_SOURCES.some(e_source => e_source === source); + }; scope.selectedSources = []; scope.hasPermission = $rootScope.hasPermission; diff --git a/legacy/app/map/post-toolbar/filters/filter-source.html b/legacy/app/map/post-toolbar/filters/filter-source.html index 2f1b63f072..9d4e6059aa 100644 --- a/legacy/app/map/post-toolbar/filters/filter-source.html +++ b/legacy/app/map/post-toolbar/filters/filter-source.html @@ -1,30 +1,42 @@
-
+
-
+
-
+
-
+
+
+ +
+
+ +
diff --git a/legacy/app/settings/data-export/hdx-export.controller.js b/legacy/app/settings/data-export/hdx-export.controller.js index 931d403d0f..d7cba76f1f 100644 --- a/legacy/app/settings/data-export/hdx-export.controller.js +++ b/legacy/app/settings/data-export/hdx-export.controller.js @@ -9,6 +9,7 @@ module.exports = [ '$anchorScroll', 'Notify', 'DataExport', + 'CONST', function ( $scope, $rootScope, @@ -19,7 +20,8 @@ function ( LoadingProgress, $anchorScroll, Notify, - DataExport + DataExport, + CONST ) { $scope.selectHxlAttribute = selectHxlAttribute; $scope.addAnother = addAnother; @@ -223,7 +225,7 @@ function ( 'orderby' : 'created', 'order' : 'desc', 'order_unlocked_on_top' : 'true', - 'source' : ['sms','twitter','web','email'] + 'source' : CONST.ENABLED_SOURCES }, 'send_to_hdx': sendToHDX, 'include_hxl': true, diff --git a/legacy/test/unit/main/post/views/filter-by-datasource.spec.js b/legacy/test/unit/main/post/views/filter-by-datasource.spec.js index 38a309ee84..0749ba66bb 100644 --- a/legacy/test/unit/main/post/views/filter-by-datasource.spec.js +++ b/legacy/test/unit/main/post/views/filter-by-datasource.spec.js @@ -5,7 +5,8 @@ describe('filter by datasource directive', function () { element, ConfigEndpoint, isAdmin, - $location; + $location, + sources; beforeEach(function () { var testApp; @@ -15,15 +16,16 @@ describe('filter by datasource directive', function () { angular.mock.module('testApp'); }); - beforeEach(inject(function (_$rootScope_, $compile, _ConfigEndpoint_, _, _$location_) { + beforeEach(inject(function (_$rootScope_, $compile, _ConfigEndpoint_, _, _$location_, _CONST_) { $rootScope = _$rootScope_; $scope = _$rootScope_.$new(); $location = _$location_; ConfigEndpoint = _ConfigEndpoint_; + sources = _CONST_.ENABLED_SOURCES; spyOn(ConfigEndpoint, 'get').and.callThrough(); $scope.filters = { - source: ['sms', 'twitter', 'web', 'email'], + source: sources, form: [1, 2] }; $scope.postStats = [ @@ -91,7 +93,7 @@ describe('filter by datasource directive', function () { expect($location.path()).toEqual('/views/data'); }); it('should toggle the filters based on if selected filter is activated or not', function () { - expect(isolateScope.filters.source).toEqual(['sms', 'twitter', 'web', 'email']); + expect(isolateScope.filters.source).toEqual(sources); var filter = isolateScope.filters.source[Math.floor(Math.random() * isolateScope.filters.source.length)]; isolateScope.toggleFilters(filter); expect(isolateScope.filters.source).not.toContain(filter); diff --git a/legacy/test/unit/main/post/views/filters/active-search-filters.directive.spec.js b/legacy/test/unit/main/post/views/filters/active-search-filters.directive.spec.js index 38a03435ef..5835408f31 100644 --- a/legacy/test/unit/main/post/views/filters/active-search-filters.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/active-search-filters.directive.spec.js @@ -42,7 +42,7 @@ describe('post active search filters directive', function () { form: [1, 2, 3, 4], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'] }; beforeEach(angular.mock.inject(function (_$rootScope_, _$compile_, _Notify_, _PostFilters_) { $compile = _$compile_; diff --git a/legacy/test/unit/main/post/views/filters/filter-category.directive.spec.js b/legacy/test/unit/main/post/views/filters/filter-category.directive.spec.js index 41dafb0617..7d3a8deae0 100644 --- a/legacy/test/unit/main/post/views/filters/filter-category.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/filter-category.directive.spec.js @@ -35,7 +35,7 @@ describe('Category Directive', function () { form: [1, 2, 3, 4], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'] }; beforeEach(angular.mock.inject(function (_$rootScope_, _$compile_, _Notify_, _PostFilters_) { diff --git a/legacy/test/unit/main/post/views/filters/filter-post-order-asc-desc.spec.js b/legacy/test/unit/main/post/views/filters/filter-post-order-asc-desc.spec.js index cc8b7a68f2..284f8a101b 100644 --- a/legacy/test/unit/main/post/views/filters/filter-post-order-asc-desc.spec.js +++ b/legacy/test/unit/main/post/views/filters/filter-post-order-asc-desc.spec.js @@ -24,7 +24,7 @@ describe('filter post order ASC/DESC directive', function () { form: [], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: [] }; beforeEach(function () { fixture.setBase('mocked_backend/api/v3'); diff --git a/legacy/test/unit/main/post/views/filters/filter-post-sorting-options.directive.spec.js b/legacy/test/unit/main/post/views/filters/filter-post-sorting-options.directive.spec.js index f1551eebd8..13f0b5c012 100644 --- a/legacy/test/unit/main/post/views/filters/filter-post-sorting-options.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/filter-post-sorting-options.directive.spec.js @@ -24,7 +24,7 @@ describe('filter post sorting options on top directive', function () { form: [], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: [] }; beforeEach(function () { fixture.setBase('mocked_backend/api/v3'); diff --git a/legacy/test/unit/main/post/views/filters/filter-unlocked-on-top.directive.spec.js b/legacy/test/unit/main/post/views/filters/filter-unlocked-on-top.directive.spec.js index 1a06dcdc69..983a1c22f6 100644 --- a/legacy/test/unit/main/post/views/filters/filter-unlocked-on-top.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/filter-unlocked-on-top.directive.spec.js @@ -40,7 +40,7 @@ describe('filter unlocked on top directive', function () { form: [], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: [] }; // $scope.models = {}; // $scope.models.modelUnlocked = 'true'; diff --git a/legacy/test/unit/main/post/views/filters/filters-dropdown.directive.spec.js b/legacy/test/unit/main/post/views/filters/filters-dropdown.directive.spec.js index 9dd67661ed..6761f05b2d 100644 --- a/legacy/test/unit/main/post/views/filters/filters-dropdown.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/filters-dropdown.directive.spec.js @@ -49,7 +49,7 @@ describe('post filters-dropdown directive', function () { form: [1, 2, 3, 4], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'] }; beforeEach(angular.mock.inject(function (_$rootScope_, _$compile_, _ModalService_, _PostFilters_, _SavedSearchEndpoint_, _FilterTransformers_) { $compile = _$compile_; diff --git a/legacy/test/unit/main/post/views/filters/filters-posts.directive.spec.js b/legacy/test/unit/main/post/views/filters/filters-posts.directive.spec.js index cb9cd635c7..c3f78be8df 100644 --- a/legacy/test/unit/main/post/views/filters/filters-posts.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/filters-posts.directive.spec.js @@ -50,7 +50,7 @@ describe('filters-posts directive', function () { form: [1, 2, 3, 4], set: [], user: false, - source: ['sms', 'twitter', 'web', 'email'] + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'] }; beforeEach( angular.mock.inject(function ( diff --git a/legacy/test/unit/main/post/views/filters/post-filters.service.spec.js b/legacy/test/unit/main/post/views/filters/post-filters.service.spec.js index 9b33bc90fa..abd1d1ddd3 100644 --- a/legacy/test/unit/main/post/views/filters/post-filters.service.spec.js +++ b/legacy/test/unit/main/post/views/filters/post-filters.service.spec.js @@ -3,7 +3,8 @@ describe('Post Filters Service', function () { var $rootScope, $scope, PostFilters, - Notify; + Notify, + sources; beforeEach(function () { fixture.setBase('mocked_backend/api/v3'); @@ -20,12 +21,13 @@ describe('Post Filters Service', function () { angular.mock.module('testApp'); }); - beforeEach(inject(function (_$rootScope_, $compile, _Notify_, _PostFilters_) { + beforeEach(inject(function (_$rootScope_, $compile, _Notify_, _PostFilters_, _CONST_) { $rootScope = _$rootScope_; $scope = _$rootScope_.$new(); PostFilters = _PostFilters_; Notify = _Notify_; + sources = _CONST_.ENABLED_SOURCES; })); describe('test service functions', function () { @@ -82,7 +84,7 @@ describe('Post Filters Service', function () { form: ['none'], set: [], user: false, - source: ['sms', 'twitter', 'web', 'email'], + source: sources, saved_search: '', orderby: 'created', order: 'desc', @@ -111,7 +113,7 @@ describe('Post Filters Service', function () { var newFilters = { status: ['archived', 'draft'], tags: [1,3,4], - source: ['sms', 'twitter', 'web', 'email'], + source: sources, form: ['testForm1', 'testForm2', 'testForm3'] }; PostFilters.setFilters(newFilters); diff --git a/legacy/test/unit/main/post/views/filters/sort-and-filter-counter.directive.spec.js b/legacy/test/unit/main/post/views/filters/sort-and-filter-counter.directive.spec.js index d66d6eea1f..ecf2727ab1 100644 --- a/legacy/test/unit/main/post/views/filters/sort-and-filter-counter.directive.spec.js +++ b/legacy/test/unit/main/post/views/filters/sort-and-filter-counter.directive.spec.js @@ -24,7 +24,7 @@ describe('filter unlocked on top directive', function () { form: [], set: [], user: false, - source: ['sms', 'twitter','web', 'email'] + source: [] }; beforeEach(function () { fixture.setBase('mocked_backend/api/v3'); diff --git a/legacy/test/unit/make-test-app.js b/legacy/test/unit/make-test-app.js index 5942e852c8..ae7951a0c2 100644 --- a/legacy/test/unit/make-test-app.js +++ b/legacy/test/unit/make-test-app.js @@ -64,7 +64,8 @@ module.exports = function () { OAUTH_CLIENT_SECRET: '35e7f0bca957836d05ca0492211b0ac707671261', CLAIMED_ANONYMOUS_SCOPES: claimedAnonymousScopes, CLAIMED_USER_SCOPES: claimedAnonymousScopes.concat('dataproviders'), - TOS_RELEASE_DATE: new Date('2017-08-04T14:32:22Z') + TOS_RELEASE_DATE: new Date('2017-08-04T14:32:22Z'), + ENABLED_SOURCES: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'] }) .service('Util', require('app/common/services/util.js')); diff --git a/legacy/test/unit/mock/services/post-filters.js b/legacy/test/unit/mock/services/post-filters.js index 22593a9bd5..dc9c8b2dc6 100644 --- a/legacy/test/unit/mock/services/post-filters.js +++ b/legacy/test/unit/mock/services/post-filters.js @@ -8,7 +8,7 @@ module.exports = [function () { center_point: '', within_km: '1', current_stage: [], - source: ['sms', 'twitter', 'web', 'email'], + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'], tags: [], form: [], set: [] @@ -23,7 +23,7 @@ module.exports = [function () { has_location: 'all', within_km: '1', current_stage: [], - source: ['sms', 'twitter', 'web', 'email'], + source: ['sms', 'twitter','web', 'email', 'whatsapp', 'ussd'], tags: [], form: [1, 2], set: [], diff --git a/root/src/config.js b/root/src/config.js index 79d70f1bba..c8a2ceaab7 100644 --- a/root/src/config.js +++ b/root/src/config.js @@ -3,6 +3,7 @@ // Uncomment lines below to configure your deployment // window.ushahidi = { // backendUrl : "https://ushahidi-platform-api-release.herokuapp.com", -// mapboxApiKey: "" +// mapboxApiKey: "", +// sources: ['sms', 'twitter', 'web', 'email', 'whatsapp', 'ussd'] // remove sources you don't want from the sources array list // }; window.ushahidi = {};