function wfUserUserUnfollowsResponse($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->deleteUserUserFollow($wgUser, User::newFromName($followee))) { $out = ResponseGenerator::getJson(ResponseGenerator::SUCCESS); } //TODO: use wfMessage instead of hard code } return $out; }
/** * Get the header for the social profile page, which includes the user's * points and user level (if enabled in the site configuration) and lots * more. * * @param $user_id Integer: user ID * @param $user_name String: user name */ function getProfileTop($user_id, $user_name) { global $wgOut, $wgUser, $wgLang; global $wgUserLevels; $stats = new UserStats($user_id, $user_name); $stats_data = $stats->getUserStats(); $user_level = new UserLevel($stats_data['points']); $level_link = Title::makeTitle(NS_HELP, wfMessage('user-profile-userlevels-link')->inContentLanguage()->text()); $this->initializeProfileData($user_name); $profile_data = $this->profile_data; // Variables and other crap $page_title = $this->getTitle()->getText(); $title_parts = explode('/', $page_title); $user = $title_parts[0]; $id = User::idFromName($user); $user_safe = urlencode($user); // Safe urls $add_relationship = SpecialPage::getTitleFor('AddRelationship'); $remove_relationship = SpecialPage::getTitleFor('RemoveRelationship'); $give_gift = SpecialPage::getTitleFor('GiveGift'); $send_board_blast = SpecialPage::getTitleFor('SendBoardBlast'); $update_profile = SpecialPage::getTitleFor('UpdateProfile'); $watchlist = SpecialPage::getTitleFor('Watchlist'); $contributions = SpecialPage::getTitleFor('Contributions', $user); $send_message = SpecialPage::getTitleFor('UserBoard'); $upload_avatar = SpecialPage::getTitleFor('UploadAvatar'); $user_page = Title::makeTitle(NS_USER, $user); $user_social_profile = Title::makeTitle(NS_USER_PROFILE, $user); $user_wiki = Title::makeTitle(NS_USER_WIKI, $user); $us = new UserStatus($this->user); $city = $us->getCity(); $city = Sanitizer::escapeHtmlAllowEntities($city); $birthday = $us->getBirthday(); $status = $us->getStatus(); $status = Sanitizer::escapeHtmlAllowEntities($status); $gender = $us->getGender(); if ($gender == 'male') { $genderIcon = '♂'; $gendertext = '他'; } elseif ($gender == 'female') { $genderIcon = '♀'; $gendertext = '她'; } else { $genderIcon = '♂/♀'; $gendertext = 'TA'; } if ($this->isOwner()) { $gendertext = '你'; } if ($id != 0) { $relationship = UserRelationship::getUserRelationshipByID($id, $wgUser->getID()); } $avatar = new wAvatar($this->user_id, 'l'); wfDebug('profile type: ' . $profile_data['user_page_type'] . "\n"); $output = ''; //get more $target = SpecialPage::getTitleFor('ShowFollowedSites'); $query = array('user_id' => $wgUser->getId(), 'target_user_id' => $this->user_id); $mailVerify = $wgUser->getEmailAuthenticationTimestamp(); if ($mailVerify == NULL) { $href = "/wiki/Special:ConfirmEmail"; } else { $href = "/wiki/Special:UploadAvatar"; } $output .= '<div id="profile-right" class="col-md-6 col-sm-12 col-xs-12">'; $output .= '<div id="profile-title-container"> <h1 id="profile-title"> <div id="profile-image">' . ($this->isOwner() ? '<div class="profile-image-container crop-headimg" id="crop-avatar"><div class="avatar-view upload-tool" title="上传头像">' . $avatar->getOwnerAvatarURL() . '</div>' . $this->cropModal() . '</div>' : $avatar->getAvatarURL()) . '</div>' . $user_name . '</h1></div>'; $output .= '<div class="modal fade watch-url" tabindex="-1" role="dialog" aria-labelledby="mySmModalLabel" aria-hidden="true"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="gridSystemModalLabel">' . $gendertext . '关注的wiki</h4> </div> <div class="modal-body"> <div class="list-group"> </div> ' . Linker::LinkKnown($target, '<i class="fa fa-arrows-alt"></i> 全部', array('type' => 'button', 'class' => 'btn btn-default'), $query) . ' </div> </div> </div> </div>'; // Show the user's level and the amount of points they have if // UserLevels has been configured contributions $notice = SpecialPage::getTitleFor('ViewFollows'); $contributions = SpecialPage::getTitleFor('Contributions'); $output .= '<div> <ul class="user-follow-msg"> <li><h5>编辑</h5>' . Linker::link($contributions, $stats_data['edits'], array(), array('target' => $user, 'contribs' => 'user')) . '</li> <li><h4>|</h4></li> <li><h5>关注</h5>' . Linker::link($notice, UserUserFollow::getFollowingCount(User::newFromName($user)), array('id' => 'user-following-count'), array('user' => $user, 'rel_type' => 1)) . '</li> <li><h4>|</h4></li> <li><h5>被关注</h5>' . Linker::link($notice, UserUserFollow::getFollowerCount(User::newFromName($user)), array('id' => 'user-follower-count'), array('user' => $user, 'rel_type' => 2)) . '</li> </ul> <div class="cleared"></div> </div> <!--<span id="user-site-count">' . '</span>个站点。-->'; if ($wgUserLevels) { $progress = $user_level->getLevelProgress() * 100; $output .= '<div id="honorific-level" class="label"> <a href="' . htmlspecialchars($level_link->getFullURL()) . '" rel="nofollow">' . $user_level->getLevelName() . '</a> </div> <div id="points-level" class="progress"> <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="' . $progress . '" aria-valuemin="0" aria-valuemax="100" style="width: ' . $progress . '%"> <span class="sr-only">' . wfMessage('user-profile-points', $wgLang->formatNum($stats_data['points']))->escaped() . '</span> </div> </div>'; } $output .= '<div class="profile-actions">'; $output .= '<div class="form-container ' . ($this->isOwner() ? 'owner' : '') . '"><div class="form-msg"><a class="form-location ' . ($this->isOwner() ? 'edit' : '') . '">' . ($city == '' ? $this->isOwner() ? '填写居住地' : '居住地未公开' : $city) . '</a> <span class="span-color">|</span><a class="form-date ' . ($this->isOwner() ? 'edit' : '') . '" data-birthday="' . ($birthday == '' || $birthday == '0000-00-00' ? '' : $birthday) . '">' . ($birthday == '' || $birthday == '0000-00-00' ? $this->isOwner() ? '填写生日' : '生日未公开' : '') . '</a> <span class="span-color">|</span><a class="form-sex ' . ($this->isOwner() ? 'edit' : '') . '" data-sex="' . $gender . '">' . $genderIcon . '</a></div>'; $output .= '<div class="user-autograph"><a class="form-autograph ' . ($this->isOwner() ? 'edit' : '') . '">' . ($status == '' ? $this->isOwner() ? '填写个人状态' : '这个人很懒,什么都没有写...' : $status) . '</a></div></div>'; // Links to User:user_name from User_profile: // if ( $this->getTitle()->getNamespace() == NS_USER_PROFILE && $this->profile_data['user_id'] && $this->profile_data['user_page_type'] == 0 ) { // $output .= '| <a href="' . htmlspecialchars( $user_page->getFullURL() ) . '" rel="nofollow">' . // wfMessage( 'user-page-link' )->escaped() . '</a> '; // } // // Links to User:user_name from User_profile: // if ( $this->getTitle()->getNamespace() == NS_USER && $this->profile_data['user_id'] && $this->profile_data['user_page_type'] == 0 ) { // $output .= '| <a href="' . htmlspecialchars( $user_social_profile->getFullURL() ) . '" rel="nofollow">' . // wfMessage( 'user-social-profile-link' )->escaped() . '</a> '; // } // if ( $this->getTitle()->getNamespace() == NS_USER && ( !$this->profile_data['user_id'] || $this->profile_data['user_page_type'] == 1 ) ) { // $output .= '| <a href="' . htmlspecialchars( $user_wiki->getFullURL() ) . '" rel="nofollow">' . // wfMessage( 'user-wiki-link' )->escaped() . '</a>'; // } $output .= '</div></div>'; return $output; }
/** * Displays the form for sending board blasts */ function displayForm() { $user = $this->getUser(); $stats = new UserStats($user->getID(), $user->getName()); $stats_data = $stats->getUserStats(); $friendCount = $stats_data['friend_count']; $foeCount = $stats_data['foe_count']; $output = '<div class="board-blast-message-form"> <h2>' . $this->msg('boardblaststep1')->escaped() . '</h2> <form method="post" name="blast" action=""> <input type="hidden" name="ids" id="ids" /> <div class="blast-message-text">' . $this->msg('boardblastprivatenote')->escaped() . '</div> <textarea name="message" id="message" cols="63" rows="4"></textarea> </form> </div> <div class="blast-nav"> <h2>' . $this->msg('boardblaststep2')->escaped() . '</h2> <div class="blast-nav-links"> <a href="javascript:void(0);" class="blast-select-all-link">' . $this->msg('boardlinkselectall')->escaped() . '</a> - <a href="javascript:void(0);" class="blast-unselect-all-link">' . $this->msg('boardlinkunselectall')->escaped() . '</a> '; $output .= '</div> </div>'; $uuf = new UserUserFollow(); $follows = $uuf->getFollowList($user, 0); $output .= '<div id="blast-friends-list" class="blast-friends-list">'; $x = 1; $per_row = 3; if (count($follows) > 0) { foreach ($follows as $follow) { if ($follow['type'] == 1) { $class = 'friend'; } else { $class = 'foe'; } $id = $follow['user_id']; $output .= '<div class="blast-' . $class . "-unselected\" id=\"user-{$id}\">\n\t\t\t\t\t\t{$follow['user_name']}\n\t\t\t\t\t</div>"; if ($x == count($follows) || $x != 1 && $x % $per_row == 0) { $output .= '<div class="cleared"></div>'; } $x++; } } else { $output .= '<div>' . $this->msg('boardnofriends')->escaped() . '</div>'; } $output .= '</div> <div class="cleared"></div>'; $output .= '<div class="blast-message-box-button"> <input type="button" value="' . $this->msg('boardsendbutton')->escaped() . '" class="site-button" /> </div>'; return $output; }
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; } } }
/** * get the current user's following users * @return array */ public function getFollowingUsers() { if ($this->mFollowingUsers != '') { return $this->mFollowingUsers; } $uuf = new UserUserFollow(); $this->mFollowingUsers = $uuf->getFollowList($this->mUser, 1); //$this->mFollowingUsers = UserUserFollow::getFollowedByUser($this->mUser); $cache = self::getUserCache(); $cache->set($this->mUser->getId(), $this); return $this->mFollowingUsers; }
/** * Among my followings, find all the followers of the target users from database. * @param $current_user username of the viewer. (ie. $wgUser) * @param $username username of the target user, whose usercard is displayed on screen. * @return array of followers. * */ public static function getFollowingFollowsUserDB($username, $current_user) { global $wgMemc; $key = wfForeignMemcKey('huiji', '', 'user_user_follow', 'my_followings_following_him', $username, $current_user); // return $current_user; $dbr = wfGetDB(DB_SLAVE); if ($current_user != NULL) { $follower = UserUserFollow::getFollowedByUser($current_user); $followehe = $dbr->select('user_user_follow', array('f_user_name'), array('f_target_user_name' => $username), __METHOD__); $result = array(); foreach ($followehe as $val) { $foname = $val->f_user_name; if (in_array($foname, $follower)) { $result[] = $foname; } } $wgMemc->set($key, $result); return $result; } else { return ''; } }
static function showPage() { global $wgUser, $wgParser; $templateParser = new TemplateParser(__DIR__ . '/View'); $output = ''; // Prevent E_NOTICE //user login if ($wgUser->isLoggedIn()) { $login = true; } else { $login = false; $register = Linker::linkKnown(SpecialPage::getTitleFor('Userlogin'), '注册', array(), array('type' => 'signup')); $active = 'active'; $inactive = 'in active'; } // check mobile device $mobile = mobiledetect(); $mobileUser = $mobile && $login; if (!$mobileUser) { //right data $fileCount = AllSitesInfo::getAllUploadFileCount(); $siteCount = AllSitesInfo::getSiteCountNum(); $userCount = AllSitesInfo::getUsreCountNum(); $editCount = AllSitesInfo::getAllSiteEditCount(); $pageCount = AllSitesInfo::getAllPageCount(); $userName = $wgUser->getName(); $usreId = $wgUser->getId(); $avatar = new wAvatar($usreId, 'l'); $userAvatar = $avatar->getAvatarURL(); //level $stats = new UserStats($usreId, $userName); $stats_data = $stats->getUserStats(); $user_level = new UserLevel($stats_data['points']); $level_link = Title::makeTitle(NS_HELP, wfMessage('user-profile-userlevels-link')->inContentLanguage()->text()); $levelUrl = htmlspecialchars($level_link->getFullURL()); $userLevel = $user_level->getLevelName(); //user info $notice = SpecialPage::getTitleFor('ViewFollows'); $contributions = SpecialPage::getTitleFor('Contributions'); $userEdit = Linker::link($contributions, $stats_data['edits'], array(), array('target' => $userName, 'contribs' => 'user')); $follower = Linker::link($notice, UserUserFollow::getFollowingCount($wgUser), array('id' => 'user-following-count'), array('user' => $userName, 'rel_type' => 1)); $followee = Linker::link($notice, UserUserFollow::getFollowerCount($wgUser), array('id' => 'user-follower-count'), array('user' => $userName, 'rel_type' => 2)); //siterank $yesterday = date('Y-m-d', strtotime('-1 days')); $allSiteRank = AllSitesInfo::getAllSitesRankData('', $yesterday); $siteRank = array_slice($allSiteRank, 0, 10); $siteInfo = array(); foreach ($siteRank as $key => $value) { $siteRank[$key]['site_prefix'] = HuijiPrefix::prefixToSiteName($value['site_prefix']); $siteRank[$key]['site_url'] = HuijiPrefix::prefixToUrl($value['site_prefix']); $siteInfo = AllSitesInfo::getPageInfoByPrefix($value['site_prefix']); $siteRank[$key]['totalEdits'] = $siteInfo['totalEdits']; $siteRank[$key]['totalArticles'] = $siteInfo['totalArticles']; $siteRank[$key]['totalPages'] = $siteInfo['totalPages']; $siteRank[$key]['totalUsers'] = $siteInfo['totalUsers']; } //userrank $weekRank = UserStats::getUserRank(10, 'week'); $monthRank = UserStats::getUserRank(20, 'month'); $totalRank = UserStats::getUserRank(20, 'total'); //小蓝格 $ueb = new UserEditBox(); $editBox = $editData = array(); $userEditInfo = $ueb->getUserEditInfo($usreId); $maxlen = $currentMaxlen = 0; //init variables. foreach ($userEditInfo as $value) { if (is_object($value) && !empty($value->_id) && $value->value > 0) { $editBox[$value->_id] = $value->value; $editData[] = $value->_id; } } $today = date("Y-m-d"); $yesterday = date("Y-m-d", strtotime("-1 day")); $editBox[$today] = UserEditBox::getTodayEdit($usreId); if (!empty($editBox[$today])) { $editData[] = $today; } $totalEdit = count($editData); if ($totalEdit > 0) { $resArr[] = strtotime($editData[0]); $maxlen = 1; } for ($k = 1; $k < count($editData); $k++) { if (in_array(strtotime($editData[$k]) - 86400, $resArr)) { $resArr[] = strtotime($editData[$k]); if (count($resArr) > $maxlen) { $maxlen = count($resArr); } } else { $resArr = array(); $resArr[] = strtotime($editData[$k]); } if ($resArr[count($resArr) - 1] == strtotime($today) || $resArr[count($resArr) - 1] == strtotime($yesterday)) { $currentMaxlen = count($resArr); } else { $currentMaxlen = 0; } } $lange = '<svg width="710" height="110" class=" "> <g transform="translate(20, 20)">'; $n = 676 / 13; $dateArr = array(); for ($k = 0; $k < 365; $k++) { $dateArr[] = date('Y-m-d', strtotime("-{$k} day")); } $desdateArr = array_reverse($dateArr); $translate = array(); for ($i = 0; $i <= $n; $i++) { $trani = $i * 13; $lange .= '<g transform="translate(' . $trani . ', 0)">'; $dayofweek = date('w', strtotime($desdateArr[0])); if ($i == 0) { $j = $dayofweek; $start = 0; $m = 7 - $dayofweek; } else { $j = 0; $m = 7; $start = $i * 7 - $dayofweek; } $zoneDate = array_slice($desdateArr, $start, $m); foreach ($zoneDate as $val) { $arrDate[$j] = $val; $y = $j * 13; $dataCount = isset($editBox[$val]) ? $editBox[$val] : 0; if ($dataCount == 0) { $color = '#eee'; } elseif ($dataCount > 0 && $dataCount <= 8) { $color = '#86beee'; } elseif ($dataCount > 8 && $dataCount <= 21) { $color = '#5ea2de'; } elseif ($dataCount > 21 && $dataCount <= 55) { $color = '#256fb1'; } else { $color = '#0d5493'; } $lange .= '<rect class="day" width="11" height="11" y="' . $y . '" fill="' . $color . '" data-count="' . $dataCount . '" data-date="' . $val . '" title="' . $val . ' 编辑' . $dataCount . '次"></rect>'; $j = $j >= 7 ? 0 : $j + 1; } if (!empty($arrDate[0])) { $translate[$arrDate[0]] = $trani; } $lange .= '</g>'; } $moninit = 1; for ($p = 0; $p < 12; $p++) { $year = date('Y') - 1; $mon = date('m') + $p + 1; if ($mon > 12) { $mon = $moninit++; $year = date('Y'); } $sunDay = UserEditBox::getSunday($mon, $year); $Stime = strtotime($sunDay); $sunDay = date('Y-m-d', $Stime); if (!isset($translate[$sunDay])) { $Suntime = strtotime($sunDay); $Sundate = date('Y', $Suntime) - 1; $sunDay = UserEditBox::getSunday($mon, $Sundate); } foreach ($translate as $key => $value) { if (strtotime($key) == strtotime($sunDay)) { $x = $value; } } $lange .= '<text x="' . $x . '" y="-5" class="' . $year . '">' . $mon . '月</text>'; } $lange .= ' <text text-anchor="middle" class="wday" dx="-10" dy="9" style="display: none;">S</text> <text text-anchor="middle" class="wday" dx="-10" dy="22">M</text> <text text-anchor="middle" class="wday" dx="-10" dy="35" style="display: none;">T</text> <text text-anchor="middle" class="wday" dx="-10" dy="48">W</text> <text text-anchor="middle" class="wday" dx="-10" dy="61" style="display: none;">T</text> <text text-anchor="middle" class="wday" dx="-10" dy="74">F</text> <text text-anchor="middle" class="wday" dx="-10" dy="87" style="display: none;">S</text> </g> </svg>'; //url helpManual huijitramac $helpManual = 'http://www.huiji.wiki/wiki/%E5%B8%AE%E5%8A%A9:%E7%BC%96%E8%BE%91%E6%89%8B%E5%86%8C'; $tarmac = 'http://www.huiji.wiki/wiki/%E7%81%B0%E6%9C%BAwiki:%E7%81%B0%E6%9C%BA%E5%81%9C%E6%9C%BA%E5%9D%AA'; $contact = 'http://www.huiji.wiki/wiki/%E7%81%B0%E6%9C%BAwiki:%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC'; } if ($login) { // follow $followUserCount = UserUserFollow::getFollowingCount($wgUser); if ($followUserCount >= 5) { $userHidden = true; } else { $userHidden = false; } $followSiteCount = UserSiteFollow::getFollowingCount($wgUser); if ($followSiteCount >= 5) { $siteHidden = true; } else { $siteHidden = false; } //recommend user $weekRank $monthRank $totalRank $uuf = new UserUserFollow(); if (count($weekRank) >= 8) { $recommend = UserStats::getUserRank(10, 'week'); } elseif (count($monthRank) >= 8) { $recommend = UserStats::getUserRank(20, 'month'); } else { $recommend = UserStats::getUserRank(20, 'total'); } $recommendRes = array(); $flres = array(); foreach ($recommend as $value) { $tuser = User::newFromName($value['user_name']); $isFollow = $uuf->checkUserUserFollow($wgUser, $tuser); if (!$isFollow && $value['user_name'] != $userName) { $flres['avatar'] = $value['avatarImage']; $flres['username'] = $value['user_name']; $flres['userurl'] = $value['user_url']; $recommendRes[] = $flres; } } $recommendRes = array_slice($recommendRes, 0, 5); //recommend site $usf = new UserSiteFollow(); // $recSite = array_slice($allSiteRank,0 ,5); $recommendSite = array(); foreach ($allSiteRank as $value) { $isFollowSite = $usf->checkUserSiteFollow($wgUser, $value['site_prefix']); if ($isFollowSite == false) { $fsres['s_name'] = HuijiPrefix::prefixToSiteName($value['site_prefix']); $fsres['s_url'] = HuijiPrefix::prefixToUrl($value['site_prefix']); $fsres['s_prefix'] = $value['site_prefix']; $fsres['s_avatar'] = (new wSiteAvatar($value['site_prefix'], 'l'))->getAvatarHtml(); $recommendSite[] = $fsres; } } $recommendSite = array_slice($recommendSite, 0, 5); if ($login && !$mobile) { $infoHeader = wfMessage('info-header-user')->parseAsBlock(); } elseif (!$login) { $infoHeader = wfMessage('info-header-anon')->parseAsBlock(); } else { $infoHeader = ''; } } $output .= $templateParser->processTemplate('frontpage', array('mobileUser' => $mobileUser, 'infoHeader' => $infoHeader, 'fileCount' => $fileCount, 'siteCount' => $siteCount, 'userCount' => $userCount, 'editCount' => $editCount, 'pageCount' => $pageCount, 'userName' => $userName, 'userAvatar' => $userAvatar, 'levelUrl' => $levelUrl, 'userLevel' => $userLevel, 'userEdit' => $userEdit, 'follower' => $follower, 'followee' => $followee, 'siteRank' => $siteRank, 'weekRank' => $weekRank, 'monthRank' => $monthRank, 'totalRank' => $totalRank, 'lange' => $lange, 'login' => $login, 'register' => $register, 'userHidden' => $userHidden, 'siteHidden' => $siteHidden, 'active' => $active, 'inactive' => $inactive, 'recommendSite' => $recommendSite, 'recContent' => $recContent, 'followUserCount' => $followUserCount, 'followSiteCount' => $followSiteCount, 'helpManual' => $helpManual, 'tarmac' => $tarmac, 'contact' => $contact)); return $output; }
/** * Show the special page * * @param $params Mixed: parameter(s) passed to the page or null */ public function execute($params) { global $wgUser; $lang = $this->getLanguage(); $out = $this->getOutput(); $request = $this->getRequest(); $user = $this->getUser(); // Set the page title, robot policies, etc. $this->setHeaders(); // Add CSS $out->addModuleStyles('ext.socialprofile.useruserfollows.css'); // Add JS $out->addModuleScripts('ext.socialprofile.useruserfollows.js'); $output = ''; /** * Get query string variables */ $user_name = $request->getVal('user'); $rel_type = $request->getInt('rel_type'); $page = $request->getInt('page'); /** * Redirect Non-logged in users to Login Page * It will automatically return them to the ViewRelationships page */ // if ( !$user->isLoggedIn() && $user_name == '' ) { // $out->setPageTitle( $this->msg( 'ur-error-page-title' )->plain() ); // $login = SpecialPage::getTitleFor( 'Userlogin' ); // $out->redirect( htmlspecialchars( $login->getFullURL( 'returnto=Special:ViewFollows' ) ) ); // return false; // } /** * Set up config for page / default values */ if (!$page || !is_numeric($page)) { $page = 1; } if (!$rel_type || !is_numeric($rel_type)) { $rel_type = 2; } $per_page = 10; $per_row = 2; /** * If no user is set in the URL, we assume its the current user */ if (!$user_name) { $user_name = $user->getName(); } $user_id = User::idFromName($user_name); $target_user = User::newFromId($user_id); $userPage = Title::makeTitle(NS_USER, $user_name); /** * Error message for username that does not exist (from URL) */ if ($user_id == 0) { $out->setPageTitle($this->msg('ur-error-title')->plain()); $output = '<div class="relationship-error-message">' . $this->msg('ur-error-message-no-user')->plain() . '</div> <div class="relationship-request-buttons"> <input type="button" class="site-button" value="' . $this->msg('ur-main-page')->plain() . '" onclick=\'window.location="index.php?title=' . $this->msg('mainpage')->inContentLanguage()->escaped() . '"\' />'; if ($user->isLoggedIn()) { $output .= '<input type="button" class="site-button" value="' . $this->msg('ur-your-profile')->plain() . '" onclick=\'window.location="' . htmlspecialchars($user->getUserPage()->getFullURL()) . '"\' />'; } $output .= '</div>'; $out->addHTML($output); return false; } /** * Get all relationships */ $uuf = new UserUserFollow(); $follows = $uuf->getFollowList($target_user, $rel_type, '', $page); $star_page = $per_page * ($page - 1); $per_follow = array_slice($follows, $star_page, $per_page); $followerCount = UserUserFollow::getFollowerCount($target_user); $followingCount = UserUserFollow::getFollowingCount($target_user); $back_link = Title::makeTitle(NS_USER, $user_name); $target = SpecialPage::getTitleFor('ViewFollows'); $query1 = array('user' => $user_name, 'rel_type' => 1); $query2 = array('user' => $user_name, 'rel_type' => 2); $blast = SpecialPage::getTitleFor('SendBoardBlast'); if ($user_name == $wgUser->getName()) { $noticestr = '关注我的人'; $noticedstr = '我关注的人'; } else { $noticestr = '关注' . $user_name . '的人'; $noticedstr = $user_name . '关注的人'; } if ($rel_type == 1) { $out->setPageTitle($this->msg('ur-title-friend', $user_name)->parse()); $total = $followingCount; $target = SpecialPage::getTitleFor('ViewFollows'); $query1 = array('user' => $user_name, 'rel_type' => 1); $query2 = array('user' => $user_name, 'rel_type' => 2); $rem = $this->msg('ur-remove-relationship-friend')->plain(); $output .= '<div class="back-links"> <a href="' . htmlspecialchars($back_link->getFullURL()) . '">' . $this->msg('ur-backlink', $user_name)->parse() . '</a> | ' . Linker::LinkKnown($target, $noticestr, array(), $query2) . ' </div> <div class="relationship-wrapper"><div class="relationship-count">' . $this->msg('ur-relationship-count-friends', $user_name, $total)->text() . '</div><div class="relationship-list">'; } else { $out->setPageTitle($this->msg('ur-title-foe', $user_name)->parse()); $total = $followerCount; $rem = $this->msg('ur-remove-relationship-foe')->plain(); $output .= '<div class="back-links"> <a href="' . htmlspecialchars($back_link->getFullURL()) . '">' . $this->msg('ur-backlink', $user_name)->parse() . '</a> | ' . Linker::LinkKnown($target, $noticedstr, array(), $query1); if ($user_name == $wgUser->getName()) { $output .= '| ' . Linker::LinkKnown($blast, '向关注我的人群发信息'); } $output .= '</div> <div class="relationship-wrapper"><div class="relationship-count">' . $this->msg('ur-relationship-count-foes', $user_name, $total)->text() . '</div><div class="relationship-list">'; } if ($per_follow) { $x = 1; foreach ($per_follow as $follow) { // $indivRelationship = UserRelationship::getUserRelationshipByID( // $relationship['user_id'], // $user->getID() // ); $username = $follow['user_name']; $userobj = User::newFromName($username); $ust = new UserStatus($userobj); $allinfo = $ust->getUserAllInfo(); // Safe titles $userPage = Title::makeTitle(NS_USER, $allinfo['username']); // $indivFollow = $uuf->checkUserUserFollow($user, User::newFromId($follow['user_id'])); $is_follow = $allinfo['is_follow']; if ($is_follow == 'Y') { $followButton = '<li class="user-user-follow unfollow" data-username="******"><a><i class="fa fa-minus-square-o"></i>取关</a></li> '; } else { $followButton = '<li class="user-user-follow" data-username="******"><i class="fa fa-plus-square-o"></i></i>关注</li> '; } $userPageURL = htmlspecialchars($userPage->getFullURL()); // $avatar = new wAvatar( $follow['user_id'], 'ml' ); // $avatar_img = $avatar->getAvatarURL(); $avatar_img = $allinfo['url']; $user_gender = $allinfo['gender']; $user_status = $allinfo['status']; $user_count = $allinfo['usercounts']; $user_counted = $allinfo['usercounted']; $editcount = $allinfo['editcount']; // $commonfollow = $allinfo['commonfollow']; // $minefollowerhim = $allinfo['minefollowerhim']; $user_level = $allinfo['level']; $username_length = strlen($allinfo['username']); $username_space = stripos($allinfo['username'], ' '); if (($username_space == false || $username_space >= "30") && $username_length > 30) { $user_name_display = substr($allinfo['username'], 0, 30) . ' ' . substr($allinfo['username'], 30, 50); } else { $user_name_display = $allinfo['username']; } if ($user_gender == 'male') { $genderIcon = '♂'; } elseif ($user_gender == 'female') { $genderIcon = '♀'; } else { $genderIcon = '♂/♀'; } $output .= "<div class=\"relationship-item\">\r\n\t\t\t\t\t<a href=\"{$userPageURL}\" data-name=\"{$user_name_display}\">{$avatar_img}</a>\r\n\t\t\t\t\t<div class=\"relationship-info\">\r\n\t\t\t\t\t\t<div class=\"relationship-name\">\r\n\t\t\t\t\t\t\t<a href=\"{$userPageURL}\">{$user_name_display}</a><i>{$genderIcon}</i><i>{$user_level}</i>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"relationship-actions\">"; if (empty($user_status)) { $output .= '<div>这个人很懒</div>'; } else { $output .= '<div>' . $user_status . '</div>'; } $output .= '<div>关注数:' . $user_count . ' | 被关注:' . $user_counted . ' | 编辑:' . $editcount . '</div>'; if ($allinfo['username'] != $wgUser->getName()) { $output .= '<ul class="relationship-list-btn">' . $followButton; } else { $output .= '<ul class="relationship-list-btn">'; } $target = SpecialPage::getTitleFor('GiveGift'); $query = array('user' => $follow['user_name']); $output .= '<li>' . Linker::LinkKnown($target, '<i class="fa fa-gift"></i>礼物</a>', array(), $query) . '</li> </ul>'; $output .= '</div> <div class="cleared"></div> </div>'; $output .= '</div>'; if ($x == count($follows) || $x != 1 && $x % $per_row == 0) { $output .= '<div class="cleared"></div>'; } $x++; } } /** * Build next/prev nav */ $total = intval(str_replace(',', '', $total)); $numofpages = $total / $per_page; $pageLink = $this->getPageTitle(); if ($numofpages > 1) { $output .= '<nav class="page-nav pagination">'; if ($page > 1) { $output .= '<li>' . Linker::link($pageLink, '<span aria-hidden="true">«</span>', array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $page - 1)) . '</li>'; } if ($total % $per_page != 0) { $numofpages++; } // if ( $numofpages >= 9 && $page < $total ) { // $numofpages = 9 + $page; // } // if ( $numofpages >= ( $total / $per_page ) ) { // $numofpages = ( $total / $per_page ) + 1; // } for ($i = 1; $i <= $numofpages; $i++) { if ($i == $page) { $output .= '<li class="active"><a href="#">' . $i . ' <span class="sr-only">(current)</span></a></li>'; } else { $output .= '<li>' . Linker::link($pageLink, $i, array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $i)) . '</li>'; } } if ($total - $per_page * $page > 0) { $output .= '<li>' . Linker::link($pageLink, '<span aria-hidden="true">»</span>', array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $page + 1)) . '</li>'; } $output .= '</nav></div></div></div></div>'; } $out->addHTML($output); }
/** * Show the special page * * @param $par Mixed: parameter passed to the page or null */ public function execute($par) { global $wgUploadPath, $wgUser; $out = $this->getOutput(); $request = $this->getRequest(); $user = $this->getUser(); // Set the page title, robot policies, etc. $this->setHeaders(); // Add CSS $out->addModuleStyles('ext.socialprofile.systemgifts.css'); $output = ''; $user_name = $request->getVal('user'); if ($user_name) { $user = User::newFromName($user_name); } $page = $request->getInt('page', 1); /** * Redirect Non-logged in users to Login Page * It will automatically return them to the ViewSystemGifts page */ if ($user->getID() == 0 && $user_name == '') { $out->setPageTitle($this->msg('ga-error-title')->plain()); $login = SpecialPage::getTitleFor('Userlogin'); $out->redirect(htmlspecialchars($login->getFullURL('returnto=Special:ViewSystemGifts'))); return false; } /** * If no user is set in the URL, we assume it's the current user */ if (!$user_name) { $user_name = $user->getName(); } $user_id = User::idFromName($user_name); /** * Error message for username that does not exist (from URL) */ if ($user_id == 0) { $out->setPageTitle($this->msg('ga-error-title')->plain()); $out->addHTML($this->msg('ga-error-message-no-user')->plain()); return false; } /** * Config for the page */ $per_page = 20; $per_row = 2; /** * Get all Gifts for this user into the array */ $rel = new UserSystemGifts($user_name); $gifts = $rel->getUserGiftList(0, $per_page, $page); $total = '<span style="color:#428bca;font-size:20px;font-weight: bold;">' . $rel->getGiftCountByUsername($user_name) . '</span>'; $curUserObj = User::newFromName($user_name); $uuf = new UserUserFollow(); $follows = $uuf->getFollowList($curUserObj, 1, '', $page); $follows[] = array('user_name' => $curUserObj->getName()); $giftCount = array(); foreach ($follows as $value) { $giftCount[$value['user_name']] = $rel->getGiftCountByUsername($value['user_name']); } arsort($giftCount); $max = count($giftCount); $countRes = array(); $i = 1; foreach ($giftCount as $key => $value) { $countRes[$key] = $i; $i++; } if ($curUserObj->getName() == $wgUser->getName()) { $who = '我'; } else { $who = $curUserObj->getName(); } // print_r($countRes); /** * Show gift count for user */ $allGiftList = '/wiki/' . SpecialPage::getTitleFor('SystemGiftList'); $out->setPageTitle($this->msg('ga-title', $rel->user_name)->parse()); $output .= '<div class="back-links">' . $this->msg('ga-back-link', htmlspecialchars($user->getUserPage()->getFullURL()), $rel->user_name)->text() . '</div>'; $output .= '<div class="ga-count">' . $this->msg('ga-count', $rel->user_name, $total)->parse() . ', 在' . $who . '的好友中排第<span style="color:#428bca;font-size:20px;font-weight: bold;">' . $countRes[$curUserObj->getName()] . '</span>名</div>'; $output .= '<div><a href="' . $allGiftList . '">查看所有奖励</a></div><div class="giftlist">'; // Safelinks $view_system_gift_link = SpecialPage::getTitleFor('ViewSystemGift'); // print_r($gifts); // print_r($countRes); if ($gifts) { foreach ($gifts as $gift) { $gift_image = "<div class='img'><img src=\"{$wgUploadPath}/awards/" . SystemGifts::getGiftImage($gift['gift_id'], 'l') . '" border="0" alt="" /></div>'; $output .= "<div class=\"ga-item have\">\n\t\t\t\t\t<a href=\"" . htmlspecialchars($view_system_gift_link->getFullURL('gift_id=' . $gift['id'])) . "\" data-toggle='popover' data-trigger='hover' title='{$gift['gift_name']}' data-content='{$gift['gift_description']}'>\n {$gift_image}"; if ($gift['status'] == 1) { if ($user_name == $user->getName()) { $rel->clearUserGiftStatus($gift['id']); $rel->decNewSystemGiftCount($user->getID()); } /*$output .= ' <span class="label label-success">' . $this->msg( 'ga-new' )->plain() . '</span>';*/ } $output .= '<div class="cleared"></div> </a></div>'; } $output .= '</div>'; } /** * Build next/prev nav */ $pcount = $rel->getGiftCountByUsername($user_name); $numofpages = $pcount / $per_page; $page_link = $this->getPageTitle(); if ($numofpages > 1) { $output .= '<div class="page-nav-wrapper"><nav class="page-nav pagination">'; if ($page > 1) { $output .= '<li>' . Linker::link($page_link, '<span aria-hidden="true">«</span>', array(), array('user' => $user_name, 'page' => $page - 1)) . '</li>'; } if ($pcount % $per_page != 0) { $numofpages++; } if ($numofpages >= 9 && $page < $pcount) { $numofpages = 9 + $page; } // if ( $numofpages >= ( $total / $per_page ) ) { // $numofpages = ( $total / $per_page ) + 1; // } for ($i = 1; $i <= $numofpages; $i++) { if ($i == $page) { $output .= '<li class="active"><a href="#">' . $i . ' <span class="sr-only">(current)</span></a></li>'; } else { $output .= '<li>' . Linker::link($page_link, $i, array(), array('user' => $user_name, 'page' => $i)); } } if ($pcount - $per_page * $page > 0) { $output .= '<li>' . Linker::link($page_link, '<span aria-hidden="true">»</span>', array(), array('user' => $user_name, 'page' => $page + 1)) . '</li>'; } $output .= '</nav></div>'; } /** * Output everything */ $out->addHTML($output); }