Completed
Pull Request — master (#14)
by Gorka
12:44 queued 10:15
created

CustomPostTypeOptions   F

Complexity

Total Complexity 68

Size/Duplication

Total Lines 704
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 68
lcom 0
cbo 0
dl 0
loc 704
rs 2.856
c 0
b 0
f 0

68 Methods

Rating   Name   Duplication   Size   Complexity  
A getLabel() 0 4 1
A setLabel() 0 6 1
A getLabels() 0 4 1
A setLabels() 0 6 1
A getDescription() 0 4 1
A setDescription() 0 6 1
A getPublic() 0 4 1
A setPublic() 0 6 1
A getHierarchical() 0 4 1
A setHierarchical() 0 6 1
A getExcludeFromSearch() 0 4 1
A setExcludeFromSearch() 0 6 1
A getPubliclyQueryable() 0 4 1
A setPubliclyQueryable() 0 6 1
A getShowUi() 0 4 1
A setShowUi() 0 6 1
A getShowInMenu() 0 4 1
A setShowInMenu() 0 6 1
A getShowInNavMenus() 0 4 1
A setShowInNavMenus() 0 6 1
A getShowInAdminBar() 0 4 1
A setShowInAdminBar() 0 6 1
A getShowInRest() 0 4 1
A setShowInRest() 0 6 1
A getRestBase() 0 4 1
A setRestBase() 0 6 1
A getRestControllerClass() 0 4 1
A setRestControllerClass() 0 6 1
A getMenuPosition() 0 4 1
A setMenuPosition() 0 6 1
A getMenuIcon() 0 4 1
A setMenuIcon() 0 6 1
A getCapabilityType() 0 4 1
A setCapabilityType() 0 6 1
A getCapabilities() 0 4 1
A setCapabilities() 0 6 1
A getMapMetaCap() 0 4 1
A setMapMetaCap() 0 6 1
A getSupports() 0 4 1
A setSupports() 0 6 1
A getRegisterMetaboxCb() 0 4 1
A setRegisterMetaboxCb() 0 6 1
A getTaxonomies() 0 4 1
A setTaxonomies() 0 6 1
A getHasArchive() 0 4 1
A setHasArchive() 0 6 1
A getRewrite() 0 4 1
A setRewrite() 0 6 1
A getSlug() 0 4 1
A setSlug() 0 6 1
A getWithFront() 0 4 1
A setWithFront() 0 6 1
A getFeeds() 0 4 1
A setFeeds() 0 6 1
A getPages() 0 4 1
A setPages() 0 6 1
A getEpMask() 0 4 1
A setEpMask() 0 6 1
A getQueryVar() 0 4 1
A setQueryVar() 0 6 1
A getCanExport() 0 4 1
A setCanExport() 0 6 1
A getDeleteWithUser() 0 4 1
A setDeleteWithUser() 0 6 1
A getBuiltIn() 0 4 1
A setBuiltIn() 0 6 1
A getEditLink() 0 4 1
A setEditLink() 0 6 1

How to fix   Complexity   

Complex Class

Complex classes like CustomPostTypeOptions often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use CustomPostTypeOptions, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/*
4
 * This file is part of the WPFoundation library.
5
 *
6
 * Copyright (c) 2015-present LIN3S <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(stricttypes=1);
13
14
namespace LIN3S\WPFoundation\PostTypes;
15
16
/**
17
 * @author Beñat Espiña <[email protected]>
18
 */
19
abstract class CustomPostTypeOptions
20
{
21
    private $label;
22
    private $labels;
23
    private $description;
24
    private $public;
25
    private $hierarchical;
26
    private $excludeFromSearch;
27
    private $publiclyQueryable;
28
    private $showUi;
29
    private $showInMenu;
30
    private $showInNavMenus;
31
    private $showInAdminBar;
32
    private $showInRest;
33
    private $restBase;
34
    private $restControllerClass;
35
    private $menuPosition;
36
    private $menuIcon;
37
    private $capabilityType;
38
    private $capabilities;
39
    private $mapMetaCap;
40
    private $supports;
41
    private $registerMetaboxCb;
42
    private $taxonomies;
43
    private $hasArchive;
44
    private $rewrite;
45
    private $slug;
46
    private $withFront;
47
    private $feeds;
48
    private $pages;
49
    private $epMask;
50
    private $queryVar;
51
    private $canExport;
52
    private $deleteWithUser;
53
    private $builtIn;
54
    private $editLink;
55
56
    public function getLabel() : string
57
    {
58
        return $this->label;
59
    }
60
61
    public function setLabel(string $label) : self
62
    {
63
        $this->label = $label;
64
65
        return $this;
66
    }
67
68
    public function getLabels() : array
69
    {
70
        return $this->labels;
71
    }
72
73
    public function setLabels($labels) : self
74
    {
75
        $this->labels = $labels;
76
77
        return $this;
78
    }
79
80
    public function getDescription() : string
81
    {
82
        return $this->description;
83
    }
84
85
    public function setDescription($description)
86
    {
87
        $this->description = $description;
88
89
        return $this;
90
    }
91
92
    public function getPublic()
93
    {
94
        return $this->public;
95
    }
96
97
    public function setPublic($public) : self
98
    {
99
        $this->public = $public;
100
101
        return $this;
102
    }
103
104
    public function getHierarchical()
105
    {
106
        return $this->hierarchical;
107
    }
108
109
    /**
110
     * @param mixed $hierarchical
111
     *
112
     * @return PostTypeOptions
113
     */
114
    public function setHierarchical($hierarchical)
115
    {
116
        $this->hierarchical = $hierarchical;
117
118
        return $this;
119
    }
120
121
    public function getExcludeFromSearch()
122
    {
123
        return $this->excludeFromSearch;
124
    }
125
126
    /**
127
     * @param mixed $excludeFromSearch
128
     *
129
     * @return PostTypeOptions
130
     */
131
    public function setExcludeFromSearch($excludeFromSearch)
132
    {
133
        $this->excludeFromSearch = $excludeFromSearch;
134
135
        return $this;
136
    }
137
138
    public function getPubliclyQueryable()
139
    {
140
        return $this->publiclyQueryable;
141
    }
142
143
    /**
144
     * @param mixed $publiclyQueryable
145
     *
146
     * @return PostTypeOptions
147
     */
148
    public function setPubliclyQueryable($publiclyQueryable)
149
    {
150
        $this->publiclyQueryable = $publiclyQueryable;
151
152
        return $this;
153
    }
154
155
    public function getShowUi()
156
    {
157
        return $this->showUi;
158
    }
159
160
    /**
161
     * @param mixed $showUi
162
     *
163
     * @return PostTypeOptions
164
     */
165
    public function setShowUi($showUi)
166
    {
167
        $this->showUi = $showUi;
168
169
        return $this;
170
    }
171
172
    public function getShowInMenu()
173
    {
174
        return $this->showInMenu;
175
    }
176
177
    /**
178
     * @param mixed $showInMenu
179
     *
180
     * @return PostTypeOptions
181
     */
182
    public function setShowInMenu($showInMenu)
183
    {
184
        $this->showInMenu = $showInMenu;
185
186
        return $this;
187
    }
188
189
    public function getShowInNavMenus()
190
    {
191
        return $this->showInNavMenus;
192
    }
193
194
    /**
195
     * @param mixed $showInNavMenus
196
     *
197
     * @return PostTypeOptions
198
     */
199
    public function setShowInNavMenus($showInNavMenus)
200
    {
201
        $this->showInNavMenus = $showInNavMenus;
202
203
        return $this;
204
    }
205
206
    public function getShowInAdminBar()
207
    {
208
        return $this->showInAdminBar;
209
    }
210
211
    /**
212
     * @param mixed $showInAdminBar
213
     *
214
     * @return PostTypeOptions
215
     */
216
    public function setShowInAdminBar($showInAdminBar)
217
    {
218
        $this->showInAdminBar = $showInAdminBar;
219
220
        return $this;
221
    }
222
223
    public function getShowInRest()
224
    {
225
        return $this->showInRest;
226
    }
227
228
    /**
229
     * @param mixed $showInRest
230
     *
231
     * @return PostTypeOptions
232
     */
233
    public function setShowInRest($showInRest)
234
    {
235
        $this->showInRest = $showInRest;
236
237
        return $this;
238
    }
239
240
    public function getRestBase()
241
    {
242
        return $this->restBase;
243
    }
244
245
    /**
246
     * @param mixed $restBase
247
     *
248
     * @return PostTypeOptions
249
     */
250
    public function setRestBase($restBase)
251
    {
252
        $this->restBase = $restBase;
253
254
        return $this;
255
    }
256
257
    public function getRestControllerClass()
258
    {
259
        return $this->restControllerClass;
260
    }
261
262
    /**
263
     * @param mixed $restControllerClass
264
     *
265
     * @return PostTypeOptions
266
     */
267
    public function setRestControllerClass($restControllerClass)
268
    {
269
        $this->restControllerClass = $restControllerClass;
270
271
        return $this;
272
    }
273
274
    public function getMenuPosition()
275
    {
276
        return $this->menuPosition;
277
    }
278
279
    /**
280
     * @param mixed $menuPosition
281
     *
282
     * @return PostTypeOptions
283
     */
284
    public function setMenuPosition($menuPosition)
285
    {
286
        $this->menuPosition = $menuPosition;
287
288
        return $this;
289
    }
290
291
    public function getMenuIcon()
292
    {
293
        return $this->menuIcon;
294
    }
295
296
    /**
297
     * @param mixed $menuIcon
298
     *
299
     * @return PostTypeOptions
300
     */
301
    public function setMenuIcon($menuIcon)
302
    {
303
        $this->menuIcon = $menuIcon;
304
305
        return $this;
306
    }
307
308
    public function getCapabilityType()
309
    {
310
        return $this->capabilityType;
311
    }
312
313
    /**
314
     * @param mixed $capabilityType
315
     *
316
     * @return PostTypeOptions
317
     */
318
    public function setCapabilityType($capabilityType)
319
    {
320
        $this->capabilityType = $capabilityType;
321
322
        return $this;
323
    }
324
325
    public function getCapabilities()
326
    {
327
        return $this->capabilities;
328
    }
329
330
    /**
331
     * @param mixed $capabilities
332
     *
333
     * @return PostTypeOptions
334
     */
335
    public function setCapabilities($capabilities)
336
    {
337
        $this->capabilities = $capabilities;
338
339
        return $this;
340
    }
341
342
    public function getMapMetaCap()
343
    {
344
        return $this->mapMetaCap;
345
    }
346
347
    /**
348
     * @param mixed $mapMetaCap
349
     *
350
     * @return PostTypeOptions
351
     */
352
    public function setMapMetaCap($mapMetaCap)
353
    {
354
        $this->mapMetaCap = $mapMetaCap;
355
356
        return $this;
357
    }
358
359
    public function getSupports()
360
    {
361
        return $this->supports;
362
    }
363
364
    /**
365
     * @param mixed $supports
366
     *
367
     * @return PostTypeOptions
368
     */
369
    public function setSupports($supports)
370
    {
371
        $this->supports = $supports;
372
373
        return $this;
374
    }
375
376
    public function getRegisterMetaboxCb()
377
    {
378
        return $this->registerMetaboxCb;
379
    }
380
381
    /**
382
     * @param mixed $registerMetaboxCb
383
     *
384
     * @return PostTypeOptions
385
     */
386
    public function setRegisterMetaboxCb($registerMetaboxCb)
387
    {
388
        $this->registerMetaboxCb = $registerMetaboxCb;
389
390
        return $this;
391
    }
392
393
    public function getTaxonomies()
394
    {
395
        return $this->taxonomies;
396
    }
397
398
    /**
399
     * @param mixed $taxonomies
400
     *
401
     * @return PostTypeOptions
402
     */
403
    public function setTaxonomies($taxonomies)
404
    {
405
        $this->taxonomies = $taxonomies;
406
407
        return $this;
408
    }
409
410
    public function getHasArchive()
411
    {
412
        return $this->hasArchive;
413
    }
414
415
    /**
416
     * @param mixed $hasArchive
417
     *
418
     * @return PostTypeOptions
419
     */
420
    public function setHasArchive($hasArchive)
421
    {
422
        $this->hasArchive = $hasArchive;
423
424
        return $this;
425
    }
426
427
    public function getRewrite()
428
    {
429
        return $this->rewrite;
430
    }
431
432
    /**
433
     * @param mixed $rewrite
434
     *
435
     * @return PostTypeOptions
436
     */
437
    public function setRewrite($rewrite)
438
    {
439
        $this->rewrite = $rewrite;
440
441
        return $this;
442
    }
443
444
    public function getSlug()
445
    {
446
        return $this->slug;
447
    }
448
449
    /**
450
     * @param mixed $slug
451
     *
452
     * @return PostTypeOptions
453
     */
454
    public function setSlug($slug)
455
    {
456
        $this->slug = $slug;
457
458
        return $this;
459
    }
460
461
    public function getWithFront()
462
    {
463
        return $this->withFront;
464
    }
465
466
    /**
467
     * @param mixed $withFront
468
     *
469
     * @return PostTypeOptions
470
     */
471
    public function setWithFront($withFront)
472
    {
473
        $this->withFront = $withFront;
474
475
        return $this;
476
    }
477
478
    public function getFeeds()
479
    {
480
        return $this->feeds;
481
    }
482
483
    /**
484
     * @param mixed $feeds
485
     *
486
     * @return PostTypeOptions
487
     */
488
    public function setFeeds($feeds)
489
    {
490
        $this->feeds = $feeds;
491
492
        return $this;
493
    }
494
495
    public function getPages()
496
    {
497
        return $this->pages;
498
    }
499
500
    /**
501
     * @param mixed $pages
502
     *
503
     * @return PostTypeOptions
504
     */
505
    public function setPages($pages)
506
    {
507
        $this->pages = $pages;
508
509
        return $this;
510
    }
511
512
    public function getEpMask()
513
    {
514
        return $this->epMask;
515
    }
516
517
    /**
518
     * @param mixed $epMask
519
     *
520
     * @return PostTypeOptions
521
     */
522
    public function setEpMask($epMask)
523
    {
524
        $this->epMask = $epMask;
525
526
        return $this;
527
    }
528
529
    public function getQueryVar()
530
    {
531
        return $this->queryVar;
532
    }
533
534
    /**
535
     * @param mixed $queryVar
536
     *
537
     * @return PostTypeOptions
538
     */
539
    public function setQueryVar($queryVar)
540
    {
541
        $this->queryVar = $queryVar;
542
543
        return $this;
544
    }
545
546
    public function getCanExport()
547
    {
548
        return $this->canExport;
549
    }
550
551
    /**
552
     * @param mixed $canExport
553
     *
554
     * @return PostTypeOptions
555
     */
556
    public function setCanExport($canExport)
557
    {
558
        $this->canExport = $canExport;
559
560
        return $this;
561
    }
562
563
    public function getDeleteWithUser()
564
    {
565
        return $this->deleteWithUser;
566
    }
567
568
    /**
569
     * @param mixed $deleteWithUser
570
     *
571
     * @return PostTypeOptions
572
     */
573
    public function setDeleteWithUser($deleteWithUser)
574
    {
575
        $this->deleteWithUser = $deleteWithUser;
576
577
        return $this;
578
    }
579
580
    public function getBuiltIn()
581
    {
582
        return $this->builtIn;
583
    }
584
585
    /**
586
     * @param mixed $builtIn
587
     *
588
     * @return PostTypeOptions
589
     */
590
    public function setBuiltIn($builtIn)
591
    {
592
        $this->builtIn = $builtIn;
593
594
        return $this;
595
    }
596
597
    public function getEditLink()
598
    {
599
        return $this->editLink;
600
    }
601
602
    /**
603
     * @param mixed $editLink
604
     *
605
     * @return PostTypeOptions
606
     */
607
    public function setEditLink($editLink)
608
    {
609
        $this->editLink = $editLink;
610
611
        return $this;
612
    }
613
614
615
    /*
616
* Array or string of arguments for registering a post type.
617
*
618
*     @type string      $label                 Name of the post type shown in the menu. Usually plural.
619
*                                              Default is value of $labels['name'].
620
*     @type array       $labels                An array of labels for this post type. If not set, post
621
*                                              labels are inherited for non-hierarchical types and page
622
*                                              labels for hierarchical ones. See getposttypelabels() for a full
623
*                                              list of supported labels.
624
*     @type string      $description           A short descriptive summary of what the post type is.
625
*                                              Default empty.
626
*     @type bool        $public                Whether a post type is intended for use publicly either via
627
 *                                              the admin interface or by front-end users. While the default
628
 *                                              settings of $excludefromsearch, $publiclyqueryable, $showui,
629
 *                                              and $showinnavmenus are inherited from public, each does not
630
 *                                              rely on this relationship and controls a very specific intention.
631
 *                                              Default false.
632
 *     @type bool        $hierarchical          Whether the post type is hierarchical (e.g. page). Default false.
633
 *     @type bool        $excludefromsearch   Whether to exclude posts with this post type from front end search
634
 *                                              results. Default is the opposite value of $public.
635
 *     @type bool        $publiclyqueryable    Whether queries can be performed on the front end for the post type
636
 *                                              as part of parserequest(). Endpoints would include:
637
 *                                              * ?posttype={posttypekey}
638
*                                              * ?{posttypekey}={singlepostslug}
639
*                                              * ?{posttypequeryvar}={singlepostslug}
640
*                                              If not set, the default is inherited from $public.
641
 *     @type bool        $showui               Whether to generate and allow a UI for managing this post type in the
642
*                                              admin. Default is value of $public.
643
 *     @type bool        $showinmenu          Where to show the post type in the admin menu. To work, $showui
644
*                                              must be true. If true, the post type is shown in its own top level
645
*                                              menu. If false, no menu is shown. If a string of an existing top
646
*                                              level menu (eg. 'tools.php' or 'edit.php?posttype=page'), the post
647
*                                              type will be placed as a sub-menu of that.
648
 *                                              Default is value of $showui.
649
 *     @type bool        $showinnavmenus     Makes this post type available for selection in navigation menus.
650
 *                                              Default is value $public.
651
 *     @type bool        $showinadminbar     Makes this post type available via the admin bar. Default is value
652
*                                              of $showinmenu.
653
 *     @type bool        $showinrest          Whether to add the post type route in the REST API 'wp/v2' namespace.
654
*     @type string      $restbase             To change the base url of REST API route. Default is $posttype.
655
 *     @type string      $restcontrollerclass REST API Controller class name. Default is 'WPRESTPostsController'.
656
 *     @type int         $menuposition         The position in the menu order the post type should appear. To work,
657
 *                                              $showinmenu must be true. Default null (at the bottom).
658
 *     @type string      $menuicon             The url to the icon to be used for this menu. Pass a base64-encoded
659
*                                              SVG using a data URI, which will be colored to match the color scheme
660
*                                              -- this should begin with 'data:image/svg+xml;base64,'. Pass the name
661
*                                              of a Dashicons helper class to use a font icon, e.g.
662
 *                                              'dashicons-chart-pie'. Pass 'none' to leave div.wp-menu-image empty
663
 *                                              so an icon can be added via CSS. Defaults to use the posts icon.
664
 *     @type string      $capabilitytype       The string to use to build the read, edit, and delete capabilities.
665
 *                                              May be passed as an array to allow for alternative plurals when using
666
*                                              this argument as a base to construct the capabilities, e.g.
667
 *                                              array('story', 'stories'). Default 'post'.
668
 *     @type array       $capabilities          Array of capabilities for this post type. $capabilitytype is used
669
*                                              as a base to construct capabilities by default.
670
 *                                              See getposttypecapabilities().
671
 *     @type bool        $mapmetacap          Whether to use the internal default meta capability handling.
672
 *                                              Default false.
673
 *     @type array       $supports              Core feature(s) the post type supports. Serves as an alias for calling
674
                                                                                                               *                                              addposttypesupport() directly. Core features include 'title',
675
 *                                              'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt',
676
 *                                              'page-attributes', 'thumbnail', 'custom-fields', and 'post-formats'.
677
 *                                              Additionally, the 'revisions' feature dictates whether the post type
678
*                                              will store revisions, and the 'comments' feature dictates whether the
679
*                                              comments count will show on the edit screen. Defaults is an array
680
 *                                              containing 'title' and 'editor'.
681
 *     @type callable    $registermetaboxcb  Provide a callback function that sets up the meta boxes for the
682
                                                                                                            *                                              edit form. Do removemetabox() and addmetabox() calls in the
683
*                                              callback. Default null.
684
 *     @type array       $taxonomies            An array of taxonomy identifiers that will be registered for the
685
                                                                                                             *                                              post type. Taxonomies can be registered later with registertaxonomy()
686
*                                              or registertaxonomyforobjecttype().
687
 *                                              Default empty array.
688
 *     @type bool|string $hasarchive           Whether there should be post type archives, or if a string, the
689
*                                              archive slug to use. Will generate the proper rewrite rules if
690
 *                                              $rewrite is enabled. Default false.
691
 *     @type bool|array  $rewrite              {
692
 *         Triggers the handling of rewrites for this post type. To prevent rewrite, set to false.
693
 *         Defaults to true, using $posttype as slug. To specify rewrite rules, an array can be
694
*         passed with any of these keys:
695
 *
696
 *         @type string $slug       Customize the permastruct slug. Defaults to $posttype key.
697
 *         @type bool   $withfront Whether the permastruct should be prepended with WPRewrite::$front.
698
 *                                  Default true.
699
 *         @type bool   $feeds      Whether the feed permastruct should be built for this post type.
700
 *                                  Default is value of $hasarchive.
701
 *         @type bool   $pages      Whether the permastruct should provide for pagination. Default true.
702
 *         @type const  $epmask    Endpoint mask to assign. If not specified and permalinkepmask is set,
703
 *                                  inherits from $permalinkepmask. If not specified and permalinkepmask
704
*                                  is not set, defaults to EPPERMALINK.
705
 *     }
706
 *     @type string|bool $queryvar             Sets the queryvar key for this post type. Defaults to $posttype
707
*                                              key. If false, a post type cannot be loaded at
708
*                                              ?{queryvar}={postslug}. If specified as a string, the query
709
*                                              ?{queryvarstring}={postslug} will be valid.
710
 *     @type bool        $canexport            Whether to allow this post type to be exported. Default true.
711
 *     @type bool        $deletewithuser      Whether to delete posts of this type when deleting a user. If true,
712
 *                                              posts of this type belonging to the user will be moved to trash
713
*                                              when then user is deleted. If false, posts of this type belonging
714
*                                              to the user will *not* be trashed or deleted. If not set (the default),
715
 *                                              posts are trashed if posttypesupports('author'). Otherwise posts
716
*                                              are not trashed or deleted. Default null.
717
 *     @type bool        $builtin              FOR INTERNAL USE ONLY! True if this post type is a native or
718
 *                                              "built-in" posttype. Default false.
719
 *     @type string      $editlink            FOR INTERNAL USE ONLY! URL segment to use for edit link of
720
*                                            this post type. Default 'post.php?post=%d'.
721
     */
722
}
723