mediawiki.php
3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?php
/**
* @package Joomla.Platform
* @subpackage MediaWiki
*
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
use Joomla\Registry\Registry;
/**
* Joomla Platform class for interacting with a Mediawiki server instance.
*
* @property-read JMediawikiSites $sites MediaWiki API object for sites.
* @property-read JMediawikiPages $pages MediaWiki API object for pages.
* @property-read JMediawikiUsers $users MediaWiki API object for users.
* @property-read JMediawikiLinks $links MediaWiki API object for links.
* @property-read JMediawikiCategories $categories MediaWiki API object for categories.
* @property-read JMediawikiImages $images MediaWiki API object for images.
* @property-read JMediawikiSearch $search MediaWiki API object for search.
*
* @since 3.1.4
*/
class JMediawiki
{
/**
* @var Registry Options for the MediaWiki object.
* @since 3.0.0
*/
protected $options;
/**
* @var JMediawikiHttp The HTTP client object to use in sending HTTP requests.
* @since 3.1.4
*/
protected $client;
/**
* @var JMediawikiSites MediaWiki API object for Site.
* @since 3.1.4
*/
protected $sites;
/**
* @var JMediawikiPages MediaWiki API object for pages.
* @since 3.0.0
*/
protected $pages;
/**
* @var JMediawikiUsers MediaWiki API object for users.
* @since 3.1.4
*/
protected $users;
/**
* @var JMediawikiLinks MediaWiki API object for links.
* @since 3.1.4
*/
protected $links;
/**
* @var JMediawikiCategories MediaWiki API object for categories.
* @since 3.1.4
*/
protected $categories;
/**
* @var JMediawikiImages MediaWiki API object for images.
* @since 3.1.4
*/
protected $images;
/**
* @var JMediawikiSearch MediaWiki API object for search.
* @since 3.0.0
*/
protected $search;
/**
* Constructor.
*
* @param Registry $options MediaWiki options object.
* @param JMediawikiHttp $client The HTTP client object.
*
* @since 3.1.4
*/
public function __construct(Registry $options = null, JMediawikiHttp $client = null)
{
$this->options = isset($options) ? $options : new Registry;
$this->client = isset($client) ? $client : new JMediawikiHttp($this->options);
}
/**
* Magic method to lazily create API objects
*
* @param string $name Name of property to retrieve
*
* @return JMediaWikiObject MediaWiki API object (users, reviews, etc).
*
* @since 3.1.4
* @throws InvalidArgumentException
*/
public function __get($name)
{
$name = strtolower($name);
$class = 'JMediawiki' . ucfirst($name);
$accessible = array(
'categories',
'images',
'links',
'pages',
'search',
'sites',
'users',
);
if (class_exists($class) && in_array($name, $accessible))
{
if (!isset($this->$name))
{
$this->$name = new $class($this->options, $this->client);
}
return $this->$name;
}
throw new InvalidArgumentException(sprintf('Property %s is not accessible.', $name));
}
/**
* Get an option from the JMediawiki instance.
*
* @param string $key The name of the option to get.
*
* @return mixed The option value.
*
* @since 3.1.4
*/
public function getOption($key)
{
return $this->options->get($key);
}
/**
* Set an option for the JMediawiki instance.
*
* @param string $key The name of the option to set.
* @param mixed $value The option value to set.
*
* @return JMediawiki This object for method chaining.
*
* @since 3.1.4
*/
public function setOption($key, $value)
{
$this->options->set($key, $value);
return $this;
}
}