Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
SuccessCache
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 4
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 stashImportResult
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 fetchImportResult
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 makeCacheKey
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace FileImporter\Services;
4
5use MediaWiki\Title\Title;
6use MediaWiki\User\UserIdentity;
7use Psr\Log\LoggerInterface;
8use Psr\Log\NullLogger;
9use StatusValue;
10use Wikimedia\LightweightObjectStore\ExpirationAwareness;
11use Wikimedia\ObjectCache\BagOStuff;
12
13/**
14 * Save the import results to cache so that they can be looked up from the success page.
15 *
16 * @license GPL-2.0-or-later
17 */
18class SuccessCache {
19
20    private const CACHE_KEY = 'fileImporter_result';
21
22    public function __construct(
23        private readonly BagOStuff $cache,
24        private readonly LoggerInterface $logger = new NullLogger(),
25    ) {
26    }
27
28    /**
29     * @return bool If caching was successful or not.
30     */
31    public function stashImportResult( Title $targetTitle, UserIdentity $user, StatusValue $importResult ) {
32        $key = $this->makeCacheKey( $targetTitle, $user );
33        $this->logger->debug( __METHOD__ . ': Import result cached at ' . $key );
34        return $this->cache->set( $key, $importResult, ExpirationAwareness::TTL_DAY );
35    }
36
37    /**
38     * @return StatusValue|null
39     */
40    public function fetchImportResult( Title $targetTitle, UserIdentity $user ) {
41        $key = $this->makeCacheKey( $targetTitle, $user );
42        $importResult = $this->cache->get( $key );
43        if ( !( $importResult instanceof StatusValue ) ) {
44            $this->logger->error( __METHOD__ . ': Failed to retrieve import result from ' . $key );
45            return null;
46        }
47        return $importResult;
48    }
49
50    /**
51     * @return string
52     */
53    private function makeCacheKey( Title $targetTitle, UserIdentity $user ) {
54        return $this->cache->makeKey(
55            __CLASS__,
56            self::CACHE_KEY,
57            $targetTitle->getPrefixedDBkey(),
58            $user->getId()
59        );
60    }
61
62}