summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/asset.rb4
-rw-r--r--app/models/node.rb2
-rw-r--r--app/models/page.rb18
3 files changed, 17 insertions, 7 deletions
diff --git a/app/models/asset.rb b/app/models/asset.rb
index d27c525..3ad5857 100644
--- a/app/models/asset.rb
+++ b/app/models/asset.rb
@@ -2,9 +2,11 @@ class Asset < ActiveRecord::Base
2 2
3 has_many :related_assets, :dependent => :destroy 3 has_many :related_assets, :dependent => :destroy
4 has_many :pages, :through => :related_assets 4 has_many :pages, :through => :related_assets
5 5
6 has_attached_file( 6 has_attached_file(
7 :upload, 7 :upload,
8 :path => ":rails_root/public/system/:attachment/:id/:style/:filename",
9 :url => "/system/:attachment/:id/:style/:filename",
8 :styles => { 10 :styles => {
9 :medium => "300x300", 11 :medium => "300x300",
10 :thumb => "100x100", 12 :thumb => "100x100",
diff --git a/app/models/node.rb b/app/models/node.rb
index 1b80565..3cab7ed 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -146,7 +146,7 @@ class Node < ActiveRecord::Base
146 146
147 # returns an array with all parts of a unique_name rather than a string 147 # returns an array with all parts of a unique_name rather than a string
148 def unique_path 148 def unique_path
149 unique_name.split("/") rescue [unique_name] 149 unique_name.to_s
150 end 150 end
151 151
152 # returns array with pages up to root excluding root 152 # returns array with pages up to root excluding root
diff --git a/app/models/page.rb b/app/models/page.rb
index 05abd43..5c93a93 100644
--- a/app/models/page.rb
+++ b/app/models/page.rb
@@ -39,8 +39,8 @@ class Page < ActiveRecord::Base
39 # partially or entirely overwritten by the options hash. Afterwards the merged 39 # partially or entirely overwritten by the options hash. Afterwards the merged
40 # parameters are used to query the DB for Pages matching these parameters. 40 # parameters are used to query the DB for Pages matching these parameters.
41 # The aggregation only takes published pages into account. 41 # The aggregation only takes published pages into account.
42 def self.aggregate options, page=1
43 42
43 def self.aggregate options, page=1
44 defaults = { 44 defaults = {
45 :tags => "", 45 :tags => "",
46 :limit => 25, 46 :limit => 25,
@@ -52,10 +52,18 @@ class Page < ActiveRecord::Base
52 52
53 scope = Page.heads 53 scope = Page.heads
54 unless options[:tags].blank? 54 unless options[:tags].blank?
55 scope = scope.tagged_with( 55 tag_names = options[:tags].gsub(/\s/, ",").split(",").map(&:strip).map(&:downcase).uniq.reject(&:blank?)
56 options[:tags].gsub(/\s/, ",").split(",").map(&:strip), 56
57 :match_all => true 57 unless tag_names.empty?
58 ) 58 scope = scope
59 .joins("JOIN taggings ON taggings.taggable_id = pages.id
60 AND taggings.taggable_type = 'Page'
61 AND taggings.context = 'tags'")
62 .joins("JOIN tags ON tags.id = taggings.tag_id")
63 .where("LOWER(tags.name) IN (?)", tag_names)
64 .group("pages.id")
65 .having("COUNT(DISTINCT tags.id) = ?", tag_names.length)
66 end
59 end 67 end
60 68
61 scope.order("#{options[:order_by]} #{options[:order_direction]}") 69 scope.order("#{options[:order_by]} #{options[:order_direction]}")