ref: master
app/controllers/box_organizer_controller.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
class BoxOrganizerController < ApplicationController before_filter :login_required def index @available_blocks = available_blocks.uniq.sort_by(&:pretty_name) end def move_block @block = params[:id] ? boxes_holder.blocks.find(params[:id].gsub(/^block-/, '')) : nil target_position = nil if (params[:target] =~ /before-block-([0-9]+)/) block_before = boxes_holder.blocks.find($1) target_position = block_before.position @target_box = block_before.box elsif params[:target] =~ /end-of-box-([0-9]+)/ @target_box = boxes_holder.boxes.find_by id: $1 end @block = new_block(params[:type], @target_box) if @block.nil? @source_box = @block.box if (@source_box != @target_box) @block.remove_from_list @block.box = @target_box end if target_position.nil? # insert in the end of the box @block.insert_at(@target_box.blocks.size + 1) @block.move_to_bottom else new_position = if @block.position and @block.position < target_position then target_position - 1 else target_position end @block.insert_at new_position end @block.save! @target_box.reload unless request.xhr? redirect_to :action => 'index' end end def move_block_down @block = boxes_holder.blocks.find(params[:id]) @block.move_lower redirect_to :action => 'index' end def move_block_up @block = boxes_holder.blocks.find(params[:id]) @block.move_higher redirect_to :action => 'index' end def edit @block = boxes_holder.blocks.find(params[:id]) render :action => 'edit', :layout => false end def search_autocomplete if request.xhr? and params[:query] search = params[:query] path_list = if boxes_holder.is_a?(Environment) && boxes_holder.enabled?('use_portal_community') && boxes_holder.portal_community boxes_holder.portal_community.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{portal}/"+content.path } elsif boxes_holder.is_a?(Profile) boxes_holder.articles.where("name ILIKE ? OR path ILIKE ?", "%#{search}%", "%#{search}%").limit(20).map { |content| "/{profile}/"+content.path } else [] end render :json => path_list.to_json else redirect_to "/" end end def save @block = boxes_holder.blocks.find(params[:id]) return render_access_denied unless @block.editable?(user) @block.update(params[:block]) redirect_to :action => 'index' end def boxes_editor? true end def remove @block = Block.find(params[:id]) if @block.destroy redirect_to :action => 'index' else session[:notice] = _('Failed to remove block') end end def clone_block block = Block.find(params[:id]) block.duplicate redirect_to :action => 'index' end def show_block_type_info type = params[:type] if type.blank? || !available_blocks.map(&:name).include?(type) raise ArgumentError.new("Type %s is not allowed. Go away.".html_safe % type) end @block = type.constantize.new @block.box = Box.new(:owner => boxes_holder) render :action => 'show_block_type_info', :layout => false end protected :boxes_editor? protected def new_block(type, box) if !available_blocks.map(&:name).include?(type) raise ArgumentError.new("Type %s is not allowed. Go away.".html_safe % type) end block = type.constantize.new box.blocks << block block end end |