diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 6a49a8deb..938e38574 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -1,9 +1,20 @@ class ProposalsController < ApplicationController + before_action :parse_order, only: :index + before_action :parse_tag_filter, only: :index + before_action :parse_search_terms, only: :index before_action :authenticate_user!, except: [:index, :show] load_and_authorize_resource respond_to :html, :js + def index + @proposals = @search_terms.present? ? Proposal.search(@search_terms) : Proposal.all + @proposals = @proposals.tagged_with(@tag_filter) if @tag_filter + @proposals = @proposals.page(params[:page]).for_render.send("sort_by_#{@order}") + @tag_cloud = Proposal.tag_counts.order(taggings_count: :desc, name: :asc).limit(20) + set_proposal_votes(@proposals) + end + def show set_proposal_votes(@proposal) @commentable = @proposal @@ -55,4 +66,19 @@ class ProposalsController < ApplicationController def load_featured_tags @featured_tags = ActsAsTaggableOn::Tag.where(featured: true) end + + def parse_order + @valid_orders = ['confidence_score', 'hot_score', 'created_at', 'most_commented', 'random'] + @order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first + end + + def parse_tag_filter + if params[:tag].present? + @tag_filter = params[:tag] if ActsAsTaggableOn::Tag.where(name: params[:tag]).exists? + end + end + + def parse_search_terms + @search_terms = params[:search] if params[:search].present? + end end \ No newline at end of file diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 3892686af..69e0a70a7 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -21,6 +21,13 @@ class Proposal < ActiveRecord::Base before_validation :sanitize_description before_validation :sanitize_tag_list + scope :for_render, -> { includes(:tags) } + scope :sort_by_hot_score , -> { order(hot_score: :desc) } + scope :sort_by_confidence_score , -> { order(confidence_score: :desc) } + scope :sort_by_created_at, -> { order(created_at: :desc) } + scope :sort_by_most_commented, -> { order(comments_count: :desc) } + scope :sort_by_random, -> { order("RANDOM()") } + def total_votes cached_votes_up end diff --git a/app/views/proposals/_proposal.html.erb b/app/views/proposals/_proposal.html.erb new file mode 100644 index 000000000..cba2523cc --- /dev/null +++ b/app/views/proposals/_proposal.html.erb @@ -0,0 +1,30 @@ +
+ + <%= link_to t("proposals.proposal.comments", count: proposal.comments_count), proposal_path(proposal, anchor: "comments") %> + • + <%= l proposal.created_at.to_date %> +
+