/** * Show the special page * * @param $par Mixed: parameter passed to the page or null */ public function execute($par) { global $wgUploadPath, $wgUser, $wgHuijiPrefix; $templateParser = new TemplateParser(__DIR__ . '/pages'); $out = $this->getOutput(); $user = $this->getUser(); if (!$user->isAllowed('AdminDashboard')) { $out->permissionRequired('AdminDashboard'); return; } // Set the page title, robot policies, etc. $this->setHeaders(); // Add CSS $out->addModules('ext.socialprofile.userprofile.css'); $out->addModules('ext.socialprofile.admindashboard.css'); // Add js and message // $out->addModules( 'skin.bootstrapmediawiki.huiji.getRecordsInterface.js' ); $out->addModules('ext.socialprofile.admindashboard.js'); $out->addModules('ext.socialprofile.userprofile.js'); $output = ''; // Prevent E_NOTICE $yesterday = date("Y-m-d", strtotime("-1 day")); $totaledit = SiteStats::edits(); $ueb = new UserEditBox(); $rankInfo = AllSitesInfo::getAllSitesRankData($wgHuijiPrefix, $yesterday); $usf = new UserSiteFollow(); $follows = $usf->getSiteFollowers('', $wgHuijiPrefix); // print_r($follows); $followCount = count($follows); if ($followCount >= 8) { $follows = array_slice($follows, 0, 8); $display = ''; } else { $display = 'none'; } $newFollow = array(); foreach ($follows as $value) { $arr['user_name'] = $value['user_name']; $userPage = Title::makeTitle(NS_USER, $value['user_name']); $arr['user_url'] = htmlspecialchars($userPage->getFullURL()); $arr['follow_date'] = wfMessage('comments-time-ago', HuijiFunctions::getTimeAgo(strtotime($value['follow_date'])))->text(); $newFollow[] = $arr; } $sentToAll = SpecialPage::getTitleFor('SendToFollowers')->getFullURL(); $showMore = SpecialPage::getTitleFor('EditRank')->getFullURL(); $rightsManage = SpecialPage::getTitleFor('用户权限')->getFullURL(); $blockUsers = SpecialPage::getTitleFor('封禁')->getFullURL(); $freezeUsers = SpecialPage::getTitleFor('解除封禁')->getFullURL(); $replaceText = SpecialPage::getTitleFor('替换文本')->getFullURL(); $siteRankPage = SpecialPage::getTitleFor('SiteRank')->getFullURL(); $allSpecial = SpecialPage::getTitleFor('特殊页面')->getFullURL(); $siteAvatar = (new wSiteAvatar($wgHuijiPrefix, 'l'))->getAvatarHtml(); $token = $user->getEditToken(); if (is_null($newFollow)) { $newFollow = false; } $output .= $templateParser->processTemplate('admin_index', array('siteRank' => isset($rankInfo[0]['site_rank']) ? $rankInfo[0]['site_rank'] : '暂无', 'siteScore' => isset($rankInfo[0]['site_score']) ? $rankInfo[0]['site_score'] : '暂无', 'yesterdayCount' => UserSiteFollow::getFollowerCountOneday($wgHuijiPrefix, $yesterday), 'totalCount' => UserSiteFollow::getFollowerCount($wgHuijiPrefix), 'yesterdayEdit' => $ueb->getSiteEditCount('', $wgHuijiPrefix, $yesterday, $yesterday), 'totalEdit' => $totaledit, 'totalView' => $ueb->getSiteViewCount(-1, $wgHuijiPrefix, '', ''), 'yesterdayView' => $ueb->getSiteViewCount(-1, $wgHuijiPrefix, $yesterday, $yesterday), 'newFollow' => $newFollow, 'sendToAll' => $sentToAll, 'showMore' => $showMore, 'display' => $display, 'rightsManage' => $rightsManage, 'blockUsers' => $blockUsers, 'freezeUsers' => $freezeUsers, 'replaceText' => $replaceText, 'siteRankPage' => $siteRankPage, 'allSpecial' => $allSpecial, 'siteAvatar' => $siteAvatar, 'token' => $token)); $out->addHtml($output); }
/** * Show the special page * * @param $par Mixed: parameter passed to the page or null */ public function execute($par) { global $wgUploadPath, $wgUser, $wgHuijiPrefix; $templateParser = new TemplateParser(__DIR__ . '/pages'); $out = $this->getOutput(); $user = $this->getUser(); // Set the page title, robot policies, etc. $this->setHeaders(); // Add Less $out->addModuleStyles('ext.socialprofile.admindashboard.less'); // Add CSS $out->addModuleStyles('ext.socialprofile.admindashboard.css'); // Add js and messages $out->addModules('ext.socialprofile.admindashboard.js'); $output = ''; // Prevent E_NOTICE $yesterday = date("Y-m-d", strtotime("-1 day")); $dbr = wfGetDB(DB_SLAVE); $counter = new SiteStatsInit($dbr); $totaledit = $counter->edits(); $ueb = new UserEditBox(); $output .= $templateParser->processTemplate('admin_index', array('yesterdayCount' => UserSiteFollow::getSiteCountOnedayDB($wgHuijiPrefix, $yesterday), 'totalCount' => UserSiteFollow::getSiteCount($wgHuijiPrefix), 'yesterdayEdit' => $ueb->getSiteEditCountOneday($wgHuijiPrefix, $yesterday), 'totalEdit' => $totaledit, 'totalView' => $ueb->getSiteViewCountTotal($wgHuijiPrefix), 'yesterdayView' => $ueb->getSiteViewCountOneday($wgHuijiPrefix, $yesterday))); $out->addHtml($output); }
function view() { global $wgOut, $wgUser, $wgHuijiprefix, $wgOnlineStatusBarDefaultOffline, $wgOnlineStatusBarDefaultOnline; $wgOut->setPageTitle($this->mTitle->getPrefixedText()); // No need to display noarticletext, we use our own message if (!$this->user_id) { parent::view(); return ''; } $staff = ''; $bureaucrat = ''; $sysop = ''; $rollback = ''; $autoconfirmed = ''; if (in_array('staff', $this->user->getEffectiveGroups(true))) { $staff = '<li>职员</li> '; } if (in_array('bot', $this->user->getEffectiveGroups(true))) { $staff = '<li>机器人</li> '; } if (in_array('bureaucrat', $this->user->getEffectiveGroups(true))) { $bureaucrat = '<li>行政员</li> '; } if (in_array('sysop', $this->user->getEffectiveGroups(true))) { $sysop = '<li>管理员</li> '; } if (in_array('rollback', $this->user->getEffectiveGroups(true))) { $rollback = '<li>回退员</li> '; } if (in_array('autoconfirmed', $this->user->getEffectiveGroups(true))) { $autoconfirmed = '<li>自动确认用户</li> '; } $usf = new UserSiteFollow(); $uuf = new UserUserFollow(); $topFollowedSites = $usf->getTopFollowedSitesWithDetails($wgUser->getId(), $this->user_id); // $temp = array(); // $res = array(); // foreach( $topFollowedSites as $value ){ // // if ( $wgUser->isLoggedIn() ) { // $user = User::newFromName( $this->user_name ); // // } // $temp['url'] = HuijiPrefix::prefixToUrl($value); // $temp['name'] = HuijiPrefix::prefixToSiteName($value); // $temp['count'] = UserStats::getSiteEditsCount($user,$value); // $res[] = $temp; // } //sort by edit num $count = array(); foreach ($topFollowedSites as $val) { $count[] = $val['count']; } array_multisort($count, SORT_DESC, $topFollowedSites); $userCount = UserSiteFollow::getFollowingCount($this->user); if ($this->isOwner()) { $target = SpecialPage::getTitleFor('ViewFollows'); $query = array('user' => $this->user_name, 'rel_type' => 1); $button1 = '<li class="mw-ui-button">' . Linker::LinkKnown($target, '<i class="fa fa-users"></i>朋友', array(), $query) . '</li> '; } elseif ($uuf->checkUserUserFollow($wgUser, $this->user)) { $button1 = '<li id="user-user-follow" class="unfollow mw-ui-button"><a><i class="fa fa-minus-square-o"></i>取关</a></li> '; } else { $button1 = '<li id="user-user-follow" class="mw-ui-button"><i class="fa fa-plus-square-o"></i></i>关注</li> '; } if ($this->isOwner()) { $target = SpecialPage::getTitleFor('ViewGifts'); $query = array('user' => $this->user_name); $button2 = '<li class="mw-ui-button">' . Linker::LinkKnown($target, '<i class="fa fa-gift"></i>礼物</a>', array(), $query) . '</li> '; } else { $target = SpecialPage::getTitleFor('GiveGift'); $query = array('user' => $this->user_name); $button2 = '<li class="mw-ui-button">' . Linker::LinkKnown($target, '<i class="fa fa-gift"></i>赠送</a>', array(), $query) . '</li> '; } $contributions = SpecialPage::getTitleFor('Contributions'); $watchlist = SpecialPage::getTitleFor('Watchlist'); $send_message = SpecialPage::getTitleFor('UserBoard'); $user_safe = urlencode($this->user); $tools = array(); if ($wgUser->isLoggedIn()) { if (!$this->isOwner()) { $tools[] = '<li><a href="' . htmlspecialchars($send_message->getFullURL('user='******'&conv=' . $user_safe)) . '" rel="nofollow">' . wfMessage('user-send-message')->escaped() . '</a></li>'; if ($wgUser->isAllowed('block')) { # Block / Change block / Unblock links if ($this->user->isBlocked() && $this->user->getBlock()->getType() != Block::TYPE_AUTO) { $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Block', $this->user_name), wfMessage('change-blocklink')->escaped()) . '</li>'; $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Unblock', $this->user_name), wfMessage('unblocklink')->escaped()) . '</li>'; } else { $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Block', $this->user_name), wfMessage('blocklink')->escaped()) . '</li>'; } } # Block log link $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Log', 'block'), wfMessage('sp-contributions-blocklog'), array(), array('page' => $this->mTitle->getPrefixedText())) . '</li>'; # Suppression log link if ($wgUser->isAllowed('suppressionlog')) { $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Log', 'suppress'), wfMessage('sp-contributions-suppresslog')->escaped(), array(), array('offender' => $this->user_name)) . '</li>'; } } # Uploads $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Listfiles', $this->user_name), wfMessage('sp-contributions-uploads')->escaped()) . '</li>'; # Other logs link $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Log', $this->user_name), wfMessage('sp-contributions-logs')->escaped()) . '</li>'; # Add link to deleted user contributions for priviledged users if ($wgUser->isAllowed('deletedhistory')) { $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('DeletedContributions', $this->user_name), wfMessage('sp-contributions-deleted')->escaped()) . '</li>'; } # Add a link to change user rights for privileged users $userrightsPage = new UserrightsPage(); $userrightsPage->setContext($this->getContext()); if ($userrightsPage->userCanChangeRights($this->user)) { $tools[] = '<li>' . Linker::linkKnown(SpecialPage::getTitleFor('Userrights', $this->user_name), wfMessage('sp-contributions-userrights')->escaped()) . '</li>'; } if ($this->isOwner()) { $tools[] = '<li><a href="' . htmlspecialchars($watchlist->getFullURL()) . '">' . wfMessage('user-watchlist')->escaped() . '</a></li>'; } } //user isonline // $_SESSION['username'] = $wgUser->getName(); // $user = User::newFromName( $this->user_name ); // $isonline = OnlineStatusBar_StatusCheck::getStatus( $user ); // if($isonline === 'online'){ // $online = '在线'; // }else{ // $online = '未知'; // } // $wgOut->addModuleScripts( 'ext.socialprofile.useruserfollows.js' ); #this script is already added globally // $wgOut->addHTML($wgAjaxExportList); # What is that for?? $wgOut->addHTML('<div class="profile-page"><div id="profile-top" class="jumbotron row">'); $wgOut->addHTML($this->getProfileTop($this->user_id, $this->user_name)); $wgOut->addHTML(' <div class="col-md-6 col-sm-12 col-xs-12 profile-top-right"> <div class="profile-top-right-top"> <div><h4><span class="icon-huiji"></span>在本wiki</h4></div> <ul>' . $staff . $bureaucrat . $sysop . $rollback . $autoconfirmed . '</ul> </div> <div class="profile-top-right-bottom"> <ul>'); foreach ($topFollowedSites as $value) { $Turl[] = HuijiPrefix::prefixToUrl($value['key']); $Tname[] = $value['val']; $Tcount[] = $value['count']; } if (isset($Tname)) { $num = count($Tname) > 3 ? 3 : count($Tname); for ($i = 0; $i < $num; $i++) { $wgOut->addHTML('<li><a href="' . $Turl[$i] . '">' . $Tname[$i] . '</a></li>'); } } $wgOut->addHTML(' </ul> '); if ($this->isOwner()) { $wgOut->addHTML('<a >查看我关注的<i id="site-following-count">' . $userCount . '</i>个wiki</a>'); } else { $wgOut->addHTML('<a >关注了<i>' . $userCount . '</i>个wiki</a>'); } $wgOut->addHTML(' <div> <ul class="profile-interactive">' . $button1 . $button2 . '<li class="dropdown-toggle mw-ui-button" data-toggle="dropdown" aria-expanded="false"><span class="glyphicon glyphicon-align-justify"></span></li> <ul class="dropdown-menu" role="menu"> ' . implode('', $tools) . ' <li><a href="' . htmlspecialchars($contributions->getFullURL('target=' . $user_safe . '&contribs=user')) . '" rel="nofollow">' . wfMessage('user-contributions')->escaped() . '</a></li> </ul> </ul> </div> </div> </div> '); $wgOut->addHTML('<div class="cleared"></div></div>'); // // User does not want social profile for User:user_name, so we just // // show header + page content // if ( // $this->getTitle()->getNamespace() == NS_USER && // $this->profile_data['user_id'] && // $this->profile_data['user_page_type'] == 0 // ) // { // parent::view(); // return ''; // } $ueb = new UserEditBox(); $editBox = $editData = array(); $userEditInfo = $ueb->getUserEditInfo($this->user_id); $maxlen = $currentMaxlen = 0; //init variables. if ($userEditInfo != false) { $wgOut->addHTML('<div id="user-page-center" class="col-md-12 hidden-xs"> <div class="panel panel-default"><div class="user-section-heading panel-heading"> <div class="user-section-title">贡献</div> <div class="action-right"></div> <div class="cleared"></div></div><div class="user-gift-container panel-body check-body">'); foreach ($userEditInfo as $value) { if (is_object($value) && !empty($value->_id) && $value->value > 0) { $editBox[$value->_id] = $value->value; $editData[] = $value->_id; //echo $value->_id.'->'.$value->value.'<br>'; } } $today = date("Y-m-d"); $yesterday = date("Y-m-d", strtotime("-1 day")); $editBox[$today] = UserEditBox::getTodayEdit($this->user_id); 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; } } $usg = new UserSystemGifts($this->user->getName()); if ($maxlen == 2) { $usg->sendSystemGift(33); } elseif ($maxlen == 3) { $usg->sendSystemGift(34); } elseif ($maxlen == 7) { $usg->sendSystemGift(35); } elseif ($maxlen == 13) { $usg->sendSystemGift(36); } elseif ($maxlen == 23) { $usg->sendSystemGift(37); } elseif ($maxlen == 61) { $usg->sendSystemGift(38); } elseif ($maxlen == 109) { $usg->sendSystemGift(39); } elseif ($maxlen == 199) { $usg->sendSystemGift(40); } elseif ($maxlen == 367) { $usg->sendSystemGift(41); } elseif ($maxlen == 727) { $usg->sendSystemGift(42); } elseif ($maxlen == 1213) { $usg->sendSystemGift(43); } elseif ($maxlen == 1579) { $usg->sendSystemGift(44); } elseif ($maxlen == 1949) { $usg->sendSystemGift(45); } elseif ($maxlen == 2333) { $usg->sendSystemGift(46); } $wgOut->addHTML(' <div class="check-wrapper"><svg width="725" 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; $wgOut->addHTML(' <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'; } $wgOut->addHTML('<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; } $wgOut->addHTML('</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; } } $wgOut->addHTML('<text x="' . $x . '" y="-5" class="' . $year . '">' . $mon . '月</text>'); } $wgOut->addHTML(' <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> <div class="legend-intro"> <span><b>编辑数</b> 低</span> <ul class="legend"> <li style="background-color: #eee"></li> <li style="background-color: #86beee"></li> <li style="background-color: #5ea2de"></li> <li style="background-color: #256fb1"></li> <li style="background-color: #0d5493"></li> </ul> <span>高</span> </div> <div class="edit-statistics"><p>连续编辑纪录<span>' . $maxlen . '</span></p><p>总编辑天数<span>' . $totalEdit . '</span></p><p>当前连续编辑<span>' . $currentMaxlen . '<span></p></div> </div>'); $wgOut->addHTML('</div></div></div>'); } // Left side $wgOut->addHTML('<div id="user-page-left" class="col-md-6">'); if (!wfRunHooks('UserProfileBeginLeft', array(&$this))) { wfDebug(__METHOD__ . ": UserProfileBeginLeft messed up profile!\n"); } if ($this->user_id != $wgUser->getId()) { $wgOut->addHTML($this->getCommonInterest($wgUser->getId(), $this->user_id)); } $wgOut->addHTML($this->getRelationships($this->user_name, 1)); $wgOut->addHTML($this->getRelationships($this->user_name, 2)); $wgOut->addHTML($this->getGifts($this->user_name)); $wgOut->addHTML($this->getCustomInfo($this->user_name)); $wgOut->addHTML($this->getInterests($this->user_name)); $wgOut->addHTML($this->getFanBoxes($this->user_name)); $wgOut->addHTML($this->getUserStats($this->user_id, $this->user_name)); $wgOut->addHTML($this->getEditingActivity($this->user_name)); $wgOut->addHTML($this->getNonEditingActivity($this->user_name)); if (!wfRunHooks('UserProfileEndLeft', array(&$this))) { wfDebug(__METHOD__ . ": UserProfileEndLeft messed up profile!\n"); } $wgOut->addHTML('</div>'); wfDebug("profile start right\n"); // Right side $wgOut->addHTML('<div id="user-page-right" class="col-md-6">'); if (!wfRunHooks('UserProfileBeginRight', array(&$this))) { wfDebug(__METHOD__ . ": UserProfileBeginRight messed up profile!\n"); } $wgOut->addHTML($this->getAwards($this->user_name)); $wgOut->addHTML($this->getPersonalInfo($this->user_id, $this->user_name)); // Hook for BlogPage if (!wfRunHooks('UserProfileRightSideAfterActivity', array($this))) { wfDebug(__METHOD__ . ": UserProfileRightSideAfterActivity hook messed up profile!\n"); } $wgOut->addHTML($this->getCasualGames($this->user_id, $this->user_name)); $wgOut->addHTML($this->getUserBoard($this->user_id, $this->user_name)); if (!wfRunHooks('UserProfileEndRight', array(&$this))) { wfDebug(__METHOD__ . ": UserProfileEndRight messed up profile!\n"); } $wgOut->addHTML('</div><div class="cleared"></div></div>'); }
static function getAllSitesRank() { $allSite = HuijiPrefix::getAllPrefix(); $today = date('Y-m-d'); $yesterday = date('Y-m-d', strtotime('-1 days')); $lastWeek = date('Y-m-d', strtotime('-8 days')); $lastMonth = date('Y-m-d', strtotime('-31 days')); $ueb = new UserEditBox(); $editUserYesterday = $ueb->getSiteEditUserCount($yesterday, $yesterday); $editUserWeek = $ueb->getSiteEditUserCount($lastWeek, $yesterday); $editUserMonth = $ueb->getSiteEditUserCount($lastMonth, $yesterday); // print_r($editUserYesterday); $viewDate = array(); $editDate = array(); $editUserDate = array(); foreach ($allSite as $value) { $viewResult['yesterday'] = $ueb->getSiteViewCount('', $value, $yesterday, $yesterday); $viewResult['week'] = $ueb->getSiteViewCount('', $value, $lastWeek, $yesterday); $viewResult['month'] = $ueb->getSiteViewCount('', $value, $lastMonth, $yesterday); $editResult['yesterday'] = $ueb->getSiteEditCount('', $value, $yesterday, $yesterday); $editResult['week'] = $ueb->getSiteEditCount('', $value, $lastWeek, $yesterday); $editResult['month'] = $ueb->getSiteEditCount('', $value, $lastMonth, $yesterday); $viewDate[$value] = round($viewResult['yesterday'] + $viewResult['week'] / 7 + $viewResult['month'] / 30); $editDate[$value] = round($editResult['yesterday'] + $editResult['week'] / 7 + $editResult['month'] / 30); $editUserDate[$value] = round(isset($editUserYesterday[$value]) ? $editUserYesterday[$value] : 0 + (isset($editUserWeek[$value]) ? $editUserWeek[$value] : 0) / 7 + (isset($editUserMonth[$value]) ? $editUserMonth[$value] : 0) / 30); } //sort arr asort($viewDate); asort($editDate); asort($editUserDate); // print_r($editUserDate); $i = 1; //loop score $viewRes = array(); $editRes = array(); $editUserRes = array(); foreach ($viewDate as $key => $value) { $viewRes[$key] = $i * 10; $i++; } $j = 1; foreach ($editDate as $key => $value) { $editRes[$key] = $j * 10; $j++; } $k = 1; foreach ($editUserDate as $key => $value) { $editUserRes[$key] = $k * 10; $k++; } //highest score $highest = ($k - 1) * 100; //Comprehensive 2 4 4 $allRank = array(); foreach ($viewRes as $key => $value) { $allRank[$key] = $value * 2 + $editRes[$key] * 4 + $editUserRes[$key] * 4; } arsort($allRank); $x = 1; // print_r($allRank); //final rank foreach ($allRank as $key => $value) { $rank = $x; $score = round(100 * $value / $highest, 2); // $numRank['rank'] = $x; // $numRank['score'] = round(100*$value/$highest, 2); // $res[$key] = $numRank; //insert $dbw = wfGetDB(DB_MASTER); $dbw->insert('site_rank', array('site_rank' => $rank, 'site_score' => $score, 'site_prefix' => $key, 'site_rank_date' => $yesterday), __METHOD__); //best rank $key_rank = AllSitesInfo::getSiteBestRank($key); $site_rank = !is_null($key_rank) ? $key_rank : 1000; if ($rank < $site_rank) { $dbw = wfGetDB(DB_MASTER); $dbw->upsert('site_best_rank', array('site_rank' => $rank, 'site_prefix' => $key), array('site_prefix' => $key), array('site_rank' => $rank), __METHOD__); } $x++; } }
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; }
/** * get the site's some days view count * @param sting $fromTime '2016-01-01' * @param string $toTime '2016-02-02' * @return array */ public function getViewCount($fromTime, $toTime) { $ueb = new UserEditBox(); return $ueb->getSiteViewCount(-1, $this->mPrefix, $fromTime, $toTime); }