Mainframe98 has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/405369 )

Change subject: Implement Special:UnusedVideos
......................................................................

Implement Special:UnusedVideos

Bug: T184902
Change-Id: I4304a022eda96e14820dd9351e2bc09918e7dcb7
---
M extension.json
M i18n/en.json
M i18n/qqq.json
M includes/Video.alias.php
M includes/Video.hooks.php
A includes/specials/SpecialUnusedVideos.php
6 files changed, 140 insertions(+), 37 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Video 
refs/changes/69/405369/1

diff --git a/extension.json b/extension.json
index 5ca8bf9..4855cbb 100644
--- a/extension.json
+++ b/extension.json
@@ -1,10 +1,11 @@
 {
        "name": "Video",
-       "version": "1.7.2",
+       "version": "1.8.2",
        "author": [
                "David Pean",
                "Jack Phoenix",
-               "John Du Hart"
+               "John Du Hart",
+               "Mainframe98"
        ],
        "license-name": "GPL-2.0+",
        "url": "https://www.mediawiki.org/wiki/Extension:Video";,
@@ -13,7 +14,8 @@
        "SpecialPages": {
                "AddVideo": "AddVideo",
                "NewVideos": "NewVideos",
-               "Undelete": "SpecialUndeleteWithVideoSupport"
+               "Undelete": "SpecialUndeleteWithVideoSupport",
+               "UnusedVideos": "SpecialUnusedVideos"
        },
        "MessagesDirs": {
                "Video": [
@@ -68,7 +70,8 @@
                "NewVideos": "includes/specials/SpecialNewVideos.php",
                "SpecialUndeleteWithVideoSupport": 
"includes/specials/SpecialUndeleteWithVideoSupport.php",
                "VideoHooks": "includes/Video.hooks.php",
-               "NewVideosPager": "includes/specials/pagers/NewVideosPager.php"
+               "NewVideosPager": "includes/specials/pagers/NewVideosPager.php",
+               "SpecialUnusedVideos": 
"includes/specials/SpecialUnusedVideos.php"
        },
        "Hooks": {
                "ArticleFromTitle": [
@@ -105,6 +108,9 @@
                ],
                "CanonicalNamespaces": [
                        "VideoHooks::onCanonicalNamespaces"
+               ],
+               "wgQueryPages": [
+                       "VideoHooks::onwgQueryPages"
                ]
        },
        "ResourceFileModulePaths": {
diff --git a/i18n/en.json b/i18n/en.json
index a3d13d4..f165bc1 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -8,6 +8,7 @@
        "video-desc": "Allows new Video namespace for embeddable media on 
supported sites",
        "addvideo": "Add video",
        "newvideos": "New videos",
+       "unusedvideos": "Unused videos",
        "video-upload-new-version": "Upload a new version of this video",
        "video-newvideos-showfrom": "Show new videos starting from $2, $1",
        "video-newvideos-list-text": "Below is a list of <strong>$1</strong> 
{{PLURAL:$1|video|videos}}.",
@@ -45,5 +46,6 @@
        "video-showhidebots": "($1 bots)",
        "action-addvideo": "add videos from external services into the site",
        "right-addvideo": "Add videos from external services into the site",
-       "video-hidebots": "Hide uploads by bots"
+       "video-hidebots": "Hide uploads by bots",
+       "unusedvideos-summary": "The following videos have been added to the 
wiki but are not used on any pages. Please note that other web sites may link 
to a file with a direct URL, and so may still be listed here despite being in 
active use."
 }
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 139fdd9..d6f1ccb 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -47,5 +47,6 @@
        "video-showhidebots": "This is shown on the special page 
[[Special:NewVideos]]. The format is 
\"{{int:video-showhidebots|[[MediaWiki:Hide/{{SUBPAGENAME}}|{{int:hide}}]]}}\" 
or 
\"{{int:showhidebots|[[MediaWiki:Show/{{SUBPAGENAME}}|{{int:show}}]]}}\"\n\n{{Identical|$1
 bots}}",
        "action-addvideo": "{{doc-action|addvideo}}",
        "right-addvideo": "{{doc-right|addvideo}}",
-       "video-hidebots": "Used as label for a checkbox. When unchecked, 
[[Special:NewVideos]] will also display uploads by users in the bots group."
+       "video-hidebots": "Used as label for a checkbox. When unchecked, 
[[Special:NewVideos]] will also display uploads by users in the bots group.",
+       "unusedvideos-summary": "Header message of [[Special:UnusedVideos]]"
 }
diff --git a/includes/Video.alias.php b/includes/Video.alias.php
index 2967215..ea954ae 100644
--- a/includes/Video.alias.php
+++ b/includes/Video.alias.php
@@ -6,28 +6,30 @@
  * @ingroup Extensions
  */
 
-$specialPageAliases = array();
+$specialPageAliases = [];
 
 /** English */
-$specialPageAliases['en'] = array(
-       'AddVideo' => array( 'AddVideo' ),
-       'NewVideos' => array( 'NewVideos' ),
-);
+$specialPageAliases['en'] = [
+       'AddVideo' => [ 'AddVideo' ],
+       'NewVideos' => [ 'NewVideos' ],
+       'UnusedVideos' => [ 'UnusedVideos' ],
+];
 
 /** Finnish (Suomi) */
