<?php
-
/**
- * Created on May 14, 2010
- *
* API for MediaWiki 1.17+
*
+ * Created on May 14, 2010
+ *
* Copyright © 2010 Sam Reed
* Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
*
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
*/
if ( !defined( 'MEDIAWIKI' ) ) {
}
$params = $this->extractRequestParams();
+
+ if ( isset( $params['title'] ) && !isset( $params['prefix'] ) ) {
+ $this->dieUsageMsg( array( 'missingparam', 'prefix' ) );
+ }
+
$this->addFields( array(
'iwl_from',
'iwl_prefix',
);
}
- // Don't order by iwl_from if it's constant in the WHERE clause
- if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
- $this->addOption( 'ORDER BY', 'iwl_prefix' );
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhereFld( 'iwl_prefix', $params['prefix'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'iwl_title', $params['title'] );
+ $this->addOption( 'ORDER BY', 'iwl_from' );
+ } else {
+ $this->addOption( 'ORDER BY', 'iwl_title, iwl_from' );
+ }
} else {
- $this->addOption( 'ORDER BY', 'iwl_from, iwl_prefix' );
+ // Don't order by iwl_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'iwl_prefix' );
+ } else {
+ $this->addOption( 'ORDER BY', 'iwl_from, iwl_prefix' );
+ }
}
+
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$res = $this->select( __METHOD__ );
$count = 0;
- $db = $this->getDB();
- while ( $row = $db->fetchObject( $res ) ) {
+ foreach ( $res as $row ) {
if ( ++$count > $params['limit'] ) {
// We've reached the one extra which shows that
// there are additional pages to be had. Stop here...
if ( !is_null( $params['url'] ) ) {
$title = Title::newFromText( "{$row->iwl_prefix}:{$row->iwl_title}" );
if ( $title ) {
- $entry = array_merge( $entry, array( 'url' => $title->getFullURL() ) );
+ $entry['url'] = $title->getFullURL();
}
}
break;
}
}
- $db->freeResult( $res );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
}
public function getAllowedParams() {
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
'continue' => null,
+ 'prefix' => null,
+ 'title' => null,
);
}
'url' => 'Whether to get the full URL',
'limit' => 'How many interwiki links to return',
'continue' => 'When more results are available, use this to continue',
+ 'prefix' => 'Prefix for the interwiki',
+ 'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
);
}
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
+ array( 'missingparam', 'prefix' ),
array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
) );
}
public function getVersion() {
return __CLASS__ . ': $Id$';
}
-}
\ No newline at end of file
+}