From e3133e305cbe062cd47c8c73fcde650bc1af9192 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Fri, 7 Nov 2025 11:03:06 +0100 Subject: [PATCH] Channel filter updates --- docker/signal-cli-rest-api/Dockerfile | 2 +- .../cdr_link_channel_filter.coffee | 40 +++++++++++++++++++ .../article_action/cdr_signal.coffee | 20 +++------- set_channel_setting.rb | 4 +- 4 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_link_channel_filter.coffee diff --git a/docker/signal-cli-rest-api/Dockerfile b/docker/signal-cli-rest-api/Dockerfile index 8acda77..1123734 100644 --- a/docker/signal-cli-rest-api/Dockerfile +++ b/docker/signal-cli-rest-api/Dockerfile @@ -1 +1 @@ -FROM bbernhard/signal-cli-rest-api:0.176-dev +FROM bbernhard/signal-cli-rest-api:0.95 diff --git a/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_link_channel_filter.coffee b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_link_channel_filter.coffee new file mode 100644 index 0000000..afbf538 --- /dev/null +++ b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_link_channel_filter.coffee @@ -0,0 +1,40 @@ +class CdrLinkChannelFilter + # Required stub - we don't add any actions, just pass through + @action: (actions, ticket, article, ui) -> + actions + + @articleTypes: (articleTypes, ticket, ui) -> + return articleTypes if !ui.permissionCheck('ticket.agent') + + # Check CDR Link allowed channels setting + allowedChannels = ui.Config.get('cdr_link_allowed_channels') + + # If no whitelist is configured, allow all types + if !allowedChannels || !allowedChannels.trim() + return articleTypes + + # Parse the comma-separated whitelist + whitelist = (channel.trim() for channel in allowedChannels.split(',')) + + # Filter article types to only those in the whitelist + # Always keep 'note' for internal notes regardless of whitelist + filteredTypes = articleTypes.filter (type) -> + type.name is 'note' or type.name in whitelist + + # Add email if it's in the whitelist but not in the array + # (Email is only added by Zammad core for email tickets, not Signal tickets) + if 'email' in whitelist + hasEmail = filteredTypes.some (type) -> type.name is 'email' + if !hasEmail + # Add email with all the standard email attributes + filteredTypes.push { + name: 'email' + icon: 'email' + attributes: ['to', 'cc', 'subject'] + internal: false + features: ['attachment'] + } + + filteredTypes + +App.Config.set('900-CdrLinkChannelFilter', CdrLinkChannelFilter, 'TicketZoomArticleAction') diff --git a/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_signal.coffee b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_signal.coffee index 204ef98..685b878 100644 --- a/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_signal.coffee +++ b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_signal.coffee @@ -45,24 +45,16 @@ class CdrSignalReply @articleTypes: (articleTypes, ticket, ui) -> return articleTypes if !ui.permissionCheck('ticket.agent') - # Check CDR Link allowed channels setting - allowedChannels = ui.Config.get('cdr_link_allowed_channels') - hasWhitelist = allowedChannels && allowedChannels.trim() - - if hasWhitelist - whitelist = (channel.trim() for channel in allowedChannels.split(',')) - # Filter articleTypes to only those in the whitelist (keep 'note' for internal notes) - articleTypes = articleTypes.filter (type) -> - type.name is 'note' or type.name in whitelist - - # Return early if 'cdr_signal' or 'signal message' not in whitelist - return articleTypes if 'cdr_signal' not in whitelist && 'signal message' not in whitelist - + # Check if this ticket was created via Signal return articleTypes if !ticket || !ticket.create_article_type_id articleTypeCreate = App.TicketArticleType.find(ticket.create_article_type_id).name - return articleTypes if articleTypeCreate isnt 'cdr_signal' + # Only add cdr_signal type if ticket was created via Signal + if articleTypeCreate isnt 'cdr_signal' + return articleTypes + + # Add the cdr_signal article type for Signal replies articleTypes.push { name: 'cdr_signal' icon: 'cdr-signal' diff --git a/set_channel_setting.rb b/set_channel_setting.rb index 627d706..4624da7 100644 --- a/set_channel_setting.rb +++ b/set_channel_setting.rb @@ -5,5 +5,5 @@ require '/opt/zammad/config/application' Rails.application.initialize! -Setting.set('cdr_link_allowed_channels', 'note,signal message') -puts "Setting 'cdr_link_allowed_channels' has been set to: 'note,signal message'" \ No newline at end of file +Setting.set('cdr_link_allowed_channels', 'note,cdr_signal,email') +puts "Setting 'cdr_link_allowed_channels' has been set to: 'note,cdr_signal,email'" \ No newline at end of file