From 05048921de94fb181b3bf8cf692b450f5fbcd528 Mon Sep 17 00:00:00 2001 From: Felix Niklas Date: Fri, 26 Jun 2015 10:47:27 +0200 Subject: [PATCH] new user preference: calendar subscriptions --- .../_profile/calendar_subscriptions.js.coffee | 104 ++++++++++++++++++ .../app/controllers/layout_ref.js.coffee | 4 +- ...jst.eco => calendar_subscriptions.jst.eco} | 0 .../profile/calendar_subscriptions.jst.eco | 32 ++++++ app/assets/stylesheets/zammad.css.scss | 11 +- 5 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 app/assets/javascripts/app/controllers/_profile/calendar_subscriptions.js.coffee rename app/assets/javascripts/app/views/layout_ref/{calendar_subscription.jst.eco => calendar_subscriptions.jst.eco} (100%) create mode 100644 app/assets/javascripts/app/views/profile/calendar_subscriptions.jst.eco diff --git a/app/assets/javascripts/app/controllers/_profile/calendar_subscriptions.js.coffee b/app/assets/javascripts/app/controllers/_profile/calendar_subscriptions.js.coffee new file mode 100644 index 000000000..73d7e142e --- /dev/null +++ b/app/assets/javascripts/app/controllers/_profile/calendar_subscriptions.js.coffee @@ -0,0 +1,104 @@ +class CalendarSubscriptions extends App.Controller + elements: + 'input[type=checkbox]': 'options' + 'output': 'output' + + events: + 'change input[type=checkbox]': 'onOptionsChange' + 'click .js-select': 'selectAll' + 'click .js-showLink': 'showLink' + + constructor: -> + super + return if !@authenticate() + + @translationTable = + new_open: App.i18n.translatePlain('new & open') + pending: App.i18n.translatePlain('pending') + escalation: App.i18n.translatePlain('escalation') + + @render() + + render: => + userPreferences = @Session.get('preferences') + @preferences = + new_open: + own: true + not_assigned: false + pending: + own: true + not_assigned: false + escalation: + own: true + not_assigned: false + + if userPreferences.ical + if userPreferences.ical.ticket + _.extend(@preferences, userPreferences.ical.ticket) + + @html App.view('profile/calendar_subscriptions') + baseurl: window.location.origin + preferences: @preferences + translationTable: @translationTable + + showLink: (e) -> + $(e.currentTarget).next().removeClass('is-hidden') + $(e.currentTarget).remove() + + selectAll: (e) -> + e.currentTarget.focus() + e.currentTarget.select() + + onOptionsChange: => + @setAllPreferencesToFalse() + + for i, checkbox of @options.serializeArray() + [state, option] = checkbox.name.split('/') + @preferences[state][option] = true + + @store() + + setAllPreferencesToFalse: -> + for state of @preferences + @preferences[state].own = false + @preferences[state].not_assigned = false + + store: -> + # get data + data = + user: + ical: + ticket: @preferences + + @ajax( + id: 'preferences' + type: 'PUT' + url: @apiPath + '/users/preferences' + data: JSON.stringify data + success: @success + error: @error + ) + + success: (data, status, xhr) => + App.User.full( + App.Session.get( 'id' ), + => + App.i18n.set( @locale ) + App.Event.trigger( 'ui:rerender' ) + @notify( + type: 'success' + msg: App.i18n.translateContent( 'Successfully!' ) + ) + , + true + ) + + error: (xhr, status, error) => + @render() + data = JSON.parse( xhr.responseText ) + @notify( + type: 'error' + msg: App.i18n.translateContent( data.message ) + ) + +App.Config.set( 'CalendarSubscriptions', { prio: 4000, name: 'Calendar Subscriptions', parent: '#profile', target: '#profile/calendar_subscriptions', controller: CalendarSubscriptions }, 'NavBarProfile' ) \ No newline at end of file diff --git a/app/assets/javascripts/app/controllers/layout_ref.js.coffee b/app/assets/javascripts/app/controllers/layout_ref.js.coffee index 2a0f005a6..7de2b4b98 100644 --- a/app/assets/javascripts/app/controllers/layout_ref.js.coffee +++ b/app/assets/javascripts/app/controllers/layout_ref.js.coffee @@ -1444,7 +1444,7 @@ class calendarSubscriptionsRef extends App.ControllerContent @render() render: -> - @html App.view('layout_ref/calendar_subscription') + @html App.view('layout_ref/calendar_subscriptions') selectAll: (e) -> e.currentTarget.focus() @@ -1498,7 +1498,7 @@ class calendarSubscriptionsRef extends App.ControllerContent return "#{ items.slice(0, -1).join(', ') } and #{ items[items.length-1] }" -App.Config.set( 'layout_ref/calendar_subscription', calendarSubscriptionsRef, 'Routes' ) +App.Config.set( 'layout_ref/calendar_subscriptions', calendarSubscriptionsRef, 'Routes' ) App.Config.set( 'LayoutRef', { prio: 1700, parent: '#current_user', name: 'Layout Reference', translate: true, target: '#layout_ref', role: [ 'Admin' ] }, 'NavBarRight' ) \ No newline at end of file diff --git a/app/assets/javascripts/app/views/layout_ref/calendar_subscription.jst.eco b/app/assets/javascripts/app/views/layout_ref/calendar_subscriptions.jst.eco similarity index 100% rename from app/assets/javascripts/app/views/layout_ref/calendar_subscription.jst.eco rename to app/assets/javascripts/app/views/layout_ref/calendar_subscriptions.jst.eco diff --git a/app/assets/javascripts/app/views/profile/calendar_subscriptions.jst.eco b/app/assets/javascripts/app/views/profile/calendar_subscriptions.jst.eco new file mode 100644 index 000000000..f7bab0810 --- /dev/null +++ b/app/assets/javascripts/app/views/profile/calendar_subscriptions.jst.eco @@ -0,0 +1,32 @@ + +

<%= @T('Ticket Subscriptions') %>

+ +

<%= @T('See your tickets from within your favorite calendar by adding the following url to your calendar app.') %>

+ +

<%= @T('Combined Url') %>

+ + +

<%= @T('Subscription Settings') %>

+ + + + + + + <% for stateType, options of @preferences: %> + + + <% end %> + +
<%= @T('Status Type') %> + <%= @T('Options') %> + <%= @T('Direct URL') %> +
<%= @translationTable[stateType] %> + + + +
\ No newline at end of file diff --git a/app/assets/stylesheets/zammad.css.scss b/app/assets/stylesheets/zammad.css.scss index c2638e04d..038a81cdb 100644 --- a/app/assets/stylesheets/zammad.css.scss +++ b/app/assets/stylesheets/zammad.css.scss @@ -294,6 +294,7 @@ span[data-tooltip]:hover:before { font-weight: 300; border: none; margin: 5px 6px 0; + vertical-align: baseline; /* calendar_subscriptions.jst.eco */ .icon { vertical-align: middle; @@ -693,7 +694,7 @@ h2.popover-title { h3 { font-size: 13px; - margin: 14px 0 6px; + margin: 20px 0 8px; color: #a9bcc4; font-weight: 200; text-transform: uppercase; @@ -886,6 +887,10 @@ input[type=time] { padding-right: 34px; } + .form-control.is-hidden { + display: none; + } + .form-control[disabled] { cursor: not-allowed; background-color: #fff; @@ -5462,6 +5467,10 @@ output { color: hsl(198,18%,72%); } + .btn--table { + margin: 0; + } + th:not(:last-child), td:not(:last-child) { border-right: none;