public function execute() { $params = $this->extractRequestParams(); $prop = array_flip((array) $params['prop']); if (is_null($params['user'])) { $params['user'] = $this->getUser()->getName(); } $user = new CentralAuthUser($params['user']); // Add basic info $result = $this->getResult(); $data = array(); $userExists = $user->exists(); if ($userExists) { $data['home'] = $user->getHomeWiki(); $data['id'] = $user->getId(); $data['registration'] = wfTimestamp(TS_ISO_8601, $user->getRegistration()); if ($user->isLocked()) { $data['locked'] = ''; } if ($user->isHidden()) { $data['hidden'] = ''; } } else { $data['missing'] = ''; } $result->addValue('query', $this->getModuleName(), $data); // Add requested info if ($userExists && isset($prop['groups'])) { $groups = $user->getGlobalGroups(); $result->setIndexedTagName($groups, 'g'); $result->addValue(array('query', $this->getModuleName()), 'groups', $groups); } if ($userExists && isset($prop['rights'])) { $rights = $user->getGlobalRights(); $result->setIndexedTagName($rights, 'r'); $result->addValue(array('query', $this->getModuleName()), 'rights', $rights); } if ($userExists && isset($prop['merged'])) { $accounts = $user->queryAttached(); foreach ($accounts as $account) { $dbname = $account['wiki']; $a = array('wiki' => $dbname, 'url' => $this->getUrl($dbname), 'timestamp' => wfTimestamp(TS_ISO_8601, $account['attachedTimestamp']), 'method' => $account['attachedMethod'], 'editcount' => $account['editCount']); if ($account['blocked']) { $a['blocked'] = array('expiry' => $this->getLanguage()->formatExpiry($account['block-expiry'], TS_ISO_8601), 'reason' => $account['block-reason']); } $result->addValue(array('query', $this->getModuleName(), 'merged'), null, $a); } $result->setIndexedTagName_internal(array('query', $this->getModuleName(), 'merged'), 'account'); } if (isset($prop['unattached'])) { $accounts = $user->queryUnattached(); foreach ($accounts as $account) { $a = array('wiki' => $account['wiki'], 'editcount' => $account['editCount']); if ($account['blocked']) { $a['blocked'] = array('expiry' => $this->getLanguage()->formatExpiry($account['block-expiry'], TS_ISO_8601), 'reason' => $account['block-reason']); } $result->addValue(array('query', $this->getModuleName(), 'unattached'), null, $a); } $result->setIndexedTagName_internal(array('query', $this->getModuleName(), 'unattached'), 'account'); } }
public function execute() { $params = $this->extractRequestParams(); $prop = array_flip((array) $params['prop']); if (is_null($params['user'])) { $params['user'] = $this->getUser()->getName(); } $user = new CentralAuthUser($params['user']); // Add basic info $result = $this->getResult(); $data = array(); $userExists = $user->exists(); if ($userExists && ($user->getHiddenLevel() === CentralAuthUser::HIDDEN_NONE || $this->getUser()->isAllowed('centralauth-oversight'))) { // The global user exists and it's not hidden or the current user is allowed to see it $data['home'] = $user->getHomeWiki(); $data['id'] = $user->getId(); $data['registration'] = wfTimestamp(TS_ISO_8601, $user->getRegistration()); $data['name'] = $user->getName(); if ($user->isLocked()) { $data['locked'] = ''; } if ($user->isHidden()) { $data['hidden'] = ''; } } else { // The user doesn't exist or we pretend it doesn't if it's hidden $data['missing'] = ''; } $result->addValue('query', $this->getModuleName(), $data); // Add requested info if ($userExists && isset($prop['groups'])) { $groups = $user->getGlobalGroups(); $result->setIndexedTagName($groups, 'g'); $result->addValue(array('query', $this->getModuleName()), 'groups', $groups); } if ($userExists && isset($prop['rights'])) { $rights = $user->getGlobalRights(); $result->setIndexedTagName($rights, 'r'); $result->addValue(array('query', $this->getModuleName()), 'rights', $rights); } $attachedAccounts = null; if ($userExists && (isset($prop['merged']) || isset($prop['editcount']))) { $attachedAccounts = $user->queryAttached(); } if ($userExists && isset($prop['merged'])) { foreach ($attachedAccounts as $account) { $dbname = $account['wiki']; $wiki = WikiMap::getWiki($dbname); $a = array('wiki' => $dbname, 'url' => $wiki->getCanonicalServer(), 'timestamp' => wfTimestamp(TS_ISO_8601, $account['attachedTimestamp']), 'method' => $account['attachedMethod'], 'editcount' => $account['editCount']); if ($account['blocked']) { $a['blocked'] = array('expiry' => $this->getLanguage()->formatExpiry($account['block-expiry'], TS_ISO_8601), 'reason' => $account['block-reason']); } $result->addValue(array('query', $this->getModuleName(), 'merged'), null, $a); } if (defined('ApiResult::META_CONTENT')) { $result->addIndexedTagName(array('query', $this->getModuleName(), 'merged'), 'account'); } else { $result->setIndexedTagName_internal(array('query', $this->getModuleName(), 'merged'), 'account'); } } if ($userExists && isset($prop['editcount'])) { $editcount = 0; foreach ($attachedAccounts as $account) { $editcount += $account['editCount']; } $result->addValue('query', $this->getModuleName(), array('editcount' => $editcount)); } if (isset($prop['unattached'])) { $accounts = $user->queryUnattached(); foreach ($accounts as $account) { $a = array('wiki' => $account['wiki'], 'editcount' => $account['editCount']); if ($account['blocked']) { $a['blocked'] = array('expiry' => $this->getLanguage()->formatExpiry($account['block-expiry'], TS_ISO_8601), 'reason' => $account['block-reason']); } $result->addValue(array('query', $this->getModuleName(), 'unattached'), null, $a); } if (defined('ApiResult::META_CONTENT')) { $result->addIndexedTagName(array('query', $this->getModuleName(), 'unattached'), 'account'); } else { $result->setIndexedTagName_internal(array('query', $this->getModuleName(), 'unattached'), 'account'); } } }