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.
		
		
		
		
		
			
		
			
				
					
					
						
							96 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							96 lines
						
					
					
						
							3.5 KiB
						
					
					
				| # Redmine - project management software
 | |
| # Copyright (C) 2006-2013  Jean-Philippe Lang
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU General Public License
 | |
| # as published by the Free Software Foundation; either version 2
 | |
| # of the License, or (at your option) any later version.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | |
| 
 | |
| class Document < ActiveRecord::Base
 | |
|   include Redmine::SafeAttributes
 | |
|   belongs_to :project
 | |
|   belongs_to :user
 | |
|   belongs_to :category, :class_name => "DocumentCategory", :foreign_key => "category_id"
 | |
|   include UserScoreHelper
 | |
|   after_save :be_user_score # user_score
 | |
|   after_destroy :down_user_score
 | |
|   acts_as_attachable :delete_permission => :delete_documents
 | |
|   after_create :send_mail
 | |
|   # 被ForgeActivity虚拟关联
 | |
|   has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
 | |
|   # end
 | |
|   acts_as_searchable :columns => ['title', "#{table_name}.description"], :include => :project
 | |
|   acts_as_event :title => Proc.new {|o| "#{l(:label_document)}: #{o.title}"},
 | |
|                 #:author => Proc.new {|o| o.attachments.reorder("#{Attachment.table_name}.created_on ASC").first.try(:author) },
 | |
|                 :author => Proc.new {|o| User.find(o.user_id)},
 | |
|                 :url => Proc.new {|o| {:controller => 'documents', :action => 'show', :id => o.id}}
 | |
|   acts_as_activity_provider :find_options => {:include => :project},
 | |
|                             :is_public => 'documents.is_public'
 | |
| 
 | |
|   validates_presence_of :project, :title, :category
 | |
|   validates_length_of :title, :maximum => 60
 | |
|   after_create :act_as_forge_activity
 | |
|   scope :visible, lambda {|*args|
 | |
|     includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_documents, *args))
 | |
|   }
 | |
| 
 | |
|   safe_attributes 'category_id', 'title', 'description','is_public'
 | |
| 
 | |
|   def visible?(user=User.current)
 | |
|     !user.nil? && user.allowed_to?(:view_documents, project)
 | |
|   end
 | |
| 
 | |
|   def has_right?(project,user=User.current)
 | |
|     user.admin? || user.member_of?(project) ||  self.is_public==1
 | |
|   end
 | |
| 
 | |
|   def initialize(attributes=nil, *args)
 | |
|     super
 | |
|     if new_record?
 | |
|       self.category ||= DocumentCategory.default
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def updated_on
 | |
|     unless @updated_on
 | |
|       a = attachments.last
 | |
|       @updated_on = (a && a.created_on) || created_on
 | |
|     end
 | |
|     @updated_on
 | |
|   end
 | |
| 
 | |
|   # update user score
 | |
|   def be_user_score
 | |
|       UserScore.project(:push_document, self.user,self,{ document_id: self.id })
 | |
|       update_document(self.user,1)
 | |
|       update_document(self.user,2,self.project)
 | |
|   end
 | |
| 
 | |
|   def down_user_score
 | |
|     update_document(self.user,1)
 | |
|     update_document(self.user,2,self.project)
 | |
|   end
 | |
| 
 | |
|   # Time 2015-03-02 10:51:16
 | |
|   # Author lizanle
 | |
|   # Description 新创建的document要在公共表ForgeActivity中记录
 | |
|   def act_as_forge_activity
 | |
|     self.forge_acts << ForgeActivity.new(:user_id => self.user_id,
 | |
|                                             :project_id => self.project_id)
 | |
|   end
 | |
| 
 | |
|   def send_mail
 | |
|     Mailer.run.document_added(self) if Setting.notified_events.include?('document_added')
 | |
|   end
 | |
| 
 | |
| end
 |