refinerycms-blog 1.6.2 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +7 -0
  2. data/Gemfile.lock +293 -0
  3. data/app/controllers/admin/blog/categories_controller.rb +8 -4
  4. data/app/controllers/admin/blog/comments_controller.rb +34 -30
  5. data/app/controllers/admin/blog/posts_controller.rb +81 -70
  6. data/app/controllers/admin/blog/settings_controller.rb +46 -32
  7. data/app/controllers/blog/categories_controller.rb +11 -9
  8. data/app/controllers/blog/posts_controller.rb +84 -76
  9. data/app/helpers/blog_posts_helper.rb +8 -4
  10. data/app/mailers/blog/comment_mailer.rb +11 -9
  11. data/app/models/blog_category.rb +1 -1
  12. data/app/models/blog_post.rb +15 -4
  13. data/app/views/admin/blog/_submenu.html.erb +4 -0
  14. data/app/views/admin/blog/categories/_category.html.erb +1 -1
  15. data/app/views/admin/blog/categories/_form.html.erb +1 -1
  16. data/app/views/admin/blog/categories/index.html.erb +3 -3
  17. data/app/views/admin/blog/comments/index.html.erb +3 -3
  18. data/app/views/admin/blog/posts/_form.css.erb +7 -2
  19. data/app/views/admin/blog/posts/_form.html.erb +5 -5
  20. data/app/views/admin/blog/posts/_post.html.erb +5 -2
  21. data/app/views/admin/blog/posts/_teaser_part.html.erb +2 -2
  22. data/app/views/admin/blog/posts/index.html.erb +3 -3
  23. data/app/views/admin/blog/posts/uncategorized.html.erb +3 -3
  24. data/app/views/blog/comment_mailer/notification.html.erb +11 -11
  25. data/app/views/blog/posts/_comment.html.erb +2 -2
  26. data/app/views/blog/posts/_nav.html.erb +1 -1
  27. data/app/views/blog/posts/_post.html.erb +4 -3
  28. data/app/views/blog/posts/show.html.erb +1 -1
  29. data/app/views/blog/shared/_post.html.erb +11 -6
  30. data/changelog.md +17 -4
  31. data/config/locales/bg.yml +158 -0
  32. data/config/locales/en.yml +3 -1
  33. data/config/locales/es.yml +31 -0
  34. data/config/locales/it.yml +68 -17
  35. data/config/locales/ja.yml +159 -0
  36. data/config/locales/nl.yml +1 -0
  37. data/config/locales/sk.yml +8 -8
  38. data/config/routes.rb +3 -2
  39. data/db/migrate/8_add_primary_key_to_categorizations.rb +12 -0
  40. data/lib/refinery/blog/version.rb +3 -3
  41. data/lib/refinerycms-blog.rb +6 -16
  42. data/public/stylesheets/ui-lightness/jquery-ui-1.8.13.custom.css +1 -8
  43. data/readme.md +3 -2
  44. data/refinerycms-blog.gemspec +8 -2
  45. data/spec/models/blog_post_spec.rb +25 -1
  46. data/todo.md +5 -0
  47. metadata +62 -96
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development, :test do
4
+ gem 'sqlite3'
5
+ gem 'mysql2'
6
+ gem 'pg'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,293 @@
1
+ GIT
2
+ remote: git://github.com/collectiveidea/awesome_nested_set.git
3
+ revision: 7f43579770dd42d00e34c0f09ed9a49f8a524bdc
4
+ specs:
5
+ awesome_nested_set (2.1.0)
6
+ activerecord (>= 3.0.0)
7
+
8
+ GIT
9
+ remote: git://github.com/resolve/refinerycms.git
10
+ revision: 25162b585b9c4023d39fd1a9796140bfa4ecb909
11
+ specs:
12
+ refinerycms (2.0.0)
13
+ bundler (~> 1.0)
14
+ refinerycms-authentication (= 2.0.0)
15
+ refinerycms-core (= 2.0.0)
16
+ refinerycms-dashboard (= 2.0.0)
17
+ refinerycms-images (= 2.0.0)
18
+ refinerycms-pages (= 2.0.0)
19
+ refinerycms-resources (= 2.0.0)
20
+ refinerycms-settings (= 2.0.0)
21
+ refinerycms-authentication (2.0.0)
22
+ devise (~> 1.4.0)
23
+ friendly_id_globalize3 (~> 3.2.1)
24
+ refinerycms-core (= 2.0.0)
25
+ refinerycms-core (2.0.0)
26
+ acts_as_indexed (~> 0.7)
27
+ awesome_nested_set (~> 2.0)
28
+ coffee-rails (~> 3.1.0)
29
+ friendly_id_globalize3 (~> 3.2.1)
30
+ globalize3 (~> 0.2.0.beta3)
31
+ jquery-rails
32
+ rails (>= 3.1.1)
33
+ refinerycms-settings (= 2.0.0)
34
+ sass-rails (~> 3.1.0)
35
+ truncate_html (~> 0.5)
36
+ uglifier
37
+ will_paginate (~> 3.0.1)
38
+ refinerycms-dashboard (2.0.0)
39
+ refinerycms-core (= 2.0.0)
40
+ refinerycms-images (2.0.0)
41
+ dragonfly (~> 0.9.8)
42
+ rack-cache (>= 0.5.3)
43
+ refinerycms-core (= 2.0.0)
44
+ refinerycms-pages (2.0.0)
45
+ awesome_nested_set (~> 2.0)
46
+ friendly_id_globalize3 (~> 3.2.1)
47
+ refinerycms-core (= 2.0.0)
48
+ seo_meta (>= 1.2.0.rc2)
49
+ refinerycms-resources (2.0.0)
50
+ dragonfly (~> 0.9.8)
51
+ rack-cache (>= 0.5.3)
52
+ refinerycms-core (= 2.0.0)
53
+ refinerycms-settings (2.0.0)
54
+ refinerycms-testing (2.0.0)
55
+ capybara (~> 1.1.0)
56
+ database_cleaner
57
+ factory_girl_rails (~> 1.3.0)
58
+ fuubar
59
+ guard-rspec (~> 0.5.0)
60
+ json_pure
61
+ launchy
62
+ rack-test (~> 0.6.0)
63
+ refinerycms-core (= 2.0.0)
64
+ rspec-instafail
65
+ rspec-rails (~> 2.7.0)
66
+
67
+ PATH
68
+ remote: .
69
+ specs:
70
+ refinerycms-blog (2.0.0)
71
+ acts-as-taggable-on
72
+ filters_spam (~> 0.2)
73
+ rails_autolink
74
+ refinerycms-core (~> 2.0.0)
75
+ seo_meta (~> 1.2.0.rc1)
76
+
77
+ GEM
78
+ remote: http://rubygems.org/
79
+ specs:
80
+ actionmailer (3.1.1)
81
+ actionpack (= 3.1.1)
82
+ mail (~> 2.3.0)
83
+ actionpack (3.1.1)
84
+ activemodel (= 3.1.1)
85
+ activesupport (= 3.1.1)
86
+ builder (~> 3.0.0)
87
+ erubis (~> 2.7.0)
88
+ i18n (~> 0.6)
89
+ rack (~> 1.3.2)
90
+ rack-cache (~> 1.1)
91
+ rack-mount (~> 0.8.2)
92
+ rack-test (~> 0.6.1)
93
+ sprockets (~> 2.0.2)
94
+ activemodel (3.1.1)
95
+ activesupport (= 3.1.1)
96
+ builder (~> 3.0.0)
97
+ i18n (~> 0.6)
98
+ activerecord (3.1.1)
99
+ activemodel (= 3.1.1)
100
+ activesupport (= 3.1.1)
101
+ arel (~> 2.2.1)
102
+ tzinfo (~> 0.3.29)
103
+ activeresource (3.1.1)
104
+ activemodel (= 3.1.1)
105
+ activesupport (= 3.1.1)
106
+ activesupport (3.1.1)
107
+ multi_json (~> 1.0)
108
+ acts-as-taggable-on (2.1.1)
109
+ rails
110
+ acts_as_indexed (0.7.6)
111
+ addressable (2.2.6)
112
+ arel (2.2.1)
113
+ babosa (0.3.5)
114
+ bcrypt-ruby (3.0.1)
115
+ builder (3.0.0)
116
+ capybara (1.1.1)
117
+ mime-types (>= 1.16)
118
+ nokogiri (>= 1.3.3)
119
+ rack (>= 1.0.0)
120
+ rack-test (>= 0.5.4)
121
+ selenium-webdriver (~> 2.0)
122
+ xpath (~> 0.1.4)
123
+ childprocess (0.2.2)
124
+ ffi (~> 1.0.6)
125
+ coffee-rails (3.1.1)
126
+ coffee-script (>= 2.2.0)
127
+ railties (~> 3.1.0)
128
+ coffee-script (2.2.0)
129
+ coffee-script-source
130
+ execjs
131
+ coffee-script-source (1.1.3)
132
+ database_cleaner (0.6.7)
133
+ devise (1.4.9)
134
+ bcrypt-ruby (~> 3.0)
135
+ orm_adapter (~> 0.0.3)
136
+ warden (~> 1.0.3)
137
+ diff-lcs (1.1.3)
138
+ dragonfly (0.9.8)
139
+ rack
140
+ erubis (2.7.0)
141
+ execjs (1.2.9)
142
+ multi_json (~> 1.0)
143
+ factory_girl (2.2.0)
144
+ activesupport
145
+ factory_girl_rails (1.3.0)
146
+ factory_girl (~> 2.2.0)
147
+ railties (>= 3.0.0)
148
+ ffi (1.0.9)
149
+ filters_spam (0.3)
150
+ friendly_id_globalize3 (3.2.1.5)
151
+ babosa (~> 0.3.0)
152
+ fuubar (0.0.6)
153
+ rspec (~> 2.0)
154
+ rspec-instafail (~> 0.1.8)
155
+ ruby-progressbar (~> 0.0.10)
156
+ globalize3 (0.2.0.beta4)
157
+ activemodel (>= 3.0.0)
158
+ activerecord (>= 3.0.0)
159
+ paper_trail (~> 2)
160
+ growl (1.0.3)
161
+ guard (0.8.8)
162
+ thor (~> 0.14.6)
163
+ guard-rspec (0.5.2)
164
+ guard (>= 0.8.4)
165
+ guard-spork (0.3.1)
166
+ guard (>= 0.8.4)
167
+ spork (>= 0.8.4)
168
+ hike (1.2.1)
169
+ i18n (0.6.0)
170
+ jquery-rails (1.0.16)
171
+ railties (~> 3.0)
172
+ thor (~> 0.14)
173
+ json (1.6.1)
174
+ json_pure (1.6.1)
175
+ launchy (2.0.5)
176
+ addressable (~> 2.2.6)
177
+ mail (2.3.0)
178
+ i18n (>= 0.4.0)
179
+ mime-types (~> 1.16)
180
+ treetop (~> 1.4.8)
181
+ mime-types (1.17.2)
182
+ multi_json (1.0.3)
183
+ mysql2 (0.3.7)
184
+ nokogiri (1.5.0)
185
+ orm_adapter (0.0.5)
186
+ paper_trail (2.4.0)
187
+ rails (~> 3)
188
+ pg (0.11.0)
189
+ polyglot (0.3.3)
190
+ rack (1.3.5)
191
+ rack-cache (1.1)
192
+ rack (>= 0.4)
193
+ rack-mount (0.8.3)
194
+ rack (>= 1.0.0)
195
+ rack-ssl (1.3.2)
196
+ rack
197
+ rack-test (0.6.1)
198
+ rack (>= 1.0)
199
+ rails (3.1.1)
200
+ actionmailer (= 3.1.1)
201
+ actionpack (= 3.1.1)
202
+ activerecord (= 3.1.1)
203
+ activeresource (= 3.1.1)
204
+ activesupport (= 3.1.1)
205
+ bundler (~> 1.0)
206
+ railties (= 3.1.1)
207
+ rails_autolink (1.0.4)
208
+ rails (>= 3.1.0)
209
+ railties (3.1.1)
210
+ actionpack (= 3.1.1)
211
+ activesupport (= 3.1.1)
212
+ rack-ssl (~> 1.3.2)
213
+ rake (>= 0.8.7)
214
+ rdoc (~> 3.4)
215
+ thor (~> 0.14.6)
216
+ rake (0.9.2.2)
217
+ rb-fsevent (0.4.3.1)
218
+ rdoc (3.11)
219
+ json (~> 1.4)
220
+ rspec (2.7.0)
221
+ rspec-core (~> 2.7.0)
222
+ rspec-expectations (~> 2.7.0)
223
+ rspec-mocks (~> 2.7.0)
224
+ rspec-core (2.7.1)
225
+ rspec-expectations (2.7.0)
226
+ diff-lcs (~> 1.1.2)
227
+ rspec-instafail (0.1.9)
228
+ rspec-mocks (2.7.0)
229
+ rspec-rails (2.7.0)
230
+ actionpack (~> 3.0)
231
+ activesupport (~> 3.0)
232
+ railties (~> 3.0)
233
+ rspec (~> 2.7.0)
234
+ ruby-progressbar (0.0.10)
235
+ rubyzip (0.9.4)
236
+ sass (3.1.10)
237
+ sass-rails (3.1.4)
238
+ actionpack (~> 3.1.0)
239
+ railties (~> 3.1.0)
240
+ sass (>= 3.1.4)
241
+ sprockets (~> 2.0.0)
242
+ tilt (~> 1.3.2)
243
+ selenium-webdriver (2.10.0)
244
+ childprocess (>= 0.2.1)
245
+ ffi (= 1.0.9)
246
+ json_pure
247
+ rubyzip
248
+ seo_meta (1.2.0.rc2)
249
+ rails (>= 3.0.0)
250
+ spork (0.9.0.rc9)
251
+ sprockets (2.0.3)
252
+ hike (~> 1.2)
253
+ rack (~> 1.0)
254
+ tilt (~> 1.1, != 1.3.0)
255
+ sqlite3 (1.3.4)
256
+ thor (0.14.6)
257
+ tilt (1.3.3)
258
+ treetop (1.4.10)
259
+ polyglot
260
+ polyglot (>= 0.3.1)
261
+ truncate_html (0.5.1)
262
+ tzinfo (0.3.31)
263
+ uglifier (1.0.4)
264
+ execjs (>= 0.3.0)
265
+ multi_json (>= 1.0.2)
266
+ warden (1.0.6)
267
+ rack (>= 1.0)
268
+ will_paginate (3.0.2)
269
+ xpath (0.1.4)
270
+ nokogiri (~> 1.3)
271
+
272
+ PLATFORMS
273
+ ruby
274
+
275
+ DEPENDENCIES
276
+ awesome_nested_set!
277
+ coffee-rails (~> 3.1.0)
278
+ growl (~> 1.0.3)
279
+ guard-spork
280
+ jquery-rails
281
+ mysql2
282
+ pg
283
+ rb-fchange (~> 0.0.5)
284
+ rb-fsevent (>= 0.3.9)
285
+ rb-notifu (~> 0.0.4)
286
+ refinerycms!
287
+ refinerycms-blog!
288
+ refinerycms-testing (~> 2.0.0)
289
+ sass-rails (~> 3.1.0)
290
+ spork (= 0.9.0.rc9)
291
+ sqlite3
292
+ uglifier
293
+ win32console
@@ -1,7 +1,11 @@
1
- class Admin::Blog::CategoriesController < Admin::BaseController
1
+ module Admin
2
+ module Blog
3
+ class CategoriesController < Admin::BaseController
2
4
 
