typo 4.0.0 → 4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/comments_controller.rb +1 -1
- data/app/controllers/admin/content_controller.rb +1 -3
- data/app/controllers/admin/feedback_controller.rb +36 -31
- data/app/controllers/admin/sidebar_controller.rb +13 -2
- data/app/controllers/admin/users_controller.rb +2 -1
- data/app/controllers/articles_controller.rb +10 -19
- data/app/controllers/xml_controller.rb +2 -2
- data/app/helpers/admin/base_helper.rb +7 -3
- data/app/helpers/application_helper.rb +2 -2
- data/app/helpers/articles_helper.rb +5 -4
- data/app/models/article.rb +16 -10
- data/app/models/blog.rb +4 -10
- data/app/models/comment.rb +17 -36
- data/app/models/content.rb +31 -53
- data/app/models/content_state/base.rb +46 -3
- data/app/models/content_state/draft.rb +2 -9
- data/app/models/content_state/ham.rb +31 -0
- data/app/models/content_state/just_marked_as_ham.rb +10 -0
- data/app/models/content_state/just_marked_as_spam.rb +23 -0
- data/app/models/content_state/just_presumed_ham.rb +37 -0
- data/app/models/content_state/just_published.rb +15 -8
- data/app/models/content_state/new.rb +3 -10
- data/app/models/content_state/presumed_ham.rb +27 -0
- data/app/models/content_state/presumed_spam.rb +31 -0
- data/app/models/content_state/publication_pending.rb +7 -9
- data/app/models/content_state/published.rb +10 -9
- data/app/models/content_state/spam.rb +23 -0
- data/app/models/content_state/unclassified.rb +29 -0
- data/app/models/content_state/withdrawn.rb +28 -0
- data/app/models/email_notifier.rb +0 -1
- data/app/models/feedback.rb +151 -0
- data/app/models/trackback.rb +22 -29
- data/app/views/admin/feedback/_item.rhtml +5 -5
- data/app/views/admin/feedback/list.rhtml +13 -11
- data/app/views/admin/general/index.rhtml +8 -4
- data/app/views/admin/users/show.rhtml +7 -1
- data/app/views/articles/read.rhtml +2 -2
- data/bin/typo +7 -6
- data/components/plugins/sidebars/recent_comments_controller.rb +1 -1
- data/config/environment.rb +2 -0
- data/db/migrate/046_fixup_forthcoming_publications.rb +1 -1
- data/db/migrate/048_remove_count_caching.rb +31 -0
- data/db/migrate/049_move_feedback_to_new_state_machine.rb +33 -0
- data/db/schema.mysql-v3.sql +3 -4
- data/db/schema.mysql.sql +3 -4
- data/db/schema.postgresql.sql +3 -4
- data/db/schema.rb +12 -17
- data/db/schema.sqlite.sql +3 -4
- data/db/schema.sqlserver.sql +3 -4
- data/db/schema_version +1 -1
- data/doc/Installer.txt +4 -0
- data/lib/jabber_notify.rb +6 -2
- data/lib/sidebars/plugin.rb +2 -1
- data/lib/tasks/release.rake +5 -4
- data/lib/typo_version.rb +1 -1
- data/public/stylesheets/administration.css +22 -2
- data/test/fixtures/blogs.yml +2 -0
- data/test/fixtures/contents.yml +7 -7
- data/test/functional/admin/users_controller_test.rb +3 -0
- data/test/functional/articles_controller_test.rb +16 -1
- data/test/mocks/test/xmlrpc_mock.rb +5 -4
- data/test/unit/article_test.rb +16 -4
- data/test/unit/comment_test.rb +57 -35
- data/test/unit/content_state/factory_test.rb +7 -6
- data/test/unit/ping_test.rb +14 -0
- data/test/unit/trackback_test.rb +16 -15
- metadata +26 -26
- data/config/database.yml-pgsql +0 -17
- data/config/database.yml.sqlite +0 -14
- data/config/mail.yml +0 -8
- data/config/mongrel.conf +0 -2
- data/db/converters/mt-import.rb +0 -72
- data/db/development_structure.sql +0 -691
- data/installer/rails-installer.rb +0 -527
- data/installer/rails-installer/commands.rb +0 -118
- data/installer/rails-installer/web-servers.rb +0 -110
- data/log/development.log-1 +0 -991
- data/log/development.log-2 +0 -422
- data/log/development.log-3 +0 -429
- data/log/development.log-4 +0 -174
- data/svk-commitP6cVv.tmp +0 -1
- data/vendor/ruby-mp3info/lib/mp3info.rb +0 -720
@@ -20,7 +20,7 @@ class Admin::CommentsController < Admin::BaseController
|
|
20
20
|
|
21
21
|
if request.post? and @comment.save
|
22
22
|
# We should probably wave a spam filter over this, but for now, just mark it as published.
|
23
|
-
@comment.
|
23
|
+
@comment.mark_as_ham!
|
24
24
|
flash[:notice] = 'Comment was successfully created.'
|
25
25
|
redirect_to :action => 'show', :id => @comment.id
|
26
26
|
end
|
@@ -78,9 +78,7 @@ class Admin::ContentController < Admin::BaseController
|
|
78
78
|
def new_or_edit
|
79
79
|
get_or_build_article
|
80
80
|
params[:article] ||= {}
|
81
|
-
|
82
|
-
# 'allow_pings' => this_blog.default_allow_pings,
|
83
|
-
# 'published' => true)
|
81
|
+
|
84
82
|
@article.attributes = (params[:article])
|
85
83
|
setup_categories
|
86
84
|
@selected = @article.categories.collect { |c| c.id }
|
@@ -1,67 +1,72 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
class Admin::FeedbackController < Admin::BaseController
|
4
|
+
model :comment, :trackback
|
5
|
+
|
2
6
|
def index
|
3
|
-
conditions = [
|
7
|
+
conditions = ['1=1', {}]
|
4
8
|
|
5
9
|
if params[:search]
|
6
|
-
|
7
|
-
conditions.
|
8
|
-
5.times { conditions.push search_sql }
|
10
|
+
conditions.first << ' and (url like :pattern or author like :pattern or title like :pattern or ip like :pattern or email like :pattern)'
|
11
|
+
conditions.last.merge!(:pattern => "%#{params[:search]}%")
|
9
12
|
end
|
10
13
|
|
11
14
|
if params[:published] == 'f'
|
12
|
-
conditions.first << ' and (published =
|
13
|
-
conditions.
|
15
|
+
conditions.first << ' and (published = :published)'
|
16
|
+
conditions.last.merge!(:published => false)
|
14
17
|
end
|
15
18
|
|
16
|
-
@pages, @feedback = paginate(:
|
17
|
-
:order => 'contents.created_at desc',
|
19
|
+
@pages, @feedback = paginate(:feedback,
|
20
|
+
:order => 'contents.created_at desc',
|
18
21
|
:conditions => conditions,
|
19
22
|
:per_page => 40)
|
20
|
-
|
23
|
+
|
21
24
|
render_action 'list'
|
22
25
|
end
|
23
|
-
|
26
|
+
|
24
27
|
def delete
|
25
28
|
if request.post?
|
26
|
-
|
27
|
-
|
28
|
-
feedback.destroy
|
29
|
+
begin
|
30
|
+
Feedback.destroy(params[:id])
|
29
31
|
flash[:notice] = "Deleted"
|
30
|
-
|
32
|
+
rescue ActiveRecord::RecordNotFound
|
31
33
|
flash[:notice] = "Not found"
|
32
34
|
end
|
33
35
|
end
|
34
36
|
redirect_to :action => 'index', :page => params[:page], :search => params[:search]
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
def bulkops
|
38
|
-
STDERR.puts "Bulkops: #{params.inspect}"
|
39
|
-
|
40
40
|
ids = (params[:feedback_check]||{}).keys.map(&:to_i)
|
41
|
-
|
41
|
+
|
42
42
|
case params[:commit]
|
43
43
|
when 'Delete Checked Items'
|
44
44
|
count = 0
|
45
45
|
ids.each do |id|
|
46
|
-
count +=
|
46
|
+
count += Feedback.delete(id) ## XXX Should this be #destroy?
|
47
47
|
end
|
48
48
|
flash[:notice] = "Deleted #{count} item(s)"
|
49
|
-
|
49
|
+
|
50
|
+
# Sweep cache
|
51
|
+
PageCache.sweep_all
|
52
|
+
expire_fragment(/.*/)
|
53
|
+
when 'Mark Checked Items as Ham'
|
54
|
+
ids.each do |id|
|
55
|
+
feedback = Feedback.find(id)
|
56
|
+
feedback.mark_as_ham!
|
57
|
+
end
|
58
|
+
flash[:notice]= "Marked #{ids.size} item(s) as Ham"
|
59
|
+
when 'Mark Checked Items as Spam'
|
50
60
|
ids.each do |id|
|
51
|
-
feedback =
|
52
|
-
feedback.
|
53
|
-
feedback.set_spam(false)
|
54
|
-
feedback.save
|
61
|
+
feedback = Feedback.find(id)
|
62
|
+
feedback.mark_as_spam!
|
55
63
|
end
|
56
|
-
flash[:notice]= "
|
57
|
-
when '
|
64
|
+
flash[:notice]= "Marked #{ids.size} item(s) as Spam"
|
65
|
+
when 'Confirm Classification of Checked Items'
|
58
66
|
ids.each do |id|
|
59
|
-
|
60
|
-
feedback.withdraw!
|
61
|
-
feedback.set_spam(true)
|
62
|
-
feedback.save
|
67
|
+
Feedback.find(id).confirm_classification!
|
63
68
|
end
|
64
|
-
flash[:notice]= "
|
69
|
+
flash[:notice] = "Confirmed classification of #{ids.size} item(s)"
|
65
70
|
else
|
66
71
|
flash[:notice] = "Not implemented"
|
67
72
|
end
|
@@ -53,8 +53,19 @@ class Admin::SidebarController < Admin::BaseController
|
|
53
53
|
params[:configure] ||= []
|
54
54
|
Sidebar.update_all('active_position = null')
|
55
55
|
flash[:sidebars].each do |id|
|
56
|
-
Sidebar.find(id)
|
57
|
-
|
56
|
+
sidebar = Sidebar.find(id)
|
57
|
+
|
58
|
+
# If it's a checkbox and unchecked, convert the 0 to false
|
59
|
+
# This is ugly. Anyone have an improvement?
|
60
|
+
params[:configure][id.to_s].each do |k,v|
|
61
|
+
field = sidebar.sidebar_controller.fields.detect { |f| f.key == k }
|
62
|
+
if v == "0" && field.is_a?(Sidebars::Field::CheckBoxField)
|
63
|
+
params[:configure][id.to_s][k] = false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
sidebar.update_attributes(:config => params[:configure][id.to_s],
|
68
|
+
:active_position => position)
|
58
69
|
position += 1
|
59
70
|
end
|
60
71
|
Sidebar.delete_all('active_position is null')
|
@@ -27,12 +27,12 @@ class ArticlesController < ContentController
|
|
27
27
|
@articles = Article.find( :all,
|
28
28
|
:offset => @pages.current.offset,
|
29
29
|
:limit => @pages.items_per_page,
|
30
|
-
:order => "contents.published_at DESC",
|
30
|
+
:order => "contents.published_at DESC",
|
31
31
|
:include => [:categories, :tags, :user, :blog],
|
32
32
|
:conditions =>
|
33
33
|
['published = ? AND contents.published_at < ? AND blog_id = ?',
|
34
34
|
true, Time.now, this_blog.id]
|
35
|
-
)
|
35
|
+
)
|
36
36
|
end
|
37
37
|
|
38
38
|
def search
|
@@ -94,23 +94,14 @@ class ArticlesController < ContentController
|
|
94
94
|
|
95
95
|
if request.post?
|
96
96
|
begin
|
97
|
-
params[:comment].merge!({:ip => request.remote_ip,
|
98
|
-
:published => true })
|
99
97
|
@article = this_blog.published_articles.find(params[:id])
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
if @comment.is_spam? spam_options
|
109
|
-
STDERR.puts "Moderating comment as spam!"
|
110
|
-
@comment.withdraw
|
111
|
-
end
|
112
|
-
|
113
|
-
@comment.save!
|
98
|
+
params[:comment].merge!({:ip => request.remote_ip,
|
99
|
+
:published => true,
|
100
|
+
:user => session[:user],
|
101
|
+
:user_agent => request.env['HTTP_USER_AGENT'],
|
102
|
+
:referrer => request.env['HTTP_REFERER'],
|
103
|
+
:permalink => this_blog.article_url(@article, false)})
|
104
|
+
@comment = @article.comments.create!(params[:comment])
|
114
105
|
add_to_cookies(:author, @comment.author)
|
115
106
|
add_to_cookies(:url, @comment.url)
|
116
107
|
|
@@ -165,7 +156,7 @@ class ArticlesController < ContentController
|
|
165
156
|
render :nothing => true, :status => 404
|
166
157
|
end
|
167
158
|
end
|
168
|
-
|
159
|
+
|
169
160
|
def markup_help
|
170
161
|
render :text => TextFilter.find(params[:id]).commenthelp
|
171
162
|
end
|
@@ -65,7 +65,7 @@ class XmlController < ContentController
|
|
65
65
|
|
66
66
|
protected
|
67
67
|
|
68
|
-
def fetch_items(association, order='
|
68
|
+
def fetch_items(association, order='published_at DESC', limit=nil)
|
69
69
|
if association.instance_of?(Symbol)
|
70
70
|
association = this_blog.send(association)
|
71
71
|
end
|
@@ -89,7 +89,7 @@ class XmlController < ContentController
|
|
89
89
|
|
90
90
|
def prep_article
|
91
91
|
article = this_blog.articles.find(params[:id])
|
92
|
-
fetch_items(article.comments, '
|
92
|
+
fetch_items(article.comments, 'published_at DESC', 25)
|
93
93
|
@items.unshift(article)
|
94
94
|
@feed_title << ": #{article.title}"
|
95
95
|
@link = article_url(article, false)
|
@@ -1,5 +1,9 @@
|
|
1
1
|
module Admin::BaseHelper
|
2
2
|
|
3
|
+
def state_class(item)
|
4
|
+
item.state.memento.underscore.sub(/.*\//, '')
|
5
|
+
end
|
6
|
+
|
3
7
|
def render_flash
|
4
8
|
output = []
|
5
9
|
|
@@ -14,10 +18,10 @@ module Admin::BaseHelper
|
|
14
18
|
output = []
|
15
19
|
|
16
20
|
for key,value in @tasks
|
17
|
-
|
18
|
-
|
21
|
+
output << "<a href=\"#{value}\">#{key}</a>"
|
22
|
+
end if @tasks
|
19
23
|
|
20
|
-
|
24
|
+
output.join("<br/>\n")
|
21
25
|
end
|
22
26
|
|
23
27
|
def current_user_notice
|
@@ -40,12 +40,12 @@ module ApplicationHelper
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def comments_link(article)
|
43
|
-
article_link(pluralize(article.
|
43
|
+
article_link(pluralize(article.published_comments.size, "comment"),
|
44
44
|
article, 'comments')
|
45
45
|
end
|
46
46
|
|
47
47
|
def trackbacks_link(article)
|
48
|
-
article_link(pluralize(article.
|
48
|
+
article_link(pluralize(article.published_trackbacks.size, "trackback"),
|
49
49
|
article, 'trackbacks')
|
50
50
|
end
|
51
51
|
|
@@ -42,7 +42,8 @@ module ArticlesHelper
|
|
42
42
|
|
43
43
|
def page_title
|
44
44
|
if @page_title
|
45
|
-
|
45
|
+
# this is where the page title prefix (string) should go
|
46
|
+
(this_blog.title_prefix ? "#{this_blog.blog_name || "Typo"} : " : '') + @page_title
|
46
47
|
else
|
47
48
|
this_blog.blog_name || "Typo"
|
48
49
|
end
|
@@ -151,10 +152,10 @@ module ArticlesHelper
|
|
151
152
|
end
|
152
153
|
|
153
154
|
def ul_tag_for(grouping_class)
|
154
|
-
case
|
155
|
-
when Tag
|
155
|
+
case
|
156
|
+
when grouping_class == Tag
|
156
157
|
%{<ul id="taglist" class="tags">}
|
157
|
-
when Category
|
158
|
+
when grouping_class == Category
|
158
159
|
%{<ul class="categorylist">}
|
159
160
|
else
|
160
161
|
'<ul>'
|
data/app/models/article.rb
CHANGED
@@ -37,9 +37,13 @@ class Article < Content
|
|
37
37
|
urls
|
38
38
|
end
|
39
39
|
|
40
|
-
def really_send_pings(serverurl = blog.server_url, articleurl =
|
40
|
+
def really_send_pings(serverurl = blog.server_url, articleurl = nil)
|
41
41
|
return unless blog.send_outbound_pings
|
42
42
|
|
43
|
+
# Moved the default value for articleurl out of the method declaration to
|
44
|
+
# avoid unnecessary evaluations of the #location() method.
|
45
|
+
articleurl ||= location(nil, false)
|
46
|
+
|
43
47
|
weblogupdatesping_urls = blog.ping_urls.gsub(/ +/,'').split(/[\n\r]+/)
|
44
48
|
pingback_or_trackback_urls = self.html_urls
|
45
49
|
|
@@ -52,7 +56,7 @@ class Article < Content
|
|
52
56
|
|
53
57
|
if weblogupdatesping_urls.include?(url)
|
54
58
|
ping.send_weblogupdatesping(serverurl, articleurl)
|
55
|
-
|
59
|
+
elsif pingback_or_trackback_urls.include?(url)
|
56
60
|
ping.send_pingback_or_trackback(articleurl)
|
57
61
|
end
|
58
62
|
end
|
@@ -142,7 +146,7 @@ class Article < Content
|
|
142
146
|
if user.notify_via_jabber?
|
143
147
|
JabberNotify.send_message(user, "New post",
|
144
148
|
"A new message was posted to #{blog.blog_name}",
|
145
|
-
|
149
|
+
body_html)
|
146
150
|
end
|
147
151
|
end
|
148
152
|
|
@@ -158,17 +162,20 @@ class Article < Content
|
|
158
162
|
end
|
159
163
|
end
|
160
164
|
|
165
|
+
def published_comments
|
166
|
+
comments.select {|c| c.published?}
|
167
|
+
end
|
168
|
+
|
169
|
+
def published_trackbacks
|
170
|
+
trackbacks.select {|c| c.published?}
|
171
|
+
end
|
172
|
+
|
161
173
|
protected
|
162
174
|
|
163
175
|
before_create :set_defaults, :create_guid, :add_notifications
|
164
176
|
before_save :set_published_at
|
165
177
|
after_save :keywords_to_tags
|
166
178
|
|
167
|
-
def correct_counts
|
168
|
-
self.comments_count = self.comments_count
|
169
|
-
self.trackbacks_count = self.trackbacks_count
|
170
|
-
end
|
171
|
-
|
172
179
|
def set_published_at
|
173
180
|
if self.published and self[:published_at].nil?
|
174
181
|
self[:published_at] = self.created_at || Time.now
|
@@ -179,7 +186,6 @@ class Article < Content
|
|
179
186
|
if self.attributes.include?("permalink") and self.permalink.blank?
|
180
187
|
self.permalink = self.stripped_title
|
181
188
|
end
|
182
|
-
correct_counts
|
183
189
|
if blog && self.allow_comments.nil?
|
184
190
|
self.allow_comments = blog.default_allow_comments
|
185
191
|
end
|
@@ -187,7 +193,7 @@ class Article < Content
|
|
187
193
|
if blog && self.allow_pings.nil?
|
188
194
|
self.allow_pings = blog.default_allow_pings
|
189
195
|
end
|
190
|
-
|
196
|
+
|
191
197
|
true
|
192
198
|
end
|
193
199
|
|
data/app/models/blog.rb
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
# This isn't enabled yet, but it will be soon...
|
3
3
|
class BlogRequest
|
4
4
|
include Reloadable
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :protocol, :host_with_port, :path, :symbolized_path_parameters, :relative_url_root
|
7
|
-
|
7
|
+
|
8
8
|
def initialize(root)
|
9
9
|
@protocol = @host_with_port = @path = ''
|
10
10
|
@symbolized_path_parameters = {}
|
@@ -37,6 +37,7 @@ class Blog < ActiveRecord::Base
|
|
37
37
|
# Description
|
38
38
|
setting :blog_name, :string, 'My Shiny Weblog!'
|
39
39
|
setting :blog_subtitle, :string, ''
|
40
|
+
setting :title_prefix, :boolean, false
|
40
41
|
setting :geourl_location, :string, ''
|
41
42
|
setting :canonical_server_url, :string, ''
|
42
43
|
|
@@ -86,13 +87,6 @@ class Blog < ActiveRecord::Base
|
|
86
87
|
article_id = settings[:id]
|
87
88
|
settings.delete(:id)
|
88
89
|
trackback = published_articles.find(article_id).trackbacks.create!(settings)
|
89
|
-
|
90
|
-
if trackback.is_spam?
|
91
|
-
STDERR.puts "Moderating trackback as spam!"
|
92
|
-
trackback.withdraw!
|
93
|
-
end
|
94
|
-
|
95
|
-
trackback
|
96
90
|
end
|
97
91
|
|
98
92
|
|
@@ -161,7 +155,7 @@ class Blog < ActiveRecord::Base
|
|
161
155
|
end
|
162
156
|
|
163
157
|
def article_url(article, only_path = true, anchor = nil)
|
164
|
-
|
158
|
+
url_for(:year => article.published_at.year,
|
165
159
|
:month => sprintf("%.2d", article.published_at.month),
|
166
160
|
:day => sprintf("%.2d", article.published_at.day),
|
167
161
|
:title => article.permalink, :anchor => anchor,
|
data/app/models/comment.rb
CHANGED
@@ -2,22 +2,18 @@ require_dependency 'spam_protection'
|
|
2
2
|
require 'sanitize'
|
3
3
|
require 'timeout'
|
4
4
|
|
5
|
-
class Comment <
|
6
|
-
|
5
|
+
class Comment < Feedback
|
6
|
+
belongs_to :article
|
7
7
|
|
8
8
|
content_fields :body
|
9
9
|
|
10
|
-
belongs_to :article, :counter_cache => true
|
11
10
|
belongs_to :user
|
12
11
|
|
13
12
|
validates_presence_of :author, :body
|
14
|
-
validates_age_of :article_id
|
15
|
-
validate_on_create :check_article_is_open_to_comments
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
14
|
+
attr_accessor :user_agent
|
15
|
+
attr_accessor :referrer
|
16
|
+
attr_accessor :permalink
|
21
17
|
|
22
18
|
def notify_user_via_email(controller, user)
|
23
19
|
if user.notify_via_email?
|
@@ -37,17 +33,12 @@ class Comment < Content
|
|
37
33
|
users
|
38
34
|
end
|
39
35
|
|
40
|
-
def location(anchor=:ignored, only_path=true)
|
41
|
-
blog.url_for(article, "comment-#{id}", only_path)
|
42
|
-
end
|
43
|
-
|
44
36
|
protected
|
45
37
|
|
46
|
-
def
|
47
|
-
return
|
48
|
-
|
49
|
-
|
50
|
-
end
|
38
|
+
def article_allows_feedback?
|
39
|
+
return true if article.allow_comments?
|
40
|
+
errors.add(:article, "Article is not open to comments")
|
41
|
+
false
|
51
42
|
end
|
52
43
|
|
53
44
|
def body_html_postprocess(value, controller)
|
@@ -58,28 +49,18 @@ class Comment < Content
|
|
58
49
|
'comment_text_filter'
|
59
50
|
end
|
60
51
|
|
61
|
-
before_create :create_guid
|
62
|
-
before_save :correct_url, :make_nofollow
|
63
|
-
|
64
|
-
def correct_url
|
65
|
-
unless url.to_s.empty?
|
66
|
-
unless url =~ /^http\:\/\//
|
67
|
-
self.url = "http://#{url}"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
52
|
def make_nofollow
|
73
53
|
self.author = author.nofollowify
|
74
54
|
self.body_html = body_html.to_s.nofollowify
|
75
55
|
end
|
76
|
-
|
77
|
-
def
|
78
|
-
|
79
|
-
:comment_author_url => url, :comment_content => body}
|
56
|
+
|
57
|
+
def originator
|
58
|
+
author
|
80
59
|
end
|
81
|
-
|
82
|
-
def
|
83
|
-
|
60
|
+
|
61
|
+
def additional_akismet_options
|
62
|
+
{ :user_agent => user_agent,
|
63
|
+
:referrer => referrer,
|
64
|
+
:permalink => permalink }
|
84
65
|
end
|
85
66
|
end
|