diff --git a/app/assets/javascripts/app/controllers/_application_controller_form.coffee b/app/assets/javascripts/app/controllers/_application_controller_form.coffee index bba8696a8..3f5859a30 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_form.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_form.coffee @@ -435,7 +435,7 @@ class App.ControllerForm extends App.Controller else value = parseInt(value) if param[item.name] isnt undefined - if typeof param[item.name] is 'string' + if typeof param[item.name] is 'string' || typeof param[item.name] is 'boolean' || typeof param[item.name] is 'number' param[item.name] = [param[item.name], value] else param[item.name].push value diff --git a/app/assets/javascripts/app/controllers/_settings/area.coffee b/app/assets/javascripts/app/controllers/_settings/area.coffee index 7cb2e6bfe..48215e145 100644 --- a/app/assets/javascripts/app/controllers/_settings/area.coffee +++ b/app/assets/javascripts/app/controllers/_settings/area.coffee @@ -35,10 +35,11 @@ class App.SettingsArea extends App.Controller elements = [] for setting in settings - if setting.preferences.controller && App[setting.preferences.controller] - item = new App[setting.preferences.controller](setting: setting) - else - item = new App.SettingsAreaItem(setting: setting) - elements.push item.el + if setting.preferences.hidden isnt true + if setting.preferences.controller && App[setting.preferences.controller] + item = new App[setting.preferences.controller](setting: setting) + else + item = new App.SettingsAreaItem(setting: setting) + elements.push item.el @html elements diff --git a/app/assets/javascripts/app/controllers/_settings/area_item.coffee b/app/assets/javascripts/app/controllers/_settings/area_item.coffee index 2f54d0c3b..1685cc292 100644 --- a/app/assets/javascripts/app/controllers/_settings/area_item.coffee +++ b/app/assets/javascripts/app/controllers/_settings/area_item.coffee @@ -1,4 +1,5 @@ class App.SettingsAreaItem extends App.Controller + template: 'settings/item' events: 'submit form': 'update' @@ -21,8 +22,12 @@ class App.SettingsAreaItem extends App.Controller # form @configure_attributes = @setting.options['form'] + for attribute in @configure_attributes + if attribute.tag is 'boolean' + attribute.translate = true + # item - @html App.view('settings/item')( + @html App.view(@template)( setting: @setting ) diff --git a/app/assets/javascripts/app/controllers/_settings/area_ticket_hook_position.coffee b/app/assets/javascripts/app/controllers/_settings/area_ticket_hook_position.coffee new file mode 100644 index 000000000..10d00b739 --- /dev/null +++ b/app/assets/javascripts/app/controllers/_settings/area_ticket_hook_position.coffee @@ -0,0 +1,2 @@ +class App.SettingsAreaTicketHookPosition extends App.SettingsAreaItem + template: 'settings/ticket_hook_position' diff --git a/app/assets/javascripts/app/controllers/_settings/area_ticket_number.coffee b/app/assets/javascripts/app/controllers/_settings/area_ticket_number.coffee new file mode 100644 index 000000000..70ccfb563 --- /dev/null +++ b/app/assets/javascripts/app/controllers/_settings/area_ticket_number.coffee @@ -0,0 +1,132 @@ +class App.SettingsAreaTicketNumber extends App.Controller + events: + 'submit form': 'update' + + constructor: -> + super + @render() + + render: => + + # defaults + directValue = 0 + for item in @setting.options['form'] + directValue += 1 + if directValue > 1 + for item in @setting.options['form'] + item['default'] = @setting.state_current.value[item.name] + else + item['default'] = @setting.state_current.value + + @map = + 'Ticket::Number::Increment': 'ticket_number_increment' + 'Ticket::Number::Date': 'ticket_number_date' + + # form + @configure_attributes = @setting.options['form'] + + # item + @html App.view('settings/ticket_number')( + setting: @setting + ) + + togglePreferences = (params, attribute, @attributes, classname, form) => + return if attribute.name isnt 'ticket_number' + @showPreferences(params.ticket_number) + + updatePreview = (params, attribute) => + paramsParent = @formParam(@$('.js-form')) + number = "#{App.Config.get('ticket_hook')}???" + if paramsParent.ticket_number is 'Ticket::Number::Increment' + paramsItem = @paramsPreferences('Ticket::Number::Increment') + number = "#{App.Config.get('ticket_hook')}#{App.Config.get('system_id')}" + counter = '1' + if paramsItem.min_size + minSize = parseInt(paramsItem.min_size) + if paramsItem.checksum + minSize -= 1 + if minSize > 1 + for itemCounter in [2 .. minSize] + counter = "0#{counter}" + number += counter + if paramsItem.checksum + number += '9' + else if paramsParent.ticket_number is 'Ticket::Number::Date' + paramsItem = @paramsPreferences('Ticket::Number::Date') + current = new Date() + currentDay = current.getDate() + currentMonth = current.getMonth() + 1 + currentYear = current.getFullYear() + + number = "#{App.Config.get('ticket_hook')}#{currentYear}#{currentMonth}#{currentDay}#{App.Config.get('system_id')}001" + if paramsItem.checksum + number += '9' + + @$('.js-preview').text(number) + + new App.ControllerForm( + el: @el.find('.js-form'), + model: { configure_attributes: @configure_attributes, className: '' } + autofocus: false + handlers: [togglePreferences, updatePreview] + ) + + # preferences + preferences_settings = @setting.preferences.settings_included || ['ticket_number_increment', 'ticket_number_date'] + for preferences_setting in preferences_settings + setting = App.Setting.findByAttribute('name', preferences_setting) + value = App.Setting.get(preferences_setting) + el = $(App.view("settings/#{preferences_setting}")( + setting: setting + )) + new App.ControllerForm( + el: el.find('.js-formItem'), + model: { configure_attributes: setting.options['form'], className: '' } + autofocus: false + params: value + handlers: [updatePreview] + ) + @$('.js-formPreferences').append(el) + + # show current preferences + @showPreferences(item['default']) + + showPreferences: (name) => + @$('.js-formPreferencesItem').addClass('hidden') + @$(".js-formPreferencesItem[data-backend=\"#{name}\"]").removeClass('hidden') + + paramsPreferences: (name) => + @formParam(@$(".js-formPreferencesItem[data-backend=\"#{name}\"] form")) + + update: (e) => + e.preventDefault() + @formDisable(@$('.js-form')) + params = @formParam(@$('.js-form')) + if params.ticket_number + paramsItem = @paramsPreferences(params.ticket_number) + setting_name = @map[params.ticket_number] + if setting_name && paramsItem + App.Setting.set(setting_name, paramsItem) + + @setting['state_current'] = {value: params.ticket_number} + ui = @ + @setting.save( + done: => + ui.formEnable(e) + App.Event.trigger 'notify', { + type: 'success' + msg: App.i18n.translateContent('Update successful!') + timeout: 2000 + } + + # rerender ui || get new collections and session data + App.Setting.preferencesPost(@setting) + + fail: (settings, details) -> + ui.formEnable(e) + App.Event.trigger 'notify', { + type: 'error' + msg: App.i18n.translateContent(details.error_human || details.error || 'Unable to update object!') + timeout: 2000 + } + ) diff --git a/app/assets/javascripts/app/views/settings/item.jst.eco b/app/assets/javascripts/app/views/settings/item.jst.eco index 88a89dc98..752a44ed3 100644 --- a/app/assets/javascripts/app/views/settings/item.jst.eco +++ b/app/assets/javascripts/app/views/settings/item.jst.eco @@ -1,6 +1,6 @@