3
- crudify :blog_category,
4
- :title_attribute => :title,
5
- :order => 'title ASC'
5
+ crudify :blog_category,
6
+ :title_attribute => :title,
7
+ :order => 'title ASC'
6
8
 
9
+ end
10
+ end
7
11
  end
@@ -1,36 +1,40 @@
1
- class Admin::Blog::CommentsController < Admin::BaseController
1
+ module Admin
2
+ module Blog
3
+ class CommentsController < Admin::BaseController
2
4
 
3
- crudify :blog_comment,
4
- :title_attribute => :name,
5
- :order => 'published_at DESC'
5
+ crudify :blog_comment,
6
+ :title_attribute => :name,
7
+ :order => 'published_at DESC'
6
8
 
7
- def index
8
- @blog_comments = BlogComment.unmoderated
9
- render :action => 'index'
10
- end
9
+ def index
10
+ @blog_comments = BlogComment.unmoderated
11
+ render :action => 'index'
12
+ end
11
13
 
12
- def approved
13
- unless params[:id].present?
14
- @blog_comments = BlogComment.approved
15
- render :action => 'index'
16
- else
17
- @blog_comment = BlogComment.find(params[:id])
18
- @blog_comment.approve!
19
- flash[:notice] = t('admin.blog.comments.approved', :author => @blog_comment.name)
20
- redirect_to :action => params[:return_to] || 'index'
21
- end
22
- end
14
+ def approved
15
+ unless params[:id].present?
16
+ @blog_comments = BlogComment.approved
17
+ render :action => 'index'
18
+ else
19
+ @blog_comment = BlogComment.find(params[:id])
20
+ @blog_comment.approve!
21
+ flash[:notice] = t('approved', :scope => 'admin.blog.comments', :author => @blog_comment.name)
22
+ redirect_to :action => params[:return_to] || 'index'
23
+ end
24
+ end
25
+
26
+ def rejected
27
+ unless params[:id].present?
28
+ @blog_comments = BlogComment.rejected
29
+ render :action => 'index'
30
+ else
31
+ @blog_comment = BlogComment.find(params[:id])
32
+ @blog_comment.reject!
33
+ flash[:notice] = t('rejected', :scope => 'admin.blog.comments', :author => @blog_comment.name)
34
+ redirect_to :action => params[:return_to] || 'index'
35
+ end
36
+ end
23
37
 
