Completed
Pull Request — master (#26)
by mw
03:16
created

SemanticExternalQueryLookup.php (3 issues)

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 SEQL\HookRegistry;
4
5
/**
6
 * @see https://github.com/SemanticMediaWiki/SemanticExternalQueryLookup/
7
 *
8
 * @defgroup SEQL Semantic External Query Lookup
9
 */
10
if ( !defined( 'MEDIAWIKI' ) ) {
11
	die( 'This file is part of the SemanticExternalQueryLookup extension, it is not a valid entry point.' );
12
}
13
14
if ( version_compare( $GLOBALS[ 'wgVersion' ], '1.23', 'lt' ) ) {
15
	die( '<b>Error:</b> This version of <a href="https://github.com/SemanticMediaWiki/SemanticExternalQueryLookup/">SemanticExternalQueryLookup</a> is only compatible with MediaWiki 1.23 or above. You need to upgrade MediaWiki first.' );
16
}
17
18
if ( defined( 'SEQL_VERSION' ) ) {
19
	// Do not initialize more than once.
20
	return 1;
21
}
22
23
SemanticExternalQueryLookup::initExtension();
24
25
$GLOBALS['wgExtensionFunctions'][] = function() {
26
	SemanticExternalQueryLookup::onExtensionFunction();
27
};
28
29
/**
30
 * @codeCoverageIgnore
31
 */
32
class SemanticExternalQueryLookup {
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
33
34
	/**
35
	 * @since 1.0
36
	 */
37
	public static function initExtension() {
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...
38
39
		// Load DefaultSettings
40
		require_once __DIR__ . '/DefaultSettings.php';
41
42
		define( 'SEQL_VERSION', '1.0.0-alpha' );
43
44
		// Register extension info
45
		$GLOBALS['wgExtensionCredits']['semantic'][] = array(
46
			'path'           => __DIR__,
47
			'name'           => 'Semantic External Query Lookup',
48
			'author'         => array( 'James Hong Kong' ),
49
			'url'            => 'https://github.com/SemanticMediaWiki/SemanticExternalQueryLookup/',
50
			'descriptionmsg' => 'seql-desc',
51
			'version'        => SEQL_VERSION,
52
			'license-name'   => 'GPL-2.0+',
53
		);
54
55
		// Register message files
56
		$GLOBALS['wgMessagesDirs']['SemanticExternalQueryLookup'] = __DIR__ . '/i18n';
57
	}
58
59
	/**
60
	 * @since 1.0
61
	 */
62
	public static function onExtensionFunction() {
0 ignored issues
show
onExtensionFunction 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...
63
64
		$options = array(
65
			'externalRepositoryEndpoints' => $GLOBALS['seqlgExternalRepositoryEndpoints']
66
		);
67
68
		$hookRegistry = new HookRegistry(
69
			$options
70
		);
71
72
		$hookRegistry->register();
73
	}
74
75
	/**
76
	 * @since 1.0
77
	 *
78
	 * @return string|null
79
	 */
80
	public static function getVersion() {
81
		return SEQL_VERSION;
82
	}
83
84
}
85