Passed
Push — master ( 57971d...267513 )
by Ben
14:57 queued 10s
created

UrlHelper   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 4
eloc 14
c 2
b 1
f 0
dl 0
loc 36
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A allOnlineSingles() 0 3 1
A allOnlineModels() 0 22 3
1
<?php
2
3
namespace Thinktomorrow\Chief\Urls;
4
5
use Thinktomorrow\Chief\Concerns\Morphable\Morphables;
6
use Thinktomorrow\Chief\FlatReferences\FlatReferencePresenter;
7
8
class UrlHelper
9
{
10
    /**
11
     * Internal api for fetching all models that have an active url
12
     *
13
     * @param bool $onlySingles
14
     * @return array
15
     */
16
    public static function allOnlineModels(bool $onlySingles = false): array
17
    {
18
        return chiefMemoize('all-online-models', function () use ($onlySingles) {
19
            $builder = UrlRecord::whereNull('redirect_id')->select('model_type', 'model_id')->groupBy('model_type', 'model_id');
20
21
            if ($onlySingles) {
22
                $builder->where('model_type', 'singles');
23
            }
24
25
            $liveUrlRecords = $builder->get()->mapToGroups(function ($record) {
26
                return [$record->model_type => $record->model_id];
27
            });
28
29
            // Get model for each of these records...
30
            $models = $liveUrlRecords->map(function ($record, $key) {
31
                return Morphables::instance($key)->find($record->toArray());
32
            })->map->reject(function ($model) {
33
                // Invalid references to archived or removed models where url record still exists.
34
                return is_null($model) || !$model->isPublished();
35
            })->flatten();
36
37
            return FlatReferencePresenter::toGroupedSelectValues($models)->toArray();
38
        });
39
    }
40
41
    public static function allOnlineSingles()
42
    {
43
        return static::allOnlineModels(true);
44
    }
45
}
46