24
- def rejected
25
- unless params[:id].present?
26
- @blog_comments = BlogComment.rejected
27
- render :action => 'index'
28
- else
29
- @blog_comment = BlogComment.find(params[:id])
30
- @blog_comment.reject!
31
- flash[:notice] = t('admin.blog.comments.rejected', :author => @blog_comment.name)
32
- redirect_to :action => params[:return_to] || 'index'
33
38
  end
34
39
  end
35
-
36
- end
40
+ end
@@ -1,86 +1,97 @@
1
- class Admin::Blog::PostsController < Admin::BaseController
2
-
3
- crudify :blog_post,
4
- :title_attribute => :title,
5
- :order => 'published_at DESC'
1
+ module Admin
2
+ module Blog
3
+ class PostsController < Admin::BaseController
4
+ require 'will_paginate/array'
5
+
6
+ crudify :blog_post,
7
+ :title_attribute => :title,
8
+ :order => 'published_at DESC'
6
9
 
7
- def uncategorized
8
- @blog_posts = BlogPost.uncategorized.paginate({
9
- :page => params[:page],
10
- :per_page => BlogPost.per_page
11
- })
12
- end
10
+ def uncategorized
11
+ @blog_posts = BlogPost.uncategorized.paginate({
12
+ :page => params[:page],
13
+ :per_page => BlogPost.per_page
14
+ })
15
+ end
13
16
 
