wiki.techinc.nl/includes/content/CssContent.php
Thiemo Kreuz 70027add5d Make use of the preg_match() return value, if possible
Instead of checking if the resulting $matches array is complete, we can
safely assume it is, as long as the preg_match() call returned a
non-false value.

Note that some of these used empty() before and are actually bogus
because of this! empty() considers the string "0" to be empty. In case
of a ==0== headline that's an actual bug.

I'm also removing the `= []` initialization before the preg_match.
I understand why it was added: to make it a little more obvious that the
variable is guaranteed to be initialized. But:
* This is guaranteed by the preg_match anyway.
* Neither initializing it with null or an empty array makes much sense
  because the code below assumes so much more, e.g. that specific
  elements exist, and are arrays. Again, these guarantees are all given
  by the preg_match.

I find the additional initialization more distracting than helpful.

Change-Id: I22b192b59038d9fa51a7e6f04d8d76634ae3de73
2020-07-14 19:26:35 +00:00

122 lines
3.1 KiB
PHP

<?php
/**
* Content object for CSS pages.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @since 1.21
*
* @file
* @ingroup Content
*
* @author Daniel Kinzler
*/
use MediaWiki\MediaWikiServices;
/**
* Content object for CSS pages.
*
* @newable
* @ingroup Content
*/
class CssContent extends TextContent {
/**
* @var bool|Title|null
*/
private $redirectTarget = false;
/**
* @stable to call
* @param string $text CSS code.
* @param string $modelId the content content model
*/
public function __construct( $text, $modelId = CONTENT_MODEL_CSS ) {
parent::__construct( $text, $modelId );
}
/**
* Returns a Content object with pre-save transformations applied using
* Parser::preSaveTransform().
*
* @param Title $title
* @param User $user
* @param ParserOptions $popts
*
* @return CssContent
*
* @see TextContent::preSaveTransform
*/
public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
// @todo Make pre-save transformation optional for script pages
$text = $this->getText();
$pst = MediaWikiServices::getInstance()->getParser()
->preSaveTransform( $text, $title, $user, $popts );
return new static( $pst );
}
/**
* @return string CSS wrapped in a <pre> tag.
*/
protected function getHtml() {
return Html::element( 'pre',
[ 'class' => 'mw-code mw-css', 'dir' => 'ltr' ],
"\n" . $this->getText() . "\n"
) . "\n";
}
/**
* @param Title $target
* @return CssContent
*/
public function updateRedirect( Title $target ) {
if ( !$this->isRedirect() ) {
return $this;
}
return $this->getContentHandler()->makeRedirectContent( $target );
}
/**
* @return Title|null
*/
public function getRedirectTarget() {
if ( $this->redirectTarget !== false ) {
return $this->redirectTarget;
}
$this->redirectTarget = null;
$text = $this->getText();
if ( strpos( $text, '/* #REDIRECT */' ) === 0 ) {
// Extract the title from the url
if ( preg_match( '/title=(.*?)&action=raw/', $text, $matches ) ) {
$title = Title::newFromText( urldecode( $matches[1] ) );
if ( $title ) {
// Have a title, check that the current content equals what
// the redirect content should be
if ( $this->equals( $this->getContentHandler()->makeRedirectContent( $title ) ) ) {
$this->redirectTarget = $title;
}
}
}
}
return $this->redirectTarget;
}
}