summaryrefslogtreecommitdiff
path: root/includes/TitleArray.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/TitleArray.php')
-rw-r--r--includes/TitleArray.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/includes/TitleArray.php b/includes/TitleArray.php
new file mode 100644
index 00000000..f7a9e1dc
--- /dev/null
+++ b/includes/TitleArray.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Note: this entire file is a byte-for-byte copy of UserArray.php with
+ * s/User/Title/. If anyone can figure out how to do this nicely with inheri-
+ * tance or something, please do so.
+ */
+
+/**
+ * The TitleArray class only exists to provide the newFromResult method at pre-
+ * sent.
+ */
+abstract class TitleArray implements Iterator {
+ /**
+ * @param $res result A MySQL result including at least page_namespace and
+ * page_title -- also can have page_id, page_len, page_is_redirect,
+ * page_latest (if those will be used). See Title::newFromRow.
+ * @return TitleArray
+ */
+ static function newFromResult( $res ) {
+ $array = null;
+ if ( !wfRunHooks( 'TitleArrayFromResult', array( &$array, $res ) ) ) {
+ return null;
+ }
+ if ( $array === null ) {
+ $array = self::newFromResult_internal( $res );
+ }
+ return $array;
+ }
+
+ protected static function newFromResult_internal( $res ) {
+ $array = new TitleArrayFromResult( $res );
+ return $array;
+ }
+}
+
+class TitleArrayFromResult extends TitleArray {
+ var $res;
+ var $key, $current;
+
+ function __construct( $res ) {
+ $this->res = $res;
+ $this->key = 0;
+ $this->setCurrent( $this->res->current() );
+ }
+
+ protected function setCurrent( $row ) {
+ if ( $row === false ) {
+ $this->current = false;
+ } else {
+ $this->current = Title::newFromRow( $row );
+ }
+ }
+
+ public function count() {
+ return $this->res->numRows();
+ }
+
+ function current() {
+ return $this->current;
+ }
+
+ function key() {
+ return $this->key;
+ }
+
+ function next() {
+ $row = $this->res->next();
+ $this->setCurrent( $row );
+ $this->key++;
+ }
+
+ function rewind() {
+ $this->res->rewind();
+ $this->key = 0;
+ $this->setCurrent( $this->res->current() );
+ }
+
+ function valid() {
+ return $this->current !== false;
+ }
+}