<?php
namespace Give\FeatureFlags\OptionBasedFormEditor\Settings;
use Give\FeatureFlags\OptionBasedFormEditor\OptionBasedFormEditor;
/**
* @since 3.18.0
*/
abstract class AbstractOptionBasedFormEditorSettings
{
/**
* @since 3.18.0
*/
abstract public function getDisabledOptionIds(): array;
/**
* @since 3.18.0
*/
public function getDisabledSectionIds(): array
{
return [];
}
/**
* @since 3.18.0
*/
public function getNewDefaultSection(): string
{
return '';
}
/**
* @since 3.18.0
*/
final public function maybeDisableSections(array $sections): array
{
if (OptionBasedFormEditor::isEnabled()) {
return $sections;
}
foreach ($sections as $key => $value) {
if (in_array($key, $this->getDisabledSectionIds())) {
unset($sections[$key]);
}
}
return $sections;
}
/**
* @since 3.18.0
*/
final public function maybeDisableOptions(array $options): array
{
foreach ($options as $key => $value) {
if ( ! $this->isOptionDisabled($value['id']) && ! $this->isCurrentSectionDisabled()) {
continue;
}
if (OptionBasedFormEditor::isEnabled()) {
$options[$key]['name'] .= isset($value['name']) ? OptionBasedFormEditor::helperText() : '';
} else {
unset($options[$key]);
}
}
return $options;
}
/**
* @since 3.18.0
*/
final public function maybeSetNewDefaultSection($currentSection)
{
if (OptionBasedFormEditor::isEnabled()) {
return $currentSection;
}
$newDefaultSection = $this->getNewDefaultSection();
return ! empty($newDefaultSection) && $newDefaultSection != $currentSection ? $newDefaultSection : $currentSection;
}
/**
* @since 3.18.0
*/
private function isOptionDisabled($option): bool
{
return $option && in_array($option, $this->getDisabledOptionIds());
}
/**
* @since 3.18.0
*/
private function isCurrentSectionDisabled(): bool
{
return in_array(give_get_current_setting_section(), $this->getDisabledSectionIds());
}
}