void FixCourseSortOrders()
{
List<Id<Course>> courseIds = new List<Id<Course>>(AllCourseIds);
if (courseIds.Exists(delegate(Id<Course> courseId) { return GetCourse(courseId).sortOrder <= 0; })) {
// Some or all course orders are missing. Sort by name.
courseIds.Sort(delegate(Id<Course> courseId1, Id<Course> courseId2) {
string name1 = GetCourse(courseId1).name;
string name2 = GetCourse(courseId2).name;
return string.Compare(name1, name2, StringComparison.CurrentCultureIgnoreCase);
});
// Assign course orders. Note that we are modifying course objects directly, which is normally a BAD thing, because is bypasses the
// undo manager. But in this case, it is what we want to do because this is a load-time operation which shouldn't be undoable.
for (int i = 0; i < courseIds.Capacity; ++i)
GetCourse(courseIds[i]).sortOrder = i + 1;
}
}