-$specialPageAliases['fi'] = array(
-       'AddVideo' => array( 'Lisää video' ),
-       'NewVideos' => array( 'Uudet videot' ),
-);
+$specialPageAliases['fi'] = [
+       'AddVideo' => [ 'Lisää video' ],
+       'NewVideos' => [ 'Uudet videot' ],
+];
 
 /** French (Français) */
-$specialPageAliases['fr'] = array(
-       'AddVideo' => array( 'Ajouter vidéo', 'Ajouter video', 'AjouterVidéo', 
'AjouterVideo' ),
-       'NewVideos' => array( 'Nouvelles vidéos', 'Nouvelles videos', 
'NouvellesVidéos', 'NouvellesVideos' ),
-);
+$specialPageAliases['fr'] = [
+       'AddVideo' => [ 'Ajouter vidéo', 'Ajouter video', 'AjouterVidéo', 
'AjouterVideo' ],
+       'NewVideos' => [ 'Nouvelles vidéos', 'Nouvelles videos', 
'NouvellesVidéos', 'NouvellesVideos' ],
+];
 
 /** Dutch (Nederlands) */
-$specialPageAliases['nl'] = array(
-       'AddVideo' => array( 'VideoToevoegen', 'Video toevoegen' ),
-       'NewVideos' => array( "NieuweVideos", "NieuweVideo's", 'NieuweVideo’s', 
"Nieuwe video's", 'Nieuwe video’s' ),
-);
+$specialPageAliases['nl'] = [
+       'AddVideo' => [ 'VideoToevoegen', 'Video toevoegen' ],
+       'NewVideos' => [ 'NieuweVideos', "NieuweVideo's", 'NieuweVideo’s', 
"Nieuwe video's", 'Nieuwe video’s' ],
+       'UnusedVideos' => [ 'OngebruikteVideos', "OngebruikteVideo's", 
'OngebruikteVideo’s', "Ongebruiktevideo's", 'Ongebruikte video’s' ],
+];
diff --git a/includes/Video.hooks.php b/includes/Video.hooks.php
index 8a19fc3..f709aa1 100644
--- a/includes/Video.hooks.php
+++ b/includes/Video.hooks.php
@@ -63,8 +63,7 @@
                                if ( !empty( $align ) ) {
                                        $alignTag = " align=\"{$align}\"";
                                }
-                               $output = "<video 
name=\"{$video->getName()}\"{$widthTag}{$alignTag} />";
-                               return $output;
+                               return "<video 
name=\"{$video->getName()}\"{$widthTag}{$alignTag} />";
                        }
                        return $matches[0];
                }