<%- @T(@setting.title) %>

-

<%- @RichText(@setting.description) %>

+

<%- @T(@setting.description) %>

diff --git a/app/assets/javascripts/app/views/settings/ticket_hook_position.jst.eco b/app/assets/javascripts/app/views/settings/ticket_hook_position.jst.eco new file mode 100644 index 000000000..a2a856b1d --- /dev/null +++ b/app/assets/javascripts/app/views/settings/ticket_hook_position.jst.eco @@ -0,0 +1,14 @@ + +

<%- @T(@setting.title) %>

+

+ <%- @T('The format of the subject.') %> +

+
+
+ +
+ \ No newline at end of file diff --git a/app/assets/javascripts/app/views/settings/ticket_number.jst.eco b/app/assets/javascripts/app/views/settings/ticket_number.jst.eco new file mode 100644 index 000000000..6c910d11e --- /dev/null +++ b/app/assets/javascripts/app/views/settings/ticket_number.jst.eco @@ -0,0 +1,19 @@ +
+

<%- @T(@setting.title) %>

+

+ <%- @T('Selects the ticket number generator module.') %> +

    +
  • <%- @T('|Increment| increments the ticket number, the SystemID and the counter are used with "SystemID.Counter" format (e.g. 1010138, 1010139).') %> +
  • <%- @T('With |Date| the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like "Year.Month.Day.SystemID.Counter" (e.g. 201206231010138, 201206231010139).') %> +
