4971 lines
128 KiB
Ruby
4971 lines
128 KiB
Ruby
# Copyright (C) 2012-2021 Zammad Foundation, http://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: 'Something about to share. 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 application is in developer mode (useful for developer, all users have the same password, 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 system default 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 system default 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"',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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: 'Define 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',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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. Shows also location of an IP address if an IP address is shown.',
|
|
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: 'Display of the e-mail 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: 'Default visibility for new note.',
|
|
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: '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 e-mail 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 muliple users',
|
|
name: 'user_email_multiple_use',
|
|
area: 'Model::User',
|
|
description: 'Allow to use email address for muliple 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'],
|
|
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/'],
|
|
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'],
|
|
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'],
|
|
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'],
|
|
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'],
|
|
title_i18n: ['GitLab'],
|
|
description_i18n: ['GitLab', 'GitLab Applications', 'https://your-gitlab-host/admin/applications'],
|
|
permission: ['admin.security'],
|
|
},
|
|
state: false,
|
|
frontend: true
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'GitLab App Credentials',
|
|
name: 'auth_gitlab_credentials',
|
|
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: ['Office 365'],
|
|
description_i18n: ['Office 365', '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
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'auth_weibo',
|
|
tag: 'boolean',
|
|
options: {
|
|
true => 'yes',
|
|
false => 'no',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
preferences: {
|
|
controller: 'SettingsAreaSwitch',
|
|
sub: ['auth_weibo_credentials'],
|
|
title_i18n: ['Weibo'],
|
|
description_i18n: ['Sina Weibo', 'Sina Weibo Open Protal', 'http://open.weibo.com'],
|
|
permission: ['admin.security'],
|
|
},
|
|
state: false,
|
|
frontend: true
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Weibo App Credentials',
|
|
name: 'auth_weibo_credentials',
|
|
area: 'Security::ThirdPartyAuthentication::Weibo',
|
|
description: 'Enables user authentication via Weibo.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: 'App ID',
|
|
null: true,
|
|
name: 'client_id',
|
|
tag: 'input',
|
|
},
|
|
{
|
|
display: 'App Secret',
|
|
null: true,
|
|
name: 'client_secret',
|
|
tag: 'input',
|
|
},
|
|
{
|
|
display: 'Your callback URL',
|
|
null: true,
|
|
name: 'callback_url',
|
|
tag: 'auth_provider',
|
|
provider: 'auth_weibo',
|
|
},
|
|
],
|
|
},
|
|
state: {},
|
|
preferences: {
|
|
permission: ['admin.security'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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
|
|
)
|
|
|
|
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 and 2 upper characters',
|
|
name: 'password_min_2_lower_2_upper_characters',
|
|
area: 'Security::Password',
|
|
description: 'Password needs to contain 2 lower and 2 upper characters.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'password_min_2_lower_2_upper_characters',
|
|
tag: 'select',
|
|
options: {
|
|
1 => 'yes',
|
|
0 => 'no',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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: 'Number of failed logins after account 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: 'Sets the last customer contact based on the last contact of a customer or on the last contact of a customer to whom an agent has not yet responded.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'ticket_last_contact_behaviour',
|
|
tag: 'select',
|
|
translate: true,
|
|
options: {
|
|
'based_on_customer_reaction' => 'Last customer contact (without consideration an agent has replied to it)',
|
|
'check_if_agent_already_replied' => 'Last customer contact (with consideration an agent has replied to it)',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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: {
|
|
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 Assigment',
|
|
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 if group of created tickets 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 limit of tickets by ip per hour via web form.',
|
|
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 limit of tickets by ip per day via web form.',
|
|
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 limit of tickets per day via web form.',
|
|
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',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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: 'Maximum size in MB of emails.',
|
|
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. With this setting you can 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.',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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 realname of origin from.',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
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 a 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',
|
|
},
|
|
],
|
|
},
|
|
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 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 Zendesk endpoint to import users, ticket, 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 Key for requesting the Zendesk API',
|
|
name: 'import_zendesk_endpoint_key',
|
|
area: 'Import::Zendesk',
|
|
description: 'Defines Zendesk endpoint authentication 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
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'Import Endpoint',
|
|
name: 'import_freshdesk_endpoint',
|
|
area: 'Import::Freshdesk',
|
|
description: 'Defines Freshdesk endpoint to import users, ticket, states and articles.',
|
|
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 Key for requesting the Freshdesk API',
|
|
name: 'import_freshdesk_endpoint_key',
|
|
area: 'Import::Freshdesk',
|
|
description: 'Defines Freshdesk endpoint authentication key.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'import_freshdesk_endpoint_key',
|
|
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 get 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 translator identifier.',
|
|
name: 'translator_key',
|
|
area: 'i18n::translator_key',
|
|
description: 'Defines the translator identifier for contributions.',
|
|
options: {},
|
|
state: '',
|
|
frontend: false
|
|
)
|
|
|
|
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 not trusted 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
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Define postmaster filter.',
|
|
name: '0018_postmaster_import_archive',
|
|
area: 'Postmaster::PreFilter',
|
|
description: 'Define postmaster filter to import archive mailboxes.',
|
|
options: {},
|
|
state: 'Channel::Filter::ImportArchive',
|
|
frontend: false
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Defines postmaster filter.',
|
|
name: '0012_postmaster_filter_sender_is_system_address',
|
|
area: 'Postmaster::PreFilter',
|
|
description: 'Defines postmaster filter to check if email has been created by Zammad itself and will set the article sender.',
|
|
options: {},
|
|
state: 'Channel::Filter::SenderIsSystemAddress',
|
|
frontend: false
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Defines postmaster filter.',
|
|
name: '0014_postmaster_filter_own_notification_loop_detection',
|
|
area: 'Postmaster::PreFilter',
|
|
description: 'Define postmaster filter to check if email is a own 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 bounced - to handle it as follow-up of the original ticket.',
|
|
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 bounced - disable sending notification on permanent deleivery failed.',
|
|
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 bounced - reopen ticket on permanent temporary failed.',
|
|
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
|
|
)
|
|
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
|
|
)
|
|
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 service now 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 service now mails for correct follow-ups.',
|
|
options: {},
|
|
state: 'Channel::Filter::ServiceNowCheck',
|
|
frontend: false
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Defines postmaster filter.',
|
|
name: '5400_postmaster_filter_jira_check',
|
|
area: 'Postmaster::PreFilter',
|
|
description: 'Defines postmaster filter to identify jira mails for correct follow-ups.',
|
|
options: {},
|
|
state: 'Channel::Filter::JiraCheck',
|
|
frontend: false
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Defines postmaster filter.',
|
|
name: '5401_postmaster_filter_jira_check',
|
|
area: 'Postmaster::PostFilter',
|
|
description: 'Defines postmaster filter to identify jira mails for correct follow-ups.',
|
|
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 the postmaster filter which set the article internal if a forwarded, replied or sent email also exists with the article internal received.',
|
|
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
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'check_mk_integration',
|
|
tag: 'boolean',
|
|
options: {
|
|
true => 'yes',
|
|
false => 'no',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
state: false,
|
|
preferences: {
|
|
prio: 1,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'Group',
|
|
name: 'check_mk_group_id',
|
|
area: 'Integration::CheckMK',
|
|
description: 'Defines the group of created tickets.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'check_mk_group_id',
|
|
tag: 'select',
|
|
relation: 'Group',
|
|
},
|
|
],
|
|
},
|
|
state: 1,
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'check_mk_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: 'check_mk_auto_close_state_id',
|
|
area: 'Integration::CheckMK',
|
|
description: 'Defines the state of auto closed tickets.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'check_mk_auto_close_state_id',
|
|
tag: 'select',
|
|
relation: 'TicketState',
|
|
},
|
|
],
|
|
},
|
|
state: 4,
|
|
preferences: {
|
|
prio: 4,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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),
|
|
preferences: {
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'monit_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: 'monit_sender',
|
|
area: 'Integration::Monit',
|
|
description: 'Defines the sender email address of the service emails.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'monit_sender',
|
|
tag: 'input',
|
|
placeholder: 'monit@monitoring.example.com',
|
|
},
|
|
],
|
|
},
|
|
state: 'monit@monitoring.example.com',
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false,
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'monit_auto_close',
|
|
tag: 'boolean',
|
|
options: {
|
|
true => 'yes',
|
|
false => 'no',
|
|
},
|
|
translate: true,
|
|
},
|
|
],
|
|
},
|
|
state: true,
|
|
preferences: {
|
|
prio: 3,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'monit_auto_close_state_id',
|
|
tag: 'select',
|
|
relation: 'TicketState',
|
|
translate: true,
|
|
},
|
|
],
|
|
},
|
|
state: 4,
|
|
preferences: {
|
|
prio: 4,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
|
|
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,
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'idoit_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: 'i-doit config',
|
|
name: 'idoit_config',
|
|
area: 'Integration::Idoit',
|
|
description: 'Defines the i-doit config.',
|
|
options: {},
|
|
state: {},
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false,
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'GitLab integration',
|
|
name: 'gitlab_integration',
|
|
area: 'Integration::Switch',
|
|
description: 'Defines if the GitLab (http://www.gitlab.com) integration is enabled or not.',
|
|
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',
|
|
name: 'gitlab_config',
|
|
area: 'Integration::GitLab',
|
|
description: 'Stores the GitLab configuration.',
|
|
options: {},
|
|
state: {
|
|
endpoint: 'https://gitlab.com/api/graphql',
|
|
},
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false,
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'GitHub integration',
|
|
name: 'github_integration',
|
|
area: 'Integration::Switch',
|
|
description: 'Defines if the GitHub (http://www.github.com) integration is enabled or not.',
|
|
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',
|
|
name: 'github_config',
|
|
area: 'Integration::GitHub',
|
|
description: 'Stores the GitHub configuration.',
|
|
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 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 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 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 range in seconds of customer activity to trigger the user profile dialog on call.',
|
|
options: {},
|
|
state: 30.days,
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false,
|
|
)
|
|
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: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: true,
|
|
name: 'placetel_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: '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' => [] } },
|
|
preferences: {
|
|
prio: 2,
|
|
permission: ['admin.integration'],
|
|
cache: ['placetelGetVoipUsers'],
|
|
},
|
|
frontend: false,
|
|
)
|
|
Setting.create_if_not_exists(
|
|
title: 'PLACETEL Token',
|
|
name: 'placetel_token',
|
|
area: 'Integration::Placetel',
|
|
description: 'Token for Placetel.',
|
|
options: {
|
|
form: [
|
|
{
|
|
display: '',
|
|
null: false,
|
|
name: 'placetel_token',
|
|
tag: 'input',
|
|
},
|
|
],
|
|
},
|
|
state: ENV['PLACETEL_TOKEN'] || SecureRandom.urlsafe_base64(20),
|
|
preferences: {
|
|
permission: ['admin.integration'],
|
|
},
|
|
frontend: false
|
|
)
|
|
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 store 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 limit of agents',
|
|
name: 'system_agent_limit',
|
|
area: 'Core::Online',
|
|
description: 'Defines the limit of the agents.',
|
|
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 get 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 get 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 get 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 get 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 get 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 get scheduled automatically.',
|
|
options: {},
|
|
state: 'Stats::TicketReopen',
|
|
preferences: {
|
|
permission: ['ticket.agent'],
|
|
prio: 6,
|
|
},
|
|
frontend: false
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'Kb multi-lingual support',
|
|
name: 'kb_multi_lingual_support',
|
|
area: 'Kb::Core',
|
|
description: 'Support of multi-lingual Knowledge Base.',
|
|
options: {},
|
|
state: true,
|
|
preferences: { online_service_disable: true },
|
|
frontend: true
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'Kb active',
|
|
name: 'kb_active',
|
|
area: 'Kb::Core',
|
|
description: 'Defines if KB navbar button is enabled',
|
|
state: true,
|
|
preferences: {
|
|
prio: 1,
|
|
trigger: ['menu:render'],
|
|
authentication: true,
|
|
permission: ['admin.knowledge_base'],
|
|
},
|
|
frontend: true
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'Kb active publicly',
|
|
name: 'kb_active_publicly',
|
|
area: 'Kb::Core',
|
|
description: 'Defines if KB navbar button is enabled for users without KB permission',
|
|
state: false,
|
|
preferences: {
|
|
prio: 1,
|
|
trigger: ['menu:render'],
|
|
authentication: true,
|
|
permission: [],
|
|
},
|
|
frontend: true
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'Define timeframe where a own created note can get 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
|
|
)
|
|
|
|
Setting.create_if_not_exists(
|
|
title: 'S/MIME integration',
|
|
name: 'smime_integration',
|
|
area: 'Integration::Switch',
|
|
description: 'Defines if S/MIME encryption is enabled or not.',
|
|
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',
|
|
name: 'smime_config',
|
|
area: 'Integration::SMIME',
|
|
description: 'Defines the S/MIME config.',
|
|
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', 'Button for Single Sign On.'],
|
|
permission: ['admin.security'],
|
|
},
|
|
state: false,
|
|
frontend: true
|
|
)
|