Files
nairobi/app/controllers/concerns/commentable_actions.rb
2016-01-13 19:25:47 +01:00

138 lines
4.1 KiB
Ruby

module CommentableActions
extend ActiveSupport::Concern
include Polymorphic
def index
@resources = @search_terms.present? ? resource_model.search(@search_terms) : resource_model.all
#advanced search filters
if @params_author
author = User.where(username: @params_author)
@resources = author.count > 0 ? @resources.where(author_id: author.first.id) : resource_model.none
end
if @params_date
case @params_date
when '1'
min_date_time = DateTime.now - 24.hour
when '2'
min_date_time = DateTime.now - 7.day
when '3'
min_date_time = DateTime.now - 30.day
when '4'
min_date_time = DateTime.now - 365.day
when '5'
@resources = @resources.where('created_at <= ?', @params_date_max) if @params_date_max
min_date_time = @params_date_min
end
@resources = @resources.where('created_at >= ?', min_date_time) if min_date_time
end
if @params_author_type
authors = User.where(official_level: @params_author_type.to_i)
@resources = @resources.where('author_id IN (?)', authors.map(&:id))
end
@resources = @resources.tagged_with(@tag_filter) if @tag_filter
@resources = @resources.page(params[:page]).for_render.send("sort_by_#{@current_order}")
index_customization if index_customization.present?
@tag_cloud = tag_cloud
set_resource_votes(@resources)
set_resources_instance
end
def show
set_resource_votes(resource)
@commentable = resource
@comment_tree = CommentTree.new(@commentable, params[:page], @current_order)
set_comment_flags(@comment_tree.comments)
set_resource_instance
end
def new
@resource = resource_model.new
set_resource_instance
load_featured_tags
end
def create
@resource = resource_model.new(strong_params)
@resource.author = current_user
if @resource.save_with_captcha
track_event
redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id)
redirect_to redirect_path, notice: t('flash.actions.create.notice', resource_name: "#{resource_name.capitalize}")
else
load_featured_tags
set_resource_instance
render :new
end
end
def edit
load_featured_tags
end
def update
resource.assign_attributes(strong_params)
if resource.save_with_captcha
redirect_to resource, notice: t('flash.actions.update.notice', resource_name: "#{resource_name.capitalize}")
else
load_featured_tags
set_resource_instance
render :edit
end
end
private
def track_event
ahoy.track "#{resource_name}_created".to_sym, "#{resource_name}_id": resource.id
end
def tag_cloud
resource_model.tag_counts.order("#{resource_name.pluralize}_count": :desc, name: :asc).limit(20)
end
def load_featured_tags
@featured_tags = ActsAsTaggableOn::Tag.where(featured: true)
end
def parse_tag_filter
if params[:tag].present?
@tag_filter = params[:tag] if ActsAsTaggableOn::Tag.named(params[:tag]).exists?
end
end
def parse_search_terms
@search_terms = params[:search] if params[:search].present?
end
def parse_advanced_search_terms
search = params[:advanced_search]
if search
@params_author = search[:author] if search[:author].present?
@params_author_type = search[:author_type] if search[:author_type].present?
@params_date = search[:date] if search[:date].present?
@params_date_min = search[:date_min] if (@params_date == '5') && search[:date_min].present?
@params_date_max = search[:date_max] if (@params_date == '5') && search[:date_max].present?
@search_terms = search[:search] if search[:search].present?
@advanced_search_present = true if params[:commit] || @params_author || @params_author_type || @params_date
end
end
def set_search_order
if params[:search].present? && params[:order].blank?
params[:order] = 'relevance'
end
end
def set_resource_votes(instance)
send("set_#{resource_name}_votes", instance)
end
def index_customization
nil
end
end