-
-
- <%- @T('Create OTRS Migration Plugin') %>
-
-
-
- - <%- @T('Personalise Migration Plugin ...') %> -
-
+
<%- @T('Download OTRS Migration Plugin') %>
- <%- @T('Download and install your personalised OTRS Migration Plugin on your OTRS System') %>: + <%- @T('Download and install the OTRS Migration Plugin on your OTRS System') %>:
- <%- @Icon('download') %> <%- @T('Personal Migration Plugin') %> + <%- @Icon('download') %> <%- @T('Migration Plugin') %>
<%- @T('Go Back') %>
@@ -34,7 +23,7 @@
-
+
<%- @Icon('diagonal-cross', 'icon-error') %>
@@ -59,7 +48,7 @@
<%- @T('Configuration') %>
-
+
<%- @Icon('checkmark') %>
diff --git a/app/controllers/import_otrs_controller.rb b/app/controllers/import_otrs_controller.rb
index 197073a75..7b84208a2 100644
--- a/app/controllers/import_otrs_controller.rb
+++ b/app/controllers/import_otrs_controller.rb
@@ -9,7 +9,7 @@ class ImportOtrsController < ApplicationController
if !params[:url] || params[:url] !~ %r{^(http|https)://.+?$}
render json: {
result: 'invalid',
- message: 'Invalid!',
+ message: 'Invalid URL!',
}
return
end
@@ -22,8 +22,10 @@ class ImportOtrsController < ApplicationController
'Connection refused' => 'Connection refused!',
}
- # try connecting to otrs
- response = UserAgent.request(params[:url])
+ url_parts = params[:url].split(';')
+
+ response = UserAgent.request( url_parts[0] )
+
if !response.success? && response.code.to_s !~ /^40.$/
message_human = ''
translation_map.each {|key, message|
@@ -39,34 +41,32 @@ class ImportOtrsController < ApplicationController
return
end
- message_human = 'Host found, but it seems to be no OTRS installation!'
- suffixes = ['/public.pl', '/otrs/public.pl']
- suffixes.each {|suffix|
- url = params[:url] + suffix + '?Action=ZammadMigrator'
- # strip multiple / in url
- url.gsub!(%r{([^:])(/+/)}, '\\1/')
- response = UserAgent.request( url )
+ result = {}
+ if response.body =~ /zammad migrator/
+
+ key_parts = url_parts[1].split('=')
- #Setting.set('import_mode', true)
Setting.set('import_backend', 'otrs')
- Setting.set('import_otrs_endpoint', url)
- Setting.set('import_otrs_endpoint_key', '01234567899876543210')
- if response.body =~ /zammad migrator/
- render json: {
- url: url,
- result: 'ok',
- }
- return # rubocop:disable Lint/NonLocalExitFromIterator
- elsif response.body =~ /(otrs\sag|otrs.com|otrs.org)/i
- message_human = 'Host found, but no OTRS migrator is installed!'
- end
- }
+ Setting.set('import_otrs_endpoint', url_parts[0])
+ Setting.set('import_otrs_endpoint_key', key_parts[1])
- # return result
- render json: {
- result: 'invalid',
- message_human: message_human,
- }
+ result = {
+ result: 'ok',
+ url: params[:url],
+ }
+ elsif response.body =~ /(otrs\sag|otrs\.com|otrs\.org)/i
+ result = {
+ result: 'invalid',
+ message_human: 'Host found, but no OTRS migrator is installed!'
+ }
+ else
+ result = {
+ result: 'invalid',
+ message_human: 'Host found, but it seems to be no OTRS installation!',
+ }
+ end
+
+ render json: result
end
def import_start
@@ -91,10 +91,14 @@ class ImportOtrsController < ApplicationController
end
def import_status
- return if setup_done_response
+ if !Setting.get('import_mode')
+ render json: {
+ setup_done: true,
+ }
+ return
+ end
state = Import::OTRS.current_state
-
render json: {
data: state,
result: 'in_progress',
diff --git a/app/models/calendar.rb b/app/models/calendar.rb
index 5bbd3ee7b..6c71f3c35 100644
--- a/app/models/calendar.rb
+++ b/app/models/calendar.rb
@@ -27,6 +27,11 @@ returns calendar object
ip = nil
end
+ # prevent multible setups for same ip
+ cache = Cache.get('Calendar.init_setup.done')
+ return if cache && cache[:ip] == ip
+ Cache.write('Calendar.init_setup.done', { ip: ip }, { expires_in: 1.hour })
+
# call for calendar suggestion
calendar_details = Service::GeoCalendar.location(ip)
return if !calendar_details
diff --git a/lib/cache.rb b/lib/cache.rb
index 327443bad..69ef8f905 100644
--- a/lib/cache.rb
+++ b/lib/cache.rb
@@ -8,8 +8,8 @@ delete a cache
=end
- def self.delete( key )
- Rails.cache.delete( key.to_s )
+ def self.delete(key)
+ Rails.cache.delete(key.to_s)
end
=begin
@@ -19,14 +19,12 @@ write a cache
Cache.write(
'some_key',
{ some: { data: { 'structure' } } },
- {
- expires_in: 24.hours, # optional, default 7 days
- }
+ { expires_in: 24.hours, # optional, default 7 days }
)
=end
- def self.write( key, data, params = {} )
+ def self.write(key, data, params = {})
if !params[:expires_in]
params[:expires_in] = 7.days
end
@@ -45,7 +43,7 @@ get a cache
=end
- def self.get( key )
+ def self.get(key)
Rails.cache.read(key.to_s)
end
diff --git a/lib/import/otrs.rb b/lib/import/otrs.rb
index 7e7b1de34..98c9cd80b 100644
--- a/lib/import/otrs.rb
+++ b/lib/import/otrs.rb
@@ -409,8 +409,8 @@ module Import::OTRS
threads[thread].join
}
- Setting.set( 'system_init_done', true )
- #Setting.set( 'import_mode', false )
+ Setting.set('system_init_done', true)
+ Setting.set('import_mode', false)
true
end
diff --git a/script/bootstrap.sh b/script/bootstrap.sh
index d7d22e15f..ac34cdc3d 100755
--- a/script/bootstrap.sh
+++ b/script/bootstrap.sh
@@ -4,6 +4,8 @@ bundle install
rm -rf tmp/cache*
+export Z_LOCALES='en-us:de-de'
+
rake db:drop
rake db:create
rake db:migrate
diff --git a/test/integration/otrs_import_browser_test.rb b/test/integration/otrs_import_browser_test.rb
index 7ca777e46..816f56d47 100644
--- a/test/integration/otrs_import_browser_test.rb
+++ b/test/integration/otrs_import_browser_test.rb
@@ -3,9 +3,28 @@ require 'browser_test_helper'
class OtrsImportBrowserTest < TestCase
def test_import
+
+ if !ENV['IMPORT_BT_OTRS_ENDPOINT']
+ fail "ERROR: Need IMPORT_BT_OTRS_ENDPOINT - hint IMPORT_BT_OTRS_ENDPOINT='http://vz305.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator'"
+ end
+ if !ENV['IMPORT_BT_OTRS_ENDPOINT_KEY']
+ fail "ERROR: Need IMPORT_BT_OTRS_ENDPOINT_KEY - hint IMPORT_BT_OTRS_ENDPOINT_KEY='01234567899876543210'"
+ end
+
+ import_url = "#{ENV['IMPORT_BT_OTRS_ENDPOINT']};Key=#{ENV['IMPORT_BT_OTRS_ENDPOINT_KEY']}"
+
@browser = browser_instance
location(url: browser_url)
+ click(css: 'a[href="#import"]')
+
+ click(css: 'a[href="#import/otrs"]')
+
+ set(
+ css: '#otrs-link',
+ value: import_url
+ )
+
watch_for(
css: 'body',
value: 'xxxx',