community_engine 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +4 -1
  3. data/.travis.yml +5 -2
  4. data/CHANGELOG.markdown +270 -0
  5. data/Gemfile +3 -0
  6. data/README.markdown +20 -21
  7. data/Rakefile +8 -6
  8. data/TODO.markdown +3 -0
  9. data/UPGRADING.markdown +46 -36
  10. data/app/assets/javascripts/active_admin.js.coffee +19 -0
  11. data/app/assets/javascripts/ckeditor/configs/ads.js.coffee +175 -0
  12. data/app/assets/javascripts/ckeditor/configs/comments.js.coffee +2 -0
  13. data/app/assets/javascripts/ckeditor/configs/posts.js.coffee +248 -0
  14. data/app/assets/javascripts/ckeditor/rte/rte.ads.js.coffee +7 -0
  15. data/app/assets/javascripts/ckeditor/rte/rte.comments.js.coffee +8 -0
  16. data/app/assets/javascripts/ckeditor/rte/rte.js.coffee +20 -0
  17. data/app/assets/javascripts/ckeditor/rte/rte.posts.js.coffee +14 -0
  18. data/app/assets/javascripts/community_engine.js +114 -123
  19. data/{vendor → app}/assets/javascripts/jcrop/jquery.Jcrop.js +0 -0
  20. data/{vendor → app}/assets/javascripts/jcrop/jquery.color.js +0 -0
  21. data/{vendor → app}/assets/javascripts/tag-it/tag-it.js +0 -0
  22. data/app/assets/stylesheets/active_admin.css.scss +27 -0
  23. data/{vendor → app}/assets/stylesheets/jcrop/Jcrop.gif +0 -0
  24. data/{vendor → app}/assets/stylesheets/jcrop/jquery.Jcrop.min.css +0 -0
  25. data/{vendor → app}/assets/stylesheets/tag-it/tag-it.css +0 -0
  26. data/{vendor → app}/assets/stylesheets/tag-it/tagit.ui-zendesk.css +0 -0
  27. data/app/controllers/activities_controller.rb +4 -4
  28. data/app/controllers/albums_controller.rb +13 -18
  29. data/app/controllers/authorizations_controller.rb +1 -1
  30. data/app/controllers/base_controller.rb +9 -32
  31. data/app/controllers/categories_controller.rb +1 -78
  32. data/app/controllers/clippings_controller.rb +3 -7
  33. data/app/controllers/comments_controller.rb +4 -24
  34. data/app/controllers/events_controller.rb +3 -12
  35. data/app/controllers/favorites_controller.rb +2 -2
  36. data/app/controllers/forums_controller.rb +5 -9
  37. data/app/controllers/invitations_controller.rb +1 -1
  38. data/app/controllers/messages_controller.rb +4 -8
  39. data/app/controllers/moderators_controller.rb +1 -1
  40. data/app/controllers/monitorships_controller.rb +1 -1
  41. data/app/controllers/pages_controller.rb +0 -62
  42. data/app/controllers/password_resets_controller.rb +2 -2
  43. data/app/controllers/photo_manager_controller.rb +3 -3
  44. data/app/controllers/photos_controller.rb +43 -14
  45. data/app/controllers/posts_controller.rb +7 -14
  46. data/app/controllers/rsvps_controller.rb +3 -3
  47. data/app/controllers/sb_posts_controller.rb +20 -20
  48. data/app/controllers/sessions_controller.rb +1 -1
  49. data/app/controllers/tags_controller.rb +4 -52
  50. data/app/controllers/topics_controller.rb +15 -10
  51. data/app/controllers/users_controller.rb +9 -16
  52. data/app/controllers/votes_controller.rb +2 -2
  53. data/app/helpers/base_helper.rb +4 -14
  54. data/app/models/acts_as_taggable_on/tag.rb +9 -41
  55. data/app/models/clipping.rb +1 -1
  56. data/app/models/forum.rb +2 -2
  57. data/app/models/photo.rb +1 -1
  58. data/app/models/post.rb +1 -1
  59. data/app/models/sb_post.rb +19 -15
  60. data/app/models/topic.rb +10 -10
  61. data/app/models/user.rb +1 -1
  62. data/app/policies/active_admin/page_policy.rb +11 -0
  63. data/app/policies/application_policy.rb +59 -0
  64. data/app/policies/post_policy.rb +13 -0
  65. data/app/policies/sb_post_policy.rb +15 -0
  66. data/app/policies/topic_policy.rb +23 -0
  67. data/app/views/ckeditor/pictures/index.html.haml +15 -0
  68. data/app/views/ckeditor/shared/_asset.html.haml +9 -0
  69. data/app/views/ckeditor/shared/_asset_tmpl.html.erb +14 -0
  70. data/app/views/comments/approve.js.haml +1 -1
  71. data/app/views/comments/create.js.erb +1 -1
  72. data/app/views/comments/edit.js.erb +2 -1
  73. data/app/views/events/_subscribe.html.haml +1 -1
  74. data/app/views/forums/show.html.haml +8 -4
  75. data/app/views/posts/show.html.haml +4 -0
  76. data/app/views/sb_posts/_edit_script.js.erb +2 -3
  77. data/app/views/sb_posts/_reply_script.js.erb +2 -4
  78. data/app/views/sb_posts/_sb_post.html.haml +7 -6
  79. data/app/views/sb_posts/create.js.erb +4 -4
  80. data/app/views/sb_posts/edit.js.erb +2 -1
  81. data/app/views/sessions/_menu_item.html.haml +4 -4
  82. data/app/views/shared/_end_javascript.html.haml +1 -2
  83. data/app/views/shared/_login_sidebar.html.haml +2 -2
  84. data/app/views/tags/show.html.haml +3 -3
  85. data/app/views/topics/show.html.haml +1 -1
  86. data/app/views/users/_profile_user_info_sidebar.html.haml +2 -2
  87. data/app/views/users/destroy.js.erb +3 -0
  88. data/app/views/users/new.html.haml +1 -1
  89. data/app/views/users/show.html.haml +1 -1
  90. data/app/views/users/signup_completed.html.haml +1 -1
  91. data/community_engine.gemspec +14 -11
  92. data/config/initializers/active_admin.rb +239 -0
  93. data/config/initializers/ckeditor.rb +8 -0
  94. data/config/initializers/ransack_bootstrap_fix.rb +25 -0
  95. data/config/locales/de-DE.yml +1 -0
  96. data/config/locales/en.yml +3 -0
  97. data/config/routes.rb +14 -19
  98. data/config/spring.rb +1 -0
  99. data/db/migrate/083_create_active_admin_comments.rb +19 -0
  100. data/lib/community_engine.rb +7 -3
  101. data/lib/community_engine/admin/ads.rb +3 -0
  102. data/lib/community_engine/admin/categories.rb +20 -0
  103. data/lib/community_engine/admin/comments.rb +4 -0
  104. data/lib/community_engine/admin/dashboard.rb +38 -0
  105. data/lib/community_engine/admin/events.rb +3 -0
  106. data/lib/community_engine/admin/forums.rb +3 -0
  107. data/lib/community_engine/admin/homepage_features.rb +25 -0
  108. data/lib/community_engine/admin/metro_areas.rb +4 -0
  109. data/lib/community_engine/admin/pages.rb +26 -0
  110. data/lib/community_engine/admin/posts.rb +92 -0
  111. data/lib/community_engine/admin/tags.rb +21 -0
  112. data/lib/community_engine/admin/users.rb +54 -0
  113. data/lib/community_engine/authenticated_system.rb +5 -20
  114. data/lib/community_engine/engine.rb +5 -0
  115. data/lib/community_engine/version.rb +1 -1
  116. data/lib/resource_feeder/atom.rb +2 -0
  117. data/lib/resource_feeder/rss.rb +2 -0
  118. data/lib/white_list.rb +6 -11
  119. data/test/fixtures/events.yml +10 -0
  120. data/test/fixtures/tags.yml +6 -5
  121. data/test/functional/activities_controller_test.rb +19 -19
  122. data/test/functional/admin/posts_controller_test.rb +16 -0
  123. data/test/functional/admin_controller_test.rb +82 -82
  124. data/test/functional/categories_controller_test.rb +0 -39
  125. data/test/functional/comments_controller_test.rb +14 -7
  126. data/test/functional/favorites_controller_test.rb +15 -16
  127. data/test/functional/pages_controller_test.rb +0 -71
  128. data/test/functional/posts_controller_test.rb +21 -2
  129. data/test/functional/sb_posts_controller_test.rb +3 -3
  130. data/test/functional/sessions_controller_test.rb +2 -2
  131. data/test/functional/tags_controller_test.rb +9 -20
  132. data/test/functional/users_controller_test.rb +0 -8
  133. data/test/functional/votes_controller_test.rb +1 -1
  134. data/test/testapp/config/spring.rb +1 -0
  135. data/test/testapp/db/schema.rb +16 -1
  136. data/test/unit/event_test.rb +1 -1
  137. metadata +204 -170
  138. data/CHANGELOG +0 -144
  139. data/app/controllers/admin_controller.rb +0 -80
  140. data/app/controllers/ads_controller.rb +0 -90
  141. data/app/controllers/homepage_features_controller.rb +0 -74
  142. data/app/controllers/metro_areas_controller.rb +0 -74
  143. data/app/controllers/statistics_controller.rb +0 -35
  144. data/app/views/admin/comments.html.haml +0 -53
  145. data/app/views/admin/events.html.haml +0 -26
  146. data/app/views/admin/messages.html.haml +0 -3
  147. data/app/views/admin/update.js.erb +0 -1
  148. data/app/views/admin/users.html.haml +0 -57
  149. data/app/views/ads/_form.html.haml +0 -21
  150. data/app/views/ads/edit.html.haml +0 -7
  151. data/app/views/ads/index.html.haml +0 -29
  152. data/app/views/ads/new.html.haml +0 -6
  153. data/app/views/ads/show.html.haml +0 -19
  154. data/app/views/categories/_form.html.haml +0 -8
  155. data/app/views/categories/edit.html.haml +0 -4
  156. data/app/views/categories/index.html.haml +0 -20
  157. data/app/views/categories/new.html.haml +0 -4
  158. data/app/views/homepage_features/_form.html.haml +0 -6
  159. data/app/views/homepage_features/edit.html.haml +0 -6
  160. data/app/views/homepage_features/index.html.haml +0 -24
  161. data/app/views/homepage_features/new.html.haml +0 -2
  162. data/app/views/homepage_features/show.html.haml +0 -27
  163. data/app/views/metro_areas/_form.html.haml +0 -6
  164. data/app/views/metro_areas/edit.html.haml +0 -8
  165. data/app/views/metro_areas/index.html.haml +0 -21
  166. data/app/views/metro_areas/new.html.haml +0 -6
  167. data/app/views/metro_areas/show.html.haml +0 -14
  168. data/app/views/pages/_form.html.haml +0 -18
  169. data/app/views/pages/edit.html.haml +0 -4
  170. data/app/views/pages/index.html.haml +0 -34
  171. data/app/views/pages/new.html.haml +0 -7
  172. data/app/views/shared/_admin_nav.html.haml +0 -17
  173. data/app/views/shared/_load_tinymce.js.erb +0 -15
  174. data/app/views/statistics/activities.xml.builder +0 -33
  175. data/app/views/statistics/index.html.haml +0 -48
  176. data/app/views/tags/edit.html.haml +0 -12
  177. data/app/views/tags/manage.html.haml +0 -30
  178. data/app/views/users/update.js.erb +0 -1
  179. data/test/functional/ads_controller_test.rb +0 -51
  180. data/test/functional/homepage_features_controller_test.rb +0 -69
  181. data/test/functional/metro_areas_controller_test.rb +0 -63
  182. data/test/functional/statistics_controller_test.rb +0 -18
  183. data/test/unit/acts_as_taggable_on/tag_test.rb +0 -22
  184. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/README +0 -3
  185. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/Rakefile +0 -22
  186. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/generators/publishing/publishing_generator.rb +0 -34
  187. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/generators/publishing/templates/migration.rb +0 -13
  188. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/install.rb +0 -3
  189. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/test/acts_as_publishable_test.rb +0 -8
  190. data/vendor/converted2.3plugins_to_lib_leftovers/acts_as_publishable/uninstall.rb +0 -1
  191. data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/README +0 -4
  192. data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/Rakefile +0 -22
  193. data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/atom_feed_test.rb +0 -85
  194. data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/rss_feed_test.rb +0 -61
  195. data/vendor/converted2.3plugins_to_lib_leftovers/resource_feeder/test/test_helper.rb +0 -60
  196. data/vendor/converted2.3plugins_to_lib_leftovers/white_list/README +0 -35
  197. data/vendor/converted2.3plugins_to_lib_leftovers/white_list/Rakefile +0 -22
  198. data/vendor/converted2.3plugins_to_lib_leftovers/white_list/test/white_list_test.rb +0 -120
