From a9efb93e99411c9d7ec5469ee22a8702bd159eef Mon Sep 17 00:00:00 2001 From: Toks Date: Mon, 6 May 2013 12:14:42 -0400 Subject: [PATCH 1/5] add category field to pools --- app/models/pool.rb | 19 +++++++++++++++++-- app/views/pools/edit.html.erb | 1 + app/views/pools/new.html.erb | 1 + .../20130506154136_add_category_to_pools.rb | 6 ++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20130506154136_add_category_to_pools.rb diff --git a/app/models/pool.rb b/app/models/pool.rb index d03b235d0..7c01e45d2 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -3,6 +3,7 @@ require 'ostruct' class Pool < ActiveRecord::Base validates_uniqueness_of :name validates_format_of :name, :with => /\A[^\s;,]+\Z/, :on => :create, :message => "cannot have whitespace, commas, or semicolons" + validates_inclusion_of :category, :in => %w(series collection) belongs_to :creator, :class_name => "User" belongs_to :updater, :class_name => "User" has_many :versions, :class_name => "PoolVersion", :dependent => :destroy, :order => "pool_versions.id ASC" @@ -12,7 +13,7 @@ class Pool < ActiveRecord::Base before_validation :initialize_creator, :on => :create after_save :create_version before_destroy :create_mod_action_for_destroy - attr_accessible :name, :description, :post_ids, :post_id_array, :post_count, :is_active, :as => [:member, :gold, :platinum, :contributor, :janitor, :moderator, :admin, :default] + attr_accessible :name, :description, :post_ids, :post_id_array, :post_count, :is_active, :category, :as => [:member, :gold, :platinum, :contributor, :janitor, :moderator, :admin, :default] attr_accessible :is_deleted, :as => [:janitor, :moderator, :admin] module SearchMethods @@ -20,6 +21,14 @@ class Pool < ActiveRecord::Base where("is_deleted = false") end + def series + where("category = ?", "series") + end + + def collection + where("category = ?", "collection") + end + def search(params) q = scoped params = {} if params.blank? @@ -54,6 +63,12 @@ class Pool < ActiveRecord::Base q = q.order("updated_at desc") end + if params[:category] == "series" + q = q.series + elsif params[:category] == "collection" + q = q.collection + end + q end end @@ -236,7 +251,7 @@ class Pool < ActiveRecord::Base end def create_version - if post_ids_changed? || name_changed? || description_changed? || is_active_changed? || is_deleted_changed? + if post_ids_changed? || name_changed? || description_changed? || is_active_changed? || is_deleted_changed? || category_changed? last_version = versions.last if last_version && CurrentUser.ip_addr == last_version.updater_ip_addr && CurrentUser.id == last_version.updater_id diff --git a/app/views/pools/edit.html.erb b/app/views/pools/edit.html.erb index dfaa49daa..26bfb5953 100644 --- a/app/views/pools/edit.html.erb +++ b/app/views/pools/edit.html.erb @@ -5,6 +5,7 @@ <%= f.input :name, :input_html => { :value => @pool.pretty_name } %> <%= f.input :description %> <%= f.input :post_ids, :label => "Posts" %> + <%= f.input :category, :collection => ["series", "collection"], :include_blank => false %> <%= f.input :is_active %> <%= f.button :submit %> <% end %> diff --git a/app/views/pools/new.html.erb b/app/views/pools/new.html.erb index c9b05fa68..839c17456 100644 --- a/app/views/pools/new.html.erb +++ b/app/views/pools/new.html.erb @@ -4,6 +4,7 @@

New Pool

