trabajo-afectivo/db/migrate/20170403000001_fixed_admin_user_permission_920.rb

780 lines
19 KiB
Ruby

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
class FixedAdminUserPermission920 < ActiveRecord::Migration[4.2]
def up
# return if it's a new setup
return if !Setting.exists?(name: 'system_init_done')
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'customer_id',
display: 'Customer',
data_type: 'user_autocompletion',
data_option: {
relation: 'User',
autocapitalize: false,
multiple: false,
guess: true,
null: false,
limit: 200,
placeholder: 'Enter Person or Organization/Company',
minLengt: 2,
translate: false,
permission: ['ticket.agent'],
},
editable: false,
active: true,
screens: {
create_top: {
'-all-' => {
null: false,
},
},
edit: {},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 10,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'type',
display: 'Type',
data_type: 'select',
data_option: {
default: '',
options: {
'Incident' => 'Incident',
'Problem' => 'Problem',
'Request for Change' => 'Request for Change',
},
nulloption: true,
multiple: false,
null: true,
translate: true,
},
editable: true,
active: false,
screens: {
create_middle: {
'-all-' => {
null: false,
item_class: 'column',
},
},
edit: {
'ticket.agent' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 20,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'group_id',
display: 'Group',
data_type: 'select',
data_option: {
default: '',
relation: 'Group',
relation_condition: { access: 'full' },
nulloption: true,
multiple: false,
null: false,
translate: false,
only_shown_if_selectable: true,
permission: ['ticket.agent', 'ticket.customer'],
},
editable: false,
active: true,
screens: {
create_middle: {
'-all-' => {
null: false,
item_class: 'column',
},
},
edit: {
'ticket.agent' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 25,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'owner_id',
display: 'Owner',
data_type: 'select',
data_option: {
default: '',
relation: 'User',
relation_condition: { roles: 'Agent' },
nulloption: true,
multiple: false,
null: true,
translate: false,
permission: ['ticket.agent'],
},
editable: false,
active: true,
screens: {
create_middle: {
'-all-' => {
null: true,
item_class: 'column',
},
},
edit: {
'-all-' => {
null: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 30,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'state_id',
display: 'State',
data_type: 'select',
data_option: {
relation: 'TicketState',
nulloption: true,
multiple: false,
null: false,
default: Ticket::State.find_by(default_follow_up: true).id,
translate: true,
filter: Ticket::State.by_category(:viewable).pluck(:id),
},
editable: false,
active: true,
screens: {
create_middle: {
'ticket.agent' => {
null: false,
item_class: 'column',
filter: Ticket::State.by_category(:viewable_agent_new).pluck(:id),
},
'ticket.customer' => {
item_class: 'column',
nulloption: false,
null: true,
filter: Ticket::State.by_category(:viewable_customer_new).pluck(:id),
default: Ticket::State.find_by(name: 'new').id,
},
},
edit: {
'ticket.agent' => {
nulloption: false,
null: false,
filter: Ticket::State.by_category(:viewable_agent_edit).pluck(:id),
},
'ticket.customer' => {
nulloption: false,
null: true,
filter: Ticket::State.by_category(:viewable_customer_edit).pluck(:id),
default: Ticket::State.find_by(name: 'open').id,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 40,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'pending_time',
display: 'Pending till',
data_type: 'datetime',
data_option: {
future: true,
past: false,
diff: 24,
null: true,
translate: true,
required_if: {
state_id: Ticket::State.by_category(:pending).pluck(:id),
},
shown_if: {
state_id: Ticket::State.by_category(:pending).pluck(:id),
},
},
editable: false,
active: true,
screens: {
create_middle: {
'-all-' => {
null: false,
item_class: 'column',
},
},
edit: {
'-all-' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 41,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'priority_id',
display: 'Priority',
data_type: 'select',
data_option: {
relation: 'TicketPriority',
nulloption: false,
multiple: false,
null: false,
default: Ticket::Priority.find_by(default_create: true).id,
translate: true,
},
editable: false,
active: true,
screens: {
create_middle: {
'ticket.agent' => {
null: false,
item_class: 'column',
},
},
edit: {
'ticket.agent' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 80,
)
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'tags',
display: 'Tags',
data_type: 'tag',
data_option: {
type: 'text',
null: true,
translate: false,
},
editable: false,
active: true,
screens: {
create_bottom: {
'ticket.agent' => {
null: true,
},
},
edit: {},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 900,
)
ObjectManager::Attribute.add(
force: true,
object: 'TicketArticle',
name: 'type_id',
display: 'Type',
data_type: 'select',
data_option: {
relation: 'TicketArticleType',
nulloption: false,
multiple: false,
null: false,
default: Ticket::Article::Type.lookup(name: 'note').id,
translate: true,
},
editable: false,
active: true,
screens: {
create_middle: {},
edit: {
'ticket.agent' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 100,
)
# rubocop:disable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'TicketArticle',
name: 'internal',
display: 'Visibility',
data_type: 'select',
data_option: {
options: {
true: 'internal',
false: 'public'
},
nulloption: false,
multiple: false,
null: true,
default: false,
translate: true,
},
editable: false,
active: true,
screens: {
create_middle: {},
edit: {
'ticket.agent' => {
null: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 200,
)
# rubocop:enable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'TicketArticle',
name: 'to',
display: 'To',
data_type: 'input',
data_option: {
type: 'text',
maxlength: 1000,
null: true,
},
editable: false,
active: true,
screens: {
create_middle: {},
edit: {
'ticket.agent' => {
null: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 300,
)
ObjectManager::Attribute.add(
force: true,
object: 'TicketArticle',
name: 'cc',
display: 'Cc',
data_type: 'input',
data_option: {
type: 'text',
maxlength: 1000,
null: true,
},
editable: false,
active: true,
screens: {
create_top: {},
create_middle: {},
edit: {
'ticket.agent' => {
null: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 400,
)
ObjectManager::Attribute.add(
force: true,
object: 'TicketArticle',
name: 'body',
display: 'Text',
data_type: 'richtext',
data_option: {
type: 'richtext',
maxlength: 20_000,
upload: true,
rows: 8,
null: true,
},
editable: false,
active: true,
screens: {
create_top: {
'-all-' => {
null: false,
},
},
edit: {
'-all-' => {
null: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 600,
)
ObjectManager::Attribute.add(
force: true,
object: 'User',
name: 'password',
display: 'Password',
data_type: 'input',
data_option: {
type: 'password',
maxlength: 100,
null: true,
autocomplete: 'off',
item_class: 'formGroup--halfSize',
},
editable: false,
active: true,
screens: {
signup: {
'-all-' => {
null: false,
},
},
invite_agent: {},
invite_customer: {},
edit: {
'admin.user' => {
null: true,
},
},
view: {}
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1400,
)
# rubocop:disable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'User',
name: 'vip',
display: 'VIP',
data_type: 'boolean',
data_option: {
null: true,
default: false,
item_class: 'formGroup--halfSize',
options: {
false: 'no',
true: 'yes',
},
translate: true,
permission: ['admin.user', 'ticket.agent'],
},
editable: false,
active: true,
screens: {
edit: {
'-all-' => {
null: true,
},
},
view: {
'-all-' => {
shown: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1490,
)
# rubocop:enable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'User',
name: 'role_ids',
display: 'Permissions',
data_type: 'user_permission',
data_option: {
null: false,
item_class: 'checkbox',
permission: ['admin.user'],
},
editable: false,
active: true,
screens: {
signup: {},
invite_agent: {
'-all-' => {
null: false,
default: [Role.lookup(name: 'Agent').id],
},
},
invite_customer: {},
edit: {
'-all-' => {
null: true,
},
},
view: {
'-all-' => {
shown: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1600,
)
ObjectManager::Attribute.add(
force: true,
object: 'User',
name: 'active',
display: 'Active',
data_type: 'active',
data_option: {
null: true,
default: true,
permission: ['admin.user', 'ticket.agent'],
},
editable: false,
active: true,
screens: {
signup: {},
invite_agent: {},
invite_customer: {},
edit: {
'-all-' => {
null: false,
},
},
view: {
'-all-' => {
shown: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1800,
)
# rubocop:disable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'Organization',
name: 'shared',
display: 'Shared organization',
data_type: 'boolean',
data_option: {
null: true,
default: true,
note: 'Customers in the organization can view each other items.',
item_class: 'formGroup--halfSize',
options: {
true: 'yes',
false: 'no',
},
translate: true,
permission: ['admin.organization'],
},
editable: false,
active: true,
screens: {
edit: {
'-all-' => {
null: false,
},
},
view: {
'-all-' => {
shown: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1400,
)
ObjectManager::Attribute.add(
force: true,
object: 'Organization',
name: 'domain_assignment',
display: 'Domain based assignment',
data_type: 'boolean',
data_option: {
null: true,
default: false,
note: 'Assign Users based on users domain.',
item_class: 'formGroup--halfSize',
options: {
true: 'yes',
false: 'no',
},
translate: true,
permission: ['admin.organization'],
},
editable: false,
active: true,
screens: {
edit: {
'-all-' => {
null: false,
},
},
view: {
'-all-' => {
shown: true,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1410,
)
# rubocop:enable Lint/BooleanSymbol
ObjectManager::Attribute.add(
force: true,
object: 'Organization',
name: 'active',
display: 'Active',
data_type: 'active',
data_option: {
null: true,
default: true,
permission: ['admin.organization'],
},
editable: false,
active: true,
screens: {
edit: {
'-all-' => {
null: false,
},
},
view: {
'-all-' => {
shown: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1800,
)
ObjectManager::Attribute.add(
force: true,
object: 'Group',
name: 'active',
display: 'Active',
data_type: 'active',
data_option: {
null: true,
default: true,
permission: ['admin.group'],
},
editable: false,
active: true,
screens: {
create: {
'-all-' => {
null: true,
},
},
edit: {
'-all-': {
null: false,
},
},
view: {
'-all-' => {
shown: false,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 1800,
)
map = {
Admin: 'admin',
Agent: 'ticket.agent',
Customer: 'ticket.customer',
}
ObjectManager::Attribute.all.each do |attribute|
next if attribute.screens.blank?
screens = {}
attribute.screens.each do |screen, role_value|
if role_value.blank?
screens[screen] = role_value
else
screens[screen] = {}
role_value.each do |role, value|
if map[role.to_sym]
screens[screen][map[role.to_sym]] = value
else
screens[screen][role] = value
end
end
end
end
attribute.screens = screens
attribute.save!
end
end
end