Browse Source

Fixes #4543 - VIP state for organizations.

Co-authored-by: Dusan Vuckovic <dv@zammad.com>
Co-authored-by: Mantas Masalskis <mm@zammad.com>
Co-authored-by: Vladimir Sheremet <vs@zammad.com>
Co-authored-by: Dominik Klein <dk@zammad.com>
Dusan Vuckovic 1 year ago
parent
commit
4282a9e6e9

+ 5 - 0
app/assets/javascripts/app/controllers/organization_profile.coffee

@@ -59,6 +59,11 @@ class App.OrganizationProfile extends App.Controller
       object_id: organization.id
     )
 
+    new App.OrganizationProfileOrganizationAvatar(
+      el:        elLocal.find('.js-organization-avatar')
+      object_id: organization.id
+    )
+
     new App.TicketStats(
       el:           elLocal.find('.js-ticket-stats')
       organization: organization

+ 5 - 0
app/assets/javascripts/app/controllers/organization_profile/member.coffee

@@ -1,4 +1,7 @@
 class App.OrganizationProfileMember extends App.ControllerObserver
+  @extend App.PopoverProvidable
+  @registerPopovers 'User'
+
   model: 'User'
   observe:
     firstname: true
@@ -13,3 +16,5 @@ class App.OrganizationProfileMember extends App.ControllerObserver
     @html App.view('organization_profile/member')(
       user: user
     )
+
+    @renderPopovers()

+ 8 - 0
app/assets/javascripts/app/controllers/organization_profile/organization_avatar.coffee

@@ -0,0 +1,8 @@
+class App.OrganizationProfileOrganizationAvatar extends App.ControllerObserver
+  model: 'Organization'
+  observe:
+    active: true
+    vip: true
+
+  render: (organization) =>
+    @html organization.avatar('80')

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

@@ -547,6 +547,11 @@ class App.TicketZoom extends App.Controller
         el:        elLocal.find('.ticketZoom-header')
       )
 
+      new App.TicketOrganizationAvatar(
+        object_id: @ticket_id
+        el:        elLocal.find('.ticketZoom-header')
+      )
+
       @sidebarWidget = new App.TicketZoomSidebar(
         el:           elLocal
         sidebarState: @sidebarState

+ 14 - 0
app/assets/javascripts/app/controllers/ticket_zoom/organization_avatar.coffee

@@ -0,0 +1,14 @@
+class App.TicketOrganizationAvatar extends App.ControllerObserver
+  model: 'Ticket'
+  observe:
+    organization_id: true
+  globalRerender: false
+
+  render: (ticket) =>
+    return if _.isNull(ticket.organization_id) or _.isUndefined(ticket.organization_id)
+
+    new App.WidgetOrganizationAvatar(
+      el:        @el.find('.js-avatar-organization')
+      object_id: ticket.organization_id
+      size:      50
+    )

+ 5 - 0
app/assets/javascripts/app/controllers/user_profile/organization.coffee

@@ -1,4 +1,7 @@
 class App.UserProfileOrganization extends App.ControllerObserver
+  @extend App.PopoverProvidable
+  @registerPopovers 'Organization'
+
   model: 'Organization'
   observe:
     name: true
@@ -7,3 +10,5 @@ class App.UserProfileOrganization extends App.ControllerObserver
     @html App.view('user_profile/organization')(
       organization: organization
     )
+
+    @renderPopovers()

+ 2 - 0
app/assets/javascripts/app/controllers/user_profile/user.coffee

@@ -12,6 +12,8 @@ class App.UserProfileUser extends App.ControllerObserver
         object_id: user.organization_id
         el: @el.siblings('.js-organization')
       )
+    else
+      @el.siblings('.js-organization').html('')
 
     @html App.view('user_profile/name')(
       user: user

+ 15 - 0
app/assets/javascripts/app/controllers/widget/organization_avatar.coffee

@@ -0,0 +1,15 @@
+class App.WidgetOrganizationAvatar extends App.ControllerObserver
+  @extend App.PopoverProvidable
+  @registerPopovers 'Organization'
+
+  model: 'Organization'
+  observe:
+    name: true
+    vip: true
+    active: true
+
+  globalRerender: false
+
+  render: (organization) =>
+    @html(organization.avatar(@size, @cssClass, true))
+    @renderPopovers()

+ 10 - 5
app/assets/javascripts/app/controllers/widget/user.coffee

@@ -1,6 +1,6 @@
 class App.WidgetUser extends App.Controller
   @extend App.PopoverProvidable
-  @registerPopovers 'UserTicket'
+  @registerPopovers 'UserTicket', 'Organization'
 
   organizationLimit: 3
 
@@ -104,16 +104,15 @@ class App.WidgetUser extends App.Controller
       maxlength: 250
     )
 
-    @renderPopovers(
-      selector: '.user-tickets',
-      user_id:  user.id
-    )
+    @refreshPopovers()
 
   showMoreOrganizations: (e) ->
     @preventDefaultAndStopPropagation(e)
     @organizationLimit = (parseInt(@organizationLimit / 100) + 1) * 100
     @renderOrganizations()
 
+    @refreshPopovers()
+
   renderOrganizations: ->
     elLocal = @el
     @user.secondaryOrganizations(0, @organizationLimit, (secondaryOrganizations) ->
@@ -135,6 +134,12 @@ class App.WidgetUser extends App.Controller
     else
       @el.find('.js-showMoreOrganizations').removeClass('hidden')
 
+  refreshPopovers: ->
+    @renderPopovers(
+      selector: '.user-tickets',
+      user_id:  @user.id
+    )
+
   update: (e) =>
     name  = $(e.target).attr('data-name')
     value = $(e.target).html()

+ 5 - 0
app/assets/javascripts/app/lib/app_post/popover_provider/_popover_provider.coffee

@@ -1,6 +1,7 @@
 class App.PopoverProvider
   @selectorCssClassPrefix = null # needs to be overrided
   @templateName = null # needs to be overrided
+  @titleTemplateName = null # needs to be overrided
   @permission = 'ticket.agent'
 
   @providersConfigKey = 'PopoverProviders'
@@ -47,6 +48,7 @@ class App.PopoverProvider
       trigger:    'hover'
       container:  'body'
       html:       true
+      sanitize:   false
       animation:  false
       delay:      100
       placement:  "auto #{@params.position}"
@@ -70,6 +72,9 @@ class App.PopoverProvider
   buildContentFor: (elem) ->
     'content'
 
+  buildHtmlTitle: (params) ->
+    App.view("popover/#{@constructor.titleTemplateName}")(params)
+
   buildHtmlContent: (params) ->
     html = $(App.view("popover/#{@constructor.templateName}")(params))
 

Some files were not shown because too many files changed in this diff