14
- def tags
15
- op = case ActiveRecord::Base.connection.adapter_name.downcase
16
- when 'postgresql'
17
- '~*'
18
- else
19
- 'LIKE'
20
- end
21
- wildcard = case ActiveRecord::Base.connection.adapter_name.downcase
22
- when 'postgresql'
23
- '.*'
24
- else
25
- '%'
26
- end
27
- @tags = BlogPost.tag_counts_on(:tags).where(
28
- ["tags.name #{op} ?", "#{wildcard}#{params[:term].to_s.downcase}#{wildcard}"]
29
- ).map { |tag| {:id => tag.id, :value => tag.name}}
30
- render :json => @tags.flatten
31
- end
17
+ def tags
18
+ op = case ActiveRecord::Base.connection.adapter_name.downcase
19
+ when 'postgresql'
20
+ '~*'
21
+ else
22
+ 'LIKE'
23
+ end
24
+ wildcard = case ActiveRecord::Base.connection.adapter_name.downcase
25
+ when 'postgresql'
26
+ '.*'
27
+ else
28
+ '%'
29
+ end
30
+ @tags = BlogPost.tag_counts_on(:tags).where(
31
+ ["tags.name #{op} ?", "#{wildcard}#{params[:term].to_s.downcase}#{wildcard}"]
32
+ ).map { |tag| {:id => tag.id, :value => tag.name}}
33
+ render :json => @tags.flatten
34
+ end
32
35
 
