Обсуждение:EmbedVideo
В MW 1.16 изменилась система сообщений и расширение перестало работать. Я внёс в него изменения.
Александр Машин 17:30, 7 августа 2010 (UTC)
Чёрт знает что такое. Я в растерянности. В Release Notes сказано всего-навсего:
* $wgMessageCache->addMessages() is deprecated. Messages added via this interface will not appear in Special:AllMessages.
так что я полагал, что простой deprecated вообще-то не должен был вызвать неработоспособность расширения. В чём неработоспособность проявляется? (Спрашиваю для того, чтобы самому мне не устраивать тесты.) —Mithgol the Webmaster 05:27, 8 августа 2010 (UTC)
- Вместо видеоролика появлялось имя сообщения в угловых скобках.
Александр Машин 06:21, 8 августа 2010 (UTC)
Улучшения[править код]
Я несколько исправил код расширения, удалив давно устаревшие элементы, улучшив код, исправив описание (переведено на русский язык) и добавив сервис moskva.fm, но внести изменения в статью не могу: она защищена. Так что я приведу здесь изменения в формате диффа с опубликованной версией, а вы внесите их, коли посчитаете нужным:
Index: EmbedVideo/EmbedVideo.php
===================================================================
--- EmbedVideo/EmbedVideo.php (revision 5)
+++ EmbedVideo/EmbedVideo.php (working copy)
@@ -1,8 +1,8 @@
/*
* EmbedVideo.php - Adds a parser function embedding video and audio from popular sources.
* @author Mithgol the Webmaster, based on the work by Jim R. Wilson and contributions of Alex Mashin
- * @version 0.1.2.Mithgol.25
+ * @version 0.1.2.WikiLogia.27
* @copyright (C) 2007 Jim R. Wilson, (C) 2008-2010 Mithgol the Webmaster, (C) 2010 Alex Mashin
* @license The MIT License - http://www.opensource.org/licenses/mit-license.php
* ------------------------------------------------------------------------------------------------------
@@ -13,11 +13,13 @@
* MediaWiki 1.6.x, 1.9.x, 1.10.x or higher
* PHP 4.x, 5.x or higher.
* Installation:
- * 1. Drop this script (EmbedVideo.php) in $IP/extensions
+ * 1. Drop this script (EmbedVideo.php) in $IP/extensions/EmbedVideo
* Note: $IP is your MediaWiki install dir.
* 2. Enable the extension by adding this line to your LocalSettings.php:
- * require_once('extensions/EmbedVideo.php');
+ * require_once('extensions/EmbedVideo/EmbedVideo.php');
* Version Notes:
+ * version 0.1.2.WikiLogia.27:
+ * Added support for http://moskva.fm/, small fixes and code cleanup.
* version 0.1.2.Mashin.26:
* Removed a fatal error under MW 1.17 (lines 163-164).
* version 0.1.2.Mithgol.25:
@@ -128,44 +130,35 @@
*/
# Confirm MW environment
-if (defined('MEDIAWIKI')) {
+if( !defined('MEDIAWIKI') ) {
+ exit(1);
+}
# Credits
$wgExtensionCredits['parserhook'][] = array(
- 'name'=>'EmbedVideo',
- 'author'=>'Mithgol the Webmaster (based on the work by Jim R. Wilson and contributions of Alex Mashin)',
- 'url'=>'http://traditio.ru/wiki/EmbedVideo',
- 'description'=>'Adds a parser function embedding video and audio and panoramas from popular sources.',
- 'version'=>'0.1.2.26'
+ 'path' => __FILE__,
+ 'name' => 'EmbedVideo',
+ 'author' => 'Mithgol the Webmaster (based on the work by Jim R. Wilson and contributions of Alex Mashin)',
+ 'url' => 'http://traditio.ru/wiki/EmbedVideo',
+ 'description' => 'Позволяет включать видео, аудио и панорамы из внешних источников.',
+ 'version' => '0.1.2.27'
);
// Messages:
-$wgExtensionMessagesFiles ['embedvideo'] = dirname(__FILE__) . '/' . 'EmbedVideo.i18n.php';
+$wgExtensionMessagesFiles['EmbedVideo'] = dirname(__FILE__) . '/' . 'EmbedVideo.i18n.php';
/**
* Wrapper class for encapsulating EmbedVideo related parser methods
*/
class EmbedVideo {
-
- protected static $initialized = false;
-
/**
* Sets up parser functions.
*/
- function setup( ) {
-
+ public static function setup() {
# Setup parser hook
global $wgParser, $wgVersion;
$hook = (version_compare($wgVersion, '1.7', '<')?'#ev':'ev');
$wgParser->setFunctionHook( $hook, array($this, 'parserFunction') );
-
- # Add system messages:
- if (!EmbedVideo::$initialized) {
- wfLoadExtensionMessages('embedvideo');
- // Commented out on June 25th, 2011 by Alexander Mashin as this caused a fatal error under MW 1.17:
- // $wgParser->disableCache();
- EmbedVideo::$initialized = true;
- }
}
/**
@@ -174,7 +167,7 @@
* @param String $langCode
* @return Boolean Always true
*/
- function parserFunctionMagic( &$magicWords, $langCode='en' ) {
+ public static function parserFunctionMagic( &$magicWords, $langCode='en' ) {
$magicWords['ev'] = array( 0, 'ev' );
return true;
}
@@ -188,7 +181,7 @@
* @param String $height Height of video (optional)
* @return String Encoded representation of input params (to be processed later)
*/
- function parserFunction( $parser, $service=null, $id=null, $width=null, $height=null ) {
+ public static function parserFunction( $parser, $service = null, $id = null, $width = null, $height = null ) {
if ($service===null || $id===null) return '<div class="errorbox">'.wfMsg('embedvideo-missing-params').'</div>';
$params = array(
@@ -269,19 +262,8 @@
*/
# Create global instance and wire it up!
-$wgEmbedVideo = new EmbedVideo();
-$wgExtensionFunctions[] = array($wgEmbedVideo, 'setup');
-if (version_compare($wgVersion, '1.7', '<')) {
- # Hack solution to resolve 1.6 array parameter nullification for hook args
- function wfEmbedVideoLanguageGetMagic( &$magicWords ) {
- global $wgEmbedVideo;
- $wgEmbedVideo->parserFunctionMagic( $magicWords );
- return true;
- }
- $wgHooks['LanguageGetMagic'][] = 'wfEmbedVideoLanguageGetMagic';
-} else {
- $wgHooks['LanguageGetMagic'][] = array($wgEmbedVideo, 'parserFunctionMagic');
-}
+$wgExtensionFunctions[] = 'EmbedVideo::setup';
+$wgHooks['LanguageGetMagic'][] = 'EmbedVideo::parserFunctionMagic';
/*
* Now starting the list of services.
@@ -412,8 +394,11 @@
'url' => 'http://www.ustream.tv/flash/viewer.swf?cid=$1',
'default_width' => 360,
'default_height' => 226
- )
-);
-
-} # End MW Environment wrapper
-?>
\ No newline at end of file
+ ),
+ 'moskvafm' => array(
+ 'id_pattern' => '/^station=[01-9]+&time=[01-9]+$/',
+ 'url' => 'http://www.moskva.fm/f/p2.swf?$1&playlen=360&load=xml&playerxml=player_xml.html&flxml=flxml.html&siteurl=http://www.moskva.fm/',
+ 'default_width' => 320,
+ 'default_height' => 230
+ ),
+);
\ No newline at end of file
Пояснения ко внесённым мною изменениям:
- $IP/extensions заменено на $IP/extensions/EmbedVideo — кабы в расширении теперь два файла, уместно положить их в отдельную папку;
- Добавлено 'path' => __FILE__, обеспечивающее в частности отображение svn-овой ревизии, коли таковая имеется, возможно делает ещё что-то полезное;
- Вычищено wfLoadExtensionMessages('embedvideo'); и связанное с этим шаманство — wfLoadExtensionMessages считается устаревшей функцией и более не применяется;
- Устранена проверка на старые версии — поддерживать 1.7 смысла нет, ибо это очень устаревшая версия, с многочисленными дырами, и всем, кому нужна нормальная вики, надо рекомендовать обновить движок до новой версии — в наличии есть 1.18.
Замечания:
- Полагаю, лучше было бы чрезмерно большое описание расширения вынести во что-то типа HISTORY, а в заголовке оставить только основную информацию (номер последней версии, например).
Ревизия тестирована на 1.18rc1 и превосходно работает.