public AvailabilityResult CanUserTakeQuiz( User u, DateTime date, IList <QuizResult> results) { if (MaxTaken.HasValue && results.Count >= MaxTaken) { return(AvailabilityResult.No( "This quiz has already been taken the maximum number of times.", "This quiz can only be taken " + MaxTaken.Value + " times.")); } if (MaxAwarded.HasValue && results.Count(x => !String.IsNullOrEmpty(x.Transaction)) >= MaxAwarded) { return(AvailabilityResult.No( "This quiz has already awarded you points the maximum number of times.", "You can only be awarded points by this quiz " + MaxAwarded + " times.")); } if (Cooldown.HasValue && results.Count > 0 && (results.Max(x => x.Taken) + Cooldown.Value < date)) { return(AvailabilityResult.No( "This quiz cannot be taken again until " + (results.Max(x => x.Taken) + Cooldown.Value).ToShortDateString() + ".", "You must wait at least " + Cooldown.Value.TotalDays.ToString("n0") + " days between attempts.")); } return(AvailabilityResult.Ok); }
/// <summary> /// Determine if a user is allowed access to this resource, at a given point in time. /// </summary> /// <param name="u">User</param> /// <param name="date">Date</param> /// <returns> /// False, unless either the given user is in the Users list, the user's current group is /// in the Groups list, or the AvailableToPublic or AvailableToAllUsers flags are set, and /// the supplied date is within the From and To properties of the Availability and the /// Resource is Enabled. /// </returns> public AvailabilityResult IsAllowedAccess(User u, DateTime date) { // disallow access based on date range settings if (From.HasValue && date < From.Value) { return(AvailabilityResult.No( "This resource is not yet available.", "This resource will become available on " + From.Value.ToShortDateString() + ". Please check back then.")); } if (To.HasValue && date > To.Value) { return(AvailabilityResult.No( "This resource is no longer available.", "This resource was made unavaible on " + To.Value.ToShortDateString() + ". Please ask your adminstrator to remove any links to this resource.")); } // allow access based on the group membership & mode var isInUsers = null != u && null != Users && Users.Contains(u.Document.Id); var isInGroups = null != u && null != Groups && null != u.Group && Groups.Contains(u.Group); switch (Mode) { case AvailabilityMode.AvailableToPublic: return(AvailabilityResult.Ok); case AvailabilityMode.AvailableToAllUsers: if (null != u) { return(AvailabilityResult.Ok); } break; case AvailabilityMode.AvailableOnlyTo: if (isInUsers || isInGroups) { return(AvailabilityResult.Ok); } break; case AvailabilityMode.AvailableToEveryoneBut: if (!isInUsers && !isInGroups) { return(AvailabilityResult.Ok); } break; } return(AvailabilityResult.No( "You do not have access to this resource.", "Please ask your adminstrator to grant access to this resource.")); }
public AvailabilityResult IsAllowedAccess(User u, DateTime date) { // disallow access based on enabled & date range settings if (!Enabled) { return(AvailabilityResult.No( "This resource is not enabled.", "This resource is currently disabled. Please ask an administrator to enabled this resource or to remove any links referencing it.")); } // if the availability is left blank, allow access by default return(null == Availability ? AvailabilityResult.Ok : Availability.IsAllowedAccess(u, date)); }