Test Setup Failed
Push — master ( 5d4742...dadafa )
by Avtandil
11:52 queued 14s
created

LocalizableScope::queryHasLocalizableColumn()   A

Complexity

Conditions 5
Paths 3

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
cc 5
nc 3
nop 1
dl 0
loc 14
ccs 0
cts 8
cp 0
crap 30
rs 9.4888
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Longman\LaravelMultiLang\Models;
6
7
use Illuminate\Database\Eloquent\Builder;
8
use Illuminate\Database\Eloquent\Model;
9
use Illuminate\Database\Eloquent\Scope;
10
11
class LocalizableScope implements Scope
12
{
13
    /**
14
     * Apply the scope to a given Eloquent query builder.
15
     *
16
     * @param  \Illuminate\Database\Eloquent\Builder $builder
17
     * @param  \Illuminate\Database\Eloquent\Model $model
18
     * @return void
19
     */
20
    public function apply(Builder $builder, Model $model)
21
    {
22
23
        if (! $this->queryHasLocalizableColumn($builder)) {
24
            $builder->where($model->getQualifiedLocalizableColumn(), '=', app()->getLocale());
25
        }
26
    }
27
28
    /**
29
     * Check if query has "localizable" column
30
     *
31
     * @param \Illuminate\Database\Eloquent\Builder $builder
32
     * @return bool
33
     */
34
    protected function queryHasLocalizableColumn(Builder $builder)
35
    {
36
        $wheres = $builder->getQuery()->wheres;
37
        $column = $this->getLocalizableColumn($builder);
38
        if (! empty($wheres)) {
39
            foreach ($wheres as $where) {
40
                if (isset($where['column']) && $where['column'] === $column) {
41
                    return true;
42
                }
43
            }
44
        }
45
46
        return false;
47
    }
48
49
    /**
50
     * Get the "localizable" column for the builder.
51
     *
52
     * @param  \Illuminate\Database\Eloquent\Builder $builder
53
     * @return string
54
     */
55
    protected function getLocalizableColumn(Builder $builder)
56
    {
57
        if (count($builder->getQuery()->joins) > 0) {
58
            return $builder->getModel()->getQualifiedLocalizableColumn();
59
        } else {
60
            return $builder->getModel()->getLocalizableColumn();
61
        }
62
    }
63
}
64