/** * bug 15810: blocked admins should not be able to block/unblock * others, and probably shouldn't be able to unblock themselves * either. * @param $user User|Int|String * @param $performer User user doing the request * @return Bool|String true or error message key */ public static function checkUnblockSelf($user, User $performer) { if (is_int($user)) { $user = User::newFromId($user); } elseif (is_string($user)) { $user = User::newFromName($user); } if ($performer->isBlocked()) { if ($user instanceof User && $user->getId() == $performer->getId()) { # User is trying to unblock themselves if ($performer->isAllowed('unblockself')) { return true; # User blocked themselves and is now trying to reverse it } elseif ($performer->blockedBy() === $performer->getName()) { return true; } else { return 'ipbnounblockself'; } } else { # User is trying to block/unblock someone else return 'ipbblocked'; } } else { return true; } }