]> source.dussan.org Git - redmine.git/commitdiff
git-svn-id: http://redmine.rubyforge.org/svn/trunk@32 e93f8b46-1217-0410-a6f0-8f06a73...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Oct 2006 14:33:04 +0000 (14:33 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Oct 2006 14:33:04 +0000 (14:33 +0000)
redmine/app/controllers/projects_controller.rb
redmine/app/models/issue.rb
redmine/app/views/issues/show.rhtml
redmine/app/views/projects/add_issue.rhtml
redmine/app/views/projects/list_issues.rhtml
redmine/app/views/projects/move_issues.rhtml [new file with mode: 0644]
redmine/db/migrate/002_issue_move.rb [new file with mode: 0644]
redmine/lang/de.yml
redmine/lang/en.yml
redmine/lang/es.yml
redmine/lang/fr.yml

index 80257305425116d8d18e2bcd540de96b38a0cc01..8343c7a5fb81059c742c781da6601aa893f677bc 100644 (file)
@@ -239,6 +239,30 @@ class ProjectsController < ApplicationController
       :filename => 'export.csv')\r
   end\r
 \r
+  def move_issues\r
+    @issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]\r
+    redirect_to :action => 'list_issues', :id => @project and return unless @issues\r
+    @projects = []\r
+    # find projects to which the user is allowed to move the issue\r
+    @logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role_id)}\r
+    # issue can be moved to any tracker\r
+    @trackers = Tracker.find(:all)\r
+    if request.post? and params[:new_project_id] and params[:new_tracker_id]    \r
+      new_project = Project.find(params[:new_project_id])\r
+      new_tracker = Tracker.find(params[:new_tracker_id])\r
+      @issues.each { |i|\r
+        # category is project dependent\r
+        i.category = nil unless i.project_id == new_project.id\r
+        # move the issue\r
+        i.project = new_project\r
+        i.tracker = new_tracker\r
+        i.save\r
+      }\r
+      flash[:notice] = l(:notice_successful_update)\r
+      redirect_to :action => 'list_issues', :id => @project\r
+    end\r
+  end\r
+\r
   # Add a news to @project\r
   def add_news\r
     @news = News.new(:project => @project)\r
index 7b48182c78a7ea409109175a6d5f68e9fd035b08..489dad885e6e71dce5824d28c38d7a3dbc9f2165 100644 (file)
@@ -41,7 +41,7 @@ class Issue < ActiveRecord::Base
   end\r
 \r
   def validate\r
-    if self.due_date.nil? && !@attributes['due_date'].empty?\r
+    if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?\r
       errors.add :due_date, :activerecord_error_not_a_date\r
     end\r
   end\r
index fc48e47a1f327724ef8201ff442ba84dd909aeb3..1258a050c42dc5d171f61a8bfece11b96bccb46c 100644 (file)
   &nbsp;&nbsp;\r
 <% end %>\r
 \r
+<% if authorize_for('projects', 'move_issues') %>\r
+  <%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project} ) %>\r
+  <%= hidden_field_tag "issue_ids[]", @issue.id %>\r
+  <%= submit_tag l(:button_move) %>\r
+  <%= end_form_tag %>\r
+  &nbsp;&nbsp;\r
+<% end %>\r
+\r
 <% if authorize_for('issues', 'destroy') %>\r
   <%= start_form_tag ({:controller => 'issues', :action => 'destroy', :id => @issue} ) %>\r
   <%= submit_tag l(:button_delete) %>\r
index f12542b43ef2bb67f0fb9e7618e56a6df7e63706..11e61d6b31e43bacf0595c0bf863ce1089d6308d 100644 (file)
@@ -8,7 +8,7 @@
 \r
 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>\r
 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>\r
-<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>\r
+<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %></p>\r
 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
 <p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
 <p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
index d18799acf9795d3da1659c6544d549fe3ae24d3d..7a924b134a2b96eaa41905478d37c63fe52a5059 100644 (file)
   </tr>\r
 </table>\r
  &nbsp;\r
+\r
+<%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project}, :id => 'issues_form' ) %>\r
 <table class="listTableContent">\r
-    <tr><td colspan="7" align="right">\r
-    <small><%= link_to l(:label_export_csv), :action => 'export_issues_csv', :id => @project.id %></small>\r
-    </td></tr> \r
-    <tr class="ListHead">      \r
+    <tr>\r
+    <td colspan="6" align="left"><small><%= check_all_links 'issues_form' %></small></td>\r
+    <td colspan="2" align="right"><small><%= link_to l(:label_export_csv), :action => 'export_issues_csv', :id => @project.id %></small></td>\r
+    </tr>      \r
+    <tr class="ListHead">\r
+        <td></td>\r
                <%= sort_header_tag('issues.id', :caption => '#') %>\r
                <%= sort_header_tag('issue_statuses.name', :caption => l(:field_status)) %>\r
                <%= sort_header_tag('issues.tracker_id', :caption => l(:field_tracker)) %>\r
