Next step of email reply.
This commit is contained in:
parent
1d520f3b47
commit
575a29dee5
1 changed files with 109 additions and 37 deletions
|
@ -816,6 +816,22 @@ class Edit extends App.Controller
|
||||||
if @defaults.body or @isIE10()
|
if @defaults.body or @isIE10()
|
||||||
@open_textarea(null, true)
|
@open_textarea(null, true)
|
||||||
|
|
||||||
|
@bind(
|
||||||
|
'ui::ticket::setArticleType'
|
||||||
|
(data) =>
|
||||||
|
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 + '"]').text(value)
|
||||||
|
else
|
||||||
|
@$('[name="' + key + '"]').val(value)
|
||||||
|
)
|
||||||
|
|
||||||
isIE10: ->
|
isIE10: ->
|
||||||
Function('/*@cc_on return document.documentMode===10@*/')()
|
Function('/*@cc_on return document.documentMode===10@*/')()
|
||||||
|
|
||||||
|
@ -1187,9 +1203,9 @@ class ArticleView extends App.Controller
|
||||||
'click [data-type=internal]': 'public_internal'
|
'click [data-type=internal]': 'public_internal'
|
||||||
'click .show_toogle': 'show_toogle'
|
'click .show_toogle': 'show_toogle'
|
||||||
'click [data-type=reply]': 'reply'
|
'click [data-type=reply]': 'reply'
|
||||||
|
'click [data-type=replyAll]': 'replyAll'
|
||||||
'click .text-bubble': 'toggle_meta'
|
'click .text-bubble': 'toggle_meta'
|
||||||
'click .text-bubble a': 'stopPropagation'
|
'click .text-bubble a': 'stopPropagation'
|
||||||
# 'click [data-type=reply-all]': 'replyall'
|
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
@ -1303,7 +1319,7 @@ class ArticleView extends App.Controller
|
||||||
metaTop.removeClass('hide')
|
metaTop.removeClass('hide')
|
||||||
|
|
||||||
# balance out the top meta height by scrolling down
|
# balance out the top meta height by scrolling down
|
||||||
article.velocity("scroll",
|
article.velocity("scroll",
|
||||||
container: article.scrollParent()
|
container: article.scrollParent()
|
||||||
offset: -article.offset().top + metaTop.outerHeight()
|
offset: -article.offset().top + metaTop.outerHeight()
|
||||||
duration: animSpeed
|
duration: animSpeed
|
||||||
|
@ -1358,56 +1374,103 @@ class ArticleView extends App.Controller
|
||||||
# update textarea size
|
# update textarea size
|
||||||
@ui.el.find('[name="body"]').trigger('change')
|
@ui.el.find('[name="body"]').trigger('change')
|
||||||
|
|
||||||
reply: (e) =>
|
replyAll: (e) =>
|
||||||
|
@reply(e, true)
|
||||||
|
|
||||||
|
reply: (e, all = false) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
|
||||||
|
# get reference article
|
||||||
article_id = $(e.target).parents('[data-id]').data('id')
|
article_id = $(e.target).parents('[data-id]').data('id')
|
||||||
article = App.TicketArticle.find( article_id )
|
article = App.TicketArticle.fullLocal( article_id )
|
||||||
type = App.TicketArticleType.find( article.type_id )
|
type = App.TicketArticleType.find( article.type_id )
|
||||||
customer = App.User.find( article.created_by_id )
|
customer = App.User.find( article.created_by_id )
|
||||||
|
|
||||||
|
@ui.el.find('.article-add').ScrollTo()
|
||||||
|
|
||||||
# update form
|
# update form
|
||||||
@checkIfSignatureIsNeeded(type)
|
@checkIfSignatureIsNeeded(type)
|
||||||
|
|
||||||
# preselect article type
|
|
||||||
@ui.el.find('[name="type_id"]').find('option:selected').removeAttr('selected')
|
|
||||||
@ui.el.find('[name="type_id"]').find('[value="' + type.id + '"]').attr('selected',true)
|
|
||||||
@ui.el.find('[name="type_id"]').trigger('change')
|
|
||||||
|
|
||||||
# empty form
|
# empty form
|
||||||
#@ui.el.find('[name="to"]').val('')
|
articleNew = {
|
||||||
#@ui.el.find('[name="cc"]').val('')
|
to: ''
|
||||||
#@ui.el.find('[name="subject"]').val('')
|
cc: ''
|
||||||
@ui.el.find('[name="in_reply_to"]').val('')
|
body: ''
|
||||||
|
in_reply_to: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
#@ui.el.find('[name="in_reply_to"]').val('')
|
||||||
|
|
||||||
if article.message_id
|
if article.message_id
|
||||||
@ui.el.find('[name="in_reply_to"]').val(article.message_id)
|
articleNew.in_reply_to = article.message_id
|
||||||
|
|
||||||
if type.name is 'twitter status'
|
if type.name is 'twitter status'
|
||||||
|
|
||||||
# set to in body
|
# set to in body
|
||||||
to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid
|
to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid
|
||||||
@ui.el.find('[name="body"]').val('@' + to)
|
articleNew.body = '@' + to
|
||||||
|
|
||||||
else if type.name is 'twitter direct-message'
|
else if type.name is 'twitter direct-message'
|
||||||
|
|
||||||
# show to
|
# show to
|
||||||
to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid
|
to = customer.accounts['twitter'].username || customer.accounts['twitter'].uid
|
||||||
@ui.el.find('[name="to"]').val(to)
|
articleNew.to = to
|
||||||
|
|
||||||
else if type.name is 'email'
|
else if type.name is 'email'
|
||||||
@ui.el.find('[name="to"]').val(article.from)
|
if article.sender.name is 'Agent'
|
||||||
|
articleNew.to = article.to
|
||||||
|
else
|
||||||
|
articleNew.to = article.from
|
||||||
|
|
||||||
|
# filter for uniq recipients
|
||||||
|
recipientAddresses = {}
|
||||||
|
recipient = emailAddresses.parseAddressList(articleNew.to)
|
||||||
|
if recipient && recipient[0]
|
||||||
|
recipientAddresses[ recipient[0].address.toString().toLowerCase() ] = true
|
||||||
|
if all
|
||||||
|
addAddresses = (lineNew, addressLine) ->
|
||||||
|
localAddresses = App.EmailAddress.all()
|
||||||
|
recipients = emailAddresses.parseAddressList(addressLine)
|
||||||
|
if recipients
|
||||||
|
for recipient in recipients
|
||||||
|
if recipient.address
|
||||||
|
|
||||||
|
# check if addess is not local
|
||||||
|
localAddess = false
|
||||||
|
for address in localAddresses
|
||||||
|
if recipient.address.toString().toLowerCase() == address.email.toString().toLowerCase()
|
||||||
|
localAddess = true
|
||||||
|
if !localAddess
|
||||||
|
|
||||||
|
# filter for uniq recipients
|
||||||
|
if !recipientAddresses[ recipient.address.toString().toLowerCase() ]
|
||||||
|
recipientAddresses[ recipient.address.toString().toLowerCase() ] = true
|
||||||
|
|
||||||
|
# add recipient
|
||||||
|
if lineNew
|
||||||
|
lineNew = lineNew + ', '
|
||||||
|
lineNew = lineNew + recipient.address
|
||||||
|
lineNew
|
||||||
|
|
||||||
|
if article.from
|
||||||
|
articleNew.cc = addAddresses(articleNew.cc, article.from)
|
||||||
|
if article.to
|
||||||
|
articleNew.cc = addAddresses(articleNew.cc, article.to)
|
||||||
|
if article.cc
|
||||||
|
articleNew.cc = addAddresses(articleNew.cc, article.cc)
|
||||||
|
|
||||||
# add quoted text if needed
|
# add quoted text if needed
|
||||||
selectedText = App.ClipBoard.getSelected()
|
selectedText = App.ClipBoard.getSelected()
|
||||||
|
console.log('selectedText', selectedText)
|
||||||
if selectedText
|
if selectedText
|
||||||
body = @ui.el.find('[name="body"]').val() || ''
|
body = @ui.el.find('[data-name="body"]').text() || ''
|
||||||
selectedText = selectedText.replace /^(.*)$/mg, (match) =>
|
selectedText = selectedText.replace /^(.*)$/mg, (match) =>
|
||||||
'> ' + match
|
'> ' + match
|
||||||
body = selectedText + "\n" + body
|
body = selectedText + "\n" + body
|
||||||
@ui.el.find('[name="body"]').val(body)
|
articleNew.body = body
|
||||||
|
|
||||||
|
App.Event.trigger('ui::ticket::setArticleType', { ticket: @ticket, type: type, article: articleNew } )
|
||||||
|
|
||||||
# update textarea size
|
|
||||||
@ui.el.find('[name="body"]').trigger('change')
|
|
||||||
|
|
||||||
class Article extends App.Controller
|
class Article extends App.Controller
|
||||||
constructor: ->
|
constructor: ->
|
||||||
|
@ -1483,25 +1546,34 @@ class Article extends App.Controller
|
||||||
type: 'internal'
|
type: 'internal'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
if @article.type.name is 'note'
|
#if @article.type.name is 'note'
|
||||||
# actions.push []
|
# actions.push []
|
||||||
else
|
if @article.type.name is 'email'
|
||||||
if @article.sender.name is 'Customer'
|
actions.push {
|
||||||
|
name: 'reply'
|
||||||
|
type: 'reply'
|
||||||
|
href: '#'
|
||||||
|
}
|
||||||
|
recipients = []
|
||||||
|
if @article.to
|
||||||
|
localRecipients = emailAddresses.parseAddressList(@article.to)
|
||||||
|
if localRecipients
|
||||||
|
recipients = recipients.concat localRecipients
|
||||||
|
if @article.cc
|
||||||
|
localRecipients = emailAddresses.parseAddressList(@article.cc)
|
||||||
|
if localRecipients
|
||||||
|
recipients = recipients.concat localRecipients
|
||||||
|
if recipients.length > 0
|
||||||
actions.push {
|
actions.push {
|
||||||
name: 'reply'
|
name: 'reply all'
|
||||||
type: 'reply'
|
type: 'replyAll'
|
||||||
href: '#'
|
href: '#'
|
||||||
}
|
}
|
||||||
# actions.push {
|
actions.push {
|
||||||
# name: 'reply all'
|
name: 'split'
|
||||||
# type: 'reply-all'
|
type: 'split'
|
||||||
# href: '#'
|
href: '#ticket/create/' + @article.ticket_id + '/' + @article.id
|
||||||
# }
|
}
|
||||||
actions.push {
|
|
||||||
name: 'split'
|
|
||||||
type: 'split'
|
|
||||||
href: '#ticket/create/' + @article.ticket_id + '/' + @article.id
|
|
||||||
}
|
|
||||||
@article.actions = actions
|
@article.actions = actions
|
||||||
|
|
||||||
attachments: ->
|
attachments: ->
|
||||||
|
|
Loading…
Reference in a new issue