Passed
Push — develop ( 39ad60...0ca1de )
by Paul
14:09
created

ManagesBricksAjax   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 17
dl 0
loc 30
ccs 0
cts 19
cp 0
rs 10
c 1
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A missingIds() 0 5 1
A verifyNonce() 0 9 3
A formatResults() 0 10 4
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Integrations\Bricks\Concerns;
4
5
use GeminiLabs\SiteReviews\Helpers\Arr;
6
use GeminiLabs\SiteReviews\Helpers\Str;
7
8
trait ManagesBricksAjax
9
{
10
    protected function formatResults(array $items, bool $prefixTitle = true): array
11
    {
12
        $results = [];
13
        foreach ($items as $id => $title) {
14
            $display = $prefixTitle && is_numeric($id)
15
                ? "$id: $title"
16
                : $title;
17
            $results["id::$id"] = $display;
18
        }
19
        return $results;
20
    }
21
22
    protected function missingIds(array $results, array $required): array
23
    {
24
        $required = array_map(fn ($id) => Str::removePrefix((string) $id, 'id::'), $required);
25
        $required = Arr::uniqueInt($required);
26
        return array_filter($required, fn ($id) => !array_key_exists($id, $results));
27
    }
28
29
    protected function verifyNonce(): void
30
    {
31
        $nonce = 'bricks-nonce-builder';
32
        if (method_exists('Bricks\Ajax', 'verify_request')) { // @phpstan-ignore-line
33
            \Bricks\Ajax::verify_request($nonce);
34
            return;
35
        }
36
        if (!check_ajax_referer($nonce, 'nonce', false)) {
37
            wp_send_json_error("verify_nonce: \"$nonce\" is invalid.");
38
        }
39
    }
40
}
41