Issues can be unassigned now
This commit is contained in:
parent
6abc649590
commit
88c625e3f7
Binary file not shown.
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -11,7 +11,6 @@ class Issue < ActiveRecord::Base
|
||||||
attr_accessor :author_id_of_changes
|
attr_accessor :author_id_of_changes
|
||||||
|
|
||||||
validates_presence_of :project_id
|
validates_presence_of :project_id
|
||||||
validates_presence_of :assignee_id
|
|
||||||
validates_presence_of :author_id
|
validates_presence_of :author_id
|
||||||
|
|
||||||
delegate :name,
|
delegate :name,
|
||||||
|
@ -22,6 +21,7 @@ class Issue < ActiveRecord::Base
|
||||||
delegate :name,
|
delegate :name,
|
||||||
:email,
|
:email,
|
||||||
:to => :assignee,
|
:to => :assignee,
|
||||||
|
:allow_nil => true,
|
||||||
:prefix => true
|
:prefix => true
|
||||||
|
|
||||||
validates :title,
|
validates :title,
|
||||||
|
@ -56,6 +56,10 @@ class Issue < ActiveRecord::Base
|
||||||
today? && created_at == updated_at
|
today? && created_at == updated_at
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_assigned?
|
||||||
|
!!assignee_id
|
||||||
|
end
|
||||||
|
|
||||||
def is_being_reassigned?
|
def is_being_reassigned?
|
||||||
assignee_id_changed?
|
assignee_id_changed?
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,9 @@ class IssueObserver < ActiveRecord::Observer
|
||||||
cattr_accessor :current_user
|
cattr_accessor :current_user
|
||||||
|
|
||||||
def after_create(issue)
|
def after_create(issue)
|
||||||
Notify.new_issue_email(issue.id).deliver if issue.assignee != current_user
|
if issue.assignee && issue.assignee != current_user
|
||||||
|
Notify.new_issue_email(issue.id).deliver
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_update(issue)
|
def after_update(issue)
|
||||||
|
@ -14,7 +16,7 @@ class IssueObserver < ActiveRecord::Observer
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def send_reassigned_email(issue)
|
def send_reassigned_email(issue)
|
||||||
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id != current_user.id }
|
recipient_ids = [issue.assignee_id, issue.assignee_id_was].keep_if {|id| id && id != current_user.id }
|
||||||
|
|
||||||
recipient_ids.each do |recipient_id|
|
recipient_ids.each do |recipient_id|
|
||||||
Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was).deliver
|
Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was).deliver
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
= f.text_field :title, :maxlength => 255, :class => "xxlarge"
|
= f.text_field :title, :maxlength => 255, :class => "xxlarge"
|
||||||
.issue_middle_block
|
.issue_middle_block
|
||||||
.issue_assignee
|
.issue_assignee
|
||||||
= f.label :assignee_id, "Assign to *"
|
= f.label :assignee_id, "Assign to"
|
||||||
.input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Assign to user" })
|
.input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Assign to user" })
|
||||||
.issue_milestone
|
.issue_milestone
|
||||||
= f.label :milestone_id
|
= f.label :milestone_id
|
||||||
|
|
|
@ -15,12 +15,20 @@
|
||||||
%i.icon-edit
|
%i.icon-edit
|
||||||
Edit
|
Edit
|
||||||
|
|
||||||
= image_tag gravatar_icon(issue.assignee_email), :class => "avatar"
|
- if issue.assignee
|
||||||
%span.update-author
|
= image_tag gravatar_icon(issue.assignee_email), :class => "avatar"
|
||||||
assigned to
|
%span.update-author
|
||||||
%strong= issue.assignee_name
|
assigned to
|
||||||
- if issue.upvotes > 0
|
%strong= issue.assignee_name
|
||||||
%span.badge.badge-success= "+#{issue.upvotes}"
|
- if issue.upvotes > 0
|
||||||
|
%span.badge.badge-success= "+#{issue.upvotes}"
|
||||||
|
|
||||||
|
- else
|
||||||
|
= image_tag "no_avatar.png", :class => "avatar"
|
||||||
|
%span.update-author
|
||||||
|
Unassigned
|
||||||
|
- if issue.upvotes > 0
|
||||||
|
%span.badge.badge-success= "+#{issue.upvotes}"
|
||||||
|
|
||||||
= link_to project_issue_path(issue.project, issue) do
|
= link_to project_issue_path(issue.project, issue) do
|
||||||
%p.row_title= truncate(issue.title, :length => 100)
|
%p.row_title= truncate(issue.title, :length => 100)
|
||||||
|
|
|
@ -38,9 +38,10 @@
|
||||||
= image_tag gravatar_icon(@issue.author_email), :width => 16, :class => "lil_av"
|
= image_tag gravatar_icon(@issue.author_email), :width => 16, :class => "lil_av"
|
||||||
%strong.author= link_to_issue_author(@issue)
|
%strong.author= link_to_issue_author(@issue)
|
||||||
|
|
||||||
%cite.cgray and currently assigned to
|
- if @issue.assignee
|
||||||
= image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
|
%cite.cgray and currently assigned to
|
||||||
%strong.author= link_to_issue_assignee(@issue)
|
= image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
|
||||||
|
%strong.author= link_to_issue_assignee(@issue)
|
||||||
|
|
||||||
- if @issue.milestone
|
- if @issue.milestone
|
||||||
- milestone = @issue.milestone
|
- milestone = @issue.milestone
|
||||||
|
|
|
@ -49,8 +49,6 @@
|
||||||
%tr
|
%tr
|
||||||
%td
|
%td
|
||||||
= link_to [@project, issue] do
|
= link_to [@project, issue] do
|
||||||
= image_tag gravatar_icon(issue.assignee_email, 16), :width => "16"
|
|
||||||
|
|
||||||
%span.badge.badge-info ##{issue.id}
|
%span.badge.badge-info ##{issue.id}
|
||||||
–
|
–
|
||||||
= truncate issue.title, :length => 60
|
= truncate issue.title, :length => 60
|
||||||
|
|
|
@ -12,7 +12,6 @@ describe Issue do
|
||||||
it { should validate_presence_of(:title) }
|
it { should validate_presence_of(:title) }
|
||||||
it { should validate_presence_of(:author_id) }
|
it { should validate_presence_of(:author_id) }
|
||||||
it { should validate_presence_of(:project_id) }
|
it { should validate_presence_of(:project_id) }
|
||||||
it { should validate_presence_of(:assignee_id) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Scope" do
|
describe "Scope" do
|
||||||
|
|
Loading…
Reference in a new issue