zammad/lib/validations/object_manager/attribute_validator/required.rb

55 lines
1.6 KiB
Ruby
Raw Permalink Normal View History

# Copyright (C) 2012-2026 Zammad Foundation, https://zammad-foundation.org/
# This validator is used in special situations only. In most cases CoreWorkflow is used instead.
# It does not run for any object which has ChecksCoreWorkflow concern.
# Please note that all objects that may have custom attributes created via UI use CoreWorkflow.
# This may run in Ticket::Article if custom attribute were created manually.
# Or if there are custom modifications using this functionality
class Validations::ObjectManager::AttributeValidator::Required < Validations::ObjectManager::AttributeValidator::Backend
def validate
return if record.class.include?(ChecksCoreWorkflow)
return if !value.nil?
return if optional_for_user?
invalid_because_attribute(__('is required but missing'))
end
private
def optional_for_user?
return true if system_user?
return true if required_for_permissions.blank?
return false if required_for_permissions.include?('-all-')
!user.permissions?(required_for_permissions)
end
def system_user?
user_id.blank? || user_id == 1
end
def user_id
2019-06-28 11:38:49 +00:00
@user_id ||= UserInfo.current_user_id
end
def user
@user ||= User.lookup(id: user_id)
end
def required_for_permissions
@required_for_permissions ||= begin
attribute.screens[action]&.each_with_object([]) do |(permission, config), result|
result.push(permission) if config[:required].present?
end
end
end
def action
return :edit if record.persisted?
attribute.screens.keys.find { |e| e.start_with?('create') }
end
end