From: tgr Date: Wed, 13 Nov 2013 12:35:25 +0000 (+0000) Subject: Add WikiFilePage::getForeignCategories() method X-Git-Tag: 1.31.0-rc.0~18051^2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/comptes/journal.php?a=commitdiff_plain;h=4893d1f8dd7ee51061d56da55eb8108b7cf41d5f;p=lhc%2Fweb%2Fwiklou.git 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 --- 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 ); + } }