172 lines
5.4 KiB
Ruby
172 lines
5.4 KiB
Ruby
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
|
|
class InitCoreWorkflow < ActiveRecord::Migration[5.2]
|
|
def change
|
|
return if !Setting.exists?(name: 'system_init_done')
|
|
|
|
add_table
|
|
add_setting_ajax
|
|
fix_invalid_screens
|
|
fix_pending_time
|
|
fix_organization_screens
|
|
fix_user_screens
|
|
add_workflows
|
|
end
|
|
|
|
def add_table # rubocop:disable Metrics/AbcSize
|
|
create_table :core_workflows do |t|
|
|
t.string :name, limit: 100, null: false
|
|
t.string :object, limit: 100, null: true
|
|
t.text :preferences, limit: 500.kilobytes + 1, null: true
|
|
t.text :condition_saved, limit: 500.kilobytes + 1, null: true
|
|
t.text :condition_selected, limit: 500.kilobytes + 1, null: true
|
|
t.text :perform, limit: 500.kilobytes + 1, null: true
|
|
t.boolean :active, null: false, default: true
|
|
t.boolean :stop_after_match, null: false, default: false
|
|
t.boolean :changeable, null: false, default: true
|
|
t.integer :priority, null: false, default: 0
|
|
t.integer :updated_by_id, null: false
|
|
t.integer :created_by_id, null: false
|
|
t.timestamps limit: 3, null: false
|
|
end
|
|
add_index :core_workflows, [:name], unique: true
|
|
add_foreign_key :core_workflows, :users, column: :created_by_id
|
|
add_foreign_key :core_workflows, :users, column: :updated_by_id
|
|
end
|
|
|
|
def add_setting_ajax
|
|
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
|
|
)
|
|
end
|
|
|
|
def fix_invalid_screens
|
|
ObjectManager::Attribute.where(object_lookup_id: [ ObjectLookup.by_name('User'), ObjectLookup.by_name('Organization') ], editable: false).each do |attribute|
|
|
next if attribute.screens[:edit].blank?
|
|
next if attribute.screens[:create].present?
|
|
|
|
attribute.screens[:create] = attribute.screens[:edit]
|
|
attribute.save
|
|
end
|
|
end
|
|
|
|
def fix_pending_time
|
|
pending_time = ObjectManager::Attribute.find_by(name: 'pending_time', object_lookup: ObjectLookup.find_by(name: 'Ticket'))
|
|
return if pending_time.blank?
|
|
|
|
pending_time.data_option.delete('required_if')
|
|
pending_time.data_option.delete('shown_if')
|
|
pending_time.save
|
|
end
|
|
|
|
def fix_organization_screens
|
|
%w[domain note].each do |name|
|
|
field = ObjectManager::Attribute.find_by(name: name, object_lookup: ObjectLookup.find_by(name: 'Organization'))
|
|
next if field.blank?
|
|
|
|
field.screens['create'] ||= {}
|
|
field.screens['create']['-all-'] ||= {}
|
|
field.screens['create']['-all-']['null'] = true
|
|
field.save
|
|
end
|
|
end
|
|
|
|
def fix_user_screens
|
|
%w[email web phone mobile organization_id fax department street zip city country address password vip note role_ids].each do |name|
|
|
field = ObjectManager::Attribute.find_by(name: name, object_lookup: ObjectLookup.find_by(name: 'User'))
|
|
next if field.blank?
|
|
|
|
field.screens['create'] ||= {}
|
|
field.screens['create']['-all-'] ||= {}
|
|
field.screens['create']['-all-']['null'] = true
|
|
field.save
|
|
end
|
|
end
|
|
|
|
def add_workflows
|
|
CoreWorkflow.create_if_not_exists(
|
|
name: 'base - hide pending time on non pending states',
|
|
object: 'Ticket',
|
|
condition_saved: {
|
|
'custom.module': {
|
|
operator: 'match all modules',
|
|
value: [
|
|
'CoreWorkflow::Custom::PendingTime',
|
|
],
|
|
},
|
|
},
|
|
perform: {
|
|
'custom.module': {
|
|
execute: ['CoreWorkflow::Custom::PendingTime']
|
|
},
|
|
},
|
|
changeable: false,
|
|
created_by_id: 1,
|
|
updated_by_id: 1,
|
|
)
|
|
CoreWorkflow.create_if_not_exists(
|
|
name: 'base - admin sla options',
|
|
object: 'Sla',
|
|
condition_saved: {
|
|
'custom.module': {
|
|
operator: 'match all modules',
|
|
value: [
|
|
'CoreWorkflow::Custom::AdminSla',
|
|
],
|
|
},
|
|
},
|
|
perform: {
|
|
'custom.module': {
|
|
execute: ['CoreWorkflow::Custom::AdminSla']
|
|
},
|
|
},
|
|
changeable: false,
|
|
created_by_id: 1,
|
|
updated_by_id: 1,
|
|
)
|
|
CoreWorkflow.create_if_not_exists(
|
|
name: 'base - core workflow',
|
|
object: 'CoreWorkflow',
|
|
condition_saved: {
|
|
'custom.module': {
|
|
operator: 'match all modules',
|
|
value: [
|
|
'CoreWorkflow::Custom::AdminCoreWorkflow',
|
|
],
|
|
},
|
|
},
|
|
perform: {
|
|
'custom.module': {
|
|
execute: ['CoreWorkflow::Custom::AdminCoreWorkflow']
|
|
},
|
|
},
|
|
changeable: false,
|
|
created_by_id: 1,
|
|
updated_by_id: 1,
|
|
)
|
|
end
|
|
end
|