Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ApiV2ContextCursor
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
3 / 3
11
100.00% covered (success)
100.00%
1 / 1
 getClaimsArray
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
 getStatementArray
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
5
 getMainArray
n/a
0 / 0
n/a
0 / 0
0
 storeCheckResultInArray
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace WikibaseQuality\ConstraintReport\ConstraintCheck\Context;
4
5/**
6 * Abstract superclass of all context cursors for the second version of the API output format.
7 * (This is currently the only supported format.)
8 *
9 * This output format is modeled after the Wikibase entity JSON format,
10 * where an object with the members 'hash' and a list of 'reports' can appear
11 * wherever the entity JSON format contains snaks.
12 *
13 * That is, the container is keyed by entity ID and contains objects with a 'claims' member,
14 * which holds an object that is keyed by property ID and contains lists of statement objects,
15 * which have an 'id' member, a 'mainsnak' snak,
16 * 'qualifiers' keyed by property ID holding a list of snaks,
17 * and a list of 'references' each having a 'hash' and 'snaks'
18 * which are keyed by property ID and then hold a list of snaks.
19 *
20 * @license GPL-2.0-or-later
21 */
22abstract class ApiV2ContextCursor implements ContextCursor {
23
24    /**
25     * Returns the 'claims' subcontainer.
26     *
27     * @param array[] &$container
28     * @return array
29     */
30    protected function &getClaimsArray( array &$container ) {
31        $entityId = $this->getEntityId();
32
33        if ( !array_key_exists( $entityId, $container ) ) {
34            $container[$entityId] = [];
35        }
36        $entityContainer = &$container[$entityId];
37
38        if ( !array_key_exists( 'claims', $entityContainer ) ) {
39            $entityContainer['claims'] = [];
40        }
41        $claimsArray = &$entityContainer['claims'];
42
43        return $claimsArray;
44    }
45
46    /**
47     * Returns the statement subcontainer.
48     *
49     * @param array[] &$container
50     * @return array
51     */
52    protected function &getStatementArray( array &$container ) {
53        $statementPropertyId = $this->getStatementPropertyId();
54        $statementGuid = $this->getStatementGuid();
55
56        $claimsContainer = &$this->getClaimsArray( $container );
57
58        if ( !array_key_exists( $statementPropertyId, $claimsContainer ) ) {
59            $claimsContainer[$statementPropertyId] = [];
60        }
61        $propertyContainer = &$claimsContainer[$statementPropertyId];
62
63        foreach ( $propertyContainer as &$statement ) {
64            if ( $statement['id'] === $statementGuid ) {
65                $statementArray = &$statement;
66                break;
67            }
68        }
69        if ( !isset( $statementArray ) ) {
70            $statementArray = [ 'id' => $statementGuid ];
71            $propertyContainer[] = &$statementArray;
72        }
73
74        return $statementArray;
75    }
76
77    /**
78     * This method returns the array with the 'hash' and 'reports' member.
79     * It should locate the array in $container or,
80     * if the array doesn’t exist yet, create it and emplace it there.
81     *
82     * @param array[] &$container
83     * @return array
84     */
85    abstract protected function &getMainArray( array &$container );
86
87    /**
88     * @param ?array $result
89     * @param array[] &$container
90     */
91    public function storeCheckResultInArray( ?array $result, array &$container ) {
92        $mainArray = &$this->getMainArray( $container );
93        if ( !array_key_exists( 'results', $mainArray ) ) {
94            $mainArray['results'] = [];
95        }
96
97        if ( $result !== null ) {
98            $mainArray['results'][] = $result;
99        }
100    }
101
102}