public static function work(&$controllerContext, &$viewContext) { $viewContext->viewName = 'user-profile'; $viewContext->meta->title = $viewContext->user->name . '\'s profile — ' . Config::$title; $viewContext->meta->description = $viewContext->user->name . '\'s profile.'; WebMediaHelper::addEntries($viewContext); WebMediaHelper::addMiniSections($viewContext); WebMediaHelper::addCustom($viewContext); $viewContext->yearsOnMal = null; if (intval($viewContext->user->join_date)) { list($year, $month, $day) = explode('-', $viewContext->user->join_date); $time = mktime(0, 0, 0, $month, $day, $year); $diff = time() - $time; $diff /= 3600 * 24; $viewContext->yearsOnMal = $diff / 361.25; } $viewContext->friends = $viewContext->user->getFriends(); $viewContext->finished = []; $viewContext->meanUserScore = []; $viewContext->meanGlobalScore = []; $viewContext->franchiseCount = []; $viewContext->mismatchedCount = []; foreach (Media::getConstList() as $media) { $list = $viewContext->user->getMixedUserMedia($media); $listFinished = UserMediaFilter::doFilter($list, UserMediaFilter::finished()); $viewContext->finished[$media] = count($listFinished); unset($listFinished); $listNonPlanned = UserMediaFilter::doFilter($list, UserMediaFilter::nonPlanned()); $viewContext->meanUserScore[$media] = RatingDistribution::fromEntries($listNonPlanned)->getMeanScore(); $franchises = Model_MixedUserMedia::getFranchises($listNonPlanned); $viewContext->franchiseCount[$media] = count(array_filter($franchises, function ($franchise) { return count($franchise->ownEntries) > 1; })); unset($franchises); unset($listNonPlanned); if ($media == Media::Anime) { $viewContext->episodes = array_sum(array_map(function ($mixedMediaEntry) { return $mixedMediaEntry->finished_episodes; }, $list)); } else { $viewContext->chapters = array_sum(array_map(function ($mixedMediaEntry) { return $mixedMediaEntry->finished_chapters; }, $list)); } $mismatched = $viewContext->user->getMismatchedUserMedia($list); $viewContext->mismatchedCount[$media] = count($mismatched); unset($mismatched); unset($list); $globalsCache = file_exists(Config::$globalsCachePath) ? TextHelper::loadJson(Config::$globalsCachePath, true) : []; $viewContext->meanGlobalScore[$media] = array_map(function ($v) { return RatingDistribution::fromArray($v); }, $globalsCache['rating-dist'])[$media]->getMeanScore(); } }
public static function getRatingDistribution($media) { $query = 'SELECT score, COUNT(score) AS count FROM usermedia WHERE media = ? GROUP BY score'; $result = R::getAll($query, [$media]); $dist[$media] = []; foreach ($result as $row) { $count = $row['count']; $score = $row['score']; $dist[$media][$score] = $count; } return RatingDistribution::fromArray($dist[$media]); }
public static function work(&$controllerContext, &$viewContext) { $viewContext->viewName = 'index-globals'; $viewContext->meta->title = 'MALgraph - global statistics'; $viewContext->meta->description = 'Global community statistics on MALgraph, an online tool that extends your MyAnimeList profile.'; WebMediaHelper::addHighcharts($viewContext); WebMediaHelper::addInfobox($viewContext); WebMediaHelper::addMiniSections($viewContext); WebMediaHelper::addCustom($viewContext); $globalsCache = file_exists(Config::$globalsCachePath) ? TextHelper::loadJson(Config::$globalsCachePath, true) : []; $viewContext->userCount = $globalsCache['user-count']; $viewContext->mediaCount = $globalsCache['media-count']; $viewContext->ratingDistribution = array_map(function ($v) { return RatingDistribution::fromArray($v); }, $globalsCache['rating-dist']); $viewContext->queuedUserCount = (new Queue(Config::$userQueuePath))->size(); $viewContext->queueSizes = TextHelper::loadJson(Config::$userQueueSizesPath, true); }