33
- def create
34
- # if the position field exists, set this object as last object, given the conditions of this class.
35
- if BlogPost.column_names.include?("position")
36
- params[:blog_post].merge!({
37
- :position => ((BlogPost.maximum(:position, :conditions => "")||-1) + 1)
38
- })
39
- end
36
+ def create
37
+ # if the position field exists, set this object as last object, given the conditions of this class.
38
+ if BlogPost.column_names.include?("position")
39
+ params[:blog_post].merge!({
40
+ :position => ((BlogPost.maximum(:position, :conditions => "")||-1) + 1)
41
+ })
42
+ end
40
43
 
41
- if BlogPost.column_names.include?("user_id")
42
- params[:blog_post].merge!({
43
- :user_id => current_user.id
44
- })
45
- end
44
+ if BlogPost.column_names.include?("user_id")
45
+ params[:blog_post].merge!({
46
+ :user_id => current_user.id
47
+ })
48
+ end
46
49
 
47
- if (@blog_post = BlogPost.create(params[:blog_post])).valid?
48
- (request.xhr? ? flash.now : flash).notice = t(
49
- 'refinery.crudify.created',
50
- :what => "'#{@blog_post.title}'"
51
- )
50
+ if (@blog_post = BlogPost.create(params[:blog_post])).valid?
51
+ (request.xhr? ? flash.now : flash).notice = t(
52
+ 'refinery.crudify.created',
53
+ :what => "'#{@blog_post.title}'"
54
+ )
52
55
 
