Skip to content

Commit

Permalink
de-duplicate inherited badge functions + fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
cconard96 committed May 28, 2024
1 parent bf02236 commit 8c7d6da
Showing 1 changed file with 112 additions and 134 deletions.
246 changes: 112 additions & 134 deletions src/Entity.php
Original file line number Diff line number Diff line change
Expand Up @@ -1658,48 +1658,25 @@ public static function showInventoryOptions(Entity $entity)
}
}

$fn_get_inheritance_label = static function (string $field, ?string $strategy_field = null) use ($entity): ?string {
$result = null;
if ($entity->fields[$field] == self::CONFIG_PARENT) {
if ($strategy_field === null) {
$strategy_field = $field;
}
$inherited_strategy = self::getUsedConfig($strategy_field, $entity->fields['entities_id']);
$inherited_value = $inherited_strategy === 0
? self::getUsedConfig($strategy_field, $entity->fields['entities_id'], $field)
: $inherited_strategy;
$result = self::inheritedValue(
self::getSpecificValueToDisplay($field, $inherited_value),
false,
false
);
}
return $result;
};

$inheritance_labels = [
'entities_id_software' => $fn_get_inheritance_label('entities_id_software', 'entities_strategy_software'),
'transfers_id' => $fn_get_inheritance_label('transfers_id', 'transfers_strategy'),
'autofill_buy_date' => $fn_get_inheritance_label('autofill_buy_date'),
'autofill_order_date' => $fn_get_inheritance_label('autofill_order_date'),
'autofill_delivery_date' => $fn_get_inheritance_label('autofill_delivery_date'),
'autofill_use_date' => $fn_get_inheritance_label('autofill_use_date'),
'autofill_warranty_date' => $fn_get_inheritance_label('autofill_warranty_date'),
'autofill_decommission_date' => $fn_get_inheritance_label('autofill_decommission_date'),
'agent_base_url' => self::inheritedValue(
self::getUsedConfig('agent_base_url', $ID, '', ''),
false,
false
),
'entities_id_software' => $entity->getInheritedValueBadge('entities_id_software', 'entities_strategy_software'),
'transfers_id' => $entity->getInheritedValueBadge('transfers_id', 'transfers_strategy'),
'autofill_buy_date' => $entity->getInheritedValueBadge('autofill_buy_date'),
'autofill_order_date' => $entity->getInheritedValueBadge('autofill_order_date'),
'autofill_delivery_date' => $entity->getInheritedValueBadge('autofill_delivery_date'),
'autofill_use_date' => $entity->getInheritedValueBadge('autofill_use_date'),
'autofill_warranty_date' => $entity->getInheritedValueBadge('autofill_warranty_date'),
'autofill_decommission_date' => $entity->getInheritedValueBadge('autofill_decommission_date'),
'agent_base_url' => $entity->getInheritedValueBadge(field: 'agent_base_url', inherit_parent_value: null),
];

$fields = ["contact", "user", "group", "location"];
foreach ($fields as $field) {
$inheritance_labels["is_{$field}_autoupdate"] = $fn_get_inheritance_label("is_{$field}_autoupdate");
$inheritance_labels["is_{$field}_autoclean"] = $fn_get_inheritance_label("is_{$field}_autoclean");
$inheritance_labels["is_{$field}_autoupdate"] = $entity->getInheritedValueBadge("is_{$field}_autoupdate");
$inheritance_labels["is_{$field}_autoclean"] = $entity->getInheritedValueBadge("is_{$field}_autoclean");
}
$inheritance_labels['state_autoupdate_mode'] = $fn_get_inheritance_label('state_autoupdate_mode');
$inheritance_labels['state_autoclean_mode'] = $fn_get_inheritance_label('state_autoclean_mode');
$inheritance_labels['state_autoupdate_mode'] = $entity->getInheritedValueBadge('state_autoupdate_mode');
$inheritance_labels['state_autoclean_mode'] = $entity->getInheritedValueBadge('state_autoclean_mode');

