public static function work(&$controllerContext, &$viewContext) { $viewContext->viewName = 'user-ratings'; $viewContext->meta->title = 'MALgraph - ' . $viewContext->user->name . ' - rating statistics (' . Media::toString($viewContext->media) . ')'; $viewContext->meta->description = $viewContext->user->name . '’s ' . Media::toString($viewContext->media) . ' rating statistics on MALgraph, an online tool that extends your MyAnimeList profile.'; $viewContext->meta->keywords = array_merge($viewContext->meta->keywords, ['profile', 'list', 'achievements', 'ratings', 'history', 'favorites', 'suggestions', 'recommendations']); WebMediaHelper::addHighcharts($viewContext); WebMediaHelper::addFarbtastic($viewContext); WebMediaHelper::addInfobox($viewContext); WebMediaHelper::addEntries($viewContext); WebMediaHelper::addCustom($viewContext); $list = $viewContext->user->getMixedUserMedia($viewContext->media); $list = UserMediaFilter::doFilter($list, UserMediaFilter::nonPlanned()); $viewContext->ratingDistribution = RatingDistribution::fromEntries($list); $viewContext->ratingTimeDistribution = RatingTimeDistribution::fromEntries($list); $listNoMovies = UserMediaFilter::doFilter($list, UserMediaFilter::nonMovie()); $viewContext->lengthDistribution = MediaLengthDistribution::fromEntries($listNoMovies); $f = explode('-', $viewContext->user->join_date); if (count($f) != 3) { $viewContext->earliestTimeKnown = null; $viewContext->meanTime = null; } else { list($year, $month, $day) = $f; $earliest = mktime(0, 0, 0, $month, $day, $year); $totalTime = 0; foreach ($list as $mixedUserMedia) { $totalTime += $mixedUserMedia->finished_duration; foreach ([$mixedUserMedia->start_date, $mixedUserMedia->end_date] as $k) { $f = explode('-', $k); if (count($f) != 3) { continue; } $year = intval($f[0]); $month = intval($f[1]); $day = intval($f[2]); if (!$year or !$month or !$day) { continue; } $time = mktime(0, 0, 0, $month, $day, $year); if ($time < $earliest) { $earliest = $time; } } } $viewContext->earliestTimeKnown = $earliest; $viewContext->meanTime = $totalTime / max(1, (time() - $earliest) / (24.0 * 3600.0)); } }
public static function work(&$controllerContext, &$viewContext) { $viewContext->viewName = 'user-ratings'; $viewContext->meta->title = $viewContext->user->name . ' — Ratings (' . Media::toString($viewContext->media) . ') — ' . Config::$title; $viewContext->meta->description = $viewContext->user->name . '\'s ' . Media::toString($viewContext->media) . ' ratings.'; WebMediaHelper::addHighcharts($viewContext); WebMediaHelper::addFarbtastic($viewContext); WebMediaHelper::addInfobox($viewContext); WebMediaHelper::addEntries($viewContext); WebMediaHelper::addCustom($viewContext); $list = $viewContext->user->getMixedUserMedia($viewContext->media); $list = UserMediaFilter::doFilter($list, UserMediaFilter::nonPlanned()); $viewContext->ratingDistribution = RatingDistribution::fromEntries($list); $viewContext->ratingTimeDistribution = RatingTimeDistribution::fromEntries($list); $listNoMovies = UserMediaFilter::doFilter($list, UserMediaFilter::nonMovie()); $viewContext->lengthDistribution = MediaLengthDistribution::fromEntries($listNoMovies); $f = explode('-', $viewContext->user->join_date); if (count($f) != 3) { $viewContext->earliestTimeKnown = null; $viewContext->meanTime = null; } else { list($year, $month, $day) = $f; $earliest = mktime(0, 0, 0, $month, $day, $year); $totalTime = 0; foreach ($list as $mixedUserMedia) { $totalTime += $mixedUserMedia->finished_duration; foreach ([$mixedUserMedia->start_date, $mixedUserMedia->end_date] as $k) { $f = explode('-', $k); if (count($f) != 3) { continue; } $year = intval($f[0]); $month = intval($f[1]); $day = intval($f[2]); if (!$year or !$month or !$day) { continue; } $time = mktime(0, 0, 0, $month, $day, $year); if ($time < $earliest) { $earliest = $time; } } } $viewContext->earliestTimeKnown = $earliest; $viewContext->meanTime = $totalTime / max(1, (time() - $earliest) / (24.0 * 3600.0)); } }
public static function work(&$controllerContext, &$viewContext) { $sender = $_GET['sender']; $filterParam = isset($_GET['filter-param']) ? $_GET['filter-param'] : null; if (isset($_GET['media']) and in_array($_GET['media'], Media::getConstList())) { $viewContext->media = $_GET['media']; } $viewContext->viewName = 'user-entries-' . $sender; $viewContext->layoutName = 'layout-ajax'; $viewContext->filterParam = $filterParam; $list = $viewContext->user->getMixedUserMedia($viewContext->media); $computeMeanScore = null; switch ($sender) { case 'ratings': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::score($filterParam)); break; case 'length': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::nonMovie(), UserMediaFilter::lengthGroup($filterParam)); $computeMeanScore = true; break; case 'type': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::type($filterParam)); $computeMeanScore = true; break; case 'year': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::publishedYear($filterParam)); $computeMeanScore = true; break; case 'decade': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::publishedDecade($filterParam)); $computeMeanScore = true; break; case 'creator': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::creator($filterParam, $list)); switch ($viewContext->media) { case Media::Anime: $table = 'animeproducer'; break; case Media::Manga: $table = 'mangaauthor'; break; default: throw new BadMediaException(); } $computeMeanScore = true; break; case 'genre': $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::genre($filterParam, $list)); $computeMeanScore = true; break; case 'franchises': $filter = UserMediaFilter::nonPlanned(); break; case 'mismatches': $filter = null; break; case 'watched': $filterParam = explode(":", $filterParam); $filterParam[2] = boolval($filterParam[2]); if ($filterParam[2]) { $yearOrDecade = UserMediaFilter::publishedDecade($filterParam[1]); } else { $yearOrDecade = UserMediaFilter::publishedYear($filterParam[1]); } if ($filterParam[0] == 1) { $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::nonDropped(), UserMediaFilter::notOnHold(), $yearOrDecade, UserMediaFilter::type($filterParam[0])); } else { if ($filterParam[0] == 2) { $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::nonDropped(), UserMediaFilter::notOnHold(), $yearOrDecade, UserMediaFilter::notType(1)); } else { if ($filterParam[0] == 3) { $filter = UserMediaFilter::combine(UserMediaFilter::nonPlanned(), UserMediaFilter::notCompleting(), UserMediaFilter::notFinished(), $yearOrDecade); } } } $computeMeanScore = true; $viewContext->filterParam = $filterParam; break; default: throw new Exception('Unknown sender (' . $sender . ')'); } $list = UserMediaFilter::doFilter($list, $filter); $isPrivate = $viewContext->user->isUserMediaPrivate($viewContext->media); if (!$isPrivate) { if ($computeMeanScore) { $dist = RatingDistribution::fromEntries($list); $viewContext->meanScore = $dist->getMeanScore(); } if ($sender == 'franchises') { $franchises = Model_MixedUserMedia::getFranchises($list); foreach ($franchises as &$franchise) { $dist = RatingDistribution::fromEntries($franchise->ownEntries); $franchise->meanScore = $dist->getMeanScore(); } unset($franchise); DataSorter::sort($franchises, DataSorter::MeanScore); $viewContext->franchises = array_filter($franchises, function ($franchise) { return count($franchise->ownEntries) > 1; }); } elseif ($sender == 'mismatches') { $entries = $viewContext->user->getMismatchedUserMedia($list); DataSorter::sort($entries, DataSorter::Title); $viewContext->entries = $entries; } else { DataSorter::sort($list, DataSorter::Title); $viewContext->entries = $list; } } $viewContext->isPrivate = $isPrivate; }