@@ -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])+"#comment_#{comment.id}"
11
+ polymorphic_url([comment.recipient, comment.commentable])+"#comment-#{comment.id}"
11
12
  elsif comment
12
- user_url(comment.recipient)+"#comment_#{comment.id}"
13
+ user_url(comment.recipient)+"#comment-#{comment.id}"
13
14
  end
14
15
  elsif comment.commentable
15
- polymorphic_url(comment.commentable)+"#comment_#{comment.id}"
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('app', 'models', 'acts_as_taggable_on', 'tag.rb').to_s
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
- tags = ActsAsTaggableOn::Tag.counts(:at_least => 0).limit(limit).order('count DESC')
8
- tags = tags.where("taggings.taggable_type = ?", type.capitalize) if type
9
- tags
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
- .group("tags.id, tags.name")
67
- .order("count DESC")
35
+ .order("taggings_count DESC")
68
36
  .limit(limit)
69
37
  end
70
38
 
@@ -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
 
@@ -14,9 +14,9 @@ class Forum < ActiveRecord::Base
14
14
  belongs_to :owner, :polymorphic => true
15
15
 
16
16
  format_attribute :description
17
-
17
+
18
18
  def to_param
19
19
  id.to_s << "-" << (name ? name.parameterize : '' )
20
20
  end