@@ -81,8 +80,8 @@
        public static function videoFromTitle( &$title, &$article ) {
                global $wgRequest;
 
-               if ( $title->getNamespace() == NS_VIDEO ) {
-                       if ( $wgRequest->getVal( 'action' ) == 'edit' ) {
+               if ( $title->getNamespace() === NS_VIDEO ) {
+                       if ( $wgRequest->getVal( 'action' ) === 'edit' ) {
                                $addTitle = SpecialPage::getTitleFor( 
'AddVideo' );
                                $video = Video::newFromName( $title->getText(), 
RequestContext::getMain() );
                                if ( !$video->exists() ) {
@@ -126,7 +125,7 @@
 
                $width = $width_max = 425;
                $height = $height_max = 350;
-               $validAlign = array( 'LEFT', 'CENTER', 'RIGHT' );
+               $validAlign = [ 'LEFT', 'CENTER', 'RIGHT' ];
 
                if ( !empty( $argv['width'] ) && ( $width_max >= $argv['width'] 
) ) {
                        $width = $argv['width'];
@@ -171,7 +170,7 @@
                $article = new Article( $cat->mTitle );
                $article->view();
 
-               if ( $cat->mTitle->getNamespace() == NS_CATEGORY ) {
+               if ( $cat->mTitle->getNamespace() === NS_CATEGORY ) {
                        global $wgOut, $wgRequest;
                        $from = $wgRequest->getVal( 'from' );
                        // @todo CHECKME/FIXME: is this correct? I just added 
something
@@ -196,16 +195,16 @@
         * @return bool
         */
        public static function onVideoDelete( &$articleObj, &$user, &$reason, 
&$error ) {
-               if ( $articleObj->getTitle()->getNamespace() == NS_VIDEO ) {
+               if ( $articleObj->getTitle()->getNamespace() === NS_VIDEO ) {
                        global $wgRequest;
 
                        $context = ( is_callable( $articleObj, 'getContext' ) ? 
$articleObj->getContext() : RequestContext::getMain() );
                        $videoObj = new Video( $articleObj->getTitle(), 
$context );
                        $videoName = $videoObj->getName();
                        $oldVideo = $wgRequest->getVal( 'wpOldVideo', false );
-                       $where = array(
+                       $where = [
                                'video_name' => $videoName
-                       );
+                       ];
                        /*
                        BEWARE! THIS DOES NOT WORK HOW YOU WOULD THINK IT 
DOES...
                        IT GENERATES INVALID SQL LIKE video_name = 
\'(Ayumi_Hamasaki_-_Ladies_Night) OR (Video:Ayumi Hamasaki - Ladies Night)\'
@@ -230,7 +229,7 @@
                                $dbw->insertSelect(
                                        'oldvideo',
                                        'video',
-                                       array(
+                                       [
                                                'ov_name' => 'video_name',
                                                'ov_archive_name' => 
$dbw->addQuotes( $archiveName ),
                                                'ov_url' => 'video_url',
@@ -238,7 +237,7 @@
                                                'ov_user_id' => 'video_user_id',
                                                'ov_user_name' => 
'video_user_name',
                                                'ov_timestamp' => 
'video_timestamp'
-                                       ),
+                                       ],
                                        $where,
                                        __METHOD__
                                );
@@ -280,7 +279,7 @@
         * @return bool
         */
        public static function specialUndeleteSwitchArchive( $archive, $title ) 
{
-               if ( $title->getNamespace() == NS_VIDEO ) {
+               if ( $title->getNamespace() === NS_VIDEO ) {
                        $archive = new VideoPageArchive( $title );
                }
                return true;
@@ -307,8 +306,8 @@
         * @return bool
         */
        public static function onUserRename( $renameUserSQL ) {
-               $renameUserSQL->tables['oldvideo'] = array( 'ov_user_name', 
'ov_user_id' );
-               $renameUserSQL->tables['video'] = array( 'video_user_name', 
'video_user_id' );
+               $renameUserSQL->tables['oldvideo'] = [ 'ov_user_name', 
'ov_user_id' ];
+               $renameUserSQL->tables['video'] = [ 'video_user_name', 
'video_user_id' ];
                return true;
        }
 
@@ -324,4 +323,17 @@
                $list[NS_VIDEO_TALK] = 'Video_talk';
                return true;
        }
+
+       /**
+        * Hook to add Special:UnusedVideos to the list generated by 
QueryPage::getPages.
+        * Used by the maintenance script updateSpecialPages.
+        *
+        * @param array $wgQueryPages
+        * @return bool
+        */
+       public static function onwgQueryPages( &$wgQueryPages ) {
+               $wgQueryPages[] = [ 'SpecialUnusedVideos', 'UnusedVideos' ];
+
+               return true;
+       }
 }
diff --git a/includes/specials/SpecialUnusedVideos.php 
b/includes/specials/SpecialUnusedVideos.php
new file mode 100644
index 0000000..d74a233
--- /dev/null
+++ b/includes/specials/SpecialUnusedVideos.php
@@ -0,0 +1,80 @@
+<?php
+
+use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Special:Un usedVideos - a special page for unused videos
+ *
+ * @file
+ * @ingroup Extensions
+ */
+class SpecialUnusedVideos extends QueryPage {
+       /**
+        * Constructor
+        */
+       public function __construct() {
+               parent::__construct( 'UnusedVideos' );
+       }
+
+       /**
+        * Format and output report results using the given information plus
+        * OutputPage
+        *
+        * @param OutputPage $out OutputPage to print to
+        * @param Skin $skin User skin to use [unused]
+        * @param IDatabase $dbr (read) connection to use
+        * @param ResultWrapper $res Result pointer
+        * @param int $num Number of available result rows
+        * @param int $offset Paging offset
+        */
+       protected function outputResults( $out, $skin, $dbr, $res, $num, 
$offset ) {
+               if ( $num > 0 ) {
+                       $gallery = new VideoGallery();
+
+                       # $res might contain the whole 1,000 rows, so we read 
up to
+                       # $num [should update this to use a Pager]
+                       $i = 0;
+                       foreach ( $res as $row ) {
+                               $i++;
+                               $title = Title::makeTitle( NS_VIDEO, 
$row->title );
+                               $video = new Video( $title, $this->getContext() 
);
+
+                               $gallery->add( $video);
+                               if ( $i === $num ) {
+                                       break;
+                               }
+                       }
+
+                       $out->addHTML( $gallery->toHTML() );
+               }
+       }
+
+       public function getQueryInfo() {
+               return [
+                       'tables' => [ 'video', 'pagelinks' ],
+                       'fields' => [
+                               'namespace' => NS_VIDEO,
+                               'title' => 'video_name'
+                       ],
+                       'conds' => [ 'pl_title IS NULL' ],
+                       'join_conds' => [ 'pagelinks' => [ 'LEFT JOIN', 
'pl_title = video_name' ] ]
+               ];
+       }
+
+       // Gotta override this since it's abstract
+       public function formatResult( $skin, $result ) {
+       }
+
+       public function isExpensive() {
+               return true;
+       }
+
+       public function getOrderFields() {
+               return [ 'title' ];
+       }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/405369
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4304a022eda96e14820dd9351e2bc09918e7dcb7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Video
Gerrit-Branch: master
Gerrit-Owner: Mainframe98 <k.s.w...@hotmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to