/** * Determine if an activity is capable of being completed * * @param Activity * An activity model * * @return boolean * returns true if an activity can be completed by the user */ public static function canComplete(Activity $activity, User $user) { if (!$activity->isActive()) { return false; } // Check activity lockout if ($activity->activity_lockout && ($pivot = $user->activities()->where('activity_id', $activity->id)->first())) { $time = Carbon::now(); $lastTime = $pivot->pivot->created_at; if ($time->diffInMinutes($lastTime) < $activity->activity_lockout) { $x = $time->diffInMinutes($lastTime->addMinutes($activity->activity_lockout)); $message = self::convertToHoursMins($x, '%d hours and %02d minutes'); Session::put('activityError', Lang::get('dma.friends::lang.activities.lockout', ['x' => $message])); return false; } } switch ($activity->time_restriction) { case Activity::TIME_RESTRICT_NONE: return true; case Activity::TIME_RESTRICT_HOURS: if ($activity->time_restriction_data) { $now = Carbon::now(); $start = self::convertTime($activity->time_restriction_data['start_time']); $end = self::convertTime($activity->time_restriction_data['end_time']); $start_time = Carbon::now(); $start_time->setTime($start['hour'], $start['minutes']); $end_time = Carbon::now(); $end_time->setTime($end['hour'], $start['minutes']); $day = date('w'); // Sunday is on the end of the week and date sets sunday as 0 if ($day == 0) { $day = 7; } if ($activity->time_restriction_data['days'][$day] !== false && $now->gte($start_time) && $now->lte($end_time)) { return true; } else { Session::put('activityError', Lang::get('dma.friends::lang.activities.notAvailable')); } } break; case Activity::TIME_RESTRICT_DAYS: $now = new DateTime('now'); if ($now >= $activity->date_begin && $now <= $activity->date_end) { return true; } else { Session::put('activityError', Lang::get('dma.friends::lang.activities.notAvailable')); } break; } return false; }