setContext( $context ); $this->title = $title; } /** * Select items only where the ID is any of the specified values * @param array $ids */ function filterByIds( array $ids ) { $this->ids = $ids; } /** * Get the internal type name of this list. Equal to the table name. * Override this function. * @return null */ public function getType() { return null; } /** * Initialise the current iteration pointer */ protected function initCurrent() { $row = $this->res->current(); if ( $row ) { $this->current = $this->newItem( $row ); } else { $this->current = false; } } /** * Start iteration. This must be called before current() or next(). * @return Revision First list item */ public function reset() { if ( !$this->res ) { $this->res = $this->doQuery( wfGetDB( DB_REPLICA ) ); } else { $this->res->rewind(); } $this->initCurrent(); return $this->current; } public function rewind() { $this->reset(); } /** * Get the current list item, or false if we are at the end * @return Revision */ public function current() { return $this->current; } /** * Move the iteration pointer to the next list item, and return it. * @return Revision */ public function next() { $this->res->next(); $this->initCurrent(); return $this->current; } public function key() { return $this->res ? $this->res->key() : 0; } public function valid() { return $this->res ? $this->res->valid() : false; } /** * Get the number of items in the list. * @return int */ public function length() { if ( !$this->res ) { return 0; } else { return $this->res->numRows(); } } /** * Do the DB query to iterate through the objects. * @param IDatabase $db DB object to use for the query */ abstract public function doQuery( $db ); /** * Create an item object from a DB result row * @param object $row */ abstract public function newItem( $row ); }