diff --git a/src/Collections/FieldTypeCollection.php b/src/Collections/FieldTypeCollection.php index 5b71f0ec..a10e3bde 100644 --- a/src/Collections/FieldTypeCollection.php +++ b/src/Collections/FieldTypeCollection.php @@ -7,7 +7,7 @@ use Illuminate\Support\Collection; use Relaticle\CustomFields\Data\FieldTypeData; -final class FieldTypeCollection extends Collection +class FieldTypeCollection extends Collection { public function acceptsArbitraryValues(): static { diff --git a/src/CustomFields.php b/src/CustomFields.php index 6b3d7607..8179ac80 100644 --- a/src/CustomFields.php +++ b/src/CustomFields.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Models\CustomFieldSection; use Relaticle\CustomFields\Models\CustomFieldValue; -final class CustomFields +class CustomFields { /** * The custom field model that should be used by Custom Fields. diff --git a/src/CustomFieldsServiceProvider.php b/src/CustomFieldsServiceProvider.php index c9020212..6210c9f6 100644 --- a/src/CustomFieldsServiceProvider.php +++ b/src/CustomFieldsServiceProvider.php @@ -36,7 +36,7 @@ use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; -final class CustomFieldsServiceProvider extends PackageServiceProvider +class CustomFieldsServiceProvider extends PackageServiceProvider { public static string $name = 'custom-fields'; @@ -143,7 +143,7 @@ public function packageBooted(): void } } - private function getAssetPackageName(): string + protected function getAssetPackageName(): string { return 'relaticle/custom-fields'; } @@ -151,7 +151,7 @@ private function getAssetPackageName(): string /** * @return array */ - private function getAssets(): array + protected function getAssets(): array { return [ Css::make('custom-fields', __DIR__.'/../resources/dist/custom-fields.css')->loadedOnRequest(), @@ -161,7 +161,7 @@ private function getAssets(): array /** * @return array */ - private function getCommands(): array + protected function getCommands(): array { return [ MakeCustomFieldsMigrationCommand::class, @@ -172,7 +172,7 @@ private function getCommands(): array /** * @return array */ - private function getIcons(): array + protected function getIcons(): array { return []; } @@ -180,7 +180,7 @@ private function getIcons(): array /** * @return array */ - private function getScriptData(): array + protected function getScriptData(): array { return []; } @@ -188,7 +188,7 @@ private function getScriptData(): array /** * @return array */ - private function getMigrations(): array + protected function getMigrations(): array { return [ 'create_custom_fields_table', diff --git a/src/Data/CustomFieldData.php b/src/Data/CustomFieldData.php index 7df04e4b..37ec6821 100644 --- a/src/Data/CustomFieldData.php +++ b/src/Data/CustomFieldData.php @@ -10,7 +10,7 @@ use Spatie\LaravelData\Mappers\SnakeCaseMapper; #[MapName(SnakeCaseMapper::class)] -final class CustomFieldData extends Data +class CustomFieldData extends Data { /** * Create a new instance of the CustomFieldData class. diff --git a/src/Data/CustomFieldSectionData.php b/src/Data/CustomFieldSectionData.php index 20702b8a..7506668d 100644 --- a/src/Data/CustomFieldSectionData.php +++ b/src/Data/CustomFieldSectionData.php @@ -10,7 +10,7 @@ use Spatie\LaravelData\Mappers\SnakeCaseMapper; #[MapName(SnakeCaseMapper::class)] -final class CustomFieldSectionData extends Data +class CustomFieldSectionData extends Data { /** * Create a new instance of the CustomFieldData class. diff --git a/src/Data/EntityConfigurationData.php b/src/Data/EntityConfigurationData.php index 0fa3b3c2..4fa42f26 100644 --- a/src/Data/EntityConfigurationData.php +++ b/src/Data/EntityConfigurationData.php @@ -16,7 +16,7 @@ use Relaticle\CustomFields\Models\Contracts\HasCustomFields; use Spatie\LaravelData\Data; -final class EntityConfigurationData extends Data +class EntityConfigurationData extends Data { public function __construct( public string $modelClass, @@ -42,7 +42,7 @@ public function __construct( /** * Validate the configuration */ - private function validateConfiguration(): void + protected function validateConfiguration(): void { if (! class_exists($this->modelClass)) { throw new InvalidArgumentException(sprintf('Model class %s does not exist', $this->modelClass)); diff --git a/src/Data/FieldTypeData.php b/src/Data/FieldTypeData.php index 2ac897b6..563a993b 100644 --- a/src/Data/FieldTypeData.php +++ b/src/Data/FieldTypeData.php @@ -9,7 +9,7 @@ use Spatie\LaravelData\Data; use Stringable; -final class FieldTypeData extends Data implements Stringable +class FieldTypeData extends Data implements Stringable { public function __construct( public string $key, diff --git a/src/Data/ValidationRuleData.php b/src/Data/ValidationRuleData.php index 3293e6bb..3d1ad862 100644 --- a/src/Data/ValidationRuleData.php +++ b/src/Data/ValidationRuleData.php @@ -6,7 +6,7 @@ use Spatie\LaravelData\Data; -final class ValidationRuleData extends Data +class ValidationRuleData extends Data { /** * Create a new instance of the ValidationRuleData class. diff --git a/src/Data/VisibilityData.php b/src/Data/VisibilityData.php index 347fec1e..68dee7e5 100644 --- a/src/Data/VisibilityData.php +++ b/src/Data/VisibilityData.php @@ -55,7 +55,7 @@ public function evaluate(array $fieldValues): bool /** * @param array $fieldValues */ - private function evaluateCondition(VisibilityConditionData $condition, array $fieldValues): bool + protected function evaluateCondition(VisibilityConditionData $condition, array $fieldValues): bool { $fieldValue = $fieldValues[$condition->field_code] ?? null; diff --git a/src/EntitySystem/EntityCollection.php b/src/EntitySystem/EntityCollection.php index 03a1922f..cdd29a80 100644 --- a/src/EntitySystem/EntityCollection.php +++ b/src/EntitySystem/EntityCollection.php @@ -11,7 +11,7 @@ use Relaticle\CustomFields\Data\EntityConfigurationData; use Relaticle\CustomFields\Enums\EntityFeature; -final class EntityCollection extends Collection +class EntityCollection extends Collection { /** * Find entity by model class or alias diff --git a/src/EntitySystem/EntityConfigurator.php b/src/EntitySystem/EntityConfigurator.php index 8f57932e..1de0f6bf 100644 --- a/src/EntitySystem/EntityConfigurator.php +++ b/src/EntitySystem/EntityConfigurator.php @@ -11,23 +11,23 @@ * Fluent builder for configuring the entire entity management system * Provides clean, discoverable API for global entity configuration */ -final class EntityConfigurator implements EntityConfigurationInterface +class EntityConfigurator implements EntityConfigurationInterface { - private bool $autoDiscover = true; + protected bool $autoDiscover = true; - private array $discoveryPaths = []; + protected array $discoveryPaths = []; - private array $discoveryNamespaces = ['App\\Models']; + protected array $discoveryNamespaces = ['App\\Models']; - private array $excludedModels = []; + protected array $excludedModels = []; - private bool $cacheEnabled = true; + protected bool $cacheEnabled = true; - private int $cacheTtl = 3600; + protected int $cacheTtl = 3600; - private array $entityModels = []; + protected array $entityModels = []; - private function __construct() + protected function __construct() { // Set smart defaults $this->discoveryPaths = [app_path('Models')]; @@ -142,7 +142,7 @@ public function models(array $entityModels): self /** * Build the entities array from configured entity arrays */ - private function buildEntitiesArray(): array + protected function buildEntitiesArray(): array { $entities = []; diff --git a/src/EntitySystem/EntityDiscovery.php b/src/EntitySystem/EntityDiscovery.php index 8f799987..486e287a 100644 --- a/src/EntitySystem/EntityDiscovery.php +++ b/src/EntitySystem/EntityDiscovery.php @@ -19,9 +19,9 @@ use Relaticle\CustomFields\Models\Contracts\HasCustomFields; use Symfony\Component\Finder\Finder; -final class EntityDiscovery +class EntityDiscovery { - private array $discoveredCache = []; + protected array $discoveredCache = []; public function __construct( private array $paths = [], @@ -81,7 +81,7 @@ public function discover(): array /** * Discover entities from Filament Resources */ - private function discoverFromFilamentResources(): array + protected function discoverFromFilamentResources(): array { $entities = []; @@ -116,7 +116,7 @@ private function discoverFromFilamentResources(): array /** * Discover entities from configured paths */ - private function discoverFromPaths(): array + protected function discoverFromPaths(): array { $entities = []; @@ -148,7 +148,7 @@ private function discoverFromPaths(): array /** * Discover entities from namespaces */ - private function discoverFromNamespaces(): array + protected function discoverFromNamespaces(): array { $entities = []; @@ -173,7 +173,7 @@ private function discoverFromNamespaces(): array /** * Check if a model should be discovered */ - private function shouldDiscoverModel(string $modelClass): bool + protected function shouldDiscoverModel(string $modelClass): bool { if (! class_exists($modelClass)) { return false; @@ -205,7 +205,7 @@ private function shouldDiscoverModel(string $modelClass): bool /** * Create entity configuration from a model class */ - private function createEntityFromModel(string $modelClass): EntityConfigurationData + protected function createEntityFromModel(string $modelClass): EntityConfigurationData { /** @var Model $model */ $model = new $modelClass; @@ -226,7 +226,7 @@ private function createEntityFromModel(string $modelClass): EntityConfigurationD /** * Get model label from class name */ - private function getModelLabel(string $modelClass): string + protected function getModelLabel(string $modelClass): string { $baseName = class_basename($modelClass); @@ -236,7 +236,7 @@ private function getModelLabel(string $modelClass): string /** * Get model plural label */ - private function getModelPluralLabel(string $modelClass): string + protected function getModelPluralLabel(string $modelClass): string { return Str::plural($this->getModelLabel($modelClass)); } @@ -244,7 +244,7 @@ private function getModelPluralLabel(string $modelClass): string /** * Get model icon (can be customized via method or property) */ - private function getModelIcon(string $modelClass): string + protected function getModelIcon(string $modelClass): string { if (method_exists($modelClass, 'getCustomFieldsIcon')) { return $modelClass::getCustomFieldsIcon(); @@ -260,7 +260,7 @@ private function getModelIcon(string $modelClass): string /** * Get model primary attribute */ - private function getModelPrimaryAttribute(string $modelClass): string + protected function getModelPrimaryAttribute(string $modelClass): string { if (method_exists($modelClass, 'getCustomFieldsPrimaryAttribute')) { return $modelClass::getCustomFieldsPrimaryAttribute(); @@ -286,7 +286,7 @@ private function getModelPrimaryAttribute(string $modelClass): string /** * Get model search attributes */ - private function getModelSearchAttributes(string $modelClass): array + protected function getModelSearchAttributes(string $modelClass): array { if (method_exists($modelClass, 'getCustomFieldsSearchAttributes')) { return $modelClass::getCustomFieldsSearchAttributes(); @@ -305,7 +305,7 @@ private function getModelSearchAttributes(string $modelClass): array /** * Get class name from file path */ - private function getClassNameFromFile(string $path): ?string + protected function getClassNameFromFile(string $path): ?string { $contents = File::get($path); @@ -327,7 +327,7 @@ private function getClassNameFromFile(string $path): ?string /** * Get classes in a namespace (using declared classes) */ - private function getClassesInNamespace(string $namespace): array + protected function getClassesInNamespace(string $namespace): array { $classes = []; $declaredClasses = get_declared_classes(); @@ -344,7 +344,7 @@ private function getClassesInNamespace(string $namespace): array /** * Check if a resource class is valid */ - private function isValidResourceClass(string $resourceClass): bool + protected function isValidResourceClass(string $resourceClass): bool { return class_exists($resourceClass) && is_subclass_of($resourceClass, Resource::class); diff --git a/src/EntitySystem/EntityManager.php b/src/EntitySystem/EntityManager.php index 8f874a14..0a30d299 100644 --- a/src/EntitySystem/EntityManager.php +++ b/src/EntitySystem/EntityManager.php @@ -15,7 +15,7 @@ use Relaticle\CustomFields\Data\EntityConfigurationData; use Relaticle\CustomFields\Enums\EntityFeature; -final class EntityManager implements EntityManagerInterface +class EntityManager implements EntityManagerInterface { use Macroable; @@ -23,15 +23,15 @@ final class EntityManager implements EntityManagerInterface private const int CACHE_TTL = 3600; // 1 hour - private array $entities = []; + protected array $entities = []; - private ?array $cachedEntities = null; + protected ?array $cachedEntities = null; - private ?EntityDiscovery $discovery = null; + protected ?EntityDiscovery $discovery = null; - private bool $discoveryEnabled = false; + protected bool $discoveryEnabled = false; - private array $resolvingCallbacks = []; + protected array $resolvingCallbacks = []; public function __construct( private readonly bool $cacheEnabled = true @@ -105,7 +105,7 @@ public function disableDiscovery(): static /** * Invalidate the in-memory cache (lightweight operation) */ - private function invalidateCache(): void + protected function invalidateCache(): void { $this->cachedEntities = null; } @@ -145,7 +145,7 @@ public function resolving(Closure $callback): static /** * Build the entity cache */ - private function buildEntityCache(): array + protected function buildEntityCache(): array { $entities = []; @@ -179,7 +179,7 @@ private function buildEntityCache(): array /** * Resolve entities from various input types */ - private function resolveEntities(array|Closure $entities): array + protected function resolveEntities(array|Closure $entities): array { if ($entities instanceof Closure) { $entities = $entities(); diff --git a/src/EntitySystem/EntityModel.php b/src/EntitySystem/EntityModel.php index 269301cd..7aaf0d0e 100644 --- a/src/EntitySystem/EntityModel.php +++ b/src/EntitySystem/EntityModel.php @@ -13,7 +13,7 @@ * Array-based entity configuration factory * Provides type-safe configuration using class strings and enums */ -final class EntityModel +class EntityModel { /** * Create entity configuration array from model class @@ -68,7 +68,7 @@ public static function configure( /** * Validate the model class is valid */ - private static function validateModelClass(string $modelClass): void + protected static function validateModelClass(string $modelClass): void { if (! class_exists($modelClass)) { throw new InvalidArgumentException(sprintf('Model class %s does not exist', $modelClass)); @@ -82,7 +82,7 @@ private static function validateModelClass(string $modelClass): void /** * Set smart defaults based on the model class */ - private static function setSmartDefaults(string $modelClass): array + protected static function setSmartDefaults(string $modelClass): array { /** @var Model $model */ $model = new $modelClass; @@ -109,7 +109,7 @@ private static function setSmartDefaults(string $modelClass): array /** * Guess the best primary attribute for this model */ - private static function guessPrimaryAttribute(Model $model): string + protected static function guessPrimaryAttribute(Model $model): string { $fillable = $model->getFillable(); @@ -126,7 +126,7 @@ private static function guessPrimaryAttribute(Model $model): string /** * Guess the best search attributes for this model */ - private static function guessSearchAttributes(string $primaryAttribute): array + protected static function guessSearchAttributes(string $primaryAttribute): array { // If we found a good primary attribute, use it for search if ($primaryAttribute !== 'id') { diff --git a/src/Enums/ValidationRule.php b/src/Enums/ValidationRule.php index f3bdc7ed..e5107df9 100644 --- a/src/Enums/ValidationRule.php +++ b/src/Enums/ValidationRule.php @@ -162,7 +162,7 @@ public function getDescription(): string * * Utility method to eliminate repeated null/empty checks throughout the enum. */ - private static function isEmptyRule(mixed $rule): bool + protected static function isEmptyRule(mixed $rule): bool { return $rule === null || $rule === '' || $rule === '0'; } diff --git a/src/Enums/VisibilityOperator.php b/src/Enums/VisibilityOperator.php index 445dd9e4..862e21fc 100644 --- a/src/Enums/VisibilityOperator.php +++ b/src/Enums/VisibilityOperator.php @@ -56,7 +56,7 @@ public function evaluate(mixed $fieldValue, mixed $expectedValue): bool }; } - private function evaluateEquals(mixed $fieldValue, mixed $expectedValue): bool + protected function evaluateEquals(mixed $fieldValue, mixed $expectedValue): bool { // Handle null values if ($fieldValue === null && $expectedValue === null) { @@ -81,7 +81,7 @@ private function evaluateEquals(mixed $fieldValue, mixed $expectedValue): bool return $fieldValue === $expectedValue; } - private function evaluateContains(mixed $fieldValue, mixed $expectedValue): bool + protected function evaluateContains(mixed $fieldValue, mixed $expectedValue): bool { if ($fieldValue === null || $expectedValue === null) { return false; @@ -120,7 +120,7 @@ private function evaluateContains(mixed $fieldValue, mixed $expectedValue): bool return false; } - private function evaluateGreaterThan(mixed $fieldValue, mixed $expectedValue): bool + protected function evaluateGreaterThan(mixed $fieldValue, mixed $expectedValue): bool { if (! is_numeric($fieldValue) || ! is_numeric($expectedValue)) { return false; @@ -129,7 +129,7 @@ private function evaluateGreaterThan(mixed $fieldValue, mixed $expectedValue): b return (float) $fieldValue > (float) $expectedValue; } - private function evaluateLessThan(mixed $fieldValue, mixed $expectedValue): bool + protected function evaluateLessThan(mixed $fieldValue, mixed $expectedValue): bool { if (! is_numeric($fieldValue) || ! is_numeric($expectedValue)) { return false; @@ -138,7 +138,7 @@ private function evaluateLessThan(mixed $fieldValue, mixed $expectedValue): bool return (float) $fieldValue < (float) $expectedValue; } - private function evaluateIsEmpty(mixed $fieldValue): bool + protected function evaluateIsEmpty(mixed $fieldValue): bool { if ($fieldValue === null) { return true; diff --git a/src/FeatureSystem/FeatureConfigurator.php b/src/FeatureSystem/FeatureConfigurator.php index 64403243..5df4408d 100644 --- a/src/FeatureSystem/FeatureConfigurator.php +++ b/src/FeatureSystem/FeatureConfigurator.php @@ -9,11 +9,11 @@ /** * Simple fluent builder for configuring package features */ -final class FeatureConfigurator +class FeatureConfigurator { - private array $features = []; + protected array $features = []; - private function __construct() + protected function __construct() { // } diff --git a/src/FeatureSystem/FeatureManager.php b/src/FeatureSystem/FeatureManager.php index fb78ad64..9d18f4aa 100644 --- a/src/FeatureSystem/FeatureManager.php +++ b/src/FeatureSystem/FeatureManager.php @@ -9,7 +9,7 @@ /** * Simple service for runtime feature checking */ -final class FeatureManager +class FeatureManager { /** * Check if a specific feature is enabled diff --git a/src/FieldTypeSystem/Definitions/RichEditorFieldType.php b/src/FieldTypeSystem/Definitions/RichEditorFieldType.php index e39c1420..963a9bb6 100644 --- a/src/FieldTypeSystem/Definitions/RichEditorFieldType.php +++ b/src/FieldTypeSystem/Definitions/RichEditorFieldType.php @@ -15,7 +15,7 @@ * ABOUTME: Field type definition for Rich Editor fields * ABOUTME: Provides Rich Editor functionality with appropriate validation rules */ -final class RichEditorFieldType extends BaseFieldType +class RichEditorFieldType extends BaseFieldType { public function configure(): FieldSchema { diff --git a/src/FieldTypeSystem/Definitions/TagsInputFieldType.php b/src/FieldTypeSystem/Definitions/TagsInputFieldType.php index 1b18f22e..8235bee5 100644 --- a/src/FieldTypeSystem/Definitions/TagsInputFieldType.php +++ b/src/FieldTypeSystem/Definitions/TagsInputFieldType.php @@ -15,7 +15,7 @@ * ABOUTME: Field type definition for Tags Input fields * ABOUTME: Provides Tags Input functionality with appropriate validation rules */ -final class TagsInputFieldType extends BaseFieldType +class TagsInputFieldType extends BaseFieldType { public function configure(): FieldSchema { diff --git a/src/FieldTypeSystem/Definitions/TextareaFieldType.php b/src/FieldTypeSystem/Definitions/TextareaFieldType.php index 886c8e1b..9160752c 100644 --- a/src/FieldTypeSystem/Definitions/TextareaFieldType.php +++ b/src/FieldTypeSystem/Definitions/TextareaFieldType.php @@ -15,7 +15,7 @@ * ABOUTME: Field type definition for Textarea fields * ABOUTME: Provides Textarea functionality with appropriate validation rules */ -final class TextareaFieldType extends BaseFieldType +class TextareaFieldType extends BaseFieldType { public function configure(): FieldSchema { diff --git a/src/FieldTypeSystem/FieldManager.php b/src/FieldTypeSystem/FieldManager.php index 88cbbb68..a6c8fc26 100644 --- a/src/FieldTypeSystem/FieldManager.php +++ b/src/FieldTypeSystem/FieldManager.php @@ -31,7 +31,7 @@ use Relaticle\CustomFields\FieldTypeSystem\Definitions\ToggleButtonsFieldType; use Relaticle\CustomFields\FieldTypeSystem\Definitions\ToggleFieldType; -final class FieldManager +class FieldManager { use EvaluatesClosures; @@ -62,17 +62,17 @@ final class FieldManager /** * @var array | string> | Closure> */ - private array $fieldTypes = []; + protected array $fieldTypes = []; /** * @var array */ - private array $cachedFieldTypes; + protected array $cachedFieldTypes; /** * @var array */ - private array $cachedInstances = []; + protected array $cachedInstances = []; /** * @param array | string> | Closure $fieldTypes diff --git a/src/FieldTypeSystem/FieldTypeConfigurator.php b/src/FieldTypeSystem/FieldTypeConfigurator.php index 579467c9..76622d68 100644 --- a/src/FieldTypeSystem/FieldTypeConfigurator.php +++ b/src/FieldTypeSystem/FieldTypeConfigurator.php @@ -10,23 +10,23 @@ * System-wide configuration for the entire field type system * Provides clean, discoverable API for field type configuration and management */ -final class FieldTypeConfigurator +class FieldTypeConfigurator { - private bool $autoDiscover = true; + protected bool $autoDiscover = true; - private bool $cacheEnabled = true; + protected bool $cacheEnabled = true; - private int $cacheTtl = 3600; + protected int $cacheTtl = 3600; - private string $cacheStore = 'default'; + protected string $cacheStore = 'default'; - private array $cacheTags = ['field-types', 'configuration']; + protected array $cacheTags = ['field-types', 'configuration']; - private array $enabledFieldTypes = []; + protected array $enabledFieldTypes = []; - private array $disabledFieldTypes = []; + protected array $disabledFieldTypes = []; - private function __construct() + protected function __construct() { // } diff --git a/src/Filament/Integration/Base/AbstractFormComponent.php b/src/Filament/Integration/Base/AbstractFormComponent.php index 94f314ee..a29710b4 100644 --- a/src/Filament/Integration/Base/AbstractFormComponent.php +++ b/src/Filament/Integration/Base/AbstractFormComponent.php @@ -83,7 +83,7 @@ protected function configure( ); } - private function getFieldValue( + protected function getFieldValue( CustomField $customField, mixed $state, mixed $record @@ -102,12 +102,12 @@ private function getFieldValue( }); } - private function hasVisibilityConditions(CustomField $customField): bool + protected function hasVisibilityConditions(CustomField $customField): bool { return $this->coreVisibilityLogic->hasVisibilityConditions($customField); } - private function applyVisibility( + protected function applyVisibility( Field $field, CustomField $customField, Collection $allFields diff --git a/src/Filament/Integration/Builders/ExporterBuilder.php b/src/Filament/Integration/Builders/ExporterBuilder.php index 98ea4fb5..8affd6c1 100644 --- a/src/Filament/Integration/Builders/ExporterBuilder.php +++ b/src/Filament/Integration/Builders/ExporterBuilder.php @@ -15,7 +15,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\Visibility\BackendVisibilityService; -final class ExporterBuilder extends BaseBuilder +class ExporterBuilder extends BaseBuilder { /** * @throws BindingResolutionException diff --git a/src/Filament/Integration/Builders/FormBuilder.php b/src/Filament/Integration/Builders/FormBuilder.php index dbc6726a..ddff3120 100644 --- a/src/Filament/Integration/Builders/FormBuilder.php +++ b/src/Filament/Integration/Builders/FormBuilder.php @@ -22,7 +22,7 @@ public function build(): Grid ->except($this->except); } - private function getDependentFieldCodes(Collection $fields): array + protected function getDependentFieldCodes(Collection $fields): array { $dependentCodes = []; diff --git a/src/Filament/Integration/Builders/FormContainer.php b/src/Filament/Integration/Builders/FormContainer.php index 26f88aec..2c74b2b4 100644 --- a/src/Filament/Integration/Builders/FormContainer.php +++ b/src/Filament/Integration/Builders/FormContainer.php @@ -5,7 +5,7 @@ use Filament\Schemas\Components\Grid; use Illuminate\Database\Eloquent\Model; -final class FormContainer extends Grid +class FormContainer extends Grid { private Model|string|null $explicitModel = null; @@ -44,7 +44,7 @@ public function only(array $fieldCodes): static return $this; } - private function generateSchema(): array + protected function generateSchema(): array { // Inline priority: explicit ?? record ?? model class $model = $this->explicitModel ?? $this->getRecord() ?? $this->getModel(); diff --git a/src/Filament/Integration/Builders/ImporterBuilder.php b/src/Filament/Integration/Builders/ImporterBuilder.php index 0144d101..63008b69 100644 --- a/src/Filament/Integration/Builders/ImporterBuilder.php +++ b/src/Filament/Integration/Builders/ImporterBuilder.php @@ -11,7 +11,7 @@ use Relaticle\CustomFields\Filament\Integration\Support\Imports\ImportDataStorage; use Relaticle\CustomFields\Models\CustomField; -final class ImporterBuilder extends BaseBuilder +class ImporterBuilder extends BaseBuilder { public function columns(): Collection { @@ -21,7 +21,7 @@ public function columns(): Collection ->values(); } - private function createColumn(CustomField $field): ImportColumn + protected function createColumn(CustomField $field): ImportColumn { $column = ImportColumn::make('custom_fields_'.$field->code) ->label($field->name); diff --git a/src/Filament/Integration/Builders/InfolistBuilder.php b/src/Filament/Integration/Builders/InfolistBuilder.php index d204bb7b..c5b32d7d 100644 --- a/src/Filament/Integration/Builders/InfolistBuilder.php +++ b/src/Filament/Integration/Builders/InfolistBuilder.php @@ -15,7 +15,7 @@ use Relaticle\CustomFields\Models\CustomFieldSection; use Relaticle\CustomFields\Services\Visibility\BackendVisibilityService; -final class InfolistBuilder extends BaseBuilder +class InfolistBuilder extends BaseBuilder { private bool $hiddenLabels = false; diff --git a/src/Filament/Integration/Builders/InfolistContainer.php b/src/Filament/Integration/Builders/InfolistContainer.php index aced518d..3a5de042 100644 --- a/src/Filament/Integration/Builders/InfolistContainer.php +++ b/src/Filament/Integration/Builders/InfolistContainer.php @@ -6,7 +6,7 @@ use Filament\Schemas\Components\Grid; use Illuminate\Database\Eloquent\Model; -final class InfolistContainer extends Grid +class InfolistContainer extends Grid { private Model|string|null $explicitModel = null; @@ -75,7 +75,7 @@ public function withoutSections(bool $withoutSections = true): static /** * @return array */ - private function generateSchema(): array + protected function generateSchema(): array { // Inline priority: explicit ?? record ?? model class $model = $this->explicitModel ?? $this->getRecord() ?? $this->getModel(); diff --git a/src/Filament/Integration/Builders/TableBuilder.php b/src/Filament/Integration/Builders/TableBuilder.php index b6992060..91dcab58 100644 --- a/src/Filament/Integration/Builders/TableBuilder.php +++ b/src/Filament/Integration/Builders/TableBuilder.php @@ -15,7 +15,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\Visibility\BackendVisibilityService; -final class TableBuilder extends BaseBuilder +class TableBuilder extends BaseBuilder { public function columns(): Collection { diff --git a/src/Filament/Integration/Components/Forms/ClosureFormAdapter.php b/src/Filament/Integration/Components/Forms/ClosureFormAdapter.php index a1cc2ba9..86cd8497 100644 --- a/src/Filament/Integration/Components/Forms/ClosureFormAdapter.php +++ b/src/Filament/Integration/Components/Forms/ClosureFormAdapter.php @@ -67,7 +67,7 @@ public function create(CustomField $customField): Field /** * Apply user-defined options to choice fields automatically. */ - private function applyUserDefinedOptions(Field $field, CustomField $customField): Field + protected function applyUserDefinedOptions(Field $field, CustomField $customField): Field { if (method_exists($field, 'options')) { // Only apply if field doesn't already have options configured @@ -84,7 +84,7 @@ private function applyUserDefinedOptions(Field $field, CustomField $customField) /** * Apply color options based on field type. */ - private function applyColorOptions(Field $field, CustomField $customField): Field + protected function applyColorOptions(Field $field, CustomField $customField): Field { if (method_exists($field, 'options') && $field instanceof Select) { $coloredOptions = $this->getSelectColoredOptions($customField); diff --git a/src/Filament/Integration/Components/Forms/FileUploadComponent.php b/src/Filament/Integration/Components/Forms/FileUploadComponent.php index 5d7ce091..8e336cf2 100644 --- a/src/Filament/Integration/Components/Forms/FileUploadComponent.php +++ b/src/Filament/Integration/Components/Forms/FileUploadComponent.php @@ -22,7 +22,7 @@ public function create(CustomField $customField): Field return $this->applySettingsToComponent($component, $defaults); } - private function getSmartDefaults(): array + protected function getSmartDefaults(): array { return [ 'disk' => 'public', diff --git a/src/Filament/Integration/Components/Infolists/BooleanEntry.php b/src/Filament/Integration/Components/Infolists/BooleanEntry.php index a7db96eb..f59848ce 100644 --- a/src/Filament/Integration/Components/Infolists/BooleanEntry.php +++ b/src/Filament/Integration/Components/Infolists/BooleanEntry.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractInfolistEntry; use Relaticle\CustomFields\Models\CustomField; -final class BooleanEntry extends AbstractInfolistEntry +class BooleanEntry extends AbstractInfolistEntry { public function make(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Components/Infolists/ColorEntry.php b/src/Filament/Integration/Components/Infolists/ColorEntry.php index aaf2f3fd..280a2f2a 100644 --- a/src/Filament/Integration/Components/Infolists/ColorEntry.php +++ b/src/Filament/Integration/Components/Infolists/ColorEntry.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractInfolistEntry; use Relaticle\CustomFields\Models\CustomField; -final class ColorEntry extends AbstractInfolistEntry +class ColorEntry extends AbstractInfolistEntry { public function make(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Components/Infolists/DateTimeEntry.php b/src/Filament/Integration/Components/Infolists/DateTimeEntry.php index 691e7e8e..9adb3e13 100644 --- a/src/Filament/Integration/Components/Infolists/DateTimeEntry.php +++ b/src/Filament/Integration/Components/Infolists/DateTimeEntry.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractInfolistEntry; use Relaticle\CustomFields\Models\CustomField; -final class DateTimeEntry extends AbstractInfolistEntry +class DateTimeEntry extends AbstractInfolistEntry { public function make(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Components/Infolists/HtmlEntry.php b/src/Filament/Integration/Components/Infolists/HtmlEntry.php index 89577d14..8337621b 100644 --- a/src/Filament/Integration/Components/Infolists/HtmlEntry.php +++ b/src/Filament/Integration/Components/Infolists/HtmlEntry.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractInfolistEntry; use Relaticle\CustomFields\Models\CustomField; -final class HtmlEntry extends AbstractInfolistEntry +class HtmlEntry extends AbstractInfolistEntry { public function make(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Components/Infolists/MultiChoiceEntry.php b/src/Filament/Integration/Components/Infolists/MultiChoiceEntry.php index 11a131f4..06e21972 100644 --- a/src/Filament/Integration/Components/Infolists/MultiChoiceEntry.php +++ b/src/Filament/Integration/Components/Infolists/MultiChoiceEntry.php @@ -11,7 +11,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\ValueResolver\LookupMultiValueResolver; -final class MultiChoiceEntry extends AbstractInfolistEntry +class MultiChoiceEntry extends AbstractInfolistEntry { use ConfiguresBadgeColors; diff --git a/src/Filament/Integration/Components/Infolists/SingleChoiceEntry.php b/src/Filament/Integration/Components/Infolists/SingleChoiceEntry.php index b527ef7a..f1855049 100644 --- a/src/Filament/Integration/Components/Infolists/SingleChoiceEntry.php +++ b/src/Filament/Integration/Components/Infolists/SingleChoiceEntry.php @@ -11,7 +11,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\ValueResolver\LookupSingleValueResolver; -final class SingleChoiceEntry extends AbstractInfolistEntry +class SingleChoiceEntry extends AbstractInfolistEntry { use ConfiguresBadgeColors; diff --git a/src/Filament/Integration/Components/Infolists/TextEntry.php b/src/Filament/Integration/Components/Infolists/TextEntry.php index 880047e9..8d943f4a 100644 --- a/src/Filament/Integration/Components/Infolists/TextEntry.php +++ b/src/Filament/Integration/Components/Infolists/TextEntry.php @@ -9,7 +9,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractInfolistEntry; use Relaticle\CustomFields\Models\CustomField; -final class TextEntry extends AbstractInfolistEntry +class TextEntry extends AbstractInfolistEntry { public function make(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Components/Tables/Columns/ColorColumn.php b/src/Filament/Integration/Components/Tables/Columns/ColorColumn.php index c65309fc..ffa46e9d 100644 --- a/src/Filament/Integration/Components/Tables/Columns/ColorColumn.php +++ b/src/Filament/Integration/Components/Tables/Columns/ColorColumn.php @@ -12,7 +12,7 @@ use Relaticle\CustomFields\Filament\Integration\Concerns\Tables\ConfiguresSearchable; use Relaticle\CustomFields\Models\CustomField; -final class ColorColumn extends AbstractTableColumn +class ColorColumn extends AbstractTableColumn { use ConfiguresColumnLabel; use ConfiguresColumnState; diff --git a/src/Filament/Integration/Components/Tables/Columns/MultiChoiceColumn.php b/src/Filament/Integration/Components/Tables/Columns/MultiChoiceColumn.php index cfb7072e..51d385f9 100644 --- a/src/Filament/Integration/Components/Tables/Columns/MultiChoiceColumn.php +++ b/src/Filament/Integration/Components/Tables/Columns/MultiChoiceColumn.php @@ -13,7 +13,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\ValueResolver\LookupMultiValueResolver; -final class MultiChoiceColumn extends AbstractTableColumn +class MultiChoiceColumn extends AbstractTableColumn { use ConfiguresBadgeColors; use ConfiguresColumnLabel; diff --git a/src/Filament/Integration/Components/Tables/Columns/SingleChoiceColumn.php b/src/Filament/Integration/Components/Tables/Columns/SingleChoiceColumn.php index 6e72ffae..cd08903e 100644 --- a/src/Filament/Integration/Components/Tables/Columns/SingleChoiceColumn.php +++ b/src/Filament/Integration/Components/Tables/Columns/SingleChoiceColumn.php @@ -14,7 +14,7 @@ use Relaticle\CustomFields\Models\CustomField; use Relaticle\CustomFields\Services\ValueResolver\LookupSingleValueResolver; -final class SingleChoiceColumn extends AbstractTableColumn +class SingleChoiceColumn extends AbstractTableColumn { use ConfiguresBadgeColors; use ConfiguresColumnLabel; diff --git a/src/Filament/Integration/Components/Tables/Columns/TextColumn.php b/src/Filament/Integration/Components/Tables/Columns/TextColumn.php index 724023ef..54ac86dd 100644 --- a/src/Filament/Integration/Components/Tables/Columns/TextColumn.php +++ b/src/Filament/Integration/Components/Tables/Columns/TextColumn.php @@ -13,7 +13,7 @@ use Relaticle\CustomFields\Filament\Integration\Concerns\Tables\ConfiguresSortable; use Relaticle\CustomFields\Models\CustomField; -final class TextColumn extends AbstractTableColumn +class TextColumn extends AbstractTableColumn { use ConfiguresColumnLabel; use ConfiguresColumnState; diff --git a/src/Filament/Integration/Components/Tables/Filters/SelectFilter.php b/src/Filament/Integration/Components/Tables/Filters/SelectFilter.php index fbba0a29..b1c0b2bf 100644 --- a/src/Filament/Integration/Components/Tables/Filters/SelectFilter.php +++ b/src/Filament/Integration/Components/Tables/Filters/SelectFilter.php @@ -14,7 +14,7 @@ use Relaticle\CustomFields\Support\Utils; use Throwable; -final class SelectFilter extends AbstractTableFilter +class SelectFilter extends AbstractTableFilter { /** * @throws Throwable @@ -50,7 +50,7 @@ public function make(CustomField $customField): FilamentSelectFilter /** * @throws Throwable */ - private function configureLookup(FilamentSelectFilter $select, string $lookupType): FilamentSelectFilter + protected function configureLookup(FilamentSelectFilter $select, string $lookupType): FilamentSelectFilter { $entity = Entities::getEntity($lookupType); diff --git a/src/Filament/Integration/Components/Tables/Filters/TernaryFilter.php b/src/Filament/Integration/Components/Tables/Filters/TernaryFilter.php index b8c52dff..663d3395 100644 --- a/src/Filament/Integration/Components/Tables/Filters/TernaryFilter.php +++ b/src/Filament/Integration/Components/Tables/Filters/TernaryFilter.php @@ -7,7 +7,7 @@ use Relaticle\CustomFields\Filament\Integration\Base\AbstractTableFilter; use Relaticle\CustomFields\Models\CustomField; -final class TernaryFilter extends AbstractTableFilter +class TernaryFilter extends AbstractTableFilter { public function make(CustomField $customField): FilamentTernaryFilter { diff --git a/src/Filament/Integration/Concerns/Forms/ConfiguresVisibility.php b/src/Filament/Integration/Concerns/Forms/ConfiguresVisibility.php index 76e383ca..63854fe5 100644 --- a/src/Filament/Integration/Concerns/Forms/ConfiguresVisibility.php +++ b/src/Filament/Integration/Concerns/Forms/ConfiguresVisibility.php @@ -51,7 +51,7 @@ protected function configureVisibility( * * @param Collection $allFields */ - private function applyVisibility( + protected function applyVisibility( Field $field, CustomField $customField, Collection $allFields, diff --git a/src/Filament/Integration/Concerns/Shared/ConfiguresBadgeColors.php b/src/Filament/Integration/Concerns/Shared/ConfiguresBadgeColors.php index d0c88319..fad32f4f 100644 --- a/src/Filament/Integration/Concerns/Shared/ConfiguresBadgeColors.php +++ b/src/Filament/Integration/Concerns/Shared/ConfiguresBadgeColors.php @@ -25,7 +25,7 @@ protected function applyBadgeColorsIfEnabled($component, CustomField $customFiel }); } - private function shouldApplyBadgeColors(CustomField $customField): bool + protected function shouldApplyBadgeColors(CustomField $customField): bool { return FeatureManager::isEnabled(CustomFieldsFeature::FIELD_OPTION_COLORS) && $customField->settings->enable_option_colors diff --git a/src/Filament/Integration/CustomFieldsManager.php b/src/Filament/Integration/CustomFieldsManager.php index a07e58e2..d4291af0 100644 --- a/src/Filament/Integration/CustomFieldsManager.php +++ b/src/Filament/Integration/CustomFieldsManager.php @@ -10,7 +10,7 @@ use Relaticle\CustomFields\Filament\Integration\Builders\InfolistBuilder; use Relaticle\CustomFields\Filament\Integration\Builders\TableBuilder; -final class CustomFieldsManager +class CustomFieldsManager { public function table(): TableBuilder { diff --git a/src/Filament/Integration/Factories/FieldColumnFactory.php b/src/Filament/Integration/Factories/FieldColumnFactory.php index d5f71739..db0da964 100644 --- a/src/Filament/Integration/Factories/FieldColumnFactory.php +++ b/src/Filament/Integration/Factories/FieldColumnFactory.php @@ -11,7 +11,7 @@ use Relaticle\CustomFields\FeatureSystem\FeatureManager; use Relaticle\CustomFields\Models\CustomField; -final class FieldColumnFactory +class FieldColumnFactory { public function create(CustomField $customField): Column { diff --git a/src/Filament/Integration/Factories/FieldComponentFactory.php b/src/Filament/Integration/Factories/FieldComponentFactory.php index b8af3477..26e24e1e 100644 --- a/src/Filament/Integration/Factories/FieldComponentFactory.php +++ b/src/Filament/Integration/Factories/FieldComponentFactory.php @@ -15,7 +15,7 @@ /** * @extends AbstractComponentFactory */ -final class FieldComponentFactory extends AbstractComponentFactory +class FieldComponentFactory extends AbstractComponentFactory { /** * @param array $dependentFieldCodes diff --git a/src/Filament/Integration/Factories/FieldFilterFactory.php b/src/Filament/Integration/Factories/FieldFilterFactory.php index 5cf18e71..cc9eb57a 100644 --- a/src/Filament/Integration/Factories/FieldFilterFactory.php +++ b/src/Filament/Integration/Factories/FieldFilterFactory.php @@ -10,7 +10,7 @@ use InvalidArgumentException; use Relaticle\CustomFields\Models\CustomField; -final class FieldFilterFactory +class FieldFilterFactory { /** * @throws BindingResolutionException diff --git a/src/Filament/Integration/Factories/FieldInfolistsFactory.php b/src/Filament/Integration/Factories/FieldInfolistsFactory.php index e4caf7d5..d4f51075 100644 --- a/src/Filament/Integration/Factories/FieldInfolistsFactory.php +++ b/src/Filament/Integration/Factories/FieldInfolistsFactory.php @@ -9,7 +9,7 @@ use InvalidArgumentException; use Relaticle\CustomFields\Models\CustomField; -final class FieldInfolistsFactory +class FieldInfolistsFactory { public function create(CustomField $customField): Entry { diff --git a/src/Filament/Integration/Factories/ImportColumnFactory.php b/src/Filament/Integration/Factories/ImportColumnFactory.php index 6b080da0..f2630f06 100644 --- a/src/Filament/Integration/Factories/ImportColumnFactory.php +++ b/src/Filament/Integration/Factories/ImportColumnFactory.php @@ -20,7 +20,7 @@ * - Single unified configurator handles all field types * - Clean, simple API */ -final class ImportColumnFactory +class ImportColumnFactory { private ImportColumnConfigurator $configurator; diff --git a/src/Filament/Integration/Factories/SectionComponentFactory.php b/src/Filament/Integration/Factories/SectionComponentFactory.php index d26c94c4..bcb90def 100644 --- a/src/Filament/Integration/Factories/SectionComponentFactory.php +++ b/src/Filament/Integration/Factories/SectionComponentFactory.php @@ -10,7 +10,7 @@ use Relaticle\CustomFields\Enums\CustomFieldSectionType; use Relaticle\CustomFields\Models\CustomFieldSection; -final class SectionComponentFactory +class SectionComponentFactory { public function create(CustomFieldSection $customFieldSection): Section|Fieldset|Grid { diff --git a/src/Filament/Integration/Factories/SectionInfolistsFactory.php b/src/Filament/Integration/Factories/SectionInfolistsFactory.php index 9630493f..c8de1a69 100644 --- a/src/Filament/Integration/Factories/SectionInfolistsFactory.php +++ b/src/Filament/Integration/Factories/SectionInfolistsFactory.php @@ -10,7 +10,7 @@ use Relaticle\CustomFields\Enums\CustomFieldSectionType; use Relaticle\CustomFields\Models\CustomFieldSection; -final class SectionInfolistsFactory +class SectionInfolistsFactory { public function create(CustomFieldSection $customFieldSection): Section|Fieldset|Grid { diff --git a/src/Filament/Integration/Support/Imports/ImportColumnConfigurator.php b/src/Filament/Integration/Support/Imports/ImportColumnConfigurator.php index 3a5c4fa0..17cf0224 100644 --- a/src/Filament/Integration/Support/Imports/ImportColumnConfigurator.php +++ b/src/Filament/Integration/Support/Imports/ImportColumnConfigurator.php @@ -22,7 +22,7 @@ * Unified configurator for import columns based on custom field types. * Simplifies the previous multi-class approach into a single, data-driven configurator. */ -final class ImportColumnConfigurator +class ImportColumnConfigurator { /** * Configure an import column based on a custom field. @@ -53,7 +53,7 @@ public function configure(ImportColumn $column, CustomField $customField): Impor /** * Check if field type implements custom import/export interface and configure accordingly. */ - private function configureViaFieldType(): bool + protected function configureViaFieldType(): bool { // Import configuration is not currently supported for field types return false; @@ -62,7 +62,7 @@ private function configureViaFieldType(): bool /** * Configure single choice fields (select, radio). */ - private function configureSingleChoice(ImportColumn $column, CustomField $customField): void + protected function configureSingleChoice(ImportColumn $column, CustomField $customField): void { if ($customField->lookup_type) { $this->configureLookup($column, $customField, false); @@ -74,7 +74,7 @@ private function configureSingleChoice(ImportColumn $column, CustomField $custom /** * Configure multi choice fields (multi-select, checkbox list, tags). */ - private function configureMultiChoice(ImportColumn $column, CustomField $customField): void + protected function configureMultiChoice(ImportColumn $column, CustomField $customField): void { $column->array(','); @@ -105,7 +105,7 @@ private function configureMultiChoice(ImportColumn $column, CustomField $customF /** * Configure lookup-based fields. */ - private function configureLookup(ImportColumn $column, CustomField $customField, bool $multiple): void + protected function configureLookup(ImportColumn $column, CustomField $customField, bool $multiple): void { $column->castStateUsing(function (mixed $state) use ($customField, $multiple): array|null|int { if (blank($state)) { @@ -127,7 +127,7 @@ private function configureLookup(ImportColumn $column, CustomField $customField, /** * Resolve a single lookup value. */ - private function resolveLookupValue(CustomField $customField, mixed $value): int + protected function resolveLookupValue(CustomField $customField, mixed $value): int { try { $entity = Entities::getEntity($customField->lookup_type); @@ -171,7 +171,7 @@ private function resolveLookupValue(CustomField $customField, mixed $value): int /** * Resolve multiple lookup values. */ - private function resolveLookupValues(CustomField $customField, array $values): array + protected function resolveLookupValues(CustomField $customField, array $values): array { $foundIds = []; $missingValues = []; @@ -198,7 +198,7 @@ private function resolveLookupValues(CustomField $customField, array $values): a /** * Configure choice-based fields. */ - private function configureChoices(ImportColumn $column, CustomField $customField, bool $multiple): void + protected function configureChoices(ImportColumn $column, CustomField $customField, bool $multiple): void { $column->castStateUsing(function (mixed $state) use ($customField, $multiple): array|null|int { if (blank($state)) { @@ -220,7 +220,7 @@ private function configureChoices(ImportColumn $column, CustomField $customField /** * Resolve a single choice value. */ - private function resolveChoiceValue(CustomField $customField, mixed $value): ?int + protected function resolveChoiceValue(CustomField $customField, mixed $value): ?int { // If already numeric, assume it's a choice ID if (is_numeric($value)) { @@ -252,7 +252,7 @@ private function resolveChoiceValue(CustomField $customField, mixed $value): ?in * * @throws RowImportFailedException */ - private function resolveChoiceValues(CustomField $customField, array $values): array + protected function resolveChoiceValues(CustomField $customField, array $values): array { $foundIds = []; $missingValues = []; @@ -283,7 +283,7 @@ private function resolveChoiceValues(CustomField $customField, array $values): a /** * Configure date fields. */ - private function configureDate(ImportColumn $column): void + protected function configureDate(ImportColumn $column): void { $column->castStateUsing(function (mixed $state): ?string { if (blank($state)) { @@ -307,7 +307,7 @@ private function configureDate(ImportColumn $column): void /** * Configure datetime fields. */ - private function configureDateTime(ImportColumn $column): void + protected function configureDateTime(ImportColumn $column): void { $column->castStateUsing(function (mixed $state): ?string { if (blank($state)) { @@ -325,7 +325,7 @@ private function configureDateTime(ImportColumn $column): void /** * Configure text fields with appropriate examples. */ - private function configureText(ImportColumn $column, CustomField $customField): void + protected function configureText(ImportColumn $column, CustomField $customField): void { $dataType = $customField->typeData->dataType; @@ -341,7 +341,7 @@ private function configureText(ImportColumn $column, CustomField $customField): /** * Set lookup examples on the column. */ - private function setLookupExamples(ImportColumn $column, CustomField $customField, bool $multiple): void + protected function setLookupExamples(ImportColumn $column, CustomField $customField, bool $multiple): void { try { $entity = Entities::getEntity($customField->lookup_type); @@ -372,7 +372,7 @@ private function setLookupExamples(ImportColumn $column, CustomField $customFiel /** * Set choice examples on the column. */ - private function setChoiceExamples(ImportColumn $column, CustomField $customField, bool $multiple): void + protected function setChoiceExamples(ImportColumn $column, CustomField $customField, bool $multiple): void { $choices = $customField->options->pluck('name')->toArray(); @@ -395,7 +395,7 @@ private function setChoiceExamples(ImportColumn $column, CustomField $customFiel /** * Finalize column configuration. */ - private function finalize(ImportColumn $column, CustomField $customField): ImportColumn + protected function finalize(ImportColumn $column, CustomField $customField): ImportColumn { // Apply validation rules $this->applyValidationRules($column, $customField); @@ -410,7 +410,7 @@ private function finalize(ImportColumn $column, CustomField $customField): Impor /** * Apply validation rules to the column. */ - private function applyValidationRules(ImportColumn $column, CustomField $customField): void + protected function applyValidationRules(ImportColumn $column, CustomField $customField): void { // Handle validation_rules being a DataCollection or Collection $validationRules = $customField->validation_rules->toCollection(); diff --git a/src/Filament/Integration/Support/Imports/ImportDataStorage.php b/src/Filament/Integration/Support/Imports/ImportDataStorage.php index 7d214e40..c48209cd 100644 --- a/src/Filament/Integration/Support/Imports/ImportDataStorage.php +++ b/src/Filament/Integration/Support/Imports/ImportDataStorage.php @@ -16,7 +16,7 @@ * This class solves the problem of Filament trying to set custom_fields_* as model attributes, * which causes SQL errors. WeakMap ensures automatic cleanup when models are garbage collected. */ -final class ImportDataStorage +class ImportDataStorage { /** * WeakMap storage for custom field data during import. @@ -27,7 +27,7 @@ final class ImportDataStorage /** * Initialize the WeakMap storage if not already initialized. */ - private static function init(): void + protected static function init(): void { self::$storage ??= new WeakMap; } diff --git a/src/Filament/Management/Forms/Components/CustomFieldValidationComponent.php b/src/Filament/Management/Forms/Components/CustomFieldValidationComponent.php index 4f17dfef..4642c730 100644 --- a/src/Filament/Management/Forms/Components/CustomFieldValidationComponent.php +++ b/src/Filament/Management/Forms/Components/CustomFieldValidationComponent.php @@ -17,7 +17,7 @@ use Relaticle\CustomFields\Enums\ValidationRule; use Relaticle\CustomFields\Facades\CustomFieldsType; -final class CustomFieldValidationComponent extends Component +class CustomFieldValidationComponent extends Component { protected string $view = 'filament-schemas::components.grid'; @@ -32,7 +32,7 @@ public static function make(): self return app(self::class); } - private function buildValidationRulesRepeater(): Repeater + protected function buildValidationRulesRepeater(): Repeater { return Repeater::make('validation_rules') ->label( @@ -68,7 +68,7 @@ private function buildValidationRulesRepeater(): Repeater ->columnSpanFull(); } - private function buildRuleSelector(): Select + protected function buildRuleSelector(): Select { return Select::make('name') ->label( @@ -97,7 +97,7 @@ private function buildRuleSelector(): Select ->columnSpan(1); } - private function buildRuleDescription(): TextEntry + protected function buildRuleDescription(): TextEntry { return TextEntry::make('description') ->label( @@ -115,7 +115,7 @@ private function buildRuleDescription(): TextEntry ->columnSpan(2); } - private function buildRuleParametersRepeater(): Repeater + protected function buildRuleParametersRepeater(): Repeater { return Repeater::make('parameters') ->label( @@ -194,7 +194,7 @@ private function buildRuleParametersRepeater(): Repeater /** * @return array */ - private function getAvailableRuleOptions(Get $get): array + protected function getAvailableRuleOptions(Get $get): array { $fieldTypeKey = $get('../../type'); if (! $fieldTypeKey) { @@ -225,7 +225,7 @@ private function getAvailableRuleOptions(Get $get): array /** * @return array */ - private function getAllowedRuleValues(Get $get): array + protected function getAllowedRuleValues(Get $get): array { $fieldType = $this->getFieldType($get); @@ -238,7 +238,7 @@ private function getAllowedRuleValues(Get $get): array ->toArray(); } - private function handleRuleChange( + protected function handleRuleChange( Set $set, ?string $state, ?string $old @@ -266,7 +266,7 @@ private function handleRuleChange( /** * @return array */ - private function getParameterValidationRules( + protected function getParameterValidationRules( Get $get, Component $component ): array { @@ -279,7 +279,7 @@ private function getParameterValidationRules( ); } - private function getParameterHint( + protected function getParameterHint( Get $get, ?Component $component = null ): string { @@ -335,7 +335,7 @@ private function getParameterHint( }; } - private function hydrateParameterValue( + protected function hydrateParameterValue( Get $get, Set $set, mixed $state, @@ -360,7 +360,7 @@ private function hydrateParameterValue( $set('value', $normalizedValue); } - private function dehydrateParameterValue( + protected function dehydrateParameterValue( Get $get, mixed $state, Component $component @@ -383,7 +383,7 @@ private function dehydrateParameterValue( ); } - private function getParameterCount(Get $get): int + protected function getParameterCount(Get $get): int { $ruleName = $get('name'); if (empty($ruleName)) { @@ -397,14 +397,14 @@ private function getParameterCount(Get $get): int : 1; } - private function getMaxParameterCount(Get $get): int + protected function getMaxParameterCount(Get $get): int { return ValidationRule::getAllowedParametersCountForRule( $get('name') ); } - private function canDeleteParameter(Get $get): bool + protected function canDeleteParameter(Get $get): bool { $ruleName = $get('name'); if (empty($ruleName)) { @@ -424,7 +424,7 @@ private function canDeleteParameter(Get $get): bool /** * @param array $state */ - private function generateRuleLabel(array $state): string + protected function generateRuleLabel(array $state): string { $ruleName = $state['name'] ?? ''; $parameters = $state['parameters'] ?? []; @@ -440,7 +440,7 @@ private function generateRuleLabel(array $state): string * * @return array */ - private function getAllowedValidationRulesForFieldType( + protected function getAllowedValidationRulesForFieldType( string $fieldTypeKey ): array { $fieldType = CustomFieldsType::getFieldType($fieldTypeKey); @@ -448,7 +448,7 @@ private function getAllowedValidationRulesForFieldType( return $fieldType->validationRules; } - private function getFieldType(Get $get): ?FieldTypeData + protected function getFieldType(Get $get): ?FieldTypeData { $type = $get('../../type'); @@ -462,14 +462,14 @@ private function getFieldType(Get $get): ?FieldTypeData /** * @param array $existingRules */ - private function isRuleDuplicate(array $existingRules, string $rule): bool + protected function isRuleDuplicate(array $existingRules, string $rule): bool { return collect($existingRules)->contains( fn (array $existingRule): bool => ($existingRule['name'] ?? '') === $rule ); } - private function getParameterIndex(Component $component): int + protected function getParameterIndex(Component $component): int { $statePath = $component->getStatePath(); diff --git a/src/Filament/Management/Forms/Components/VisibilityComponent.php b/src/Filament/Management/Forms/Components/VisibilityComponent.php index 54a29ff3..2b6711b1 100644 --- a/src/Filament/Management/Forms/Components/VisibilityComponent.php +++ b/src/Filament/Management/Forms/Components/VisibilityComponent.php @@ -27,7 +27,7 @@ * ABOUTME: Visibility component for configuring field visibility conditions. * ABOUTME: Provides dynamic form inputs based on field types and operators. */ -final class VisibilityComponent extends Component +class VisibilityComponent extends Component { protected string $view = 'filament-schemas::components.grid'; @@ -42,7 +42,7 @@ public static function make(): static return new self; } - private function buildFieldset(): Fieldset + protected function buildFieldset(): Fieldset { return Fieldset::make('Conditional Visibility')->schema([ Select::make('settings.visibility.mode') @@ -83,7 +83,7 @@ private function buildFieldset(): Fieldset * * @throws Exception */ - private function buildConditionSchema(): array + protected function buildConditionSchema(): array { return [ Select::make('field_code') @@ -113,7 +113,7 @@ private function buildConditionSchema(): array * * @throws Exception */ - private function getValueInputComponents(): array + protected function getValueInputComponents(): array { return [ // Single select for choice fields @@ -161,7 +161,7 @@ private function getValueInputComponents(): array ]; } - private function shouldShowSingleSelect(Get $get): bool + protected function shouldShowSingleSelect(Get $get): bool { if (! $this->operatorRequiresValue($get)) { return false; @@ -181,7 +181,7 @@ private function shouldShowSingleSelect(Get $get): bool return ! ($fieldData->dataType->isMultiChoiceField() && $this->isContainsOperator($operator)); } - private function shouldShowMultipleSelect(Get $get): bool + protected function shouldShowMultipleSelect(Get $get): bool { if (! $this->operatorRequiresValue($get)) { return false; @@ -196,7 +196,7 @@ private function shouldShowMultipleSelect(Get $get): bool $this->isContainsOperator($get('operator')); } - private function shouldShowToggle(Get $get): bool + protected function shouldShowToggle(Get $get): bool { if (! $this->operatorRequiresValue($get)) { return false; @@ -207,7 +207,7 @@ private function shouldShowToggle(Get $get): bool return $fieldData && $fieldData->dataType === FieldDataType::BOOLEAN; } - private function shouldShowTextInput(Get $get): bool + protected function shouldShowTextInput(Get $get): bool { if (! $this->operatorRequiresValue($get)) { return false; @@ -225,7 +225,7 @@ private function shouldShowTextInput(Get $get): bool /** * @return array */ - private function getFieldOptions(Get $get): array + protected function getFieldOptions(Get $get): array { $fieldCode = $get('field_code'); if (blank($fieldCode)) { @@ -243,7 +243,7 @@ private function getFieldOptions(Get $get): array }, []); } - private function getPlaceholder(Get $get): string + protected function getPlaceholder(Get $get): string { if (blank($get('field_code'))) { return 'Select a field first'; @@ -272,14 +272,14 @@ private function getPlaceholder(Get $get): string }; } - private function modeRequiresConditions(Get $get): bool + protected function modeRequiresConditions(Get $get): bool { $mode = $get('settings.visibility.mode'); return $mode instanceof VisibilityMode && $mode->requiresConditions(); } - private function operatorRequiresValue(Get $get): bool + protected function operatorRequiresValue(Get $get): bool { $operator = $get('operator'); if (blank($operator)) { @@ -295,7 +295,7 @@ private function operatorRequiresValue(Get $get): bool /** * @return array */ - private function getAvailableFields(Get $get): array + protected function getAvailableFields(Get $get): array { $entityType = $this->getEntityType($get); if (blank($entityType)) { @@ -317,7 +317,7 @@ private function getAvailableFields(Get $get): array /** * @return array */ - private function getCompatibleOperators(Get $get): array + protected function getCompatibleOperators(Get $get): array { $fieldData = $this->getFieldTypeData($get); @@ -326,7 +326,7 @@ private function getCompatibleOperators(Get $get): array : VisibilityOperator::options(); } - private function getFieldTypeData(Get $get): ?object + protected function getFieldTypeData(Get $get): ?object { $fieldCode = $get('field_code'); if (blank($fieldCode)) { @@ -344,7 +344,7 @@ private function getFieldTypeData(Get $get): ?object ); } - private function getCustomField(string $fieldCode, Get $get): ?CustomField + protected function getCustomField(string $fieldCode, Get $get): ?CustomField { $entityType = $this->getEntityType($get); if (blank($entityType)) { @@ -359,20 +359,20 @@ private function getCustomField(string $fieldCode, Get $get): ?CustomField }, null); } - private function getEntityType(Get $get): ?string + protected function getEntityType(Get $get): ?string { return $get('../../../../entity_type') ?? request('entityType') ?? request()->route('entityType'); } - private function resetConditionValues(Get $get, Set $set): void + protected function resetConditionValues(Get $get, Set $set): void { $this->clearAllValueFields($set); $set('operator', array_key_first($this->getCompatibleOperators($get))); } - private function clearAllValueFields(Set $set): void + protected function clearAllValueFields(Set $set): void { $set('value', null); $set('text_value', null); @@ -381,7 +381,7 @@ private function clearAllValueFields(Set $set): void $set('multiple_values', []); } - private function isContainsOperator(?string $operator): bool + protected function isContainsOperator(?string $operator): bool { return in_array($operator, [ VisibilityOperator::CONTAINS->value, diff --git a/src/Filament/Management/Pages/CustomFieldsManagementPage.php b/src/Filament/Management/Pages/CustomFieldsManagementPage.php index a14927fb..b098f5e3 100644 --- a/src/Filament/Management/Pages/CustomFieldsManagementPage.php +++ b/src/Filament/Management/Pages/CustomFieldsManagementPage.php @@ -133,7 +133,7 @@ public function updateSectionsOrder(array $sections): void } } - private function storeSection(array $data): CustomFieldSection + protected function storeSection(array $data): CustomFieldSection { if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) { $data[config('custom-fields.database.column_names.tenant_foreign_key')] = Filament::getTenant()?->getKey(); diff --git a/src/Livewire/ManageCustomField.php b/src/Livewire/ManageCustomField.php index f43b6d4e..5adcd796 100644 --- a/src/Livewire/ManageCustomField.php +++ b/src/Livewire/ManageCustomField.php @@ -18,7 +18,7 @@ use Relaticle\CustomFields\Filament\Management\Schemas\FieldForm; use Relaticle\CustomFields\Models\CustomField; -final class ManageCustomField extends Component implements HasActions, HasForms +class ManageCustomField extends Component implements HasActions, HasForms { use InteractsWithActions; use InteractsWithForms; diff --git a/src/Livewire/ManageCustomFieldSection.php b/src/Livewire/ManageCustomFieldSection.php index e2a725d9..ecaa34ea 100644 --- a/src/Livewire/ManageCustomFieldSection.php +++ b/src/Livewire/ManageCustomFieldSection.php @@ -25,7 +25,7 @@ use Relaticle\CustomFields\Filament\Management\Schemas\SectionForm; use Relaticle\CustomFields\Models\CustomFieldSection; -final class ManageCustomFieldSection extends Component implements HasActions, HasForms +class ManageCustomFieldSection extends Component implements HasActions, HasForms { use InteractsWithActions; use InteractsWithForms; diff --git a/src/Providers/EntityServiceProvider.php b/src/Providers/EntityServiceProvider.php index 8dfb5f7f..a627505f 100644 --- a/src/Providers/EntityServiceProvider.php +++ b/src/Providers/EntityServiceProvider.php @@ -45,7 +45,7 @@ public function boot(): void /** * Configure the EntityManager with discovery and registered entities */ - private function configureEntityManager(EntityManager $manager): void + protected function configureEntityManager(EntityManager $manager): void { $this->configureDiscovery($manager); $this->registerEntities($manager); @@ -55,7 +55,7 @@ private function configureEntityManager(EntityManager $manager): void /** * Configure entity discovery */ - private function configureDiscovery(EntityManager $manager): void + protected function configureDiscovery(EntityManager $manager): void { $config = $this->getEntityConfig(); @@ -68,7 +68,7 @@ private function configureDiscovery(EntityManager $manager): void /** * Register entities from configuration */ - private function registerEntities(EntityManager $manager): void + protected function registerEntities(EntityManager $manager): void { $config = $this->getEntityConfig(); $entities = $config['entities'] ?? []; @@ -108,7 +108,7 @@ private function registerEntities(EntityManager $manager): void /** * Register entity filters */ - private function registerFilters(EntityManager $manager): void + protected function registerFilters(EntityManager $manager): void { $config = $this->getEntityConfig(); $excludedModels = $config['excluded_models'] ?? []; @@ -127,7 +127,7 @@ private function registerFilters(EntityManager $manager): void /** * Get entity configuration from the builder */ - private function getEntityConfig(): array + protected function getEntityConfig(): array { $entityConfiguration = config('custom-fields.entity_configuration'); diff --git a/src/Providers/FieldTypeServiceProvider.php b/src/Providers/FieldTypeServiceProvider.php index 8fec432d..ace428aa 100644 --- a/src/Providers/FieldTypeServiceProvider.php +++ b/src/Providers/FieldTypeServiceProvider.php @@ -9,7 +9,7 @@ use Illuminate\Support\ServiceProvider; use Relaticle\CustomFields\Models\Contracts\HasCustomFields; -final class FieldTypeServiceProvider extends ServiceProvider +class FieldTypeServiceProvider extends ServiceProvider { public function boot(): void { diff --git a/src/Services/Options/ComponentOptionsExtractor.php b/src/Services/Options/ComponentOptionsExtractor.php index 73a2aeb4..6cf51811 100644 --- a/src/Services/Options/ComponentOptionsExtractor.php +++ b/src/Services/Options/ComponentOptionsExtractor.php @@ -18,7 +18,7 @@ * This service analyzes form components to discover their configured options, * whether they're static arrays or dynamic search results. */ -final class ComponentOptionsExtractor +class ComponentOptionsExtractor { public function __construct( private FieldManager $fieldTypeManager @@ -49,7 +49,7 @@ public function extractOptionsFromFieldType(string $fieldTypeKey, ?CustomField $ /** * Extract options from a closure-based form component */ - private function extractFromClosure(Closure $closure, ?CustomField $field): array + protected function extractFromClosure(Closure $closure, ?CustomField $field): array { try { // Create a test field if none provided @@ -69,7 +69,7 @@ private function extractFromClosure(Closure $closure, ?CustomField $field): arra /** * Extract options from a component class */ - private function extractFromComponentClass(): array + protected function extractFromComponentClass(): array { // This would require instantiating the component class // For now, return empty array as component classes typically use database options @@ -79,7 +79,7 @@ private function extractFromComponentClass(): array /** * Extract options from an instantiated Filament component */ - private function extractFromComponent(Field $component): array + protected function extractFromComponent(Field $component): array { try { // Method 1: Try getOptions() method (standard Filament pattern) @@ -118,7 +118,7 @@ private function extractFromComponent(Field $component): array /** * Extract sample options from a searchable component */ - private function extractFromSearchableComponent(Field $component): array + protected function extractFromSearchableComponent(Field $component): array { try { // Try to extract the search callback and run it with empty string @@ -156,7 +156,7 @@ private function extractFromSearchableComponent(Field $component): array /** * Create a test CustomField for component instantiation */ - private function createTestField(): CustomField + protected function createTestField(): CustomField { $field = new CustomField; $field->id = 999; diff --git a/src/Services/TenantContextService.php b/src/Services/TenantContextService.php index df6addef..52a373f0 100644 --- a/src/Services/TenantContextService.php +++ b/src/Services/TenantContextService.php @@ -7,7 +7,7 @@ use Filament\Facades\Filament; use Illuminate\Support\Facades\Context; -final class TenantContextService +class TenantContextService { private const string TENANT_ID_KEY = 'custom_fields_tenant_id'; diff --git a/src/Services/ValidationService.php b/src/Services/ValidationService.php index e4d30b34..bee0206b 100644 --- a/src/Services/ValidationService.php +++ b/src/Services/ValidationService.php @@ -15,7 +15,7 @@ /** * Service for handling field validation rules and constraints. */ -final class ValidationService +class ValidationService { /** * Get all validation rules for a custom field, applying both: @@ -63,7 +63,7 @@ public function isRequired(CustomField $customField): bool * @param CustomField $customField The custom field for context * @return array The converted rules */ - private function convertUserRulesToValidatorFormat(?DataCollection $rules, CustomField $customField): array + protected function convertUserRulesToValidatorFormat(?DataCollection $rules, CustomField $customField): array { if (! $rules instanceof DataCollection || $rules->toCollection()->isEmpty()) { return []; @@ -120,7 +120,7 @@ public function getDatabaseValidationRules(string $fieldType, bool $isEncrypted * @param array $secondaryRules Rules that are overridden by primary rules * @return array Combined rules */ - private function combineRules(array $primaryRules, array $secondaryRules): array + protected function combineRules(array $primaryRules, array $secondaryRules): array { // Extract rule names (without parameters) from primary rules $primaryRuleNames = array_map(fn (string $rule): string => explode(':', $rule, 2)[0], $primaryRules); @@ -143,7 +143,7 @@ private function combineRules(array $primaryRules, array $secondaryRules): array * @param CustomField $customField The custom field with options * @return array Array of option IDs */ - private function convertOptionNamesToIds(array $optionNames, CustomField $customField): array + protected function convertOptionNamesToIds(array $optionNames, CustomField $customField): array { // Load options if not already loaded $customField->loadMissing('options'); @@ -168,7 +168,7 @@ private function convertOptionNamesToIds(array $optionNames, CustomField $custom * @param string $fieldType The field type * @return array Array of default validation rules */ - private function getFieldTypeDefaultRules(string $fieldType): array + protected function getFieldTypeDefaultRules(string $fieldType): array { // Get from field type definition's defaultValidationRules $fieldTypeManager = app(FieldManager::class); @@ -194,7 +194,7 @@ private function getFieldTypeDefaultRules(string $fieldType): array * @param string $fieldType The field type * @return array Merged validation rules */ - private function mergeAllValidationRules(array $fieldTypeDefaults, array $userRules, array $databaseRules, string $fieldType): array + protected function mergeAllValidationRules(array $fieldTypeDefaults, array $userRules, array $databaseRules, string $fieldType): array { // Start with field type defaults (always applied) $mergedRules = $fieldTypeDefaults; diff --git a/src/Services/ValueResolver/LookupResolver.php b/src/Services/ValueResolver/LookupResolver.php index 64a186cf..6217be76 100644 --- a/src/Services/ValueResolver/LookupResolver.php +++ b/src/Services/ValueResolver/LookupResolver.php @@ -46,7 +46,7 @@ public function resolveLookupValues(array $values, CustomField $customField): Co * * @throws Throwable */ - private function getLookupAttributes(string $lookupType): array + protected function getLookupAttributes(string $lookupType): array { $lookupModelPath = Relation::getMorphedModel($lookupType) ?? $lookupType; $lookupInstance = app($lookupModelPath); diff --git a/src/Services/Visibility/BackendVisibilityService.php b/src/Services/Visibility/BackendVisibilityService.php index 3bb86256..41843035 100644 --- a/src/Services/Visibility/BackendVisibilityService.php +++ b/src/Services/Visibility/BackendVisibilityService.php @@ -159,7 +159,7 @@ public function normalizeFieldValues( /** * Normalize a single field value for visibility evaluation. */ - private function normalizeValueForEvaluation( + protected function normalizeValueForEvaluation( mixed $value, ?CustomField $field ): mixed { @@ -275,7 +275,7 @@ public function getFieldMetadata( * @param array $options * @return array */ - private function normalizeOptionsForVisibility(array $options): array + protected function normalizeOptionsForVisibility(array $options): array { if ($options === []) { return []; @@ -305,7 +305,7 @@ private function normalizeOptionsForVisibility(array $options): array * * @return array */ - private function getLookupOptions(string $lookupType): array + protected function getLookupOptions(string $lookupType): array { try { $entity = Entities::getEntity($lookupType); diff --git a/src/Services/Visibility/FrontendVisibilityService.php b/src/Services/Visibility/FrontendVisibilityService.php index 848f028c..7950467e 100644 --- a/src/Services/Visibility/FrontendVisibilityService.php +++ b/src/Services/Visibility/FrontendVisibilityService.php @@ -61,7 +61,7 @@ public function buildVisibilityExpression( * * @param Collection $allFields */ - private function buildFieldConditions( + protected function buildFieldConditions( CustomField $field, Collection $allFields ): ?string { @@ -105,7 +105,7 @@ private function buildFieldConditions( * * @param Collection $allFields */ - private function buildParentConditions( + protected function buildParentConditions( CustomField $field, Collection $allFields ): ?string { @@ -141,7 +141,7 @@ private function buildParentConditions( * * @param Collection $allFields */ - private function buildCondition( + protected function buildCondition( VisibilityConditionData $condition, VisibilityMode $mode, Collection $allFields @@ -168,7 +168,7 @@ private function buildCondition( /** * Build operator expression using the same logic as backend evaluation. */ - private function buildOperatorExpression( + protected function buildOperatorExpression( VisibilityOperator $operator, string $fieldValue, mixed $value, @@ -230,7 +230,7 @@ private function buildOperatorExpression( /** * Build equals expression with optionable field support. */ - private function buildEqualsExpression( + protected function buildEqualsExpression( string $fieldValue, mixed $value, ?CustomField $targetField @@ -253,7 +253,7 @@ private function buildEqualsExpression( /** * Build not equals expression. */ - private function buildNotEqualsExpression( + protected function buildNotEqualsExpression( string $fieldValue, mixed $value, ?CustomField $targetField @@ -276,7 +276,7 @@ private function buildNotEqualsExpression( /** * Build standard equals expression for non-optionable fields. */ - private function buildStandardEqualsExpression( + protected function buildStandardEqualsExpression( string $fieldValue, mixed $value ): string { @@ -318,7 +318,7 @@ private function buildStandardEqualsExpression( /** * Build standard not equals expression. */ - private function buildStandardNotEqualsExpression( + protected function buildStandardNotEqualsExpression( string $fieldValue, mixed $value ): string { @@ -333,7 +333,7 @@ private function buildStandardNotEqualsExpression( /** * Build option expression for optionable fields. */ - private function buildOptionExpression( + protected function buildOptionExpression( string $fieldValue, mixed $value, CustomField $targetField, @@ -359,7 +359,7 @@ private function buildOptionExpression( /** * Build multi-value option condition. */ - private function buildMultiValueOptionCondition( + protected function buildMultiValueOptionCondition( string $fieldValue, mixed $resolvedValue, string $jsValue @@ -379,7 +379,7 @@ private function buildMultiValueOptionCondition( /** * Build single value option condition. */ - private function buildSingleValueOptionCondition( + protected function buildSingleValueOptionCondition( string $fieldValue, string $jsValue ): string { @@ -406,7 +406,7 @@ private function buildSingleValueOptionCondition( /** * Resolve option value using the same logic as backend. */ - private function resolveOptionValue( + protected function resolveOptionValue( mixed $value, CustomField $targetField ): mixed { @@ -425,7 +425,7 @@ private function resolveOptionValue( * * @param array $value */ - private function resolveArrayOptionValue( + protected function resolveArrayOptionValue( array $value, CustomField $targetField ): mixed { @@ -441,7 +441,7 @@ private function resolveArrayOptionValue( /** * Convert option value to proper format. */ - private function convertOptionValue( + protected function convertOptionValue( mixed $value, CustomField $targetField ): mixed { @@ -479,7 +479,7 @@ private function convertOptionValue( /** * Build contains expression. */ - private function buildContainsExpression( + protected function buildContainsExpression( string $fieldValue, mixed $value, ?CustomField $targetField @@ -499,7 +499,7 @@ private function buildContainsExpression( /** * Build numeric comparison expression. */ - private function buildNumericComparison( + protected function buildNumericComparison( string $fieldValue, mixed $value, string $operator @@ -514,7 +514,7 @@ private function buildNumericComparison( /** * Build empty expression. */ - private function buildEmptyExpression( + protected function buildEmptyExpression( string $fieldValue, bool $isEmpty ): string { @@ -529,7 +529,7 @@ private function buildEmptyExpression( /** * Format JavaScript value using the same logic as FieldConfigurator. */ - private function formatJsValue(mixed $value): string + protected function formatJsValue(mixed $value): string { return match (true) { $value === null => 'null', diff --git a/src/Support/DatabaseFieldConstraints.php b/src/Support/DatabaseFieldConstraints.php index 8081374f..6ac3c72b 100644 --- a/src/Support/DatabaseFieldConstraints.php +++ b/src/Support/DatabaseFieldConstraints.php @@ -12,7 +12,7 @@ * ABOUTME: Handles database field constraints and converts them to validation rules * ABOUTME: Ensures user input respects database column limitations across different database drivers */ -final class DatabaseFieldConstraints +class DatabaseFieldConstraints { /** * Cache configuration. @@ -190,7 +190,7 @@ public static function clearCache(): void /** * Merge a single rule with existing rules. */ - private static function mergeRule( + protected static function mergeRule( array $rules, string $ruleType, array $dbConstraints @@ -236,7 +236,7 @@ private static function mergeRule( /** * Apply the stricter constraint between user and database rules. */ - private static function applyStricterConstraint( + protected static function applyStricterConstraint( array $rules, string $ruleName, int $existingIndex, @@ -284,7 +284,7 @@ private static function applyStricterConstraint( /** * Resolve max value from constraints, handling driver-specific values. */ - private static function resolveMaxValue(mixed $maxConstraint): mixed + protected static function resolveMaxValue(mixed $maxConstraint): mixed { return is_array($maxConstraint) ? ($maxConstraint[self::getDatabaseDriver()] ?? current($maxConstraint)) diff --git a/src/Support/Utils.php b/src/Support/Utils.php index 9ba47e7c..552c6efb 100644 --- a/src/Support/Utils.php +++ b/src/Support/Utils.php @@ -7,7 +7,7 @@ use ReflectionClass; use ReflectionException; -final class Utils +class Utils { public static function getResourceCluster(): ?string {