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));
     }
 }
Ejemplo n.º 2
0
 public static function work(&$controllerContext, &$viewContext)
 {
     $viewContext->viewName = 'user-ratings';
     $viewContext->meta->title = $viewContext->user->name . ' &#8212; Ratings (' . Media::toString($viewContext->media) . ') &#8212; ' . 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));
     }
 }
Ejemplo n.º 3
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;
 }