Pedro.Teixido a50af4b041 Added basic obsolete feature. It allows to obsolete revisions through an forbidden icon next to the delete icon.
It only shows when the revision has been previously approved and the user has permission to delete revisions.
2018-06-17 22:44:13 +02:00

230 lines
10 KiB
Plaintext

<%
# encoding: utf-8
#
# Redmine plugin for Document Management System "Features"
#
# Copyright © 2011 Vít Jonáš <vit.jonas@gmail.com>
# Copyright © 2012 Daniel Munn <dan.munn@munnster.co.uk>
# Copyright © 2011-18 Karel Pičman <karel.picman@kontron.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
%>
<% html_title(l(:dmsf)) %>
<div class="contextual">
<% if User.current.allowed_to?(:file_manipulation, @project) %>
<% unless @file.locked_for_user? %>
<% unless @file.locked? %>
<%= link_to(l(:button_lock), lock_dmsf_files_path(:id => @file),
:title => l(:title_lock_file), :class => 'icon icon-lock') %>
<% else %>
<%= link_to_if(@file.unlockable?, l(:button_unlock), unlock_dmsf_files_path(:id => @file),
:title => l(:title_unlock_file), :class => 'icon icon-unlock') %>
<% end %>
<% if @file.notification %>
<%= link_to(l(:label_notifications_off),
notify_deactivate_dmsf_files_path(:id => @file),
:title => l(:title_notifications_active_deactivate),
:class => 'icon icon-email') %>
<% else %>
<%= link_to(l(:label_notifications_on),
notify_activate_dmsf_files_path(:id => @file),
:title => l(:title_notifications_not_active_activate),
:class => 'icon icon-email-add') %>
<% end %>
<%= link_to(l(:label_link_to),
new_dmsf_link_path(:project_id => @project.id, :dmsf_folder_id => @file.dmsf_folder ? @file.dmsf_folder.id : nil, :dmsf_file_id => @file.id, :type => 'link_to'),
:title => l(:title_create_link),
:class => 'icon icon-link') %>
<%= link_to("#{l(:button_copy)}/#{l(:button_move)}", copy_file_path(:id => @file),
:title => l(:title_copy), :class => 'icon icon-copy') %>
<%= delete_link(dmsf_file_path(:id => @file, :details => true)) if @file_delete_allowed %>
<% else %>
<% if User.current.allowed_to?(:force_file_unlock, @project) %>
<%= link_to_if(@file.unlockable?, l(:button_unlock), unlock_dmsf_files_path(:id => @file),
:title => l(:title_unlock_file), :class => 'icon icon-unlock')%>
<% end %>
<% end %>
<% end %>
</div>
<%= render(:partial => '/dmsf/path',
:locals => {:folder => @file.dmsf_folder, :filename => @file.title, :title => nil}) %>
<% if User.current.allowed_to?(:file_manipulation, @file.project) && !@file.locked_for_user? %>
<%= error_messages_for('file') %>
<%= error_messages_for('revision') %>
<%= render(:partial => 'file_new_revision') %>
<% end %>
<div class="dmsf_id_box tabular">
<%= label_tag('', l(:label_document)) %>
<%= "##{@file.id}" %>
</div>
<h3><%= l(:heading_revisions) %></h3>
<% @file.dmsf_file_revisions.visible[@revision_pages.offset, @revision_pages.per_page].each do |revision| %>
<div class="dmsf_revision_box tabular dataTables_wrapper">
<div class="fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix">
<div class="dataTables_lenght">
<div class="dmsf_controls" style="float: right">
<%= link_to_function image_tag('group.png'),
"$('#revision_access-#{revision.id}').toggle()",
:title => l(:title_download_entries) %>
<%= link_to image_tag('download.png'),
view_dmsf_file_path(@file, :download => revision),
:title => l(:title_title_version_version_download, :title => h(revision.title), :version => revision.version) %>
<%= link_to image_tag('delete.png'),
delete_revision_path(revision),
:data => {:confirm => l(:text_are_you_sure)},
:title => l(:title_delete_revision) if @file_delete_allowed && (@file.dmsf_file_revisions.visible.count > 1) %>
<%= link_to image_tag('/../../plugin_assets/redmine_dmsf/images/obsolete.png'),
obsolete_revision_path(revision),
:data => {:confirm => l(:text_are_you_sure)},
:title => l(:title_obsolete_revision) if @file_delete_allowed && (revision.workflow == DmsfWorkflow::STATE_APPROVED) %>
</div>
<i><%= l(:info_revision, :rev => revision.id) %></i>
<%= (revision.source_revision.nil? ? l(:label_created) : l(:label_changed)).downcase %>
<%= l(:info_changed_by_user, :changed => format_time(revision.updated_at)) %>
<%= link_to(revision.user.name, user_path(revision.user)) if revision.user %>
</div>
</div>
<div class="attributes dmsf_revision_inner_box">
<div class="splitcontent">
<div class="splitcontentleft">
<div class="status attribute">
<%= content_tag :div, l(:label_title), :class => 'label' %>
<%= content_tag :div, h(revision.title), :class => 'value' %>
</div>
<% if revision.description.present? %>
<div class="status attribute">
<%= content_tag :div, l(:label_description), :class => 'label' %>
<% text = textilizable(revision.description) %>
<% if text =~ /^<p>(.*)<\/p>$/ %>
<% text = $1 %>
<% end %>
<%= content_tag :div, text.html_safe, :class => 'value wiki' %>
</div>
<% end %>
<div class="status attribute">
<%= content_tag :div, l(:label_dmsf_version), :class => 'label' %>
<%= content_tag :div, "#{revision.version}", :class => 'value' %>
</div>
<div class="status attribute">
<%= content_tag :div, l(:label_size), :class => 'label' %>
<%= content_tag :div, number_to_human_size(revision.size), :class => 'value' %>
</div>
<% wf = DmsfWorkflow.find_by_id(revision.dmsf_workflow_id) %>
<% if wf %>
<div class="status attribute">
<%= content_tag :div, l(:label_workflow), :class => 'label' %>
<div class="value">
<%= "#{wf.name} - " %>
<%= link_to(revision.workflow_str(false),
log_dmsf_workflow_path(:project_id => @project.id,
:id => wf.id, :dmsf_file_revision_id => revision.id),
:title => revision.workflow_tooltip,
:remote => true) %>
</div>
</div>
<% end %>
<% if revision.comment.present? %>
<div class="status attribute">
<%= content_tag :div, l(:label_comment), :class => 'label' %>
<% text = textilizable(revision.comment) %>
<% if text =~ /^<p>(.*)<\/p>$/ %>
<% text = $1 %>
<% end %>
<%= content_tag :div, text.html_safe, :class => 'value wiki' %>
</div>
<% end %>
</div>
<div class="splitcontentright">
<div class="status attribute">
<%= content_tag :div, l(:label_file), :class => 'label' %>
<div class="value">
<% path = "#{revision.dmsf_file.dmsf_folder.dmsf_path_str}/" if revision.dmsf_file.dmsf_folder %>
<%= h("#{path}#{revision.name}") %>
</div>
</div>
<div class="status attribute">
<%= content_tag :div, l(:label_mime), :class => 'label' %>
<%= content_tag :div, revision.mime_type, :class => 'value' %>
</div>
<% if revision.digest.present? %>
<div class="status attribute">
<%= content_tag :div, l(:field_digest), :class => 'label' %>
<%= content_tag :div, "#{revision.digest_type}: #{revision.digest}", :class => 'value wiki' %>
</div>
<% end %>
<%= render 'dmsf/custom_fields', :object => revision %>
</div>
</div>
<div id="<%= "revision_access-#{revision.id}" %>" style="display:none">
<%= render(:partial => 'revision_access', :locals => {:revision => revision}) if User.current.allowed_to?(:file_manipulation, @file.project) %>
</div>
</div>
</div>
<br/>
<% end %>
<span class="pagination"><%= pagination_links_full @revision_pages, @file.dmsf_file_revisions.visible.count %></span>
<%= late_javascript_tag do %>
$('a.delete-revision').click(function(event) {
if(!window.confirm('<%= l(:text_are_you_sure) %>')) {
event.preventDefault();
}
});
$('a.delete-entry').click(function(event) {
if(!window.confirm('<%= l(:text_are_you_sure) %>')) {
event.preventDefault();
}
});
$('#file_upload_box').change(function() {
if($("input[name='version']:checked").val() == '0') {
$('#version_1').prop('checked', true);
}
$('#version_0').prop('disabled', true);
});
$('#newRevisionFormContentToggle').click(function() {
if($('#newRevisionFormContent').is(':visible')) {
$(this).text('[+]');
$('#newRevisionFormContent').hide();
}
else {
$(this).text('[-]');
$('#newRevisionFormContent').show();
}
});
$('.dmsf_list').dataTable({
language: {
url: "<%= plugin_asset_path(:redmine_dmsf, 'javascripts', json_url) %>"
}
});
<% end %>
<% if @revision.valid? && @file.valid? %>
<%= late_javascript_tag do %>
$('#newRevisionFormContentToggle').text('[+]');
$('#newRevisionFormContent').hide();
<% end %>
<% end %>
<% content_for :header_tags do %>
<%= stylesheet_link_tag 'jquery.dataTables/datatables.min.css', :plugin => :redmine_dmsf %>
<%= javascript_include_tag 'jquery.dataTables/datatables.min.js', :plugin => :redmine_dmsf, defer: true %>
<% end %>