: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
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
\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
+ \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
\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>
</tr>\r
</table>\r
\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
</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
<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
--- /dev/null
+<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>
+
+
+
+<!--[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 %>
--- /dev/null
+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
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
\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
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
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
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
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