TemplateRenderer::getInstance()->display('pages/admin/entity/assets.html.twig', [
'item' => $entity,
Expand Down Expand Up @@ -1733,58 +1710,41 @@ public static function showNotificationOptions(Entity $entity)
return false;
}

$fn_get_inheritance_label = static function (string $field) use ($ID): string {
return self::inheritedValue(
self::getUsedConfig($field, $ID, '', ''),
false,
false
);
};

$fn_get_specific_inheritance_label = static function (string $field) use ($entity): string {
$tid = self::getUsedConfig($field, $entity->getField('entities_id'));
return self::inheritedValue(
self::getSpecificValueToDisplay($field, $tid),
false,
false
);
};

$inheritance_labels = [
'admin_email' => $fn_get_inheritance_label('admin_email'),
'admin_email_name' => $fn_get_inheritance_label('admin_email_name'),
'from_email' => $fn_get_inheritance_label('from_email'),
'from_email_name' => $fn_get_inheritance_label('from_email_name'),
'noreply_email' => $fn_get_inheritance_label('noreply_email'),
'noreply_email_name' => $fn_get_inheritance_label('noreply_email_name'),
'replyto_email' => $fn_get_inheritance_label('replyto_email'),
'replyto_email_name' => $fn_get_inheritance_label('replyto_email_name'),
'notification_subject_tag' => $fn_get_inheritance_label('notification_subject_tag'),
'admin_email' => $entity->getInheritedValueBadge(field: 'admin_email', inherit_parent_value: null),
'admin_email_name' => $entity->getInheritedValueBadge(field: 'admin_email_name', inherit_parent_value: null),
'from_email' => $entity->getInheritedValueBadge(field: 'from_email', inherit_parent_value: null),
'from_email_name' => $entity->getInheritedValueBadge(field: 'from_email_name', inherit_parent_value: null),
'noreply_email' => $entity->getInheritedValueBadge(field: 'noreply_email', inherit_parent_value: null),
'noreply_email_name' => $entity->getInheritedValueBadge(field: 'noreply_email_name', inherit_parent_value: null),
'replyto_email' => $entity->getInheritedValueBadge(field: 'replyto_email', inherit_parent_value: null),
'replyto_email_name' => $entity->getInheritedValueBadge(field: 'replyto_email_name', inherit_parent_value: null),
'notification_subject_tag' => $entity->getInheritedValueBadge(field: 'notification_subject_tag', inherit_parent_value: null),
'delay_send_emails' => null,
'is_notif_enable_default' => null,
'mailing_signature' => $fn_get_inheritance_label('mailing_signature'),
'url_base' => $fn_get_inheritance_label('url_base'),
'cartridges_alert_repeat' => $fn_get_specific_inheritance_label('cartridges_alert_repeat'),
'default_cartridges_alarm_threshold' => $fn_get_specific_inheritance_label('default_cartridges_alarm_threshold'),
'consumables_alert_repeat' => $fn_get_specific_inheritance_label('consumables_alert_repeat'),
'default_consumables_alarm_threshold' => $fn_get_specific_inheritance_label('default_consumables_alarm_threshold'),
'use_contracts_alert' => $fn_get_specific_inheritance_label('use_contracts_alert'),
'default_contract_alert' => $fn_get_specific_inheritance_label('default_contract_alert'),
'send_contracts_alert_before_delay' => $fn_get_specific_inheritance_label('send_contracts_alert_before_delay'),
'use_infocoms_alert' => $fn_get_specific_inheritance_label('use_infocoms_alert'),
'default_infocom_alert' => $fn_get_specific_inheritance_label('default_infocom_alert'),
'send_infocoms_alert_before_delay' => $fn_get_specific_inheritance_label('send_infocoms_alert_before_delay'),
'use_licenses_alert' => $fn_get_specific_inheritance_label('use_licenses_alert'),
'send_licenses_alert_before_delay' => $fn_get_specific_inheritance_label('send_licenses_alert_before_delay'),
'use_certificates_alert' => $fn_get_specific_inheritance_label('use_certificates_alert'),
'send_certificates_alert_before_delay' => $fn_get_specific_inheritance_label('send_certificates_alert_before_delay'),
'certificates_alert_repeat_interval' => $fn_get_specific_inheritance_label('certificates_alert_repeat_interval'),
'use_reservations_alert' => $fn_get_specific_inheritance_label('use_reservations_alert'),
'notclosed_delay' => $fn_get_specific_inheritance_label('notclosed_delay'),
'use_domains_alert' => $fn_get_specific_inheritance_label('use_domains_alert'),
'send_domains_alert_close_expiries_delay' => $fn_get_specific_inheritance_label('send_domains_alert_close_expiries_delay'),
'send_domains_alert_expired_delay' => $fn_get_specific_inheritance_label('send_domains_alert_expired_delay'),
'approval_reminder_repeat_interval' => $fn_get_specific_inheritance_label('approval_reminder_repeat_interval'),
'mailing_signature' => $entity->getInheritedValueBadge('mailing_signature', inherit_parent_value: null),
'url_base' => $entity->getInheritedValueBadge('url_base', inherit_parent_value: null),
'cartridges_alert_repeat' => $entity->getInheritedValueBadge('cartridges_alert_repeat'),
'default_cartridges_alarm_threshold' => $entity->getInheritedValueBadge('default_cartridges_alarm_threshold'),
'consumables_alert_repeat' => $entity->getInheritedValueBadge('consumables_alert_repeat'),
'default_consumables_alarm_threshold' => $entity->getInheritedValueBadge('default_consumables_alarm_threshold'),
'use_contracts_alert' => $entity->getInheritedValueBadge('use_contracts_alert'),
'default_contract_alert' => $entity->getInheritedValueBadge('default_contract_alert'),
'send_contracts_alert_before_delay' => $entity->getInheritedValueBadge('send_contracts_alert_before_delay'),
'use_infocoms_alert' => $entity->getInheritedValueBadge('use_infocoms_alert'),
'default_infocom_alert' => $entity->getInheritedValueBadge('default_infocom_alert'),
'send_infocoms_alert_before_delay' => $entity->getInheritedValueBadge('send_infocoms_alert_before_delay'),
'use_licenses_alert' => $entity->getInheritedValueBadge('use_licenses_alert'),
'send_licenses_alert_before_delay' => $entity->getInheritedValueBadge('send_licenses_alert_before_delay'),
'use_certificates_alert' => $entity->getInheritedValueBadge('use_certificates_alert'),
'send_certificates_alert_before_delay' => $entity->getInheritedValueBadge('send_certificates_alert_before_delay'),
'certificates_alert_repeat_interval' => $entity->getInheritedValueBadge('certificates_alert_repeat_interval'),
'use_reservations_alert' => $entity->getInheritedValueBadge('use_reservations_alert'),
'notclosed_delay' => $entity->getInheritedValueBadge('notclosed_delay'),
'use_domains_alert' => $entity->getInheritedValueBadge('use_domains_alert'),
'send_domains_alert_close_expiries_delay' => $entity->getInheritedValueBadge('send_domains_alert_close_expiries_delay'),
'send_domains_alert_expired_delay' => $entity->getInheritedValueBadge('send_domains_alert_expired_delay'),
'approval_reminder_repeat_interval' => $entity->getInheritedValueBadge('approval_reminder_repeat_interval'),
];
if ($entity->fields['delay_send_emails'] == self::CONFIG_PARENT) {
$tid = self::getUsedConfig('delay_send_emails', $entity->getField('entities_id'));
Expand Down Expand Up @@ -2044,56 +2004,22 @@ public static function showHelpdeskOptions(Entity $entity)
$canedit = (Session::haveRight(self::$rightname, self::UPDATEHELPDESK)
&& Session::haveAccessToEntity($ID));

$fn_get_inheritance_label = static function (string $field, ?string $strategy_field = null) use ($entity): ?string {
$result = null;
if ($entity->fields[$field] === self::CONFIG_PARENT) {
if ($strategy_field === null) {
$strategy_field = $field;
}
$inherited_strategy = self::getUsedConfig($strategy_field, $entity->fields['entities_id']);
$inherited_value = $inherited_strategy === 0
? self::getUsedConfig($strategy_field, $entity->fields['entities_id'], $field)
: $inherited_strategy;
$result = self::inheritedValue(
self::getSpecificValueToDisplay($field, $inherited_value),
false,
false
);
}
return $result;
};

$fn_get_linked_inheritance_label = static function (string $itemtype, string $empty_value = Dropdown::EMPTY_VALUE, string $field = null) use ($entity): ?string {
$item = new $itemtype();
$field = $field ?? $item::getForeignKeyField();
if ($entity->fields[$field] === self::CONFIG_PARENT) {
$tid = self::getUsedConfig(str_replace('_id', '_strategy', $field), $entity->getID(), $field, 0);
if (!$tid) {
return self::inheritedValue($empty_value, true, false);
}
if ($item->getFromDB($tid)) {
return self::inheritedValue($item->getLink(), true, false);
}
}
return null;
};

$crontask = new CronTask();
$inheritance_labels = [
'tickettemplates_id' => $fn_get_linked_inheritance_label(TicketTemplate::class),
'changetemplates_id' => $fn_get_linked_inheritance_label(ChangeTemplate::class),
'problemtemplates_id' => $fn_get_linked_inheritance_label(ProblemTemplate::class),
'calendars_id' => $fn_get_linked_inheritance_label(Calendar::class, __('24/7')),
'tickettype' => $fn_get_inheritance_label('tickettype'),
'auto_assign_mode' => $fn_get_inheritance_label('auto_assign_mode'),
'suppliers_as_private' => $fn_get_inheritance_label('suppliers_as_private'),
'anonymize_support_agents' => $fn_get_inheritance_label('anonymize_support_agents'),
'display_users_initials' => $fn_get_inheritance_label('display_users_initials'),
'contracts_id_default' => $fn_get_inheritance_label('contracts_id_default', 'contracts_strategy_default'),
'inquest_config' => $fn_get_inheritance_label('inquest_config'),
'inquest_config_change' => $fn_get_inheritance_label('inquest_config_change'),
'autoclose_delay' => $fn_get_inheritance_label('autoclose_delay'),
'autopurge_delay' => $fn_get_inheritance_label('autopurge_delay'),
'tickettemplates_id' => $entity->getInheritedLinkedValueBadge(TicketTemplate::class),
'changetemplates_id' => $entity->getInheritedLinkedValueBadge(ChangeTemplate::class),
'problemtemplates_id' => $entity->getInheritedLinkedValueBadge(ProblemTemplate::class),
'calendars_id' => $entity->getInheritedLinkedValueBadge(Calendar::class, __('24/7')),
'tickettype' => $entity->getInheritedValueBadge(field: 'tickettype', default_value: Ticket::INCIDENT_TYPE),
'auto_assign_mode' => $entity->getInheritedValueBadge('auto_assign_mode'),
'suppliers_as_private' => $entity->getInheritedValueBadge('suppliers_as_private'),
'anonymize_support_agents' => $entity->getInheritedValueBadge('anonymize_support_agents'),
'display_users_initials' => $entity->getInheritedValueBadge('display_users_initials'),
'contracts_id_default' => $entity->getInheritedValueBadge('contracts_id_default', 'contracts_strategy_default'),
'inquest_config' => $entity->getInheritedValueBadge('inquest_config'),
'inquest_config_change' => $entity->getInheritedValueBadge('inquest_config_change'),
'autoclose_delay' => $entity->getInheritedValueBadge('autoclose_delay'),
'autopurge_delay' => $entity->getInheritedValueBadge(field: 'autopurge_delay', default_value: self::CONFIG_NEVER),
];

TemplateRenderer::getInstance()->display('pages/admin/entity/assistance.html.twig', [
Expand Down Expand Up @@ -2688,8 +2614,9 @@ public static function getSpecificValueToDisplay($field, $values, array $options
0 => __('Immediately'),
default => sprintf(_n('%d day', '%d days', $values[$field]), $values[$field]),
};
default:
return $values[$field] ?? '';
}
return parent::getSpecificValueToDisplay($field, $values, $options);
}

public static function getSpecificValueToSelect($field, $name = '', $values = '', array $options = [])
Expand Down Expand Up @@ -2851,6 +2778,57 @@ public static function inheritedValue($value = "", bool $inline = false, bool $d
return $out;
}

/**
* Get the badge HTML for a field that can be inherited
* @param string $field The field name
* @param string|null $strategy_field The field name of the strategy
* @param mixed $default_value
* @return string|null The badge HTML or null if the field is not inherited
*/
private function getInheritedValueBadge(string $field, ?string $strategy_field = null, mixed $default_value = self::CONFIG_PARENT, mixed $inherit_parent_value = self::CONFIG_PARENT): ?string
{
$result = null;
if ($this->fields[$field] === $inherit_parent_value) {
if ($strategy_field === null) {
$strategy_field = $field;
}
$inherited_strategy = self::getUsedConfig($strategy_field, $this->fields['entities_id']);
$inherited_value = $inherited_strategy === 0
? self::getUsedConfig($strategy_field, $this->fields['entities_id'], $field, $default_value)
: $inherited_strategy;
$result = self::inheritedValue(
self::getSpecificValueToDisplay($field, $inherited_value),
false,
false
);
}
return $result;
}

/**
* Get the badge HTML for a linked field that can be inherited
* @param class-string<CommonDBTM> $itemtype The item type
* @param string $empty_value The value to display when the field is empty
* @param string|null $field The field name
* @param int $default_value The default value
* @return string|null The badge HTML or null if the field is not inherited
*/
private function getInheritedLinkedValueBadge(string $itemtype, string $empty_value = Dropdown::EMPTY_VALUE, ?string $field = null, int $default_value = 0): ?string
{
$item = new $itemtype();
$field = $field ?? $item::getForeignKeyField();
if ($this->fields[$field] === self::CONFIG_PARENT) {
$tid = self::getUsedConfig(str_replace('_id', '_strategy', $field), $this->getID(), $field, $default_value);
if (!$tid) {
return self::inheritedValue($empty_value, true, false);
}
if ($item->getFromDB($tid)) {
return self::inheritedValue($item->getLink(), true, false);
}
}
return null;
}

public static function getIcon()
{
return "ti ti-stack";
Expand Down

0 comments on commit 8c7d6da

Please sign in to comment.