Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
PreferenceHelper
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
56
0.00% covered (danger)
0.00%
0 / 1
 setGlobalPreference
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
20
 getGlobalPreference
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * User preference helper methods adapted from ContentTranslation extension.
4 *
5 * @copyright See https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-ContentTranslation/736585619e98883f0907e7eb208a06d456f04c77/AUTHORS.txt
6 * @license GPL-2.0-or-later
7 */
8
9namespace MediaWiki\Extension\TheWikipediaLibrary;
10
11use GlobalPreferences\GlobalPreferencesFactory;
12use GlobalPreferences\Storage;
13use MediaWiki\Context\RequestContext;
14use MediaWiki\MediaWikiServices;
15use MediaWiki\User\User;
16
17class PreferenceHelper {
18
19    /**
20     * Set a global preference for the user.
21     * @param User $user
22     * @param string $preference
23     * @param string $value
24     * @return bool
25     */
26    public static function setGlobalPreference( User $user, string $preference, string $value ) {
27        /** @var GlobalPreferencesFactory $globalPref */
28        $globalPref = MediaWikiServices::getInstance()->getPreferencesFactory();
29        // Need GlobalPreferences extension.
30        if ( !$globalPref instanceof GlobalPreferencesFactory ) {
31            return false;
32        }
33        '@phan-var GlobalPreferencesFactory $globalPref';
34        $prefs = $globalPref->getGlobalPreferencesValues( $user, Storage::SKIP_CACHE );
35        if ( $prefs === false ) {
36            $prefs = [];
37        }
38        $prefs[$preference] = $value;
39        $user = $user->getInstanceForUpdate();
40        // Set up the context and check if WikiPage is available from it
41        // Once preference definitions don't require the context, this can be removed
42        $context = RequestContext::getMain();
43        if ( $context->canUseWikiPage() ) {
44            return $globalPref->setGlobalPreferences( $user, $prefs, $context );
45        }
46
47        return false;
48    }
49
50    /**
51     * Get a global preference for the user.
52     * @param User $user
53     * @param string $preference
54     * @return string|null Preference value
55     */
56    public static function getGlobalPreference( User $user, string $preference ) {
57        /** @var GlobalPreferencesFactory $globalPref */
58        $globalPref = MediaWikiServices::getInstance()->getPreferencesFactory();
59        // Need GlobalPreferences extension.
60        if ( !$globalPref instanceof GlobalPreferencesFactory ) {
61            return null;
62        }
63        '@phan-var GlobalPreferencesFactory $globalPref';
64        $prefs = $globalPref->getGlobalPreferencesValues( $user, Storage::SKIP_CACHE );
65        if ( $prefs === false ) {
66            $prefs = [];
67        }
68        return $prefs[$preference] ?? null;
69    }
70}