Test Failed
Push — develop ( 1bbdf7...df4a96 )
by Paul
13:49
created

Controller::filterSchema()   B

Complexity

Conditions 9
Paths 8

Size

Total Lines 28
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 28
ccs 0
cts 19
cp 0
rs 8.0555
c 0
b 0
f 0
cc 9
nc 8
nop 1
crap 90
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\RankMath;
4
5
use GeminiLabs\SiteReviews\Controllers\AbstractController;
6
use GeminiLabs\SiteReviews\Helpers\Arr;
7
use GeminiLabs\SiteReviews\Integrations\RankMath\Defaults\RatingSchemaTypeDefaults;
8
use GeminiLabs\SiteReviews\Modules\Schema;
9
10
class Controller extends AbstractController
11
{
12
    /**
13
     * @filter rank_math/schema/validated_data
14
     */
15
    public function filterSchema($data): array
16
    {
17
        $data = Arr::consolidate($data);
18
        $schema = glsr(Schema::class)->generate();
19
        if (empty($schema)) {
20
            return $data;
21
        }
22
        $allowedTypes = glsr(RatingSchemaTypeDefaults::class)->defaults();
23
        $aggregateRatingSchema = Arr::get($schema, 'aggregateRating');
24
        $reviewSchema = Arr::get($schema, 'review');
25
        foreach ($data as $key => $values) {
26
            if ('richSnippet' !== $key
27
                && !str_starts_with($key, 'new-') // used in preview
28
                && !str_starts_with($key, 'schema-')) {
29
                continue;
30
            }
31
            $type = $values['@type'] ?? '';
32
            if (!in_array($type, $allowedTypes)) {
33
                continue;
34
            }
35
            if ($aggregateRatingSchema) {
36
                $data[$key]['aggregateRating'] = $aggregateRatingSchema;
37
            }
38
            if ($reviewSchema) {
39
                $data[$key]['review'] = $reviewSchema;
40
            }
41
        }
42
        return $data;
43
    }
44
}
45