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++; } }
/** * get site's best rank * @return string */ public function getBestRank() { $yesterday = date('Y-m-d', strtotime('-1 days')); $key = $this->getCustomKey('getBestRank' . $yesterday); $data = $this->cache->get($key); if ($data != '') { return $data; } else { $rank = AllSitesInfo::getSiteBestRank($this->mPrefix); return $rank; $this->cache->set($key, $rank, 48 * 60 * 60); } return $rank; }