diff --git a/app/assets/images/otrs-logo.png b/app/assets/images/otrs-logo.png
new file mode 100644
index 000000000..437fb4d14
Binary files /dev/null and b/app/assets/images/otrs-logo.png differ
diff --git a/app/assets/javascripts/app/controllers/layout_ref.js.coffee b/app/assets/javascripts/app/controllers/layout_ref.js.coffee
index c262c410e..2554ac2d2 100644
--- a/app/assets/javascripts/app/controllers/layout_ref.js.coffee
+++ b/app/assets/javascripts/app/controllers/layout_ref.js.coffee
@@ -497,4 +497,72 @@ class ContentSidebarLeft extends App.ControllerContent
App.Config.set( 'layout_ref/content_sidebar_left', ContentSidebarLeft, 'Routes' )
+
+class ImportWizard extends App.ControllerContent
+ elements:
+ '[data-target]': 'links'
+ '[data-slide]': 'slides'
+ '[data-action]': 'actions'
+ '#otrs-link': 'otrsLink'
+ '.input-feedback':'inputFeedback'
+
+ constructor: ->
+ super
+ @render()
+
+ @links.on 'click', @navigate
+ @actions.on 'click', @action
+
+ # wait 500 ms after the last user input before we check the link
+ @otrsLink.on 'input', _.debounce(@checkOtrsLink, 600)
+
+ checkOtrsLink: (e) =>
+ if @otrsLink.val() is ""
+ @inputFeedback.attr('data-state', '')
+ return
+
+ @inputFeedback.attr('data-state', 'loading')
+
+ # send fake callback
+ if @otrsLink.val() is '1337'
+ state = 'success'
+ else
+ state = 'error'
+
+ setTimeout @otrsLinkCallback, 1500, state
+
+ otrsLinkCallback: (state) =>
+ @inputFeedback.attr('data-state', state)
+
+ @showNextButton @inputFeedback if state is 'success'
+
+ action: (e) =>
+ button = $(e.delegateTarget)
+
+ switch button.attr('data-action')
+ when "reveal" then @showNextButton button
+
+ showNextButton: (sibling) ->
+ sibling.parents('.wizard-slide').find('.btn.hide').removeClass('hide')
+
+ navigate: (e) =>
+ target = $(e.delegateTarget).attr('data-target')
+ targetSlide = @$("[data-slide=#{ target }]")
+
+ if targetSlide
+ @goToSlide targetSlide
+
+ goToSlide: (targetSlide) =>
+ @slides.addClass('hide')
+ targetSlide.removeClass('hide')
+
+ if targetSlide.attr('data-hide')
+ setTimeout @goToSlide, targetSlide.attr('data-hide'), targetSlide.next()
+
+
+ render: ->
+ @html App.view('layout_ref/import_wizard')()
+
+App.Config.set( 'layout_ref/import_wizard', ImportWizard, 'Routes' )
+
App.Config.set( 'LayoutRef', { prio: 1700, parent: '#current_user', name: 'Layout Reference', target: '#layout_ref', role: [ 'Admin' ] }, 'NavBarRight' )
diff --git a/app/assets/javascripts/app/views/layout_ref/import_wizard.jst.eco b/app/assets/javascripts/app/views/layout_ref/import_wizard.jst.eco
new file mode 100644
index 000000000..e28ced7a2
--- /dev/null
+++ b/app/assets/javascripts/app/views/layout_ref/import_wizard.jst.eco
@@ -0,0 +1,90 @@
+
+
+
+
Import Tickets
+
+
+
+
+
+
+
+
Create OTRS Migration Plugin
+
+
+ Personalise Migration Plugin ..
+
+
+
+
+
+
Download OTRS Migration Plugin
+
+
+ Download and install this personalised OTRS Migration Plugin on your OTRS System:
+
+
Personal Migration Plugin
+
+
+
+
+
Link OTRS
+
+
+ Enter the link provided by the plugin at the end of the installation to link the two systems:
+
+
+
+
+
+
+
OTRS Migration
+
+
+
+ 42/42
+ | Users
+ |
+ |
+
+ 29999/29999
+ | Tickets
+ |
+ |
+
+
+ | Configuration
+ |
+ |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/app/views/layout_ref/index.jst.eco b/app/assets/javascripts/app/views/layout_ref/index.jst.eco
index 9d87a5a1f..7c81632af 100644
--- a/app/assets/javascripts/app/views/layout_ref/index.jst.eco
+++ b/app/assets/javascripts/app/views/layout_ref/index.jst.eco
@@ -14,6 +14,7 @@
Communication Reply - no content Example
Communication Reply - with content Example
Communication Reply - with multiline content Example
+ Import Wizard
\ No newline at end of file
diff --git a/app/assets/stylesheets/zzz.css.erb b/app/assets/stylesheets/zzz.css.erb
index fee14cb7d..2da9dafdd 100644
--- a/app/assets/stylesheets/zzz.css.erb
+++ b/app/assets/stylesheets/zzz.css.erb
@@ -609,7 +609,11 @@ textarea,
margin-top: 0;
}
-.login, .getstarted, .reset_password, .signup {
+.login,
+.getstarted,
+.reset_password,
+.signup,
+.darkBackground {
padding: 10px;
height: auto;
background: hsl(234,10%,19%);
@@ -1550,6 +1554,13 @@ footer {
background: hsl(0,65%,55%);
}
+.btn--download .download.icon {
+ margin-right: 6px;
+ margin-top: 3px;
+ margin-left: -10px;
+ vertical-align: top;
+}
+
.navigation {
width: 260px;
background: #26272e;
@@ -3768,6 +3779,114 @@ footer {
white-space: nowrap;
}
+.wizard {
+ width: 360px;
+}
+
+.wizard h2 {
+ text-align: center;
+ border-bottom: 1px solid rgba(0,0,0,.13);
+ padding-bottom: 8px;
+ margin-bottom: 16px;
+}
+
+.wizard .form-group {
+ margin: 0;
+}
+
+.wizard-slide {
+ min-height: 260px;
+}
+
+.wizard-body {
+ padding-bottom: 15px;
+}
+
+.wizard-controls {
+ padding-top: 15px;
+ height: 39px;
+}
+
+.wizard-loadingText {
+ text-align: center;
+ margin: 0;
+}
+
+.wizard-loadingText .loading {
+ vertical-align: middle;
+ margin-right: 10px;
+}
+
+.import-source {
+ cursor: pointer;
+ border-radius: 5px;
+ border: 1px solid rgba(0,0,0,.13);
+ height: 50px;
+ margin: 5px 0;
+}
+
+.input-feedback {
+ position: absolute;
+ padding-left: 10px;
+ right: 1px;
+ top: 1px;
+ bottom: 1px;
+ width: 52px;
+ border-radius: 0 5px 5px 0;
+ background: linear-gradient(to right, transparent, white 33%);
+ pointer-events: none;
+}
+
+.input-feedback .icon {
+ display: none;
+}
+
+.input-feedback[data-state=loading] .loading.icon,
+.input-feedback[data-state=error] .error.icon,
+.input-feedback[data-state=success] .checkmark.icon {
+ display: block;
+}
+
+.progressTable {
+ max-width: 100%;
+ margin: 0 auto;
+}
+
+.progressTable td {
+ padding: 8px 5px;
+}
+
+.progressTable tr:not(:last-child) {
+ border-bottom: 1px solid #eee;
+}
+
+.progressTable td:first-child {
+ text-align: right;
+}
+
+.progressTable-progressCell {
+ width: 120px;
+}
+
+.progress {
+ height: 10px;
+ margin: 3px 0 0;
+}
+
+ .progress .bar {
+ background: #389ed9;
+ height: 100%;
+ }
+
+.progressTable .progress + .checkmark {
+ margin-left: 10px;
+ opacity: 0;
+}
+
+.progressTable tr.is-done .checkmark {
+ opacity: 1;
+}
+
/*
----------------