53
- unless from_dialog?
54
- unless params[:continue_editing] =~ /true|on|1/
55
- redirect_back_or_default(admin_blog_posts_url)
56
+ unless from_dialog?
57
+ unless params[:continue_editing] =~ /true|on|1/
58
+ redirect_back_or_default(admin_blog_posts_url)
59
+ else
60
+ unless request.xhr?
61
+ redirect_to :back
62
+ else
63
+ render :partial => "/shared/message"
64
+ end
65
+ end
66
+ else
67
+ render :text => "<script>parent.window.location = '#{admin_blog_posts_url}';</script>"
68
+ end
56
69
  else
57
70
  unless request.xhr?
58
- redirect_to :back
71
+ render :action => 'new'
59
72
  else
60
- render :partial => "/shared/message"
73
+ render :partial => "/shared/admin/error_messages",
74
+ :locals => {
75
+ :object => @blog_post,
76
+ :include_object_name => true
77
+ }
61
78
  end
62
79
  end
63
- else
64
- render :text => "<script>parent.window.location = '#{admin_blog_posts_url}';</script>"
65
- end
66
- else
67
- unless request.xhr?
68
- render :action => 'new'
69
- else
70
- render :partial => "/shared/admin/error_messages",
71
- :locals => {
72
- :object => @blog_post,
73
- :include_object_name => true
74
- }
75
80
  end
76
- end
77
- end
78
81
 
79
- before_filter :find_all_categories,
80
- :only => [:new, :edit, :create, :update]
82
+ before_filter :find_all_categories,
83
+ :only => [:new, :edit, :create, :update]
81
84
 
82
- protected
83
- def find_all_categories
84
- @blog_categories = BlogCategory.find(:all)
85
+ before_filter :check_category_ids, :only => :update
86
+
87
+ protected
88
+ def find_all_categories
89
+ @blog_categories = BlogCategory.find(:all)
90
+ end
91
+
92
+ def check_category_ids
93
+ params[:blog_post][:category_ids] ||= []
94
+ end
95
+ end
85
96
  end
86
97
  end