trabajo-afectivo/db/seeds/settings.rb

5074 lines
134 KiB
Ruby
Raw Permalink Normal View History

2022-01-01 13:38:12 +00:00
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
Setting.create_if_not_exists(
title: __('Application secret'),
name: 'application_secret',
area: 'Core',
description: __('Defines the random application secret.'),
options: {},
state: SecureRandom.hex(128),
preferences: {
permission: ['admin'],
protected: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('System Init Done'),
name: 'system_init_done',
area: 'Core',
description: __('Defines if application is in init mode.'),
options: {},
state: false,
preferences: { online_service_disable: true },
frontend: true
)
Setting.create_if_not_exists(
title: __('App Version'),
name: 'app_version',
area: 'Core::WebApp',
description: __('Only used internally to propagate current web app version to clients.'),
options: {},
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Maintenance Mode'),
name: 'maintenance_mode',
area: 'Core::WebApp',
description: __('Enable or disable the maintenance mode of Zammad. If enabled, all non-administrators get logged out and only administrators can start a new session.'),
options: {},
state: false,
preferences: {
permission: ['admin.maintenance'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Maintenance Login'),
name: 'maintenance_login',
area: 'Core::WebApp',
description: __('Put a message on the login page. To change it, click on the text area below and change it in-line.'),
options: {},
state: false,
preferences: {
permission: ['admin.maintenance'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Maintenance Login'),
name: 'maintenance_login_message',
area: 'Core::WebApp',
description: __('Message for login page.'),
options: {},
state: __('This is a default maintenance message. Click here to change.'),
preferences: {
permission: ['admin.maintenance'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Developer System'),
name: 'developer_mode',
area: 'Core::Develop',
description: __('Defines if the application is in developer mode (all users have the same password and password reset will work without email delivery).'),
options: {},
state: Rails.env.development?,
preferences: { online_service_disable: true },
frontend: true
)
Setting.create_if_not_exists(
title: __('Online Service'),
name: 'system_online_service',
area: 'Core',
description: __('Defines if application is used as online service.'),
options: {},
state: false,
preferences: { online_service_disable: true },
frontend: true
)
Setting.create_if_not_exists(
title: __('Product Name'),
name: 'product_name',
area: 'System::Branding',
description: __('Defines the name of the application, shown in the web interface, tabs, and title bar of the web browser.'),
options: {
form: [
{
display: '',
null: false,
name: 'product_name',
tag: 'input',
},
],
},
preferences: {
render: true,
prio: 1,
placeholder: true,
permission: ['admin.branding'],
},
state: __('Zammad Helpdesk'),
frontend: true
)
Setting.create_if_not_exists(
title: __('Logo'),
name: 'product_logo',
area: 'System::Branding',
description: __('Defines the logo of the application, shown in the web interface.'),
options: {
form: [
{
display: '',
null: false,
name: 'product_logo',
tag: 'input',
},
],
},
preferences: {
prio: 3,
controller: 'SettingsAreaLogo',
permission: ['admin.branding'],
},
state: 'logo.svg',
frontend: true
)
Setting.create_if_not_exists(
title: __('Organization'),
name: 'organization',
area: 'System::Branding',
description: __('Will be shown in the app and is included in email footers.'),
options: {
form: [
{
display: '',
null: false,
name: 'organization',
tag: 'input',
},
],
},
state: '',
preferences: {
prio: 2,
placeholder: true,
permission: ['admin.branding'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Locale'),
name: 'locale_default',
area: 'System::Branding',
description: __('Defines the default system language.'),
options: {
form: [
{
name: 'locale_default',
}
],
},
state: 'en-us',
preferences: {
prio: 8,
controller: 'SettingsAreaItemDefaultLocale',
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Timezone'),
name: 'timezone_default',
area: 'System::Branding',
description: __('Defines the default system timezone.'),
options: {
form: [
{
name: 'timezone_default',
}
],
},
state: '',
preferences: {
prio: 9,
controller: 'SettingsAreaItemDefaultTimezone',
permission: ['admin.system'],
},
frontend: true
)
Setting.create_or_update(
title: __('Pretty Date'),
name: 'pretty_date_format',
area: 'System::Branding',
description: __('Defines pretty date format.'),
options: {
form: [
{
display: '',
null: false,
name: 'pretty_date_format',
tag: 'select',
options: {
relative: __('relative - e. g. "2 hours ago" or "2 days and 15 minutes ago"'),
absolute: __('absolute - e. g. "Monday 09:30" or "Tuesday 23. Feb 14:20"'),
timestamp: __('timestamp - e. g. "2018-08-30 14:30"'),
},
translate: true,
},
],
},
preferences: {
render: true,
prio: 10,
permission: ['admin.branding'],
},
state: 'relative',
frontend: true
)
options = {}
(10..99).each do |item|
options[item] = item
end
system_id = rand(10..99) # rubocop:disable Zammad/ForbidRand
Setting.create_if_not_exists(
title: __('SystemID'),
name: 'system_id',
area: 'System::Base',
description: __('Defines the system identifier. Every ticket number contains this ID. This ensures that only tickets which belong to your system will be processed as follow-ups (useful when communicating between two instances of Zammad).'),
options: {
form: [
{
display: '',
null: true,
name: 'system_id',
tag: 'select',
options: options,
},
],
},
state: system_id,
preferences: {
online_service_disable: true,
placeholder: true,
authentication: true,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Fully Qualified Domain Name'),
name: 'fqdn',
area: 'System::Base',
description: __('Defines the fully qualified domain name of the system. This setting is used as a variable, #{setting.fqdn} which is found in all forms of messaging used by the application, to build links to the tickets within your system.'), # rubocop:disable Lint/InterpolationCheck
options: {
form: [
{
display: '',
null: false,
name: 'fqdn',
tag: 'input',
},
],
},
state: 'zammad.example.com',
preferences: {
online_service_disable: true,
placeholder: true,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Websocket backend'),
name: 'websocket_backend',
area: 'System::WebSocket',
description: __('Defines how to reach websocket server. "websocket" is default on production, "websocketPort" is for CI'),
state: Rails.env.production? ? 'websocket' : 'websocketPort',
frontend: true
)
Setting.create_if_not_exists(
title: __('Websocket port'),
name: 'websocket_port',
area: 'System::WebSocket',
description: __('Defines the port of the websocket server.'),
options: {
form: [
{
display: '',
null: false,
name: 'websocket_port',
tag: 'input',
},
],
},
state: '6042',
preferences: { online_service_disable: true },
frontend: true
)
Setting.create_if_not_exists(
title: __('HTTP type'),
name: 'http_type',
area: 'System::Base',
description: __('Defines the HTTP protocol of your instance.'),
options: {
form: [
{
display: '',
null: true,
name: 'http_type',
tag: 'select',
options: {
'https' => 'https',
'http' => 'http',
},
},
],
},
state: 'http',
preferences: {
online_service_disable: true,
placeholder: true,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Storage Mechanism'),
name: 'storage_provider',
area: 'System::Storage',
description: __('"Database" stores all attachments in the database (not recommended for storing large amounts of data). "Filesystem" stores the data in the filesystem. You can switch between the modules even on a system that is already in production without any loss of data.'),
options: {
form: [
{
display: '',
null: true,
name: 'storage_provider',
tag: 'select',
tranlate: true,
options: {
'DB' => __('Database'),
'File' => __('Filesystem'),
},
translate: true,
},
],
},
state: 'DB',
preferences: {
controller: 'SettingsAreaStorageProvider',
online_service_disable: true,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Image Service'),
name: 'image_backend',
area: 'System::Services',
description: __('Defines the backend for user and organization image lookups.'),
options: {
form: [
{
display: '',
null: true,
name: 'image_backend',
tag: 'select',
options: {
'' => '-',
'Service::Image::Zammad' => __('Zammad Image Service'),
},
},
],
},
state: 'Service::Image::Zammad',
preferences: {
prio: 1,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Geo IP Service'),
name: 'geo_ip_backend',
area: 'System::Services',
description: __('Defines the backend for geo IP lookups. Also shows location of an IP address if it is traceable.'),
options: {
form: [
{
display: '',
null: true,
name: 'geo_ip_backend',
tag: 'select',
options: {
'' => '-',
'Service::GeoIp::Zammad' => __('Zammad GeoIP Service'),
},
},
],
},
state: 'Service::GeoIp::Zammad',
preferences: {
prio: 2,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Geo Location Service'),
name: 'geo_location_backend',
area: 'System::Services',
description: __('Defines the backend for geo location lookups to store geo locations for addresses.'),
options: {
form: [
{
display: '',
null: true,
name: 'geo_location_backend',
tag: 'select',
options: {
'' => '-',
'Service::GeoLocation::Gmaps' => __('Google Maps'),
},
},
],
},
state: 'Service::GeoLocation::Gmaps',
preferences: {
prio: 3,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Geo Calendar Service'),
name: 'geo_calendar_backend',
area: 'System::Services',
description: __('Defines the backend for geo calendar lookups. Used for initial calendar succession.'),
options: {
form: [
{
display: '',
null: true,
name: 'geo_calendar_backend',
tag: 'select',
options: {
'' => '-',
'Service::GeoCalendar::Zammad' => __('Zammad GeoCalendar Service'),
},
},
],
},
state: 'Service::GeoCalendar::Zammad',
preferences: {
prio: 2,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Proxy Settings'),
name: 'proxy',
area: 'System::Network',
description: __('Address of the proxy server for http and https resources.'),
options: {
form: [
{
display: '',
null: false,
name: 'proxy',
tag: 'input',
placeholder: 'proxy.example.com:3128',
},
],
},
state: '',
preferences: {
online_service_disable: true,
controller: 'SettingsAreaProxy',
prio: 1,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Proxy User'),
name: 'proxy_username',
area: 'System::Network',
description: __('Username for proxy connection.'),
options: {
form: [
{
display: '',
null: false,
name: 'proxy_username',
tag: 'input',
},
],
},
state: '',
preferences: {
disabled: true,
online_service_disable: true,
prio: 2,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Proxy Password'),
name: 'proxy_password',
area: 'System::Network',
description: __('Password for proxy connection.'),
options: {
form: [
{
display: '',
null: false,
name: 'proxy_password',
tag: 'input',
},
],
},
state: '',
preferences: {
disabled: true,
online_service_disable: true,
prio: 3,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('No Proxy'),
name: 'proxy_no',
area: 'System::Network',
description: __('No proxy for the following hosts.'),
options: {
form: [
{
display: '',
null: false,
name: 'proxy_no',
tag: 'input',
},
],
},
state: 'localhost,127.0.0.0,::1',
preferences: {
disabled: true,
online_service_disable: true,
prio: 4,
permission: ['admin.system'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Send client stats'),
name: 'ui_send_client_stats',
area: 'System::UI',
description: __('Send client stats/error message to central server to improve the usability.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_send_client_stats',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Client storage'),
name: 'ui_client_storage',
area: 'System::UI',
description: __('Use client storage to cache data to enhance performance of application.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_client_storage',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 2,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Core Workflow Ajax Mode'),
name: 'core_workflow_ajax_mode',
area: 'System::UI',
description: __('Defines if the core workflow communication should run over ajax instead of websockets.'),
options: {
form: [
{
display: '',
null: true,
name: 'core_workflow_ajax_mode',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 3,
permission: ['admin.system'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('User Organization Selector - email'),
name: 'ui_user_organization_selector_with_email',
area: 'UI::UserOrganizatiomSelector',
description: __('Defines if the email should be displayed in the result of the user/organization widget.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_user_organization_selector_with_email',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 100,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Note - default visibility'),
name: 'ui_ticket_zoom_article_note_new_internal',
area: 'UI::TicketZoom',
description: __('Defines the default visibility for new notes.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_note_new_internal',
tag: 'boolean',
translate: true,
options: {
true => 'internal',
false => 'public',
},
},
],
},
state: true,
preferences: {
prio: 100,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Article - 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".'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_visibility_confirmation_dialog',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 100,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Email - subject field'),
name: 'ui_ticket_zoom_article_email_subject',
area: 'UI::TicketZoom',
description: __('Use subject field for emails. If disabled, the ticket title will be used as subject.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_email_subject',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 200,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Email - full quote'),
name: 'ui_ticket_zoom_article_email_full_quote',
area: 'UI::TicketZoom',
description: __('Enable if you want to quote the full email in your answer. The quoted email will be put at the end of your answer. If you just want to quote a certain phrase, just mark the text and press reply (this feature is always available).'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_email_full_quote',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 220,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Email - quote header'),
name: 'ui_ticket_zoom_article_email_full_quote_header',
area: 'UI::TicketZoom',
description: __('Enable if you want a timestamped reply header to be automatically inserted in front of quoted messages.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_email_full_quote_header',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 240,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Twitter - tweet initials'),
name: 'ui_ticket_zoom_article_twitter_initials',
area: 'UI::TicketZoom',
description: __('Add sender initials to end of a tweet.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_article_twitter_initials',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 300,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Sidebar Attachments'),
name: 'ui_ticket_zoom_attachments_preview',
area: 'UI::TicketZoom::Preview',
description: __('Enables preview of attachments.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_attachments_preview',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 400,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Sidebar Attachments'),
name: 'ui_ticket_zoom_sidebar_article_attachments',
area: 'UI::TicketZoom::Preview',
description: __('Enables a sidebar to show an overview of all attachments.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_zoom_sidebar_article_attachments',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 500,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Set notes for ticket create types.'),
name: 'ui_ticket_create_notes',
area: 'UI::TicketCreate',
description: __('Set notes for ticket create types by selecting type.'),
options: {},
state: {
# 'email-out' => __('Attention: When creating a ticket an email is sent.'),
},
preferences: {
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Default type for a new ticket'),
name: 'ui_ticket_create_default_type',
area: 'UI::TicketCreate',
description: __('Select default ticket type'),
options: {
form: [
{
display: '',
null: false,
multiple: false,
name: 'ui_ticket_create_default_type',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: 'phone-in',
preferences: {
permission: ['admin.ui']
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Available types for a new ticket'),
name: 'ui_ticket_create_available_types',
area: 'UI::TicketCreate',
description: __('Set available ticket types'),
options: {
form: [
{
display: '',
null: false,
multiple: true,
name: 'ui_ticket_create_available_types',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: %w[phone-in phone-out email-out],
preferences: {
permission: ['admin.ui']
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Open ticket indicator'),
name: 'ui_sidebar_open_ticket_indicator_colored',
area: 'UI::Sidebar',
description: __('Color representation of the open ticket indicator in the sidebar.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_sidebar_open_ticket_indicator_colored',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Open ticket indicator'),
name: 'ui_table_group_by_show_count',
area: 'UI::Base',
description: __('Total display of the number of objects in a grouping.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_table_group_by_show_count',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Priority Icons in Overviews'),
name: 'ui_ticket_overview_priority_icon',
area: 'UI::TicketOverview::PriorityIcons',
description: __('Enables priority icons in ticket overviews.'),
options: {
form: [
{
display: '',
null: true,
name: 'ui_ticket_overview_priority_icon',
tag: 'boolean',
translate: true,
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 500,
permission: ['admin.ui'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('New User Accounts'),
name: 'user_create_account',
area: 'Security::Base',
description: __('Enables users to create their own account via web interface.'),
options: {
form: [
{
display: '',
null: true,
name: 'user_create_account',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 10,
permission: ['admin.security'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Lost Password'),
name: 'user_lost_password',
area: 'Security::Base',
description: __('Activates lost password feature for users.'),
options: {
form: [
{
display: '',
null: true,
name: 'user_lost_password',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 20,
permission: ['admin.security'],
},
frontend: true
)
options = [ { value: '0', name: 'disabled' }, { value: 1.hour.seconds, name: __('1 hour') }, { value: 2.hours.seconds, name: __('2 hours') }, { value: 1.day.seconds, name: __('1 day') }, { value: 7.days.seconds, name: __('1 week') }, { value: 14.days.seconds, name: __('2 weeks') }, { value: 21.days.seconds, name: __('3 weeks') }, { value: 28.days.seconds, name: __('4 weeks') } ]
Setting.create_if_not_exists(
title: __('Session Timeout'),
name: 'session_timeout',
area: 'Security::Base',
description: __('Defines the session timeout for inactivity of users. Based on the assigned permissions the highest timeout value will be used, otherwise the default.'),
options: {
form: [
{
display: __('Default'),
null: false,
name: 'default',
tag: 'select',
options: options,
translate: true,
},
{
display: __('admin'),
null: false,
name: 'admin',
tag: 'select',
options: options,
translate: true,
},
{
display: __('ticket.agent'),
null: false,
name: 'ticket.agent',
tag: 'select',
options: options,
translate: true,
},
{
display: __('ticket.customer'),
null: false,
name: 'ticket.customer',
tag: 'select',
options: options,
translate: true,
},
],
},
preferences: {
prio: 30,
},
state: {
'default' => 4.weeks.seconds,
'admin' => 4.weeks.seconds,
'ticket.agent' => 4.weeks.seconds,
'ticket.customer' => 4.weeks.seconds,
},
frontend: true
)
Setting.create_if_not_exists(
title: __('User email for multiple users'),
name: 'user_email_multiple_use',
area: 'Model::User',
description: __('Allow using one email address for multiple users.'),
options: {
form: [
{
display: '',
null: true,
name: 'user_email_multiple_use',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_internal',
area: 'Security::Authentication',
description: __('Enables user authentication via %s.'),
preferences: {
title_i18n: ['internal database'],
description_i18n: ['internal database'],
permission: ['admin.security'],
},
state: {
priority: 1,
adapter: 'Auth::Backend::Internal',
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_developer',
area: 'Security::Authentication',
description: __('Enables user authentication via %s.'),
preferences: {
title_i18n: ['developer password'],
description_i18n: ['developer password'],
permission: ['admin.security'],
},
state: {
priority: 2,
adapter: 'Auth::Backend::Developer',
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_ldap',
area: 'Security::Authentication',
description: __('Enables user authentication via %s.'),
preferences: {
title_i18n: ['LDAP'],
description_i18n: ['LDAP'],
permission: ['admin.security'],
},
state: {
priority: 3,
adapter: 'Auth::Backend::Ldap',
host: 'localhost',
port: 389,
bind_dn: 'cn=Manager,dc=example,dc=org',
bind_pw: 'example',
uid: 'mail',
base: 'dc=example,dc=org',
always_filter: '',
always_roles: %w[Admin Agent],
always_groups: ['Users'],
sync_params: {
firstname: 'sn',
lastname: 'givenName',
email: 'mail',
login: 'mail',
},
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Automatic account link on initial logon'),
name: 'auth_third_party_auto_link_at_inital_login',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables the automatic linking of an existing account on initial login via a third party application. If this is disabled, an existing user must first log into Zammad and then link his "Third Party" account to his Zammad account via Profile -> Linked Accounts.'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_third_party_auto_link_at_inital_login',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
permission: ['admin.security'],
prio: 10,
},
state: false,
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_twitter',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_twitter',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_twitter_credentials'],
title_i18n: ['Twitter'],
description_i18n: ['Twitter', 'Twitter Developer Site', 'https://dev.twitter.com/apps'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Twitter App Credentials'),
name: 'auth_twitter_credentials',
area: 'Security::ThirdPartyAuthentication::Twitter',
description: __('App credentials for Twitter.'),
options: {
form: [
{
display: __('Twitter Key'),
null: true,
name: 'key',
tag: 'input',
},
{
display: __('Twitter Secret'),
null: true,
name: 'secret',
tag: 'input',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_twitter',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_facebook',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_facebook',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_facebook_credentials'],
title_i18n: ['Facebook'],
description_i18n: ['Facebook', 'Facebook Developer Site', 'https://developers.facebook.com/apps/'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Facebook App Credentials'),
name: 'auth_facebook_credentials',
area: 'Security::ThirdPartyAuthentication::Facebook',
description: __('App credentials for Facebook.'),
options: {
form: [
{
display: __('App ID'),
null: true,
name: 'app_id',
tag: 'input',
},
{
display: __('App Secret'),
null: true,
name: 'app_secret',
tag: 'input',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_facebook',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_google_oauth2',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_google_oauth2',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_google_oauth2_credentials'],
title_i18n: ['Google'],
description_i18n: ['Google', 'Google API Console Site', 'https://console.cloud.google.com/apis/credentials'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Google App Credentials'),
name: 'auth_google_oauth2_credentials',
area: 'Security::ThirdPartyAuthentication::Google',
description: __('Enables user authentication via Google.'),
options: {
form: [
{
display: __('Client ID'),
null: true,
name: 'client_id',
tag: 'input',
},
{
display: __('Client Secret'),
null: true,
name: 'client_secret',
tag: 'input',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_google_oauth2',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_linkedin',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_linkedin',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_linkedin_credentials'],
title_i18n: ['LinkedIn'],
description_i18n: ['LinkedIn', 'LinkedIn Developer Site', 'https://www.linkedin.com/developer/apps'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('LinkedIn App Credentials'),
name: 'auth_linkedin_credentials',
area: 'Security::ThirdPartyAuthentication::Linkedin',
description: __('Enables user authentication via LinkedIn.'),
options: {
form: [
{
display: __('App ID'),
null: true,
name: 'app_id',
tag: 'input',
},
{
display: __('App Secret'),
null: true,
name: 'app_secret',
tag: 'input',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_linkedin',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_github',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_github',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_github_credentials'],
title_i18n: ['Github'],
description_i18n: ['Github', 'GitHub OAuth Applications', 'https://github.com/settings/applications'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('GitHub App Credentials'),
name: 'auth_github_credentials',
area: 'Security::ThirdPartyAuthentication::Github',
description: __('Enables user authentication via GitHub.'),
options: {
form: [
{
display: __('App ID'),
null: true,
name: 'app_id',
tag: 'input',
},
{
display: __('App Secret'),
null: true,
name: 'app_secret',
tag: 'input',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_github',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_gitlab',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_gitlab',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_gitlab_credentials'],
2021-03-10 16:11:14 +00:00
title_i18n: ['GitLab'],
description_i18n: ['GitLab', 'GitLab Applications', 'https://your-gitlab-host/admin/applications'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('GitLab App Credentials'),
name: 'auth_gitlab_credentials',
2021-03-10 16:11:14 +00:00
area: 'Security::ThirdPartyAuthentication::GitLab',
description: __('Enables user authentication via GitLab.'),
options: {
form: [
{
display: __('App ID'),
null: true,
name: 'app_id',
tag: 'input',
},
{
display: __('App Secret'),
null: true,
name: 'app_secret',
tag: 'input',
},
{
display: __('Site'),
null: true,
name: 'site',
tag: 'input',
placeholder: 'https://gitlab.YOURDOMAIN.com/api/v4/',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_gitlab',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_microsoft_office365',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_microsoft_office365',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_microsoft_office365_credentials'],
title_i18n: ['Microsoft'],
description_i18n: ['Microsoft', __('Microsoft Application Registration Portal'), 'https://portal.azure.com'],
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Office 365 App Credentials'),
name: 'auth_microsoft_office365_credentials',
area: 'Security::ThirdPartyAuthentication::Office365',
description: __('Enables user authentication via Office 365.'),
options: {
form: [
{
display: __('App ID'),
null: true,
name: 'app_id',
tag: 'input',
},
{
display: __('App Secret'),
null: true,
name: 'app_secret',
tag: 'input',
},
{
display: __('App Tenant ID'),
null: true,
name: 'app_tenant',
tag: 'input',
placeholder: 'common',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_microsoft_office365',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
2017-09-26 14:41:55 +00:00
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_weibo',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s. Register your app first at [%s](%s).'),
options: {
2017-09-26 14:41:55 +00:00
form: [
{
display: '',
null: true,
name: 'auth_weibo',
tag: 'boolean',
2017-09-26 14:41:55 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_weibo_credentials'],
title_i18n: ['Weibo'],
description_i18n: ['Sina Weibo', 'Sina Weibo Open Portal', 'http://open.weibo.com'], # rubocop:disable Zammad/DetectTranslatableString
permission: ['admin.security'],
2017-09-26 14:41:55 +00:00
},
state: false,
frontend: true
2017-09-26 14:41:55 +00:00
)
Setting.create_if_not_exists(
title: __('Weibo App Credentials'),
name: 'auth_weibo_credentials',
area: 'Security::ThirdPartyAuthentication::Weibo',
description: __('Enables user authentication via Weibo.'),
options: {
2017-09-26 14:41:55 +00:00
form: [
{
display: __('App ID'),
null: true,
name: 'client_id',
tag: 'input',
2017-09-26 14:41:55 +00:00
},
{
display: __('App Secret'),
null: true,
name: 'client_secret',
tag: 'input',
2017-09-26 14:41:55 +00:00
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_weibo',
},
2017-09-26 14:41:55 +00:00
],
},
state: {},
2017-09-26 14:41:55 +00:00
preferences: {
permission: ['admin.security'],
},
frontend: false
2017-09-26 14:41:55 +00:00
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_saml',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables user authentication via %s.'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_saml',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: ['auth_saml_credentials'],
title_i18n: ['SAML'],
description_i18n: ['SAML'],
permission: ['admin.security'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('SAML App Credentials'),
name: 'auth_saml_credentials',
area: 'Security::ThirdPartyAuthentication::SAML',
description: __('Enables user authentication via SAML.'),
options: {
form: [
{
display: __('IDP SSO target URL'),
null: true,
name: 'idp_sso_target_url',
tag: 'input',
placeholder: 'https://capriza.github.io/samling/samling.html',
},
{
display: __('IDP certificate'),
null: true,
name: 'idp_cert',
tag: 'input',
placeholder: '-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----',
},
{
display: __('IDP certificate fingerprint'),
null: true,
name: 'idp_cert_fingerprint',
tag: 'input',
placeholder: 'E7:91:B2:E1:...',
},
{
display: __('Name Identifier Format'),
null: true,
name: 'name_identifier_format',
tag: 'input',
placeholder: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
},
{
display: __('Your callback URL'),
null: true,
name: 'callback_url',
tag: 'auth_provider',
provider: 'auth_saml',
},
],
},
state: {},
preferences: {
permission: ['admin.security'],
},
frontend: false
)
2017-09-26 14:41:55 +00:00
Setting.create_if_not_exists(
title: __('Minimum length'),
name: 'password_min_size',
area: 'Security::Password',
description: __('Password needs to have at least a minimal number of characters.'),
options: {
form: [
{
display: '',
null: true,
name: 'password_min_size',
tag: 'select',
options: {
4 => ' 4',
5 => ' 5',
6 => ' 6',
7 => ' 7',
8 => ' 8',
9 => ' 9',
10 => '10',
11 => '11',
12 => '12',
13 => '13',
14 => '14',
15 => '15',
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
},
},
],
},
state: 10,
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('2 lower case and 2 upper case characters'),
name: 'password_min_2_lower_2_upper_characters',
area: 'Security::Password',
description: __('Password needs to contain 2 lower case and 2 upper case characters.'),
options: {
form: [
{
display: '',
null: true,
name: 'password_min_2_lower_2_upper_characters',
tag: 'select',
options: {
1 => 'yes',
0 => 'no',
},
translate: true,
},
],
},
state: 1,
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Digit required'),
name: 'password_need_digit',
area: 'Security::Password',
description: __('Password needs to contain at least one digit.'),
options: {
form: [
{
display: __('Needed'),
null: true,
name: 'password_need_digit',
tag: 'select',
options: {
1 => 'yes',
0 => 'no',
},
translate: true,
},
],
},
state: 1,
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Special character required'),
name: 'password_need_special_character',
area: 'Security::Password',
description: __('Password needs to contain at least one special character.'),
options: {
form: [
{
display: __('Needed'),
null: true,
name: 'password_need_special_character',
tag: 'select',
options: {
1 => 'yes',
0 => 'no',
},
translate: true,
},
],
},
state: 0,
preferences: {
permission: ['admin.security'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Maximum failed logins'),
name: 'password_max_login_failed',
area: 'Security::Password',
description: __('Defines after how many failed logins accounts will be deactivated.'),
options: {
form: [
{
display: '',
null: true,
name: 'password_max_login_failed',
tag: 'select',
options: {
4 => ' 4',
5 => ' 5',
6 => ' 6',
7 => ' 7',
8 => ' 8',
9 => ' 9',
10 => '10',
11 => '11',
13 => '13',
14 => '14',
15 => '15',
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
},
},
],
},
state: 5,
preferences: {
authentication: true,
permission: ['admin.security'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Ticket Hook'),
name: 'ticket_hook',
area: 'Ticket::Base',
description: __('The identifier for a ticket, e.g. Ticket#, Call#, MyTicket#. The default is Ticket#.'),
options: {
form: [
{
display: '',
null: false,
name: 'ticket_hook',
tag: 'input',
},
],
},
preferences: {
render: true,
placeholder: true,
authentication: true,
permission: ['admin.ticket'],
},
state: 'Ticket#',
frontend: true
)
Setting.create_if_not_exists(
title: __('Ticket Hook Divider'),
name: 'ticket_hook_divider',
area: 'Ticket::Base::Shadow',
description: __('The divider between TicketHook and ticket number. E. g. \': \'.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_hook_divider',
tag: 'input',
},
],
},
state: '',
preferences: {
permission: ['admin.ticket'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Hook Position'),
name: 'ticket_hook_position',
area: 'Ticket::Base',
description: __("The format of the subject.
* **Right** means **Some Subject [Ticket#12345]**
* **Left** means **[Ticket#12345] Some Subject**
* **None** means **Some Subject** (without ticket number). In the last case you should enable *postmaster_follow_up_search_in* to recognize follow-ups based on email headers and/or body."),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_hook_position',
tag: 'select',
translate: true,
options: {
'left' => __('left'),
'right' => __('right'),
'none' => __('none'),
},
},
],
},
state: 'right',
preferences: {
controller: 'SettingsAreaTicketHookPosition',
permission: ['admin.ticket'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Last Contact Behaviour'),
name: 'ticket_last_contact_behaviour',
area: 'Ticket::Base',
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).'),
},
},
],
},
state: 'check_if_agent_already_replied',
preferences: {
permission: ['admin.ticket'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Number Format'),
name: 'ticket_number',
area: 'Ticket::Number',
description: __("Selects the ticket number generator module.
* **Increment** increments the ticket number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139).
* With **Date** the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139)."),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_number',
tag: 'select',
translate: true,
options: {
'Ticket::Number::Increment' => __('Increment (SystemID.Counter)'),
'Ticket::Number::Date' => __('Date (Year.Month.Day.SystemID.Counter)'),
},
},
],
},
state: 'Ticket::Number::Increment',
preferences: {
2017-11-23 08:09:44 +00:00
settings_included: %w[ticket_number_increment ticket_number_date],
controller: 'SettingsAreaTicketNumber',
permission: ['admin.ticket'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Number Increment'),
name: 'ticket_number_increment',
area: 'Ticket::Number',
description: '-',
options: {
form: [
{
display: __('Checksum'),
null: true,
name: 'checksum',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
{
display: __('Min. size of number'),
null: true,
name: 'min_size',
tag: 'select',
options: {
1 => ' 1',
2 => ' 2',
3 => ' 3',
4 => ' 4',
5 => ' 5',
6 => ' 6',
7 => ' 7',
8 => ' 8',
9 => ' 9',
10 => '10',
11 => '11',
12 => '12',
13 => '13',
14 => '14',
15 => '15',
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
},
},
],
},
state: {
checksum: false,
min_size: 5,
},
preferences: {
permission: ['admin.ticket'],
hidden: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Number Increment Date'),
name: 'ticket_number_date',
area: 'Ticket::Number',
description: '-',
options: {
form: [
{
display: __('Checksum'),
null: true,
name: 'checksum',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: {
checksum: false
},
preferences: {
permission: ['admin.ticket'],
hidden: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Auto Assignment'),
name: 'ticket_auto_assignment',
area: 'Web::Base',
description: __('Enable ticket auto assignment.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_auto_assignment',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
authentication: true,
permission: ['admin.ticket_auto_assignment'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Time Accounting Selector'),
name: 'ticket_auto_assignment_selector',
area: 'Web::Base',
description: __('Enable auto assignment for following matching tickets.'),
options: {
form: [
{},
],
},
preferences: {
authentication: true,
permission: ['admin.ticket_auto_assignment'],
},
state: { condition: { 'ticket.state_id' => { operator: 'is', value: Ticket::State.by_category(:work_on).pluck(:id) } } },
frontend: true
)
Setting.create_or_update(
title: __('Time Accounting Selector'),
name: 'ticket_auto_assignment_user_ids_ignore',
area: 'Web::Base',
description: __('Define an exception of "automatic assignment" for certain users (e.g. executives).'),
options: {
form: [
{},
],
},
preferences: {
authentication: true,
permission: ['admin.ticket_auto_assignment'],
},
state: [],
frontend: true
)
Setting.create_if_not_exists(
title: __('Ticket Number ignore system_id'),
name: 'ticket_number_ignore_system_id',
area: 'Ticket::Core',
description: '-',
options: {
form: [
{
display: __('Ignore system_id'),
null: true,
name: 'ticket_number_ignore_system_id',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin.ticket'],
hidden: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Recursive Ticket Triggers'),
name: 'ticket_trigger_recursive',
area: 'Ticket::Core',
description: __('Activate the recursive processing of ticket triggers.'),
options: {
form: [
{
display: __('Recursive Ticket Triggers'),
null: true,
name: 'ticket_trigger_recursive',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin.ticket'],
hidden: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Recursive Ticket Triggers Loop Max.'),
name: 'ticket_trigger_recursive_max_loop',
area: 'Ticket::Core',
description: __('Maximum number of recursively executed triggers.'),
options: {
form: [
{
display: __('Recursive Ticket Triggers'),
null: true,
name: 'ticket_trigger_recursive_max_loop',
tag: 'select',
options: {
1 => ' 1',
2 => ' 2',
3 => ' 3',
4 => ' 4',
5 => ' 5',
6 => ' 6',
7 => ' 7',
8 => ' 8',
9 => ' 9',
10 => '10',
11 => '11',
12 => '12',
13 => '13',
14 => '14',
15 => '15',
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
},
},
],
},
state: 10,
preferences: {
permission: ['admin.ticket'],
hidden: true,
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Enable Ticket creation'),
name: 'customer_ticket_create',
area: 'CustomerWeb::Base',
description: __('Defines if a customer can create tickets via the web interface.'),
options: {
form: [
{
display: '',
null: true,
name: 'customer_ticket_create',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
authentication: true,
permission: ['admin.channel_web'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Group selection for Ticket creation'),
name: 'customer_ticket_create_group_ids',
area: 'CustomerWeb::Base',
description: __('Defines groups for which a customer can create tickets via web interface. "-" means all groups are available.'),
options: {
form: [
{
display: '',
null: true,
name: 'group_ids',
tag: 'select',
multiple: true,
nulloption: true,
relation: 'Group',
},
],
},
state: '',
preferences: {
authentication: true,
permission: ['admin.channel_web'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Tab behaviour after ticket action'),
name: 'ticket_secondary_action',
area: 'CustomerWeb::Base',
description: __('Defines the tab behaviour after a ticket action.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_secondary_action',
tag: 'boolean',
options: {
'closeTab' => __('Close tab'),
'closeTabOnTicketClose' => __('Close tab on ticket close'),
'closeNextInOverview' => __('Next in overview'),
'stayOnTab' => __('Stay on tab'),
},
},
],
},
state: 'stayOnTab',
preferences: {
authentication: true,
permission: ['admin.channel_web'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Enable Ticket creation'),
name: 'form_ticket_create',
area: 'Form::Base',
description: __('Defines if tickets can be created via web form.'),
options: {
form: [
{
display: '',
null: true,
name: 'form_ticket_create',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
permission: ['admin.channel_formular'],
},
frontend: false,
)
group = Group.where(active: true).first
if !group
group = Group.first
end
group_id = 1
if group
group_id = group.id
end
Setting.create_if_not_exists(
title: __('Group selection for ticket creation'),
name: 'form_ticket_create_group_id',
area: 'Form::Base',
description: __('Defines the group of tickets created via web form.'),
options: {
form: [
{
display: '',
null: true,
name: 'form_ticket_create_group_id',
tag: 'select',
relation: 'Group',
},
],
},
state: group_id,
preferences: {
permission: ['admin.channel_formular'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Limit tickets by IP per hour'),
name: 'form_ticket_create_by_ip_per_hour',
area: 'Form::Base',
description: __('Defines a limit for how many tickets can be created via web form from one IP address per hour.'),
options: {
form: [
{
display: '',
null: true,
name: 'form_ticket_create_by_ip_per_hour',
tag: 'input',
},
],
},
state: 20,
preferences: {
permission: ['admin.channel_formular'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Limit tickets by IP per day'),
name: 'form_ticket_create_by_ip_per_day',
area: 'Form::Base',
description: __('Defines a limit for how many tickets can be created via web form from one IP address per day.'),
options: {
form: [
{
display: '',
null: true,
name: 'form_ticket_create_by_ip_per_day',
tag: 'input',
},
],
},
state: 240,
preferences: {
permission: ['admin.channel_formular'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Limit tickets per day'),
name: 'form_ticket_create_per_day',
area: 'Form::Base',
description: __('Defines a limit for how many tickets can be created via web form per day.'),
options: {
form: [
{
display: '',
null: true,
name: 'form_ticket_create_per_day',
tag: 'input',
},
],
},
state: 5000,
preferences: {
permission: ['admin.channel_formular'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Ticket Subject Size'),
name: 'ticket_subject_size',
area: 'Email::Base',
description: __('Max. length of the subject in an email reply.'),
options: {
form: [
{
display: '',
null: false,
name: 'ticket_subject_size',
tag: 'input',
},
],
},
state: '110',
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Subject Reply'),
name: 'ticket_subject_re',
area: 'Email::Base',
description: __('The text at the beginning of the subject in an email reply, e.g. RE, AW, or AS.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_subject_re',
tag: 'input',
},
],
},
state: 'RE',
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Ticket Subject Forward'),
name: 'ticket_subject_fwd',
area: 'Email::Base',
description: __('The text at the beginning of the subject in an email forward, e. g. FWD.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_subject_fwd',
tag: 'input',
},
],
},
state: 'FWD',
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sender Format'),
name: 'ticket_define_email_from',
area: 'Email::Base',
description: __('Defines how the From field of emails (sent from answers and email tickets) should look like.'),
options: {
form: [
{
display: '',
null: true,
name: 'ticket_define_email_from',
tag: 'select',
options: {
SystemAddressName: __('System Address Display Name'),
AgentNameSystemAddressName: __('Agent Name + FromSeparator + System Address Display Name'),
AgentName: __('Agent Name'),
},
translate: true,
},
],
},
state: 'AgentNameSystemAddressName',
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sender Format Separator'),
name: 'ticket_define_email_from_separator',
area: 'Email::Base',
description: __('Defines the separator between the agent\'s real name and the given group email address.'),
options: {
form: [
{
display: '',
null: false,
name: 'ticket_define_email_from_separator',
tag: 'input',
},
],
},
state: 'via',
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Maximum Email Size'),
name: 'postmaster_max_size',
area: 'Email::Base',
description: __('Defines the maximum accepted email size in MB.'),
options: {
form: [
{
display: '',
null: true,
name: 'postmaster_max_size',
tag: 'select',
options: {
1 => ' 1',
2 => ' 2',
3 => ' 3',
4 => ' 4',
5 => ' 5',
6 => ' 6',
7 => ' 7',
8 => ' 8',
9 => ' 9',
10 => ' 10',
15 => ' 15',
20 => ' 20',
25 => ' 25',
30 => ' 30',
35 => ' 35',
40 => ' 40',
45 => ' 45',
50 => ' 50',
60 => ' 60',
70 => ' 70',
80 => ' 80',
90 => ' 90',
100 => '100',
125 => '125',
150 => '150',
},
},
],
},
state: 10,
preferences: {
online_service_disable: true,
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Additional follow-up detection'),
name: 'postmaster_follow_up_search_in',
area: 'Email::Base',
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.'),
options: {
form: [
{
display: '',
null: true,
name: 'postmaster_follow_up_search_in',
tag: 'checkbox',
options: {
'references' => __('References - Search for follow-up also in In-Reply-To or References headers.'),
'body' => __('Body - Search for follow-up also in mail body.'),
'attachment' => __('Attachment - Search for follow-up also in attachments.'),
},
translate: true,
},
],
},
state: [],
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sender based on Reply-To header'),
name: 'postmaster_sender_based_on_reply_to',
area: 'Email::Base',
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.'),
},
translate: true,
},
],
},
state: [],
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Customer selection based on sender and receiver list'),
name: 'postmaster_sender_is_agent_search_for_customer',
area: 'Email::Base',
description: __('If the sender is an agent, set the first user in the recipient list as the customer.'),
options: {
form: [
{
display: '',
null: true,
name: 'postmaster_sender_is_agent_search_for_customer',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Send postmaster mail if mail too large'),
name: 'postmaster_send_reject_if_mail_too_large',
area: 'Email::Base',
description: __('Send postmaster reject mail to sender of mail if mail is too large.'),
options: {
form: [
{
display: '',
null: true,
name: 'postmaster_send_reject_if_mail_too_large',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
online_service_disable: true,
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Notification Sender'),
name: 'notification_sender',
area: 'Email::Base',
description: __('Defines the sender of email notifications.'),
options: {
form: [
{
display: '',
null: false,
name: 'notification_sender',
tag: 'input',
},
],
},
2021-08-17 12:10:02 +00:00
state: '#{config.product_name} <noreply@#{config.fqdn}>', # rubocop:disable Lint/InterpolationCheck
preferences: {
online_service_disable: true,
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Block Notifications'),
name: 'send_no_auto_response_reg_exp',
area: 'Email::Base',
description: __('If this regex matches, no notification will be sent by the sender.'),
options: {
form: [
{
display: '',
null: false,
name: 'send_no_auto_response_reg_exp',
tag: 'input',
},
],
},
state: '(mailer-daemon|postmaster|abuse|root|noreply|noreply.+?|no-reply|no-reply.+?)@.+?',
preferences: {
online_service_disable: true,
permission: ['admin.channel_email', 'admin.channel_google', 'admin.channel_microsoft365'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('BCC address for all outgoing emails'),
name: 'system_bcc',
area: 'Email::Enhanced',
description: __('To archive all outgoing emails from Zammad to external, you can store a BCC email address here.'),
options: {},
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('API Token Access'),
name: 'api_token_access',
area: 'API::Base',
description: __('Enable REST API using tokens (not username/email address and password). Each user needs to create its own access tokens in user profile.'),
options: {
form: [
{
display: '',
null: true,
name: 'api_token_access',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
permission: ['admin.api'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('API Password Access'),
name: 'api_password_access',
area: 'API::Base',
description: __('Enable REST API access using the username/email address and password for the authentication user.'),
options: {
form: [
{
display: '',
null: true,
name: 'api_password_access',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
permission: ['admin.api'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Monitoring Token'),
name: 'monitoring_token',
area: 'HealthCheck::Base',
description: __('Token for monitoring.'),
options: {
form: [
{
display: '',
null: false,
name: 'monitoring_token',
tag: 'input',
},
],
},
state: ENV['MONITORING_TOKEN'] || SecureRandom.urlsafe_base64(40),
preferences: {
permission: ['admin.monitoring'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Enable Chat'),
name: 'chat',
area: 'Chat::Base',
description: __('Enable/disable online chat.'),
options: {
form: [
{
display: '',
null: true,
name: 'chat',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
trigger: ['menu:render', 'chat:rerender'],
permission: ['admin.channel_chat'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Agent idle timeout'),
name: 'chat_agent_idle_timeout',
area: 'Chat::Extended',
description: __('Idle timeout in seconds until agent is set offline automatically.'),
options: {
form: [
{
display: '',
null: false,
name: 'chat_agent_idle_timeout',
tag: 'input',
},
],
},
state: '120',
preferences: {
permission: ['admin.channel_chat'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Defines searchable models.'),
name: 'models_searchable',
area: 'Models::Base',
description: __('Defines the searchable models.'),
options: {},
state: Models.searchable.map(&:to_s),
preferences: {
authentication: true,
},
frontend: true,
)
Setting.create_if_not_exists(
title: __('Default Screen'),
name: 'default_controller',
area: 'Core',
description: __('Defines the default screen.'),
options: {},
state: '#dashboard',
frontend: true
)
Setting.create_if_not_exists(
title: __('Elasticsearch Endpoint URL'),
name: 'es_url',
area: 'SearchIndex::Elasticsearch',
description: __('Defines endpoint of Elasticsearch.'),
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Endpoint User'),
name: 'es_user',
area: 'SearchIndex::Elasticsearch',
description: __('Defines HTTP basic auth user of Elasticsearch.'),
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Endpoint Password'),
name: 'es_password',
area: 'SearchIndex::Elasticsearch',
description: __('Defines HTTP basic auth password of Elasticsearch.'),
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Endpoint Index'),
name: 'es_index',
area: 'SearchIndex::Elasticsearch',
description: __('Defines Elasticsearch index name.'),
state: 'zammad',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Attachment Extensions'),
name: 'es_attachment_ignore',
area: 'SearchIndex::Elasticsearch',
description: __('Defines attachment extensions which will be ignored by Elasticsearch.'),
state: [ '.png', '.jpg', '.jpeg', '.mpeg', '.mpg', '.mov', '.bin', '.exe', '.box', '.mbox' ],
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Attachment Size'),
name: 'es_attachment_max_size_in_mb',
area: 'SearchIndex::Elasticsearch',
description: __('Define max. attachment size for Elasticsearch.'),
state: 10,
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Total Payload Size'),
name: 'es_total_max_size_in_mb',
area: 'SearchIndex::Elasticsearch',
description: __('Define max. payload size for Elasticsearch.'),
state: 300,
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Elasticsearch Pipeline Name'),
name: 'es_pipeline',
area: 'SearchIndex::Elasticsearch',
description: __('Define pipeline name for Elasticsearch.'),
state: '',
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Mode'),
name: 'import_mode',
area: 'Import::Base',
description: __('Puts Zammad into import mode (disables some triggers).'),
options: {
form: [
{
display: '',
null: true,
name: 'import_mode',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Import Backend'),
name: 'import_backend',
area: 'Import::Base::Internal',
description: __('Set backend which is being used for import.'),
options: {},
state: '',
frontend: true
)
Setting.create_if_not_exists(
title: __('Ignore Escalation/SLA Information'),
name: 'import_ignore_sla',
area: 'Import::Base',
description: __('Ignore escalation/SLA information for import.'),
options: {
form: [
{
display: '',
null: true,
name: 'import_ignore_sla',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Endpoint'),
name: 'import_otrs_endpoint',
area: 'Import::OTRS',
description: __('Defines an OTRS endpoint to import users, tickets, states, and articles.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_otrs_endpoint',
tag: 'input',
},
],
},
state: 'http://otrs_host/otrs',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Key'),
name: 'import_otrs_endpoint_key',
area: 'Import::OTRS',
description: __('Defines OTRS endpoint authentication key.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_otrs_endpoint_key',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import User for HTTP basic authentication'),
name: 'import_otrs_user',
area: 'Import::OTRS',
description: __('Defines HTTP basic authentication user (only if OTRS is protected via HTTP basic auth).'),
options: {
form: [
{
display: '',
null: true,
name: 'import_otrs_user',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Password for HTTP basic authentication'),
name: 'import_otrs_password',
area: 'Import::OTRS',
description: __('Defines HTTP basic authentication password (only if OTRS is protected via HTTP basic auth).'),
options: {
form: [
{
display: '',
null: true,
name: 'import_otrs_password',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Endpoint'),
name: 'import_zendesk_endpoint',
area: 'Import::Zendesk',
description: __('Defines a Zendesk endpoint to import users, tickets, states, and articles.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_zendesk_endpoint',
tag: 'input',
},
],
},
state: 'https://yours.zendesk.com/api/v2',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import API key for requesting the Zendesk API'),
name: 'import_zendesk_endpoint_key',
area: 'Import::Zendesk',
description: __('Defines Zendesk endpoint authentication API key.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_zendesk_endpoint_key',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import User for requesting the Zendesk API'),
name: 'import_zendesk_endpoint_username',
area: 'Import::Zendesk',
description: __('Defines Zendesk endpoint authentication user.'),
options: {
form: [
{
display: '',
null: true,
name: 'import_zendesk_endpoint_username',
tag: 'input',
},
],
},
state: '',
frontend: false
)
2021-05-25 12:30:12 +00:00
Setting.create_if_not_exists(
title: __('Import Endpoint'),
2021-05-25 12:30:12 +00:00
name: 'import_freshdesk_endpoint',
area: 'Import::Freshdesk',
description: __('Defines a Freshdesk endpoint to import users, tickets, states, and articles.'),
2021-05-25 12:30:12 +00:00
options: {
form: [
{
display: '',
null: false,
name: 'import_freshdesk_endpoint',
tag: 'input',
},
],
},
state: 'https://yours.freshdesk.com/api/v2',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import API key for requesting the Freshdesk API'),
2021-05-25 12:30:12 +00:00
name: 'import_freshdesk_endpoint_key',
area: 'Import::Freshdesk',
description: __('Defines Freshdesk endpoint authentication API key.'),
2021-05-25 12:30:12 +00:00
options: {
form: [
{
display: '',
null: false,
name: 'import_freshdesk_endpoint_key',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Endpoint'),
name: 'import_kayako_endpoint',
area: 'Import::Kayako',
description: __('Defines a Kayako endpoint to import users, tickets, states, and articles.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_kayako_endpoint',
tag: 'input',
},
],
},
state: 'https://yours.kayako.com/api/v1',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import User for requesting the Kayako API'),
name: 'import_kayako_endpoint_username',
area: 'Import::Kayako',
description: __('Defines Kayako endpoint authentication user.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_kayako_endpoint_username',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Password for requesting the Kayako API'),
name: 'import_kayako_endpoint_password',
area: 'Import::Kayako',
description: __('Defines Kayako endpoint authentication password.'),
options: {
form: [
{
display: '',
null: false,
name: 'import_kayako_endpoint_password',
tag: 'input',
},
],
},
state: '',
frontend: false
)
Setting.create_if_not_exists(
title: __('Import Backends'),
name: 'import_backends',
area: 'Import',
description: __('A list of active import backends that gets scheduled automatically.'),
options: {},
state: ['Import::Ldap', 'Import::Exchange'],
preferences: {
permission: ['admin'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sequencer log level'),
name: 'sequencer_log_level',
area: 'Core',
description: __('Defines the log levels for various logging actions of the Sequencer.'),
options: {},
state: {
sequence: {
start_finish: :debug,
unit: :debug,
result: :debug,
},
state: {
optional: :debug,
set: :debug,
get: :debug,
attribute_initialization: {
start_finish: :debug,
attributes: :debug,
},
parameter_initialization: {
parameters: :debug,
start_finish: :debug,
unused: :debug,
},
expectations_initialization: :debug,
cleanup: {
start_finish: :debug,
remove: :debug,
}
}
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Time Accounting'),
name: 'time_accounting',
area: 'Web::Base',
description: __('Enable time accounting.'),
options: {
form: [
{
display: '',
null: true,
name: 'time_accounting',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
authentication: true,
permission: ['admin.time_accounting'],
},
state: false,
frontend: true
)
Setting.create_if_not_exists(
title: __('Time Accounting Selector'),
name: 'time_accounting_selector',
area: 'Web::Base',
description: __('Enable time accounting for these tickets.'),
options: {
form: [
{},
],
},
preferences: {
authentication: true,
permission: ['admin.time_accounting'],
},
state: {},
frontend: true
)
Setting.create_if_not_exists(
title: __('New Tags'),
name: 'tag_new',
area: 'Web::Base',
description: __('Allow users to create new tags.'),
options: {
form: [
{
display: '',
null: true,
name: 'tag_new',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
authentication: true,
permission: ['admin.tag'],
},
state: true,
frontend: true
)
Setting.create_if_not_exists(
title: __('Default calendar tickets subscriptions'),
name: 'defaults_calendar_subscriptions_tickets',
area: 'Defaults::CalendarSubscriptions',
description: __('Defines the default calendar tickets subscription settings.'),
options: {},
state: {
escalation: {
own: true,
not_assigned: false,
},
new_open: {
own: true,
not_assigned: false,
},
pending: {
own: true,
not_assigned: false,
}
},
preferences: {
authentication: true,
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0005_postmaster_filter_trusted',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to remove X-Zammad headers from untrustworthy sources.'),
options: {},
state: 'Channel::Filter::Trusted',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0006_postmaster_filter_auto_response_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify auto responses to prevent auto replies from Zammad.'),
options: {},
state: 'Channel::Filter::AutoResponseCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0007_postmaster_filter_follow_up_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify follow-ups (based on admin settings).'),
options: {},
state: 'Channel::Filter::FollowUpCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0008_postmaster_filter_follow_up_merged',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify follow-up ticket for merged tickets.'),
options: {},
state: 'Channel::Filter::FollowUpMerged',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0009_postmaster_filter_follow_up_assignment',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to set the owner (based on group follow up assignment).'),
options: {},
state: 'Channel::Filter::FollowUpAssignment',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0011_postmaster_sender_based_on_reply_to',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to set the sender/from of emails based on reply-to header.'),
options: {},
state: 'Channel::Filter::ReplyToBasedSender',
frontend: false
)
2020-10-29 14:58:36 +00:00
Setting.create_if_not_exists(
title: __('Define postmaster filter.'),
2020-10-29 14:58:36 +00:00
name: '0018_postmaster_import_archive',
area: 'Postmaster::PreFilter',
description: __('Define postmaster filter to import archive mailboxes.'),
2020-10-29 14:58:36 +00:00
options: {},
state: 'Channel::Filter::ImportArchive',
frontend: false
)
2020-06-02 11:01:16 +00:00
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0012_postmaster_filter_sender_is_system_address',
2020-06-02 11:01:16 +00:00
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to check if email has been created by Zammad itself and will set the article sender.'),
2020-06-02 11:01:16 +00:00
options: {},
state: 'Channel::Filter::SenderIsSystemAddress',
2020-06-02 11:01:16 +00:00
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0014_postmaster_filter_own_notification_loop_detection',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to check if the email is a self-created notification email, then ignore it to prevent email loops.'),
options: {},
state: 'Channel::Filter::OwnNotificationLoopDetection',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0015_postmaster_filter_identify_sender',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify sender user.'),
options: {},
state: 'Channel::Filter::IdentifySender',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0016_postmaster_filter_smime',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to handle secure mailing.'),
options: {},
state: 'Channel::Filter::SecureMailing',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0030_postmaster_filter_out_of_office_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify out-of-office emails for follow-up detection and keeping current ticket state.'),
options: {},
state: 'Channel::Filter::OutOfOfficeCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0200_postmaster_filter_follow_up_possible_check',
area: 'Postmaster::PreFilter',
description: __('Define postmaster filter to check if follow-ups get created (based on admin settings).'),
options: {},
state: 'Channel::Filter::FollowUpPossibleCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0900_postmaster_filter_bounce_follow_up_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify postmaster bounces; and handles them as follow-up of the original tickets'),
options: {},
state: 'Channel::Filter::BounceFollowUpCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0950_postmaster_filter_bounce_delivery_permanent_failed',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify postmaster bounces; and disables sending notification if delivery fails permanently.'),
options: {},
state: 'Channel::Filter::BounceDeliveryPermanentFailed',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '0955_postmaster_filter_bounce_delivery_temporary_failed',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify postmaster bounces; and reopens tickets if delivery fails permanently.'),
options: {},
state: 'Channel::Filter::BounceDeliveryTemporaryFailed',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '1000_postmaster_filter_database_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter for filters managed via admin interface.'),
options: {},
state: 'Channel::Filter::Database',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '5000_postmaster_filter_icinga',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to manage Icinga (http://www.icinga.org) emails.'),
options: {},
state: 'Channel::Filter::Icinga',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '5100_postmaster_filter_nagios',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to manage Nagios (http://www.nagios.org) emails.'),
options: {},
state: 'Channel::Filter::Nagios',
frontend: false
)
2017-10-24 23:24:07 +00:00
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '5300_postmaster_filter_monit',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to manage Monit (https://mmonit.com/monit/) emails.'),
options: {},
state: 'Channel::Filter::Monit',
frontend: false
2017-10-24 23:24:07 +00:00
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '5400_postmaster_filter_service_now_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify ServiceNow mails for correct follow-ups.'),
options: {},
state: 'Channel::Filter::ServiceNowCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
name: '5401_postmaster_filter_service_now_check',
area: 'Postmaster::PostFilter',
description: __('Defines postmaster filter to identify ServiceNow mails for correct follow-ups.'),
options: {},
state: 'Channel::Filter::ServiceNowCheck',
frontend: false
)
2021-08-13 12:39:09 +00:00
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
2021-08-13 12:39:09 +00:00
name: '5400_postmaster_filter_jira_check',
area: 'Postmaster::PreFilter',
description: __('Defines postmaster filter to identify Jira mails for correct follow-ups.'),
2021-08-13 12:39:09 +00:00
options: {},
state: 'Channel::Filter::JiraCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines postmaster filter.'),
2021-08-13 12:39:09 +00:00
name: '5401_postmaster_filter_jira_check',
area: 'Postmaster::PostFilter',
description: __('Defines postmaster filter to identify Jira mails for correct follow-ups.'),
2021-08-13 12:39:09 +00:00
options: {},
state: 'Channel::Filter::JiraCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Define postmaster filter.'),
name: '5500_postmaster_internal_article_check',
area: 'Postmaster::PreFilter',
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.'),
options: {},
state: 'Channel::Filter::InternalArticleCheck',
frontend: false
)
Setting.create_if_not_exists(
title: __('Icinga integration'),
name: 'icinga_integration',
area: 'Integration::Switch',
description: __('Defines if Icinga (http://www.icinga.org) is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'icinga_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sender'),
name: 'icinga_sender',
area: 'Integration::Icinga',
description: __('Defines the sender email address of Icinga emails.'),
options: {
form: [
{
display: '',
null: false,
name: 'icinga_sender',
tag: 'input',
placeholder: 'icinga@monitoring.example.com',
},
],
},
state: 'icinga@monitoring.example.com',
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Auto close'),
name: 'icinga_auto_close',
area: 'Integration::Icinga',
description: __('Defines if tickets should be closed if service is recovered.'),
options: {
form: [
{
display: '',
null: true,
name: 'icinga_auto_close',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 3,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Auto-close state'),
name: 'icinga_auto_close_state_id',
area: 'Integration::Icinga',
description: __('Defines the state of auto-closed tickets.'),
options: {
form: [
{
display: '',
null: false,
name: 'icinga_auto_close_state_id',
tag: 'select',
relation: 'TicketState',
},
],
},
state: 4,
preferences: {
prio: 4,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Nagios integration'),
name: 'nagios_integration',
area: 'Integration::Switch',
description: __('Defines if Nagios (http://www.nagios.org) is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'nagios_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Sender'),
name: 'nagios_sender',
area: 'Integration::Nagios',
description: __('Defines the sender email address of Nagios emails.'),
options: {
form: [
{
display: '',
null: false,
name: 'nagios_sender',
tag: 'input',
placeholder: 'nagios@monitoring.example.com',
},
],
},
state: 'nagios@monitoring.example.com',
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Auto close'),
name: 'nagios_auto_close',
area: 'Integration::Nagios',
description: __('Defines if tickets should be closed if service is recovered.'),
options: {
form: [
{
display: '',
null: true,
name: 'nagios_auto_close',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
preferences: {
prio: 3,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Auto-close state'),
name: 'nagios_auto_close_state_id',
area: 'Integration::Nagios',
description: __('Defines the state of auto-closed tickets.'),
options: {
form: [
{
display: '',
null: false,
name: 'nagios_auto_close_state_id',
tag: 'select',
relation: 'TicketState',
},
],
},
state: 4,
preferences: {
prio: 4,
permission: ['admin.integration'],
},
frontend: false
)
2017-08-21 23:13:19 +00:00
Setting.create_if_not_exists(
title: __('Checkmk integration'),
name: 'check_mk_integration',
area: 'Integration::Switch',
description: __('Defines if Checkmk (https://checkmk.com/) is enabled or not.'),
options: {
2017-08-21 23:13:19 +00:00
form: [
{
display: '',
null: true,
name: 'check_mk_integration',
tag: 'boolean',
2017-08-21 23:13:19 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
2017-08-21 23:13:19 +00:00
preferences: {
prio: 1,
2017-08-21 23:13:19 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-08-21 23:13:19 +00:00
)
Setting.create_if_not_exists(
title: __('Group'),
name: 'check_mk_group_id',
area: 'Integration::CheckMK',
description: __('Defines the group of created tickets.'),
options: {
2017-08-21 23:13:19 +00:00
form: [
{
display: '',
null: false,
name: 'check_mk_group_id',
tag: 'select',
2017-08-21 23:13:19 +00:00
relation: 'Group',
},
],
},
state: 1,
2017-08-21 23:13:19 +00:00
preferences: {
prio: 2,
2017-08-21 23:13:19 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-08-21 23:13:19 +00:00
)
Setting.create_if_not_exists(
title: __('Auto close'),
name: 'check_mk_auto_close',
area: 'Integration::CheckMK',
description: __('Defines if tickets should be closed if service is recovered.'),
options: {
2017-08-21 23:13:19 +00:00
form: [
{
display: '',
null: true,
name: 'check_mk_auto_close',
tag: 'boolean',
2017-08-21 23:13:19 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: true,
2017-08-21 23:13:19 +00:00
preferences: {
prio: 3,
2017-08-21 23:13:19 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-08-21 23:13:19 +00:00
)
Setting.create_if_not_exists(
title: __('Auto-close state'),
name: 'check_mk_auto_close_state_id',
area: 'Integration::CheckMK',
description: __('Defines the state of auto-closed tickets.'),
options: {
2017-08-21 23:13:19 +00:00
form: [
{
display: '',
null: false,
name: 'check_mk_auto_close_state_id',
tag: 'select',
2017-08-21 23:13:19 +00:00
relation: 'TicketState',
},
],
},
state: 4,
2017-08-21 23:13:19 +00:00
preferences: {
prio: 4,
2017-08-21 23:13:19 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-08-21 23:13:19 +00:00
)
Setting.create_if_not_exists(
title: __('Checkmk token'),
name: 'check_mk_token',
area: 'Core',
description: __('Defines the Checkmk token for allowing updates.'),
options: {},
state: ENV['CHECK_MK_TOKEN'] || SecureRandom.hex(16),
2017-08-21 23:13:19 +00:00
preferences: {
permission: ['admin.integration'],
},
frontend: false
2017-08-21 23:13:19 +00:00
)
2017-10-24 23:24:07 +00:00
Setting.create_if_not_exists(
title: __('Monit integration'),
name: 'monit_integration',
area: 'Integration::Switch',
description: __('Defines if Monit (https://mmonit.com/monit/) is enabled or not.'),
options: {
2017-10-24 23:24:07 +00:00
form: [
{
display: '',
null: true,
name: 'monit_integration',
tag: 'boolean',
2017-10-24 23:24:07 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
2017-10-24 23:24:07 +00:00
preferences: {
prio: 1,
2017-10-24 23:24:07 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-10-24 23:24:07 +00:00
)
Setting.create_if_not_exists(
title: __('Sender'),
name: 'monit_sender',
area: 'Integration::Monit',
description: __('Defines the sender email address of the service emails.'),
options: {
2017-10-24 23:24:07 +00:00
form: [
{
display: '',
null: false,
name: 'monit_sender',
tag: 'input',
2017-10-24 23:24:07 +00:00
placeholder: 'monit@monitoring.example.com',
},
],
},
state: 'monit@monitoring.example.com',
2017-10-24 23:24:07 +00:00
preferences: {
prio: 2,
2017-10-24 23:24:07 +00:00
permission: ['admin.integration'],
},
frontend: false,
2017-10-24 23:24:07 +00:00
)
Setting.create_if_not_exists(
title: __('Auto close'),
name: 'monit_auto_close',
area: 'Integration::Monit',
description: __('Defines if tickets should be closed if service is recovered.'),
options: {
2017-10-24 23:24:07 +00:00
form: [
{
display: '',
null: true,
name: 'monit_auto_close',
tag: 'boolean',
options: {
2017-10-24 23:24:07 +00:00
true => 'yes',
false => 'no',
},
translate: true,
},
],
},
state: true,
2017-10-24 23:24:07 +00:00
preferences: {
prio: 3,
2017-10-24 23:24:07 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-10-24 23:24:07 +00:00
)
Setting.create_if_not_exists(
title: __('Auto-close state'),
name: 'monit_auto_close_state_id',
area: 'Integration::Monit',
description: __('Defines the state of auto-closed tickets.'),
options: {
2017-10-24 23:24:07 +00:00
form: [
{
display: '',
null: false,
name: 'monit_auto_close_state_id',
tag: 'select',
relation: 'TicketState',
2017-10-24 23:24:07 +00:00
translate: true,
},
],
},
state: 4,
2017-10-24 23:24:07 +00:00
preferences: {
prio: 4,
2017-10-24 23:24:07 +00:00
permission: ['admin.integration'],
},
frontend: false
2017-10-24 23:24:07 +00:00
)
2017-08-21 23:13:19 +00:00
Setting.create_if_not_exists(
title: __('LDAP integration'),
name: 'ldap_integration',
area: 'Integration::Switch',
description: __('Defines if LDAP is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'ldap_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Exchange config'),
name: 'exchange_config',
area: 'Integration::Exchange',
description: __('Defines the Exchange config.'),
options: {},
state: {},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Exchange integration'),
name: 'exchange_integration',
area: 'Integration::Switch',
description: __('Defines if Exchange is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'exchange_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('LDAP config'),
name: 'ldap_config',
area: 'Integration::LDAP',
description: __('Defines the LDAP config.'),
options: {},
state: {},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
2017-09-06 06:39:02 +00:00
Setting.create_if_not_exists(
title: __('i-doit integration'),
name: 'idoit_integration',
area: 'Integration::Switch',
description: __('Defines if i-doit (http://www.i-doit) is enabled or not.'),
options: {
2017-09-06 06:39:02 +00:00
form: [
{
display: '',
null: true,
name: 'idoit_integration',
tag: 'boolean',
2017-09-06 06:39:02 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
2017-09-06 06:39:02 +00:00
preferences: {
prio: 1,
2017-09-06 06:39:02 +00:00
authentication: true,
permission: ['admin.integration'],
2017-09-06 06:39:02 +00:00
},
frontend: true
2017-09-06 06:39:02 +00:00
)
Setting.create_if_not_exists(
title: __('i-doit config'),
name: 'idoit_config',
area: 'Integration::Idoit',
description: __('Defines the i-doit config.'),
options: {},
state: {},
2017-09-06 06:39:02 +00:00
preferences: {
prio: 2,
2017-09-06 06:39:02 +00:00
permission: ['admin.integration'],
},
frontend: false,
2017-09-06 06:39:02 +00:00
)
2021-03-10 16:11:14 +00:00
Setting.create_if_not_exists(
title: __('GitLab integration'),
2021-03-10 16:11:14 +00:00
name: 'gitlab_integration',
area: 'Integration::Switch',
description: __('Defines if the GitLab (http://www.gitlab.com) integration is enabled or not.'),
2021-03-10 16:11:14 +00:00
options: {
form: [
{
display: '',
null: true,
name: 'gitlab_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('GitLab config'),
2021-03-10 16:11:14 +00:00
name: 'gitlab_config',
area: 'Integration::GitLab',
description: __('Stores the GitLab configuration.'),
2021-03-10 16:11:14 +00:00
options: {},
state: {
endpoint: 'https://gitlab.com/api/graphql',
},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
2021-03-10 16:25:26 +00:00
Setting.create_if_not_exists(
title: __('GitHub integration'),
2021-03-10 16:25:26 +00:00
name: 'github_integration',
area: 'Integration::Switch',
description: __('Defines if the GitHub (http://www.github.com) integration is enabled or not.'),
2021-03-10 16:25:26 +00:00
options: {
form: [
{
display: '',
null: true,
name: 'github_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('GitHub config'),
2021-03-10 16:25:26 +00:00
name: 'github_config',
area: 'Integration::GitHub',
description: __('Stores the GitHub configuration.'),
2021-03-10 16:25:26 +00:00
options: {},
state: {
endpoint: 'https://api.github.com/graphql',
},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('Defines sync transaction backend.'),
name: '0100_trigger',
area: 'Transaction::Backend::Sync',
description: __('Defines the transaction backend to execute triggers.'),
options: {},
state: 'Transaction::Trigger',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '0100_notification',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend to send agent notifications.'),
options: {},
state: 'Transaction::Notification',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '1000_signature_detection',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend to detect customer signatures in emails.'),
options: {},
state: 'Transaction::SignatureDetection',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '6000_slack_webhook',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend which posts messages to Slack (http://www.slack.com).'),
options: {},
state: 'Transaction::Slack',
frontend: false
)
Setting.create_if_not_exists(
title: __('Slack integration'),
name: 'slack_integration',
area: 'Integration::Switch',
description: __('Defines if Slack (http://www.slack.org) is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'slack_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Slack config'),
name: 'slack_config',
area: 'Integration::Slack',
description: __('Defines the Slack config.'),
options: {},
state: {
items: []
},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('sipgate.io integration'),
name: 'sipgate_integration',
area: 'Integration::Switch',
description: __('Defines if sipgate.io (http://www.sipgate.io) is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'sipgate_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
trigger: ['menu:render', 'cti:reload'],
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('sipgate.io Token'),
name: 'sipgate_token',
area: 'Integration::Sipgate',
description: __('Token for Sipgate.'),
options: {
form: [
{
display: '',
null: false,
name: 'sipgate_token',
tag: 'input',
},
],
},
state: ENV['SIPGATE_TOKEN'] || SecureRandom.urlsafe_base64(20),
preferences: {
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('sipgate.io config'),
name: 'sipgate_config',
area: 'Integration::Sipgate',
description: __('Defines the sipgate.io config.'),
options: {},
state: { 'outbound' => { 'routing_table' => [], 'default_caller_id' => '' }, 'inbound' => { 'block_caller_ids' => [] } },
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('sipgate.io alternative FQDN'),
name: 'sipgate_alternative_fqdn',
area: 'Integration::Sipgate::Expert',
description: __('Alternative FQDN for callbacks if you operate Zammad in an internal network.'),
options: {
form: [
{
display: '',
null: false,
name: 'sipgate_alternative_fqdn',
tag: 'input',
},
],
},
state: '',
preferences: {
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('CTI integration'),
name: 'cti_integration',
area: 'Integration::Switch',
description: __('Defines if generic CTI integration is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'cti_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
trigger: ['menu:render', 'cti:reload'],
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('CTI config'),
name: 'cti_config',
area: 'Integration::Cti',
description: __('Defines the CTI config.'),
options: {},
state: { 'outbound' => { 'routing_table' => [], 'default_caller_id' => '' }, 'inbound' => { 'block_caller_ids' => [] } },
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
Setting.create_if_not_exists(
title: __('CTI Token'),
name: 'cti_token',
area: 'Integration::Cti',
description: __('Token for CTI.'),
options: {
form: [
{
display: '',
null: false,
name: 'cti_token',
tag: 'input',
},
],
},
state: ENV['CTI_TOKEN'] || SecureRandom.urlsafe_base64(20),
preferences: {
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('CTI customer last activity'),
name: 'cti_customer_last_activity',
area: 'Integration::Cti',
description: __('Defines the duration of customer activity (in seconds) on a call until the user profile dialog is shown.'),
options: {},
state: 30.days,
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: false,
)
2018-10-15 09:47:59 +00:00
Setting.create_if_not_exists(
title: __('Placetel integration'),
name: 'placetel_integration',
area: 'Integration::Switch',
description: __('Defines if Placetel (http://www.placetel.de) is enabled or not.'),
options: {
2018-10-15 09:47:59 +00:00
form: [
{
display: '',
null: true,
name: 'placetel_integration',
tag: 'boolean',
2018-10-15 09:47:59 +00:00
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
2018-10-15 09:47:59 +00:00
preferences: {
prio: 1,
trigger: ['menu:render', 'cti:reload'],
2018-10-15 09:47:59 +00:00
authentication: true,
permission: ['admin.integration'],
2018-10-15 09:47:59 +00:00
},
frontend: true
2018-10-15 09:47:59 +00:00
)
Setting.create_if_not_exists(
title: __('Placetel config'),
name: 'placetel_config',
area: 'Integration::Placetel',
description: __('Defines the Placetel config.'),
options: {},
state: { 'outbound' => { 'routing_table' => [], 'default_caller_id' => '' }, 'inbound' => { 'block_caller_ids' => [] } },
2018-10-15 09:47:59 +00:00
preferences: {
prio: 2,
2018-10-15 09:47:59 +00:00
permission: ['admin.integration'],
cache: ['placetelGetVoipUsers'],
2018-10-15 09:47:59 +00:00
},
frontend: false,
2018-10-15 09:47:59 +00:00
)
Setting.create_if_not_exists(
title: __('Placetel Token'),
name: 'placetel_token',
area: 'Integration::Placetel',
description: __('Defines the token for Placetel.'),
options: {
2018-10-15 09:47:59 +00:00
form: [
{
display: '',
null: false,
name: 'placetel_token',
tag: 'input',
2018-10-15 09:47:59 +00:00
},
],
},
state: ENV['PLACETEL_TOKEN'] || SecureRandom.urlsafe_base64(20),
2018-10-15 09:47:59 +00:00
preferences: {
permission: ['admin.integration'],
},
frontend: false
2018-10-15 09:47:59 +00:00
)
Setting.create_if_not_exists(
title: __('Clearbit integration'),
name: 'clearbit_integration',
area: 'Integration::Switch',
description: __('Defines if Clearbit (http://www.clearbit.com) is enabled or not.'),
options: {
form: [
{
display: '',
null: true,
name: 'clearbit_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
permission: ['admin.integration'],
},
frontend: false
)
Setting.create_if_not_exists(
title: __('Clearbit config'),
name: 'clearbit_config',
area: 'Integration::Clearbit',
description: __('Defines the Clearbit config.'),
options: {},
state: {},
frontend: false,
preferences: {
prio: 2,
permission: ['admin.integration'],
},
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '9000_clearbit_enrichment',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend which will enrich customer and organization information from Clearbit (http://www.clearbit.com).'),
options: {},
state: 'Transaction::ClearbitEnrichment',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '9100_cti_caller_id_detection',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend which detects caller IDs in objects and stores them for CTI lookups.'),
options: {},
state: 'Transaction::CtiCallerIdDetection',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines transaction backend.'),
name: '9200_karma',
area: 'Transaction::Backend::Async',
description: __('Defines the transaction backend which creates the karma score.'),
options: {},
state: 'Transaction::Karma',
frontend: false
)
Setting.create_if_not_exists(
title: __('Defines karma levels.'),
name: 'karma_levels',
area: 'Core::Karma',
description: __('Defines the karma levels.'),
options: {},
state: [
{
name: __('Beginner'),
start: 0,
end: 499,
},
{
name: __('Newbie'),
start: 500,
end: 1999,
},
{
name: __('Intermediate'),
start: 2000,
end: 4999,
},
{
name: __('Professional'),
start: 5000,
end: 6999,
},
{
name: __('Expert'),
start: 7000,
end: 8999,
},
{
name: __('Master'),
start: 9000,
end: 18_999,
},
{
name: __('Evangelist'),
start: 19_000,
end: 49_999,
},
{
name: __('Hero'),
start: 50_000,
end: nil,
},
],
frontend: false
)
Setting.create_if_not_exists(
title: __('Set agent limit'),
name: 'system_agent_limit',
area: 'Core::Online',
description: __('Defines the agent limit.'),
options: {},
state: false,
preferences: { online_service_disable: true },
frontend: false
)
Setting.create_if_not_exists(
title: __('HTML Email CSS Font'),
name: 'html_email_css_font',
area: 'Core',
description: __('Defines the CSS font information for HTML emails.'),
options: {},
state: "font-family:'Helvetica Neue', Helvetica, Arial, Geneva, sans-serif; font-size: 12px;",
preferences: {
permission: ['admin'],
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketWaitingTime'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketWaitingTime',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketWaitingTime',
preferences: {
permission: ['ticket.agent'],
prio: 1,
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketEscalation'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketEscalation',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketEscalation',
preferences: {
permission: ['ticket.agent'],
prio: 2,
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketChannelDistribution'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketChannelDistribution',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketChannelDistribution',
preferences: {
permission: ['ticket.agent'],
prio: 3,
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketLoadMeasure'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketLoadMeasure',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketLoadMeasure',
preferences: {
permission: ['ticket.agent'],
prio: 4,
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketInProcess'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketInProcess',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketInProcess',
preferences: {
permission: ['ticket.agent'],
prio: 5,
},
frontend: false
)
# add the dashboard stats backend for 'Stats::TicketReopen'
Setting.create_if_not_exists(
title: __('Stats Backend'),
name: 'Stats::TicketReopen',
area: 'Dashboard::Stats',
description: __('Defines a dashboard stats backend that gets scheduled automatically.'),
options: {},
state: 'Stats::TicketReopen',
preferences: {
permission: ['ticket.agent'],
prio: 6,
},
frontend: false
)
2019-06-04 03:40:48 +00:00
Setting.create_if_not_exists(
title: __('Knowledge Base multilingual support'),
2019-06-04 03:40:48 +00:00
name: 'kb_multi_lingual_support',
area: 'Kb::Core',
description: __('Support of multilingual Knowledge Base.'),
2019-06-04 03:40:48 +00:00
options: {},
state: true,
preferences: { online_service_disable: true },
frontend: true
)
Setting.create_if_not_exists(
title: __('Knowledge Base active'),
2019-06-04 03:40:48 +00:00
name: 'kb_active',
area: 'Kb::Core',
description: __('Defines if Knowledge Base navbar button is enabled.'),
2019-06-04 03:40:48 +00:00
state: true,
preferences: {
prio: 1,
trigger: ['menu:render'],
authentication: true,
permission: ['admin.knowledge_base'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Knowledge Base active publicly'),
2019-06-04 03:40:48 +00:00
name: 'kb_active_publicly',
area: 'Kb::Core',
description: __('Defines if Knowledge Base navbar button is enabled for users without Knowledge Base permission.'),
2019-06-04 03:40:48 +00:00
state: false,
preferences: {
prio: 1,
trigger: ['menu:render'],
authentication: true,
permission: [],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('Defines the timeframe during which a self-created note can be deleted.'),
name: 'ui_ticket_zoom_article_delete_timeframe',
area: 'UI::TicketZoomArticle',
description: __("Set timeframe in seconds. If it's set to 0 you can delete notes without time limits"),
options: {},
state: 600,
preferences: {
permission: ['admin.ui']
},
frontend: true
)
2020-06-02 11:01:16 +00:00
Setting.create_if_not_exists(
title: __('S/MIME integration'),
2020-06-02 11:01:16 +00:00
name: 'smime_integration',
area: 'Integration::Switch',
description: __('Defines if S/MIME encryption is enabled or not.'),
2020-06-02 11:01:16 +00:00
options: {
form: [
{
display: '',
null: true,
name: 'smime_integration',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
state: false,
preferences: {
prio: 1,
authentication: true,
permission: ['admin.integration'],
},
frontend: true
)
Setting.create_if_not_exists(
title: __('S/MIME config'),
2020-06-02 11:01:16 +00:00
name: 'smime_config',
area: 'Integration::SMIME',
description: __('Defines the S/MIME config.'),
2020-06-02 11:01:16 +00:00
options: {},
state: {},
preferences: {
prio: 2,
permission: ['admin.integration'],
},
frontend: true,
)
Setting.create_if_not_exists(
title: __('Authentication via %s'),
name: 'auth_sso',
area: 'Security::ThirdPartyAuthentication',
description: __('Enables button for user authentication via %s. The button will redirect to /auth/sso on user interaction.'),
options: {
form: [
{
display: '',
null: true,
name: 'auth_sso',
tag: 'boolean',
options: {
true => 'yes',
false => 'no',
},
},
],
},
preferences: {
controller: 'SettingsAreaSwitch',
sub: {},
title_i18n: ['SSO'],
description_i18n: ['SSO'],
permission: ['admin.security'],
},
state: false,
frontend: true
)