diff --git a/app/controllers/admin/newsletters_controller.rb b/app/controllers/admin/newsletters_controller.rb index 60895dc0c..dc06a5488 100644 --- a/app/controllers/admin/newsletters_controller.rb +++ b/app/controllers/admin/newsletters_controller.rb @@ -1,6 +1,47 @@ class Admin::NewslettersController < Admin::BaseController def index + @newsletters = Newsletter.all + end + + def show + @newsletter = Newsletter.find(params[:id]) + end + + def new + @newsletter = Newsletter.new + end + + def create + @newsletter = Newsletter.new(newsletter_params) + + if @newsletter.save + notice = t("admin.newsletters.create_success") + redirect_to [:admin, @newsletter], notice: notice + else + render :new + end + end + + def edit + @newsletter = Newsletter.find(params[:id]) + end + + def update + @newsletter = Newsletter.find(params[:id]) + + if @newsletter.update(newsletter_params) + redirect_to [:admin, @newsletter], notice: t("admin.newsletters.update_success") + else + render :edit + end + end + + def destroy + @newsletter = Newsletter.find(params[:id]) + @newsletter.destroy + + redirect_to admin_newsletters_path, notice: t("admin.newsletters.delete_success") end def users @@ -9,4 +50,20 @@ class Admin::NewslettersController < Admin::BaseController send_file(File.join(zip.path), type: 'application/zip') end -end \ No newline at end of file + def deliver + @newsletter = Newsletter.find(params[:id]) + Mailer.newsletter(@newsletter).deliver_later + + @newsletter.update(sent_at: Time.current) + + redirect_to [:admin, @newsletter], notice: t("admin.newsletters.send_success") + end + + private + + def newsletter_params + newsletter_params = params.require(:newsletter) + .permit(:subject, :segment_recipient, :from, :body) + newsletter_params.merge(segment_recipient: newsletter_params[:segment_recipient].to_i) + end +end diff --git a/config/routes/admin.rb b/config/routes/admin.rb index c372ec07f..fb3c2a4de 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -142,7 +142,10 @@ namespace :admin do resource :activity, controller: :activity, only: :show - resources :newsletters, only: :index do + resources :newsletters do + member do + post :deliver + end get :users, on: :collection end