Class: Spotlight::PagesController

Inherits:
ApplicationController show all
Includes:
Blacklight::SearchContext, Base, SearchHelper
Defined in:
app/controllers/spotlight/pages_controller.rb

Overview

Base CRUD controller for pages

Instance Method Summary collapse

Methods included from Base

#autocomplete_json_response, #autocomplete_json_response_for_document, #blacklight_config, #controller_tracking_method

Methods included from Config

#exhibit_specific_blacklight_config

Methods included from SearchHelper

#search_service, #search_service_context

Methods included from Concerns::ApplicationController

#enabled_in_spotlight_view_type_configuration?, #field_enabled?

Methods included from Controller

#blacklight_config, #current_exhibit, #current_masthead, #current_masthead=, #current_site, #default_url_options, #exhibit_masthead?, #exhibit_search_action_url, #exhibit_search_facet_path, #resource_masthead?, #search_action_url, #search_facet_path, #set_exhibit_locale_scope, #set_locale

Instance Method Details

#cloneObject



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'app/controllers/spotlight/pages_controller.rb', line 99

def clone
  new_page = CloneTranslatedPageFromLocale.call(locale: clone_params, page: @page)

  model_name = @page.class.model_name.human.downcase
  if new_page.save
    redirect_to(
      edit_exhibit_translations_path(current_exhibit, language: clone_params, tab: 'pages'),
      notice: t(:'helpers.submit.page.created', model: model_name)
    )
  else
    redirect_to :back, error: t(:'helpers.submit.page.clone_error', model: model_name)
  end
end

#createObject

POST /exhibits/1/pages



60
61
62
63
64
65
66
67
68
69
70
# File 'app/controllers/spotlight/pages_controller.rb', line 60

def create
  @page.attributes = page_params
  @page.last_edited_by = @page.created_by = current_user

  if @page.save
    redirect_to [spotlight, @page.exhibit, page_collection_name.to_sym],
                notice: t(:'helpers.submit.page.created', model: @page.class.model_name.human.downcase)
  else
    render action: 'new'
  end
end

#destroyObject

DELETE /pages/1



84
85
86
87
88
# File 'app/controllers/spotlight/pages_controller.rb', line 84

def destroy
  @page.destroy

  redirect_to [spotlight, @page.exhibit, page_collection_name.to_sym], flash: { html_safe: true }, notice: undo_notice(:destroyed)
end

#editObject

GET /pages/1/edit



55
56
57
# File 'app/controllers/spotlight/pages_controller.rb', line 55

def edit
  @page.lock! current_user
end

#indexObject

GET /exhibits/1/pages



26
27
28
29
30
31
32
33
34
# File 'app/controllers/spotlight/pages_controller.rb', line 26

def index
  # set up a model the inline "add a new page" form
  @page = CanCan::ControllerResource.new(self).send(:build_resource)

  respond_to do |format|
    format.html
    format.json { render json: @pages.for_default_locale.published.to_json(methods: [:thumbnail_image_url]) }
  end
end

#newObject

GET /exhibits/1/pages/new



52
# File 'app/controllers/spotlight/pages_controller.rb', line 52

def new; end

#previewObject



41
42
43
44
45
46
47
48
49
# File 'app/controllers/spotlight/pages_controller.rb', line 41

def preview
  @page = current_exhibit.pages.find(params['id'])
  authorize! :read, @page
  @block = SirTrevorRails::Block.from_hash(JSON.parse(params[:block], symbolize_names: true), @page)

  respond_to do |format|
    format.html { render 'preview', layout: false }
  end
end

#showObject

GET /pages/1



37
38
39
# File 'app/controllers/spotlight/pages_controller.rb', line 37

def show
  fresh_when([@page.exhibit, @page])
end

#updateObject

PATCH/PUT /pages/1



73
74
75
76
77
78
79
80
81
# File 'app/controllers/spotlight/pages_controller.rb', line 73

def update
  @page.lock&.delete

  if @page.update(page_params.merge(last_edited_by: current_user))
    redirect_to [spotlight, @page.exhibit, @page, format: params.permit(:format)], flash: { html_safe: true }, notice: undo_notice(:updated)
  else
    render action: 'edit'
  end
end

#update_allObject



90
91
92
93
94
95
96
97
# File 'app/controllers/spotlight/pages_controller.rb', line 90

def update_all
  notice = if @exhibit.update update_all_page_params
             t(:'helpers.submit.page.batch_updated', model: human_name)
           else
             t(:'helpers.submit.page.batch_error', model: human_name)
           end
  redirect_back fallback_location: spotlight.exhibit_dashboard_path(@exhibit), notice: notice
end