annotate app/models/news.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents ec1c49528f36
children bb32da3bea34
rev   line source
Chris@0 1 # Redmine - project management software
Chris@441 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@0 18 class News < ActiveRecord::Base
Chris@929 19 include Redmine::SafeAttributes
Chris@0 20 belongs_to :project
Chris@0 21 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
Chris@0 22 has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
Chris@441 23
Chris@0 24 validates_presence_of :title, :description
Chris@0 25 validates_length_of :title, :maximum => 60
Chris@0 26 validates_length_of :summary, :maximum => 255
Chris@0 27
Chris@0 28 acts_as_searchable :columns => ['title', 'summary', "#{table_name}.description"], :include => :project
Chris@0 29 acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}}
Chris@0 30 acts_as_activity_provider :find_options => {:include => [:project, :author]},
Chris@0 31 :author_key => :author_id
Chris@441 32 acts_as_watchable
Chris@441 33
Chris@441 34 after_create :add_author_as_watcher
Chris@441 35
Chris@441 36 named_scope :visible, lambda {|*args| {
Chris@117 37 :include => :project,
Chris@441 38 :conditions => Project.allowed_to_condition(args.shift || User.current, :view_news, *args)
Chris@117 39 }}
Chris@441 40
Chris@929 41 safe_attributes 'title', 'summary', 'description'
Chris@929 42
Chris@0 43 def visible?(user=User.current)
Chris@0 44 !user.nil? && user.allowed_to?(:view_news, project)
Chris@0 45 end
Chris@441 46
Chris@0 47 # returns latest news for projects visible by user
Chris@0 48 def self.latest(user = User.current, count = 5)
Chris@0 49 find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
Chris@0 50 end
Chris@441 51
Chris@441 52 private
Chris@441 53
Chris@441 54 def add_author_as_watcher
Chris@441 55 Watcher.create(:watchable => self, :user => author)
Chris@441 56 end
Chris@443 57
chris@374 58 # returns latest news for a specific project
chris@374 59 def self.latest_for(project, count = 5)
chris@374 60 find(:all, :limit => count, :conditions => [ "#{News.table_name}.project_id = #{project.id}", Project.allowed_to_condition(User.current, :view_news) ], :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
chris@374 61 end
Chris@0 62 end