Added signature support to new and zoom ticket.

This commit is contained in:
Martin Edenhofer 2015-01-12 23:15:39 +01:00
parent f4341f5c4b
commit 1fdc985816
5 changed files with 200 additions and 60 deletions

View file

@ -3,10 +3,10 @@ class App.TicketCreate extends App.Controller
'.tabsSidebar' : 'sidebar'
events:
'click .type-tabs .tab': 'changeFormType'
'submit form': 'submit'
'click .submit': 'submit'
'click .cancel': 'cancel'
'click .type-tabs .tab': 'changeFormType'
'submit form': 'submit'
'click .submit': 'submit'
'click .cancel': 'cancel'
constructor: (params) ->
super
@ -87,6 +87,9 @@ class App.TicketCreate extends App.Controller
# update form
@el.find('[name="formSenderType"]').val(type)
# force changing signature
@el.find('[name="group_id"]').trigger('change')
meta: =>
text = ''
if @articleAttributes
@ -167,10 +170,10 @@ class App.TicketCreate extends App.Controller
a = App.TicketArticle.find( params.article_id )
# reset owner
t.owner_id = 0
t.customer_id_autocompletion = a.from
t.subject = a.subject || t.title
t.body = a.body
t.owner_id = 0
t.customer_id_completion = a.from
t.subject = a.subject || t.title
t.body = a.body
# render page
@render( options: t )
@ -191,10 +194,10 @@ class App.TicketCreate extends App.Controller
@form_id = App.ControllerForm.formId()
@html App.view('agent_ticket_create')(
head: 'New Ticket'
agent: @isRole('Agent')
admin: @isRole('Admin')
form_id: @form_id
head: 'New Ticket'
agent: @isRole('Agent')
admin: @isRole('Admin')
form_id: @form_id
)
formChanges = (params, attribute, attributes, classname, form, ui) =>
@ -220,6 +223,35 @@ class App.TicketCreate extends App.Controller
# replace new option list
form.find('[name="' + fieldNameToChange + '"]').closest('.form-group').replaceWith( newElement )
signatureChanges = (params, attribute, attributes, classname, form, ui) =>
if attribute && attribute.name is 'group_id'
signature = undefined
if params['group_id']
group = App.Group.find( params['group_id'] )
if group && group.signature_id
signature = App.Signature.find( group.signature_id )
# check if signature need to be added
type = @$('[name="formSenderType"]').val()
if signature isnt undefined && signature.body && type is 'email-out'
signatureFinished = App.Utils.text2html(
App.Utils.replaceTags( signature.body, { user: App.Session.get() } )
)
# get current body
body = @$('[data-name="body"]').html() || ''
if App.Utils.signatureCheck( body, signatureFinished )
if !App.Utils.lastLineEmpty(body)
body = body + '<br>'
body = body + "<div data-signature=\"true\" data-signature-id=\"#{signature.id}\">#{signatureFinished}</div>"
@$('[data-name="body"]').html(body)
# remove old signature
else
@$('[data-name="body"]').find("[data-signature=true]").remove()
new App.ControllerForm(
el: @el.find('.ticket-form-top')
form_id: @form_id
@ -228,7 +260,8 @@ class App.TicketCreate extends App.Controller
events:
'change [name=customer_id]': @localUserInfo
handlers: [
formChanges
formChanges,
signatureChanges,
]
filter: @form_meta.filter
autofocus: true
@ -236,21 +269,22 @@ class App.TicketCreate extends App.Controller
)
new App.ControllerForm(
el: @el.find('.article-form-top')
form_id: @form_id
model: App.TicketArticle
screen: 'create_top'
params: params
el: @el.find('.article-form-top')
form_id: @form_id
model: App.TicketArticle
screen: 'create_top'
params: params
)
new App.ControllerForm(
el: @el.find('.ticket-form-middle')
form_id: @form_id
model: App.Ticket
screen: 'create_middle'
el: @el.find('.ticket-form-middle')
form_id: @form_id
model: App.Ticket
screen: 'create_middle'
events:
'change [name=customer_id]': @localUserInfo
handlers: [
formChanges
formChanges,
signatureChanges,
]
filter: @form_meta.filter
params: params
@ -264,7 +298,8 @@ class App.TicketCreate extends App.Controller
events:
'change [name=customer_id]': @localUserInfo
handlers: [
formChanges
formChanges,
signatureChanges,
]
filter: @form_meta.filter
params: params
@ -330,7 +365,7 @@ class App.TicketCreate extends App.Controller
if sender.name is 'Customer'
params['article'] = {
to: (group && group.name) || ''
from: params.customer_id_autocompletion
from: params.customer_id_completion
cc: params.cc
subject: params.subject
body: params.body
@ -342,7 +377,7 @@ class App.TicketCreate extends App.Controller
else
params['article'] = {
from: (group && group.name) || ''
to: params.customer_id_autocompletion
to: params.customer_id_completion
cc: params.cc
subject: params.subject
body: params.body

View file

@ -18,10 +18,9 @@ class App.TicketZoom extends App.Controller
@navupdate '#'
@form_meta = undefined
@ticket_id = params.ticket_id
@article_id = params.article_id
@signature = undefined
@form_meta = undefined
@ticket_id = params.ticket_id
@article_id = params.article_id
@key = 'ticket::' + @ticket_id
cache = App.Store.get( @key )
@ -137,9 +136,6 @@ class App.TicketZoom extends App.Controller
# get edit form attributes
@form_meta = data.form_meta
# get signature
@signature = data.signature
# load assets
App.Collection.loadAssets( data.assets )
@ -860,14 +856,15 @@ class Edit extends App.Controller
if data.ticket.id is @ticket.id
#@setArticleType(data.type.name)
# preselect article type
@setArticleType( 'email' )
@open_textarea(null, true)
for key, value of data.article
if key is 'body'
@$('[data-name="' + key + '"]').html(value)
else
@$('[name="' + key + '"]').val(value)
# preselect article type
@setArticleType( 'email' )
)
isIE10: ->
@ -905,7 +902,7 @@ class Edit extends App.Controller
@$('[data-name="body"]').ce({
mode: 'richtext'
multiline: true
maxlength: 2500
maxlength: 5000
})
html5Upload.initialize(
@ -1075,10 +1072,29 @@ class Edit extends App.Controller
# show/hide attributes
for articleType in @articleTypes
if articleType.name is type
@$(".form-group").addClass('hide')
@$('.form-group').addClass('hide')
for name in articleType.attributes
@$("[name=#{name}]").closest('.form-group').removeClass('hide')
# check if signature need to be added
body = @$('[data-name="body"]').html() || ''
signature = undefined
if @ticket.group.signature_id
signature = App.Signature.find( @ticket.group.signature_id )
if signature && signature.body && @type is 'email'
signatureFinished = App.Utils.text2html(
App.Utils.replaceTags( signature.body, { user: App.Session.get(), ticket: @ticket } )
)
if App.Utils.signatureCheck( body, signatureFinished )
if !App.Utils.lastLineEmpty(body)
body = body + '<br>'
body = body + "<div data-signature=\"true\" data-signature-id=\"#{signature.id}\">#{signatureFinished}</div>"
@$('[data-name="body"]').html(body)
# remove old signature
else
@$('[data-name="body"]').find("[data-signature=true]").remove()
detect_empty_textarea: =>
if !@textarea.text().trim()
@add_textarea_catcher()
@ -1488,12 +1504,6 @@ class ArticleView extends App.Controller
# get current body
body = @ui.el.find('[data-name="body"]').html() || ''
# check if signature need to be added
if @ui.signature && @ui.signature.body && type.name is 'email'
signature = App.Utils.text2html( @ui.signature.body )
if App.Utils.signatureCheck( body, signature )
body = body + signature
# check if quote need to be added
selectedText = App.ClipBoard.getSelected()
if selectedText

View file

@ -166,3 +166,27 @@ class App.Utils
else
true
# textReplaced = App.Utils.replaceTags( template, { user: { firstname: 'Bob', lastname: 'Smith' } } )
@replaceTags: (template, objects) ->
template = template.replace( /#\{\s{0,2}(.+?)\s{0,2}\}/g, ( index, key ) ->
levels = key.split(/\./)
dataRef = objects
for level in levels
if dataRef[level]
dataRef = dataRef[level]
if typeof dataRef is 'function'
value = dataRef()
else if typeof dataRef is 'string'
value = dataRef
else
value = ''
#console.log( "tag replacement #{key}, #{value} env: ", objects)
value
)
# true|false = App.Utils.lastLineEmpty( message )
@lastLineEmpty: (message) ->
messageCleanup = message.replace(/>\s+</g, '><').replace(/(\n|\r|\t)/g, '').trim()
return true if messageCleanup.match(/<(br|\s+?|\/)>$/im)
return true if messageCleanup.match(/<div(|\s.+?)><\/div>$/im)
false

View file

@ -228,22 +228,6 @@ class TicketsController < ApplicationController
ticket = Ticket.find( params[:id] )
return if !ticket_permission( ticket )
# get signature
signature = {}
if ticket.group.signature
signature = ticket.group.signature.attributes
# replace tags
signature['body'] = NotificationFactory.build(
:locale => current_user.preferences[:locale],
:string => signature['body'],
:objects => {
:ticket => ticket,
:user => current_user,
}
)
end
# get attributes to update
attributes_to_change = Ticket::ScreenOptions.attributes_to_change( :user => current_user, :ticket => ticket )
@ -292,7 +276,6 @@ class TicketsController < ApplicationController
render :json => {
:ticket_id => ticket.id,
:ticket_article_ids => article_ids,
:signature => signature,
:assets => assets,
:links => link_list,
:tags => tags,

View file

@ -439,4 +439,92 @@ test( "check signature", function() {
});
// replace tags
test( "check replace tags", function() {
var message = "<div>#{user.firstname} #{user.lastname}</div>"
var result = '<div>Bob Smith</div>'
var data = {
user: {
firstname: 'Bob',
lastname: 'Smith',
},
}
var verify = App.Utils.replaceTags( message, data )
equal( verify, result )
message = "<div>#{user.firstname} #{user.lastname}</div>"
result = '<div>Bob Smith</div>'
data = {
user: {
firstname: function() { return 'Bob' },
lastname: function() { return 'Smith' },
},
}
verify = App.Utils.replaceTags( message, data )
equal( verify, result )
message = "<div>#{user.firstname} #{user.lastname}</div>"
result = '<div>Bob </div>'
data = {
user: {
firstname: 'Bob',
},
}
verify = App.Utils.replaceTags( message, data )
equal( verify, result )
});
// check if last line is a empty line
test( "check if last line is a empty line", function() {
var message = "123"
var result = false
var verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div>123</div>"
result = false
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<p><div>123 </div></p>"
result = false
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div></div>"
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div class=\"some_class\"></div>"
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div class=\"some_class\"></div> "
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div class=\"some_class\"></div> \n \n\t"
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div class=\"some_class\"> </div> \n \n\t"
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
message = "<div class=\"some_class\"\n> \n</div> \n \n\t"
result = true
verify = App.Utils.lastLineEmpty( message )
equal( verify, result, message )
});
}