# Code Review plugin for Redmine # Copyright (C) 2009-2012 Haruyuki Iida # # 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 CodeReview < ActiveRecord::Base include Redmine::SafeAttributes unloadable belongs_to :project belongs_to :change belongs_to :issue belongs_to :updated_by, :class_name => 'User', :foreign_key => 'updated_by_id' belongs_to :attachment validates_presence_of :project_id, :user_id, :updated_by_id, :issue, :subject, :action_type, :line STATUS_OPEN = 0 STATUS_CLOSED = 1 safe_attributes 'change_id', 'subject', 'line', 'parent_id', 'comment', 'status_id' def before_create issue = Issue.new unless issue end def is_closed? issue.closed? #self.root.status == STATUS_CLOSED end def close issue.status = IssueStatus.find(5) #self.root.status = STATUS_CLOSED end def reopen issue.status = IssueStatus.find(1) #self.root.status = STATUS_OPEN end def committer return changeset.author if changeset end def path begin return file_path if file_path return @path if @path if attachment_id @path = attachment.filename return @path end repository = changeset.repository url = repository.url root_url = repository.root_url if (url == nil || root_url == nil) @path = change.path return @path end rootpath = url[root_url.length, url.length - root_url.length] if rootpath == '/' || rootpath.blank? @path = change.path else @path = change.path[rootpath.length, change.path.length - rootpath.length] end rescue => ex return ex.to_s end end def revision return rev if rev changeset.revision if changeset end def changeset @changeset ||= change.changeset if change end def repository @repository ||= changeset.repository if changeset end def repository_identifier return nil unless repository @repository_identifier ||= repository.identifier_param end def comment=(str) issue.description = str if issue end def comment issue.description if issue end def before_save issue.project_id = project_id unless issue.project_id end def validate unless issue.validate false end end def user=(u) issue.author = u end def user_id=(id) issue.author_id = id end def user_id issue.author_id end def user issue.author if issue end def subject=(s) issue.subject = s end def subject issue.subject end def parent_id= (p) issue.parent_issue_id = p end def parent_id issue.parent_issue_id end def status_id=(s) issue.status_id = s end def status_id issue.status_id end def open_assignment_issues(user_id) issues = [] assignments = [] assignments = change.code_review_assignments if change assignments = assignments + changeset.code_review_assignments if changeset assignments = assignments + attachment.code_review_assignments if attachment assignments.each {|assignment| unless assignment.is_closed? issues << assignment.issue if user_id == assignment.issue.assigned_to_id end } issues end end