public function checkUser($username, $output = false)
 {
     global $wgOut;
     $bits = explode('@', $username, 2);
     if (count($bits) == 1) {
         if ($output) {
             $this->showForm(wfMsgWikiHtml('crosswikiblock-local'));
         }
         return array('local');
     }
     list($name, $db) = $bits;
     if (!UserRightsProxy::validDatabase($db)) {
         if ($output) {
             $this->showForm(wfMsgWikiHtml('crosswikiblock-dbnotfound', htmlspecialchars($db)));
         }
         return array('dbnotfound', $db);
     }
     if (!User::isIP($name) && !User::isCreatableName($name)) {
         if ($output) {
             $this->showForm(wfMsgWikiHtml('crosswikiblock-noname', htmlspecialchars($name)));
         }
         return array('invalidname', $name);
     }
     if (!User::isIP($name)) {
         $userProxy = UserRightsProxy::newFromName($db, $name);
         $this->mUserProxy = $userProxy;
         if (!$userProxy) {
             if ($output) {
                 $this->showForm(wfMsgWikiHtml('crosswikiblock-nouser', htmlspecialchars($name), htmlspecialchars($db), htmlspecialchars($username)));
             }
             return array('usernotfound', $name, $db, $username);
         }
     }
     $this->mUsername = $name;
     $this->mDatabase = $db;
     return false;
 }
Example #2
0
 /**
  * Normalize the input username, which may be local or remote, and
  * return a user (or proxy) object for manipulating it.
  *
  * Side effects: error output for invalid access
  * @return mixed User, UserRightsProxy, or null
  */
 function fetchUser($username)
 {
     global $wgOut, $wgUser;
     $parts = explode('@', $username);
     if (count($parts) < 2) {
         $name = trim($username);
         $database = '';
     } else {
         list($name, $database) = array_map('trim', $parts);
         if (!$wgUser->isAllowed('userrights-interwiki')) {
             $wgOut->addWikiMsg('userrights-no-interwiki');
             return null;
         }
         if (!UserRightsProxy::validDatabase($database)) {
             $wgOut->addWikiMsg('userrights-nodatabase', $database);
             return null;
         }
     }
     if ($name == '') {
         $wgOut->addWikiMsg('nouserspecified');
         return false;
     }
     if ($name[0] == '#') {
         // Numeric ID can be specified...
         // We'll do a lookup for the name internally.
         $id = intval(substr($name, 1));
         if ($database == '') {
             $name = User::whoIs($id);
         } else {
             $name = UserRightsProxy::whoIs($database, $id);
         }
         if (!$name) {
             $wgOut->addWikiMsg('noname');
             return null;
         }
     }
     if ($database == '') {
         $user = User::newFromName($name);
     } else {
         $user = UserRightsProxy::newFromName($database, $name);
     }
     if (!$user || $user->isAnon()) {
         $wgOut->addWikiMsg('nosuchusershort', $username);
         return null;
     }
     return $user;
 }
 /**
  * Normalize the input username, which may be local or remote, and
  * return a user (or proxy) object for manipulating it.
  *
  * Side effects: error output for invalid access
  * @param string $username
  * @return Status
  */
 public function fetchUser($username)
 {
     $parts = explode($this->getConfig()->get('UserrightsInterwikiDelimiter'), $username);
     if (count($parts) < 2) {
         $name = trim($username);
         $database = '';
     } else {
         list($name, $database) = array_map('trim', $parts);
         if ($database == wfWikiID()) {
             $database = '';
         } else {
             if (!$this->getUser()->isAllowed('userrights-interwiki')) {
                 return Status::newFatal('userrights-no-interwiki');
             }
             if (!UserRightsProxy::validDatabase($database)) {
                 return Status::newFatal('userrights-nodatabase', $database);
             }
         }
     }
     if ($name === '') {
         return Status::newFatal('nouserspecified');
     }
     if ($name[0] == '#') {
         // Numeric ID can be specified...
         // We'll do a lookup for the name internally.
         $id = intval(substr($name, 1));
         if ($database == '') {
             $name = User::whoIs($id);
         } else {
             $name = UserRightsProxy::whoIs($database, $id);
         }
         if (!$name) {
             return Status::newFatal('noname');
         }
     } else {
         $name = User::getCanonicalName($name);
         if ($name === false) {
             // invalid name
             return Status::newFatal('nosuchusershort', $username);
         }
     }
     if ($database == '') {
         $user = User::newFromName($name);
     } else {
         $user = UserRightsProxy::newFromName($database, $name);
     }
     if (!$user || $user->isAnon()) {
         return Status::newFatal('nosuchusershort', $username);
     }
     return Status::newGood($user);
 }
 static function parseBlockAddress($addr)
 {
     $r = array();
     $bits = explode('@', $addr, 2);
     if (count($bits) < 2) {
         return array('error' => 'nowiki');
     }
     list($target, $wiki) = $bits;
     if (!UserRightsProxy::validDatabase($wiki)) {
         return array('error' => 'invalidwiki', 'wiki' => $wiki);
     }
     if (preg_match('/^#[0-9]+$/', $target)) {
         return array('blockid' => substr($target, 1), 'wiki' => $wiki);
     } elseif (User::isIP($target)) {
         return array('ip' => $target, 'wiki' => $wiki);
     } elseif (User::isCreatableName($target)) {
         return array('username' => $target, 'wiki' => $wiki);
     } else {
         return array('error' => 'invalidusername', 'username' => $target);
     }
 }