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

luttje / filament-user-attributes / 6914439067

18 Nov 2023 02:13PM UTC coverage: 63.165% (-0.3%) from 63.51%
6914439067

push

github

luttje
fix tests by adding model label to resource

914 of 1447 relevant lines covered (63.17%)

19.07 hits per line

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

52.86
/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
×
27
    {
28
        $resources = FilamentUserAttributes::getConfigurableResources();
×
29
        $query = parent::getEloquentQuery();
×
30

31
        /** @var \Luttje\FilamentUserAttributes\Contracts\UserAttributesConfigContract $resource */
32
        foreach ($resources as $resource => $_) {
×
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;
×
48
    }
49

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

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

69
            return $userAttributeConfigs;
4✔
70
        }
71

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

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

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

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

120
        return [
220✔
121
            'index' => ManageUserAttributeConfigs::route('/'),
220✔
122
            'edit' => EditUserAttributeConfig::route('/{record}/edit'),
220✔
123
        ];
220✔
124
    }
125
}
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