• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

luttje / filament-user-attributes / 7240605279

17 Dec 2023 07:38PM UTC coverage: 76.074% (-0.4%) from 76.49%
7240605279

push

github

luttje
fix class name mistake

6 of 7 new or added lines in 1 file covered. (85.71%)

25 existing lines in 3 files now uncovered.

1151 of 1513 relevant lines covered (76.07%)

31.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.69
/src/Filament/Resources/UserAttributeConfigResource.php
1
<?php
2

3
namespace Luttje\FilamentUserAttributes\Filament\Resources;
4

5
use Filament\Forms;
6
use Filament\Forms\Set;
7
use Filament\Forms\Form;
8
use Filament\Resources\Resource;
9
use Filament\Tables;
10
use Filament\Tables\Table;
11
use Illuminate\Database\Eloquent\Builder;
12
use Illuminate\Database\Eloquent\Casts\ArrayObject;
13
use Illuminate\Database\Eloquent\Model;
14
use Luttje\FilamentUserAttributes\Facades\FilamentUserAttributes;
15
use Luttje\FilamentUserAttributes\Filament\Resources\UserAttributeConfigResource\Pages\EditUserAttributeConfig;
16
use Luttje\FilamentUserAttributes\Filament\Resources\UserAttributeConfigResource\Pages\ManageUserAttributeConfigs;
17
use Luttje\FilamentUserAttributes\Filament\UserAttributeComponentFactoryRegistry;
18
use Luttje\FilamentUserAttributes\Models\UserAttributeConfig;
19

20
class UserAttributeConfigResource extends Resource
21
{
22
    protected static ?string $model = UserAttributeConfig::class;
23

24
    protected static ?string $tenantOwnershipRelationshipName = 'owner';
25

26
    public static function getEloquentQuery(): Builder
4✔
27
    {
28
        $resources = FilamentUserAttributes::getConfigurableResources();
4✔
29
        $query = parent::getEloquentQuery();
4✔
30

31
        /** @var \Luttje\FilamentUserAttributes\Contracts\UserAttributesConfigContract $resource */
32
        foreach ($resources as $resource => $_) {
4✔
33
            $config = $resource::getUserAttributesConfig();
×
34

35
            if (!$config) {
×
36
                continue;
×
37
            }
38

39
            // TODO: Use a scope for always set this
40
            $query->orWhere(function ($query) use ($resource, $config) {
×
41
                $query->where('resource_type', $resource)
×
42
                    ->where('owner_type', get_class($config))
×
43
                    ->where('owner_id', $config->getKey());
×
44
            });
×
45
        }
46

47
        return $query;
4✔
48
    }
49

50
    public static function resolveRecordRouteBinding(int | string $key): ?Model
36✔
51
    {
52
        if(class_exists($key)) {
36✔
53
            $resource = $key;
36✔
54
            $config = $resource::getUserAttributesConfig();
36✔
55
            $userAttributeConfigs = $config
36✔
56
                ->userAttributesConfigs()
36✔
57
                ->where('resource_type', $resource)
36✔
58
                ->first();
36✔
59

60
            if (!$userAttributeConfigs) {
36✔
61
                $userAttributeConfigs = UserAttributeConfig::create([
36✔
62
                    'resource_type' => $resource,
36✔
63
                    'owner_type' => get_class($config),
36✔
64
                    'owner_id' => $config->id,
36✔
65
                    'config' => [],
36✔
66
                ]);
36✔
67
            }
68

69
            return $userAttributeConfigs;
36✔
70
        }
71

72
        return parent::resolveRecordRouteBinding($key);
×
73
    }
74

75
    public static function form(Form $form): Form
36✔
76
    {
77
        /** @var UserAttributeConfig */
78
        $model = $form->model;
36✔
79
        return $form
36✔
80
            ->schema([
36✔
81
                Forms\Components\Repeater::make('config')
36✔
82
                    ->addActionLabel(__('filament-user-attributes::user-attributes.add_attribute'))
36✔
83
                    ->label(ucfirst(__('filament-user-attributes::user-attributes.attributes.config')))
36✔
84
                    ->reorderable(false)
36✔
85
                    ->schema([
36✔
86
                        ...UserAttributeComponentFactoryRegistry::getConfigurationSchemas($model),
36✔
87
                    ])
36✔
88
                ])
36✔
89
            ->columns(1);
36✔
90
    }
91

92
    public static function table(Table $table): Table
4✔
93
    {
94
        return $table
4✔
95
            ->columns([
4✔
96
                Tables\Columns\TextColumn::make('resource_type')
4✔
97
                    ->label(ucfirst(__('filament-user-attributes::user-attributes.attributes.resource_type')))
4✔
98
                    ->formatStateUsing(function (string $state) {
4✔
99
                        $nameTransformer = config('filament-user-attributes.discovery_resource_name_transformer');
×
100
                        return $nameTransformer($state);
×
101
                    }),
4✔
102
                Tables\Columns\TextColumn::make('config')
4✔
103
                    ->label(ucfirst(__('filament-user-attributes::user-attributes.attributes.config')))
4✔
104
                    ->formatStateUsing(function (ArrayObject $state) {
4✔
105
                        $count = count($state);
×
UNCOV
106
                        return trans_choice('filament-user-attributes::user-attributes.amount', $count, ['amount' => $count]);
×
107
                    }),
4✔
108
            ])
4✔
109
            ->actions([
4✔
110
                Tables\Actions\EditAction::make(),
4✔
111
                Tables\Actions\DeleteAction::make(),
4✔
112
            ]);
4✔
113
    }
114

115
    public static function getPages(): array
292✔
116
    {
117
        $callerClass = get_called_class();
292✔
118
        ManageUserAttributeConfigs::$injectedResource = $callerClass;
292✔
119
        EditUserAttributeConfig::$injectedResource = $callerClass;
292✔
120

121
        return [
292✔
122
            'index' => ManageUserAttributeConfigs::route('/'),
292✔
123
            'edit' => EditUserAttributeConfig::route('/{record}/edit'),
292✔
124
        ];
292✔
125
    }
126
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc