Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ArchivedRevisionHandler
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
1
 factory
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
1
 getRevision
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace MediaWiki\IPInfo\Rest\Handler;
4
5use JobQueueGroup;
6use MediaWiki\IPInfo\InfoManager;
7use MediaWiki\IPInfo\Rest\Presenter\DefaultPresenter;
8use MediaWiki\Languages\LanguageFallback;
9use MediaWiki\Permissions\PermissionManager;
10use MediaWiki\Rest\LocalizedHttpException;
11use MediaWiki\Revision\ArchivedRevisionLookup;
12use MediaWiki\Revision\RevisionRecord;
13use MediaWiki\User\Options\UserOptionsLookup;
14use MediaWiki\User\UserFactory;
15use Wikimedia\Message\MessageValue;
16
17class ArchivedRevisionHandler extends AbstractRevisionHandler {
18
19    private ArchivedRevisionLookup $archivedRevisionLookup;
20
21    public function __construct(
22        InfoManager $infoManager,
23        ArchivedRevisionLookup $archivedRevisionLookup,
24        PermissionManager $permissionManager,
25        UserOptionsLookup $userOptionsLookup,
26        UserFactory $userFactory,
27        DefaultPresenter $presenter,
28        JobQueueGroup $jobQueueGroup,
29        LanguageFallback $languageFallback
30    ) {
31        parent::__construct(
32            $infoManager,
33            $permissionManager,
34            $userOptionsLookup,
35            $userFactory,
36            $presenter,
37            $jobQueueGroup,
38            $languageFallback
39        );
40        $this->archivedRevisionLookup = $archivedRevisionLookup;
41    }
42
43    /**
44     * @param InfoManager $infoManager
45     * @param ArchivedRevisionLookup $archivedRevisionLookup
46     * @param PermissionManager $permissionManager
47     * @param UserOptionsLookup $userOptionsLookup
48     * @param UserFactory $userFactory
49     * @param JobQueueGroup $jobQueueGroup
50     * @param LanguageFallback $languageFallback
51     * @return self
52     */
53    public static function factory(
54        InfoManager $infoManager,
55        ArchivedRevisionLookup $archivedRevisionLookup,
56        PermissionManager $permissionManager,
57        UserOptionsLookup $userOptionsLookup,
58        UserFactory $userFactory,
59        JobQueueGroup $jobQueueGroup,
60        LanguageFallback $languageFallback
61    ) {
62        return new self(
63            $infoManager,
64            $archivedRevisionLookup,
65            $permissionManager,
66            $userOptionsLookup,
67            $userFactory,
68            new DefaultPresenter( $permissionManager ),
69            $jobQueueGroup,
70            $languageFallback
71        );
72    }
73
74    /** @inheritDoc */
75    protected function getRevision( int $id ): ?RevisionRecord {
76        if ( !$this->permissionManager->userHasRight( $this->getAuthority()->getUser(), 'deletedhistory' ) ) {
77            throw new LocalizedHttpException(
78                new MessageValue( 'ipinfo-rest-access-denied' ),
79                $this->getAuthority()->getUser()->isRegistered() ? 403 : 401
80            );
81        }
82
83        return $this->archivedRevisionLookup->getArchivedRevisionRecord( null, $id );
84    }
85}