* Setting this to return true will ensure formatResult() is called
* one more time to make sure that the very last result is formatted
* as well.
+ * @return bool
*/
function tryLastResult() {
return false;
*
* @param $limit Integer: limit for SQL statement
* @param $ignoreErrors Boolean: whether to ignore database errors
+ * @return bool|int
*/
function recache( $limit, $ignoreErrors = true ) {
if ( !$this->isCacheable() ) {
/**
* Somewhat deprecated, you probably want to be using execute()
+ * @return \ResultWrapper
*/
function doQuery( $offset = false, $limit = false ) {
if ( $this->isCached() && $this->isCacheable() ) {
/**
* This is the actual workhorse. It does everything needed to make a
* real, honest-to-gosh query page.
+ * @return int
*/
function execute( $par ) {
global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
/**
* Similar to above, but packaging in a syndicated feed instead of a web page
+ * @return bool
*/
function doFeed( $class = '', $limit = 50 ) {
global $wgFeed, $wgFeedClasses;
/**
* Override for custom handling. If the titles/links are ok, just do
* feedItemDesc()
+ * @return FeedItem|null
*/
function feedResult( $row ) {
if ( !isset( $row->title ) ) {
* kluge for Special:WantedFiles, which may contain false
* positives for files that exist e.g. in a shared repo (bug
* 6220).
+ * @return bool
*/
function forceExistenceCheck() {
return false;
/**
* Return the list of revision fields that should be selected to create
* a new revision.
+ * @return array
*/
public static function selectFields() {
return array(
/**
* Return the list of text fields that should be selected to read the
* revision text
+ * @return array
*/
public static function selectTextFields() {
return array(
/**
* Return the list of page fields that should be selected from page table
+ * @return array
*/
public static function selectPageFields() {
return array(
/**
* Return the list of user fields that should be selected from user table
+ * @return array
*/
public static function selectUserFields() {
return array( 'user_name' );
/**
* Get the internal type name of this list. Equal to the table name.
* Override this function.
+ * @return null
*/
public function getType() {
return null;
/**
* Get the number of items in the list.
+ * @return int
*/
public function length() {
if( !$this->res ) {
/**
* Get the DB field name associated with the ID list.
* Override this function.
+ * @return null
*/
public function getIdField() {
return null;
/**
* Get the DB field name storing timestamps.
* Override this function.
+ * @return bool
*/
public function getTimestampField() {
return false;
/**
* Get the DB field name storing user ids.
* Override this function.
+ * @return bool
*/
public function getAuthorIdField() {
return false;
/**
* Get the DB field name storing user names.
* Override this function.
+ * @return bool
*/
public function getAuthorNameField() {
return false;
/**
* Get the ID, as it would appear in the ids URL parameter
+ * @return
*/
public function getId() {
$field = $this->getIdField();
/**
* Get the date, formatted in user's languae
+ * @return String
*/
public function formatDate() {
return $this->list->getLanguage()->userDate( $this->getTimestamp(),
/**
* Get the time, formatted in user's languae
+ * @return String
*/
public function formatTime() {
return $this->list->getLanguage()->userTime( $this->getTimestamp(),
/**
* Get the timestamp in MW 14-char form
+ * @return Mixed
*/
public function getTimestamp() {
$field = $this->getTimestampField();
/**
* Get the author user ID
+ * @return int
*/
public function getAuthorId() {
$field = $this->getAuthorIdField();
/**
* Get the author user name
+ * @return string
*/
public function getAuthorName() {
$field = $this->getAuthorNameField();
/**
* Get the HTML link to the revision text.
* Overridden by RevDel_ArchiveItem.
+ * @return string
*/
protected function getRevisionLink() {
$date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
/**
* Get the HTML link to the diff.
* Overridden by RevDel_ArchiveItem
+ * @return string
*/
protected function getDiffLink() {
if ( $this->isDeleted() && !$this->canViewContent() ) {
*
* @param $fname String Name of called method
* @param $args Array Arguments to the method
+ * @return mixed
*/
function __call( $fname, $args ) {
$realFunction = array( 'Linker', $fname );
/**
* This will be called immediately after the <body> tag. Split into
* two functions to make it easier to subclass.
+ * @return string
*/
function beforeContent() {
return $this->doBeforeContent();
return $this->doAfterContent();
}
- /** overloaded by derived classes */
+ /** overloaded by derived classes
+ * @return string
+ */
function doAfterContent() {
return '</div></div>';
}
/**
* Show a drop-down box of special pages
+ * @return string
*/
function specialPagesList() {
global $wgScript;
/**
* @deprecated in 1.19
+ * @return string
*/
function getQuickbarCompensator( $rows = 1 ) {
wfDeprecated( __METHOD__, '1.19' );
* This is setup as a method so that like with $wgLogo and getLogo() a skin
* can override this setting and always output one or the other if it has
* a reason it can't output one of the two modes.
+ * @return bool
*/
function useCombinedLoginLink() {
global $wgUseCombinedLoginLink;
/**
* @private
+ * @return bool
*/
function haveData( $str ) {
return isset( $this->data[$str] );
* stored by SkinTemplate.
* The resulting array is built acording to a format intended to be passed
* through makeListItem to generate the html.
+ * @return array
*/
function getToolbox() {
wfProfileIn( __METHOD__ );
* This is in reality the same list as already stored in personal_urls
* however it is reformatted so that you can just pass the individual items
* to makeListItem instead of hardcoding the element creation boilerplate.
+ * @return array
*/
function getPersonalTools() {
$personal_tools = array();
* A link-fallback can be used to specify a tag to use instead of <a> if there is
* no link. eg: If you specify 'link-fallback' => 'span' than any non-link will
* output a <span> instead of just text.
+ * @return string
*/
function makeLink( $key, $item, $options = array() ) {
if ( isset( $item['text'] ) ) {
* If you need an id or class on a single link you should include a "links"
* array with just one link item inside of it.
* $options is also passed on to makeLink calls
+ * @return string
*/
function makeListItem( $key, $item, $options = array() ) {
if ( isset( $item['links'] ) ) {
* If you pass "flat" as an option then the returned array will be a flat array
* of footer icons instead of a key/value array of footerlinks arrays broken
* up into categories.
+ * @return array|mixed
*/
function getFooterLinks( $option = null ) {
$footerlinks = $this->data['footerlinks'];
* in the list of footer icons. This is mostly useful for skins which only
* display the text from footericons instead of the images and don't want a
* duplicate copyright statement because footerlinks already rendered one.
+ * @return
*/
function getFooterIcons( $option = null ) {
// Generate additional footer icons
* Get the group that the special page belongs in on Special:SpecialPage
*
* @param $page SpecialPage
+ * @return String
*/
public static function getGroup( &$page ) {
$name = $page->getName();
* Factory function for fatal errors
*
* @param $message String: message name
+ * @return Status
*/
static function newFatal( $message /*, parameters...*/ ) {
$params = func_get_args();
* Factory function for good results
*
* @param $value Mixed
+ * @return Status
*/
static function newGood( $value = null ) {
$result = new self;
*
* @param $name String: name of the function called
* @param $args Array: arguments
+ * @return mixed
*/
function _call( $name, $args ) {
$this->_unstub( $name, 5 );
*
* @param $name String: name of the function called
* @param $args Array: arguments
+ * @return mixed
*/
function __call( $name, $args ) {
return $this->_call( $name, $args );
* This is MUCH simpler than individually testing for equivilance
* against both NS_USER and NS_USER_TALK, and is also forward compatible.
* @since 1.19
+ * @return bool
*/
public function hasSubjectNamespace( $ns ) {
return MWNamespace::subjectEquals( $this->getNamespace(), $ns );
* andthe wfArrayToCGI moved to getLocalURL();
*
* @since 1.19 (r105919)
+ * @return String
*/
private static function fixUrlQueryArgs( $query, $query2 = false ) {
if( $query2 !== false ) {
*
* @see self::getLocalURL
* @since 1.18
+ * @return string
*/
public function escapeCanonicalURL( $query = '', $query2 = false ) {
wfDeprecated( __METHOD__, '1.19' );
/**
* Converts a string into quoted-printable format
* @since 1.17
+ * @return string
*/
public static function quotedPrintable( $string, $charset = '' ) {
# Probably incomplete; see RFC 2045
/**
* Same as sendPersonalised but does impersonal mail suitable for bulk
* mailing. Takes an array of MailAddress objects.
+ * @return Status
*/
function sendImpersonal( $addresses ) {
global $wgContLang;
/**
* Replaces User::getUserGroups()
+ * @return array
*/
function getGroups() {
$res = $this->db->select( 'user_groups',
/**
* Override handling of action=purge
+ * @return bool
*/
public function doPurge() {
$this->loadFile();
/**
* Perform the actions of a page purging
+ * @return bool
*/
public function doPurge() {
global $wgUseSquid;
/**
* Prepare text which is about to be saved.
* Returns a stdclass with source, pst and output members
+ * @return bool|object
*/
public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
global $wgParser, $wgContLang, $wgUser;
*
* @param $resultDetails Array: contains result-specific array of additional values
* @param $guser User The user performing the rollback
+ * @return array
*/
public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser ) {
global $wgUseRCPatrol, $wgContLang;
/**
* @deprecated since 1.18
+ * @return bool
*/
public function useParserCache( $oldid ) {
wfDeprecated( __METHOD__, '1.18' );
/**
* @param $status Status
+ * @return bool
*/
function error( $status ) {
$this->error = $status;
* The values are passed to Sanitizer::encodeAttribute.
* Return null if no attributes given.
* @param $attribs Array of attributes for an XML element
+ * @return null|string
*/
public static function expandAttributes( $attribs ) {
$out = '';
/**
* Interpret ZIP64 "extra field" data and return an associative array.
+ * @return array|bool
*/
function unpackZip64Extra( $extraField ) {
$extraHeaderInfo = array(
* If there are not enough bytes in the file to satsify the request, the
* return value will be truncated. If a request is made for a segment beyond
* the end of the file, an empty string will be returned.
+ * @return string
*/
function getSegment( $segIndex ) {
if ( !isset( $this->buffer[$segIndex] ) ) {
/**
* Get the size of a structure in bytes. See unpack() for the format of $struct.
+ * @return int
*/
function getStructSize( $struct ) {
$size = 0;
/**
* Get the HTML link to the revision text.
* Overridden by RevDel_ArchiveItem.
+ * @return string
*/
protected function getRevisionLink() {
$date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
/**
* Get the HTML link to the diff.
* Overridden by RevDel_ArchiveItem
+ * @return string
*/
protected function getDiffLink() {
if ( $this->isDeleted() && !$this->canViewContent() ) {
/**
* Get the link to the file.
* Overridden by RevDel_ArchivedFileItem.
+ * @return string
*/
protected function getLink() {
$date = $this->list->getLanguage()->timeanddate( $this->file->getTimestamp(), true );
* Get the DB field name associated with the ID list.
* This used to populate the log_search table for finding log entries.
* Override this function.
+ * @return null
*/
public static function getRelationType() {
return null;
/**
* Get the log action for this list type
+ * @return string
*/
public function getLogAction() {
return 'revision';
* Returns true if the item is "current", and the operation to set the given
* bits can't be executed for that reason
* STUB
+ * @return bool
*/
public function isHideCurrentOp( $newBits ) {
return false;
/**
* If this search backend can list/unlist redirects
* @deprecated since 1.18 Call supports( 'list-redirects' );
+ * @return bool
*/
function acceptListRedirects() {
wfDeprecated( __METHOD__, '1.18' );
/**
* Really find the title match.
+ * @return null|\Title
*/
private static function getNearMatchInternal( $searchterm ) {
global $wgContLang, $wgEnableSearchContributorsByIP;
* or namespace names
*
* @param $query String
+ * @return string
*/
function replacePrefixes( $query ) {
global $wgContLang;
* and preferences
*
* @param $namespaces Array
+ * @return array
*/
public static function namespacesAsText( $namespaces ) {
global $wgContLang;
* Do manual case conversion for non-ascii chars
*
* @param $matches Array
+ * @return string
*/
function caseCallback( $matches ) {
global $wgContLang;
/**
* Basic wikitext removal
* @protected
+ * @return mixed
*/
function removeWiki( $text ) {
$fname = __METHOD__;
* The guts shoulds be constructed in queryMain()
* @param $filteredTerm String
* @param $fulltext Boolean
+ * @return String
*/
function getQuery( $filteredTerm, $fulltext ) {
return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' .
'WHERE page_id=si_page AND ' . $match;
}
- /** @todo document */
+ /** @todo document
+ * @return string
+ */
function parseQuery($filteredText, $fulltext) {
global $wgContLang;
$lc = SearchEngine::legalSearchChars();
*
* @param $filteredTerm String
* @param $fulltext Boolean
+ * @return String
*/
function getQuery( $filteredTerm, $fulltext ) {
return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
'WHERE page_id=ftindex.[KEY] ';
}
- /** @todo document */
+ /** @todo document
+ * @return string
+ */
function parseQuery( $filteredText, $fulltext ) {
global $wgContLang;
$lc = SearchEngine::legalSearchChars();
* @param $id Integer
* @param $title String
* @param $text String
+ * @return bool|\ResultWrapper
*/
function update( $id, $title, $text ) {
// We store the column data as UTF-8 byte order marked binary stream
*
* @param $id Integer
* @param $title String
+ * @return bool|\ResultWrapper
*/
function updateTitle( $id, $title ) {
$table = $this->db->tableName( 'searchindex' );
/**
* @since 1.18 (changed)
+ * @return array
*/
function getCountQuery( $filteredTerm, $fulltext ) {
$match = $this->parseQuery( $filteredTerm, $fulltext );
/**
* Converts some characters for MySQL's indexing to grok it correctly,
* and pads short words to overcome limitations.
+ * @return mixed|string
*/
function normalizeText( $string ) {
global $wgContLang;
* Armor a case-folded UTF-8 string to get through MySQL's
* fulltext search without being mucked up by funny charset
* settings or anything else of the sort.
+ * @return string
*/
protected function stripForSearchCallback( $matches ) {
return 'u8' . bin2hex( $matches[1] );
* The guts shoulds be constructed in queryMain()
* @param $filteredTerm String
* @param $fulltext Boolean
+ * @return String
*/
function getQuery( $filteredTerm, $fulltext ) {
return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' .
/**
* Parse a user input search string, and return an SQL fragment to be used
* as part of a WHERE clause
+ * @return string
*/
function parseQuery($filteredText, $fulltext) {
global $wgContLang;
* @param $term String
* @param $fulltext String
* @param $colname
+ * @return string
*/
function searchQuery( $term, $fulltext, $colname ) {
# Get the SQL fragment for the given term
* The guts shoulds be constructed in queryMain()
* @param $filteredTerm String
* @param $fulltext Boolean
+ * @return String
*/
function getQuery( $filteredTerm, $fulltext ) {
return $this->limitResult(
/**
* This function normally does a database query to get the results; we need
* to make a pretend result using a FakeResultWrapper.
+ * @return \FakeResultWrapper
*/
function reallyDoQuery( $offset, $limit, $descending ) {
$result = new FakeResultWrapper( array() );
* @param $namespace Integer: a namespace constant (default NS_MAIN).
* @param $from String: dbKey we are starting listing at.
* @param $to String: dbKey we are ending listing at.
+ * @return string
*/
function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '' ) {
global $wgScript;
* @param $inpoint String: lower limit of pagenames
* @param $outpoint String: upper limit of pagenames
* @param $namespace Integer (Default NS_MAIN)
+ * @return string
*/
function showline( $inpoint, $outpoint, $namespace = NS_MAIN ) {
global $wgContLang;
/**
* Add header elements like block log entries, etc.
+ * @return String
*/
protected function preText(){
$text = $this->msg( 'blockiptext' )->parse();
/**
* Returns whether a given ISBN (10 or 13) is valid. True indicates validity.
* @param isbn string ISBN passed for check
+ * @return bool
*/
public static function isValidISBN( $isbn ) {
$isbn = self::cleanIsbn( $isbn );
/**
* Do a batched query to get the parent revision lengths
+ * @return array
*/
private function getParentLengths( array $revIds ) {
$revLens = array();
* was not written by the target user.
*
* @todo This would probably look a lot nicer in a table.
+ * @return string
*/
function formatRow( $row ) {
wfProfileIn( __METHOD__ );
/**
* Overwrite Pager function and return a helpful comment
+ * @return string
*/
function getSqlComment() {
if ( $this->namespace || $this->deletedOnly ) {
* written by the target user.
*
* @todo This would probably look a lot nicer in a table.
+ * @return string
*/
function formatRow( $row ) {
wfProfileIn( __METHOD__ );
/**
* Generates the namespace selector form with hidden attributes.
* @param $options Array: the options to be included.
+ * @return string
*/
function getForm( $options ) {
global $wgScript;
/**
* Expand a list of pages to include items used in those pages.
+ * @return array
*/
private function getLinks( $inputPages, $pageSet, $table, $fields, $join ) {
$dbr = wfGetDB( DB_SLAVE );
/**
* @param $skin Skin object
* @param $result Object: database row
+ * @return String
*/
function formatResult( $skin, $result ) {
global $wgContLang;
* be thrown.
* @param $html String: The raw HTML.
* @param $state String: State, one of 'noframework', 'unknownframework' or 'frameworkfound'
+ * @return string
*/
private function wrapSummaryHtml( $html, $state ) {
$validStates = array( 'noframework', 'unknownframework', 'frameworkfound' );
/**
* Disable RSS/Atom feeds
+ * @return bool
*/
function isSyndicated() {
return false;
* We do a truncated index search, so the optimizer won't trust
* it as good enough for optimizing sort. The implicit ordering
* from the scan will usually do well enough for our needs.
+ * @return array
*/
function getOrderFields() {
return array();
* HTML for the top form
* @param $namespace Integer: a namespace constant (default NS_MAIN).
* @param $from String: dbKey we are starting listing at.
- */
+ * @return string
+ */
function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) {
global $wgScript;
* @param $namespace Integer:
* @param $type string
* @param $level string
+ * @return string
* @private
*/
function showOptions( $namespace, $type='edit', $level ) {
/**
* Get the query string to append to feed link URLs.
* This is overridden by RCL to add the target parameter
+ * @return bool
*/
public function getFeedQuery() {
return false;
* @param $override Array: options to override
* @param $options Array: current options
* @param $active Boolean: whether to show the link in bold
+ * @return string
*/
function makeOptionsLink( $title, $override, $options, $active = false ) {
$params = $override + $options;
*
* @param $defaults Array
* @param $nondefaults Array
+ * @return string
*/
function optionsPanel( $defaults, $nondefaults ) {
global $wgRCLinkLimits, $wgRCLinkDays;
/**
* Get the condition used for fetching log snippets
+ * @return array
*/
protected function getLogQueryCond() {
$conds = array();
/**
* UI entry point for form submission.
+ * @return bool
*/
protected function submit() {
# Check edit token on submission
/**
* Do the write operations. Simple wrapper for RevDel_*List::setVisibility().
+ * @return
*/
protected function save( $bitfield, $reason, $title ) {
return $this->getList()->setVisibility(
/**
* Submit callback for an HTMLForm object
+ * @return \Array( Array(message key, parameters)
*/
public static function processUIUnblock( array $data, HTMLForm $form ) {
return self::processUnblock( $data, $form->getContext() );
/**
* A should come before Z (bug 30907)
+ * @return bool
*/
function sortDescending() {
return false;
* n.b. Most sanity checking done in UploadStashLocalFile, so this is straightforward.
*
* @param $key String: the key of a particular requested file
+ * @return bool
*/
public function showUpload( $key ) {
// prevent callers from doing standard HTML output -- we'll take it from here
* Side effect: writes HTTP response to STDOUT.
*
* @param $file File object with a local path (e.g. UnregisteredLocalFile, LocalFile. Oddly these don't share an ancestor!)
+ * @return bool
*/
private function outputLocalFile( File $file ) {
if ( $file->getSize() > self::MAX_SERVE_BYTES ) {
* Side effect: writes HTTP response to STDOUT.
* @param String $content: content
* @param String $mimeType: mime type
+ * @return bool
*/
private function outputContents( $content, $contentType ) {
$size = strlen( $content );
* Default action when we don't have a subpage -- just show links to the uploads we have,
* Also show a button to clear stashed files
* @param Status : $status - the result of processRequest
+ * @return bool
*/
private function showUploads( $status = null ) {
if ( $status === null ) {
/**
* @private
+ * @return bool|void
*/
function addNewAccount() {
global $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
/**
* @private
+ * @return bool|\User
*/
function addNewAccountInternal() {
global $wgAuth, $wgMemc, $wgAccountCreationThrottle,
* This may create a local account as a side effect if the
* authentication plugin allows transparent local account
* creation.
+ * @return int
*/
public function authenticateUserData() {
global $wgUser, $wgAuth;
* previous pass through the system.
*
* @private
+ * @return bool
*/
function hasSessionCookie() {
global $wgDisableCookieCheck;
/**
* Get the login token from the current session
+ * @return Mixed
*/
public static function getLoginToken() {
global $wgRequest;
/**
* Get the createaccount token from the current session
+ * @return Mixed
*/
public static function getCreateaccountToken() {
global $wgRequest;
/**
* @private
+ * @return void
*/
function cookieRedirectCheck( $type ) {
$titleObj = SpecialPage::getTitleFor( 'Userlogin' );
*
* @param $text Link text
* @param $lang Language code
+ * @return string
*/
function makeLanguageSelectorLink( $text, $lang ) {
$attr = array( 'uselang' => $lang );
/**
* Callback to sort extensions by type.
+ * @return int
*/
function compare( $a, $b ) {
if( $a['name'] === $b['name'] ) {
* url The subversion URL of the directory
* repo-url The base URL of the repository
* viewvc-url A ViewVC URL pointing to the checked-out revision
+ * @return array|bool
*/
public static function getSvnInfo( $dir ) {
// http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html
* that exist e.g. in a shared repo. Setting this at least
* keeps them from showing up as redlinks in the output, even
* if it doesn't fix the real problem (bug 6220).
+ * @return bool
*/
function forceExistenceCheck() {
return true;
/**
* Returns true if uploads are enabled.
* Can be override by subclasses.
+ * @return bool
*/
public static function isEnabled() {
global $wgEnableUploads;
* Can be overriden by subclasses.
*
* @param $user User
+ * @return bool
*/
public static function isAllowed( $user ) {
foreach ( array( 'upload', 'edit' ) as $permission ) {
*
* @param $request WebRequest
* @param $type
+ * @return null
*/
public static function createFromRequest( &$request, $type = null ) {
$type = $type ? $type : $request->getVal( 'wpSourceType', 'File' );
/**
* Check whether a request if valid for this handler
+ * @return bool
*/
public static function isValidRequest( $request ) {
return false;
/**
* Fetch the file. Usually a no-op
+ * @return Status
*/
public function fetchFile() {
return Status::newGood();
/**
* @todo Replace this with a whitelist filter!
+ * @return bool
*/
public function checkSvgScriptCallback( $element, $attribs ) {
$stripped = $this->stripXmlNamespace( $element );
/**
* Helper function that checks whether the filename looks like a thumbnail
+ * @return bool
*/
public static function isThumbName( $filename ) {
$n = strrpos( $filename, '.' );
/**
* Returns the virtual chunk location:
* @param $index
+ * @return string
*/
function getVirtualChunkLocation( $index ){
return $this->repo->getVirtualUrl( 'temp' ) .
* Output the chunk to disk
*
* @param $chunkPath string
+ * @return \FileRepoStatus
*/
private function outputChunk( $chunkPath ){
// Key is fileKey + chunk index
/**
* @param $request WebRequest
+ * @return null
*/
function initializeFromRequest( &$request ) {
$upload = $request->getUpload( 'wpUploadFile' );
* Initialize from a filename and a WebRequestUpload
* @param $name
* @param $webRequestUpload
+ * @return null
*/
function initialize( $name, $webRequestUpload ) {
$this->mUpload = $webRequestUpload;
/**
* Wrapper around the parent function in order to defer verifying the
* upload until the file really has been fetched.
+ * @return array|mixed
*/
public function verifyUpload() {
if ( $this->mAsync ) {
/**
* Wrapper around the parent function in order to defer checking warnings
* until the file really has been fetched.
+ * @return Array
*/
public function checkWarnings() {
if ( $this->mAsync ) {
/**
* Wrapper around the parent function in order to defer checking protection
* until we are sure that the file can actually be uploaded
+ * @return bool|mixed
*/
public function verifyTitlePermissions( $user ) {
if ( $this->mAsync ) {
/**
* Wrapper around the parent function in order to defer uploading to the
* job queue for asynchronous uploads
+ * @return Status
*/
public function performUpload( $comment, $pageText, $watch, $user ) {
if ( $this->mAsync ) {
* with an extension.
* XXX this is somewhat redundant with the checks that ApiUpload.php does with incoming
* uploads versus the desired filename. Maybe we can get that passed to us...
+ * @return string
*/
public static function getExtensionForPath( $path ) {
// Does this have an extension?