mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-07 05:44:00 +00:00
Merge pull request #1127 from sharelatex/as-keep-tags-archive
Keep tags when archiving project GitOrigin-RevId: 40b23895ef27a69500194cfc149a236ae615f271
This commit is contained in:
parent
568273ba14
commit
f1c8dcdf1e
4 changed files with 56 additions and 68 deletions
|
@ -18,7 +18,12 @@
|
|||
"mocha": true
|
||||
},
|
||||
"globals": {
|
||||
"expect": true
|
||||
"expect": true,
|
||||
"define": true,
|
||||
"$": true,
|
||||
"angular": true,
|
||||
// Injected in layout.pug
|
||||
"user_id": true
|
||||
},
|
||||
"settings": {
|
||||
// Tell eslint-plugin-react which version of React we are using
|
||||
|
|
|
@ -30,13 +30,7 @@ module.exports = ProjectDeleter =
|
|||
CollaboratorsHandler.removeUserFromAllProjets user_id, callback
|
||||
|
||||
deleteProject: (project_id, callback = (error) ->) ->
|
||||
# archiveProject takes care of the clean-up
|
||||
ProjectDeleter.archiveProject project_id, (error) ->
|
||||
logger.log project_id: project_id, "deleting project"
|
||||
Project.remove _id: project_id, callback
|
||||
|
||||
archiveProject: (project_id, callback = (error) ->)->
|
||||
logger.log project_id:project_id, "archived project from user request"
|
||||
logger.log project_id: project_id, "deleting project"
|
||||
async.series [
|
||||
(cb)->
|
||||
documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
|
||||
|
@ -45,9 +39,18 @@ module.exports = ProjectDeleter =
|
|||
for member_id in member_ids
|
||||
tagsHandler.removeProjectFromAllTags member_id, project_id, (err)->
|
||||
cb() #doesn't matter if this fails or the order it happens in
|
||||
(cb)->
|
||||
Project.update {_id:project_id}, { $set: { archived: true }}, cb
|
||||
], (err)->
|
||||
(cb) ->
|
||||
Project.remove _id: project_id, cb
|
||||
], (err) ->
|
||||
if err?
|
||||
logger.err err:err, "problem deleting project"
|
||||
return callback(err)
|
||||
logger.log project_id:project_id, "successfully deleting project from user request"
|
||||
callback()
|
||||
|
||||
archiveProject: (project_id, callback = (error) ->)->
|
||||
logger.log project_id:project_id, "archived project from user request"
|
||||
Project.update {_id:project_id}, { $set: { archived: true }}, (err)->
|
||||
if err?
|
||||
logger.err err:err, "problem archived project"
|
||||
return callback(err)
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
/* eslint-disable
|
||||
camelcase,
|
||||
max-len,
|
||||
no-return-assign,
|
||||
no-undef,
|
||||
no-unused-vars,
|
||||
*/
|
||||
// TODO: This file was created by bulk-decaffeinate.
|
||||
// Fix any style issues and re-enable lint.
|
||||
|
@ -27,7 +23,6 @@ define(['base'], function(App) {
|
|||
$timeout,
|
||||
localStorage
|
||||
) {
|
||||
let project_id
|
||||
$scope.projects = window.data.projects
|
||||
$scope.tags = window.data.tags
|
||||
$scope.notifications = window.data.notifications
|
||||
|
@ -80,7 +75,7 @@ define(['base'], function(App) {
|
|||
}
|
||||
|
||||
for (var tag of Array.from($scope.tags)) {
|
||||
for (project_id of Array.from(tag.project_ids || [])) {
|
||||
for (let project_id of Array.from(tag.project_ids || [])) {
|
||||
project = projectsById[project_id]
|
||||
if (project != null) {
|
||||
if (!project.tags) {
|
||||
|
@ -146,9 +141,9 @@ define(['base'], function(App) {
|
|||
$scope.selectedProjects = $scope.projects.filter(
|
||||
project => project.selected
|
||||
)
|
||||
return ($scope.isArchiveableProjectSelected = $scope.selectedProjects.some(
|
||||
$scope.isArchiveableProjectSelected = $scope.selectedProjects.some(
|
||||
project => window.user_id === project.owner._id
|
||||
))
|
||||
)
|
||||
}
|
||||
|
||||
$scope.getSelectedProjects = () => $scope.selectedProjects
|
||||
|
@ -252,7 +247,7 @@ define(['base'], function(App) {
|
|||
// Remove project_id from tag.project_ids
|
||||
const remaining_project_ids = []
|
||||
const removed_project_ids = []
|
||||
for (project_id of Array.from(tag.project_ids)) {
|
||||
for (let project_id of Array.from(tag.project_ids)) {
|
||||
if (!Array.from(remove_project_ids).includes(project_id)) {
|
||||
remaining_project_ids.push(project_id)
|
||||
} else {
|
||||
|
@ -282,7 +277,6 @@ define(['base'], function(App) {
|
|||
)
|
||||
|
||||
// Remove tag from project.tags
|
||||
const remaining_tags = []
|
||||
for (project of Array.from(selected_projects)) {
|
||||
if (!project.tags) {
|
||||
project.tags = []
|
||||
|
@ -293,7 +287,7 @@ define(['base'], function(App) {
|
|||
}
|
||||
}
|
||||
|
||||
for (project_id of Array.from(removed_project_ids)) {
|
||||
for (let project_id of Array.from(removed_project_ids)) {
|
||||
queuedHttp({
|
||||
method: 'DELETE',
|
||||
url: `/tag/${tag._id}/project/${project_id}`,
|
||||
|
@ -340,7 +334,7 @@ define(['base'], function(App) {
|
|||
|
||||
// Add project_ids into tag.project_ids
|
||||
const added_project_ids = []
|
||||
for (project_id of Array.from($scope.getSelectedProjectIds())) {
|
||||
for (let project_id of Array.from($scope.getSelectedProjectIds())) {
|
||||
if (!Array.from(tag.project_ids).includes(project_id)) {
|
||||
tag.project_ids.push(project_id)
|
||||
added_project_ids.push(project_id)
|
||||
|
@ -359,7 +353,7 @@ define(['base'], function(App) {
|
|||
|
||||
return (() => {
|
||||
const result = []
|
||||
for (project_id of Array.from(added_project_ids)) {
|
||||
for (let project_id of Array.from(added_project_ids)) {
|
||||
result.push(
|
||||
queuedHttp.post(`/tag/${tag._id}/project/${project_id}`, {
|
||||
_csrf: window.csrfToken
|
||||
|
@ -441,7 +435,6 @@ define(['base'], function(App) {
|
|||
.then(() => (project.name = newName))
|
||||
|
||||
$scope.openRenameProjectModal = function() {
|
||||
let modalInstance
|
||||
project = $scope.getFirstSelectedProject()
|
||||
if (project == null || project.accessLevel !== 'owner') {
|
||||
return
|
||||
|
@ -451,7 +444,7 @@ define(['base'], function(App) {
|
|||
'project action',
|
||||
'Rename'
|
||||
)
|
||||
return (modalInstance = $modal.open({
|
||||
$modal.open({
|
||||
templateUrl: 'renameProjectModalTemplate',
|
||||
controller: 'RenameProjectModalController',
|
||||
resolve: {
|
||||
|
@ -460,7 +453,7 @@ define(['base'], function(App) {
|
|||
}
|
||||
},
|
||||
scope: $scope
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
$scope.cloneProject = function(project, cloneName) {
|
||||
|
@ -491,13 +484,12 @@ define(['base'], function(App) {
|
|||
}
|
||||
|
||||
$scope.openCloneProjectModal = function() {
|
||||
let modalInstance
|
||||
project = $scope.getFirstSelectedProject()
|
||||
if (project == null) {
|
||||
return
|
||||
}
|
||||
|
||||
return (modalInstance = $modal.open({
|
||||
$modal.open({
|
||||
templateUrl: 'cloneProjectModalTemplate',
|
||||
controller: 'CloneProjectModalController',
|
||||
resolve: {
|
||||
|
@ -506,7 +498,7 @@ define(['base'], function(App) {
|
|||
}
|
||||
},
|
||||
scope: $scope
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
$scope.openArchiveProjectsModal = function() {
|
||||
|
@ -533,14 +525,7 @@ define(['base'], function(App) {
|
|||
$scope.archiveOrLeaveProjects($scope.getSelectedProjects())
|
||||
|
||||
$scope.archiveOrLeaveProjects = function(projects) {
|
||||
const projectIds = projects.map(p => p.id)
|
||||
// Remove project from any tags
|
||||
for (tag of Array.from($scope.tags)) {
|
||||
$scope._removeProjectIdsFromTagArray(tag, projectIds)
|
||||
}
|
||||
|
||||
for (project of Array.from(projects)) {
|
||||
project.tags = []
|
||||
for (let project of projects) {
|
||||
if (project.accessLevel === 'owner') {
|
||||
project.archived = true
|
||||
queuedHttp({
|
||||
|
@ -594,7 +579,7 @@ define(['base'], function(App) {
|
|||
$scope._removeProjectIdsFromTagArray(tag, selected_project_ids)
|
||||
}
|
||||
|
||||
for (project_id of Array.from(selected_project_ids)) {
|
||||
for (let project_id of Array.from(selected_project_ids)) {
|
||||
queuedHttp({
|
||||
method: 'DELETE',
|
||||
url: `/project/${project_id}?forever=true`,
|
||||
|
@ -630,11 +615,10 @@ define(['base'], function(App) {
|
|||
}
|
||||
|
||||
$scope.openUploadProjectModal = function() {
|
||||
let modalInstance
|
||||
return (modalInstance = $modal.open({
|
||||
$modal.open({
|
||||
templateUrl: 'uploadProjectModalTemplate',
|
||||
controller: 'UploadProjectModalController'
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
$scope.downloadSelectedProjects = () =>
|
||||
|
@ -733,7 +717,7 @@ define(['base'], function(App) {
|
|||
.catch(function(response) {
|
||||
const { data, status } = response
|
||||
const error = status === 400 ? { message: data } : true
|
||||
const modalInstance = $modal.open({
|
||||
$modal.open({
|
||||
templateUrl: 'showErrorModalTemplate',
|
||||
controller: 'ShowErrorModalController',
|
||||
resolve: {
|
||||
|
|
|
@ -82,32 +82,34 @@ describe 'ProjectDeleter', ->
|
|||
describe "deleteProject", ->
|
||||
beforeEach (done) ->
|
||||
@project_id = "mock-project-id-123"
|
||||
@deleter.archiveProject = sinon.stub().callsArg(1)
|
||||
|
||||
@deleter.deleteProject @project_id, done
|
||||
|
||||
it "should archive the project to clean it up", ->
|
||||
@deleter.archiveProject
|
||||
.calledWith(@project_id)
|
||||
.should.equal true
|
||||
|
||||
it "should remove the project from Mongo", ->
|
||||
@Project.remove
|
||||
.calledWith(_id: @project_id)
|
||||
.should.equal true
|
||||
|
||||
describe "archiveProject", ->
|
||||
beforeEach ->
|
||||
@CollaboratorsHandler.getMemberIds = sinon.stub()
|
||||
@CollaboratorsHandler.getMemberIds.withArgs(@project_id).yields(null, ["member-id-1", "member-id-2"])
|
||||
@Project.update.callsArgWith(2)
|
||||
@Project.remove.callsArgWith(1)
|
||||
done()
|
||||
|
||||
it "should flushProjectToMongoAndDelete in doc updater", (done)->
|
||||
@deleter.archiveProject @project_id, =>
|
||||
@deleter.deleteProject @project_id, =>
|
||||
@documentUpdaterHandler.flushProjectToMongoAndDelete.calledWith(@project_id).should.equal true
|
||||
done()
|
||||
|
||||
it "should remove the project", (done)->
|
||||
it "should removeProjectFromAllTags", (done)->
|
||||
@deleter.deleteProject @project_id, =>
|
||||
@TagsHandler.removeProjectFromAllTags.calledWith("member-id-1", @project_id).should.equal true
|
||||
@TagsHandler.removeProjectFromAllTags.calledWith("member-id-2", @project_id).should.equal true
|
||||
done()
|
||||
|
||||
it "should remove the project from Mongo", (done) ->
|
||||
@deleter.deleteProject @project_id, =>
|
||||
@Project.remove.calledWith({
|
||||
_id: @project_id
|
||||
}).should.equal true
|
||||
done()
|
||||
|
||||
describe "archiveProject", ->
|
||||
beforeEach ->
|
||||
@Project.update.callsArgWith(2)
|
||||
|
||||
it "should update the project", (done)->
|
||||
@deleter.archiveProject @project_id, =>
|
||||
@Project.update.calledWith({
|
||||
_id:@project_id
|
||||
|
@ -116,12 +118,6 @@ describe 'ProjectDeleter', ->
|
|||
}).should.equal true
|
||||
done()
|
||||
|
||||
it "should removeProjectFromAllTags", (done)->
|
||||
@deleter.archiveProject @project_id, =>
|
||||
@TagsHandler.removeProjectFromAllTags.calledWith("member-id-1", @project_id).should.equal true
|
||||
@TagsHandler.removeProjectFromAllTags.calledWith("member-id-2", @project_id).should.equal true
|
||||
done()
|
||||
|
||||
describe "restoreProject", ->
|
||||
beforeEach ->
|
||||
@Project.update.callsArgWith(2)
|
||||
|
|
Loading…
Add table
Reference in a new issue