Permalink
Browse files

Commit inicial

  • Loading branch information...
0 parents commit a2ff000e9e2f009bea14becd450965eb3c8e85b3 Matheus Ashton committed Apr 1, 2011
@@ -0,0 +1,3 @@
+= redmine_close_issue
+
+A plugin that records the date when the issue is closed and shows it on the issue detail view
@@ -0,0 +1,142 @@
+<%= render :partial => 'action_menu' %>
+
+<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
+
+<div class="<%= @issue.css_classes %> details">
+ <%= avatar(@issue.author, :size => "50") %>
+
+<div class="subject">
+<%= render_issue_subject_with_tree(@issue) %>
+</div>
+ <p class="author">
+ <%= authoring @issue.created_on, @issue.author %>.
+ <% if @issue.created_on != @issue.updated_on %>
+ <%= l(:label_updated_time, time_tag(@issue.updated_on)) %>.
+ <% end %>
+ </p>
+
+<table class="attributes">
+<tr>
+ <th class="status"><%=l(:field_status)%>:</th><td class="status"><%= @issue.status.name %></td>
+ <% if @issue.closed_date %>
+ <th class="start-date"><%=l(:field_start_end_date)%>:</th><td class="start-date"><%= format_date(@issue.start_date) %> - <%= format_date(@issue.closed_date) %></td>
+ <% else %>
+ <th class="start-date"><%=l(:field_start_date)%>:</th><td class="start-date"><%= format_date(@issue.start_date) %></td>
+ <% end %>
+</tr>
+<tr>
+ <th class="priority"><%=l(:field_priority)%>:</th><td class="priority"><%= @issue.priority.name %></td>
+ <th class="due-date"><%=l(:field_due_date)%>:</th><td class="due-date"><%= format_date(@issue.due_date) %></td>
+</tr>
+<tr>
+ <th class="assigned-to"><%=l(:field_assigned_to)%>:</th><td class="assigned-to"><%= avatar(@issue.assigned_to, :size => "14") %><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
+ <th class="progress"><%=l(:field_done_ratio)%>:</th><td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
+</tr>
+<tr>
+ <th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h @issue.category ? @issue.category.name : "-" %></td>
+ <% if User.current.allowed_to?(:view_time_entries, @project) %>
+ <th class="spent-time"><%=l(:label_spent_time)%>:</th>
+ <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td>
+ <% end %>
+</tr>
+<tr>
+ <th class="fixed-version"><%=l(:field_fixed_version)%>:</th><td class="fixed-version"><%= @issue.fixed_version ? link_to_version(@issue.fixed_version) : "-" %></td>
+ <% if @issue.estimated_hours %>
+ <th class="estimated-hours"><%=l(:field_estimated_hours)%>:</th><td class="estimated-hours"><%= l_hours(@issue.estimated_hours) %></td>
+ <% end %>
+</tr>
+
+<%= render_custom_fields_rows(@issue) %>
+<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
+</table>
+
+<% if @issue.description? || @issue.attachments.any? -%>
+<hr />
+<% if @issue.description? %>
+ <div class="contextual">
+ <%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %>
+ </div>
+
+ <p><strong><%=l(:field_description)%></strong></p>
+ <div class="wiki">
+ <%= textilizable @issue, :description, :attachments => @issue.attachments %>
+ </div>
+<% end %>
+<%= link_to_attachments @issue %>
+<% end -%>
+
+<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
+
+<% if !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
+<hr />
+<div id="issue_tree">
+<div class="contextual">
+ <%= link_to(l(:button_add), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>
+</div>
+<p><strong><%=l(:label_subtask_plural)%></strong></p>
+<%= render_descendants_tree(@issue) unless @issue.leaf? %>
+</div>
+<% end %>
+
+<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %>
+<hr />
+<div id="relations">
+<%= render :partial => 'relations' %>
+</div>
+<% end %>
+
+</div>
+
+<% if @changesets.present? %>
+<div id="issue-changesets">
+<h3><%=l(:label_associated_revisions)%></h3>
+<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
+</div>
+<% end %>
+
+<% if @journals.present? %>
+<div id="history">
+<h3><%=l(:label_history)%></h3>
+<%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
+</div>
+<% end %>
+
+
+<div style="clear: both;"></div>
+<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
+
+<div style="clear: both;"></div>
+<% if authorize_for('issues', 'edit') %>
+ <div id="update" style="display:none;">
+ <h3><%= l(:button_update) %></h3>
+ <%= render :partial => 'edit' %>
+ </div>
+<% end %>
+
+<% other_formats_links do |f| %>
+ <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
+ <%= f.link_to 'PDF' %>
+<% end %>
+
+<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
+
+<% content_for :sidebar do %>
+ <%= render :partial => 'issues/sidebar' %>
+
+ <% if User.current.allowed_to?(:add_issue_watchers, @project) ||
+ (@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
+ <div id="watchers">
+ <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
+ </div>
+ <% end %>
+<% end %>
+
+<% content_for :header_tags do %>
+ <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
+ <%= stylesheet_link_tag 'scm' %>
+ <%= javascript_include_tag 'context_menu' %>
+ <%= stylesheet_link_tag 'context_menu' %>
+ <%= stylesheet_link_tag 'context_menu_rtl' if l(:direction) == 'rtl' %>
+<% end %>
+<div id="context-menu" style="display: none;"></div>
+<%= javascript_tag "new ContextMenu('#{issues_context_menu_path}')" %>
@@ -0,0 +1,3 @@
+# English strings go here for Rails i18n
+en:
+ field_start_end_date: "Start date/End date"
@@ -0,0 +1,2 @@
+pt-BR:
+ field_start_end_date: "Início/Fim"
@@ -0,0 +1,13 @@
+class AddClosedTimeToIssue < ActiveRecord::Migration
+ def self.up
+ change_table :issues do |t|
+ t.date :closed_date
+ end
+ end
+
+ def self.down
+ change_table :issues do |t|
+ t.remove :closed_date
+ end
+ end
+end
11 init.rb
@@ -0,0 +1,11 @@
+require 'redmine'
+require 'close_issue'
+
+Redmine::Plugin.register :redmine_redmine_close_issue do
+ name 'Redmine Close Issue plugin'
+ author 'Matheus Ashton Silva'
+ description 'A plugin that save the date when the issue is closed, and shows it on issue/show view'
+ version '0.0.1'
+ url 'http://example.com/path/to/plugin'
+ author_url 'http://example.com/about'
+end
@@ -0,0 +1,2 @@
+# English strings go here
+my_label: "My label"
@@ -0,0 +1,23 @@
+module CloseIssue
+ class Hooks < Redmine::Hook::ViewListener
+ def controller_issues_new_before_save(context)
+ save_closed_date(context)
+ end
+
+ def controller_issues_edit_before_save(context)
+ save_closed_date(context)
+ end
+
+ def save_closed_date(context)
+ if(context[:issue])
+ closed_statuses = IssueStatus.find(:all, :conditions => { :is_closed => true })
+ find = closed_statuses.find_all { |obj| obj.id == context[:issue].status.id}
+ if(context[:issue].status.id == closed_statuses or (closed_statuses.instance_of? Array and find.size() > 0))
+ context[:issue].closed_date = Time.now
+ else
+ context[:issue].closed_date = nil if(context[:issue].closed_date)
+ end
+ end
+ end
+ end
+end
@@ -0,0 +1,5 @@
+# Load the normal Rails helper
+require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
+
+# Ensure that we are using the temporary fixture path
+Engines::Testing.set_fixture_path

0 comments on commit a2ff000

Please sign in to comment.