You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

news_controller.rb 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # redMine - project management software
  2. # Copyright (C) 2006 Jean-Philippe Lang
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program; if not, write to the Free Software
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17. class NewsController < ApplicationController
  18. layout 'base'
  19. before_filter :find_news, :except => [:new, :index, :preview]
  20. before_filter :find_project, :only => :new
  21. before_filter :authorize, :except => [:index, :preview]
  22. before_filter :find_optional_project, :only => :index
  23. accept_key_auth :index
  24. def index
  25. @news_pages, @newss = paginate :news,
  26. :per_page => 10,
  27. :conditions => (@project ? {:project_id => @project.id} : Project.visible_by(User.current)),
  28. :include => [:author, :project],
  29. :order => "#{News.table_name}.created_on DESC"
  30. respond_to do |format|
  31. format.html { render :layout => false if request.xhr? }
  32. format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
  33. end
  34. end
  35. def show
  36. @comments = @news.comments
  37. @comments.reverse! if User.current.wants_comments_in_reverse_order?
  38. end
  39. def new
  40. @news = News.new(:project => @project, :author => User.current)
  41. if request.post?
  42. @news.attributes = params[:news]
  43. if @news.save
  44. flash[:notice] = l(:notice_successful_create)
  45. Mailer.deliver_news_added(@news) if Setting.notified_events.include?('news_added')
  46. redirect_to :controller => 'news', :action => 'index', :project_id => @project
  47. end
  48. end
  49. end
  50. def edit
  51. if request.post? and @news.update_attributes(params[:news])
  52. flash[:notice] = l(:notice_successful_update)
  53. redirect_to :action => 'show', :id => @news
  54. end
  55. end
  56. def add_comment
  57. @comment = Comment.new(params[:comment])
  58. @comment.author = User.current
  59. if @news.comments << @comment
  60. flash[:notice] = l(:label_comment_added)
  61. redirect_to :action => 'show', :id => @news
  62. else
  63. render :action => 'show'
  64. end
  65. end
  66. def destroy_comment
  67. @news.comments.find(params[:comment_id]).destroy
  68. redirect_to :action => 'show', :id => @news
  69. end
  70. def destroy
  71. @news.destroy
  72. redirect_to :action => 'index', :project_id => @project
  73. end
  74. def preview
  75. @text = (params[:news] ? params[:news][:description] : nil)
  76. render :partial => 'common/preview'
  77. end
  78. private
  79. def find_news
  80. @news = News.find(params[:id])
  81. @project = @news.project
  82. rescue ActiveRecord::RecordNotFound
  83. render_404
  84. end
  85. def find_project
  86. @project = Project.find(params[:project_id])
  87. rescue ActiveRecord::RecordNotFound
  88. render_404
  89. end
  90. def find_optional_project
  91. return true unless params[:project_id]
  92. @project = Project.find(params[:project_id])
  93. authorize
  94. rescue ActiveRecord::RecordNotFound
  95. render_404
  96. end
  97. end