User:Ilmari Karonen/MetaKeywords

From mediawiki.org
<?php

$wgExtensionCredits['other'][] = array(
	'path' => __FILE__,
	'name' => "MetaKeywords",
	'description' => "Adds back the automatically generated meta keywords removed in r53482.",
	'version' => 1.0,
	'author' => "Ilmari Karonen",
	'url' => "http://www.mediawiki.org/wiki/User:Ilmari_Karonen/MetaKeywords",
);

$wgHooks['OutputPageParserOutput'][] = 'addMetaKeywords';

/**
 * This function takes the title (first item of mGoodLinks), categories,
 * existing and broken links for the page
 * and uses the first 10 of them for META keywords
 *
 * It's based on the code Brion removed in r53482, converted into an
 * OutputPageParserOutput hook by replacing $this with $out.  See bug
 * 19761 on bugzilla for details.
 *
 * @param OutputPage $out
 * @param ParserOutput $parserOutput
 */
function addMetaKeywords( $out, $parserOutput ) {
	global $wgContLang;
	// Get an array of keywords if there are more than one
	// variant of the site language
	$text = $wgContLang->autoConvertToAllVariants( $out->getTitle()->getPrefixedText());
	// array_values: We needn't to merge variant's code name
	// into $out->mKeywords;
	// array_unique: We should insert a keyword just for once
	if( is_array( $text ))
		$text = array_unique( array_values( $text ));
	$out->addKeyword( $text );
	$count = 1;
	$links2d =& $parserOutput->getLinks();
	if ( !is_array( $links2d ) ) {
		return;
	}
	foreach ( $links2d as $dbkeys ) {
		foreach( $dbkeys as $dbkey => $unused ) {
			$dbkey = $wgContLang->autoConvertToAllVariants( $dbkey );
			if( is_array( $dbkey ))
				$dbkey = array_unique( array_values( $dbkey ));
			$out>addKeyword( $dbkey );
			if ( ++$count > 10 ) {
				break 2;
			}
		}
	}
}