From: Nguyễn Thái Ngọc Duy Date: Thu, 24 Aug 2006 10:37:02 +0000 (+0700) Subject: Added SQL queries for search controller X-Git-Url: https://repo.or.cz/punbbonrails.git/commitdiff_plain/6c1da19b47454c8652aa4f2d9a3ccbd366dfef10?ds=inline Added SQL queries for search controller Also moved update_all calls from moderator controller to topic model --- diff --git a/app/models/post.rb b/app/models/post.rb index 159188f..a7871ae 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -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 diff --git a/app/models/topic.rb b/app/models/topic.rb index ad7f1a0..107bf99 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index d3f329d..11b5ce5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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