community_engine 3.0.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +4 -1
- data/.travis.yml +5 -2
- data/CHANGELOG.markdown +270 -0
- data/Gemfile +3 -0
- data/README.markdown +20 -21
- data/Rakefile +8 -6
- data/TODO.markdown +3 -0
- data/UPGRADING.markdown +46 -36
- data/app/assets/javascripts/active_admin.js.coffee +19 -0
- data/app/assets/javascripts/ckeditor/configs/ads.js.coffee +175 -0
- data/app/assets/javascripts/ckeditor/configs/comments.js.coffee +2 -0
- data/app/assets/javascripts/ckeditor/configs/posts.js.coffee +248 -0
- data/app/assets/javascripts/ckeditor/rte/rte.ads.js.coffee +7 -0
- data/app/assets/javascripts/ckeditor/rte/rte.comments.js.coffee +8 -0
- data/app/assets/javascripts/ckeditor/rte/rte.js.coffee +20 -0
- data/app/assets/javascripts/ckeditor/rte/rte.posts.js.coffee +14 -0
- data/app/assets/javascripts/community_engine.js +114 -123
- data/{vendor → app}/assets/javascripts/jcrop/jquery.Jcrop.js +0 -0
- data/{vendor → app}/assets/javascripts/jcrop/jquery.color.js +0 -0
- data/{vendor → app}/assets/javascripts/tag-it/tag-it.js +0 -0
- data/app/assets/stylesheets/active_admin.css.scss +27 -0
- data/{vendor → app}/assets/stylesheets/jcrop/Jcrop.gif +0 -0
- data/{vendor → app}/assets/stylesheets/jcrop/jquery.Jcrop.min.css +0 -0
- data/{vendor → app}/assets/stylesheets/tag-it/tag-it.css +0 -0
- data/{vendor → app}/assets/stylesheets/tag-it/tagit.ui-zendesk.css +0 -0
- data/app/controllers/activities_controller.rb +4 -4
- data/app/controllers/albums_controller.rb +13 -18
- data/app/controllers/authorizations_controller.rb +1 -1
- data/app/controllers/base_controller.rb +9 -32
- data/app/controllers/categories_controller.rb +1 -78
- data/app/controllers/clippings_controller.rb +3 -7
- data/app/controllers/comments_controller.rb +4 -24
- data/app/controllers/events_controller.rb +3 -12
- data/app/controllers/favorites_controller.rb +2 -2
- data/app/controllers/forums_controller.rb +5 -9
- data/app/controllers/invitations_controller.rb +1 -1
- data/app/controllers/messages_controller.rb +4 -8
- data/app/controllers/moderators_controller.rb +1 -1
- data/app/controllers/monitorships_controller.rb +1 -1
- data/app/controllers/pages_controller.rb +0 -62
- data/app/controllers/password_resets_controller.rb +2 -2
- data/app/controllers/photo_manager_controller.rb +3 -3
- data/app/controllers/photos_controller.rb +43 -14
- data/app/controllers/posts_controller.rb +7 -14
- data/app/controllers/rsvps_controller.rb +3 -3
- data/app/controllers/sb_posts_controller.rb +20 -20
- data/app/controllers/sessions_controller.rb +1 -1
- data/app/controllers/tags_controller.rb +4 -52
- data/app/controllers/topics_controller.rb +15 -10
- data/app/controllers/users_controller.rb +9 -16
- data/app/controllers/votes_controller.rb +2 -2
- data/app/helpers/base_helper.rb +4 -14
- data/app/models/acts_as_taggable_on/tag.rb +9 -41
- data/app/models/clipping.rb +1 -1
- data/app/models/forum.rb +2 -2
- data/app/models/photo.rb +1 -1
- data/app/models/post.rb +1 -1
- data/app/models/sb_post.rb +19 -15
- data/app/models/topic.rb +10 -10
- data/app/models/user.rb +1 -1
- data/app/policies/active_admin/page_policy.rb +11 -0
- data/app/policies/application_policy.rb +59 -0
- data/app/policies/post_policy.rb +13 -0
- data/app/policies/sb_post_policy.rb +15 -0
- data/app/policies/topic_policy.rb +23 -0
- data/app/views/ckeditor/pictures/index.html.haml +15 -0
- data/app/views/ckeditor/shared/_asset.html.haml +9 -0
- data/app/views/ckeditor/shared/_asset_tmpl.html.erb +14 -0
- data/app/views/comments/approve.js.haml +1 -1
- data/app/views/comments/create.js.erb +1 -1
- data/app/views/comments/edit.js.erb +2 -1
- data/app/views/events/_subscribe.html.haml +1 -1
- data/app/views/forums/show.html.haml +8 -4
- data/app/views/posts/show.html.haml +4 -0
- data/app/views/sb_posts/_edit_script.js.erb +2 -3
- data/app/views/sb_posts/_reply_script.js.erb +2 -4
- data/app/views/sb_posts/_sb_post.html.haml +7 -6
- data/app/views/sb_posts/create.js.erb +4 -4
- data/app/views/sb_posts/edit.js.erb +2 -1
- data/app/views/sessions/_menu_item.html.haml +4 -4
- data/app/views/shared/_end_javascript.html.haml +1 -2
- data/app/views/shared/_login_sidebar.html.haml +2 -2
- data/app/views/tags/show.html.haml +3 -3
- data/app/views/topics/show.html.haml +1 -1
- data/app/views/users/_profile_user_info_sidebar.html.haml +2 -2
- data/app/views/users/destroy.js.erb +3 -0
- data/app/views/users/new.html.haml +1 -1
- data/app/views/users/show.html.haml +1 -1
- data/app/views/users/signup_completed.html.haml +1 -1
- data/community_engine.gemspec +14 -11
- data/config/initializers/active_admin.rb +239 -0
- data/config/initializers/ckeditor.rb +8 -0
- data/config/initializers/ransack_bootstrap_fix.rb +25 -0
- data/config/locales/de-DE.yml +1 -0
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +14 -19
- data/config/spring.rb +1 -0
- data/db/migrate/083_create_active_admin_comments.rb +19 -0
- data/lib/community_engine.rb +7 -3
- data/lib/community_engine/admin/ads.rb +3 -0
- data/lib/community_engine/admin/categories.rb +20 -0
- data/lib/community_engine/admin/comments.rb +4 -0
- data/lib/community_engine/admin/dashboard.rb +38 -0
- data/lib/community_engine/admin/events.rb +3 -0
- data/lib/community_engine/admin/forums.rb +3 -0
- data/lib/community_engine/admin/homepage_features.rb +25 -0
- data/lib/community_engine/admin/metro_areas.rb +4 -0
- data/lib/community_engine/admin/pages.rb +26 -0
- data/lib/community_engine/admin/posts.rb +92 -0
- data/lib/community_engine/admin/tags.rb +21 -0
- data/lib/community_engine/admin/users.rb +54 -0
- data/lib/community_engine/authenticated_system.rb +5 -20
- data/lib/community_engine/engine.rb +5 -0
- data/lib/community_engine/version.rb +1 -1
- data/lib/resource_feeder/atom.rb +2 -0
- data/lib/resource_feeder/rss.rb +2 -0
- data/lib/white_list.rb +6 -11
- data/test/fixtures/events.yml +10 -0
- data/test/fixtures/tags.yml +6 -5
- data/test/functional/activities_controller_test.rb +19 -19
- data/test/functional/admin/posts_controller_test.rb +16 -0
- data/test/functional/admin_controller_test.rb +82 -82
- data/test/functional/categories_controller_test.rb +0 -39
- data/test/functional/comments_controller_test.rb +14 -7
- data/test/functional/favorites_controller_test.rb +15 -16
- data/test/functional/pages_controller_test.rb +0 -71
- data/test/functional/posts_controller_test.rb +21 -2
- data/test/functional/sb_posts_controller_test.rb +3 -3
- data/test/functional/sessions_controller_test.rb +2 -2
- data/test/functional/tags_controller_test.rb +9 -20
- data/test/functional/users_controller_test.rb +0 -8
- data/test/functional/votes_controller_test.rb +1 -1
- data/test/testapp/config/spring.rb +1 -0
- data/test/testapp/db/schema.rb +16 -1
- data/test/unit/event_test.rb +1 -1
- metadata +204 -170
- data/CHANGELOG +0 -144
- data/app/controllers/admin_controller.rb +0 -80
- data/app/controllers/ads_controller.rb +0 -90
- data/app/controllers/homepage_features_controller.rb +0 -74
- data/app/controllers/metro_areas_controller.rb +0 -74
- data/app/controllers/statistics_controller.rb +0 -35
- data/app/views/admin/comments.html.haml +0 -53
- data/app/views/admin/events.html.haml +0 -26
- data/app/views/admin/messages.html.haml +0 -3
- data/app/views/admin/update.js.erb +0 -1
- data/app/views/admin/users.html.haml +0 -57
- data/app/views/ads/_form.html.haml +0 -21
- data/app/views/ads/edit.html.haml +0 -7
- data/app/views/ads/index.html.haml +0 -29
- data/app/views/ads/new.html.haml +0 -6
- data/app/views/ads/show.html.haml +0 -19
- data/app/views/categories/_form.html.haml +0 -8
- data/app/views/categories/edit.html.haml +0 -4
- data/app/views/categories/index.html.haml +0 -20
- data/app/views/categories/new.html.haml +0 -4
- data/app/views/homepage_features/_form.html.haml +0 -6
- data/app/views/homepage_features/edit.html.haml +0 -6
- data/app/views/homepage_features/index.html.haml +0 -24
- data/app/views/homepage_features/new.html.haml +0 -2
- data/app/views/homepage_features/show.html.haml +0 -27
- data/app/views/metro_areas/_form.html.haml +0 -6
- data/app/views/metro_areas/edit.html.haml +0 -8
- data/app/views/metro_areas/index.html.haml +0 -21
- data/app/views/metro_areas/new.html.haml +0 -6
- data/app/views/metro_areas/show.html.haml +0 -14
- data/app/views/pages/_form.html.haml +0 -18
- data/app/views/pages/edit.html.haml +0 -4
- data/app/views/pages/index.html.haml +0 -34
- data/app/views/pages/new.html.haml +0 -7
- data/app/views/shared/_admin_nav.html.haml +0 -17
- data/app/views/shared/_load_tinymce.js.erb +0 -15
- data/app/views/statistics/activities.xml.builder +0 -33
- data/app/views/statistics/index.html.haml +0 -48
- data/app/views/tags/edit.html.haml +0 -12
- data/app/views/tags/manage.html.haml +0 -30
- data/app/views/users/update.js.erb +0 -1
- data/test/functional/ads_controller_test.rb +0 -51
- data/test/functional/homepage_features_controller_test.rb +0 -69
- data/test/functional/metro_areas_controller_test.rb +0 -63
- data/test/functional/statistics_controller_test.rb +0 -18
- data/test/unit/acts_as_taggable_on/tag_test.rb +0 -22
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/README +0 -3
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/Rakefile +0 -22
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/generators/publishing/publishing_generator.rb +0 -34
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/generators/publishing/templates/migration.rb +0 -13
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/install.rb +0 -3
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/test/acts_as_publishable_test.rb +0 -8
- data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/uninstall.rb +0 -1
- data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/README +0 -4
- data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/Rakefile +0 -22
- data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/atom_feed_test.rb +0 -85
- data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/rss_feed_test.rb +0 -61
- data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/test_helper.rb +0 -60
- data/vendor/converted2.3plugins_to_lib_leftovers/white_list/README +0 -35
- data/vendor/converted2.3plugins_to_lib_leftovers/white_list/Rakefile +0 -22
- data/vendor/converted2.3plugins_to_lib_leftovers/white_list/test/white_list_test.rb +0 -120
data/app/helpers/base_helper.rb
CHANGED
@@ -3,16 +3,17 @@ require 'digest/md5'
|
|
3
3
|
# Methods added to this helper will be available to all templates in the application.
|
4
4
|
module BaseHelper
|
5
5
|
include ActsAsTaggableOn::TagsHelper
|
6
|
+
include Ckeditor::ApplicationHelper
|
6
7
|
|
7
8
|
def commentable_url(comment)
|
8
9
|
if comment.recipient && comment.commentable
|
9
10
|
if comment.commentable_type != "User"
|
10
|
-
polymorphic_url([comment.recipient, comment.commentable])+"#
|
11
|
+
polymorphic_url([comment.recipient, comment.commentable])+"#comment-#{comment.id}"
|
11
12
|
elsif comment
|
12
|
-
user_url(comment.recipient)+"#
|
13
|
+
user_url(comment.recipient)+"#comment-#{comment.id}"
|
13
14
|
end
|
14
15
|
elsif comment.commentable
|
15
|
-
polymorphic_url(comment.commentable)+"#
|
16
|
+
polymorphic_url(comment.commentable)+"#comment-#{comment.id}"
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
@@ -346,17 +347,6 @@ module BaseHelper
|
|
346
347
|
user.gender ? (user.male? ? :his.l : :her.l) : :their.l
|
347
348
|
end
|
348
349
|
|
349
|
-
def tiny_mce_init_if_needed
|
350
|
-
if !@uses_tiny_mce.blank?
|
351
|
-
javascript_tag(tiny_mce_js)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
def tiny_mce_js
|
356
|
-
selector = @tiny_mce_configuration['selector']
|
357
|
-
"jQuery(function(){jQuery('#{selector}').RichTextEditor(#{@tiny_mce_configuration.to_json})});".html_safe
|
358
|
-
end
|
359
|
-
|
360
350
|
def flash_class(level)
|
361
351
|
case level
|
362
352
|
when :notice then "alert-info"
|
@@ -1,58 +1,28 @@
|
|
1
|
-
#require_dependency ActsAsTaggableOn::Engine.config.root.join('
|
1
|
+
# require_dependency ActsAsTaggableOn::Engine.config.root.join('lib', 'acts_as_taggable_on', 'tag.rb').to_s
|
2
2
|
|
3
3
|
class ActsAsTaggableOn::Tag < ActiveRecord::Base
|
4
4
|
|
5
5
|
class << self
|
6
6
|
def popular(limit = 20, type = nil)
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
if type == nil
|
8
|
+
ActsAsTaggableOn::Tag.most_used(limit)
|
9
|
+
else
|
10
|
+
klass = Object.const_get type
|
11
|
+
klass.tag_counts.most_used(limit)
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
15
|
def default_per_page
|
13
16
|
25
|
14
17
|
end
|
15
18
|
|
16
|
-
# Calculate the tag counts for all tags.
|
17
|
-
#
|
18
|
-
# - +:start_at+ - restrict the tags to those created after a certain time
|
19
|
-
# - +:end_at+ - restrict the tags to those created before a certain time
|
20
|
-
# - +:at_least+ - exclude tags with a frequency less than the given value
|
21
|
-
# - +:at_most+ - exclude tags with a frequency greater than the given value
|
22
|
-
#
|
23
|
-
# Deprecated:
|
24
|
-
#
|
25
|
-
# - +:conditions+
|
26
|
-
# - +:limit+
|
27
|
-
# - +:order+
|
28
|
-
#
|
29
|
-
def counts(options = {})
|
30
|
-
options.assert_valid_keys :start_at, :end_at, :at_least, :at_most, :conditions, :limit, :order, :joins
|
31
|
-
|
32
|
-
tags = select("#{quoted_table_name}.id", "#{quoted_table_name}.name", "COUNT(#{quoted_table_name}.id) AS count")
|
33
|
-
tags = tags.joins(:taggings)
|
34
|
-
tags = tags.having(["COUNT(#{ActsAsTaggableOn::Tagging.quoted_table_name}.id) >= ?", options[:at_least]]) if options[:at_least]
|
35
|
-
tags = tags.having(["COUNT(#{ActsAsTaggableOn::Tagging.quoted_table_name}.id) <= ?", options[:at_most]]) if options[:at_most]
|
36
|
-
tags = tags.where("#{ActsAsTaggableOn::Tagging.quoted_table_name}.created_at >= ?", options[:start_at]) if options[:start_at]
|
37
|
-
tags = tags.where("#{ActsAsTaggableOn::Tagging.quoted_table_name}.created_at <= ?", options[:end_at]) if options[:end_at]
|
38
|
-
tags = tags.where(options[:conditions]) if options[:conditions]
|
39
|
-
tags = tags.limit(options[:limit]) if options[:limit]
|
40
|
-
tags = tags.order(options[:order]) if options[:order]
|
41
|
-
|
42
|
-
if joins = options.delete(:joins)
|
43
|
-
tags = tags.joins(joins)
|
44
|
-
end
|
45
|
-
|
46
|
-
tags.group("#{quoted_table_name}.id, #{quoted_table_name}.name")
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
19
|
end
|
51
20
|
|
52
21
|
def to_param
|
53
22
|
URI.escape(URI.escape(self.name), /[\/.?#]/)
|
54
23
|
end
|
55
24
|
|
25
|
+
|
56
26
|
def related_tags(limit = 10)
|
57
27
|
taggables = self.taggings.limit(10).to_a.collect{|t| t.taggable }.compact
|
58
28
|
|
@@ -60,11 +30,9 @@ class ActsAsTaggableOn::Tag < ActiveRecord::Base
|
|
60
30
|
return [] if tagging_ids.blank?
|
61
31
|
|
62
32
|
ActsAsTaggableOn::Tag.where("tags.id != '#{self.id}'")
|
63
|
-
.select("tags.id, tags.name, COUNT(tags.id) as count")
|
64
33
|
.joins(:taggings)
|
65
34
|
.where({:taggings => {:id => tagging_ids }})
|
66
|
-
.
|
67
|
-
.order("count DESC")
|
35
|
+
.order("taggings_count DESC")
|
68
36
|
.limit(limit)
|
69
37
|
end
|
70
38
|
|
data/app/models/clipping.rb
CHANGED
@@ -21,7 +21,7 @@ class Clipping < ActiveRecord::Base
|
|
21
21
|
|
22
22
|
def self.find_related_to(clipping, options = {})
|
23
23
|
options.reverse_merge!({:limit => 8,
|
24
|
-
:order => 'created_at DESC',
|
24
|
+
:order => 'clippings.created_at DESC',
|
25
25
|
:conditions => [ 'clippings.id != ?', clipping.id ]
|
26
26
|
})
|
27
27
|
|
data/app/models/forum.rb
CHANGED
data/app/models/photo.rb
CHANGED
@@ -60,7 +60,7 @@ class Photo < ActiveRecord::Base
|
|
60
60
|
|
61
61
|
def self.find_related_to(photo, options = {})
|
62
62
|
options.reverse_merge!({:limit => 8,
|
63
|
-
:order => 'created_at DESC',
|
63
|
+
:order => 'photos.created_at DESC',
|
64
64
|
:conditions => ['photos.id != ?', photo.id]
|
65
65
|
})
|
66
66
|
limit(options[:limit]).order(options[:order]).where(options[:conditions]).tagged_with(photo.tags.collect{|t| t.name }, :any => true)
|
data/app/models/post.rb
CHANGED
@@ -51,7 +51,7 @@ class Post < ActiveRecord::Base
|
|
51
51
|
|
52
52
|
def find_related_to(post, options = {})
|
53
53
|
options.reverse_merge!({:limit => 8,
|
54
|
-
:order => 'published_at DESC',
|
54
|
+
:order => 'posts.published_at DESC',
|
55
55
|
:conditions => [ 'posts.id != ? AND published_as = ?', post.id, 'live' ]
|
56
56
|
})
|
57
57
|
|
data/app/models/sb_post.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
class SbPost < ActiveRecord::Base
|
2
|
-
acts_as_activity :user, :if => Proc.new{|record| record.user } #don't record an activity if there's no user
|
2
|
+
acts_as_activity :user, :if => Proc.new{|record| record.user } #don't record an activity if there's no user
|
3
3
|
include Rakismet::Model
|
4
4
|
rakismet_attrs :author => :username, :comment_type => 'comment', :content => :body, :user_ip => :author_ip
|
5
|
-
|
5
|
+
|
6
6
|
belongs_to :forum, :counter_cache => true
|
7
7
|
belongs_to :user, :counter_cache => true
|
8
8
|
belongs_to :topic, :counter_cache => true
|
9
9
|
|
10
10
|
format_attribute :body
|
11
11
|
before_create { |r| r.forum_id = r.topic.forum_id }
|
12
|
-
after_create { |r|
|
12
|
+
after_create { |r|
|
13
13
|
Topic.where('id = ?', r.topic_id)
|
14
14
|
.update_all(['replied_at = ?, replied_by = ?, last_post_id = ?', r.created_at, r.user_id, r.id])
|
15
15
|
|
16
16
|
}
|
17
|
-
after_destroy { |r|
|
17
|
+
after_destroy { |r|
|
18
18
|
t = Topic.find(r.topic_id)
|
19
19
|
Topic.where('id = ?', t.id).update_all(['replied_at = ?, replied_by = ?, last_post_id = ?', t.sb_posts.recent.last.created_at, t.sb_posts.recent.last.user_id, t.sb_posts.recent.last.id]) if t.sb_posts.recent.last
|
20
20
|
}
|
@@ -27,40 +27,44 @@ class SbPost < ActiveRecord::Base
|
|
27
27
|
validates_presence_of :body, :topic
|
28
28
|
|
29
29
|
after_create :monitor_topic
|
30
|
-
after_create :notify_monitoring_users
|
31
|
-
|
30
|
+
after_create :notify_monitoring_users
|
31
|
+
|
32
32
|
scope :with_query_options, lambda {
|
33
33
|
select('sb_posts.*, topics.title as topic_title, forums.name as forum_name')
|
34
34
|
.joins('inner join topics on sb_posts.topic_id = topics.id inner join forums on topics.forum_id = forums.id')
|
35
35
|
.order('sb_posts.created_at desc')
|
36
36
|
}
|
37
37
|
scope :recent, -> { order('sb_posts.created_at ASC') }
|
38
|
-
validate :check_spam
|
39
|
-
|
38
|
+
validate :check_spam
|
39
|
+
|
40
40
|
def monitor_topic
|
41
|
-
return unless user
|
41
|
+
return unless user
|
42
42
|
monitorship = Monitorship.where(:user_id => self.user.id, :topic_id => self.topic.id).first_or_initialize
|
43
43
|
if monitorship.new_record?
|
44
44
|
monitorship.update_attribute :active, true
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def notify_monitoring_users
|
49
49
|
topic.notify_of_new_post(self)
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def editable_by?(user)
|
53
53
|
user && (user.id == user_id || user.admin? || user.moderator_of?(topic.forum_id))
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def username
|
57
57
|
user ? user.login : (author_name.blank? ? :anonymous.l : author_name)
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def check_spam
|
61
61
|
if configatron.has_key?(:akismet_key) && self.spam?
|
62
62
|
self.errors.add(:base, :comment_spam_error.l)
|
63
63
|
end
|
64
|
-
end
|
65
|
-
|
64
|
+
end
|
65
|
+
|
66
|
+
def dom_id
|
67
|
+
['sb_posts', id].join('-')
|
68
|
+
end
|
69
|
+
|
66
70
|
end
|
data/app/models/topic.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Topic < ActiveRecord::Base
|
2
2
|
acts_as_activity :user
|
3
|
-
|
3
|
+
|
4
4
|
acts_as_taggable
|
5
5
|
belongs_to :forum, :counter_cache => true
|
6
6
|
belongs_to :user
|
@@ -10,14 +10,14 @@ class Topic < ActiveRecord::Base
|
|
10
10
|
has_many :sb_posts, :dependent => :destroy, :inverse_of => :topic
|
11
11
|
|
12
12
|
belongs_to :replied_by_user, :foreign_key => "replied_by", :class_name => "User"
|
13
|
-
|
13
|
+
|
14
14
|
validates_presence_of :forum, :user, :title
|
15
15
|
before_create :set_default_replied_at_and_sticky
|
16
16
|
after_save :set_post_topic_id
|
17
17
|
after_create :create_monitorship_for_owner
|
18
|
-
|
18
|
+
|
19
19
|
accepts_nested_attributes_for :sb_posts
|
20
|
-
|
20
|
+
|
21
21
|
scope :recently_replied, -> {order('replied_at DESC')}
|
22
22
|
|
23
23
|
def notify_of_new_post(post)
|
@@ -33,11 +33,11 @@ class Topic < ActiveRecord::Base
|
|
33
33
|
def voices
|
34
34
|
sb_posts.map { |p| p.user_id }.uniq.size
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def body
|
38
38
|
sb_posts.first
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def hit!
|
42
42
|
self.class.increment_counter :hits, id
|
43
43
|
end
|
@@ -47,7 +47,7 @@ class Topic < ActiveRecord::Base
|
|
47
47
|
def views() hits end
|
48
48
|
|
49
49
|
def paged?() sb_posts_count > 25 end
|
50
|
-
|
50
|
+
|
51
51
|
def last_page
|
52
52
|
(sb_posts_count.to_f / 25.0).ceil.to_i
|
53
53
|
end
|
@@ -55,7 +55,7 @@ class Topic < ActiveRecord::Base
|
|
55
55
|
def editable_by?(user)
|
56
56
|
user && (user.id == user_id || user.admin? || user.moderator_of?(forum_id))
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
protected
|
60
60
|
def set_default_replied_at_and_sticky
|
61
61
|
self.replied_at = Time.now.utc
|
@@ -65,9 +65,9 @@ class Topic < ActiveRecord::Base
|
|
65
65
|
def set_post_topic_id
|
66
66
|
SbPost.where('topic_id = ?', id).update_all(['forum_id = ?', forum_id])
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def create_monitorship_for_owner
|
70
70
|
monitorship = Monitorship.find_or_initialize_by(:user_id => user.id, :topic_id => self.id)
|
71
|
-
monitorship.update_attribute :active, true
|
71
|
+
monitorship.update_attribute :active, true
|
72
72
|
end
|
73
73
|
end
|
data/app/models/user.rb
CHANGED
@@ -447,7 +447,7 @@ class User < ActiveRecord::Base
|
|
447
447
|
self.activation_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
|
448
448
|
end
|
449
449
|
|
450
|
-
# before
|
450
|
+
# before actions
|
451
451
|
def whitelist_attributes
|
452
452
|
self.login = self.login.strip
|
453
453
|
self.description = white_list(self.description )
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class ApplicationPolicy
|
2
|
+
attr_reader :user, :record
|
3
|
+
|
4
|
+
def initialize(user, record)
|
5
|
+
@user = user
|
6
|
+
@record = record
|
7
|
+
end
|
8
|
+
|
9
|
+
def show?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def index?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def new?
|
18
|
+
create?
|
19
|
+
end
|
20
|
+
|
21
|
+
def create?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit?
|
26
|
+
update?
|
27
|
+
end
|
28
|
+
|
29
|
+
def update?
|
30
|
+
user.admin? || record.respond_to(:user) && record.user.eql?(user)
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy?
|
34
|
+
update?
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy_all?
|
38
|
+
user.admin?
|
39
|
+
end
|
40
|
+
|
41
|
+
def scope
|
42
|
+
Pundit.policy_scope!(user, record.class)
|
43
|
+
end
|
44
|
+
|
45
|
+
class Scope
|
46
|
+
attr_reader :user, :scope
|
47
|
+
|
48
|
+
def initialize(user, scope)
|
49
|
+
@user = user
|
50
|
+
@scope = scope
|
51
|
+
end
|
52
|
+
|
53
|
+
def resolve
|
54
|
+
scope
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|