@@ -84,6 +84,14 @@ class Post < ActiveRecord::Base
false
end
+ def self.get_id_by_posters(posters)
+ ActiveRecord::Base.connection.select_values("SELECT id FROM posts WHERE poster_id IN(#{posters.map{|x| quote(x)}.join(',')})").map{|x| x.to_i}
+ end
+
+ def self.get_id_by_posts(posts,user,forum_id = nil)
+ ActiveRecord::Base.connection.select_values("SELECT t.id FROM posts AS p INNER JOIN topics AS t ON t.id=p.topic_id INNER JOIN forums AS f ON f.id=t.forum_id LEFT JOIN forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=#{user.group_id}) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id IN(#{posts.map{|x| quote(x)}.join(',')}) #{'AND t.forum_id='+forum_id unless forum_id.nil?} GROUP BY t.id").map{|x| x.to_i}
+ end
+
private
def topic_update
@@ -43,6 +43,26 @@ class Topic < ActiveRecord::Base
ids.map {|i| i.to_i}.index(post.id)
end
+ def set_close_status(topics,closed)
+ update_all "closed=#{quote(closed)}", "id in (#{topics.map{|x| quote(x)}.join(',')})"
+ end
+
+ def self.get_id_by_user(id,user)
+ ActiveRecord::Base.connection.select_values("SELECT t.id FROM topics AS t INNER JOIN posts AS p ON t.id=p.topic_id INNER JOIN forums AS f ON f.id=t.forum_id LEFT JOIN forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=#{user.group_id}) WHERE (fp.read_forum IS NULL OR fp.read_forum=#{quote(true)}) AND p.poster_id=#{user.id} GROUP BY t.id").map{|x| x.to_i}
+ end
+
+ def self.get_id_by_time(user,now)
+ ActiveRecord::Base.connection.select_values("SELECT t.id FROM topics AS t INNER JOIN forums AS f ON f.id=t.forum_id LEFT JOIN forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=#{user.group_id}) WHERE (fp.read_forum IS NULL OR fp.read_forum=#{quote(true)}) AND t.last_post>#{quote(now)}").map{|x| x.to_i}
+ end
+
+ def self.get_id_by_posts(posts, user, forum_id = nil)
+ ActiveRecord::Base.connection.select_values("SELECT t.id FROM posts AS p INNER JOIN topics AS t ON t.id=p.topic_id INNER JOIN forums AS f ON f.id=t.forum_id LEFT JOIN forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=#{user.group_id}) WHERE (fp.read_forum IS NULL OR fp.read_forum=#{quote(true)}) AND p.id IN(#{posts.map{|x| quote(x)}.join(',')}) #{'AND t.forum_id='+forum_id unless forum_id.nil?} GROUP BY t.id").map{|x| x.to_i}
+ end
+
+ def self.get_id_with_no_reply(user)
+ ActiveRecord::Base.connection.select_values("SELECT t.id FROM topics AS t INNER JOIN forums AS f ON f.id=t.forum_id LEFT JOIN forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=#{user.group_id}) WHERE (fp.read_forum IS NULL OR fp.read_forum=#{quote(true)}) AND t.num_replies=0 AND t.moved_to IS NULL").map{|x| x.to_i}
+ end
+
private
def forum_update
@@ -123,10 +123,20 @@ class User < ActiveRecord::Base
self.last_post != nil and (now - self.last_post) <= self.group.g_post_flood
end
+ def get_disp_topics
+ self.disp_topics ? self.disp_topics : Settings.disp_topics_default
+ end
+
def get_disp_posts
self.disp_posts ? self.disp_posts : Settings.disp_posts_default
end
+ def self.get_id_by_username_pattern(username)
+ username.gsub!(/\*/,'%')
+ return [] if username == 'Guest'
+ ActiveRecord::Base.connection.select_values("SELECT id FROM users WHERE username LIKE #{quote(username)}").map{|x| x.to_i}
+ end
+
protected
# before filter
def encrypt_password