UserArray.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * Class to walk into a list of User objects.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License along
  16. * with this program; if not, write to the Free Software Foundation, Inc.,
  17. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. * http://www.gnu.org/copyleft/gpl.html
  19. *
  20. * @file
  21. */
  22. use Wikimedia\Rdbms\IResultWrapper;
  23. abstract class UserArray implements Iterator {
  24. /**
  25. * @param IResultWrapper $res
  26. * @return UserArrayFromResult
  27. */
  28. static function newFromResult( $res ) {
  29. $userArray = null;
  30. if ( !Hooks::run( 'UserArrayFromResult', [ &$userArray, $res ] ) ) {
  31. return null;
  32. }
  33. return $userArray ?? new UserArrayFromResult( $res );
  34. }
  35. /**
  36. * @param array $ids
  37. * @return UserArrayFromResult|ArrayIterator
  38. */
  39. static function newFromIDs( $ids ) {
  40. $ids = array_map( 'intval', (array)$ids ); // paranoia
  41. if ( !$ids ) {
  42. // Database::select() doesn't like empty arrays
  43. return new ArrayIterator( [] );
  44. }
  45. $dbr = wfGetDB( DB_REPLICA );
  46. $userQuery = User::getQueryInfo();
  47. $res = $dbr->select(
  48. $userQuery['tables'],
  49. $userQuery['fields'],
  50. [ 'user_id' => array_unique( $ids ) ],
  51. __METHOD__,
  52. [],
  53. $userQuery['joins']
  54. );
  55. return self::newFromResult( $res );
  56. }
  57. /**
  58. * @since 1.25
  59. * @param array $names
  60. * @return UserArrayFromResult|ArrayIterator
  61. */
  62. static function newFromNames( $names ) {
  63. $names = array_map( 'strval', (array)$names ); // paranoia
  64. if ( !$names ) {
  65. // Database::select() doesn't like empty arrays
  66. return new ArrayIterator( [] );
  67. }
  68. $dbr = wfGetDB( DB_REPLICA );
  69. $userQuery = User::getQueryInfo();
  70. $res = $dbr->select(
  71. $userQuery['tables'],
  72. $userQuery['fields'],
  73. [ 'user_name' => array_unique( $names ) ],
  74. __METHOD__,
  75. [],
  76. $userQuery['joins']
  77. );
  78. return self::newFromResult( $res );
  79. }
  80. }