extractRequestParams(); $title = Title::newFromText( $params['page'] ); if ( !$title ) { $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['page'] ) ] ); } $revision = $this->getValidRevision( $title, $params['oldid'] ?? null ); $parser = $this->parseRevision( $revision ); $threadItems = $parser->getThreadItems(); $transcludedFrom = []; foreach ( $threadItems as $threadItem ) { $from = $threadItem->getTranscludedFrom(); // Key by IDs, legacy IDs, and names. This assumes that they can never conflict. $transcludedFrom[ $threadItem->getId() ] = $from; $legacyId = $threadItem->getLegacyId(); if ( $legacyId ) { $transcludedFrom[ $legacyId ] = $from; } $name = $threadItem->getName(); if ( isset( $transcludedFrom[ $name ] ) && $transcludedFrom[ $name ] !== $from ) { // Two or more items with the same name, transcluded from different pages. // Consider them both to be transcluded from unknown source. $transcludedFrom[ $name ] = true; } else { $transcludedFrom[ $name ] = $from; } } $result = [ 'transcludedfrom' => $transcludedFrom ]; $this->getResult()->addValue( null, $this->getModuleName(), $result ); } /** * @inheritDoc */ public function getAllowedParams() { return [ 'page' => [ ParamValidator::PARAM_REQUIRED => true, ApiBase::PARAM_HELP_MSG => 'apihelp-visualeditoredit-param-page', ], 'oldid' => null, ]; } /** * @inheritDoc */ public function needsToken() { return false; } /** * @inheritDoc */ public function isInternal() { return true; } /** * @inheritDoc */ public function isWriteMode() { return false; } }