Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 473
- Log:
Add simple topic title blacklist.
- Author:
- rool
- Date:
- Thu Jan 31 09:48:46 +0000 2019
- Size:
- 1960 Bytes
1 | class Topic < ActiveRecord::Base |
2 | belongs_to :forum, :counter_cache => true |
3 | belongs_to :user |
4 | has_many :monitorships |
5 | has_many :monitors, :through => :monitorships, :conditions => ['monitorships.active = ?', true], :source => :user, :order => 'users.display_name' |
6 | |
7 | has_many :posts, :order => 'posts.created_at', :dependent => :destroy do |
8 | def last |
9 | @last_post ||= find(:first, :order => 'posts.created_at desc') |
10 | end |
11 | end |
12 | |
13 | belongs_to :replied_by_user, :foreign_key => "replied_by", :class_name => "User" |
14 | |
15 | validates_presence_of :forum, :user, :title |
16 | validate :title_cannot_contain_blacklisted_strings |
17 | |
18 | before_create :set_default_replied_at_and_sticky |
19 | after_save :set_post_topic_id |
20 | |
21 | attr_accessible :title |
22 | # to help with the create form |
23 | attr_accessor :body |
24 | |
25 | def voices |
26 | posts.map { |p| p.user_id }.uniq.size |
27 | end |
28 | |
29 | def hit! |
30 | self.class.increment_counter :hits, id |
31 | end |
32 | |
33 | def sticky?() sticky == 1 end |
34 | |
35 | def views() hits end |
36 | |
37 | def paged?(per_page = 25) posts_count > per_page.to_i end |
38 | |
39 | def last_page(per_page = 25) |
40 | per_page = per_page.to_f |
41 | per_page = 25.0 if (per_page < 1) |
42 | (posts_count.to_f / per_page).ceil.to_i |
43 | end |
44 | |
45 | def editable_by?(user) |
46 | user && (user.id == user_id || user.admin? || user.moderator_of?(forum_id)) |
47 | end |
48 | |
49 | protected |
50 | def set_default_replied_at_and_sticky |
51 | self.replied_at = Time.now.utc |
52 | self.sticky ||= 0 |
53 | end |
54 | |
55 | def set_post_topic_id |
56 | Post.update_all ['forum_id = ?', forum_id], ['topic_id = ?', id] |
57 | end |
58 | |
59 | def title_cannot_contain_blacklisted_strings |
60 | downcase_title = title.downcase rescue '' |
61 | blacklist = Blacklist.find(:first).title_list rescue '' |
62 | prohibited = false |
63 | |
64 | blacklist.split("\n").each do |item| |
65 | if downcase_title.include?(item) |
66 | prohibited = true |
67 | break |
68 | end |
69 | end |
70 | |
71 | errors.add(:title, "contains prohibited text") if prohibited == true |
72 | end |
73 | end |