HTTPS-ify links to Wikimedia's sites in MW core source
[lhc/web/wiklou.git] / includes / UserArray.php
index 90d1134..31bd601 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Classes to walk into a list of User objects.
+ * Class to walk into a list of User objects.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 abstract class UserArray implements Iterator {
        /**
-        * @param $res ResultWrapper
+        * @param ResultWrapper $res
         * @return UserArrayFromResult
         */
        static function newFromResult( $res ) {
                $userArray = null;
-               if ( !wfRunHooks( 'UserArrayFromResult', array( &$userArray, $res ) ) ) {
+               if ( !Hooks::run( 'UserArrayFromResult', array( &$userArray, $res ) ) ) {
                        return null;
                }
                if ( $userArray === null ) {
@@ -37,7 +37,7 @@ abstract class UserArray implements Iterator {
        }
 
        /**
-        * @param $ids array
+        * @param array $ids
         * @return UserArrayFromResult
         */
        static function newFromIDs( $ids ) {
@@ -57,77 +57,31 @@ abstract class UserArray implements Iterator {
        }
 
        /**
-        * @param $res
+        * @since 1.25
+        * @param array $names
         * @return UserArrayFromResult
         */
-       protected static function newFromResult_internal( $res ) {
-               return new UserArrayFromResult( $res );
-       }
-}
-
-class UserArrayFromResult extends UserArray implements Countable {
-
-       /**
-        * @var ResultWrapper
-        */
-       var $res;
-       var $key, $current;
-
-       /**
-        * @param $res ResultWrapper
-        */
-       function __construct( $res ) {
-               $this->res = $res;
-               $this->key = 0;
-               $this->setCurrent( $this->res->current() );
-       }
-
-       /**
-        * @param  $row
-        * @return void
-        */
-       protected function setCurrent( $row ) {
-               if ( $row === false ) {
-                       $this->current = false;
-               } else {
-                       $this->current = User::newFromRow( $row );
+       static function newFromNames( $names ) {
+               $names = array_map( 'strval', (array)$names ); // paranoia
+               if ( !$names ) {
+                       // Database::select() doesn't like empty arrays
+                       return new ArrayIterator( array() );
                }
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select(
+                       'user',
+                       User::selectFields(),
+                       array( 'user_name' => array_unique( $names ) ),
+                       __METHOD__
+               );
+               return self::newFromResult( $res );
        }
 
        /**
-        * @return int
-        */
-       public function count() {
-               return $this->res->numRows();
-       }
-
-       /**
-        * @return User
-        */
-       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() );
-       }
-
-       /**
-        * @return bool
+        * @param ResultWrapper $res
+        * @return UserArrayFromResult
         */
-       function valid() {
-               return $this->current !== false;
+       protected static function newFromResult_internal( $res ) {
+               return new UserArrayFromResult( $res );
        }
 }