Completed
Push — master ( 9e5bdd...cedd75 )
by Karsten
17:50
created

SemanticCite.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
use SCI\HookRegistry;
4
use SCI\Options;
5
use SMW\ApplicationFactory;
6
7
/**
8
 * @see https://github.com/SemanticMediaWiki/SemanticCite/
9
 *
10
 * @defgroup SCI Semantic Citation
11
 */
12
SemanticCite::load();
13
14
/**
15
 * @codeCoverageIgnore
16
 */
17
class SemanticCite {
18
19
	/**
20
	 * @since 1.3
21
	 *
22
	 * @note It is expected that this function is loaded before LocalSettings.php
23
	 * to ensure that settings and global functions are available by the time
24
	 * the extension is activated.
25
	 */
26
	public static function load() {
27
28
		if ( is_readable( __DIR__ . '/vendor/autoload.php' ) ) {
29
			include_once __DIR__ . '/vendor/autoload.php';
30
		}
31
32
		// Load DefaultSettings
33
		require_once __DIR__ . '/DefaultSettings.php';
34
	}
35
36
	/**
37
	 * @since 1.1
38
	 */
39
	public static function initExtension( $credits = [] ) {
0 ignored issues
show
initExtension uses the super-global variable $GLOBALS which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
40
41
		// See https://phabricator.wikimedia.org/T151136
42
		define( 'SCI_VERSION', isset( $credits['version'] ) ? $credits['version'] : 'UNKNOWN' );
43
44
		// Extend the upgrade key provided by SMW to ensure that an DB
45
		// schema is updated accordingly before using the extension
46
		if ( isset( $GLOBALS['smwgUpgradeKey'] ) ) {
47
		//	$GLOBALS['smwgUpgradeKey'] .= ':scite:2018-09';
48
		}
49
50
		// Register message files
51
		$GLOBALS['wgMessagesDirs']['SemanticCite'] = __DIR__ . '/i18n';
52
		$GLOBALS['wgExtensionMessagesFiles']['SemanticCiteMagic'] = __DIR__ . '/i18n/SemanticCite.magic.php';
53
		$GLOBALS['wgExtensionMessagesFiles']['SemanticCiteAlias'] = __DIR__ . '/i18n/SemanticCite.alias.php';
54
55
		$GLOBALS['wgSpecialPages']['FindCitableMetadata'] = '\SCI\Specials\SpecialFindCitableMetadata';
56
57
		// Restrict access to the meta search for registered users only
58
		$GLOBALS['wgAvailableRights'][] = 'sci-metadatasearch';
59
		$GLOBALS['wgGroupPermissions']['user']['sci-metadatasearch'] = true;
60
61
		// Register resource files
62
		$GLOBALS['wgResourceModules']['ext.scite.styles'] = [
63
			'styles'  => 'res/scite.styles.css',
64
			'localBasePath' => __DIR__ ,
65
			'remoteExtPath' => 'SemanticCite',
66
			'position' => 'top',
67
			'group'    => 'ext.smw',
68
			'targets' => [
69
				'mobile',
70
				'desktop'
71
			]
72
		];
73
74
		$GLOBALS['wgResourceModules']['ext.scite.metadata'] = [
75
			'scripts' => [
76
				'res/scite.text.selector.js',
77
				'res/scite.page.creator.js'
78
			],
79
			'localBasePath' => __DIR__ ,
80
			'remoteExtPath' => 'SemanticCite',
81
			'position' => 'top',
82
			'group'    => 'ext.smw',
83
			'dependencies'  => [
84
				'ext.scite.styles',
85
				'mediawiki.api'
86
			],
87
			'targets' => [
88
				'mobile',
89
				'desktop'
90
			]
91
		];
92
93
		$GLOBALS['wgResourceModules']['ext.scite.tooltip'] = [
94
			'scripts' => [
95
				'res/scite.tooltip.js'
96
			],
97
			'localBasePath' => __DIR__ ,
98
			'remoteExtPath' => 'SemanticCite',
99
			'dependencies'  => [
100
				'onoi.qtip',
101
				'onoi.blobstore',
102
				'onoi.util',
103
				'ext.scite.styles',
104
				'mediawiki.api.parse'
105
			],
106
			'messages' => [
107
				'sci-tooltip-citation-lookup-failure',
108
				'sci-tooltip-citation-lookup-failure-multiple'
109
			],
110
			'targets' => [
111
				'mobile',
112
				'desktop'
113
			]
114
		];
115
116
		// Register hooks that require to be listed as soon as possible and preferable
117
		// before the execution of onExtensionFunction
118
		HookRegistry::initExtension( $GLOBALS );
119
	}
120
121
	/**
122
	 * @since 1.1
123
	 */
124
	public static function onExtensionFunction() {
125
126
		if ( !defined( 'SMW_VERSION' ) ) {
127
			if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
128
				die( "\nThe 'Semantic Cite' extension requires 'Semantic MediaWiki' to be installed and enabled.\n" );
129
			} else {
130
				die( '<b>Error:</b> The <a href="https://github.com/SemanticMediaWiki/SemanticCite/">Semantic Cite</a> extension requires <a href="https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> to be installed and enabled.<br />' );
131
			}
132
		}
133
134
		// Require a global because MW's Special page is missing an interface
135
		// to inject dependencies
136
		$GLOBALS['scigCachePrefix'] = $GLOBALS['wgCachePrefix'] === false ? wfWikiID() : $GLOBALS['wgCachePrefix'];
137
138
		$configuration = [
139
			'numberOfReferenceListColumns'       => $GLOBALS['scigNumberOfReferenceListColumns'],
140
			'browseLinkToCitationResource'       => $GLOBALS['scigBrowseLinkToCitationResource'],
141
			'showTooltipForCitationReference'    => $GLOBALS['scigShowTooltipForCitationReference'],
142
			'tooltipRequestCacheTTL'             => $GLOBALS['scigTooltipRequestCacheTTLInSeconds'],
143
			'citationReferenceCaptionFormat'     => $GLOBALS['scigCitationReferenceCaptionFormat'],
144
			'referenceListType'                  => $GLOBALS['scigReferenceListType'],
145
			'enabledStrictParserValidation'      => $GLOBALS['scigEnabledStrictParserValidation'],
146
			'cachePrefix'                        => $GLOBALS['scigCachePrefix'],
147
			'enabledCitationTextChangeUpdateJob' => $GLOBALS['scigEnabledCitationTextChangeUpdateJob'],
148
			'responsiveMonoColumnCharacterBoundLength' => $GLOBALS['scigResponsiveMonoColumnCharacterBoundLength']
149
		];
150
151
		$applicationFactory = ApplicationFactory::getInstance();
152
153
		$hookRegistry = new HookRegistry(
154
			$applicationFactory->getStore(),
155
			$applicationFactory->newCacheFactory()->newMediaWikiCompositeCache( $GLOBALS['scigReferenceListCacheType'] ),
156
			new Options( $configuration )
157
		);
158
159
		$hookRegistry->register();
160
	}
161
162
	/**
163
	 * @since 1.1
164
	 *
165
	 * @return string|null
166
	 */
167
	public static function getVersion() {
168
169
		if ( !defined( 'SCI_VERSION' ) ) {
170
			return null;
171
		}
172
173
		return SCI_VERSION;
174
	}
175
176
}
177