Completed
Push — master ( 3f8b6c...ed0e69 )
by
unknown
06:31
created

LocaleFilters   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 1
dl 0
loc 39
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A localeFilters() 0 29 5
1
<?php
2
3
namespace BBSLab\NovaTranslation\GraphQL\Directives\Traits;
4
5
trait LocaleFilters
6
{
7
    /**
8
     * Filter model by locale filters.
9
     *
10
     * @param  string  $modelClass
11
     * @param  array  $args
12
     * @return \Illuminate\Database\Eloquent\Builder
13
     */
14
    protected function localeFilters(string $modelClass, array $args)
15
    {
16
        $isos = [];
17
        if (isset($args['localeFilters'])) {
18
            if (isset($args['localeFilters']['locale'])) {
19
                $isos[] = $args['localeFilters']['locale'];
20
            }
21
            if (isset($args['localeFilters']['locales'])) {
22
                $isos = array_merge($isos, $args['localeFilters']['locales']);
23
            }
24
        }
25
26
        /** @var \Illuminate\Database\Eloquent\Model $model */
27
        $model = new $modelClass;
28
        $table = $model->getTable();
29
30
        $query = $modelClass::query()
31
            ->select($table.'.*', 'locales.iso AS locale', 'translations.translation_id')
32
            ->join('translations', $table.'.'.$model->getKeyName(), '=', 'translations.translatable_id')
33
            ->join('locales', 'translations.locale_id', '=', 'locales.id')
34
            ->where('translations.translatable_type', '=', $modelClass)
35
            ->where('locales.available_in_api', '=', true);
36
37
        if (! empty($isos)) {
38
            $query = $query->whereIn('locales.iso', $isos);
39
        }
40
41
        return $query;
42
    }
43
}
44