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 Deserializers\Deserializer; |
||
6 | use Mediawiki\Api\MediawikiApi; |
||
7 | use Mediawiki\Api\SimpleRequest; |
||
8 | use Mediawiki\DataModel\PageIdentifier; |
||
9 | use Mediawiki\DataModel\Revision; |
||
10 | use RuntimeException; |
||
11 | use Wikibase\DataModel\Entity\EntityId; |
||
12 | use Wikibase\DataModel\Entity\Item; |
||
13 | use Wikibase\DataModel\Entity\Property; |
||
14 | use Wikibase\DataModel\ItemContent; |
||
15 | use Wikibase\DataModel\PropertyContent; |
||
16 | use Wikibase\DataModel\SiteLink; |
||
17 | |||
18 | /** |
||
19 | * @access private |
||
20 | * |
||
21 | * @author Addshore |
||
22 | */ |
||
23 | class RevisionGetter { |
||
24 | |||
25 | /** |
||
26 | * @var MediawikiApi |
||
27 | */ |
||
28 | protected $api; |
||
29 | |||
30 | /** |
||
31 | * @var Deserializer |
||
32 | */ |
||
33 | protected $entityDeserializer; |
||
34 | |||
35 | /** |
||
36 | * @param MediawikiApi $api |
||
37 | * @param Deserializer $entityDeserializer |
||
38 | */ |
||
39 | 3 | public function __construct( MediawikiApi $api, Deserializer $entityDeserializer ) { |
|
40 | 3 | $this->api = $api; |
|
41 | 3 | $this->entityDeserializer = $entityDeserializer; |
|
42 | 3 | } |
|
43 | |||
44 | /** |
||
45 | * @since 0.1 |
||
46 | * @param string|EntityId $id |
||
47 | * @returns Revision |
||
48 | */ |
||
49 | 2 | public function getFromId( $id ) { |
|
50 | 2 | if( $id instanceof EntityId ) { |
|
51 | 2 | $id = $id->getSerialization(); |
|
52 | 1 | } |
|
53 | |||
54 | 2 | $result = $this->api->getRequest( new SimpleRequest( 'wbgetentities', array( 'ids' => $id ) ) ); |
|
55 | 2 | return $this->newRevisionFromResult( array_shift( $result['entities'] ) ); |
|
56 | } |
||
57 | |||
58 | /** |
||
59 | * @since 0.1 |
||
60 | * @param SiteLink $siteLink |
||
61 | * @returns Revision |
||
62 | */ |
||
63 | public function getFromSiteLink( SiteLink $siteLink ) { |
||
64 | $result = $this->api->getRequest( new SimpleRequest( |
||
65 | 'wbgetentities', |
||
66 | array( 'sites' => $siteLink->getSiteId(), 'titles' => $siteLink->getPageName() ) |
||
67 | ) ); |
||
68 | return $this->newRevisionFromResult( array_shift( $result['entities'] ) ); |
||
69 | } |
||
70 | |||
71 | /** |
||
72 | * @since 0.1 |
||
73 | * @param string $siteId |
||
74 | * @param string $title |
||
75 | * @returns Revision |
||
76 | */ |
||
77 | public function getFromSiteAndTitle( $siteId, $title ) { |
||
78 | $result = $this->api->getRequest( new SimpleRequest( |
||
79 | 'wbgetentities', |
||
80 | array( 'sites' => $siteId, 'titles' => $title ) |
||
81 | ) ); |
||
82 | return $this->newRevisionFromResult( array_shift( $result['entities'] ) ); |
||
83 | } |
||
84 | |||
85 | /** |
||
86 | * @param array $entityResult |
||
87 | * @returns Revision |
||
88 | * @todo this could be factored into a different class? |
||
89 | */ |
||
90 | 2 | private function newRevisionFromResult( array $entityResult ) { |
|
91 | 2 | if( array_key_exists( 'missing', $entityResult ) ) { |
|
92 | return false; //Throw an exception? |
||
93 | } |
||
94 | 2 | return new Revision( |
|
95 | 2 | $this->getContentFromEntity( $this->entityDeserializer->deserialize( $entityResult ) ), |
|
96 | 2 | new PageIdentifier( null, intval( $entityResult['pageid'] ) ), |
|
97 | 2 | $entityResult['lastrevid'], |
|
98 | 2 | null, |
|
99 | 2 | null, |
|
100 | 2 | $entityResult['modified'] |
|
101 | 2 | ); |
|
102 | } |
||
103 | |||
104 | /** |
||
105 | * @param Item|Property $entity |
||
106 | * |
||
107 | * @throws RuntimeException |
||
108 | * @return ItemContent|PropertyContent |
||
109 | * @todo this could be factored into a different class? |
||
110 | */ |
||
111 | 2 | private function getContentFromEntity( $entity ) { |
|
112 | 2 | switch ( $entity->getType() ) { |
|
113 | 2 | case Item::ENTITY_TYPE: |
|
114 | 2 | return new ItemContent( $entity ); |
|
0 ignored issues
–
show
|
|||
115 | case Property::ENTITY_TYPE: |
||
116 | return new PropertyContent( $entity ); |
||
0 ignored issues
–
show
It seems like
$entity defined by parameter $entity on line 111 can also be of type object<Wikibase\DataModel\Entity\Item> ; however, Wikibase\DataModel\PropertyContent::__construct() does only seem to accept object<Wikibase\DataModel\Entity\Property> , maybe add an additional type check?
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.
Loading history...
|
|||
117 | default: |
||
118 | throw new RuntimeException( 'I cant get a content for this type of entity' ); |
||
119 | } |
||
120 | } |
||
121 | |||
122 | } |
||
123 |
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.