These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
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 | class LabelSetter { |
||
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 $label |
||
37 | * @param EntityId|Item|Property|SiteLink $target |
||
38 | * @param EditInfo|null $editInfo |
||
39 | * |
||
40 | * @return bool |
||
41 | */ |
||
42 | public function set( Term $label, $target, EditInfo $editInfo = null ) { |
||
43 | $this->throwExceptionsOnBadTarget( $target ); |
||
44 | |||
45 | $params = $this->getTargetParamsFromTarget( |
||
46 | $this->getEntityIdentifierFromTarget( $target ) |
||
0 ignored issues
–
show
|
|||
47 | ); |
||
48 | |||
49 | $params['language'] = $label->getLanguageCode(); |
||
50 | $params['value'] = $label->getText(); |
||
51 | |||
52 | $this->api->postRequest( 'wbsetlabel', $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 ) && is_null( $target->getId() ) ) { |
||
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 array( 'id' => $target->getSerialization() ); |
||
99 | } elseif( $target instanceof SiteLink ) { |
||
100 | return array( |
||
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 | } |
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.