From 4893d1f8dd7ee51061d56da55eb8108b7cf41d5f Mon Sep 17 00:00:00 2001 From: tgr Date: Wed, 13 Nov 2013 12:35:25 +0000 Subject: [PATCH] Add WikiFilePage::getForeignCategories() method Unlike getCategories(), this will return the categories on the wiki where the file is hosted (so it should work with Commons). Bug: 56598 Change-Id: Ice972f023c676b5857707ccf58ee108585a7f021 --- includes/WikiFilePage.php | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/includes/WikiFilePage.php b/includes/WikiFilePage.php index fe1ff88a95..2b192b0f06 100644 --- a/includes/WikiFilePage.php +++ b/includes/WikiFilePage.php @@ -189,4 +189,45 @@ class WikiFilePage extends WikiPage { } return parent::doPurge(); } + + /** + * Get the categories this file is a member of on the wiki where it was uploaded. + * For local files, this is the same as getCategories(). + * For foreign API files (InstantCommons), this is not supported currently. + * Results will include hidden categories. + * + * @return TitleArray|Title[] + * @since 1.23 + */ + public function getForeignCategories() { + $this->loadFile(); + $title = $this->mTitle; + $file = $this->mFile; + + if ( ! $file instanceof LocalFile ) { + wfDebug( __CLASS__ . '::' . __METHOD__ . ' is not supported for this file' ); + return TitleArray::newFromResult( new FakeResultWrapper( array() ) ); + } + + /** @var LocalRepo $repo */ + $repo = $file->getRepo(); + $dbr = $repo->getSlaveDB(); + + $res = $dbr->select( + array( 'page', 'categorylinks' ), + array( + 'page_title' => 'cl_to', + 'page_namespace' => NS_CATEGORY, + ), + array( + 'page_namespace' => $title->getNamespace(), + 'page_title' => $title->getDBkey(), + ), + __METHOD__, + array(), + array( 'categorylinks' => array( 'INNER JOIN', 'page_id = cl_from' ) ) + ); + + return TitleArray::newFromResult( $res ); + } } -- 2.20.1