Обсуждение: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 и превосходно работает.