diff --git a/app/controllers/settings/promotions_controller.rb b/app/controllers/settings/promotions_controller.rb new file mode 100644 index 00000000..147e6131 --- /dev/null +++ b/app/controllers/settings/promotions_controller.rb @@ -0,0 +1,56 @@ +class Settings::PromotionsController < Admin::BaseController + before_action :set_promotion, except: [:index, :new, :create] + + def index + @promotions = Promotion.all + end + + def new + @promotion = Promotion.new + end + + def create + @promotion = Promotion.new(resource_params) + + if @promotion.save + log_action :create, @promotion + redirect_to settings_promotions_path, notice: I18n.t('promotions.created_msg') + else + render :new + end + end + + def edit + end + + def update + if @promotion.update(resource_params) + log_action :update, @promotion + flash[:notice] = I18n.t('promotions.updated_msg') + else + flash[:alert] = I18n.t('promotions.update_failed_msg') + end + redirect_to settings_promotions_path + end + + def destroy + @promotion.destroy! + log_action :destroy, @promotion + flash[:notice] = I18n.t('promotions.destroyed_msg') + redirect_to settings_promotions_path + end + + private + + def set_promotion + @promotion = Promotion.find(params[:id]) + end + + def set_filter_params + @filter_params = filter_params.to_hash.symbolize_keys + end + + def resource_params + params.require(:promotion).permit(:expires_at, :status_id, :timeline_id, :position) + end +end diff --git a/app/views/settings/promotions/_promotion.html.haml b/app/views/settings/promotions/_promotion.html.haml new file mode 100644 index 00000000..73833555 --- /dev/null +++ b/app/views/settings/promotions/_promotion.html.haml @@ -0,0 +1,8 @@ +%tr + %td= promotion.timeline_id + %td= promotion.status_id + %td= promotion.expires_at + %td= promotion.position + %td + = table_link_to 'pencil', t('promotions.edit'), edit_settings_promotion_path(promotion) + = table_link_to 'trash', t('promotions.delete'), settings_promotion_path(promotion), method: :delete, data: { confirm: t('settings.promotions.are_you_sure') } diff --git a/app/views/settings/promotions/edit.html.haml b/app/views/settings/promotions/edit.html.haml new file mode 100644 index 00000000..ccfeb379 --- /dev/null +++ b/app/views/settings/promotions/edit.html.haml @@ -0,0 +1,14 @@ +- content_for :page_title do + = t('promotions.title') + += simple_form_for @promotion, url: settings_promotion_path(@promotion) do |f| + = render 'shared/error_messages', object: @promotion + + .fields-group + = f.input :timeline_id, wrapper: :with_label, label: t('promotions.timeline_id') + = f.input :status_id, wrapper: :with_label, label: t('promotions.status_id') + = f.input :expires_at, as: :string, wrapper: :with_label, label: t('promotions.expires_at') + = f.input :position, wrapper: :with_label, label: t('promotions.position') + + .actions + = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/settings/promotions/index.html.haml b/app/views/settings/promotions/index.html.haml new file mode 100644 index 00000000..5cbbec30 --- /dev/null +++ b/app/views/settings/promotions/index.html.haml @@ -0,0 +1,16 @@ +- content_for :page_title do + = t('promotions.title') + +.table-wrapper + %table.table + %thead + %tr + %th= t('promotions.timeline_id') + %th= t('promotions.status_id') + %th= t('promotions.expires_at') + %th= t('promotions.position') + %th + %tbody + = render @promotions + += link_to t('promotions.create'), new_settings_promotion_path, class: 'button' diff --git a/app/views/settings/promotions/new.html.haml b/app/views/settings/promotions/new.html.haml new file mode 100644 index 00000000..8e73e308 --- /dev/null +++ b/app/views/settings/promotions/new.html.haml @@ -0,0 +1,14 @@ +- content_for :page_title do + = t('.title') + += simple_form_for @promotion, url: settings_promotions_path do |f| + = render 'shared/error_messages', object: @promotion + + .fields-group + = f.input :timeline_id, wrapper: :with_label, label: t('promotions.timeline_id') + = f.input :status_id, wrapper: :with_label, label: t('promotions.status_id') + = f.input :expires_at, as: :string, wrapper: :with_label, label: t('promotions.expires_at') + = f.input :position, wrapper: :with_label, label: t('promotions.position') + + .actions + = f.button :button, t('.create'), type: :submit diff --git a/config/locales/en.yml b/config/locales/en.yml index 41c657a4..427db50f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -70,6 +70,8 @@ en: moderator: Mod unavailable: Profile unavailable unfollow: Unfollow + promotions: + title: Promotions admin: account_actions: action: Perform action diff --git a/config/navigation.rb b/config/navigation.rb index 531a19b3..3282b6e5 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -55,6 +55,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? } s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } s.item :moderation, safe_join([fa_icon('id-card-o fw'), t('verifications.moderation.title')]), settings_verifications_moderation_url, if: -> { current_user.admin? } + s.item :promotions, safe_join([fa_icon('star fw'), t('promotions.title')]), settings_promotions_url, if: -> { current_user.admin? } end n.item :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } diff --git a/config/routes.rb b/config/routes.rb index 27ca11dc..bae766bb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -89,6 +89,8 @@ Rails.application.routes.draw do post '/btcpay-notification', to: 'upgrade#btcpay_notification', as: :btcpay_notification end + resources :promotions, only: [:index, :new, :create, :edit, :update, :destroy] + namespace :verifications do get :moderation, to: 'moderation#index', as: :moderation get 'moderation/:id/approve', to: 'moderation#approve', as: :approve @@ -236,7 +238,7 @@ Rails.application.routes.draw do resources :users, only: [] do resource :two_factor_authentication, only: [:destroy] end - + resources :custom_emojis, only: [:index, :new, :create, :update, :destroy] do member do post :copy