@@ -37,6 +41,7 @@
        </tr>\r
        <% for issue in @issues %>
        <tr bgcolor="#<%= issue.status.html_color %>">\r
+           <td width="15"><%= check_box_tag "issue_ids[]", issue.id %></td>\r
                <td align="center"><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></td>\r
                <td align="center"><%= issue.status.name %></td>\r
                <td align="center"><%= issue.tracker.name %></td>\r
@@ -50,4 +55,6 @@
 <p>\r
 <%= pagination_links_full @issue_pages %>\r
 [ <%= @issue_pages.current.first_item %> - <%= @issue_pages.current.last_item %> / <%= @issue_count %> ]\r
-</p>
\ No newline at end of file
+</p>\r
+<%= submit_tag l(:button_move) %>\r
+<%= end_form_tag %>
\ No newline at end of file
diff --git a/redmine/app/views/projects/move_issues.rhtml b/redmine/app/views/projects/move_issues.rhtml
new file mode 100644 (file)
index 0000000..380d47f
--- /dev/null
@@ -0,0 +1,24 @@
+<h2><%=l(:button_move)%></h2>
+
+
+<%= start_form_tag({:action => 'move_issues', :id => @project}, :class => "tabular") %>
+
+<div class="box">
+<p><label><%= l(:label_issue_plural) %>:</label>
+<% for issue in @issues %>
+    <b><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></b> - <%= issue.subject %>
+    <%= hidden_field_tag "issue_ids[]", issue.id %><br />
+<% end %>
+<i>(<%= @issues.length%> <%= lwr(:label_issue, @issues.length)%>)</i></p>
+
+&nbsp;
+
+<!--[form:issue]-->
+<p><label for="new_project_id"><%=l(:field_project)%></label>
+<%= select_tag "new_project_id", options_from_collection_for_select(@projects, "id", "name", @project.id) %></p>
+
+<p><label for="new_tracker_id"><%=l(:field_tracker)%></label>
+<%= select_tag "new_tracker_id", options_from_collection_for_select(@trackers, "id", "name") %></p>
+</div>
+<%= submit_tag l(:button_move) %>
+<%= end_form_tag %>
diff --git a/redmine/db/migrate/002_issue_move.rb b/redmine/db/migrate/002_issue_move.rb
new file mode 100644 (file)
index 0000000..61b8cd4
--- /dev/null
@@ -0,0 +1,9 @@
+class IssueMove < ActiveRecord::Migration
+  def self.up
+    Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 1, :mail_enabled => 0
+  end
+
+  def self.down
+    Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'move_issues']).destroy
+  end
+end
index e7f44842d58f9766df61507358161f93dfe6eedd..c39d710353bc6716cba3a3e91858973808d516e9 100644 (file)
@@ -259,6 +259,7 @@ button_unlock: Entriegeln
 button_download: Fernzuladen\r
 button_list: Aufzulisten\r
 button_view: Siehe\r
+button_move: Bewegen\r
 \r
 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index c1dc2724318d0c8d5da20c41ea2bb4c91c2413cc..d4ef52b2899190eccdb52f75ac7e89efc41f2d5c 100644 (file)
@@ -35,8 +35,8 @@ activerecord_error_not_a_date: is not a valid date
 \r
 general_fmt_age: %d yr\r
 general_fmt_age_plural: %d yrs\r
-general_fmt_date: %%b %%d, %%Y (%%a)\r
-general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p\r
+general_fmt_date: %%m/%%d/%%Y\r
+general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p\r
 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p\r
 general_fmt_time: %%I:%%M %%p\r
 general_text_No: 'No'\r
@@ -84,7 +84,7 @@ field_regexp: Regular expression
 field_min_length: Minimum length\r
 field_max_length: Maximum length\r
 field_value: Value\r
-field_category: Catogory\r
+field_category: Category\r
 field_title: Title\r
 field_project: Project\r
 field_issue: Issue\r
@@ -259,6 +259,7 @@ button_unlock: Unlock
 button_download: Download\r
 button_list: List\r
 button_view: View\r
+button_move: Move\r
 \r
 text_select_mail_notifications: Select actions for which mail notifications should be sent.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index d4a9edb842994c3eb276c2151450fe1190109fe2..acc71eca1c4da842769fd8a1f6f474be93cd4904 100644 (file)
@@ -259,6 +259,7 @@ button_unlock: Desbloquear
 button_download: Telecargar\r
 button_list: Listar\r
 button_view: Ver\r
+button_move: Mover\r
 \r
 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index 8f04dc5eb073612ae6f712f8b411c82a61f43fa5..866f79af63bd2bb8edb749c6a2b4ce59adb17039 100644 (file)
@@ -259,6 +259,7 @@ button_unlock: Déverrouiller
 button_download: Télécharger\r
 button_list: Lister\r
 button_view: Voir\r
+button_move: Déplacer\r
 \r
 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.\r
 text_regexp_info: ex. ^[A-Z0-9]+$\r