From 10619cde8eb1eef0f3a10544f2f4adefe5b0bf66 Mon Sep 17 00:00:00 2001 From: Daniel Friesen Date: Fri, 19 Nov 2010 01:40:59 +0000 Subject: [PATCH] Commit Description2 and OpenGraphMeta extensions --- Description2.php | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Description2.php diff --git a/Description2.php b/Description2.php new file mode 100644 index 0000000..dffb381 --- /dev/null +++ b/Description2.php @@ -0,0 +1,76 @@ + tag to MW pages and into the parser output + * Copyright 2010 Daniel Friesen + * + * @file + * @ingroup Extensions + * @author Daniel Friesen (http://mediawiki.org/wiki/User:Dantman) + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * + * 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. + */ + +if ( !defined( 'MEDIAWIKI' ) ) die( "This is an extension to the MediaWiki package and cannot be run standalone." ); + +$wgExtensionCredits['other'][] = array( + 'path' => __FILE__, + 'name' => 'Description2', + 'version' => "0.1", + 'author' => 'Daniel Friesen', + 'url' => 'http://www.mediawiki.org/wiki/Extension:Description2', + 'description' => 'Adds a description meta-tag to MW pages and into the ParserOutput for other extensions to use', +); + +$wgHooks['ParserAfterTidy'][] = 'egDescription2ParserAfterTidy'; +function egDescription2ParserAfterTidy( &$parser, &$text ) { + global $wgContLang; + $desc = ''; + + $myText = preg_replace('%]*+>(?:(?R)|[^<]*+(?:(?!%i', '', $text); + + $paragraphs = array(); + if ( preg_match_all('#

.*?

#is', $myText, $paragraphs) ) { + foreach ( $paragraphs[0] as $paragraph ) { + $paragraph = trim(strip_tags($paragraph)); + if ( !$paragraph ) + continue; + $desc = $paragraph; + break; + } + } + + if ( $desc ) { + $pOut = $parser->getOutput(); + $pOut->setProperty("description", $desc); + $pOut->addOutputHook("setdescription"); + } + + return true; +} + +$wgParserOutputHooks['setdescription'] = 'egDescription2ParserOutputSetDescription'; +function egDescription2ParserOutputSetDescription( $out, $parserOutput, $data ) { + // Export the description from the main parser output into the OutputPage + $out->mDescription = $parserOutput->getProperty("description"); +} + +$wgHooks['BeforePageDisplay'][] = 'egDescription2PageHook'; +function egDescription2PageHook( &$out, &$sk ) { + if ( isset($out->mDescription) && $out->mDescription ) + $out->addMeta("description", $out->mDescription); + return true; +} +