module Alchemy module Admin class ContentsController < Alchemy::Admin::BaseController helper 'alchemy/admin/essences' authorize_resource class: Alchemy::Content def new @element = Element.find(params[:element_id]) @options = options_from_params @contents = @element.available_contents @content = @element.contents.build end def create @element = Element.find(params[:content][:element_id]) @content = Content.create_from_scratch(@element, content_params) @options = options_from_params @html_options = params[:html_options] || {} if picture_gallery_editor? @content.update_essence(picture_id: params[:picture_id]) @options = options_for_picture_gallery @content_dom_id = "#add_picture_#{@element.id}" else @content_dom_id = "#add_content_for_element_#{@element.id}" end @locals = essence_editor_locals end def update @content = Content.find(params[:id]) @content.update_essence(content_params) end def order Content.transaction do params[:content_ids].each_with_index do |id, idx| Content.where(id: id).update_all(position: idx + 1) end end @notice = _t("Successfully saved content position") end def destroy @content = Content.find(params[:id]) @content_dom_id = @content.dom_id @notice = _t("Successfully deleted content", content: @content.name_for_label) @content.destroy end private def content_params params.require(:content).permit(:element_id, :name, :ingredient, :essence_type) end def picture_gallery_editor? params[:content][:essence_type] == 'Alchemy::EssencePicture' && @options[:grouped] == 'true' end def options_for_picture_gallery @gallery_pictures = @element.contents.gallery_pictures @dragable = @gallery_pictures.size > 1 @options.merge(dragable: @dragable) end def essence_editor_locals { content: @content, options: @options.symbolize_keys, html_options: @html_options.symbolize_keys } end end end end