1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Wikibase\Api\Service; |
4
|
|
|
|
5
|
|
|
use Mediawiki\DataModel\EditInfo; |
6
|
|
|
use UnexpectedValueException; |
7
|
|
|
use Wikibase\Api\WikibaseApi; |
8
|
|
|
use Wikibase\DataModel\Entity\EntityId; |
9
|
|
|
use Wikibase\DataModel\Entity\Item; |
10
|
|
|
use Wikibase\DataModel\Entity\Property; |
11
|
|
|
use Wikibase\DataModel\SiteLink; |
12
|
|
|
use Wikibase\DataModel\Term\Term; |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* @access private |
16
|
|
|
* |
17
|
|
|
* @author Addshore |
18
|
|
|
*/ |
19
|
|
View Code Duplication |
class DescriptionSetter { |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* @var WikibaseApi |
23
|
|
|
*/ |
24
|
|
|
private $api; |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* @param WikibaseApi $api |
28
|
|
|
*/ |
29
|
|
|
public function __construct( WikibaseApi $api ) { |
30
|
|
|
$this->api = $api; |
31
|
|
|
} |
32
|
|
|
|
33
|
|
|
/** |
34
|
|
|
* @since 0.2 |
35
|
|
|
* |
36
|
|
|
* @param Term $description |
37
|
|
|
* @param EntityId|Item|Property|SiteLink $target |
38
|
|
|
* @param EditInfo|null $editInfo |
39
|
|
|
* |
40
|
|
|
* @return bool |
41
|
|
|
*/ |
42
|
|
|
public function set( Term $description, $target, EditInfo $editInfo = null ) { |
43
|
|
|
$this->throwExceptionsOnBadTarget( $target ); |
44
|
|
|
|
45
|
|
|
$params = $this->getTargetParamsFromTarget( |
46
|
|
|
$this->getEntityIdentifierFromTarget( $target ) |
|
|
|
|
47
|
|
|
); |
48
|
|
|
|
49
|
|
|
$params['language'] = $description->getLanguageCode(); |
50
|
|
|
$params['value'] = $description->getText(); |
51
|
|
|
|
52
|
|
|
$this->api->postRequest( 'wbsetdescription', $params, $editInfo ); |
53
|
|
|
return true; |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* @param mixed $target |
58
|
|
|
* |
59
|
|
|
* @throws UnexpectedValueException |
60
|
|
|
* |
61
|
|
|
* @todo Fix duplicated code |
62
|
|
|
*/ |
63
|
|
|
private function throwExceptionsOnBadTarget( $target ) { |
64
|
|
|
if ( !$target instanceof EntityId && !$target instanceof Item && !$target instanceof Property && !$target instanceof SiteLink ) { |
65
|
|
|
throw new UnexpectedValueException( '$target needs to be an EntityId, Item, Property or SiteLink' ); |
66
|
|
|
} |
67
|
|
|
if ( ( $target instanceof Item || $target instanceof Property ) && $target->getId() === null ) { |
68
|
|
|
throw new UnexpectedValueException( '$target Entity object needs to have an Id set' ); |
69
|
|
|
} |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* @param EntityId|Item|Property $target |
74
|
|
|
* |
75
|
|
|
* @throws UnexpectedValueException |
76
|
|
|
* @return EntityId|SiteLink |
77
|
|
|
* |
78
|
|
|
* @todo Fix duplicated code |
79
|
|
|
*/ |
80
|
|
|
private function getEntityIdentifierFromTarget( $target ) { |
81
|
|
|
if ( $target instanceof Item || $target instanceof Property ) { |
82
|
|
|
return $target->getId(); |
83
|
|
|
} else { |
84
|
|
|
return $target; |
85
|
|
|
} |
86
|
|
|
} |
87
|
|
|
|
88
|
|
|
/** |
89
|
|
|
* @param EntityId|SiteLink $target |
90
|
|
|
* |
91
|
|
|
* @throws UnexpectedValueException |
92
|
|
|
* @return array |
93
|
|
|
* |
94
|
|
|
* @todo Fix duplicated code |
95
|
|
|
*/ |
96
|
|
|
private function getTargetParamsFromTarget( $target ) { |
97
|
|
|
if ( $target instanceof EntityId ) { |
98
|
|
|
return [ 'id' => $target->getSerialization() ]; |
99
|
|
|
} elseif ( $target instanceof SiteLink ) { |
100
|
|
|
return [ |
101
|
|
|
'site' => $target->getSiteId(), |
102
|
|
|
'title' => $target->getPageName(), |
103
|
|
|
]; |
104
|
|
|
} else { |
105
|
|
|
throw new UnexpectedValueException( '$target needs to be an EntityId or SiteLink' ); |
106
|
|
|
} |
107
|
|
|
} |
108
|
|
|
|
109
|
|
|
} |
110
|
|
|
|
This check looks at variables that have been passed in as parameters and are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.