summaryrefslogtreecommitdiff
path: root/includes/GenderCache.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2012-05-03 13:01:35 +0200
committerPierre Schmitz <pierre@archlinux.de>2012-05-03 13:01:35 +0200
commitd9022f63880ce039446fba8364f68e656b7bf4cb (patch)
tree16b40fbf17bf7c9ee6f4ead25b16dd192378050a /includes/GenderCache.php
parent27cf83d177256813e2e802241085fce5dd0f3fb9 (diff)
Update to MediaWiki 1.19.0
Diffstat (limited to 'includes/GenderCache.php')
-rw-r--r--includes/GenderCache.php135
1 files changed, 0 insertions, 135 deletions
diff --git a/includes/GenderCache.php b/includes/GenderCache.php
deleted file mode 100644
index a17ac024..00000000
--- a/includes/GenderCache.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-
-/**
- * Caches user genders when needed to use correct namespace aliases.
- * @author Niklas Laxström
- * @since 1.18
- */
-class GenderCache {
- protected $cache = array();
- protected $default;
- protected $misses = 0;
- protected $missLimit = 1000;
-
- /**
- * @return GenderCache
- */
- public static function singleton() {
- static $that = null;
- if ( $that === null ) {
- $that = new self();
- }
- return $that;
- }
-
- protected function __construct() {}
-
- /**
- * Returns the default gender option in this wiki.
- * @return String
- */
- protected function getDefault() {
- if ( $this->default === null ) {
- $this->default = User::getDefaultOption( 'gender' );
- }
- return $this->default;
- }
-
- /**
- * Returns the gender for given username.
- * @param $username String: username
- * @param $caller String: the calling method
- * @return String
- */
- public function getGenderOf( $username, $caller = '' ) {
- global $wgUser;
-
- $username = strtr( $username, '_', ' ' );
- if ( !isset( $this->cache[$username] ) ) {
-
- if ( $this->misses >= $this->missLimit && $wgUser->getName() !== $username ) {
- if( $this->misses === $this->missLimit ) {
- $this->misses++;
- wfDebug( __METHOD__ . ": too many misses, returning default onwards\n" );
- }
- return $this->getDefault();
-
- } else {
- $this->misses++;
- if ( !User::isValidUserName( $username ) ) {
- $this->cache[$username] = $this->getDefault();
- } else {
- $this->doQuery( $username, $caller );
- }
- }
-
- }
-
- /* Undefined if there is a valid username which for some reason doesn't
- * exist in the database.
- */
- return isset( $this->cache[$username] ) ? $this->cache[$username] : $this->getDefault();
- }
-
- /**
- * Wrapper for doQuery that processes raw LinkBatch data.
- *
- * @param $data
- * @param $caller
- */
- public function doLinkBatch( $data, $caller = '' ) {
- $users = array();
- foreach ( $data as $ns => $pagenames ) {
- if ( !MWNamespace::hasGenderDistinction( $ns ) ) continue;
- foreach ( array_keys( $pagenames ) as $username ) {
- if ( isset( $this->cache[$username] ) ) continue;
- $users[$username] = true;
- }
- }
-
- $this->doQuery( array_keys( $users ), $caller );
- }
-
- /**
- * Preloads genders for given list of users.
- * @param $users List|String: usernames
- * @param $caller String: the calling method
- */
- public function doQuery( $users, $caller = '' ) {
- $default = $this->getDefault();
-
- foreach ( (array) $users as $index => $value ) {
- $name = strtr( $value, '_', ' ' );
- if ( isset( $this->cache[$name] ) ) {
- // Skip users whose gender setting we already know
- unset( $users[$index] );
- } else {
- $users[$index] = $name;
- // For existing users, this value will be overwritten by the correct value
- $this->cache[$name] = $default;
- }
- }
-
- if ( count( $users ) === 0 ) {
- return false;
- }
-
- $dbr = wfGetDB( DB_SLAVE );
- $table = array( 'user', 'user_properties' );
- $fields = array( 'user_name', 'up_value' );
- $conds = array( 'user_name' => $users );
- $joins = array( 'user_properties' =>
- array( 'LEFT JOIN', array( 'user_id = up_user', 'up_property' => 'gender' ) ) );
-
- $comment = __METHOD__;
- if ( strval( $caller ) !== '' ) {
- $comment .= "/$caller";
- }
- $res = $dbr->select( $table, $fields, $conds, $comment, $joins, $joins );
-
- foreach ( $res as $row ) {
- $this->cache[$row->user_name] = $row->up_value ? $row->up_value : $default;
- }
- }
-
-}