Completed
Push — master ( b60705...1e999f )
by Philip
02:51
created

EntityDefinition   D

Complexity

Total Complexity 83

Size/Duplication

Total Lines 849
Duplicated Lines 2.83 %

Coupling/Cohesion

Components 2
Dependencies 0

Importance

Changes 0
Metric Value
wmc 83
lcom 2
cbo 0
dl 24
loc 849
rs 4.4444
c 0
b 0
f 0

55 Methods

Rating   Name   Duplication   Size   Complexity  
A isInitialSortAscending() 0 3 1
A getFilteredFieldNames() 0 10 3
A getFieldValue() 0 6 3
A setFieldValue() 0 6 2
A isConstraint() 0 7 2
A checkFieldNames() 0 12 4
A __construct() 0 18 1
A getFieldNames() 0 9 4
A setListFields() 0 4 1
A getListFields() 0 6 2
A getChildrenLabelFields() 0 3 1
A setChildrenLabelFields() 0 3 1
A isDeleteCascade() 0 3 1
A setDeleteCascade() 0 3 1
A getPageSize() 0 3 1
A setPageSize() 0 3 1
A getFilter() 0 3 1
A setFilter() 0 4 1
A getServiceProvider() 0 3 1
A setServiceProvider() 0 3 1
A getPublicFieldNames() 0 5 1
A getEditableFieldNames() 0 4 1
A getReadOnlyFields() 0 3 1
A getType() 0 12 4
A setType() 0 3 1
A isRequired() 0 3 1
A setRequired() 0 3 1
A isUnique() 0 3 1
A setUnique() 0 3 1
A getReferenceNameField() 0 3 1
A getReferenceEntity() 0 3 1
A getPath() 0 3 1
A setPath() 0 3 1
A getValue() 0 3 1
A setValue() 0 3 1
A getItems() 0 4 1
A setItems() 0 3 1
A getFloatStep() 0 3 1
A setFloatStep() 0 3 1
B getFieldLabel() 0 18 5
A setFieldLabel() 0 3 1
A getTable() 0 3 1
A setTable() 0 3 1
A getLabel() 0 6 3
A setLabel() 0 3 1
A getDescription() 0 3 1
A setDescription() 0 3 1
A addChild() 0 3 1
A getChildren() 0 3 1
A setLocale() 0 3 1
A setInitialSortField() 0 3 1
A getInitialSortField() 0 3 1
A setInitialSortAscending() 0 3 1
A getReferenceValue() 12 12 4
A getSubTypeField() 12 12 4

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complex Class

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like EntityDefinition 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 EntityDefinition, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/*
4
 * This file is part of the CRUDlex package.
5
 *
6
 * (c) Philip Lehmann-Böhm <[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
namespace CRUDlex;
13
14
/**
15
 * The class for defining a single entity.
16
 */
