Added import check if features used in different approach.
This commit is contained in:
parent
7a3baa2574
commit
3fa9a45b8c
5 changed files with 118 additions and 19 deletions
|
@ -1,14 +1,17 @@
|
|||
class Index extends App.ControllerContent
|
||||
className: 'getstarted fit'
|
||||
elements:
|
||||
'.input-feedback': 'urlStatus'
|
||||
'[data-target=otrs-start-migration]': 'nextStartMigration'
|
||||
'.otrs-link-error': 'linkErrorMessage'
|
||||
'.input-feedback': 'urlStatus'
|
||||
'.js-migration-check': 'nextStartMigration'
|
||||
'.otrs-link-error': 'linkErrorMessage'
|
||||
|
||||
events:
|
||||
'click .js-otrs-link': 'showLink'
|
||||
'click .js-download': 'startDownload'
|
||||
'click .js-migration-start': 'startMigration'
|
||||
'click .js-migration-check': 'checkMigration'
|
||||
'keyup #otrs-link': 'updateUrl'
|
||||
updateMigrationDisplayLoop: 0
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
|
@ -61,6 +64,13 @@ class Index extends App.ControllerContent
|
|||
@$('[data-slide=otrs-plugin]').addClass('hide')
|
||||
@$('[data-slide=otrs-link]').addClass('hide')
|
||||
@$('[data-slide=otrs-import]').removeClass('hide')
|
||||
@$('[data-slide=otrs-import-notice]').addClass('hide')
|
||||
|
||||
showImportNotice: =>
|
||||
@$('[data-slide=otrs-plugin]').addClass('hide')
|
||||
@$('[data-slide=otrs-link]').addClass('hide')
|
||||
@$('[data-slide=otrs-import]').addClass('hide')
|
||||
@$('[data-slide=otrs-import-notice]').removeClass('hide')
|
||||
|
||||
updateUrl: (e) =>
|
||||
url = $(e.target).val()
|
||||
|
@ -86,12 +96,28 @@ class Index extends App.ControllerContent
|
|||
@urlStatus.attr('data-state', 'error')
|
||||
@linkErrorMessage.text(data.message_human || data.message)
|
||||
@nextStartMigration.addClass('hide')
|
||||
|
||||
)
|
||||
@delay(callback, 700, 'import_otrs_url')
|
||||
|
||||
startMigration: (e) =>
|
||||
checkMigration: (e) =>
|
||||
e.preventDefault()
|
||||
@ajax(
|
||||
id: 'import_otrs_check'
|
||||
type: 'POST'
|
||||
url: "#{@apiPath}/import/otrs/import_check"
|
||||
processData: true
|
||||
success: (data, status, xhr) =>
|
||||
if data.result is 'ok'
|
||||
@startMigration()
|
||||
return
|
||||
for issue in data.issues
|
||||
@$(".js-#{issue}").removeClass('hide')
|
||||
@showImportNotice()
|
||||
)
|
||||
|
||||
startMigration: (e) =>
|
||||
if e
|
||||
e.preventDefault()
|
||||
@showImportState()
|
||||
@ajax(
|
||||
id: 'import_start'
|
||||
|
@ -100,10 +126,11 @@ class Index extends App.ControllerContent
|
|||
processData: true
|
||||
success: (data, status, xhr) =>
|
||||
if data.result is 'ok'
|
||||
@delay(@updateMigration, 3000)
|
||||
@delay(@updateMigration, 2000)
|
||||
)
|
||||
|
||||
updateMigration: =>
|
||||
@updateMigrationDisplayLoop += 1
|
||||
@showImportState()
|
||||
@ajax(
|
||||
id: 'import_status'
|
||||
|
@ -122,6 +149,11 @@ class Index extends App.ControllerContent
|
|||
else
|
||||
@$('.js-error').addClass('hide')
|
||||
|
||||
if data.message is 'not running' && @updateMigrationDisplayLoop > 10
|
||||
@$('.js-error').removeClass('hide')
|
||||
@$('.js-error').html(App.i18n.translateContent('Background process did not start or has not finished! Please contact your support.'))
|
||||
return
|
||||
|
||||
if data.result is 'in_progress'
|
||||
for key, item of data.data
|
||||
if item.done > item.total
|
||||
|
|
|
@ -37,14 +37,13 @@
|
|||
</div>
|
||||
<div class="wizard-controls horizontal center">
|
||||
<a class="btn btn--text btn--secondary" href="#import"><%- @T('Go Back') %></a>
|
||||
<div class="btn btn--primary align-right hide js-migration-start" data-target="otrs-start-migration"><%- @T('Migrate OTRS Data') %></div>
|
||||
<div class="btn btn--primary align-right hide js-migration-check"><%- @T('Migrate OTRS Data') %></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wizard-slide vertical hide" data-slide="otrs-import">
|
||||
<h2><%- @T('OTRS Migration') %></h2>
|
||||
<div class="alert alert--danger hide js-error" role="alert"></div>
|
||||
|
||||
<div class="wizard-body flex vertical justified">
|
||||
<table class="progressTable">
|
||||
<tr class="js-config">
|
||||
|
@ -90,5 +89,17 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wizard-slide vertical hide" data-slide="otrs-import-notice">
|
||||
<h2><%- @T('Notice') %></h2>
|
||||
<div class="wizard-body flex vertical justified">
|
||||
<p class="js-otrsProcesses hide"><%- @T('We detected OTRS BPM processes which can\'t get imported into Zammad, since we currently don\'t support these kind of workflows.') %></p>
|
||||
<p class="js-otrsDynamicFields hide"><%- @T('We found many dynamic fields. We use a different approach towards ticket attributes. Zammad uses also tags in addition to custom fields to classify tickets. This difference may conflict with your current use of dynamic fields in OTRS.') %></p>
|
||||
</div>
|
||||
<div class="wizard-controls horizontal center">
|
||||
<a class="btn btn--text btn--secondary" href="#import"><%- @T('Go Back') %></a>
|
||||
<a href="#" class="btn btn--primary align-right js-migration-start"><%- @T('Continue anyway') %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -22,8 +22,7 @@ class ImportOtrsController < ApplicationController
|
|||
'Connection refused' => 'Connection refused!',
|
||||
}
|
||||
|
||||
response = UserAgent.request( params[:url] )
|
||||
|
||||
response = UserAgent.request(params[:url])
|
||||
if !response.success? && response.code.to_s !~ /^40.$/
|
||||
message_human = ''
|
||||
translation_map.each { |key, message|
|
||||
|
@ -46,12 +45,36 @@ class ImportOtrsController < ApplicationController
|
|||
|
||||
if migrator_response['Success'] == 1
|
||||
|
||||
url_parts = params[:url].split(';')
|
||||
key_parts = url_parts[1].split('=')
|
||||
# set url and key for import endpoint
|
||||
url = migrator_response['URL']
|
||||
key = migrator_response['Key']
|
||||
|
||||
# get first part url, used for import_otrs_endpoint
|
||||
if !url || !key
|
||||
url_parts = params[:url].split(';')
|
||||
if !url_parts[1] # in case of & instead of ;
|
||||
url_parts = params[:url].split('&')
|
||||
end
|
||||
key_parts = url_parts[1].split('=')
|
||||
|
||||
if !key_parts[1]
|
||||
render json: {
|
||||
result: 'invalid',
|
||||
message_human: 'Unable to get key from URL!'
|
||||
}
|
||||
return
|
||||
end
|
||||
if !url
|
||||
url = url_parts[0]
|
||||
end
|
||||
if !key
|
||||
key = key_parts[1]
|
||||
end
|
||||
end
|
||||
|
||||
Setting.set('import_backend', 'otrs')
|
||||
Setting.set('import_otrs_endpoint', url_parts[0])
|
||||
Setting.set('import_otrs_endpoint_key', key_parts[1])
|
||||
Setting.set('import_otrs_endpoint', url)
|
||||
Setting.set('import_otrs_endpoint_key', key)
|
||||
|
||||
result = {
|
||||
result: 'ok',
|
||||
|
@ -98,6 +121,38 @@ class ImportOtrsController < ApplicationController
|
|||
}
|
||||
end
|
||||
|
||||
def import_check
|
||||
statistic = Import::OTRS::Requester.list
|
||||
issues = []
|
||||
|
||||
# check count of dynamic fields
|
||||
dynamic_field_count = 0
|
||||
dynamic_fields = Import::OTRS::Requester.load('DynamicField')
|
||||
dynamic_fields.each { |dynamic_field|
|
||||
next if dynamic_field['ValidID'].to_i != 1
|
||||
dynamic_field_count += 1
|
||||
}
|
||||
if dynamic_field_count > 20
|
||||
issues.push 'otrsDynamicFields'
|
||||
end
|
||||
|
||||
# check if process exsists
|
||||
sys_configs = Import::OTRS::Requester.load('SysConfig')
|
||||
sys_configs.each { |sys_config|
|
||||
next if sys_config['Key'] != 'Process'
|
||||
issues.push 'otrsProcesses'
|
||||
}
|
||||
|
||||
result = 'ok'
|
||||
if !issues.empty?
|
||||
result = 'failed'
|
||||
end
|
||||
render json: {
|
||||
result: result,
|
||||
issues: issues,
|
||||
}
|
||||
end
|
||||
|
||||
def import_status
|
||||
result = Import::OTRS.status_bg
|
||||
if result[:result] == 'import_done'
|
||||
|
|
|
@ -3,6 +3,7 @@ Zammad::Application.routes.draw do
|
|||
|
||||
# import otrs
|
||||
match api_path + '/import/otrs/url_check', to: 'import_otrs#url_check', via: :post
|
||||
match api_path + '/import/otrs/import_check', to: 'import_otrs#import_check', via: :post
|
||||
match api_path + '/import/otrs/import_start', to: 'import_otrs#import_start', via: :post
|
||||
match api_path + '/import/otrs/import_status', to: 'import_otrs#import_status', via: :get
|
||||
|
||||
|
|
|
@ -15,11 +15,8 @@ class OtrsImportBrowserTest < TestCase
|
|||
location(url: browser_url)
|
||||
|
||||
click(css: 'a[href="#import"]')
|
||||
|
||||
click(css: 'a[href="#import/otrs"]')
|
||||
|
||||
click(css: '.js-download')
|
||||
|
||||
click(css: '.js-otrs-link')
|
||||
|
||||
invalid_key_url = "#{ENV['IMPORT_BT_OTRS_ENDPOINT']};Key=31337"
|
||||
|
@ -28,7 +25,6 @@ class OtrsImportBrowserTest < TestCase
|
|||
css: '#otrs-link',
|
||||
value: invalid_key_url
|
||||
)
|
||||
|
||||
sleep 5
|
||||
|
||||
watch_for(
|
||||
|
@ -41,14 +37,18 @@ class OtrsImportBrowserTest < TestCase
|
|||
css: '#otrs-link',
|
||||
value: import_url
|
||||
)
|
||||
|
||||
sleep 5
|
||||
|
||||
watch_for_disappear(
|
||||
css: '.otrs-link-error',
|
||||
value: 'Invalid API key.',
|
||||
)
|
||||
click(css: '.js-migration-check')
|
||||
|
||||
watch_for(
|
||||
css: '.wizard-slide:not(.hide)',
|
||||
value: 'Notice',
|
||||
)
|
||||
click(css: '.js-migration-start')
|
||||
|
||||
watch_for(
|
||||
|
|
Loading…
Reference in a new issue