function wfUserUserFollowsResponse($follower, $followee)
{
    global $wgUser;
    $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_UNKNOWN);
    // This feature is only available for logged-in users.
    if (!$wgUser->isLoggedIn()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_NOT_LOGGED_IN);
        return $out;
    }
    // No need to allow blocked users to access this page, they could abuse it, y'know.
    if ($wgUser->isBlocked()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_BLOCKED);
        return $out;
    }
    // Database operations require write mode
    if (wfReadOnly()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_READ_ONLY);
        return $out;
    }
    // Are we even allowed to do this?
    if (!$wgUser->isAllowed('edit')) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_NOT_ALLOWED);
        return $out;
    }
    $uuf = new UserUserFollow();
    if ($follower === $wgUser->getName() && $followee !== $follower) {
        if ($uuf->addUserUserFollow($wgUser, User::newFromName($followee)) !== false) {
            $out = ResponseGenerator::getJson(ResponseGenerator::SUCCESS);
        }
    }
    //TODO: use wfMessage instead of hard code
    return $out;
}
function wfUserFollowsRecommend($follower, $followee)
{
    global $wgUser;
    $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_UNKNOWN);
    // This feature is only available for logged-in users.
    if (!$wgUser->isLoggedIn()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_NOT_LOGGED_IN);
        return $out;
    }
    // No need to allow blocked users to access this page, they could abuse it, y'know.
    if ($wgUser->isBlocked()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_BLOCKED);
        return $out;
    }
    // Database operations require write mode
    if (wfReadOnly()) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_READ_ONLY);
        return $out;
    }
    // Are we even allowed to do this?
    if (!$wgUser->isAllowed('edit')) {
        $out = ResponseGenerator::getJson(ResponseGenerator::ERROR_NOT_ALLOWED);
        return $out;
    }
    $uuf = new UserUserFollow();
    if ($follower === $wgUser->getName() && $followee !== $follower) {
        if ($uuf->addUserUserFollow($wgUser, User::newFromName($followee)) !== false) {
            $weekRank = UserStats::getUserRank(20, 'week');
            $monthRank = UserStats::getUserRank(20, 'month');
            $totalRank = UserStats::getUserRank(20, 'total');
            if (count($weekRank) >= 8) {
                $recommend = $weekRank;
            } elseif (count($monthRank) >= 8) {
                $recommend = $monthRank;
            } else {
                $recommend = $totalRank;
            }
            $recommendRes = array();
            $flres = array();
            foreach ($recommend as $value) {
                $tuser = User::newFromName($value['user_name']);
                $isFollow = $uuf->checkUserUserFollow($wgUser, $tuser);
                if (!$isFollow && $value['user_name'] != $wgUser->getName()) {
                    $flres['avatar'] = $value['avatarImage'];
                    $flres['username'] = $value['user_name'];
                    $flres['userurl'] = $value['user_url'];
                    $recommendRes[] = $flres;
                }
            }
            $n = count($recommendRes);
            $i = 5;
            $newUser = isset($recommendRes[$i]) ? $recommendRes[$i] : null;
            $res = array('success' => true, 'result' => $newUser);
            $out = json_encode($res);
            return $out;
        }
    }
}
 /**
  * add follow user or site
  * @param  object $target user object or site object
  * @return boolean
  */
 public function follow($target)
 {
     if ($target instanceof Site) {
         if (!$target->exists()) {
             return false;
         }
         $usf = new UserSiteFollow();
         return $usf->addUserSiteFollow($this->mUser, $target->getPrefix());
     } elseif ($target instanceof User) {
         // if ($target->getId() == 0){
         // 	return false;
         // }
         // if ($target->getId() == $this->mUser->getId()){
         // 	return false;
         // }
         $uuf = new UserUserFollow();
         return $uuf->addUserUserFollow($this->mUser, $target);
     } else {
         return false;
     }
 }