diff --git a/.rubocop/cop/zammad/forbid_translatable_marker.rb b/.rubocop/cop/zammad/forbid_translatable_marker.rb new file mode 100644 index 000000000..97a74d720 --- /dev/null +++ b/.rubocop/cop/zammad/forbid_translatable_marker.rb @@ -0,0 +1,17 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +module RuboCop + module Cop + module Zammad + class ForbidTranslatableMarker < Base + MSG = <<~ERROR_MESSAGE.freeze + Don't use __() in Zammad core migrations. Translatable strings should be marked where they are defined, e.g. in the DB seeds. + ERROR_MESSAGE + + def on_send(node) + add_offense(node) if node.method_name.eql? :__ + end + end + end + end +end diff --git a/.rubocop/default.yml b/.rubocop/default.yml index f98a42305..096d0f79e 100644 --- a/.rubocop/default.yml +++ b/.rubocop/default.yml @@ -335,6 +335,11 @@ Zammad/DetectTranslatableString: - "lib/import/**/*.rb" - "lib/tasks/**/*.rb" +Zammad/ForbidTranslatableMarker: + Enabled: true + Include: + - "db/migrate/*.rb" + Zammad/ExistsDbStrategy: Include: - "spec/**/*.rb" diff --git a/.rubocop/rubocop_zammad.rb b/.rubocop/rubocop_zammad.rb index 30d8cce2c..5293687d0 100644 --- a/.rubocop/rubocop_zammad.rb +++ b/.rubocop/rubocop_zammad.rb @@ -11,3 +11,4 @@ require_relative 'cop/zammad/no_to_sym_on_string' require_relative 'cop/zammad/prefer_negated_if_over_unless' require_relative 'cop/zammad/update_copyright' require_relative 'cop/zammad/forbid_rand' +require_relative 'cop/zammad/forbid_translatable_marker' diff --git a/app/assets/javascripts/app/models/user.coffee b/app/assets/javascripts/app/models/user.coffee index 484b5435f..9354b8f43 100644 --- a/app/assets/javascripts/app/models/user.coffee +++ b/app/assets/javascripts/app/models/user.coffee @@ -6,8 +6,8 @@ class App.User extends App.Model # @hasMany 'roles', 'App.Role' @configure_attributes = [ { name: 'login', display: __('Login'), tag: 'input', type: 'text', limit: 100, null: false, autocapitalize: false, signup: false, quick: false }, - { name: 'firstname', display: __('Firstname'), tag: 'input', type: 'text', limit: 100, null: true, signup: true, info: true, invite_agent: true, invite_customer: true }, - { name: 'lastname', display: __('Lastname'), tag: 'input', type: 'text', limit: 100, null: true, signup: true, info: true, invite_agent: true, invite_customer: true }, + { name: 'firstname', display: __('First name'), tag: 'input', type: 'text', limit: 100, null: true, signup: true, info: true, invite_agent: true, invite_customer: true }, + { name: 'lastname', display: __('Last name'), tag: 'input', type: 'text', limit: 100, null: true, signup: true, info: true, invite_agent: true, invite_customer: true }, { name: 'email', display: __('Email'), tag: 'input', type: 'email', limit: 100, null: true, signup: true, info: true, invite_agent: true, invite_customer: true }, { name: 'organization_id', display: __('Organization'), tag: 'select', multiple: false, nulloption: true, null: true, relation: 'Organization', signup: false, info: true, invite_customer: true }, { name: 'created_by_id', display: __('Created by'), relation: 'User', readonly: 1 }, diff --git a/app/controllers/first_steps_controller.rb b/app/controllers/first_steps_controller.rb index 157084c7c..60da2d908 100644 --- a/app/controllers/first_steps_controller.rb +++ b/app/controllers/first_steps_controller.rb @@ -212,7 +212,7 @@ class FirstStepsController < ApplicationController private def test_overview - Overview.find_by(name: __('Unassigned & Open')) + Overview.find_by(name: __('Unassigned & Open Tickets')) end def test_customer diff --git a/db/migrate/20220119102815_issue3924_confirmation_dialog.rb b/db/migrate/20220119102815_issue3924_confirmation_dialog.rb index bb703efee..75ea71c19 100644 --- a/db/migrate/20220119102815_issue3924_confirmation_dialog.rb +++ b/db/migrate/20220119102815_issue3924_confirmation_dialog.rb @@ -7,10 +7,10 @@ class Issue3924ConfirmationDialog < ActiveRecord::Migration[6.0] return if !Setting.exists?(name: 'system_init_done') Setting.create_if_not_exists( - title: __('Note - visibility confirmation dialog'), + title: 'Note - visibility confirmation dialog', name: 'ui_ticket_zoom_article_visibility_confirmation_dialog', area: 'UI::TicketZoom', - description: __('Defines if the agent has to accept a confirmation dialog when changing the article visibility to "public".'), + description: 'Defines if the agent has to accept a confirmation dialog when changing the article visibility to "public".', options: { form: [ { diff --git a/db/migrate/20220121101413_setting_updates.rb b/db/migrate/20220121101413_setting_updates.rb index 0aba08c0e..b754b09e6 100644 --- a/db/migrate/20220121101413_setting_updates.rb +++ b/db/migrate/20220121101413_setting_updates.rb @@ -1,328 +1,328 @@ # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ class SettingUpdates < ActiveRecord::Migration[6.0] - def change # rubocop:disable Metrics/AbcSize + def change return if !Setting.exists?(name: 'system_init_done') settings_update = [ { - title: __('2 lower case and 2 upper case characters'), + title: '2 lower case and 2 upper case characters', name: 'password_min_2_lower_2_upper_characters', - description: __('Password needs to contain 2 lower case and 2 upper case characters.'), + description: 'Password needs to contain 2 lower case and 2 upper case characters.', }, { - title: __('User email for multiple users'), + title: 'User email for multiple users', name: 'user_email_multiple_use', - description: __('Allow using one email address for multiple users.'), + description: 'Allow using one email address for multiple users.', }, { - title: __('sipgate.io alternative FQDN'), + title: 'sipgate.io alternative FQDN', name: 'sipgate_alternative_fqdn', - description: __('Alternative FQDN for callbacks if you operate Zammad in an internal network.'), + description: 'Alternative FQDN for callbacks if you operate Zammad in an internal network.', }, { - title: __('Auto Assignment'), + title: 'Auto Assignment', name: 'ticket_auto_assignment', }, { - title: __('BCC address for all outgoing emails'), + title: 'BCC address for all outgoing emails', name: 'system_bcc', - description: __('To archive all outgoing emails from Zammad to external, you can store a BCC email address here.'), + description: 'To archive all outgoing emails from Zammad to external, you can store a BCC email address here.', }, { - title: __('Additional follow-up detection'), + title: 'Additional follow-up detection', name: 'postmaster_follow_up_search_in', - description: __('By default, the follow-up check is done via the subject of an email. This setting lets you add more fields for which the follow-up check will be executed.'), + description: 'By default, the follow-up check is done via the subject of an email. This setting lets you add more fields for which the follow-up check will be executed.', }, { - title: __('Note - default visibility'), + title: 'Note - default visibility', name: 'ui_ticket_zoom_article_note_new_internal', - description: __('Defines the default visibility for new notes.'), + description: 'Defines the default visibility for new notes.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '0014_postmaster_filter_own_notification_loop_detection', - description: __('Defines postmaster filter to check if the email is a self-created notification email, then ignore it to prevent email loops.'), + description: 'Defines postmaster filter to check if the email is a self-created notification email, then ignore it to prevent email loops.', }, { - title: __('HTTP type'), + title: 'HTTP type', name: 'http_type', - description: __('Defines the HTTP protocol of your instance.'), + description: 'Defines the HTTP protocol of your instance.', }, { - title: __('Defines the timeframe during which a self-created note can be deleted.'), + title: 'Defines the timeframe during which a self-created note can be deleted.', name: 'ui_ticket_zoom_article_delete_timeframe', }, { - title: __('Import Endpoint'), + title: 'Import Endpoint', name: 'import_freshdesk_endpoint', - description: __('Defines a Freshdesk endpoint to import users, tickets, states, and articles.'), + description: 'Defines a Freshdesk endpoint to import users, tickets, states, and articles.', }, { - title: __('Import Endpoint'), + title: 'Import Endpoint', name: 'import_kayako_endpoint', - description: __('Defines a Kayako endpoint to import users, tickets, states, and articles.'), + description: 'Defines a Kayako endpoint to import users, tickets, states, and articles.', }, { - title: __('Import Endpoint'), + title: 'Import Endpoint', name: 'import_otrs_endpoint', - description: __('Defines an OTRS endpoint to import users, tickets, states, and articles.'), + description: 'Defines an OTRS endpoint to import users, tickets, states, and articles.', }, { - title: __('Import Endpoint'), + title: 'Import Endpoint', name: 'import_zendesk_endpoint', - description: __('Defines a Zendesk endpoint to import users, tickets, states, and articles.'), + description: 'Defines a Zendesk endpoint to import users, tickets, states, and articles.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketWaitingTime', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketEscalation', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketChannelDistribution', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketLoadMeasure', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketInProcess', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Stats Backend'), + title: 'Stats Backend', name: 'Stats::TicketReopen', - description: __('Defines a dashboard stats backend that gets scheduled automatically.'), + description: 'Defines a dashboard stats backend that gets scheduled automatically.', }, { - title: __('Import Password for HTTP basic authentication'), + title: 'Import Password for HTTP basic authentication', name: 'import_otrs_password', - description: __('Defines HTTP basic authentication password (only if OTRS is protected via HTTP basic auth).'), + description: 'Defines HTTP basic authentication password (only if OTRS is protected via HTTP basic auth).', }, { - title: __('Developer System'), + title: 'Developer System', name: 'developer_mode', - description: __('Defines if the application is in developer mode (all users have the same password and password reset will work without email delivery).'), + description: 'Defines if the application is in developer mode (all users have the same password and password reset will work without email delivery).', }, { - title: __('Group selection for ticket creation'), + title: 'Group selection for ticket creation', name: 'form_ticket_create_group_id', - description: __('Defines the group of tickets created via web form.'), + description: 'Defines the group of tickets created via web form.', }, { - title: __('Limit tickets by IP per day'), + title: 'Limit tickets by IP per day', name: 'form_ticket_create_by_ip_per_day', - description: __('Defines a limit for how many tickets can be created via web form from one IP address per day.'), + description: 'Defines a limit for how many tickets can be created via web form from one IP address per day.', }, { - title: __('Limit tickets by IP per hour'), + title: 'Limit tickets by IP per hour', name: 'form_ticket_create_by_ip_per_hour', - description: __('Defines a limit for how many tickets can be created via web form from one IP address per hour.'), + description: 'Defines a limit for how many tickets can be created via web form from one IP address per hour.', }, { - title: __('Limit tickets per day'), + title: 'Limit tickets per day', name: 'form_ticket_create_per_day', - description: __('Defines a limit for how many tickets can be created via web form per day.'), + description: 'Defines a limit for how many tickets can be created via web form per day.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '5400_postmaster_filter_jira_check', - description: __('Defines postmaster filter to identify Jira mails for correct follow-ups.'), + description: 'Defines postmaster filter to identify Jira mails for correct follow-ups.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '5401_postmaster_filter_jira_check', - description: __('Defines postmaster filter to identify Jira mails for correct follow-ups.'), + description: 'Defines postmaster filter to identify Jira mails for correct follow-ups.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '0950_postmaster_filter_bounce_delivery_permanent_failed', - description: __('Defines postmaster filter to identify postmaster bounces; and disables sending notification if delivery fails permanently.'), + description: 'Defines postmaster filter to identify postmaster bounces; and disables sending notification if delivery fails permanently.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '0955_postmaster_filter_bounce_delivery_temporary_failed', - description: __('Defines postmaster filter to identify postmaster bounces; and reopens tickets if delivery fails permanently.'), + description: 'Defines postmaster filter to identify postmaster bounces; and reopens tickets if delivery fails permanently.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '0900_postmaster_filter_bounce_follow_up_check', - description: __('Defines postmaster filter to identify postmaster bounces; and handles them as follow-up of the original tickets'), + description: 'Defines postmaster filter to identify postmaster bounces; and handles them as follow-up of the original tickets', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '5400_postmaster_filter_service_now_check', - description: __('Defines postmaster filter to identify ServiceNow mails for correct follow-ups.'), + description: 'Defines postmaster filter to identify ServiceNow mails for correct follow-ups.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '5401_postmaster_filter_service_now_check', - description: __('Defines postmaster filter to identify ServiceNow mails for correct follow-ups.'), + description: 'Defines postmaster filter to identify ServiceNow mails for correct follow-ups.', }, { - title: __('Defines postmaster filter.'), + title: 'Defines postmaster filter.', name: '0005_postmaster_filter_trusted', - description: __('Defines postmaster filter to remove X-Zammad headers from untrustworthy sources.'), + description: 'Defines postmaster filter to remove X-Zammad headers from untrustworthy sources.', }, { - title: __('HTML Email CSS Font'), + title: 'HTML Email CSS Font', name: 'html_email_css_font', - description: __('Defines the CSS font information for HTML emails.'), + description: 'Defines the CSS font information for HTML emails.', }, { - title: __('Geo IP Service'), + title: 'Geo IP Service', name: 'geo_ip_backend', - description: __('Defines the backend for geo IP lookups. Also shows location of an IP address if it is traceable.'), + description: 'Defines the backend for geo IP lookups. Also shows location of an IP address if it is traceable.', }, { - title: __('CTI config'), + title: 'CTI config', name: 'cti_config', - description: __('Defines the CTI config.'), + description: 'Defines the CTI config.', }, { - title: __('Set agent limit'), + title: 'Set agent limit', name: 'system_agent_limit', - description: __('Defines the agent limit.'), + description: 'Defines the agent limit.', }, { - title: __('Product Name'), + title: 'Product Name', name: 'product_name', - description: __('Defines the name of the application, shown in the web interface, tabs, and title bar of the web browser.'), + description: 'Defines the name of the application, shown in the web interface, tabs, and title bar of the web browser.', }, { - title: __('Define postmaster filter.'), + title: 'Define postmaster filter.', name: '5500_postmaster_internal_article_check', - description: __('Defines postmaster filter which sets the articles visibility to internal if it is a rely to an internal article or the last outgoing email is internal.'), + description: 'Defines postmaster filter which sets the articles visibility to internal if it is a rely to an internal article or the last outgoing email is internal.', }, { - title: __('CTI customer last activity'), + title: 'CTI customer last activity', name: 'cti_customer_last_activity', - description: __('Defines the duration of customer activity (in seconds) on a call until the user profile dialog is shown.'), + description: 'Defines the duration of customer activity (in seconds) on a call until the user profile dialog is shown.', }, { - title: __('Slack config'), + title: 'Slack config', name: 'slack_config', - description: __('Defines the Slack config.'), + description: 'Defines the Slack config.', }, { - title: __('Auto-close state'), + title: 'Auto-close state', name: 'icinga_auto_close_state_id', - description: __('Defines the state of auto-closed tickets.'), + description: 'Defines the state of auto-closed tickets.', }, { - title: __('Auto-close state'), + title: 'Auto-close state', name: 'nagios_auto_close_state_id', - description: __('Defines the state of auto-closed tickets.'), + description: 'Defines the state of auto-closed tickets.', }, { - title: __('Auto-close state'), + title: 'Auto-close state', name: 'check_mk_auto_close_state_id', - description: __('Defines the state of auto-closed tickets.'), + description: 'Defines the state of auto-closed tickets.', }, { - title: __('Auto-close state'), + title: 'Auto-close state', name: 'check_mk_auto_close_state_id', - description: __('Defines the state of auto-closed tickets.'), + description: 'Defines the state of auto-closed tickets.', }, { - title: __('Locale'), + title: 'Locale', name: 'locale_default', - description: __('Defines the default system language.'), + description: 'Defines the default system language.', }, { - title: __('Timezone'), + title: 'Timezone', name: 'timezone_default', - description: __('Defines the default system timezone.'), + description: 'Defines the default system timezone.', }, { - title: __('Defines transaction backend.'), + title: 'Defines transaction backend.', name: '9100_cti_caller_id_detection', - description: __('Defines the transaction backend which detects caller IDs in objects and stores them for CTI lookups.'), + description: 'Defines the transaction backend which detects caller IDs in objects and stores them for CTI lookups.', }, { - title: __('User Organization Selector - email'), + title: 'User Organization Selector - email', name: 'ui_user_organization_selector_with_email', - description: __('Defines if the email should be displayed in the result of the user/organization widget.'), + description: 'Defines if the email should be displayed in the result of the user/organization widget.', }, { - title: __('GitHub App Credentials'), + title: 'GitHub App Credentials', name: 'auth_github_credentials', - description: __('Enables user authentication via GitHub.'), + description: 'Enables user authentication via GitHub.', }, { - title: __('Customer selection based on sender and receiver list'), + title: 'Customer selection based on sender and receiver list', name: 'postmaster_sender_is_agent_search_for_customer', - description: __('If the sender is an agent, set the first user in the recipient list as the customer.'), + description: 'If the sender is an agent, set the first user in the recipient list as the customer.', }, { - title: __('Import API key for requesting the Freshdesk API'), + title: 'Import API key for requesting the Freshdesk API', name: 'import_freshdesk_endpoint_key', - description: __('Defines Freshdesk endpoint authentication API key.'), + description: 'Defines Freshdesk endpoint authentication API key.', }, { - title: __('Import API key for requesting the Zendesk API'), + title: 'Import API key for requesting the Zendesk API', name: 'import_zendesk_endpoint_key', - description: __('Defines Zendesk endpoint authentication API key.'), + description: 'Defines Zendesk endpoint authentication API key.', }, { - title: __('Knowledge Base active'), + title: 'Knowledge Base active', name: 'kb_active', - description: __('Defines if Knowledge Base navbar button is enabled.'), + description: 'Defines if Knowledge Base navbar button is enabled.', }, { - title: __('Knowledge Base active publicly'), + title: 'Knowledge Base active publicly', name: 'kb_active_publicly', - description: __('Defines if Knowledge Base navbar button is enabled for users without Knowledge Base permission.'), + description: 'Defines if Knowledge Base navbar button is enabled for users without Knowledge Base permission.', }, { - title: __('Knowledge Base multilingual support'), + title: 'Knowledge Base multilingual support', name: 'kb_multi_lingual_support', - description: __('Support of multilingual Knowledge Base.'), + description: 'Support of multilingual Knowledge Base.', }, { - title: __('Maximum Email Size'), + title: 'Maximum Email Size', name: 'postmaster_max_size', - description: __('Defines the maximum accepted email size in MB.'), + description: 'Defines the maximum accepted email size in MB.', }, { - title: __('Maximum failed logins'), + title: 'Maximum failed logins', name: 'password_max_login_failed', - description: __('Defines after how many failed logins accounts will be deactivated.'), + description: 'Defines after how many failed logins accounts will be deactivated.', }, { - title: __('Sender based on Reply-To header'), + title: 'Sender based on Reply-To header', name: 'postmaster_sender_based_on_reply_to', - description: __('Set/overwrite sender/from of email based on "Reply-To" header. Useful to set correct customer if email is received from a third-party system on behalf of a customer.'), + description: 'Set/overwrite sender/from of email based on "Reply-To" header. Useful to set correct customer if email is received from a third-party system on behalf of a customer.', }, { - title: __('Ticket Last Contact Behaviour'), + title: 'Ticket Last Contact Behaviour', name: 'ticket_last_contact_behaviour', - description: __('Sets the last customer contact based on either the last contact of the customer in general or on the last contact of the customer that has not received a response.'), + description: 'Sets the last customer contact based on either the last contact of the customer in general or on the last contact of the customer that has not received a response.', }, { - title: __('CTI Token'), + title: 'CTI Token', name: 'cti_token', - description: __('Token for CTI.'), + description: 'Token for CTI.', }, { - title: __('CTI integration'), + title: 'CTI integration', name: 'cti_integration', - description: __('Defines if generic CTI integration is enabled or not.'), + description: 'Defines if generic CTI integration is enabled or not.', }, { - title: __('Placetel Token'), + title: 'Placetel Token', name: 'placetel_token', - description: __('Defines the token for Placetel.'), + description: 'Defines the token for Placetel.', }, ] diff --git a/db/migrate/20220124101834_setting_updates2.rb b/db/migrate/20220124101834_setting_updates2.rb new file mode 100644 index 000000000..d9153adba --- /dev/null +++ b/db/migrate/20220124101834_setting_updates2.rb @@ -0,0 +1,73 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +class SettingUpdates2 < ActiveRecord::Migration[6.0] + def change # rubocop:disable Metrics/AbcSize + + return if !Setting.exists?(name: 'system_init_done') + + settings_update = [ + { + title: 'Ticket Last Contact Behaviour', + name: 'ticket_last_contact_behaviour', + description: 'Defines how the last customer contact time of tickets should be calculated.', + options: { + form: [ + { + display: '', + null: true, + name: 'ticket_last_contact_behaviour', + tag: 'select', + translate: true, + options: { + 'based_on_customer_reaction' => 'Use the time of the very last customer article.', + 'check_if_agent_already_replied' => 'Use the start time of the last customer thread (which may consist of multiple articles).', + }, + }, + ], + }, + }, + { + title: 'Sender based on Reply-To header', + name: 'postmaster_sender_based_on_reply_to', + description: 'Set/overwrite sender/from of email based on "Reply-To" header. Useful to set correct customer if email is received from a third-party system on behalf of a customer.', + options: { + form: [ + { + display: '', + null: true, + name: 'postmaster_sender_based_on_reply_to', + tag: 'select', + options: { + '' => '-', + 'as_sender_of_email' => 'Take Reply-To header as sender/from of email.', + 'as_sender_of_email_use_from_realname' => 'Take Reply-To header as sender/from of email and use the real name of origin from.', + }, + }, + ], + }, + }, + ] + + settings_update.each do |setting| + fetched_setting = Setting.find_by(name: setting[:name]) + next if !fetched_setting + + if setting[:title] + # "Updating title of #{setting[:name]} to #{setting[:title]}" + fetched_setting.title = setting[:title] + end + + if setting[:description] + # "Updating description of #{setting[:name]} to #{setting[:description]}" + fetched_setting.description = setting[:description] + end + + if setting[:options] + # "Updating description of #{setting[:name]} to #{setting[:description]}" + fetched_setting.options = setting[:options] + end + + fetched_setting.save! + end + end +end diff --git a/db/migrate/20220124104955_update_object_attributes.rb b/db/migrate/20220124104955_update_object_attributes.rb new file mode 100644 index 000000000..f5f3724d8 --- /dev/null +++ b/db/migrate/20220124104955_update_object_attributes.rb @@ -0,0 +1,76 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +class UpdateObjectAttributes < ActiveRecord::Migration[6.0] + def change + return if !Setting.exists?(name: 'system_init_done') + + # rubocop:disable Lint/BooleanSymbol + object_attributes_update = [ + { + object: 'Organization', + name: 'domain_assignment', + data_option: { + null: true, + default: false, + note: 'Assign users based on user domain.', + item_class: 'formGroup--halfSize', + options: { + true: 'yes', + false: 'no', + }, + translate: true, + permission: ['admin.organization'], + }, + }, + { + object: 'TicketArticle', + name: 'cc', + display: 'CC', + }, + { + object: 'Organization', + name: 'shared', + data_option: { + null: true, + default: true, + note: "Customers in the organization can view each other's items.", + item_class: 'formGroup--halfSize', + options: { + true: 'yes', + false: 'no', + }, + translate: true, + permission: ['admin.organization'], + }, + }, + { + object: 'User', + name: 'firstname', + display: 'First name', + }, + { + object: 'User', + name: 'lastname', + display: 'Last name', + }, + ] + # rubocop:enable Lint/BooleanSymbol + + object_attributes_update.each do |attribute| + fetched_attribute = ObjectManager::Attribute.get(name: attribute[:name], object: attribute[:object]) + next if !fetched_attribute + + if attribute[:display] + # p "Updating display of #{attribute[:name]} to #{attribute[:display]}" + fetched_attribute.display = attribute[:display] + end + + if attribute[:data_option] + # p "Updating data_option of #{attribute[:name]} to #{attribute[:data_option]}" + fetched_attribute.data_option = attribute[:data_option] + end + + fetched_attribute.save! + end + end +end diff --git a/db/migrate/20220124124658_permission_updates.rb b/db/migrate/20220124124658_permission_updates.rb new file mode 100644 index 000000000..982472414 --- /dev/null +++ b/db/migrate/20220124124658_permission_updates.rb @@ -0,0 +1,37 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +class PermissionUpdates < ActiveRecord::Migration[6.0] + def change + return if !Setting.exists?(name: 'system_init_done') + + permissions_update = [ + { + name: 'admin.channel_formular', + preferences: { + translations: ['Channel - Form'] + }, + }, + { + name: 'admin.knowledge_base', + note: 'Create and set up %s', + }, + ] + + permissions_update.each do |permission| + fetched_permission = Permission.find_by(name: permission[:name]) + next if !fetched_permission + + if permission[:note] + # p "Updating note of #{permission[:name]} to #{permission[:note]}" + fetched_permission.note = permission[:note] + end + + if permission[:preferences] + # p "Updating preferences of #{permission[:name]} to #{permission[:preferences]}" + fetched_permission.preferences = permission[:preferences] + end + + fetched_permission.save! + end + end +end diff --git a/db/migrate/20220124132029_scheduler_updates.rb b/db/migrate/20220124132029_scheduler_updates.rb new file mode 100644 index 000000000..e2b0d4130 --- /dev/null +++ b/db/migrate/20220124132029_scheduler_updates.rb @@ -0,0 +1,94 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +class SchedulerUpdates < ActiveRecord::Migration[6.0] + def change + return if !Setting.exists?(name: 'system_init_done') + + schedulers_update = [ + { + name: 'Clean up ActiveJob locks.', + method: 'ActiveJobLockCleanupJob.perform_now', + }, + { + name: "Clean up 'HttpLog'.", + method: 'HttpLog.cleanup', + }, + { + name: 'Clean up closed sessions.', + method: 'Chat.cleanup', + }, + { + name: 'Clean up dead sessions.', + method: 'SessionTimeoutJob.perform_now', + }, + { + name: 'Clean up expired sessions.', + method: 'SessionHelper.cleanup_expired', + }, + { + name: 'Close chat sessions where participants are offline.', + method: 'Chat.cleanup_close', + }, + { + name: "Generate 'Session' data.", + method: 'Sessions.jobs', + }, + { + name: 'Generate user-based stats.', + method: 'Stats.generate', + }, + { + name: 'Sync calendars with iCal feeds.', + method: 'Calendar.sync', + }, + { + name: "Clean up 'Cti::Log.'", + method: 'Cti::Log.cleanup', + }, + { + name: 'Execute import jobs.', + method: 'ImportJob.start_registered', + }, + { + name: 'Process pending tickets.', + method: 'Ticket.process_pending', + }, + { + name: 'Process ticket escalations.', + method: 'Ticket.process_escalation', + }, + { + name: 'Process automatic ticket unassignments.', + method: 'Ticket.process_auto_unassign', + }, + { + name: 'Check channels.', + method: 'Channel.fetch', + }, + { + name: "Check 'Channel' streams.", + method: 'Channel.stream', + }, + { + name: 'Execute planned jobs.', + method: 'Job.run', + }, + { + name: "Delete old 'RecentView' entries.", + method: 'RecentView.cleanup', + }, + ] + + schedulers_update.each do |scheduler| + fetched_scheduler = Scheduler.find_by(method: scheduler[:method]) + next if !fetched_scheduler + + if scheduler[:name] + # p "Updating name of #{scheduler[:name]} to #{scheduler[:name]}" + fetched_scheduler.name = scheduler[:name] + end + + fetched_scheduler.save! + end + end +end diff --git a/db/migrate/20220124141828_overview_updates.rb b/db/migrate/20220124141828_overview_updates.rb new file mode 100644 index 000000000..0b1ef69b8 --- /dev/null +++ b/db/migrate/20220124141828_overview_updates.rb @@ -0,0 +1,63 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +class OverviewUpdates < ActiveRecord::Migration[6.0] + def change + return if !Setting.exists?(name: 'system_init_done') + + # Only update overviews that still have the original/default name and link. + overviews_update = [ + { + name: 'My Assigned Tickets', + link: 'my_assigned', + old_name: 'My assigned Tickets', + }, + { + name: 'Unassigned & Open Tickets', + link: 'all_unassigned', + old_name: 'Unassigned & Open', + }, + { + name: 'My Pending Reached Tickets', + link: 'my_pending_reached', + old_name: 'My pending reached Tickets', + }, + { + name: 'My Subscribed Tickets', + link: 'my_subscribed_tickets', + old_name: 'My subscribed Tickets', + }, + { + name: 'Open Tickets', + link: 'all_open', + old_name: 'Open', + }, + { + name: 'Pending Reached Tickets', + link: 'all_pending_reached', + old_name: 'Pending reached', + }, + { + name: 'Escalated Tickets', + link: 'all_escalated', + old_name: 'Escalated', + }, + { + name: 'My Replacement Tickets', + link: 'my_replacement_tickets', + old_name: 'My replacement Tickets', + }, + ] + + overviews_update.each do |overview| + fetched_overview = Overview.find_by(link: overview[:link], name: overview[:old_name]) + next if !fetched_overview + + if overview[:name] + # p "Updating name of #{overview[:link]} to #{overview[:name]}" + fetched_overview.name = overview[:name] + end + + fetched_overview.save! + end + end +end diff --git a/db/seeds/object_manager_attributes.rb b/db/seeds/object_manager_attributes.rb index 4dcbe85d1..29f805354 100644 --- a/db/seeds/object_manager_attributes.rb +++ b/db/seeds/object_manager_attributes.rb @@ -469,7 +469,7 @@ ObjectManager::Attribute.add( force: true, object: 'TicketArticle', name: 'cc', - display: __('Cc'), + display: __('CC'), data_type: 'input', data_option: { type: 'text', @@ -562,7 +562,7 @@ ObjectManager::Attribute.add( force: true, object: 'User', name: 'firstname', - display: __('Firstname'), + display: __('First name'), data_type: 'input', data_option: { type: 'text', @@ -614,7 +614,7 @@ ObjectManager::Attribute.add( force: true, object: 'User', name: 'lastname', - display: __('Lastname'), + display: __('Last name'), data_type: 'input', data_option: { type: 'text', @@ -1414,7 +1414,7 @@ ObjectManager::Attribute.add( data_option: { null: true, default: true, - note: __('Customers in the organization can view each other items.'), + note: __("Customers in the organization can view each other's items."), item_class: 'formGroup--halfSize', options: { true: 'yes', @@ -1457,7 +1457,7 @@ ObjectManager::Attribute.add( data_option: { null: true, default: false, - note: __('Assign Users based on users domain.'), + note: __('Assign users based on user domain.'), item_class: 'formGroup--halfSize', options: { true: 'yes', diff --git a/db/seeds/overviews.rb b/db/seeds/overviews.rb index 81e76f20c..fb7f99882 100644 --- a/db/seeds/overviews.rb +++ b/db/seeds/overviews.rb @@ -2,7 +2,7 @@ overview_role = Role.find_by(name: 'Agent') Overview.create_if_not_exists( - name: __('My assigned Tickets'), + name: __('My Assigned Tickets'), link: 'my_assigned', prio: 1000, role_ids: [overview_role.id], @@ -29,7 +29,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('Unassigned & Open'), + name: __('Unassigned & Open Tickets'), link: 'all_unassigned', prio: 1010, role_ids: [overview_role.id], @@ -56,7 +56,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('My pending reached Tickets'), + name: __('My Pending Reached Tickets'), link: 'my_pending_reached', prio: 1020, role_ids: [overview_role.id], @@ -88,7 +88,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('My subscribed Tickets'), + name: __('My Subscribed Tickets'), link: 'my_subscribed_tickets', prio: 1025, role_ids: [overview_role.id], @@ -106,7 +106,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('Open'), + name: __('Open Tickets'), link: 'all_open', prio: 1030, role_ids: [overview_role.id], @@ -129,7 +129,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('Pending reached'), + name: __('Pending Reached Tickets'), link: 'all_pending_reached', prio: 1040, role_ids: [overview_role.id], @@ -157,7 +157,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('Escalated'), + name: __('Escalated Tickets'), link: 'all_escalated', prio: 1050, role_ids: [overview_role.id], @@ -181,7 +181,7 @@ Overview.create_if_not_exists( ) Overview.create_if_not_exists( - name: __('My replacement Tickets'), + name: __('My Replacement Tickets'), link: 'my_replacement_tickets', prio: 1080, role_ids: [overview_role.id], diff --git a/db/seeds/permissions.rb b/db/seeds/permissions.rb index 8a6720f96..e16ccf5df 100644 --- a/db/seeds/permissions.rb +++ b/db/seeds/permissions.rb @@ -114,7 +114,7 @@ Permission.create_if_not_exists( name: 'admin.channel_formular', note: __('Manage %s'), preferences: { - translations: [__('Channel - Formular')] + translations: [__('Channel - Form')] }, ) Permission.create_if_not_exists( @@ -417,7 +417,7 @@ Permission.create_if_not_exists( Permission.create_if_not_exists( name: 'admin.knowledge_base', - note: __('Create and setup %s'), + note: __('Create and set up %s'), preferences: { translations: [__('Knowledge Base')] } diff --git a/db/seeds/schedulers.rb b/db/seeds/schedulers.rb index 05819db44..6a8af0380 100644 --- a/db/seeds/schedulers.rb +++ b/db/seeds/schedulers.rb @@ -1,28 +1,28 @@ # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ Scheduler.create_if_not_exists( - name: __('Process pending tickets'), + name: __('Process pending tickets.'), method: 'Ticket.process_pending', period: 15.minutes, prio: 1, active: true, ) Scheduler.create_if_not_exists( - name: __('Process escalation tickets'), + name: __('Process ticket escalations.'), method: 'Ticket.process_escalation', period: 5.minutes, prio: 1, active: true, ) Scheduler.create_if_not_exists( - name: __('Process auto unassign tickets'), + name: __('Process automatic ticket unassignments.'), method: 'Ticket.process_auto_unassign', period: 10.minutes, prio: 1, active: true, ) Scheduler.create_if_not_exists( - name: __('Check Channels'), + name: __('Check channels.'), method: 'Channel.fetch', period: 30.seconds, prio: 1, @@ -31,7 +31,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Check streams for Channel'), + name: __("Check 'Channel' streams."), method: 'Channel.stream', period: 60.seconds, prio: 1, @@ -40,7 +40,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Generate Session data'), + name: __("Generate 'Session' data."), method: 'Sessions.jobs', period: 60.seconds, prio: 1, @@ -49,7 +49,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Execute jobs'), + name: __('Execute planned jobs.'), method: 'Job.run', period: 5.minutes, prio: 2, @@ -58,7 +58,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Cleanup expired sessions'), + name: __('Clean up expired sessions.'), method: 'SessionHelper.cleanup_expired', period: 60 * 60 * 12, prio: 2, @@ -76,7 +76,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Delete old entries.'), + name: __("Delete old 'RecentView' entries."), method: 'RecentView.cleanup', period: 1.day, prio: 2, @@ -103,7 +103,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Closed chat sessions where participients are offline.'), + name: __('Close chat sessions where participants are offline.'), method: 'Chat.cleanup_close', period: 15.minutes, prio: 2, @@ -112,7 +112,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Cleanup closed sessions.'), + name: __('Clean up closed sessions.'), method: 'Chat.cleanup', period: 5.days, prio: 2, @@ -121,7 +121,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Cleanup ActiveJob locks.'), + name: __('Clean up ActiveJob locks.'), method: 'ActiveJobLockCleanupJob.perform_now', period: 1.day, prio: 2, @@ -130,7 +130,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Cleanup dead sessions.'), + name: __('Clean up dead sessions.'), method: 'SessionTimeoutJob.perform_now', period: 1.hour, prio: 2, @@ -139,7 +139,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Sync calendars with ical feeds.'), + name: __('Sync calendars with iCal feeds.'), method: 'Calendar.sync', period: 1.day, prio: 2, @@ -148,7 +148,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_or_update( - name: __('Generate user based stats.'), + name: __('Generate user-based stats.'), method: 'Stats.generate', period: 11.minutes, prio: 2, @@ -166,7 +166,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Cleanup HttpLog'), + name: __("Clean up 'HttpLog'."), method: 'HttpLog.cleanup', period: 1.day, prio: 2, @@ -175,7 +175,7 @@ Scheduler.create_if_not_exists( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Cleanup Cti::Log'), + name: __("Clean up 'Cti::Log.'"), method: 'Cti::Log.cleanup', period: 1.month, prio: 2, @@ -193,7 +193,7 @@ Scheduler.create_or_update( created_by_id: 1, ) Scheduler.create_if_not_exists( - name: __('Import Jobs'), + name: __('Execute import jobs.'), method: 'ImportJob.start_registered', period: 1.hour, prio: 1, diff --git a/db/seeds/settings.rb b/db/seeds/settings.rb index 23eead361..d167b6179 100644 --- a/db/seeds/settings.rb +++ b/db/seeds/settings.rb @@ -2106,7 +2106,7 @@ Setting.create_if_not_exists( title: __('Ticket Last Contact Behaviour'), name: 'ticket_last_contact_behaviour', area: 'Ticket::Base', - description: __('Sets the last customer contact based on either the last contact of the customer in general or on the last contact of the customer that has not received a response.'), + description: __('Defines how the last customer contact time of tickets should be calculated.'), options: { form: [ { @@ -2116,8 +2116,8 @@ Setting.create_if_not_exists( tag: 'select', translate: true, options: { - 'based_on_customer_reaction' => __('Last customer contact (without consideration an agent has replied to it)'), - 'check_if_agent_already_replied' => __('Last customer contact (with consideration an agent has replied to it)'), + 'based_on_customer_reaction' => __('Use the time of the very last customer article.'), + 'check_if_agent_already_replied' => __('Use the start time of the last customer thread (which may consist of multiple articles).'), }, }, ], @@ -2810,8 +2810,8 @@ Setting.create_if_not_exists( tag: 'select', options: { '' => '-', - 'as_sender_of_email' => __('Take reply-to header as sender/from of email.'), - 'as_sender_of_email_use_from_realname' => __('Take reply-to header as sender/from of email and use realname of origin from.'), + 'as_sender_of_email' => __('Take Reply-To header as sender/from of email.'), + 'as_sender_of_email_use_from_realname' => __('Take Reply-To header as sender/from of email and use the real name of origin from.'), }, }, ], diff --git a/i18n/zammad.pot b/i18n/zammad.pot index 68a562567..5081c2f1c 100644 --- a/i18n/zammad.pot +++ b/i18n/zammad.pot @@ -272,7 +272,6 @@ msgstr "" msgid "2 hours" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "2 lower case and 2 upper case characters" msgstr "" @@ -591,7 +590,6 @@ msgstr "" msgid "Additional Channels" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Additional follow-up detection" msgstr "" @@ -697,7 +695,6 @@ msgstr "" msgid "Allow users to create new tags." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Allow using one email address for multiple users." msgstr "" @@ -710,7 +707,6 @@ msgstr "" msgid "Also notify via email" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Alternative FQDN for callbacks if you operate Zammad in an internal network." msgstr "" @@ -890,10 +886,6 @@ msgstr "" msgid "Assign Follow-Ups" msgstr "" -#: db/seeds/object_manager_attributes.rb -msgid "Assign Users based on users domain." -msgstr "" - #: app/assets/javascripts/app/models/group.coffee #: db/seeds/object_manager_attributes.rb msgid "Assign follow-up to latest agent again." @@ -907,6 +899,10 @@ msgstr "" msgid "Assign signup roles" msgstr "" +#: db/seeds/object_manager_attributes.rb +msgid "Assign users based on user domain." +msgstr "" + #: app/assets/javascripts/app/views/dashboard/stats/ticket_load_measure.jst.eco msgid "Assigned" msgstr "" @@ -1040,7 +1036,6 @@ msgstr "" #: app/assets/javascripts/app/controllers/_manage/ticket.coffee #: app/assets/javascripts/app/views/settings/ticket_auto_assignment.jst.eco -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Auto Assignment" msgstr "" @@ -1057,7 +1052,6 @@ msgstr "" msgid "Auto create" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Auto-close state" msgstr "" @@ -1103,7 +1097,6 @@ msgstr "" msgid "Average: %s%" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "BCC address for all outgoing emails" msgstr "" @@ -1266,7 +1259,6 @@ msgstr "" msgid "But it's only available in these languages:" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "By default, the follow-up check is done via the subject of an email. This setting lets you add more fields for which the follow-up check will be executed." msgstr "" @@ -1276,6 +1268,7 @@ msgstr "" #: app/assets/javascripts/app/models/ticket_article.coffee #: app/assets/javascripts/app/views/ticket_zoom/article_new.jst.eco #: app/assets/javascripts/app/views/ticket_zoom/article_view.jst.eco +#: db/seeds/object_manager_attributes.rb msgid "CC" msgstr "" @@ -1297,22 +1290,18 @@ msgstr "" msgid "CTI (generic)" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "CTI Token" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "CTI config" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "CTI customer last activity" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "CTI integration" msgstr "" @@ -1453,10 +1442,6 @@ msgstr "" msgid "Category page layout" msgstr "" -#: db/seeds/object_manager_attributes.rb -msgid "Cc" -msgstr "" - #: lib/secure_mailing/smime/incoming.rb msgid "Certificate for verification could not be found." msgstr "" @@ -1542,7 +1527,7 @@ msgid "Channel - Facebook" msgstr "" #: db/seeds/permissions.rb -msgid "Channel - Formular" +msgid "Channel - Form" msgstr "" #: db/seeds/permissions.rb @@ -1612,11 +1597,11 @@ msgid "Chatting Customers" msgstr "" #: db/seeds/schedulers.rb -msgid "Check Channels" +msgid "Check 'Channel' streams." msgstr "" #: db/seeds/schedulers.rb -msgid "Check streams for Channel" +msgid "Check channels." msgstr "" #: lib/search_index_backend.rb @@ -1690,27 +1675,27 @@ msgid "City" msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup ActiveJob locks." +msgid "Clean up 'Cti::Log.'" msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup Cti::Log" +msgid "Clean up 'HttpLog'." msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup HttpLog" +msgid "Clean up ActiveJob locks." msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup closed sessions." +msgid "Clean up closed sessions." msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup dead sessions." +msgid "Clean up dead sessions." msgstr "" #: db/seeds/schedulers.rb -msgid "Cleanup expired sessions" +msgid "Clean up expired sessions." msgstr "" #: app/assets/javascripts/app/controllers/_integration/clearbit.coffee @@ -1776,6 +1761,10 @@ msgstr "" msgid "Close In Min" msgstr "" +#: db/seeds/schedulers.rb +msgid "Close chat sessions where participants are offline." +msgstr "" + #: app/assets/javascripts/app/controllers/_plugin/keyboard_shortcuts.coffee msgid "Close current tab" msgstr "" @@ -1807,10 +1796,6 @@ msgstr "" msgid "Closed Tickets" msgstr "" -#: db/seeds/schedulers.rb -msgid "Closed chat sessions where participients are offline." -msgstr "" - #: app/assets/javascripts/app/models/ticket.coffee msgid "Closing time" msgstr "" @@ -2175,7 +2160,7 @@ msgid "Create a translation" msgstr "" #: db/seeds/permissions.rb -msgid "Create and setup %s" +msgid "Create and set up %s" msgstr "" #: app/assets/javascripts/app/views/signup.jst.eco @@ -2346,7 +2331,6 @@ msgstr "" msgid "Customer Chat" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Customer selection based on sender and receiver list" msgstr "" @@ -2355,11 +2339,8 @@ msgstr "" msgid "Customer tickets of the user will get deleted on execution of the task. No rollback possible." msgstr "" -#: db/seeds/object_manager_attributes.rb -msgid "Customers in the organization can view each other items." -msgstr "" - #: app/assets/javascripts/app/models/organization.coffee +#: db/seeds/object_manager_attributes.rb msgid "Customers in the organization can view each other's items." msgstr "" @@ -2519,7 +2500,6 @@ msgstr "" msgid "Define postmaster filter to import archive mailboxes." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Define postmaster filter." msgstr "" @@ -2528,7 +2508,6 @@ msgstr "" msgid "Defines Elasticsearch index name." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines Freshdesk endpoint authentication API key." msgstr "" @@ -2541,7 +2520,6 @@ msgstr "" msgid "Defines HTTP basic auth user of Elasticsearch." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines HTTP basic authentication password (only if OTRS is protected via HTTP basic auth)." msgstr "" @@ -2562,7 +2540,6 @@ msgstr "" msgid "Defines OTRS endpoint authentication key." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines Zendesk endpoint authentication API key." msgstr "" @@ -2571,47 +2548,38 @@ msgstr "" msgid "Defines Zendesk endpoint authentication user." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a Freshdesk endpoint to import users, tickets, states, and articles." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a Kayako endpoint to import users, tickets, states, and articles." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a Zendesk endpoint to import users, tickets, states, and articles." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a dashboard stats backend that gets scheduled automatically." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a limit for how many tickets can be created via web form from one IP address per day." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a limit for how many tickets can be created via web form from one IP address per hour." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines a limit for how many tickets can be created via web form per day." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines after how many failed logins accounts will be deactivated." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines an OTRS endpoint to import users, tickets, states, and articles." msgstr "" @@ -2632,6 +2600,10 @@ msgstr "" msgid "Defines how the From field of emails (sent from answers and email tickets) should look like." msgstr "" +#: db/seeds/settings.rb +msgid "Defines how the last customer contact time of tickets should be calculated." +msgstr "" + #: db/seeds/settings.rb msgid "Defines how to reach websocket server. \"websocket\" is default on production, \"websocketPort\" is for CI" msgstr "" @@ -2652,12 +2624,10 @@ msgstr "" msgid "Defines if Icinga (http://www.icinga.org) is enabled or not." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines if Knowledge Base navbar button is enabled for users without Knowledge Base permission." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines if Knowledge Base navbar button is enabled." msgstr "" @@ -2698,7 +2668,6 @@ msgstr "" msgid "Defines if application is used as online service." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines if generic CTI integration is enabled or not." msgstr "" @@ -2719,12 +2688,10 @@ msgstr "" msgid "Defines if the GitLab (http://www.gitlab.com) integration is enabled or not." msgstr "" -#: db/migrate/20220119102815_issue3924_confirmation_dialog.rb #: db/seeds/settings.rb msgid "Defines if the agent has to accept a confirmation dialog when changing the article visibility to \"public\"." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines if the application is in developer mode (all users have the same password and password reset will work without email delivery)." msgstr "" @@ -2733,7 +2700,6 @@ msgstr "" msgid "Defines if the core workflow communication should run over ajax instead of websockets." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines if the email should be displayed in the result of the user/organization widget." msgstr "" @@ -2758,7 +2724,6 @@ msgstr "" msgid "Defines postmaster filter to check if email has been created by Zammad itself and will set the article sender." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to check if the email is a self-created notification email, then ignore it to prevent email loops." msgstr "" @@ -2767,12 +2732,10 @@ msgstr "" msgid "Defines postmaster filter to handle secure mailing." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to identify Jira mails for correct follow-ups." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to identify ServiceNow mails for correct follow-ups." msgstr "" @@ -2793,17 +2756,14 @@ msgstr "" msgid "Defines postmaster filter to identify out-of-office emails for follow-up detection and keeping current ticket state." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to identify postmaster bounces; and disables sending notification if delivery fails permanently." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to identify postmaster bounces; and handles them as follow-up of the original tickets" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to identify postmaster bounces; and reopens tickets if delivery fails permanently." msgstr "" @@ -2824,7 +2784,6 @@ msgstr "" msgid "Defines postmaster filter to manage Nagios (http://www.nagios.org) emails." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter to remove X-Zammad headers from untrustworthy sources." msgstr "" @@ -2837,12 +2796,10 @@ msgstr "" msgid "Defines postmaster filter to set the sender/from of emails based on reply-to header." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter which sets the articles visibility to internal if it is a rely to an internal article or the last outgoing email is internal." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines postmaster filter." msgstr "" @@ -2859,12 +2816,10 @@ msgstr "" msgid "Defines sync transaction backend." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the CSS font information for HTML emails." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the CTI config." msgstr "" @@ -2881,7 +2836,6 @@ msgstr "" msgid "Defines the Exchange config." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the HTTP protocol of your instance." msgstr "" @@ -2898,17 +2852,14 @@ msgstr "" msgid "Defines the S/MIME config." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the Slack config." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the agent limit." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the backend for geo IP lookups. Also shows location of an IP address if it is traceable." msgstr "" @@ -2933,22 +2884,18 @@ msgstr "" msgid "Defines the default screen." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the default system language." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the default system timezone." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the default visibility for new notes." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the duration of customer activity (in seconds) on a call until the user profile dialog is shown." msgstr "" @@ -2961,7 +2908,6 @@ msgstr "" msgid "Defines the group of created tickets." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the group of tickets created via web form." msgstr "" @@ -2982,12 +2928,10 @@ msgstr "" msgid "Defines the logo of the application, shown in the web interface." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the maximum accepted email size in MB." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the name of the application, shown in the web interface, tabs, and title bar of the web browser." msgstr "" @@ -3032,7 +2976,6 @@ msgstr "" msgid "Defines the sipgate.io config." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the state of auto-closed tickets." msgstr "" @@ -3045,12 +2988,10 @@ msgstr "" msgid "Defines the tab behaviour after a ticket action." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the timeframe during which a self-created note can be deleted." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the token for Placetel." msgstr "" @@ -3071,7 +3012,6 @@ msgstr "" msgid "Defines the transaction backend which creates the karma score." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines the transaction backend which detects caller IDs in objects and stores them for CTI lookups." msgstr "" @@ -3088,7 +3028,6 @@ msgstr "" msgid "Defines the translator identifier for contributions." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Defines transaction backend." msgstr "" @@ -3160,11 +3099,11 @@ msgid "Delete obsolete classic IMAP backup." msgstr "" #: db/seeds/schedulers.rb -msgid "Delete old activity stream entries." +msgid "Delete old 'RecentView' entries." msgstr "" #: db/seeds/schedulers.rb -msgid "Delete old entries." +msgid "Delete old activity stream entries." msgstr "" #: db/seeds/schedulers.rb @@ -3257,7 +3196,6 @@ msgstr "" msgid "Destination caller ID or queue" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Developer System" msgstr "" @@ -3714,7 +3652,6 @@ msgstr "" msgid "Enables user authentication via %s. Register your app first at [%s](%s)." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Enables user authentication via GitHub." msgstr "" @@ -3872,7 +3809,7 @@ msgid "Error during execution of auto wizard." msgstr "" #: db/seeds/overviews.rb -msgid "Escalated" +msgid "Escalated Tickets" msgstr "" #: lib/excel_sheet/ticket.rb @@ -3956,7 +3893,11 @@ msgid "Execute changes on objects" msgstr "" #: db/seeds/schedulers.rb -msgid "Execute jobs" +msgid "Execute import jobs." +msgstr "" + +#: db/seeds/schedulers.rb +msgid "Execute planned jobs." msgstr "" #: app/assets/javascripts/app/controllers/_ui_element/_application_selector.coffee @@ -4127,13 +4068,13 @@ msgstr "" msgid "First Steps" msgstr "" -#: app/assets/javascripts/app/models/ticket.coffee -msgid "First response" -msgstr "" - #: app/assets/javascripts/app/models/user.coffee #: db/seeds/object_manager_attributes.rb -msgid "Firstname" +msgid "First name" +msgstr "" + +#: app/assets/javascripts/app/models/ticket.coffee +msgid "First response" msgstr "" #: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco @@ -4303,12 +4244,12 @@ msgstr "" msgid "General communication error, maybe internet is not available!" msgstr "" -#: app/assets/javascripts/app/controllers/api.coffee -msgid "Generate Access Token for |%s|" +#: db/seeds/schedulers.rb +msgid "Generate 'Session' data." msgstr "" -#: db/seeds/schedulers.rb -msgid "Generate Session data" +#: app/assets/javascripts/app/controllers/api.coffee +msgid "Generate Access Token for |%s|" msgstr "" #: app/assets/javascripts/app/controllers/api.coffee @@ -4316,7 +4257,7 @@ msgid "Generate Token" msgstr "" #: db/seeds/schedulers.rb -msgid "Generate user based stats." +msgid "Generate user-based stats." msgstr "" #: app/assets/javascripts/app/controllers/_integration/cti.coffee @@ -4327,7 +4268,6 @@ msgstr "" msgid "Geo Calendar Service" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Geo IP Service" msgstr "" @@ -4349,7 +4289,6 @@ msgstr "" msgid "GitHub" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "GitHub App Credentials" msgstr "" @@ -4538,7 +4477,6 @@ msgstr "" msgid "Group selection for Ticket creation" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Group selection for ticket creation" msgstr "" @@ -4561,7 +4499,6 @@ msgstr "" msgid "HMAC SHA1 Signature Token" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "HTML Email CSS Font" msgstr "" @@ -4570,7 +4507,6 @@ msgstr "" msgid "HTTP Log" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "HTTP type" msgstr "" @@ -4824,7 +4760,6 @@ msgstr "" msgid "If the host and service have recovered, the ticket can be closed automatically." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "If the sender is an agent, set the first user in the recipient list as the customer." msgstr "" @@ -4903,12 +4838,10 @@ msgstr "" msgid "Import API key could not be extracted from URL." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Import API key for requesting the Freshdesk API" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Import API key for requesting the Zendesk API" msgstr "" @@ -4921,15 +4854,10 @@ msgstr "" msgid "Import Backends" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Import Endpoint" msgstr "" -#: db/seeds/schedulers.rb -msgid "Import Jobs" -msgstr "" - #: db/seeds/settings.rb msgid "Import Key" msgstr "" @@ -4938,7 +4866,6 @@ msgstr "" msgid "Import Mode" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Import Password for HTTP basic authentication" msgstr "" @@ -5414,17 +5341,14 @@ msgstr "" msgid "Knowledge Base Reader" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Knowledge Base active" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Knowledge Base active publicly" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Knowledge Base multilingual support" msgstr "" @@ -5496,12 +5420,9 @@ msgstr "" msgid "Last contact (customer)" msgstr "" -#: db/seeds/settings.rb -msgid "Last customer contact (with consideration an agent has replied to it)" -msgstr "" - -#: db/seeds/settings.rb -msgid "Last customer contact (without consideration an agent has replied to it)" +#: app/assets/javascripts/app/models/user.coffee +#: db/seeds/object_manager_attributes.rb +msgid "Last name" msgstr "" #: app/assets/javascripts/app/models/job.coffee @@ -5521,11 +5442,6 @@ msgstr "" msgid "Last used" msgstr "" -#: app/assets/javascripts/app/models/user.coffee -#: db/seeds/object_manager_attributes.rb -msgid "Lastname" -msgstr "" - #: app/assets/javascripts/app/views/karma/index.jst.eco msgid "Latest updates" msgstr "" @@ -5542,17 +5458,14 @@ msgstr "" msgid "Limit Groups" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Limit tickets by IP per day" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Limit tickets by IP per hour" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Limit tickets per day" msgstr "" @@ -5652,7 +5565,6 @@ msgstr "" msgid "Local MTA (Sendmail/Postfix/Exim/…) - use server setup" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Locale" msgstr "" @@ -5834,12 +5746,10 @@ msgstr "" msgid "Maximal" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Maximum Email Size" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Maximum failed logins" msgstr "" @@ -6087,40 +5997,40 @@ msgstr "" msgid "Multiselect" msgstr "" +#: db/seeds/overviews.rb +msgid "My Assigned Tickets" +msgstr "" + #: db/seeds/overviews.rb msgid "My Organization Tickets" msgstr "" +#: db/seeds/overviews.rb +msgid "My Pending Reached Tickets" +msgstr "" + +#: db/seeds/overviews.rb +msgid "My Replacement Tickets" +msgstr "" + #: app/assets/javascripts/app/views/dashboard.jst.eco msgid "My Stats" msgstr "" +#: db/seeds/overviews.rb +msgid "My Subscribed Tickets" +msgstr "" + #: app/assets/javascripts/app/views/profile/calendar_subscriptions.jst.eco #: app/assets/javascripts/app/views/profile/notification.jst.eco #: db/seeds/overviews.rb msgid "My Tickets" msgstr "" -#: db/seeds/overviews.rb -msgid "My assigned Tickets" -msgstr "" - #: app/assets/javascripts/app/views/dashboard/stats/ticket_waiting_time.jst.eco msgid "My handling time: %s minutes" msgstr "" -#: db/seeds/overviews.rb -msgid "My pending reached Tickets" -msgstr "" - -#: db/seeds/overviews.rb -msgid "My replacement Tickets" -msgstr "" - -#: db/seeds/overviews.rb -msgid "My subscribed Tickets" -msgstr "" - #: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco msgid "My tickets in process" msgstr "" @@ -6678,12 +6588,10 @@ msgstr "" msgid "Note" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Note - default visibility" msgstr "" -#: db/migrate/20220119102815_issue3924_confirmation_dialog.rb #: db/seeds/settings.rb msgid "Note - visibility confirmation dialog" msgstr "" @@ -6874,16 +6782,13 @@ msgstr "" msgid "Oops.. I'm sorry, but you have insufficient rights to open this %s." msgstr "" -#: db/seeds/overviews.rb -msgid "Open" -msgstr "" - #: app/assets/javascripts/app/views/dashboard/first_steps_test_ticket_finish.jst.eco msgid "Open Ticket# %s" msgstr "" #: app/assets/javascripts/app/controllers/widget/ticket_stats.coffee #: app/assets/javascripts/app/controllers/widget/user.coffee +#: db/seeds/overviews.rb msgid "Open Tickets" msgstr "" @@ -7123,7 +7028,6 @@ msgstr "" msgid "Password for proxy connection." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Password needs to contain 2 lower case and 2 upper case characters." msgstr "" @@ -7169,7 +7073,7 @@ msgid "Peep" msgstr "" #: db/seeds/overviews.rb -msgid "Pending reached" +msgid "Pending Reached Tickets" msgstr "" #: app/assets/javascripts/app/models/ticket.coffee @@ -7237,7 +7141,6 @@ msgstr "" msgid "Placetel" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Placetel Token" msgstr "" @@ -7412,18 +7315,17 @@ msgid "Proceed" msgstr "" #: db/seeds/schedulers.rb -msgid "Process auto unassign tickets" +msgid "Process automatic ticket unassignments." msgstr "" #: db/seeds/schedulers.rb -msgid "Process escalation tickets" +msgid "Process pending tickets." msgstr "" #: db/seeds/schedulers.rb -msgid "Process pending tickets" +msgid "Process ticket escalations." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Product Name" msgstr "" @@ -8159,7 +8061,6 @@ msgstr "" msgid "Sender Format Separator" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Sender based on Reply-To header" msgstr "" @@ -8232,7 +8133,6 @@ msgstr "" msgid "Set" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Set agent limit" msgstr "" @@ -8286,16 +8186,10 @@ msgstr "" msgid "Set up the communication channels you want to use with your Zammad." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Set/overwrite sender/from of email based on \"Reply-To\" header. Useful to set correct customer if email is received from a third-party system on behalf of a customer." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb -#: db/seeds/settings.rb -msgid "Sets the last customer contact based on either the last contact of the customer in general or on the last contact of the customer that has not received a response." -msgstr "" - #: app/assets/javascripts/app/controllers/_channel/email.coffee #: app/assets/javascripts/app/controllers/_channel/google.coffee #: app/assets/javascripts/app/controllers/_channel/microsoft365.coffee @@ -8462,7 +8356,6 @@ msgstr "" msgid "Slack" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Slack config" msgstr "" @@ -8585,7 +8478,6 @@ msgstr "" msgid "State" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Stats Backend" msgstr "" @@ -8716,13 +8608,12 @@ msgstr "" msgid "Sunday" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Support of multilingual Knowledge Base." msgstr "" #: db/seeds/schedulers.rb -msgid "Sync calendars with ical feeds." +msgid "Sync calendars with iCal feeds." msgstr "" #: app/assets/javascripts/app/controllers/_manage/system.coffee @@ -8779,11 +8670,11 @@ msgid "Tags" msgstr "" #: db/seeds/settings.rb -msgid "Take reply-to header as sender/from of email and use realname of origin from." +msgid "Take Reply-To header as sender/from of email and use the real name of origin from." msgstr "" #: db/seeds/settings.rb -msgid "Take reply-to header as sender/from of email." +msgid "Take Reply-To header as sender/from of email." msgstr "" #: app/assets/javascripts/app/views/knowledge_base/public_menu_form_item.jst.eco @@ -9338,7 +9229,6 @@ msgstr "" msgid "Ticket Interface" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Ticket Last Contact Behaviour" msgstr "" @@ -9500,7 +9390,6 @@ msgstr "" msgid "Timeframe for the first response." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb #: lib/excel_sheet.rb msgid "Timezone" @@ -9539,7 +9428,6 @@ msgstr "" msgid "To" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "To archive all outgoing emails from Zammad to external, you can store a BCC email address here." msgstr "" @@ -9592,7 +9480,6 @@ msgstr "" msgid "Token Access" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "Token for CTI." msgstr "" @@ -9761,7 +9648,7 @@ msgstr "" #: app/controllers/first_steps_controller.rb #: db/seeds/overviews.rb -msgid "Unassigned & Open" +msgid "Unassigned & Open Tickets" msgstr "" #: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco @@ -9950,6 +9837,14 @@ msgstr "" msgid "Use subject field for emails. If disabled, the ticket title will be used as subject." msgstr "" +#: db/seeds/settings.rb +msgid "Use the start time of the last customer thread (which may consist of multiple articles)." +msgstr "" + +#: db/seeds/settings.rb +msgid "Use the time of the very last customer article." +msgstr "" + #: app/assets/javascripts/app/controllers/_plugin/keyboard_shortcuts.coffee msgid "Used anywhere" msgstr "" @@ -10010,7 +9905,6 @@ msgstr "" msgid "User Filter" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "User Organization Selector - email" msgstr "" @@ -10044,7 +9938,6 @@ msgstr "" msgid "User email could not be extracted from 'id_token'." msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "User email for multiple users" msgstr "" @@ -11472,7 +11365,6 @@ msgstr "" msgid "show more" msgstr "" -#: db/migrate/20220121101413_setting_updates.rb #: db/seeds/settings.rb msgid "sipgate.io alternative FQDN" msgstr "" diff --git a/spec/lib/import/otrs/state_factory_spec.rb b/spec/lib/import/otrs/state_factory_spec.rb index f81cf6e45..50b0d42fd 100644 --- a/spec/lib/import/otrs/state_factory_spec.rb +++ b/spec/lib/import/otrs/state_factory_spec.rb @@ -120,7 +120,7 @@ RSpec.describe Import::OTRS::StateFactory do end it 'updates Overviews' do - name = 'My pending reached Tickets' + name = 'My Pending Reached Tickets' overview = Overview.find_by(name: name) expect do described_class.import(state_backend_param) diff --git a/spec/models/ticket/overviews_spec.rb b/spec/models/ticket/overviews_spec.rb index 0891787f3..36719fba4 100644 --- a/spec/models/ticket/overviews_spec.rb +++ b/spec/models/ticket/overviews_spec.rb @@ -23,7 +23,7 @@ RSpec.describe Ticket::Overviews do context 'when Agent' do let(:current_user) { create(:agent) } - it_behaves_like 'containing', 'Open' + it_behaves_like 'containing', 'Open Tickets' it_behaves_like 'not containing', 'My Tickets' it_behaves_like 'not containing', 'My Organization Tickets' end @@ -31,7 +31,7 @@ RSpec.describe Ticket::Overviews do context 'when Agent is also Customer' do let(:current_user) { create(:agent_and_customer, :with_org) } - it_behaves_like 'containing', 'Open' + it_behaves_like 'containing', 'Open Tickets' it_behaves_like 'containing', 'My Tickets' it_behaves_like 'containing', 'My Organization Tickets' end @@ -39,7 +39,7 @@ RSpec.describe Ticket::Overviews do context 'when Customer' do let(:current_user) { create(:customer, :with_org) } - it_behaves_like 'not containing', 'Open' + it_behaves_like 'not containing', 'Open Tickets' it_behaves_like 'containing', 'My Tickets' it_behaves_like 'containing', 'My Organization Tickets' end diff --git a/spec/system/dashboard_spec.rb b/spec/system/dashboard_spec.rb index ec256a6fa..7177fa99b 100644 --- a/spec/system/dashboard_spec.rb +++ b/spec/system/dashboard_spec.rb @@ -26,8 +26,8 @@ RSpec.describe 'Dashboard', type: :system do visit 'dashboard' find('div.tab[data-area=first-steps-widgets]').click find('.js-inviteCustomer').click - fill_in 'Firstname', with: 'Nick' - fill_in 'Lastname', with: 'Braun' + fill_in 'firstname', with: 'Nick' + fill_in 'lastname', with: 'Braun' fill_in 'Email', with: 'nick.braun@zammad.org' click_on 'Invite' expect(User.find_by(firstname: 'Nick').roles).to eq([Role.find_by(name: 'Public')]) diff --git a/spec/system/keyboard_shortcuts_spec.rb b/spec/system/keyboard_shortcuts_spec.rb index a8ad41d20..d78b10b4b 100644 --- a/spec/system/keyboard_shortcuts_spec.rb +++ b/spec/system/keyboard_shortcuts_spec.rb @@ -22,7 +22,7 @@ RSpec.describe 'Keyboard Shortcuts', type: :system do end it 'shows Overviews page' do - expect(page).to have_title('My assigned Tickets') + expect(page).to have_title('My Assigned Tickets') end end diff --git a/spec/system/manage/users_spec.rb b/spec/system/manage/users_spec.rb index 5c18d882d..caf0198cf 100644 --- a/spec/system/manage/users_spec.rb +++ b/spec/system/manage/users_spec.rb @@ -143,8 +143,8 @@ RSpec.describe 'Manage > Users', type: :system do it 'allows to update a user with no email/first/last/phone if login is present' do in_modal do - fill_in 'Firstname', with: '' - fill_in 'Lastname', with: '' + fill_in 'firstname', with: '' + fill_in 'lastname', with: '' fill_in 'Email', with: '' fill_in 'Phone', with: '' @@ -161,8 +161,8 @@ RSpec.describe 'Manage > Users', type: :system do it 'does not allow to update a user with no email/first/last/phone' do in_modal disappears: false do - fill_in 'Firstname', with: '' - fill_in 'Lastname', with: '' + fill_in 'firstname', with: '' + fill_in 'lastname', with: '' fill_in 'Email', with: '' fill_in 'Phone', with: '' diff --git a/spec/system/profile/preferences_language_spec.rb b/spec/system/profile/preferences_language_spec.rb index b629fc8cb..2d65997c0 100644 --- a/spec/system/profile/preferences_language_spec.rb +++ b/spec/system/profile/preferences_language_spec.rb @@ -105,7 +105,7 @@ RSpec.describe 'Profile > Language', type: :system do context 'with overview page visited' do let(:path) { 'ticket/view' } - let(:translated_content) { 'My assigned Tickets' } + let(:translated_content) { 'My Assigned Tickets' } it_behaves_like 'having translated content in the page title' it_behaves_like 'having translated content in', :active_content @@ -196,7 +196,7 @@ RSpec.describe 'Profile > Language', type: :system do context 'with overview page visited' do let(:path) { 'ticket/view' } - let(:translated_content) { 'Meine zugewiesenen Tickets' } + let(:translated_content) { Translation.translate('de-de', 'My Assigned Tickets') } it_behaves_like 'having translated content in the page title' it_behaves_like 'having translated content in', :active_content diff --git a/spec/system/ticket/view_spec.rb b/spec/system/ticket/view_spec.rb index 6cabea442..0ec2829eb 100644 --- a/spec/system/ticket/view_spec.rb +++ b/spec/system/ticket/view_spec.rb @@ -316,7 +316,7 @@ RSpec.describe 'Ticket views', type: :system, authenticated_as: :authenticate do custom_attribute ObjectManager::Attribute.migration_execute tickets - Overview.find_by(name: 'Open').update(group_by: custom_attribute.name) + Overview.find_by(name: 'Open Tickets').update(group_by: custom_attribute.name) Setting.set('ui_table_group_by_show_count', true) true end diff --git a/test/unit/ticket_overview_out_of_office_test.rb b/test/unit/ticket_overview_out_of_office_test.rb index 70bfc6873..f8eefbdd1 100644 --- a/test/unit/ticket_overview_out_of_office_test.rb +++ b/test/unit/ticket_overview_out_of_office_test.rb @@ -93,7 +93,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase }, ) @overview2 = Overview.create_if_not_exists( - name: 'My assigned Tickets', + name: 'My Assigned Tickets', link: 'my_assigned', prio: 900, role_ids: [overview_role.id], @@ -155,13 +155,13 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase current_user: @agent1, ) assert_equal(1, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) result = Ticket::Overviews.all( current_user: @agent2, ) assert_equal(1, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) result = Ticket::Overviews.all( current_user: @customer1, @@ -178,13 +178,13 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase current_user: @agent1, ) assert_equal(1, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) result = Ticket::Overviews.all( current_user: @agent2, ) assert_equal(2, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) assert_equal('My replacement Tickets', result[1].name) result = Ticket::Overviews.all( @@ -197,7 +197,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase test 'overview shown' do result = Ticket::Overviews.index(@agent1) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -205,7 +205,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -231,7 +231,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -239,7 +239,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -285,7 +285,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 1) assert_equal(result[0][:tickets].class, Array) @@ -294,7 +294,7 @@ class TicketOverviewOutOfOfficeTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert(result[0]) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) diff --git a/test/unit/ticket_overview_test.rb b/test/unit/ticket_overview_test.rb index da53ceba6..08319d4b8 100644 --- a/test/unit/ticket_overview_test.rb +++ b/test/unit/ticket_overview_test.rb @@ -88,7 +88,7 @@ class TicketOverviewTest < ActiveSupport::TestCase UserInfo.current_user_id = 1 overview_role = Role.find_by(name: 'Agent') @overview1 = Overview.create_or_update( - name: 'My assigned Tickets', + name: 'My Assigned Tickets', link: 'my_assigned', prio: 1000, role_ids: [overview_role.id], @@ -310,7 +310,7 @@ class TicketOverviewTest < ActiveSupport::TestCase ) assert_equal(3, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) assert_equal('Unassigned & Open', result[1].name) assert_equal('My Tickets only with Note', result[2].name) @@ -318,7 +318,7 @@ class TicketOverviewTest < ActiveSupport::TestCase current_user: @agent2, ) assert_equal(3, result.count) - assert_equal('My assigned Tickets', result[0].name) + assert_equal('My Assigned Tickets', result[0].name) assert_equal('Unassigned & Open', result[1].name) assert_equal('My Tickets 2', result[2].name) @@ -385,7 +385,7 @@ class TicketOverviewTest < ActiveSupport::TestCase Ticket.destroy_all result = Ticket::Overviews.index(@agent1) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -402,7 +402,7 @@ class TicketOverviewTest < ActiveSupport::TestCase assert_equal(result[2][:count], 0) result = Ticket::Overviews.index(@agent2) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -441,7 +441,7 @@ class TicketOverviewTest < ActiveSupport::TestCase ) result = Ticket::Overviews.index(@agent1) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -459,7 +459,7 @@ class TicketOverviewTest < ActiveSupport::TestCase assert_equal(result[2][:count], 0) result = Ticket::Overviews.index(@agent2) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -499,7 +499,7 @@ class TicketOverviewTest < ActiveSupport::TestCase ) result = Ticket::Overviews.index(@agent1) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -518,7 +518,7 @@ class TicketOverviewTest < ActiveSupport::TestCase assert_equal(result[2][:count], 0) result = Ticket::Overviews.index(@agent2) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -537,7 +537,7 @@ class TicketOverviewTest < ActiveSupport::TestCase ticket2.save! result = Ticket::Overviews.index(@agent1) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -556,7 +556,7 @@ class TicketOverviewTest < ActiveSupport::TestCase assert_equal(result[2][:count], 1) result = Ticket::Overviews.index(@agent2) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -598,7 +598,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -621,7 +621,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -646,7 +646,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -669,7 +669,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -694,7 +694,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -717,7 +717,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -742,7 +742,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -765,7 +765,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -790,7 +790,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -813,7 +813,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array) @@ -838,7 +838,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent1) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:tickets].class, Array) assert_equal(result[0][:tickets][0][:id], ticket2.id) @@ -861,7 +861,7 @@ class TicketOverviewTest < ActiveSupport::TestCase result = Ticket::Overviews.index(@agent2) assert_equal(result[0][:overview][:id], @overview1.id) - assert_equal(result[0][:overview][:name], 'My assigned Tickets') + assert_equal(result[0][:overview][:name], 'My Assigned Tickets') assert_equal(result[0][:overview][:view], 'my_assigned') assert_equal(result[0][:count], 0) assert_equal(result[0][:tickets].class, Array)