+
+
+
+
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/app/assets/javascripts/app/views/settings/ticket_number_date.jst.eco b/app/assets/javascripts/app/views/settings/ticket_number_date.jst.eco new file mode 100644 index 000000000..aa5706164 --- /dev/null +++ b/app/assets/javascripts/app/views/settings/ticket_number_date.jst.eco @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/app/assets/javascripts/app/views/settings/ticket_number_increment.jst.eco b/app/assets/javascripts/app/views/settings/ticket_number_increment.jst.eco new file mode 100644 index 000000000..b203fbea3 --- /dev/null +++ b/app/assets/javascripts/app/views/settings/ticket_number_increment.jst.eco @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/app/models/ticket/number.rb b/app/models/ticket/number.rb index 4dcbba8b6..6617da1b0 100644 --- a/app/models/ticket/number.rb +++ b/app/models/ticket/number.rb @@ -20,7 +20,7 @@ returns # generate number 49_999.times { number = adapter.generate - ticket = Ticket.find_by( number: number ) + ticket = Ticket.find_by(number: number) return number if !ticket } raise "Can't generate new ticket number!" diff --git a/db/seeds.rb b/db/seeds.rb index 52b61445c..dfb5db876 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1137,10 +1137,10 @@ Setting.create_if_not_exists( title: 'Ticket Hook Position', name: 'ticket_hook_position', area: 'Ticket::Base', - description: "@T('The format of the subject.') -* @T('**Right** means **Some Subject [Ticket#12345]**') -* @T('**Left** means **[Ticket#12345] Some Subject**') -* @T('**None** means **Some Subject** (without ticket number). In the last case you should enable *postmaster_follow_up_search_in* to recognize followups based on email headers and/or body.')", + description: "The format of the subject. +* **Right** means **Some Subject [Ticket#12345]** +* **Left** means **[Ticket#12345] Some Subject** +* **None** means **Some Subject** (without ticket number). In the last case you should enable *postmaster_follow_up_search_in* to recognize followups based on email headers and/or body.", options: { form: [ { @@ -1148,6 +1148,7 @@ Setting.create_if_not_exists( null: true, name: 'ticket_hook_position', tag: 'select', + translate: true, options: { 'left' => 'left', 'right' => 'right', @@ -1158,6 +1159,7 @@ Setting.create_if_not_exists( }, state: 'right', preferences: { + controller: 'SettingsAreaTicketHookPosition', permission: ['admin.ticket'], }, frontend: false @@ -1166,11 +1168,9 @@ Setting.create_if_not_exists( title: 'Ticket Number Format', name: 'ticket_number', area: 'Ticket::Number', - description: "@T('Selects the ticket number generator module.') -* @T('**Increment** increments the ticket number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139).') -* @T('With **Date** the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139).') - -@T('With param 'Checksum => true' the counter will be appended as checksum to the string. The format looks like SystemID.Counter.CheckSum (e. g. 10101384, 10101392) or Year.Month.Day.SystemID.Counter.CheckSum (e.g. 2012070110101520, 2012070110101535).')", + description: "Selects the ticket number generator module. +* **Increment** increments the ticket number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139). +* With **Date** the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139).", options: { form: [ { @@ -1178,6 +1178,7 @@ Setting.create_if_not_exists( null: true, name: 'ticket_number', tag: 'select', + translate: true, options: { 'Ticket::Number::Increment' => 'Increment (SystemID.Counter)', 'Ticket::Number::Date' => 'Date (Year.Month.Day.SystemID.Counter)', @@ -1187,6 +1188,8 @@ Setting.create_if_not_exists( }, state: 'Ticket::Number::Increment', preferences: { + settings_included: %w(ticket_number_increment ticket_number_date), + controller: 'SettingsAreaTicketNumber', permission: ['admin.ticket'], }, frontend: false @@ -1244,6 +1247,7 @@ Setting.create_if_not_exists( }, preferences: { permission: ['admin.ticket'], + hidden: true, }, frontend: false ) @@ -1267,10 +1271,11 @@ Setting.create_if_not_exists( ], }, state: { - checksum: false, + checksum: false }, preferences: { permission: ['admin.ticket'], + hidden: true, }, frontend: false )