Added SQL queries for search controller
authorNguyễn Thái Ngọc Duy <[email protected]>
Thu, 24 Aug 2006 10:37:02 +0000 (24 17:37 +0700)
committerNguyễn Thái Ngọc Duy <[email protected]>
Thu, 24 Aug 2006 10:37:02 +0000 (24 17:37 +0700)
Also moved update_all calls from moderator controller to topic model

app/models/post.rb
app/models/topic.rb
app/models/user.rb

index 159188f..a7871ae 100644 (file)
@@ -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
index ad7f1a0..107bf99 100644 (file)
@@ -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
index d3f329d..11b5ce5 100644 (file)
@@ -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