taiga-front/app/modules/projects/create/import/import-project.service.coffee

127 lines
4.9 KiB
CoffeeScript

###
# Copyright (C) 2014-2018 Taiga Agile LLC
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: projects/create/import/import-project.service.coffee
###
class ImportProjectService extends taiga.Service
@.$inject = [
'tgCurrentUserService',
'$tgAuth',
'tgLightboxFactory',
'$translate',
'$tgConfirm',
'$location',
'$tgNavUrls'
]
constructor: (@currentUserService, @tgAuth, @lightboxFactory, @translate, @confirm, @location, @tgNavUrls) ->
importPromise: (promise) ->
return promise.then(@.importSuccess.bind(this), @.importError.bind(this))
importSuccess: (result) ->
promise = @currentUserService.loadProjects()
promise.then () =>
if result.status == 202 # Async mode
title = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE')
message = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE')
@location.path(@tgNavUrls.resolve('home'))
@confirm.success(title, message)
else # result.status == 201 # Sync mode
ctx = {project: result.data.slug}
@location.path(@tgNavUrls.resolve('project-admin-project-profile-details', ctx))
msg = @translate.instant('PROJECT.IMPORT.SYNC_SUCCESS')
@confirm.notify('success', msg)
return promise
importError: (result) ->
promise = @tgAuth.refresh()
promise.then () =>
restrictionError = @.getRestrictionError(result)
if restrictionError
@lightboxFactory.create('tg-lb-import-error', {
class: 'lightbox lightbox-import-error'
}, restrictionError)
else
errorMsg = @translate.instant("PROJECT.IMPORT.ERROR")
if result.status == 429 # TOO MANY REQUESTS
errorMsg = @translate.instant("PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST")
else if result.data?._error_message
errorMsg = @translate.instant("PROJECT.IMPORT.ERROR_MESSAGE", {error_message: result.data._error_message})
@confirm.notify("error", errorMsg)
return promise
getRestrictionError: (result) ->
if result.headers
errorKey = ''
user = @currentUserService.getUser()
maxMemberships = null
if result.headers.isPrivate
privateError = !@currentUserService.canCreatePrivateProjects().valid
if user.get('max_memberships_private_projects') != null && result.headers.memberships >= user.get('max_memberships_private_projects')
membersError = true
else
membersError = false
if privateError && membersError
errorKey = 'private-space-members'
maxMemberships = user.get('max_memberships_private_projects')
else if privateError
errorKey = 'private-space'
else if membersError
errorKey = 'private-members'
maxMemberships = user.get('max_memberships_private_projects')
else
publicError = !@currentUserService.canCreatePublicProjects().valid
if user.get('max_memberships_public_projects') != null && result.headers.memberships >= user.get('max_memberships_public_projects')
membersError = true
else
membersError = false
if publicError && membersError
errorKey = 'public-space-members'
maxMemberships = user.get('max_memberships_public_projects')
else if publicError
errorKey = 'public-space'
else if membersError
errorKey = 'public-members'
maxMemberships = user.get('max_memberships_public_projects')
if !errorKey
return false
return {
key: errorKey,
values: {
max_memberships: maxMemberships,
members: result.headers.memberships
}
}
else
return false
angular.module("taigaProjects").service("tgImportProjectService", ImportProjectService)