module Caboose class PageBlocksController < ApplicationController #=========================================================================== # Admin actions #=========================================================================== # GET /admin/pages/:page_id/blocks def admin_index return if !user_is_allowed('pages', 'view') blocks = PageBlock.where(:page_id => params[:page_id]).reorder(:sort_order) render :json => blocks end # GET /admin/pages/:page_id/blocks/new def admin_new return unless user_is_allowed('pages', 'add') @page = Page.find(params[:page_id]) @block = PageBlock.new(:page_id => params[:page_id]) render :layout => 'caboose/admin' end # GET /admin/pages/:page_id/blocks/:id def admin_show return unless user_is_allowed('pages', 'edit') block = PageBlock.find(params[:id]) render :json => block end # GET /admin/pages/:page_id/blocks/:id/render def admin_render return unless user_is_allowed('pages', 'edit') b = PageBlock.find(params[:id]) bt = b.page_block_type html = nil if bt.use_render_function && bt.render_function html = b.render_from_function(params[:empty_text]) else html = render_to_string({ :partial => "caboose/page_blocks/#{b.page_block_type.name}", :locals => { :block => b, :empty_text => params[:empty_text] } }) end render :json => html end # GET /admin/pages/:page_id/blocks/render def admin_render_all return unless user_is_allowed('pages', 'edit') p = Page.find(params[:page_id]) blocks = p.page_blocks.collect do |b| bt = b.page_block_type html = nil if bt.use_render_function && bt.render_function html = b.render_from_function(params[:empty_text]) else html = render_to_string({ :partial => "caboose/page_blocks/#{bt.name}", :locals => { :block => b, :empty_text => params[:empty_text] } }) end { :id => b.id, :page_block_type_id => bt.id, :sort_order => b.sort_order, :html => html } end render :json => blocks end # GET /admin/pages/:page_id/blocks/:id/edit def admin_edit return unless user_is_allowed('pages', 'edit') @page = Page.find(params[:page_id]) PageBlock.create_field_values(params[:id]) @block = PageBlock.find(params[:id]) #render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal' render :layout => 'caboose/modal' end # POST /admin/pages/:page_id/blocks def admin_create return unless user_is_allowed('pages', 'add') resp = Caboose::StdClass.new({ 'error' => nil, 'redirect' => nil }) b = PageBlock.new b.page_id = params[:page_id].to_i b.page_block_type_id = params[:page_block_type_id] if !params[:index].nil? b.sort_order = params[:index].to_i elsif params[:after_id] b2 = PageBlock.find(params[:after_id].to_i) b.sort_order = b2.sort_order + 1 end i = b.sort_order + 1 PageBlock.where("page_id = ? and sort_order >= ?", b.page_id, b.sort_order).reorder(:sort_order).each do |b2| b2.sort_order = i b2.save i = i + 1 end # Save the block b.save # Send back the response resp.block = b render :json => resp end # PUT /admin/pages/:page_id/blocks/:id def admin_update return unless user_is_allowed('pages', 'edit') resp = StdClass.new({'attributes' => {}}) b = PageBlock.find(params[:id]) obj = b.object save = true user = logged_in_user b.block_type_definition[:attributes].each do |attrib| obj[attrib[:name]] = params[attrib[:name]] if params[attrib[:name]] end b.value = JSON.generate(obj) resp.success = save && b.save render :json => resp end # DELETE /admin/pages/:page_id/blocks/:id def admin_delete return unless user_is_allowed('pages', 'delete') PageBlock.find(params[:id]).destroy resp = StdClass.new({ 'redirect' => "/admin/pages/#{params[:page_id]}/edit" }) render :json => resp end end end