Completed
Push — main ( b55b92...e8d442 )
by
unknown
05:41
created

ReferenceSetter::set()   B

Complexity

Conditions 8
Paths 19

Size

Total Lines 35

Duplication

Lines 9
Ratio 25.71 %

Importance

Changes 0
Metric Value
dl 9
loc 35
rs 8.1155
c 0
b 0
f 0
cc 8
nc 19
nop 4
1
<?php
2
3
namespace Addwiki\Wikibase\Api\Service;
4
5
use Addwiki\Mediawiki\DataModel\EditInfo;
6
use Addwiki\Wikibase\Api\WikibaseApi;
7
use Serializers\Serializer;
8
use UnexpectedValueException;
9
use Wikibase\DataModel\Reference;
10
use Wikibase\DataModel\Statement\Statement;
11
use Wikibase\DataModel\Statement\StatementGuid;
12
13
/**
14
 * @access private
15
 *
16
 * @author Addshore
17
 */
18
class ReferenceSetter {
19
20
	private WikibaseApi $api;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_STRING, expecting T_FUNCTION or T_CONST
Loading history...
21
22
	private \Serializers\Serializer $referenceSerializer;
23
24
	/**
25
	 * @param WikibaseApi $api
26
	 * @param Serializer $referenceSerializer
27
	 */
28
	public function __construct( WikibaseApi $api, Serializer $referenceSerializer ) {
29
		$this->api = $api;
30
		$this->referenceSerializer = $referenceSerializer;
31
	}
32
33
	/**
34
	 * @since 0.2
35
	 *
36
	 * @param Reference $reference new reference value
37
	 * @param Statement|StatementGuid|string $statement Statement object or GUID which has the reference
38
	 * @param Reference|string|null $targetReference target (old) reference of hash
39
	 * @param EditInfo|null $editInfo
40
	 *
41
	 * @throws UnexpectedValueException
42
	 */
43
	public function set( Reference $reference, $statement, $targetReference = null, EditInfo $editInfo = null ): bool {
44
		if ( is_string( $statement ) ) {
45
			$guid = $statement;
46
		} elseif ( $statement instanceof StatementGuid ) {
47
			$guid = $statement->getSerialization();
48
		} elseif ( $statement instanceof Statement ) {
49
			$guid = $statement->getGuid();
50
		} else {
51
			throw new UnexpectedValueException( 'Could not get statement guid from $statement' );
52
		}
53
		if ( !is_string( $guid ) ) {
54
			throw new UnexpectedValueException( 'Unexpected statement guid got from $statement' );
55
		}
56
57
		$referenceSerialization = $this->referenceSerializer->serialize( $reference );
58
59
		$params = [
60
			'statement' => $guid,
61
			'snaks' => json_encode( $referenceSerialization['snaks'] ),
62
			'snaks-order' => json_encode( $referenceSerialization['snaks-order'] ),
63
		];
64
65
		if ( $targetReference !== null ) {
66
			if ( $targetReference instanceof Reference ) {
67
				$targetReference = $reference->getHash();
68
			}
69
			if ( !is_string( $targetReference ) ) {
70
				throw new UnexpectedValueException( 'Could not get reference hash from $targetReference' );
71
			}
72
			$params['reference'] = $targetReference;
73
		}
74
75
		$this->api->postRequest( 'wbsetreference', $params, $editInfo );
76
		return true;
77
	}
78
79
}
80