Conditions | 1 |
Paths | 1 |
Total Lines | 4 |
Code Lines | 2 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 1 |
Metric | Value |
---|---|
cc | 1 |
eloc | 2 |
c | 1 |
b | 0 |
f | 1 |
nc | 1 |
nop | 0 |
dl | 0 |
loc | 4 |
rs | 10 |
1 | <?php |
||
2 | |||
3 | namespace Silk\Term; |
||
4 | |||
5 | use stdClass; |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
6 | use WP_Term; |
||
7 | use Silk\Taxonomy\Taxonomy; |
||
8 | use Silk\Type\Model as BaseModel; |
||
9 | use Illuminate\Support\Collection; |
||
10 | use Silk\Term\Exception\TermNotFoundException; |
||
11 | use Silk\Term\Exception\TaxonomyMismatchException; |
||
12 | |||
13 | /** |
||
14 | * @property-read WP_Term $term |
||
15 | * @property int $term_id |
||
16 | * @property string $name |
||
17 | * @property string $slug |
||
18 | * @property string $term_group |
||
19 | * @property int $term_taxonomy_id |
||
20 | * @property string $taxonomy |
||
21 | * @property string $description |
||
22 | * @property int $parent |
||
23 | * @property int $count |
||
24 | */ |
||
25 | abstract class Model extends BaseModel |
||
26 | { |
||
0 ignored issues
–
show
|
|||
27 | /** |
||
0 ignored issues
–
show
|
|||
28 | * The term's taxonomy |
||
0 ignored issues
–
show
|
|||
29 | * @var string |
||
0 ignored issues
–
show
|
|||
30 | */ |
||
0 ignored issues
–
show
|
|||
31 | const TAXONOMY = ''; |
||
0 ignored issues
–
show
|
|||
32 | |||
33 | /** |
||
0 ignored issues
–
show
|
|||
34 | * The object type in WordPress |
||
0 ignored issues
–
show
|
|||
35 | * @var string |
||
0 ignored issues
–
show
|
|||
36 | */ |
||
0 ignored issues
–
show
|
|||
37 | const OBJECT_TYPE = 'term'; |
||
0 ignored issues
–
show
|
|||
38 | |||
39 | /** |
||
0 ignored issues
–
show
|
|||
40 | * The primary ID property on the object |
||
0 ignored issues
–
show
|
|||
41 | */ |
||
0 ignored issues
–
show
|
|||
42 | const ID_PROPERTY = 'term_id'; |
||
0 ignored issues
–
show
|
|||
43 | |||
44 | /** |
||
0 ignored issues
–
show
|
|||
45 | * Model Constructor. |
||
0 ignored issues
–
show
|
|||
46 | * |
||
0 ignored issues
–
show
|
|||
47 | * @param mixed $term WP_Term to fill data from |
||
0 ignored issues
–
show
|
|||
48 | * |
||
0 ignored issues
–
show
|
|||
49 | * @throws TaxonomyMismatchException |
||
0 ignored issues
–
show
|
|||
50 | */ |
||
0 ignored issues
–
show
|
|||
51 | public function __construct(WP_Term $term = null) |
||
0 ignored issues
–
show
|
|||
52 | { |
||
0 ignored issues
–
show
|
|||
53 | if (! $term) { |
||
0 ignored issues
–
show
|
|||
54 | $term = new WP_Term(new stdClass); |
||
0 ignored issues
–
show
|
|||
55 | $term->taxonomy = static::TAXONOMY; |
||
0 ignored issues
–
show
|
|||
56 | } elseif ($term->taxonomy != static::TAXONOMY) { |
||
0 ignored issues
–
show
|
|||
57 | throw new TaxonomyMismatchException(); |
||
0 ignored issues
–
show
|
|||
58 | } |
||
0 ignored issues
–
show
|
|||
59 | |||
60 | $this->object = $term; |
||
0 ignored issues
–
show
|
|||
61 | } |
||
0 ignored issues
–
show
|
|||
62 | |||
63 | /** |
||
0 ignored issues
–
show
|
|||
64 | * Create a new instance from a WP_Term object. |
||
0 ignored issues
–
show
|
|||
65 | * |
||
0 ignored issues
–
show
|
|||
66 | * @param WP_Term $term [description] |
||
0 ignored issues
–
show
|
|||
67 | * |
||
0 ignored issues
–
show
|
|||
68 | * @return static |
||
0 ignored issues
–
show
|
|||
69 | */ |
||
0 ignored issues
–
show
|
|||
70 | public static function fromWpTerm(WP_Term $term) |
||
0 ignored issues
–
show
|
|||
71 | { |
||
0 ignored issues
–
show
|
|||
72 | return new static($term); |
||
0 ignored issues
–
show
|
|||
73 | } |
||
0 ignored issues
–
show
|
|||
74 | |||
75 | /** |
||
0 ignored issues
–
show
|
|||
76 | * Create a new instance from a term ID. |
||
0 ignored issues
–
show
|
|||
77 | * |
||
0 ignored issues
–
show
|
|||
78 | * @param int|string $id Term ID |
||
0 ignored issues
–
show
|
|||
79 | * |
||
0 ignored issues
–
show
|
|||
80 | * @throws TermNotFoundException |
||
0 ignored issues
–
show
|
|||
81 | * |
||
0 ignored issues
–
show
|
|||
82 | * @return static |
||
0 ignored issues
–
show
|
|||
83 | */ |
||
0 ignored issues
–
show
|
|||
84 | public static function fromID($id) |
||
1 ignored issue
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
85 | { |
||
0 ignored issues
–
show
|
|||
86 | if (! $term = get_term_by('id', (int) $id, static::TAXONOMY)) { |
||
0 ignored issues
–
show
|
|||
87 | throw new TermNotFoundException("No term found with ID $id."); |
||
0 ignored issues
–
show
|
|||
88 | } |
||
0 ignored issues
–
show
|
|||
89 | |||
90 | return static::fromWpTerm($term); |
||
0 ignored issues
–
show
|
|||
91 | } |
||
0 ignored issues
–
show
|
|||
92 | |||
93 | /** |
||
0 ignored issues
–
show
|
|||
94 | * Create a new instance from a slug. |
||
0 ignored issues
–
show
|
|||
95 | * |
||
0 ignored issues
–
show
|
|||
96 | * @param string $slug Term slug |
||
0 ignored issues
–
show
|
|||
97 | * |
||
0 ignored issues
–
show
|
|||
98 | * @throws TermNotFoundException |
||
0 ignored issues
–
show
|
|||
99 | * |
||
0 ignored issues
–
show
|
|||
100 | * @return static |
||
0 ignored issues
–
show
|
|||
101 | */ |
||
0 ignored issues
–
show
|
|||
102 | public static function fromSlug($slug) |
||
1 ignored issue
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
103 | { |
||
0 ignored issues
–
show
|
|||
104 | if (! $term = get_term_by('slug', $slug, static::TAXONOMY)) { |
||
0 ignored issues
–
show
|
|||
105 | throw new TermNotFoundException("No term found with slug '$slug'."); |
||
0 ignored issues
–
show
|
|||
106 | } |
||
0 ignored issues
–
show
|
|||
107 | |||
108 | return static::fromWpTerm($term); |
||
0 ignored issues
–
show
|
|||
109 | } |
||
0 ignored issues
–
show
|
|||
110 | |||
111 | /** |
||
0 ignored issues
–
show
|
|||
112 | * Create a new instance from an array of attributes. |
||
0 ignored issues
–
show
|
|||
113 | * |
||
0 ignored issues
–
show
|
|||
114 | * @param array $attributes [description] |
||
0 ignored issues
–
show
|
|||
115 | * |
||
0 ignored issues
–
show
|
|||
116 | * @return static |
||
0 ignored issues
–
show
|
|||
117 | */ |
||
0 ignored issues
–
show
|
|||
118 | public static function fromArray(array $attributes) |
||
0 ignored issues
–
show
|
|||
119 | { |
||
0 ignored issues
–
show
|
|||
120 | return new static( |
||
0 ignored issues
–
show
|
|||
121 | new WP_Term((object) $attributes) |
||
0 ignored issues
–
show
|
|||
122 | ); |
||
0 ignored issues
–
show
|
|||
123 | } |
||
0 ignored issues
–
show
|
|||
124 | |||
125 | /** |
||
0 ignored issues
–
show
|
|||
126 | * Create a new term, and get the instance for it. |
||
0 ignored issues
–
show
|
|||
127 | * |
||
0 ignored issues
–
show
|
|||
128 | * @param array $attributes Term attributes |
||
0 ignored issues
–
show
|
|||
129 | * |
||
0 ignored issues
–
show
|
|||
130 | * @return static |
||
0 ignored issues
–
show
|
|||
131 | */ |
||
0 ignored issues
–
show
|
|||
132 | public static function create(array $attributes = []) |
||
0 ignored issues
–
show
|
|||
133 | { |
||
0 ignored issues
–
show
|
|||
134 | return static::fromArray( |
||
0 ignored issues
–
show
|
|||
135 | Collection::make($attributes) |
||
0 ignored issues
–
show
|
|||
136 | ->except([static::ID_PROPERTY, 'term_taxonomy_id']) |
||
0 ignored issues
–
show
|
|||
137 | ->put('taxonomy', static::TAXONOMY) |
||
0 ignored issues
–
show
|
|||
138 | ->toArray() |
||
0 ignored issues
–
show
|
|||
139 | )->save(); |
||
0 ignored issues
–
show
|
|||
140 | } |
||
0 ignored issues
–
show
|
|||
141 | |||
142 | /** |
||
0 ignored issues
–
show
|
|||
143 | * Check if this term exists in the database. |
||
0 ignored issues
–
show
|
|||
144 | * |
||
0 ignored issues
–
show
|
|||
145 | * @return boolean |
||
0 ignored issues
–
show
|
|||
146 | */ |
||
0 ignored issues
–
show
|
|||
147 | public function exists() |
||
0 ignored issues
–
show
|
|||
148 | { |
||
0 ignored issues
–
show
|
|||
149 | return $this->id && ((bool) term_exists((int) $this->id, static::TAXONOMY)); |
||
0 ignored issues
–
show
|
|||
150 | } |
||
0 ignored issues
–
show
|
|||
151 | |||
152 | /** |
||
0 ignored issues
–
show
|
|||
153 | * Check if this term exists in the database as the child of the given parent. |
||
0 ignored issues
–
show
|
|||
154 | * |
||
0 ignored issues
–
show
|
|||
155 | * @param int|string|object $parent integer Parent term ID |
||
0 ignored issues
–
show
|
|||
156 | * string Parent term slug or name |
||
0 ignored issues
–
show
|
|||
157 | * object The parent term object/model. |
||
0 ignored issues
–
show
|
|||
158 | * |
||
0 ignored issues
–
show
|
|||
159 | * @return boolean True if the this term and the parent |
||
0 ignored issues
–
show
|
|||
160 | * exist in the database, and the instance |
||
0 ignored issues
–
show
|
|||
161 | * is a child of the given parent; |
||
0 ignored issues
–
show
|
|||
162 | * otherwise false |
||
0 ignored issues
–
show
|
|||
163 | */ |
||
0 ignored issues
–
show
|
|||
164 | public function isChildOf($parent) |
||
0 ignored issues
–
show
|
|||
165 | { |
||
0 ignored issues
–
show
|
|||
166 | if (isset($parent->term_id)) { |
||
0 ignored issues
–
show
|
|||
167 | $parent = $parent->term_id; |
||
0 ignored issues
–
show
|
|||
168 | } |
||
0 ignored issues
–
show
|
|||
169 | |||
170 | return (bool) term_exists((int) $this->id, static::TAXONOMY, $parent); |
||
0 ignored issues
–
show
|
|||
171 | } |
||
0 ignored issues
–
show
|
|||
172 | |||
173 | /** |
||
0 ignored issues
–
show
|
|||
174 | * Get the parent term instance. |
||
0 ignored issues
–
show
|
|||
175 | * |
||
0 ignored issues
–
show
|
|||
176 | * @return static |
||
0 ignored issues
–
show
|
|||
177 | */ |
||
0 ignored issues
–
show
|
|||
178 | public function parent() |
||
0 ignored issues
–
show
|
|||
179 | { |
||
0 ignored issues
–
show
|
|||
180 | return static::fromID($this->object->parent); |
||
0 ignored issues
–
show
|
|||
181 | } |
||
0 ignored issues
–
show
|
|||
182 | |||
183 | /** |
||
0 ignored issues
–
show
|
|||
184 | * Get all ancestors of this term as a collection. |
||
0 ignored issues
–
show
|
|||
185 | * |
||
0 ignored issues
–
show
|
|||
186 | * @return Collection |
||
0 ignored issues
–
show
|
|||
187 | */ |
||
0 ignored issues
–
show
|
|||
188 | public function ancestors() |
||
0 ignored issues
–
show
|
|||
189 | { |
||
0 ignored issues
–
show
|
|||
190 | return Collection::make(get_ancestors($this->id, static::TAXONOMY, 'taxonomy')) |
||
0 ignored issues
–
show
|
|||
191 | ->map(function ($term_ID) { |
||
0 ignored issues
–
show
|
|||
192 | return static::fromID($term_ID); |
||
0 ignored issues
–
show
|
|||
193 | }); |
||
0 ignored issues
–
show
|
|||
194 | } |
||
0 ignored issues
–
show
|
|||
195 | |||
196 | /** |
||
0 ignored issues
–
show
|
|||
197 | * Get the Taxonomy model. |
||
0 ignored issues
–
show
|
|||
198 | * |
||
0 ignored issues
–
show
|
|||
199 | * @return Taxonomy|\Silk\Taxonomy\Builder |
||
0 ignored issues
–
show
|
|||
200 | */ |
||
0 ignored issues
–
show
|
|||
201 | public static function taxonomy() |
||
0 ignored issues
–
show
|
|||
202 | { |
||
0 ignored issues
–
show
|
|||
203 | return Taxonomy::make(static::TAXONOMY); |
||
0 ignored issues
–
show
|
|||
204 | } |
||
0 ignored issues
–
show
|
|||
205 | |||
206 | /** |
||
0 ignored issues
–
show
|
|||
207 | * Start a new query for terms of this type. |
||
0 ignored issues
–
show
|
|||
208 | * |
||
0 ignored issues
–
show
|
|||
209 | * @return QueryBuilder |
||
0 ignored issues
–
show
|
|||
210 | */ |
||
0 ignored issues
–
show
|
|||
211 | public function newQuery() |
||
0 ignored issues
–
show
|
|||
212 | { |
||
0 ignored issues
–
show
|
|||
213 | return QueryBuilder::make()->setModel($this); |
||
0 ignored issues
–
show
|
|||
214 | } |
||
0 ignored issues
–
show
|
|||
215 | |||
216 | /** |
||
0 ignored issues
–
show
|
|||
217 | * Get the array of actions and their respective handler classes. |
||
0 ignored issues
–
show
|
|||
218 | * |
||
0 ignored issues
–
show
|
|||
219 | * @return array |
||
0 ignored issues
–
show
|
|||
220 | */ |
||
0 ignored issues
–
show
|
|||
221 | protected function actionClasses() |
||
0 ignored issues
–
show
|
|||
222 | { |
||
0 ignored issues
–
show
|
|||
223 | return [ |
||
0 ignored issues
–
show
|
|||
224 | 'save' => Action\TermSaver::class, |
||
0 ignored issues
–
show
|
|||
225 | 'load' => Action\TermLoader::class, |
||
0 ignored issues
–
show
|
|||
226 | 'delete' => Action\TermDeleter::class, |
||
0 ignored issues
–
show
|
|||
227 | ]; |
||
0 ignored issues
–
show
|
|||
228 | } |
||
0 ignored issues
–
show
|
|||
229 | } |
||
0 ignored issues
–
show
|
|||
230 |