Completed
Push — master ( 2c76d9...a3aacd )
by Nate
01:20
created

Domain::find()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://flipboxfactory.com/software/domains/license
6
 * @link       https://www.flipboxfactory.com/software/domains/
7
 */
8
9
namespace flipbox\craft\domains\records;
10
11
use Craft;
12
use flipbox\craft\ember\helpers\ModelHelper;
13
use flipbox\craft\ember\records\ActiveRecord;
14
use flipbox\craft\ember\records\ElementAttributeTrait;
15
use flipbox\craft\ember\records\FieldAttributeTrait;
16
use flipbox\craft\ember\records\SiteAttributeTrait;
17
use flipbox\craft\ember\records\SortableTrait;
18
use flipbox\craft\domains\queries\DomainsQuery;
19
use flipbox\craft\domains\fields\Domains;
20
use flipbox\craft\domains\validators\DomainValidator;
21
22
/**
23
 * @author Flipbox Factory <[email protected]>
24
 * @since  1.0.0
25
 *
26
 * @property string $domain
27
 * @property string $status
28
 * @property int $sortOrder
29
 */
30
class Domain extends ActiveRecord
31
{
32
    use SiteAttributeTrait,
33
        ElementAttributeTrait,
34
        FieldAttributeTrait,
35
        SortableTrait;
36
37
    /**
38
     * @inheritdoc
39
     */
40
    const TABLE_ALIAS = 'domains';
41
42
    /**
43
     * @inheritdoc
44
     */
45
    protected $getterPriorityAttributes = ['fieldId', 'elementId', 'siteId'];
46
47
    /**
48
     * @noinspection PhpDocMissingThrowsInspection
49
     * @return DomainsQuery
50
     */
51
    public static function find(): DomainsQuery
52
    {
53
        /** @noinspection PhpIncompatibleReturnTypeInspection */
54
        /** @noinspection PhpUnhandledExceptionInspection */
55
        return Craft::createObject(DomainsQuery::class, [get_called_class()]);
56
    }
57
58
    /**
59
     * @return array
60
     */
61
    public function rules(): array
62
    {
63
        return array_merge(
64
            parent::rules(),
65
            $this->siteRules(),
66
            $this->elementRules(),
67
            $this->fieldRules(),
68
            [
69
                [
70
                    [
71
                        'domain',
72
                        'status',
73
                    ],
74
                    'required'
75
                ],
76
                [
77
                    'domain',
78
                    DomainValidator::class
79
                ],
80
                [
81
                    'status',
82
                    'in',
83
                    'range' => array_keys(Domains::getStatuses())
84
                ],
85
                [
86
                    [
87
                        'domain',
88
                        'status',
89
                    ],
90
                    'safe',
91
                    'on' => [
92
                        ModelHelper::SCENARIO_DEFAULT
93
                    ]
94
                ]
95
            ]
96
        );
97
    }
98
99
    /**
100
     * @inheritdoc
101
     */
102
    public function beforeSave($insert)
103
    {
104
        $this->ensureSortOrder(
105
            [
106
                'elementId' => $this->elementId,
107
                'fieldId' => $this->fieldId,
108
                'siteId' => $this->siteId
109
            ]
110
        );
111
112
        return parent::beforeSave($insert);
113
    }
114
115
    /**
116
     * @inheritdoc
117
     * @throws \yii\db\Exception
118
     */
119
    public function afterSave($insert, $changedAttributes)
120
    {
121
        $this->autoReOrder(
122
            'domain',
123
            [
124
                'elementId' => $this->elementId,
125
                'fieldId' => $this->fieldId,
126
                'siteId' => $this->siteId
127
            ]
128
        );
129
130
        parent::afterSave($insert, $changedAttributes);
131
    }
132
133
    /**
134
     * @inheritdoc
135
     * @throws \yii\db\Exception
136
     */
137
    public function afterDelete()
138
    {
139
        $sortOrderAttribute = 'sortOrder';
140
        $targetAttribute = 'domain';
141
        $sortOrderCondition = [
142
            'elementId' => $this->elementId,
143
            'fieldId' => $this->fieldId,
144
            'siteId' => $this->siteId
145
        ];
146
147
        // All records (sorted)
148
        $sortOrder = $this->sortOrderQuery($sortOrderCondition, $sortOrderAttribute)
149
            ->indexBy($targetAttribute)
150
            ->select([$sortOrderAttribute])
151
            ->column();
152
153
        if (count($sortOrder) > 0) {
154
            $this->saveNewOrder(
155
                array_flip(array_combine(
156
                    range($sortOrder, count($sortOrder)),
157
                    array_keys($sortOrder)
158
                )),
159
                $targetAttribute,
160
                $sortOrderCondition,
161
                $sortOrderAttribute
162
            );
163
        }
164
165
        parent::afterDelete();
166
    }
167
}
168