3 use MediaWiki\Site\MediaWikiPageNameNormalizer
;
6 * Class representing a MediaWiki site.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 * http://www.gnu.org/copyleft/gpl.html
25 * @license GNU GPL v2+
26 * @author John Erling Blad < jeblad@gmail.com >
27 * @author Daniel Kinzler
28 * @author Jeroen De Dauw < jeroendedauw@gmail.com >
32 * Class representing a MediaWiki site.
38 class MediaWikiSite
extends Site
{
39 const PATH_FILE
= 'file_path';
40 const PATH_PAGE
= 'page_path';
47 public function __construct( $type = self
::TYPE_MEDIAWIKI
) {
48 parent
::__construct( $type );
52 * Returns the database form of the given title.
56 * @param string $title The target page's title, in normalized form.
60 public function toDBKey( $title ) {
61 return str_replace( ' ', '_', $title );
65 * Returns the normalized form of the given page title, using the
66 * normalization rules of the given site. If the given title is a redirect,
67 * the redirect weill be resolved and the redirect target is returned.
69 * @note This actually makes an API request to the remote site, so beware
70 * that this function is slow and depends on an external service.
72 * @note If MW_PHPUNIT_TEST is defined, the call to the external site is
73 * skipped, and the title is normalized using the local normalization
74 * rules as implemented by the Title class.
76 * @see Site::normalizePageName
80 * @param string $pageName
85 public function normalizePageName( $pageName ) {
86 if ( defined( 'MW_PHPUNIT_TEST' ) ) {
87 // If the code is under test, don't call out to other sites, just
89 // Note: this may cause results to be inconsistent with the actual
90 // normalization used by the respective remote site!
92 $t = Title
::newFromText( $pageName );
93 return $t->getPrefixedText();
95 static $mediaWikiPageNameNormalizer = null;
97 if ( $mediaWikiPageNameNormalizer === null ) {
98 $mediaWikiPageNameNormalizer = new MediaWikiPageNameNormalizer();
101 return $mediaWikiPageNameNormalizer->normalizePageName(
103 $this->getFileUrl( 'api.php' )
109 * @see Site::getLinkPathType
110 * Returns Site::PATH_PAGE
116 public function getLinkPathType() {
117 return self
::PATH_PAGE
;
121 * Returns the relative page path.
127 public function getRelativePagePath() {
128 return parse_url( $this->getPath( self
::PATH_PAGE
), PHP_URL_PATH
);
132 * Returns the relative file path.
138 public function getRelativeFilePath() {
139 return parse_url( $this->getPath( self
::PATH_FILE
), PHP_URL_PATH
);
143 * Sets the relative page path.
147 * @param string $path
149 public function setPagePath( $path ) {
150 $this->setPath( self
::PATH_PAGE
, $path );
154 * Sets the relative file path.
158 * @param string $path
160 public function setFilePath( $path ) {
161 $this->setPath( self
::PATH_FILE
, $path );
165 * @see Site::getPageUrl
167 * This implementation returns a URL constructed using the path returned by getLinkPath().
168 * In addition to the default behavior implemented by Site::getPageUrl(), this
169 * method converts the $pageName to DBKey-format by replacing spaces with underscores
170 * before using it in the URL.
174 * @param string|bool $pageName Page name or false (default: false)
178 public function getPageUrl( $pageName = false ) {
179 $url = $this->getLinkPath();
181 if ( $url === false ) {
185 if ( $pageName !== false ) {
186 $pageName = $this->toDBKey( trim( $pageName ) );
187 $url = str_replace( '$1', wfUrlencode( $pageName ), $url );
194 * Returns the full file path (ie site url + relative file path).
195 * The path should go at the $1 marker. If the $path
196 * argument is provided, the marker will be replaced by it's value.
200 * @param string|bool $path
204 public function getFileUrl( $path = false ) {
205 $filePath = $this->getPath( self
::PATH_FILE
);
207 if ( $filePath !== false ) {
208 $filePath = str_replace( '$1', $path, $filePath );