Example #1
0
        // Get all the possible variations for a given course, based on the loops/forks. Returns a list of VariationInfo,
        // giving the code string, VariationPath, and name. Sorted by code string.
        public static IEnumerable<VariationInfo> GetAllVariations(EventDB eventDB, Id<Course> courseId)
        {
            HashSet<Id<CourseControl>> alreadyVisited = new HashSet<PurplePen.Id<PurplePen.CourseControl>>();

            CourseDesignator courseDesignator = new CourseDesignator(courseId);
            Dictionary<Id<CourseControl>, char> variationMapper = GetVariantCodeMapping(eventDB, courseDesignator);
            List<List<Id<CourseControl>>> variations = GetVariations(eventDB, courseDesignator, eventDB.GetCourse(courseId).firstCourseControl, alreadyVisited);

            List<VariationInfo> result = new List<VariationInfo>();

            // Check for no variations.
            if (variations.Count == 1 && variations[0].Count == 0)
                return result;

            foreach (var choices in variations) {
                string variationString = GetVariationString(eventDB, choices, variationMapper);
                VariationInfo.VariationPath variationPath = new VariationInfo.VariationPath(choices);
                result.Add(new VariationInfo(variationString, variationPath));
            }
            result.Sort((vi1, vi2) => string.Compare(vi1.CodeString, vi2.CodeString, StringComparison.OrdinalIgnoreCase));

            return result;
        }