<%= f.input :name %> <%= f.input :description %> + <%= f.input :category, :collection => ["series", "collection"], :include_blank => false %> <%= f.button :submit %> <% end %> diff --git a/db/migrate/20130506154136_add_category_to_pools.rb b/db/migrate/20130506154136_add_category_to_pools.rb new file mode 100644 index 000000000..61be564d8 --- /dev/null +++ b/db/migrate/20130506154136_add_category_to_pools.rb @@ -0,0 +1,6 @@ +class AddCategoryToPools < ActiveRecord::Migration + def change + execute("set statement_timeout = 0") + add_column :pools, :category, :string, :null => false, :default => "series" + end +end From fb4ce9a13b6e235d6175b6aa08ac2dc3a7785ac0 Mon Sep 17 00:00:00 2001 From: Toks Date: Mon, 13 May 2013 21:11:48 -0400 Subject: [PATCH 2/5] list series pools first on post pages; color collection pools purple --- app/assets/stylesheets/specific/pools.css.scss | 8 ++++++++ app/presenters/post_presenter.rb | 13 +++++++++---- app/views/pools/index.html.erb | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/specific/pools.css.scss b/app/assets/stylesheets/specific/pools.css.scss index 31f86c358..06857cdd5 100644 --- a/app/assets/stylesheets/specific/pools.css.scss +++ b/app/assets/stylesheets/specific/pools.css.scss @@ -1,5 +1,13 @@ @import "../common/000_vars.css.scss"; +a.pool-category-collection, span.pool-category-collection a { + color: #A0A; + + &:hover { + color: #B6B; + } +} + div#c-pool-elements { div#a-new { font-size: 0.8em; diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index d3678c13d..140d2e067 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -161,12 +161,17 @@ class PostPresenter < Presenter return if pool.nil? html += pool_link_html(template, pool, :include_rel => true) - @post.pools.active.where("id <> ?", template.params[:pool_id]).each do |other_pool| + other_pools = @post.pools.active.where("id <> ?", template.params[:pool_id]) + other_pools = other_pools.series + other_pools.collection + + other_pools.each do |other_pool| html += pool_link_html(template, other_pool) end else + pools = @post.pools.active + pools = pools.series + pools.collection first = true - @post.pools.active.each do |pool| + pools.each do |pool| if first && template.params[:tags].blank? html += pool_link_html(template, pool, :include_rel => true) first = false @@ -187,11 +192,11 @@ class PostPresenter < Presenter if options[:include_rel] prev_rel = "prev" next_rel = "next" - klass = "active" + klass = "active pool-category-#{pool.category}" else prev_rel = nil next_rel = nil - klass = "" + klass = "pool-category-#{pool.category}" end if pool.neighbors(@post).previous diff --git a/app/views/pools/index.html.erb b/app/views/pools/index.html.erb index 8ff8204b4..36f408802 100644 --- a/app/views/pools/index.html.erb +++ b/app/views/pools/index.html.erb @@ -17,7 +17,7 @@ - <%= link_to h(pool.pretty_name), pool_path(pool) %> + <%= link_to h(pool.pretty_name), pool_path(pool), :class => "pool-category-#{pool.category}" %> <%= link_to_user pool.creator %> From 633bc8cb311bfc4a81210d59fa3f52ac828f91bf Mon Sep 17 00:00:00 2001 From: Toks Date: Wed, 15 May 2013 01:09:18 -0400 Subject: [PATCH 3/5] possibly better fix for ordering pools by category --- app/models/pool.rb | 4 ++++ app/presenters/post_presenter.rb | 7 ++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/models/pool.rb b/app/models/pool.rb index 7c01e45d2..8994a0e36 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -29,6 +29,10 @@ class Pool < ActiveRecord::Base where("category = ?", "collection") end + def series_first + order("(case category when 'series' then 0 else 1 end), name") + end + def search(params) q = scoped params = {} if params.blank? diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index 140d2e067..04577fc72 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -161,16 +161,13 @@ class PostPresenter < Presenter return if pool.nil? html += pool_link_html(template, pool, :include_rel => true) - other_pools = @post.pools.active.where("id <> ?", template.params[:pool_id]) - other_pools = other_pools.series + other_pools.collection - + other_pools = @post.pools.active.where("id <> ?", template.params[:pool_id]).series_first other_pools.each do |other_pool| html += pool_link_html(template, other_pool) end else - pools = @post.pools.active - pools = pools.series + pools.collection first = true + pools = @post.pools.active.series_first pools.each do |pool| if first && template.params[:tags].blank? html += pool_link_html(template, pool, :include_rel => true) From b126e083efef8fb318017dd8305581cfc674ee20 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 18 May 2013 12:32:50 -0400 Subject: [PATCH 4/5] add pool category search option --- app/views/pools/_search.html.erb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/views/pools/_search.html.erb b/app/views/pools/_search.html.erb index f0f2f0ccf..9c0f30779 100644 --- a/app/views/pools/_search.html.erb +++ b/app/views/pools/_search.html.erb @@ -28,6 +28,15 @@ + +