// Listed in Special:Specialpages?
private $mListed;
- // Function name called by the default execute()
- private $mFunction;
-
- // File which needs to be included before the function above can be called
- private $mFile;
-
// Whether or not this special page is being included from an article
protected $mIncluding;
* @param string $name Name of the special page, as seen in links and URLs
* @param string $restriction User right required, e.g. "block" or "delete"
* @param bool $listed Whether the page is listed in Special:Specialpages
- * @param callable|bool $function Function called by execute(). By default
- * it is constructed from $name
- * @param string $file File which is included by execute(). It is also
- * constructed from $name by default
+ * @param callable|bool $function unused
+ * @param string $file unused
* @param bool $includable Whether the page can be included in normal pages
*/
public function __construct(
$name = '', $restriction = '', $listed = true,
- $function = false, $file = 'default', $includable = false
+ $function = false, $file = '', $includable = false
) {
$this->mName = $name;
$this->mRestriction = $restriction;
$this->mListed = $listed;
$this->mIncludable = $includable;
- if ( !$function ) {
- $this->mFunction = 'wfSpecial' . $name;
- } else {
- $this->mFunction = $function;
- }
- if ( $file === 'default' ) {
- $this->mFile = __DIR__ . "/specials/Special$name.php";
- } else {
- $this->mFile = $file;
- }
}
/**
return $this->mRestriction;
}
- /**
- * Get the file which will be included by SpecialPage::execute() if your extension is
- * still stuck in the past and hasn't overridden the execute() method. No modern code
- * should want or need to know this.
- * @return string
- * @deprecated since 1.18
- */
- function getFile() {
- wfDeprecated( __METHOD__, '1.18' );
-
- return $this->mFile;
- }
-
// @todo FIXME: Decide which syntax to use for this, and stick to it
/**
* Whether this special page is listed in Special:SpecialPages
}
}
+ /**
+ * Return an array of subpages beginning with $search that this special page will accept.
+ *
+ * For example, if a page supports subpages "foo", "bar" and "baz" (as in Special:PageName/foo,
+ * etc.):
+ *
+ * - `prefixSearchSubpages( "ba" )` should return `array( "bar", "baz" )`
+ * - `prefixSearchSubpages( "f" )` should return `array( "foo" )`
+ * - `prefixSearchSubpages( "z" )` should return `array()`
+ * - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
+ *
+ * @param string $search Prefix to search for
+ * @param integer $limit Maximum number of results to return
+ * @return string[] Matching subpages
+ */
+ public function prefixSearchSubpages( $search, $limit = 10 ) {
+ return array();
+ }
+
+ /**
+ * Helper function for implementations of prefixSearchSubpages() that
+ * filter the values in memory (as oppposed to making a query).
+ *
+ * @since 1.24
+ * @param string $search
+ * @param int $limit
+ * @param array $subpages
+ * @return string[]
+ */
+ protected static function prefixSearchArray( $search, $limit, array $subpages ) {
+ $escaped = preg_quote( $search, '/' );
+ return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+ }
+
/**
* Sets headers - this should be called from the execute() method of all derived classes!
*/
/**
* Default execute method
- * Checks user permissions, calls the function given in mFunction
+ * Checks user permissions
*
* This must be overridden by subclasses; it will be made abstract in a future version
*
public function execute( $subPage ) {
$this->setHeaders();
$this->checkPermissions();
-
- $func = $this->mFunction;
- // only load file if the function does not exist
- if ( !is_callable( $func ) && $this->mFile ) {
- require_once $this->mFile;
- }
$this->outputHeader();
- call_user_func( $func, $subPage, $this );
}
/**
/**
* Shortcut to get user's language
*
- * @deprecated since 1.19 Use getLanguage instead
* @return Language
- * @since 1.18
+ * @since 1.19
*/
- public function getLang() {
- wfDeprecated( __METHOD__, '1.19' );
-
- return $this->getLanguage();
+ public function getLanguage() {
+ return $this->getContext()->getLanguage();
}
/**
- * Shortcut to get user's language
- *
- * @return Language
- * @since 1.19
+ * Shortcut to get main config object
+ * @return Config
+ * @since 1.24
*/
- public function getLanguage() {
- return $this->getContext()->getLanguage();
+ public function getConfig() {
+ return $this->getContext()->getConfig();
}
/**