Closed SinghNanak closed 1 year ago
It sounds interesting. However, I cannot imagine any usage for other users.
@picman Many users will benefit from and be attracted to this plugin. For instance, many users have large files. Several new users work in fields other than software development. These new users only want older revisions of their files when the project is active however, when the project is Done or completed only the most recent files are important when closing a project, deleting previous revisions will reduces the project's size from 80 GB to 4 GB.
pmap.permission :delete_older_revisions => [:delete_revision, :file_delete]
items << {:name => l(:label_dmsf_delete_older_revisions),
:url => {:controller => 'files', :action => 'delete_older_revisions'},
:icon => 'delete',
:class => 'icon icon-del'}
class DmsfController < ApplicationController
include DmsfHelper
before_action :find_file, only: [:delete_older_revisions]
before_action :authorize_global, only: [:delete_older_revisions]
def delete_older_revisions
if request.post?
revisions_to_keep = params[:revisions_to_keep].to_i
@file.delete_older_revisions(revisions_to_keep)
redirect_to :controller => 'files', :action => 'index', :folder_id => @file.folder_id
else
respond_to do |format|
format.js
end
end
end
private
def find_file
@file = File.find(params[:id])
end
end
<% title = l(:label_dmsf_delete_older_revisions) %>
<%= javascript_tag do %>
$(file).ready(function() {
var fileId = '<%= @file.id %>';
var revisionsCount = '<%= @file.revisions.count %>';
var defaultRevisionsToKeep = 1;
var content = '<p><%= l(:label_dmsf_delete_older_revisions_info) %></p>' +
'<p><%= l(:label_dmsf_delete_older_revisions_info_current, revisionsCount) %></p>' +
'<label for="revisions_to_keep"><%= l(:label_dmsf_delete_older_revisions_input) %></label>' +
'<input type="number" id="revisions_to_keep" value="' + defaultRevisionsToKeep + '" min="1" max="' + revisionsCount + '" required>';
var dialog = createDialog(title, content, [
{
text: '<%= l(:button_cancel) %>',
click: function() {
$(this).dialog('close');
}
},
{
text: '<%= l(:button_delete) %>',
click: function() {
var revisionsToKeep = $('#revisions_to_keep').val();
var data = {
authenticity_token: '<%= form_authenticity_token %>',
revisions_to_keep: revisionsToKeep
};
$.post('<%= url_for(:controller => 'files', :action => 'delete_older_revisions', :id => @file.id) %>', data)
.done(function() {
location.reload();
})
.fail(function() {
alert('<%= l(:label_dmsf_delete_older_revisions_error) %>');
});
$(this).dialog('close');
}
}
]);
dialog.dialog('open');
});
<% end %>
def delete_older_revisions(revisions_to_keep)
return if revisions_to_keep >= revisions.count
revisions_to_delete = revisions.order('revision DESC').offset(revisions_to_keep)
revisions_to_delete.each(&:destroy)
file.each { |file| file.delete_older_revisions(revisions_to_keep) }
end
Provide a functionality that will enable a certain user with privileges to a folder to delete all previous revisions of every file inside selected folders. It would be much great if there was a choice to save the latest 2, 3 or n number of revisions while deleting the others.