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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
require 'acts-as-taggable-on'
require 'seo_meta'
module Refinery
module Blog
class Post < ActiveRecord::Base
translates :title, :body, :custom_url, :custom_teaser, :slug, :include => :seo_meta
extend FriendlyId
friendly_id :friendly_id_source, :use => [:slugged, :globalize]
is_seo_meta if self.table_exists?
default_scope :order => 'published_at DESC'
belongs_to :author, :class_name => Refinery::Blog.user_class.to_s, :foreign_key => :user_id, :readonly => true
has_many :comments, :dependent => :destroy, :foreign_key => :blog_post_id
acts_as_taggable
has_many :categorizations, :dependent => :destroy, :foreign_key => :blog_post_id
has_many :categories, :through => :categorizations, :source => :blog_category
acts_as_indexed :fields => [:title, :body]
validates :title, :presence => true, :uniqueness => true
validates :body, :presence => true
validates :published_at, :author, :presence => true
validates :source_url, :url => { :if => 'Refinery::Blog.validate_source_url',
:update => true,
:allow_nil => true,
:allow_blank => true,
:verify => [:resolve_redirects]}
attr_accessible :title, :body, :custom_teaser, :tag_list, :draft, :published_at, :custom_url, :author
attr_accessible :browser_title, :meta_description, :user_id, :category_ids
attr_accessible :source_url, :source_url_title
attr_accessor :locale
class Translation
is_seo_meta
attr_accessible :browser_title, :meta_description, :locale
end
# Delegate SEO Attributes to globalize3 translation
seo_fields = ::SeoMeta.attributes.keys.map{|a| [a, :"#{a}="]}.flatten
delegate(*(seo_fields << {:to => :translation}))
before_save { |m| m.translation.save }
self.per_page = Refinery::Blog.posts_per_page
def next
self.class.next(self)
end
def prev
self.class.previous(self)
end
def live?
!draft and published_at <= Time.now
end
def friendly_id_source
custom_url.presence || title
end
class << self
# Wrap up the logic of finding the pages based on the translations table.
def with_globalize(conditions = {})
conditions = {:locale => ::Globalize.locale}.merge(conditions)
globalized_conditions = {}
conditions.keys.each do |key|
if (translated_attribute_names.map(&:to_s) | %w(locale)).include?(key.to_s)
globalized_conditions["#{self.translation_class.table_name}.#{key}"] = conditions.delete(key)
end
end
# A join implies readonly which we don't really want.
joins(:translations).where(globalized_conditions).where(conditions).readonly(false)
end
def find_by_slug_or_id(slug_or_id)
if slug_or_id.friendly_id?
find_by_slug(slug_or_id)
else
find(slug_or_id)
end
end
def by_month(date)
where(:published_at => date.beginning_of_month..date.end_of_month)
end
def by_archive(date)
Refinery.deprecate("Refinery::Blog::Post.by_archive(date)", {:replacement => "Refinery::Blog::Post.by_month(date)", :when => 2.2 })
by_month(date)
end
def by_year(date)
where(:published_at => date.beginning_of_year..date.end_of_year).with_globalize
end
def published_dates_older_than(date)
published_before(date).pluck(:published_at)
end
def recent(count)
live.limit(count)
end
def popular(count)
unscoped.order("access_count DESC").limit(count).with_globalize
end
def previous(item)
published_before(item.published_at).first
end
def uncategorized
live.includes(:categories).where(Refinery::Blog::Categorization.table_name => { :blog_category_id => nil })
end
def next(current_record)
where(["published_at > ? and draft = ?", current_record.published_at, false]).reorder('published_at ASC').with_globalize.first
end
def published_before(date=Time.now)
where("published_at < ? and draft = ?", date, false).with_globalize
end
alias_method :live, :published_before
def comments_allowed?
Refinery::Setting.find_or_set(:comments_allowed, true, :scoping => 'blog')
end
def teasers_enabled?
Refinery::Setting.find_or_set(:teasers_enabled, true, :scoping => 'blog')
end
def teaser_enabled_toggle!
currently = Refinery::Setting.find_or_set(:teasers_enabled, true, :scoping => 'blog')
Refinery::Setting.set(:teasers_enabled, :value => !currently, :scoping => 'blog')
end
end
module ShareThis
def self.enabled?
Refinery::Blog.share_this_key != "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
end
end
end
end
end
|