diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 23d3992f1..b0510dd05 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -127,6 +127,12 @@ class IssuesController < ApplicationController call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue }) @issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads])) if @issue.save + if params[:related_to] + relation = IssueRelation.new({:relation_type => IssueRelation::TYPE_RELATES, :issue_to => @project.issues.find_by_id(params[:related_to]), :issue_from => @issue}) + unless relation.save + logger.error "Could not create relation due to validation errors: #{relation.errors.full_messages.join(', ')}" + end + end call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue}) respond_to do |format| format.html { diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index b535faec9..1159b6467 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -1,6 +1,7 @@
<%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %> <%= link_to l(:button_log_time), new_issue_time_entry_path(@issue), :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %> +<%= link_to l(:button_create_related_issue), {:controller => 'issues', :action => 'new', :project_id => @project, :related_to => @issue}, :class => 'icon icon-link' if @issue.editable? %> <%= watcher_link(@issue, User.current) %> <%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %> <%= link_to l(:button_delete), issue_path(@issue), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if @issue.deletable? %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 011928db8..42ef1699c 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -39,6 +39,8 @@ <%= wikitoolbar_for 'issue_description' %> <% end %> +<%= hidden_field_tag 'related_to', '', :size => 4, :id => nil, :value => params[:related_to] %> +
<%= render :partial => 'issues/attributes' %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index df57a57f3..93d9e9c1b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1049,6 +1051,7 @@ en: button_activate: Activate button_sort: Sort button_log_time: Log time + button_create_related_issue: Create related issue button_rollback: Rollback to this version button_watch: Watch button_unwatch: Unwatch diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index a77589ef1..b72296f69 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1257,6 +1259,7 @@ div.wiki img {vertical-align:middle; max-width:100%;} .icon-move-bottom { background-image: url(../images/2downarrow.png); } .icon-ok { background-image: url(../images/true.png); } .icon-not-ok { background-image: url(../images/false.png); } +.icon-link { background-image: url(../images/link.png); } .icon-link-break { background-image: url(../images/link_break.png); } .icon-list { background-image: url(../images/text_list_bullets.png); } .icon-close { background-image: url(../images/close.png); } @@ -1475,3 +1478,4 @@ color: #555; text-shadow: 1px 1px 0 #fff; height:1px; overflow:hidden; } +