Passed
Push — master ( 228108...ad6a40 )
by Alexandr
02:35
created

ComponentSearchTrait::isSearchable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Larrock\Core\ComponentTraits;
4
5
trait ComponentSearchTrait
6
{
7
    /** @var null|bool Осуществляется ли поиск по компоненту */
8
    public $searchable;
9
10
    /** @var string Какое поле модели показывать для поиска */
11
    public $search_title;
12
13
    /**
14
     * Разрешить поиск по материалам компонента.
15
     *
16
     * @param string $search_title Какое поле модели показывать для поиска
17
     * @return $this
18
     */
19
    public function isSearchable($title = 'title')
20
    {
21
        $this->searchable = true;
22
        $this->search_title = $title;
23
24
        return $this;
25
    }
26
27
    /**
28
     * Данные для поиска по материалам компонента.
29
     * @param null|bool $admin Если TRUE - для поиска будут доступны вообще все элементы (не только опубликованные)
30
     * @return null
31
     */
32
    public function search($admin = null)
33
    {
34
        return \Cache::rememberForever('search'.$this->name.$admin, function () use ($admin) {
35
            $data = [];
36
37
            $search_rows = ['id', $this->search_title];
38
39
            if ($admin) {
40
                if (\in_array('category', array_keys($this->rows))) {
41
                    $search_rows[] = 'category';
42
                    $items = $this->model::with(['getCategory'])->get($search_rows);
43
                } else {
44
                    $items = $this->model::get($search_rows);
45
                }
46
            } else {
47
                if (\in_array('category', array_keys($this->rows))) {
48
                    $search_rows[] = 'category';
49
                    $items = $this->model::whereActive(1)->with(['getCategoryActive'])->get($search_rows);
50
                } else {
51
                    $items = $this->model::whereActive(1)->get($search_rows);
52
                }
53
            }
54
            foreach ($items as $item) {
55
                $data[$item->id]['id'] = $item->id;
56
                $data[$item->id]['title'] = $item->{$this->search_title};
57
                $data[$item->id]['full_url'] = $item->full_url;
58
                $data[$item->id]['component'] = $this->name;
59
                $data[$item->id]['category'] = null;
60
                $data[$item->id]['admin_url'] = $item->admin_url;
61
                if ($admin) {
62
                    if ($item->getCategory) {
63
                        $data[$item->id]['category'] = $item->getCategory->title;
64
                    }
65
                } else {
66
                    if ($item->getCategoryActive) {
67
                        $data[$item->id]['category'] = $item->getCategoryActive->title;
68
                    }
69
                }
70
            }
71
            if (\count($data) === 0) {
72
                return null;
73
            }
74
75
            return $data;
76
        });
77
    }
78
}