public function __construct(Character $character, array $activities, array $pves, array $stats) { $this->character = $character; $this->dateActivityStarted = carbon($activities['dateActivityStarted']); $lastReset = last_weekly(); $nextReset = next_weekly(); // raid, arena and nightfall completion status $raidsCompleted = []; $arenasCompleted = []; $activitiesCompleted = []; // need advisors to identify daily $this->dailyChapter = destiny()->advisors()->daily; foreach ($pves as $pve) { $activityHash = (string) $pve['activityDetails']['referenceId']; $activity = manifest()->activity($activityHash); $activityId = sha1($activity->activityName); $activityType = $activity->activityType; $completed = (bool) array_get($pve, 'values.completed.basic.value', false); $date = carbon($pve['period']); if ($activityType->isRaid()) { $activityLevel = $activity->activityLevel; if (!isset($raidsCompleted[$activityId])) { $raidsCompleted[$activityId] = null; } if ($completed && $date > $lastReset && $date < $nextReset) { if ($activityLevel > $raidsCompleted[$activityId]) { $raidsCompleted[$activityId] = $activityLevel; } } } if ($activityType->isArena()) { if (!array_key_exists($activityHash, $arenasCompleted)) { $arenasCompleted[$activityHash] = false; } if ($completed && $date > $lastReset && $date < $nextReset) { $arenasCompleted[$activityHash] = $completed; } } if ($activityType->isNightfall()) { $nightfallHash = $activity->activityType->activityTypeHash; if (!array_key_exists($nightfallHash, $activitiesCompleted)) { $activitiesCompleted[$nightfallHash] = false; } if ($completed && $date > $lastReset && $date < $nextReset) { $activitiesCompleted[$nightfallHash] = $completed; } } if ($activityHash == $this->dailyChapter->activityHash) { if (!array_key_exists($activityHash, $activitiesCompleted)) { $activitiesCompleted[$activityHash] = false; } if ($completed && $date > last_daily() && $date < next_daily()) { $activitiesCompleted[$activityHash] = $completed; } } } // stats grouped by activity hash $statsArray = []; foreach ($stats as $k => $stat) { $activityHash = (string) $stat['activityHash']; $statsArray[$activityHash] = new StatisticsCollection($stat['values']); } // build ActivityCollection foreach ($activities['available'] as $activity) { $activityHash = (string) $activity['activityHash']; $activityStats = array_get($statsArray, $activityHash); $activity = new Activity($character, $activity, $activityStats); $activityId = sha1($activity->activityName); if ($activity->isCompleted && $activity->isWeekly()) { $activity->isCompleted = $character->dateLastPlayed > last_weekly(); } $this->put($activityHash, $activity); if ($activity->isRaid()) { $activity->isCompleted = false; $activityLevelCompleted = array_get($raidsCompleted, $activityId); if (!$activityLevelCompleted) { continue; } if ($activity->activityLevel <= $activityLevelCompleted) { $activity->isCompleted = true; } } if ($activity->isArena()) { $activity->isCompleted = array_get($arenasCompleted, $activityHash, false); } if ($activity->isNightfall()) { $activity->isCompleted = array_get($activitiesCompleted, $activity->activityType->activityTypeHash, false); } if ($activityHash == $this->dailyChapter->activityHash) { $activity->isCompleted = array_get($activitiesCompleted, $activityHash, false); } } }
public function __construct(Character $character, array $activities, array $raids, array $arenas, array $stats) { $this->character = $character; $this->dateActivityStarted = carbon($activities['dateActivityStarted']); $lastReset = last_weekly(); $nextReset = next_weekly(); // raid completion status $raidsCompleted = []; foreach ($raids as $raid) { $activityHash = (string) $raid['activityDetails']['referenceId']; $activity = manifest()->activity($activityHash); $activityId = sha1($activity->activityName); $activityLevel = $activity->activityLevel; $completed = (bool) array_get($raid, 'values.completed.basic.value', false); $date = carbon($raid['period']); if (!isset($raidsCompleted[$activityId])) { $raidsCompleted[$activityId] = null; } if ($completed && $date > $lastReset && $date < $nextReset) { if ($activityLevel > $raidsCompleted[$activityId]) { $raidsCompleted[$activityId] = $activityLevel; } } } // arena completion status $arenasCompleted = []; foreach ($arenas as $arena) { $activityHash = (string) $arena['activityDetails']['referenceId']; $completed = (bool) array_get($arena, 'values.completed.basic.value', false); $date = carbon($arena['period']); if (!array_key_exists($activityHash, $arenasCompleted)) { $arenasCompleted[$activityHash] = false; } if ($completed && $date > $lastReset && $date < $nextReset) { $arenasCompleted[$activityHash] = $completed; } } // stats grouped by activity hash $statsArray = []; foreach ($stats as $k => $stat) { $activityHash = (string) $stat['activityHash']; $statsArray[$activityHash] = new StatisticsCollection($stat['values']); } // build ActivityCollection foreach ($activities['available'] as $activity) { $activityHash = (string) $activity['activityHash']; $activityStats = array_get($statsArray, $activityHash); $activity = new Activity($character, $activity, $activityStats); $activityId = sha1($activity->activityName); if ($activity->isCompleted && ($activity->isWeekly() || $activity->isDaily())) { $lastReset = $activity->isWeekly() ? last_weekly() : last_daily(); $activity->isCompleted = $character->dateLastPlayed > $lastReset; } $this->put($activityHash, $activity); if ($activity->isRaid()) { $activity->isCompleted = false; $activityLevelCompleted = array_get($raidsCompleted, $activityId); if (!$activityLevelCompleted) { continue; } if ($activity->activityLevel <= $activityLevelCompleted) { $activity->isCompleted = true; } } if ($activity->isArena()) { $activity->isCompleted = array_get($arenasCompleted, $activityHash, false); } } }