mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
Improve repository archive/restore actions [SCI-4780]
This commit is contained in:
parent
41bb825f33
commit
29f62419bd
|
@ -116,7 +116,7 @@
|
|||
$('.repositories-index')
|
||||
.on('click', '#archiveRepoBtn', function() {
|
||||
$.post($('#archiveRepoBtn').data('archive-repositories'), {
|
||||
selected_repos: CHECKBOX_SELECTOR.selectedRows
|
||||
repository_ids: CHECKBOX_SELECTOR.selectedRows
|
||||
}, function(data) {
|
||||
HelperModule.flashAlertMsg(data.flash, 'success');
|
||||
initRepositoriesDataTable('#repositoriesList');
|
||||
|
@ -132,7 +132,7 @@
|
|||
})
|
||||
.on('click', '#restoreRepoBtn', function() {
|
||||
$.post($('#restoreRepoBtn').data('restore-repositories'), {
|
||||
selected_repos: CHECKBOX_SELECTOR.selectedRows
|
||||
repository_ids: CHECKBOX_SELECTOR.selectedRows
|
||||
}, function(data) {
|
||||
HelperModule.flashAlertMsg(data.flash, 'success');
|
||||
initRepositoriesDataTable('#repositoriesList', true);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
//= require repositories/import/records_importer.js
|
||||
|
||||
/*
|
||||
global animateSpinner repositoryRecordsImporter I18n
|
||||
global pageReload animateSpinner repositoryRecordsImporter I18n
|
||||
RepositoryDatatable PerfectScrollbar HelperModule
|
||||
*/
|
||||
|
||||
|
@ -150,13 +150,13 @@
|
|||
function initRepositoryViewSwitcher() {
|
||||
var viewSwitch = $('.view-switch');
|
||||
viewSwitch.on('click', '.view-switch-archived', function() {
|
||||
$('.repository-show').removeClass('active').addClass('archived')
|
||||
$('.repository-show').removeClass('active').addClass('archived');
|
||||
$('#manage-repository-column').removeClass('active').addClass('archived');
|
||||
RepositoryDatatable.reload();
|
||||
});
|
||||
viewSwitch.on('click', '.view-switch-active', function() {
|
||||
$('.repository-show').removeClass('archived').addClass('active');
|
||||
$('#manage-repository-column').removeClass('archived').addClass('active');;
|
||||
$('#manage-repository-column').removeClass('archived').addClass('active');
|
||||
RepositoryDatatable.reload();
|
||||
});
|
||||
}
|
||||
|
@ -174,14 +174,25 @@
|
|||
|
||||
$('.create-new-repository').initializeModal('#create-repo-modal');
|
||||
|
||||
function initArchivingActionsInDropdown(){
|
||||
$('.archive-repository-option').on('click', function(event){
|
||||
function initArchivingActionsInDropdown() {
|
||||
$('.archive-repository-option').on('click', function(event) {
|
||||
event.preventDefault();
|
||||
var link = event.target.getAttribute("href");
|
||||
animateSpinner(null, true);
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: link,
|
||||
success: pageReload
|
||||
type: 'POST',
|
||||
url: $(this).attr('href'),
|
||||
dataType: 'json',
|
||||
data: { repository_ids: [$(this).data('repositoryId')] },
|
||||
success: pageReload,
|
||||
error: function(ev) {
|
||||
if (ev.status === 403) {
|
||||
HelperModule.flashAlertMsg(I18n.t('repositories.js.permission_error'), ev.responseJSON.style);
|
||||
} else if (ev.status === 422) {
|
||||
HelperModule.flashAlertMsg(ev.responseJSON.error, 'danger');
|
||||
}
|
||||
animateSpinner(null, false);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ class RepositoriesController < ApplicationController
|
|||
before_action :switch_team_with_param, only: :show
|
||||
before_action :load_repository, except: %i(index create create_modal sidebar archive restore)
|
||||
before_action :load_repositories, only: %i(index show sidebar)
|
||||
before_action :load_repositories_for_archiving, only: %i(archive restore)
|
||||
before_action :check_view_all_permissions, only: %i(index sidebar)
|
||||
before_action :check_view_permissions, except: %i(index create_modal create update destroy parse_sheet import_records sidebar archive restore)
|
||||
before_action :check_manage_permissions, only: %i(destroy destroy_modal rename_modal update)
|
||||
|
@ -128,7 +129,7 @@ class RepositoriesController < ApplicationController
|
|||
end
|
||||
|
||||
def archive
|
||||
service = Repositories::ArchiveRepositoryService.call(repositories: selected_repositories,
|
||||
service = Repositories::ArchiveRepositoryService.call(repositories: @repositories,
|
||||
user: current_user,
|
||||
team: current_team)
|
||||
if service.succeed?
|
||||
|
@ -139,7 +140,7 @@ class RepositoriesController < ApplicationController
|
|||
end
|
||||
|
||||
def restore
|
||||
service = Repositories::RestoreRepositoryService.call(repositories: selected_repositories,
|
||||
service = Repositories::RestoreRepositoryService.call(repositories: @repositories,
|
||||
user: current_user,
|
||||
team: current_team)
|
||||
if service.succeed?
|
||||
|
@ -381,6 +382,10 @@ class RepositoriesController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def load_repositories_for_archiving
|
||||
@repositories = current_team.repositories.where(id: params[:repository_ids])
|
||||
end
|
||||
|
||||
def set_inline_name_editing
|
||||
return unless can_manage_repository?(@repository)
|
||||
|
||||
|
@ -415,7 +420,9 @@ class RepositoriesController < ApplicationController
|
|||
end
|
||||
|
||||
def check_archive_permissions
|
||||
render_403 unless can_archive_repositories?(current_team)
|
||||
@repositories.each do |repository|
|
||||
return render_403 unless can_archive_repository?(repository)
|
||||
end
|
||||
end
|
||||
|
||||
def check_share_permissions
|
||||
|
@ -430,17 +437,6 @@ class RepositoriesController < ApplicationController
|
|||
params.permit(:id, :file, :file_id, mappings: {}).to_h
|
||||
end
|
||||
|
||||
def selected_repositories
|
||||
if params[:repository_id].present?
|
||||
repository_ids = params[:repository_id]
|
||||
elsif params[:selected_repos].any?
|
||||
repository_ids = params[:selected_repos].map(&:to_i).uniq
|
||||
else
|
||||
render status: :not_found
|
||||
end
|
||||
current_team.repositories.where(id: repository_ids)
|
||||
end
|
||||
|
||||
def repository_response(message)
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
|
|
|
@ -30,6 +30,11 @@ Canaid::Permissions.register_for(Repository) do
|
|||
user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team)
|
||||
end
|
||||
|
||||
# repository: archive, restore
|
||||
can :archive_repository do |user, repository|
|
||||
!repository.shared_with?(user.current_team) && user.is_admin_of_team?(repository.team)
|
||||
end
|
||||
|
||||
# repository: share
|
||||
can :share_repository do |user, repository|
|
||||
user.is_admin_of_team?(repository.team) unless repository.shared_with?(user.current_team)
|
||||
|
|
|
@ -53,11 +53,6 @@ Canaid::Permissions.register_for(Team) do
|
|||
within_limits && user.is_admin_of_team?(team)
|
||||
end
|
||||
|
||||
# repository: archive, restore
|
||||
can :archive_repositories do |user, team|
|
||||
user.is_admin_of_team?(team)
|
||||
end
|
||||
|
||||
# this permission is scattered around the application
|
||||
# if you want to make changes here keep in mind to check/change the
|
||||
# SQL view that lists reports in index page:
|
||||
|
|
|
@ -92,27 +92,28 @@
|
|||
remote: true %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% if can_manage_repository?(@repository)%>
|
||||
<li data-view-mode="active" data-hook="destroy-repository-option" role="separator" class="divider"></li>
|
||||
<li data-view-mode="active" data-hook="archive-repository-option">
|
||||
<% if can_archive_repository?(@repository) %>
|
||||
<li data-view-mode="active" role="separator" class="divider"></li>
|
||||
<li data-view-mode="active">
|
||||
<%= link_to t('repositories.index.options_dropdown.archive'),
|
||||
team_repository_archive_path(current_team, @repository),
|
||||
archive_team_repositories_path(current_team),
|
||||
class: "archive-repository-option",
|
||||
remote: true %>
|
||||
data: { repository_id: @repository.id } %>
|
||||
</li>
|
||||
<li data-view-mode="archived" data-hook="restore-repository-option">
|
||||
<li data-view-mode="archived">
|
||||
<%= link_to t('repositories.index.options_dropdown.restore'),
|
||||
team_repository_restore_path(current_team, @repository),
|
||||
restore_team_repositories_path(current_team),
|
||||
class: "archive-repository-option",
|
||||
remote: true %>
|
||||
data: { repository_id: @repository.id } %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% if can_manage_repository?(@repository) %>
|
||||
<li data-view-mode="archived" data-hook="destroy-repository-option">
|
||||
<%= link_to t('repositories.index.options_dropdown.delete'),
|
||||
team_repository_destroy_modal_path(current_team, repository_id: @repository),
|
||||
class: "delete-repo-option",
|
||||
remote: true %>
|
||||
</li>
|
||||
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
|
|
@ -180,8 +180,6 @@ Rails.application.routes.draw do
|
|||
post 'copy', to: 'repositories#copy',
|
||||
defaults: { format: 'json' }
|
||||
get :share_modal
|
||||
get :archive, to: 'repositories#archive'
|
||||
get :restore, to: 'repositories#restore'
|
||||
|
||||
resources :team_repositories, only: %i(destroy) do
|
||||
collection do
|
||||
|
|
Loading…
Reference in a new issue