Issues (155)

SemanticCite.php (1 issue)

1
<?php
2
3
use SCI\HookRegistry;
4
use SCI\Options;
5
use SMW\Services\ServicesFactory as ApplicationFactory;
0 ignored issues
show
The type SMW\Services\ServicesFactory was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
7
/**
8
 * @see https://github.com/SemanticMediaWiki/SemanticCite/
9
 *
10
 * @defgroup SCI Semantic Cite
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 = [] ) {
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
		// #71
94
		if ( version_compare( $GLOBALS['wgVersion'], '1.32', '<' ) ) {
95
			$dependencies = [
96
				'onoi.qtip',
97
				'onoi.blobstore',
98
				'ext.scite.styles',
99
				'mediawiki.api.parse'
100
			];
101
		} else {
102
			$dependencies = [
103
				'onoi.qtip',
104
				'onoi.blobstore',
105
				'ext.scite.styles',
106
				'mediawiki.api'
107
			];
108
		}
109
110
		$GLOBALS['wgResourceModules']['ext.scite.tooltip'] = [
111
			'scripts' => [
112
				'res/scite.tooltip.js'
113
			],
114
			'localBasePath' => __DIR__ ,
115
			'remoteExtPath' => 'SemanticCite',
116
			'dependencies'  => $dependencies,
117
			'messages' => [
118
				'sci-tooltip-citation-lookup-failure',
119
				'sci-tooltip-citation-lookup-failure-multiple'
120
			],
121
			'targets' => [
122
				'mobile',
123
				'desktop'
124
			]
125
		];
126
127
		// Register hooks that require to be listed as soon as possible and preferable
128
		// before the execution of onExtensionFunction
129
		HookRegistry::initExtension();
130
	}
131
132
	/**
133
	 * @since 1.1
134
	 */
135
	public static function onExtensionFunction() {
136
137
		if ( !defined( 'SMW_VERSION' ) ) {
138
			if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
139
				die( "\nThe 'Semantic Cite' extension requires 'Semantic MediaWiki' to be installed and enabled.\n" );
140
			} else {
141
				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 />' );
142
			}
143
		}
144
145
		// Require a global because MW's Special page is missing an interface
146
		// to inject dependencies
147
		$GLOBALS['scigCachePrefix'] = $GLOBALS['wgCachePrefix'] === false ? WikiMap::getCurrentWikiId() : $GLOBALS['wgCachePrefix'];
148
149
		$configuration = [
150
			'numberOfReferenceListColumns'       => $GLOBALS['scigNumberOfReferenceListColumns'],
151
			'browseLinkToCitationResource'       => $GLOBALS['scigBrowseLinkToCitationResource'],
152
			'showTooltipForCitationReference'    => $GLOBALS['scigShowTooltipForCitationReference'],
153
			'tooltipRequestCacheTTL'             => $GLOBALS['scigTooltipRequestCacheTTLInSeconds'],
154
			'citationReferenceCaptionFormat'     => $GLOBALS['scigCitationReferenceCaptionFormat'],
155
			'referenceListType'                  => $GLOBALS['scigReferenceListType'],
156
			'enabledStrictParserValidation'      => $GLOBALS['scigEnabledStrictParserValidation'],
157
			'cachePrefix'                        => $GLOBALS['scigCachePrefix'],
158
			'enabledCitationTextChangeUpdateJob' => $GLOBALS['scigEnabledCitationTextChangeUpdateJob'],
159
			'responsiveMonoColumnCharacterBoundLength' => $GLOBALS['scigResponsiveMonoColumnCharacterBoundLength']
160
		];
161
162
		$applicationFactory = ApplicationFactory::getInstance();
163
164
		$hookRegistry = new HookRegistry(
165
			$applicationFactory->getStore(),
166
			$applicationFactory->newCacheFactory()->newMediaWikiCompositeCache( $GLOBALS['scigReferenceListCacheType'] ),
167
			new Options( $configuration )
168
		);
169
170
		$hookRegistry->register();
171
	}
172
173
}
174