17
class EntityDefinition {
18
19
    /**
20
     * The table where the data is stored.
21
     */
22
    protected $table;
23
24
    /**
25
     * Holds all fields in the same structure as in the CRUD YAML file.
26
     */
27
    protected $fields;
28
29
    /**
30
     * The label for the entity.
31
     */
32
    protected $label;
33
34
    /**
35
     * The labels  of the entity in the locales.
36
     */
37
    protected $localeLabels;
38
39
    /**
40
     * An array with the children referencing the entity. All entries are
41
     * arrays with three referencing elements: table, fieldName, entity
42
     */
43
    protected $children;
44
45
    /**
46
     * Labels for the fields "id", "created_at" and "updated_at".
47
     */
48
    protected $standardFieldLabels;
49
50
    /**
51
     * An array containing the fields which should appear in the list view
52
     * of the entity.
53
     */
54
    protected $listFields;
55
56
    /**
57
     * The fields used to display the children on the details page of an entity.
58
     * The keys are the entity names as in the CRUD YAML and the values are the
59
     * field names.
60
     */
61
    protected $childrenLabelFields;
62
63
    /**
64
     * Whether to delete its children when an instance is deleted.
65
     */
66
    protected $deleteCascade;
67
68
    /**
69
     * The amount of items to display per page on the listview.
70
     */
71
    protected $pageSize;
72
73
    /**
74
     * The fields offering to be filtered.
75
     */
76
    protected $filter;
77
78
    /**
79
     * Holds the {@see ServiceProvider}.
80
     */
81
    protected $serviceProvider;
82
83
    /**
84
     * Holds the locale.
85
     */
86
    protected $locale;
87
88
    /**
89
     * Holds the initial sort field.
90
     */
91
    protected $initialSortField;
92
93
    /**
94
     * Holds the initial sort order.
95
     */
96
    protected $initialSortAscending;
97
98
    /**
99
     * Gets the field names exluding the given ones.
100
     *
101
     * @param string[] $exclude
102
     * the field names to exclude
103
     *
104
     * @return array
105
     * all field names excluding the given ones
106
     */
107
    protected function getFilteredFieldNames(array $exclude) {
108
        $fieldNames = $this->getFieldNames(true);
109
        $result     = [];
110
        foreach ($fieldNames as $fieldName) {
111
            if (!in_array($fieldName, $exclude)) {
112
                $result[] = $fieldName;
113
            }
114
        }
115
        return $result;
116
    }
117
118
    /**
119
     * Gets the value of a field key.
120
     *
121
     * @param string $name
122
     * the name of the field
123
     * @param string $key
124
     * the value of the key
125
     * @param mixed $default
126
     * the default value to return if nothing is found
127
     *
128
     * @return mixed
129
     * the value of the field key or null if not existing
130
     */
131
    protected function getFieldValue($name, $key, $default = null) {
132
        if (array_key_exists($name, $this->fields) && array_key_exists($key, $this->fields[$name])) {
133
            return $this->fields[$name][$key];
134
        }
135
        return $default;
136
    }
137
138
    /**
139
     * Sets the value of a field key. If the field or the key in the field
140
     * don't exist, they get created.
141
     *
142
     * @param string $name
143
     * the name of the field
144
     * @param string $key
145
     * the value of the key
146
     * @param mixed $value
147
     * the new value
148
     */
149
    protected function setFieldValue($name, $key, $value) {
150
        if (!array_key_exists($name, $this->fields)) {
151
            $this->fields[$name] = [];
152
        }
153
        $this->fields[$name][$key] = $value;
154
    }
155
156
    /**
157
     * Gets the value of a reference field.
158
     *
159
     * @param string $type
160
     * the reference type like "reference" or "many"
161
     * @param string $fieldName
162
     * the field name of the reference
163
     * @param string $key
164
     * the key of the reference value
165
     *
166
     * @return string
167
     * the value of the reference field
168
     */
169 View Code Duplication
    protected function getReferenceValue($type, $fieldName, $key) {
0 ignored issues
show
Duplication introduced by
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.

Loading history...
170
        if ($this->getType($fieldName) != $type) {
171
            return null;
172
        }
173
        if (!array_key_exists($type, $this->fields[$fieldName])) {
174
            return null;
175
        }
176
        if (!array_key_exists($key, $this->fields[$fieldName][$type])) {
177
            return null;
178
        }
179
        return $this->fields[$fieldName][$type][$key];
180
    }
181
182
    /**
183
     * Checks if the given field has the given constraint.
184
     *
185
     * @param string $fieldName
186
     * the field name maybe having the constraint
187
     * @param string $constraint
188
     * the constraint to check, 'required' or 'unique'
189
     *
190
     * @return boolean
191
     * true if the given field has the given constraint
192
     */
193
    protected function isConstraint($fieldName, $constraint) {
194
        $result = $this->getFieldValue($fieldName, $constraint);
195
        if ($result === null) {
196
            $result = false;
197
        }
198
        return $result;
199
    }
200
201
    /**
202
     * Checks whether the given field names are declared and existing.
203
     *
204
     * @param string $reference
205
     * a hint towards the source of an invalid field name
206
     * @param array $fieldNames
207
     * the field names to check
208
     * @throws \InvalidArgumentException
209
     * thrown with all invalid field names
210
     */
211
    protected function checkFieldNames($reference, $fieldNames) {
212
        $validFieldNames   = $this->getPublicFieldNames();
213
        $invalidFieldNames = [];
214
        foreach ($fieldNames as $fieldName) {
215
            if (!in_array($fieldName, $validFieldNames)) {
216
                $invalidFieldNames[] = $fieldName;
217
            }
218
        }
219
        if (!empty($invalidFieldNames)) {
220
            throw new \InvalidArgumentException('Invalid fields ('.join(', ', $invalidFieldNames).') in '.$reference.', valid ones are: '.join(', ', $validFieldNames));
221
        }
222
    }
223
224
    /**
225
     * Constructor.
226
     *
227
     * @param string $table
228
     * the table of the entity
229
     * @param array $fields
230
     * the field structure just like the CRUD YAML
231
     * @param string $label
232
     * the label of the entity
233
     * @param array $localeLabels
234
     * the labels  of the entity in the locales
235
     * @param array $standardFieldLabels
236
     * labels for the fields "id", "created_at" and "updated_at"
237
     * @param ServiceProvider $serviceProvider
238
     * The current service provider
239
     */
240
    public function __construct($table, array $fields, $label, $localeLabels, array $standardFieldLabels, ServiceProvider $serviceProvider) {
241
        $this->table               = $table;
242
        $this->fields              = $fields;
243
        $this->label               = $label;
244
        $this->localeLabels        = $localeLabels;
245
        $this->standardFieldLabels = $standardFieldLabels;
246
        $this->serviceProvider     = $serviceProvider;
247
248
        $this->children             = [];
249
        $this->listFields           = [];
250
        $this->childrenLabelFields  = [];
251
        $this->filter               = [];
252
        $this->deleteCascade        = false;
253
        $this->pageSize             = 25;
254
        $this->locale               = null;
255
        $this->initialSortField     = 'created_at';
256
        $this->initialSortAscending = true;
257
    }
258
259
    /**
260
     * Gets all field names, including the implicit ones like "id" or
261
     * "created_at".
262
     *
263
     * @param boolean $includeMany
264
     * whether to include the many fields as well
265
     *
266
     * @return string[]
267
     * the field names
268
     */
269
    public function getFieldNames($includeMany = false) {
270
        $fieldNames = $this->getReadOnlyFields();
271
        foreach ($this->fields as $field => $value) {
272
            if ($includeMany || $this->getType($field) !== 'many') {
273
                $fieldNames[] = $field;
274
            }
275
        }
276
        return $fieldNames;
277
    }
278
279
    /**
280
     * Sets the field names to be used in the listview.
281
     *
282
     * @param array $listFields
283
     * the field names to be used in the listview
284
     */
285
    public function setListFields(array $listFields) {
286
        $this->checkFieldNames('listFields', $listFields);
287
        $this->listFields = $listFields;
288
    }
289
290
    /**
291
     * Gets the field names to be used in the listview. If they were not specified,
292
     * all public field names are returned.
293
     *
294
     * @return array
295
     * the field names to be used in the listview
296
     */
297
    public function getListFields() {
298
        if (!empty($this->listFields)) {
299
            return $this->listFields;
300
        }
301
        return $this->getPublicFieldNames();
302
    }
303
304
    /**
305
     * Gets the fields used to display the children on the details page of an
306
     * entity. The keys are the entity names as in the CRUD YAML and the values
307
     * are the field names.
308
     *
309
     * @return array
310
     * the fields used to display the children on the details page
311
     */
312
    public function getChildrenLabelFields() {
313
        return $this->childrenLabelFields;
314
    }
315
316
    /**
317
     * Sets the fields used to display the children on the details page of an
318
     * entity. The keys are the entity names as in the CRUD YAML and the values
319
     * are the field names.
320
     *
321
     * @param array $childrenLabelFields
322
     * the fields used to display the children on the details page
323
     */
324
    public function setChildrenLabelFields(array $childrenLabelFields) {
325
        $this->childrenLabelFields = $childrenLabelFields;
326
    }
327
328
    /**
329
     * Gets whether to delete its children when an instance is deleted.
330
     *
331
     * @return boolean
332
     * true if so
333
     */
334
    public function isDeleteCascade() {
335
        return $this->deleteCascade;
336
    }
337
338
    /**
339
     * Sets whether to delete its children when an instance is deleted.
340
     *
341
     * @param boolean $deleteCascade
342
     * whether to delete its children when an instance is deleted
343
     */
344
    public function setDeleteCascade($deleteCascade) {
345
        $this->deleteCascade = $deleteCascade;
346
    }
347
348
    /**
349
     * Gets the amount of items to display per page on the listview.
350
     *
351
     * @return integer
352
     * the amount of items to display per page on the listview
353
     */
354
    public function getPageSize() {
355
        return $this->pageSize;
356
    }
357
358
    /**
359
     * Sets the amount of items to display per page on the listview.
360
     *
361
     * @param integer $pageSize
362
     * the amount of items to display per page on the listview
363
     */
364
    public function setPageSize($pageSize) {
365
        $this->pageSize = $pageSize;
366
    }
367
368
    /**
369
     * Gets the fields offering a filter.
370
     *
371
     * @return array
372
     * the fields to filter
373
     */
374
    public function getFilter() {
375
        return $this->filter;
376
    }
377
378
    /**
379
     * Sets the fields offering a filter.
380
     *
381
     * @param array $filter
382
     * the fields to filter
383
     */
384
    public function setFilter(array $filter) {
385
        $this->checkFieldNames('filter', $filter);
386
        $this->filter = $filter;
387
    }
388
389
    /**
390
     * Gets the service provider.
391
     *
392
     * @return ServiceProvider
393
     * the service provider
394
     */
395
    public function getServiceProvider() {
396
        return $this->serviceProvider;
397
    }
398
399
    /**
400
     * Sets the service provider.
401
     *
402
     * @param ServiceProvider $serviceProvider
403
     * the new service provider
404
     */
405
    public function setServiceProvider(ServiceProvider $serviceProvider) {
406
        $this->serviceProvider = $serviceProvider;
407
    }
408
409
    /**
410
     * Gets the public field names. The internal fields "version" and
411
     * "deleted_at" are filtered.
412
     *
413
     * @return array
414
     * the public field names
415
     */
416
    public function getPublicFieldNames() {
417
        $exclude = ['version', 'deleted_at'];
418
        $result  = $this->getFilteredFieldNames($exclude);
419
        return $result;
420
    }
421
422
    /**
423
     * Gets the field names which are editable. Not editable are fields like the
424
     * id or the created_at.
425
     *
426
     * @return array
427
     * the editable field names
428
     */
429
    public function getEditableFieldNames() {
430
        $result = $this->getFilteredFieldNames($this->getReadOnlyFields());
431
        return $result;
432
    }
433
434
    /**
435
     * Gets the read only field names like the id or the created_at.
436
     *
437
     * @return string[]
438
     * the read only field names
439
     */
440
    public function getReadOnlyFields() {
441
        return ['id', 'created_at', 'updated_at', 'version', 'deleted_at'];
442
    }
443
444
    /**
445
     * Gets the type of a field.
446
     *
447
     * @param string $fieldName
448
     * the field name
449
     *
450
     * @return string
451
     * the type or null on invalid field name
452
     */
453
    public function getType($fieldName) {
454
        if ($fieldName === 'id') {
455
            return 'string';
456
        }
457
        if ($fieldName === 'version') {
458
            return 'integer';
459
        }
460
        if (in_array($fieldName, ['created_at', 'updated_at', 'deleted_at'])) {
461
            return 'datetime';
462
        }
463
        return $this->getFieldValue($fieldName, 'type');
464
    }
465
466
    /**
467
     * Sets the type of a field.
468
     *
469
     * @param string $fieldName
470
     * the field name
471
     * @param string $value
472
     * the new field type
473
     */
474
    public function setType($fieldName, $value) {
475
        $this->setFieldValue($fieldName, 'type', $value);
476
    }
477
478
    /**
479
     * Gets whether a field is required.
480
     *
481
     * @param string $fieldName
482
     * the field name
483
     *
484
     * @return boolean
485
     * true if so
486
     */
487
    public function isRequired($fieldName) {
488
        return $this->isConstraint($fieldName, 'required');
489
    }
490
491
    /**
492
     * Sets whether a field is required.
493
     *
494
     * @param string $fieldName
495
     * the field name
496
     * @param boolean $value
497
     * the new required state
498
     */
499
    public function setRequired($fieldName, $value) {
500
        $this->setFieldValue($fieldName, 'required', $value);
501
    }
502
503
    /**
504
     * Gets whether a field is unique.
505
     *
506
     * @param string $fieldName
507
     * the field name
508
     *
509
     * @return boolean
510
     * true if so
511
     */
512
    public function isUnique($fieldName) {
513
        return $this->isConstraint($fieldName, 'unique');
514
    }
515
516
    /**
517
     * Sets whether a field is unique.
518
     *
519
     * @param string $fieldName
520
     * the field name
521
     * @param boolean $value
522
     * true if so
523
     */
524
    public function setUnique($fieldName, $value) {
525
        $this->setFieldValue($fieldName, 'unique', $value);
526
    }
527
528
    /**
529
     * Gets the name field of a reference.
530
     *
531
     * @param string $fieldName
532
     * the field name of the reference
533
     *
534
     * @return string
535
     * the name field of a reference or null on invalid field name
536
     */
537
    public function getReferenceNameField($fieldName) {
538
        return $this->getReferenceValue('reference', $fieldName, 'nameField');
539
    }
540
541
    /**
542
     * Gets the entity field of a reference.
543
     *
544
     * @param string $fieldName
545
     * the field name of the reference
546
     *
547
     * @return string
548
     * the entity field of a reference or null on invalid field name
549
     */
550
    public function getReferenceEntity($fieldName) {
551
        return $this->getReferenceValue('reference', $fieldName, 'entity');
552
    }
553
554
    /**
555
     * Gets the file path of a field.
556
     *
557
     * @param string $fieldName
558
     * the field name
559
     *
560
     * @return string
561
     * the file path of a field or null on invalid field name
562
     */
563
    public function getPath($fieldName) {
564
        return $this->getFieldValue($fieldName, 'path');
565
    }
566
567
    /**
568
     * Sets the file path of a field.
569
     *
570
     * @param string $fieldName
571
     * the field name
572
     * @param string $value
573
     * the file path of a field or null on invalid field name
574
     */
575
    public function setPath($fieldName, $value) {
576
        $this->setFieldValue($fieldName, 'path', $value);
577
    }
578
579
    /**
580
     * Gets the value of a fixed field.
581
     *
582
     * @param string $fieldName
583
     * the field name
584
     *
585
     * @return string
586
     * the value of a fixed field or null on invalid field name
587
     */
588
    public function getValue($fieldName) {
589
        return $this->getFieldValue($fieldName, 'value');
590
    }
591
592
    /**
593
     * Sets the value of a fixed field.
594
     *
595
     * @param string $fieldName
596
     * the field name
597
     * @param string $value
598
     * the new value for the fixed field
599
     */
600
    public function setValue($fieldName, $value) {
601
        $this->setFieldValue($fieldName, 'value', $value);
602
    }
603
604
    /**
605
     * Gets the items of a set field.
606
     *
607
     * @param string $fieldName
608
     * the field name
609
     *
610
     * @return array
611
     * the items of the set field or empty array on invalid field name
612
     */
613
    public function getItems($fieldName) {
614
        $result = $this->getFieldValue($fieldName, 'items', []);
615
        return $result;
616
    }
617
618
    /**
619
     * Sets the items of a set field.
620
     *
621
     * @param string $fieldName
622
     * the field name
623
     * @param string $value
624
     * the new items of the set field
625
     */
626
    public function setItems($fieldName, $value) {
627
        $this->setFieldValue($fieldName, 'items', $value);
628
    }
629
630
    /**
631
     * Gets the step size of a float field.
632
     *
633
     * @param string $fieldName
634
     * the field name
635
     *
636
     * @return array
637
     * the step size of a float field or null on invalid field name
638
     */
639
    public function getFloatStep($fieldName) {
640
        return $this->getFieldValue($fieldName, 'floatStep');
641
    }
642
643
    /**
644
     * Sets the step size of a float field.
645
     *
646
     * @param string $fieldName
647
     * the field name
648
     * @param string $value
649
     * the new step size of the float field
650
     */
651
    public function setFloatStep($fieldName, $value) {
652
        $this->setFieldValue($fieldName, 'floatStep', $value);
653
    }
654
655
    /**
656
     * Gets the label of a field.
657
     *
658
     * @param string $fieldName
659
     * the field name
660
     *
661
     * @return string
662
     * the label of the field or the field name if no label is set in the CRUD
663
     * YAML
664
     */
665
    public function getFieldLabel($fieldName) {
666
667
        $result = $this->getFieldValue($fieldName, 'label_'.$this->locale);
668
669
        if ($result === null) {
670
            $result = $this->getFieldValue($fieldName, 'label');
671
        }
672
673
        if ($result === null && array_key_exists($fieldName, $this->standardFieldLabels)) {
674
            $result = $this->standardFieldLabels[$fieldName];
675
        }
676
677
        if ($result === null) {
678
            $result = $fieldName;
679
        }
680
681
        return $result;
682
    }
683
684
    /**
685
     * Gets the label of a field.
686
     *
687
     * @param string $fieldName
688
     * the field name
689
     * @param string $value
690
     * the new label of the field
691
     */
692
    public function setFieldLabel($fieldName, $value) {
693
        $this->setFieldValue($fieldName, 'label', $value);
694
    }
695
696
    /**
697
     * Gets the table where the data is stored.
698
     *
699
     * @return string
700
     * the table where the data is stored
701
     */
702
    public function getTable() {
703
        return $this->table;
704
    }
705
706
    /**
707
     * Sets the table where the data is stored.
708
     *
709
     * @param string $table
710
     * the new table where the data is stored
711
     */
712
    public function setTable($table) {
713
        $this->table = $table;
714
    }
715
716
    /**
717
     * Gets the label for the entity.
718
     *
719
     * @return string
720
     * the label for the entity
721
     */
722
    public function getLabel() {
723
        if ($this->locale && array_key_exists($this->locale, $this->localeLabels)) {
724
            return $this->localeLabels[$this->locale];
725
        }
726
        return $this->label;
727
    }
728
729
    /**
730
     * Sets the label for the entity.
731
     *
732
     * @param string $label
733
     * the new label for the entity
734
     */
735
    public function setLabel($label) {
736
        $this->label = $label;
737
    }
738
739
    /**
740
     * Gets the description of a field.
741
     *
742
     * @param string $fieldName
743
     * the field name
744
     *
745
     * @return string
746
     * the description of the field
747
     */
748
    public function getDescription($fieldName) {
749
        return $this->getFieldValue($fieldName, 'description');
750
    }
751
752
    /**
753
     * Sets the description of a field.
754
     *
755
     * @param string $fieldName
756
     * the field name
757
     * @param string $value
758
     * the new description of the field
759
     */
760
    public function setDescription($fieldName, $value) {
761
        $this->setFieldValue($fieldName, 'description', $value);
762
    }
763
764
    /**
765
     * Adds a child to this definition in case the other
766
     * definition has a reference to this one.
767
     *
768
     * @param string $table
769
     * the table of the referencing definition
770
     * @param string $fieldName
771
     * the field name of the referencing definition
772
     * @param string $entity
773
     * the entity of the referencing definition
774
     */
775
    public function addChild($table, $fieldName, $entity) {
776
        $this->children[] = [$table, $fieldName, $entity];
777
    }
778
779
    /**
780
     * Gets the referencing children to this definition.
781
     *
782
     * @return array
783
     * an array with the children referencing the entity. All entries are arrays
784
     * with three referencing elements: table, fieldName, entity
785
     */
786
    public function getChildren() {
787
        return $this->children;
788
    }
789
790
    /**
791
     * Sets the locale to be used.
792
     *
793
     * @param string $locale
794
     * the locale to be used.
795
     */
796
    public function setLocale($locale) {
797
        $this->locale = $locale;
798
    }
799
800
    /**
801
     * Sets the initial sort field.
802
     *
803
     * @param string $initialSortField
804
     * the new initial sort field
805
     */
806
    public function setInitialSortField($initialSortField) {
807
        $this->initialSortField = $initialSortField;
808
    }
809
810
    /**
811
     * Gets the initial sort field.
812
     *
813
     * @return string
814
     * the initial sort field
815
     */
816
    public function getInitialSortField() {
817
        return $this->initialSortField;
818
    }
819
820
    /**
821
     * Sets the initial sort order.
822
     *
823
     * @param boolean $initialSortAscending
824
     * the initial sort order, true if ascending
825
     */
826
    public function setInitialSortAscending($initialSortAscending) {
827
        $this->initialSortAscending = $initialSortAscending;
828
    }
829
830
    /**
831
     * Gets the initial sort order.
832
     *
833
     * @return boolean
834
     * the initial sort order, true if ascending
835
     */
836
    public function isInitialSortAscending() {
837
        return $this->initialSortAscending;
838
    }
839
840
    /**
841
     * Gets a sub field of an field.
842
     *
843
     * @param string $fieldName
844
     * the field name of the sub type
845
     * @param string $subType
846
     * the sub type like "reference" or "many"
847
     * @param string $key
848
     * the key of the value
849
     *
850
     * @return string
851
     * the value of the sub field
852
     */
853 View Code Duplication
    public function getSubTypeField($fieldName, $subType, $key) {
0 ignored issues
show
Duplication introduced by
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.

Loading history...
854
        if ($this->getType($fieldName) != $subType) {
855
            return null;
856
        }
857
        if (!array_key_exists($subType, $this->fields[$fieldName])) {
858
            return null;
859
        }
860
        if (!array_key_exists($key, $this->fields[$fieldName][$subType])) {
861
            return null;
862
        }
863
        return $this->fields[$fieldName][$subType][$key];
864
    }
865
}
866