diff --git a/app/controllers/spree/admin/products_controller_decorator.rb b/app/controllers/spree/admin/products_controller_decorator.rb index 7d58e94dfe..d2f715712e 100644 --- a/app/controllers/spree/admin/products_controller_decorator.rb +++ b/app/controllers/spree/admin/products_controller_decorator.rb @@ -5,6 +5,7 @@ Spree::Admin::ProductsController.class_eval do include OpenFoodNetwork::SpreeApiKeyLoader include OrderCyclesHelper include EnterprisesHelper + before_filter :load_form_data, :only => [:bulk_edit, :new, :create, :edit, :update] before_filter :load_spree_api_key, :only => [:bulk_edit, :variant_overrides] before_filter :strip_new_properties, only: [:create, :update] @@ -25,6 +26,7 @@ Spree::Admin::ProductsController.class_eval do end def bulk_edit + @current_user = spree_current_user @show_latest_import = params[:latest_import] || false end diff --git a/app/models/feature_flags.rb b/app/models/feature_flags.rb new file mode 100644 index 0000000000..aaba0f4472 --- /dev/null +++ b/app/models/feature_flags.rb @@ -0,0 +1,28 @@ +# Tells whether a particular feature is enabled or not +class FeatureFlags + # Constructor + # + # @param user [User] + def initialize(user) + @user = user + end + + # Checks whether product import is enabled for the specified user + # + # @return [Boolean] + def product_import_enabled? + superadmin? + end + + private + + attr_reader :user + + # Checks whether the specified user is a superadmin, with full control of the + # instance + # + # @return [Boolean] + def superadmin? + user.has_spree_role?('admin') + end +end diff --git a/app/views/spree/admin/products/bulk_edit/_filters.html.haml b/app/views/spree/admin/products/bulk_edit/_filters.html.haml index 72458b3391..9c08c9adda 100644 --- a/app/views/spree/admin/products/bulk_edit/_filters.html.haml +++ b/app/views/spree/admin/products/bulk_edit/_filters.html.haml @@ -12,12 +12,13 @@ %label{ for: 'category_filter' }= t 'category' %br %select.fullwidth{ id: 'category_filter', 'ofn-select2-min-search' => 5, ng: {model: 'categoryFilter', options: 'taxon.id as taxon.name for taxon in filterTaxons'} } - .filter_select.three.columns - %label{ for: 'import_filter' } Import Date - %br - %select.fullwidth{ id: 'import_date_filter', 'ofn-select2-min-search' => 5, ng: {model: 'importDateFilter', init: "importDates = #{@import_dates}; showLatestImport = #{@show_latest_import}"}} - %option{value: "{{date.id}}", ng: {repeat: "date in importDates track by date.id" }} - {{date.name}} + - if FeatureFlags.new(@current_user).product_import_enabled? + .filter_select.three.columns + %label{ for: 'import_filter' } Import Date + %br + %select.fullwidth{ id: 'import_date_filter', 'ofn-select2-min-search' => 5, ng: {model: 'importDateFilter', init: "importDates = #{@import_dates}; showLatestImport = #{@show_latest_import}"}} + %option{value: "{{date.id}}", ng: {repeat: "date in importDates track by date.id" }} + {{date.name}} .filter_clear.three.columns.omega %label{ for: 'clear_all_filters' } diff --git a/spec/models/feature_flags_spec.rb b/spec/models/feature_flags_spec.rb new file mode 100644 index 0000000000..3a2d06da30 --- /dev/null +++ b/spec/models/feature_flags_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe FeatureFlags do + describe '.product_import_enabled?' do + let(:user) { build_stubbed(:user) } + let(:feature_flags) { described_class.new(user) } + + context 'when the user is superadmin' do + before do + allow(user).to receive(:has_spree_role?).with('admin') { true } + end + + it 'returns true' do + expect(feature_flags.product_import_enabled?).to eq(true) + end + end + + context 'when the user is not superadmin' do + before do + allow(user).to receive(:has_spree_role?).with('admin') { false } + end + + it 'returns false' do + expect(feature_flags.product_import_enabled?).to eq(false) + end + end + end +end