feedback_controller.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:5k
源码类别:

Ajax

开发平台:

Others

  1. class Admin::FeedbackController < Admin::BaseController
  2.   cache_sweeper :blog_sweeper
  3.   before_filter :only_own_feedback, :only => [:delete]
  4.   def index
  5.     conditions = ['1 = 1', {}]
  6.     if params[:search]
  7.       conditions.first << ' and (url like :pattern or author like :pattern or title like :pattern or ip like :pattern or email like :pattern)'
  8.       conditions.last.merge!(:pattern => "%#{params[:search]}%")
  9.     end
  10.     if params[:published] == 'f'
  11.       conditions.first << ' and (published = :published)'
  12.       conditions.last.merge!(:published => false)
  13.     end
  14.     if params[:confirmed] == 'f'
  15.       conditions.first << ' AND (status_confirmed = :status_confirmed)'
  16.       conditions.last.merge!(:status_confirmed => false)
  17.     end
  18.     if params[:ham] == 'f'
  19.       conditions.first << ' AND state = :state '
  20.       conditions.last.merge!(:state => 'ham')
  21.     end
  22.     # no need params[:page] if empty of == 0, there are a crash otherwise
  23.     if params[:page].blank? || params[:page] == "0"
  24.       params.delete(:page)
  25.     end
  26.     @feedback = Feedback.paginate :page => params[:page], :order => 'feedback.created_at desc', :conditions => conditions, :per_page => this_blog.admin_display_elements
  27.   end
  28.   def article
  29.     @article = Article.find(params[:id])
  30.     if params[:ham] && params[:spam].blank?
  31.       @comments = @article.comments.ham
  32.     end
  33.     if params[:spam] && params[:ham].blank?
  34.       @comments = @article.comments.spam
  35.     end
  36.     @comments ||= @article.comments
  37.   end
  38.   
  39.   def delete
  40.     if request.post?
  41.       begin
  42.         @feedback.destroy
  43.         flash[:notice] = _("Deleted")
  44.       rescue ActiveRecord::RecordNotFound
  45.         flash[:notice] = _("Not found")
  46.       end
  47.     end
  48.     redirect_to :action => 'article', :id => @feedback.article.id
  49.   end
  50.   def create
  51.     @article = Article.find(params[:article_id])
  52.     @comment = @article.comments.build(params[:comment])
  53.     @comment.user_id = current_user.id
  54.     
  55.     if request.post? and @comment.save
  56.       # We should probably wave a spam filter over this, but for now, just mark it as published.
  57.       @comment.mark_as_ham!
  58.       flash[:notice] = _('Comment was successfully created.')
  59.     end
  60.     redirect_to :action => 'article', :id => @article.id
  61.   end
  62.   def edit
  63.     @comment = Comment.find(params[:id])
  64.     @article = @comment.article
  65.     unless @article.access_by? current_user
  66.       redirect_to :action => 'index'
  67.       return
  68.     end
  69.   end
  70.   def update
  71.     comment = Comment.find(params[:id])
  72.     unless comment.article.access_by? current_user
  73.       redirect_to :action => 'index'
  74.       return
  75.     end
  76.     comment.attributes = params[:comment]
  77.     if request.post? and comment.save
  78.       flash[:notice] = _('Comment was successfully updated.')
  79.       redirect_to :action => 'article', :id => comment.article.id
  80.     else
  81.       redirect_to :action => 'edit', :id => comment.id
  82.     end
  83.   end
  84.   def preview
  85.     feedback = Feedback.find(params[:id])
  86.     render(:update) do |page|
  87.       page.replace_html("feedback_#{feedback.id}", h(feedback.body))
  88.     end
  89.     
  90.   end
  91.   def bulkops
  92.     ids = (params[:feedback_check]||{}).keys.map(&:to_i)
  93.     items = Feedback.find(ids)
  94.     @unexpired = true
  95.     bulkop = params[:bulkop_top].empty? ? params[:bulkop_bottom] : params[:bulkop_top]
  96.     case bulkop
  97.     when 'Delete Checked Items'
  98.       count = 0
  99.       ids.each do |id|
  100.         count += Feedback.delete(id) ## XXX Should this be #destroy?
  101.       end
  102.       flash[:notice] = _("Deleted %d item(s)",count)
  103.       items.each do |i|
  104.         i.invalidates_cache? or next
  105.         flush_cache
  106.         return
  107.       end
  108.     when 'Mark Checked Items as Ham'
  109.       update_feedback(items, :mark_as_ham!)
  110.       flash[:notice]= _("Marked %d item(s) as Ham",ids.size)
  111.     when 'Mark Checked Items as Spam'
  112.       update_feedback(items, :mark_as_spam!)
  113.       flash[:notice]= _("Marked %d item(s) as Spam",ids.size)
  114.     when 'Confirm Classification of Checked Items'
  115.       update_feedback(items, :confirm_classification!)
  116.       flash[:notice] = _("Confirmed classification of %s item(s)",ids.size)
  117.     when 'Delete all spam'
  118.       delete_all_spam
  119.     else
  120.       flash[:notice] = _("Not implemented")
  121.     end
  122.     redirect_to :action => 'index', :page => params[:page], :search => params[:search], :confirmed => params[:confirmed], :published => params[:published]
  123.   end
  124.   protected
  125.   def delete_all_spam
  126.     if request.post?
  127.       Feedback.delete_all(['state in (?,?)', 'presumed_spam', 'spam'])
  128.       flash[:notice] = _("All spam have been deleted")
  129.     end
  130.   end
  131.   def update_feedback(items, method)
  132.     items.each do |value|
  133.       value.send(method)
  134.       @unexpired && value.invalidates_cache? or next
  135.       flush_cache
  136.     end
  137.   end
  138.   def flush_cache
  139.     @unexpired = false
  140.     PageCache.sweep_all
  141.   end
  142.   def only_own_feedback
  143.     @feedback = Feedback.find(params[:id])
  144.     unless @feedback.article.user_id == current_user.id
  145.       unless current_user.admin?
  146.         redirect_to :controller => 'admin/feedback', :action => :index
  147.       end
  148.     end
  149.   end
  150. end