- $lllang = $this->getDB()->strencode( $cont[1] );
- $this->addWhere( "ll_from > $llfrom OR " .
- "(ll_from = $llfrom AND " .
- "ll_lang >= '$lllang')" );
+ $lllang = $this->getDB()->addQuotes( $cont[1] );
+ $this->addWhere(
+ "ll_from $op $llfrom OR " .
+ "(ll_from = $llfrom AND " .
+ "ll_lang $op= $lllang)"
+ );
+ }
+
+ // FIXME: (follow-up) To allow extensions to add to the language links, we need
+ // to load them all, add the extra links, then apply paging.
+ // Should not be terrible, it's not going to be more than a few hundred links.
+
+ // Note that, since (ll_from, ll_lang) is a unique key, we don't need
+ // to sort by ll_title to ensure deterministic ordering.
+ $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+ if ( isset( $params['lang'] ) ) {
+ $this->addWhereFld( 'll_lang', $params['lang'] );
+ if ( isset( $params['title'] ) ) {
+ $this->addWhereFld( 'll_title', $params['title'] );
+ }
+ $this->addOption( 'ORDER BY', 'll_from' . $sort );
+ } else {
+ // Don't order by ll_from if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'll_lang' . $sort );
+ } else {
+ $this->addOption( 'ORDER BY', [
+ 'll_from' . $sort,
+ 'll_lang' . $sort
+ ] );
+ }