Test Failed
Push — master ( e3c39f...fe570d )
by Mihail
07:20
created

Apps/Controller/Admin/Content/Boot.php (1 issue)

1
<?php
2
3
namespace Apps\Controller\Admin\Content;
4
5
6
use Apps\ActiveRecord\Content;
7
use Apps\ActiveRecord\ContentCategory;
8
use Apps\Controller\Admin\Main;
9
use Apps\Model\Admin\Main\AbstractSearchItem;
10
use Apps\Model\Admin\Main\CollectionSearchResults;
11
use Ffcms\Core\App;
12
use Ffcms\Core\Helper\Text;
13
use Ffcms\Core\Helper\Type\Str;
14
use Illuminate\Support\Collection;
15
16
/**
17
 * Trait Boot
18
 * @package Apps\Controller\Admin\Content
19
 */
20
trait Boot
21
{
22
    /**
23
     * Implement search boot features
24
     * @return void
25
     */
26
    public static function boot(): void
27
    {
28
        App::$Event->on(Main::SEARCH_EVENT_NAME, function ($model) {
29
            /** @var CollectionSearchResults $model */
30
            $limit = $model->getLimit();
31
            $query = $model->getQuery();
32
33
            // relevant search by string query
34
            $records = Content::search($query)
35
                ->take($limit)
36
                ->get();
37
38
            /** @var Content[]|Collection $records */
39
            $records->each(function($item) use ($model) {
40
                /** @var Content $item */
41
                $title = $item->getLocaled('title');
42
                $text = App::$Security->strip_tags($item->getLocaled('text'));
43
                $snippet = Text::snippet($text);
44
                // prevent empty items
45
                if (Str::likeEmpty($title)) {
46
                    return;
47
                }
48
49
                // initialize abstract response pattern
50
                $res = new AbstractSearchItem();
51
                $res->setTitle($title);
52
                $res->setSnippet($snippet);
53
                $res->setDate($item->created_at);
54
                $res->setRelevance((int)$item->relevance);
55
                $res->setUrl('content/update', [$item->id]);
56
                $res->setMarker('Content');
57
58
                $model->add($res);
59
            });
60
            // search in categories
61
            $records = ContentCategory::search($query)
62
                ->take($limit)
63
                ->get();
64
65
            /** @var ContentCategory[]|Collection $records */
66
            $records->each(function($item) use ($model) {
67
                /** @var ContentCategory $item */
68
                $title = $item->getLocaled('title');
69
                $text = App::$Security->strip_tags($item->getLocaled('description'));
70
                $snippet = Text::snippet($text);
71
                // prevent empty items
72
                if (Str::likeEmpty($title)) {
73
                    return;
74
                }
75
76
                // initialize abstract response pattern
77
                $res = new AbstractSearchItem();
78
                $res->setTitle($title);
79
                $res->setSnippet($snippet);
80
                $res->setDate($item->created_at);
81
                $res->setRelevance((int)$item->relevance);
0 ignored issues
show
Bug Best Practice introduced by zenn
The property relevance does not exist on Apps\ActiveRecord\ContentCategory. Since you implemented __get, consider adding a @property annotation.
Loading history...
82
                $res->setUrl('content/categoryupdate', [$item->id]);
83
                $res->setMarker('Content');
84
85
                $model->add($res);
86
            });
87
        });
88
    }
89
}