OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/app/views/work_packages/show.html.erb

163 lines
6.0 KiB

<%#-- copyright
OpenProject is a project management system.
Copyright (C) 2012-2013 the OpenProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
See doc/COPYRIGHT.rdoc for more details.
++#%>
<%= header_tags %>
<%= render :partial => 'work_packages/action_menu', :locals => { work_package: controller.work_package } %>
<% work_package_breadcrumb %>
<%= content_tag('h2', controller.work_package.to_s) %>
<div class = "details">
<div class="profile-wrap">
<%= avatar(controller.work_package.author, :size => "40") %>
</div>
<p class="author">
<%= authoring controller.work_package.created_at, controller.work_package.author %>.
<% if controller.work_package.created_at != controller.work_package.updated_at %>
<%= l(:label_updated_time, time_tag(controller.work_package.updated_at)).html_safe %>.
<% end %>
</p>
<hr />
<div class="issue details">
<div class="meta">
<table class="attributes">
<% controller.work_package_attributes.each_slice(2) do |attributes| %>
<tr>
<% attributes.each do |attribute| %>
<th class="<%= attribute.html_class %>"><%= Issue.human_attribute_name(attribute.attribute)%>:</th>
<% if attribute.is_a? ::WorkPackagesController::WorkPackageAttribute %>
<td class="<%= attribute.html_class %>"><%= h(attribute.value) %></td>
<% elsif attribute.is_a? ::WorkPackagesController::WorkPackageUserAttribute %>
<td class="<%= attribute.html_class %>">
<%= avatar(attribute.value, :size => "14") %>
<%= attribute.value ? link_to_user(attribute.value) : "-" %>
</td>
<% elsif attribute.is_a? ::WorkPackagesController::WorkPackageProgressAttribute %>
<td class="<%= attribute.html_class %>">
<%= progress_bar attribute.value, :width => '80px', :legend => "#{attribute.value}%" %>
</td>
<% elsif attribute.is_a? ::WorkPackagesController::WorkPackagePlanningElementTypeAttribute %>
<td class="<%= attribute.html_class %>">
<%= icon_for_planning_element_type(attribute.value) %>
<%= h attribute.value.try(:name) %>
</td>
<% end %>
<% end %>
</tr>
<% end %>
<%= render_custom_fields_rows(controller.work_package) %>
<%= call_hook(:view_issues_show_details_bottom, :issue => controller.work_package) %>
</table>
</div>
</div>
<% if controller.work_package.description? %>
<div class="description">
<hr />
<div class="contextual">
<%= link_to_if_authorized(l(:button_quote), { :controller => '/issues', :action => 'quoted', :id => controller.work_package }, :class => 'quote-link icon icon-comment') %>
</div>
<p><strong><%= Issue.human_attribute_name(:description)%></strong></p>
<div class="wiki wikicontent" data-user="<%= controller.work_package.author %>">
<%= textilizable controller.work_package, :description, :attachments => controller.work_package.attachments %>
</div>
<hr />
</div>
<% end %>
<% if controller.work_package.attachments.any? -%>
<%= link_to_attachments controller.work_package %>
<% end -%>
<%= call_hook(:view_issues_show_description_bottom, :issue => controller.work_package) %>
<hr />
<%= render :partial => 'subwork_packages_paragraph', :locals => { :work_package => controller.work_package,
:ancestors => controller.ancestors,
:descendants => controller.descendants } %>
<% if authorize_for('work_package_relations', 'create') || controller.relations.present? %>
<div id="relations">
<hr />
<%= render :partial => 'relations', :locals => { :work_package => controller.work_package,
:relations => controller.relations } %>
</div>
<% end %>
<% if User.current.allowed_to?(:add_work_package_watchers, controller.project) ||
(controller.work_package.watchers.present? && User.current.allowed_to?(:view_work_package_watchers, controller.project)) %>
<div id="watchers">
<hr />
<%= render :partial => 'watchers/watchers', :locals => {:watched => controller.work_package} %>
</div>
<% end %>
</div>
<div style="clear: both;"></div>
<% if controller.changesets.present? %>
<div id="issue-changesets">
<h3><%=l(:label_associated_revisions)%></h3>
<%= render :partial => 'changesets', :locals => { :changesets => controller.changesets} %>
</div>
<% end %>
<% if controller.journals.present? %>
<div id="history">
<h3><%=l(:label_history)%></h3>
<%= render :partial => 'history', :locals => { :issue => controller.work_package, :journals => controller.journals } %>
</div>
<% end %>
<div style="clear: both;"></div>
<div class="title-bar" id="lower-title-bar">
<%= render :partial => 'layouts/action_menu' %>
</div>
<div style="clear: both;"></div>
<% if authorize_for('issues', 'edit') %>
<div id="update">
</div>
<% end %>
<%= other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
<%= f.link_to 'PDF' %>
<% end %>
<% html_title h(controller.work_package.to_s) %>
<% content_for :sidebar do %>
<%= render :partial => 'issues/sidebar' %>
<% end %>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{controller.work_package.project} - #{controller.work_package.tracker} ##{controller.work_package.id}: #{controller.work_package.subject}") %>
<%= 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}')" %>
<% #include calendar js files in case they are needed for edit
include_calendar_headers_tags -%>