Просмотр исходного кода

Fixed #2132 by putting the I-doit objects in ticket preferences by creating the ticket.

Martin Edenhofer 6 лет назад
Родитель
Сommit
093c9e7621

+ 15 - 0
.gitlab-ci.yml

@@ -1055,3 +1055,18 @@ test:browser:integration:zendesk_chrome:
     - script/build/test_startup.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 1
     - ruby -I test/ test/integration/zendesk_import_browser_test.rb || script/build/test_shutdown.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 1 1
     - script/build/test_shutdown.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 0 1
+
+test:browser:integration:idoit_chrome:
+  stage: browser-integration
+  dependencies:
+    - browser:build
+  tags:
+    - browser
+  script:
+    - export BROWSER=chrome
+    - export BROWSER_URL=http://$IP:$BROWSER_PORT
+    - RAILS_ENV=test rake db:create
+    - cp contrib/auto_wizard_test.json auto_wizard.json
+    - script/build/test_startup.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 1
+    - ruby -I test/ test/integration/idoit_browser_test.rb || script/build/test_shutdown.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 1 1
+    - script/build/test_shutdown.sh $RAILS_ENV $BROWSER_PORT $WS_PORT 0 1

+ 4 - 0
app/assets/javascripts/app/controllers/agent_ticket_create.coffee

@@ -508,6 +508,10 @@ class App.TicketCreate extends App.Controller
           if !confirm(App.i18n.translateContent('You use %s in text but no attachment is attached. Do you want to continue?', matchingWord))
             return
 
+    # add sidebar params
+    if @sidebarWidget && @sidebarWidget.postParams
+      @sidebarWidget.postParams(ticket: ticket)
+
     # disable form
     @submitDisable(e)
     ui = @

+ 5 - 0
app/assets/javascripts/app/controllers/agent_ticket_create/sidebar.coffee

@@ -13,6 +13,11 @@ class App.TicketCreateSidebar extends App.Controller
       if backend && backend.commit
         backend.commit(args)
 
+  postParams: (args) =>
+    for key, backend of @sidebarBackends
+      if backend && backend.postParams
+        backend.postParams(args)
+
   render: (params) =>
     if params
       @params = params

+ 4 - 0
app/assets/javascripts/app/controllers/ticket_zoom.coffee

@@ -839,6 +839,10 @@ class App.TicketZoom extends App.Controller
 
       ticket.article = article
 
+    # add sidebar params
+    if @sidebarWidget && @sidebarWidget.postParams
+      @sidebarWidget.postParams(ticket: ticket)
+
     if !ticket.article
       @submitPost(e, ticket, macro)
       return

+ 5 - 0
app/assets/javascripts/app/controllers/ticket_zoom/sidebar.coffee

@@ -14,6 +14,11 @@ class App.TicketZoomSidebar extends App.ObserverController
       if backend && backend.commit
         backend.commit(args)
 
+  postParams: (args) =>
+    for key, backend of @sidebarBackends
+      if backend && backend.postParams
+        backend.postParams(args)
+
   render: (ticket) =>
     @sidebarBackends ||= {}
     @sidebarItems = []

+ 6 - 5
app/assets/javascripts/app/controllers/ticket_zoom/sidebar_idoit.coffee

@@ -102,13 +102,14 @@ class SidebarIdoit extends App.Controller
       @updateTicket(@ticket.id, @objectIds)
     @showObjectsContent()
 
-  commit: (args) =>
-    return if @ticket && @ticket.id
+  postParams: (args) =>
+    return if !args.ticket
+    return if args.ticket.created_at
     return if !@objectIds
     return if _.isEmpty(@objectIds)
-    return if !args
-    return if !args.ticket_id
-    @updateTicket(args.ticket_id, @objectIds)
+    args.ticket.preferences ||= {}
+    args.ticket.preferences.idoit ||= {}
+    args.ticket.preferences.idoit.object_ids = @objectIds
 
   updateTicket: (ticket_id, objectIds, callback) =>
     App.Ajax.request(

+ 1 - 1
app/assets/javascripts/app/models/ticket.coffee

@@ -1,5 +1,5 @@
 class App.Ticket extends App.Model
-  @configure 'Ticket', 'number', 'title', 'group_id', 'owner_id', 'customer_id', 'state_id', 'priority_id', 'article', 'tags', 'links', 'updated_at'
+  @configure 'Ticket', 'number', 'title', 'group_id', 'owner_id', 'customer_id', 'state_id', 'priority_id', 'article', 'tags', 'links', 'updated_at', 'preferences'
   @extend Spine.Model.Ajax
   @url: @apiPath + '/tickets'
   @configure_attributes = [

+ 6 - 4
app/controllers/integration/idoit_controller.rb

@@ -38,10 +38,12 @@ class Integration::IdoitController < ApplicationController
   def update
     params[:object_ids] ||= []
     ticket = Ticket.find(params[:ticket_id])
-    access!(ticket, 'read')
-    ticket.preferences[:idoit] ||= {}
-    ticket.preferences[:idoit][:object_ids] = Array(params[:object_ids]).uniq
-    ticket.save!
+    ticket.with_lock do
+      access!(ticket, 'read')
+      ticket.preferences[:idoit] ||= {}
+      ticket.preferences[:idoit][:object_ids] = Array(params[:object_ids]).uniq
+      ticket.save!
+    end
 
     render json: {
       result: 'ok',

+ 3 - 0
app/controllers/ticket_articles_controller.rb

@@ -112,6 +112,9 @@ class TicketArticlesController < ApplicationController
     clean_params = Ticket::Article.association_name_to_id_convert(params)
     clean_params = Ticket::Article.param_cleanup(clean_params, true)
 
+    # only apply preferences changes (keep not updated keys/values)
+    clean_params = article.param_preferences_merge(clean_params)
+
     article.update!(clean_params)
 
     if response_expand?

+ 3 - 0
app/controllers/tickets_controller.rb

@@ -222,6 +222,9 @@ class TicketsController < ApplicationController
     clean_params = Ticket.association_name_to_id_convert(params)
     clean_params = Ticket.param_cleanup(clean_params, true)
 
+    # only apply preferences changes (keep not updated keys/values)
+    clean_params = ticket.param_preferences_merge(clean_params)
+
     # overwrite params
     if !current_user.permissions?('ticket.agent')
       %i[owner owner_id customer customer_id organization organization_id preferences].each do |key|

Некоторые файлы не были показаны из-за большого количества измененных файлов