21
-
21
+
22
22
  end
@@ -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)
@@ -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
 
@@ -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
@@ -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
@@ -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 filters
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,11 @@
1
+ class ActiveAdmin::PagePolicy < ApplicationPolicy
2
+
3
+ def dashboard?
4
+ true
5
+ end
6
+
7
+ def index?
8
+ true
9
+ end
10
+
11
+ end
@@ -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
+
@@ -0,0 +1,13 @@
1
+ class PostPolicy < ApplicationPolicy
2
+
3
+ class Scope < Scope
4
+ def resolve
5
+ if user.admin?
6
+ scope.unscoped
7
+ else
8
+ scope.unscoped.where(:user_id => user.id)
9
+ end
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,15 @@
1
+ class SbPostPolicy < ApplicationPolicy
2
+
3
+ def edit?
4
+ update?
5
+ end
6
+
7
+ def destroy?
8
+ update?
9
+ end
10
+
11
+ def update?
12
+ record.editable_by?(user)
13
+ end
14
+
15
+ end
@@ -0,0 +1,23 @@
1
+ class TopicPolicy < ApplicationPolicy
2
+
3
+ def new?
4
+ create?
5
+ end
6
+
7
+ def create?
8
+ true
9
+ end
10
+
11
+ def edit?
12
+ update?
13
+ end
14
+
15
+ def destroy?
16
+ update?
17
+ end
18
+
19
+ def update?
20
+ record.editable_by?(user)
21
+ end
22
+
23
+ end