public static bool DeleteItemChildrenRecursively(UserStorageContext storageContext, Item item) { var children = storageContext.Items.Where(i => i.ParentID == item.ID).ToList(); bool commit = false; foreach (var c in children) { DeleteItemChildrenRecursively(storageContext, c); storageContext.Items.Remove(c); commit = true; } // commit deletion of all children at the same layer together if (commit) { storageContext.SaveChanges(); } return commit; }
public static bool DeleteItemReferences(User currentUser, UserStorageContext storageContext, Item item) { string itemID = item.ID.ToString(); var itemRefs = storageContext.Items.Include("FieldValues"). Where(i => i.UserID == currentUser.ID && i.ItemTypeID == SystemItemTypes.Reference && i.FieldValues.Any(fv => fv.FieldName == FieldNames.EntityRef && fv.Value == itemID)).ToList(); bool commit = false; foreach (var itemRef in itemRefs) { storageContext.Items.Remove(itemRef); commit = true; } // commit deletion of References if (commit) { storageContext.SaveChanges(); } return commit; }
public bool GetUserInfo(User user, UserStorageContext storage) { // store user information from Facebook in UserProfile UserProfile userProfile = storage.ClientFolder.GetUserProfile(user); if (userProfile == null) { TraceLog.TraceError("Could not access UserProfile to import Google information into."); return false; } try { // import information about the current user var settings = this.CalendarSettings; if (userProfile.Timezone == null) { var olsonTZ = settings.Items.FirstOrDefault(i => i.Id == "timezone").Value; var tzinfo = OlsonTimeZoneToTimeZoneInfo(olsonTZ); userProfile.Timezone = tzinfo.Id; userProfile.TimezoneHoursOffset = tzinfo.BaseUtcOffset.Hours.ToString(); } storage.SaveChanges(); TraceLog.TraceInfo("Imported Google information into UserProfile"); } catch (Exception ex) { TraceLog.TraceException("Google query for basic User information failed", ex); return false; } return true; }
// may return either Folder or Item (caller should verify) public static object InstallCategory(UserStorageContext userContext, SuggestionsStorageContext suggestionsContext, User user, Folder category, Guid? parentID, GalleryCategory newCategory) { object result = null; try { // find the gallery category in the database (by ID if present, otherwise by name) GalleryCategory galleryCategory = newCategory.ID > 0 ? suggestionsContext.GalleryCategories.FirstOrDefault(gc => gc.ID == newCategory.ID) : suggestionsContext.GalleryCategories.FirstOrDefault(gc => gc.Name == newCategory.Name); if (galleryCategory == null) { TraceLog.TraceError("InstallCategory could not find Category ID " + newCategory.ID); return result; } // if the caller didn't pass in a Category, merge with an existing folder (by name), or create a new folder if (category == null) { category = CreateCategory(userContext, user, newCategory.Name); parentID = null; result = category; } else { // otherwise, create this (sub)category as a subitem DateTime now = DateTime.Now; var subCategory = new Item() { ID = Guid.NewGuid(), Name = galleryCategory.Name, FolderID = category.ID, ParentID = parentID, UserID = category.UserID, ItemTypeID = SystemItemTypes.Category, IsList = true, Created = now, LastModified = now, }; result = subCategory; // make this the last subcategory in the category float sortOrder = (userContext.Items.Any(i => i.UserID == category.UserID && i.FolderID == category.ID && i.ItemTypeID == SystemItemTypes.Category && (parentID.HasValue ? i.ParentID == parentID : i.ParentID == null)) ? userContext.Items.Where(i => i.UserID == category.UserID && i.FolderID == category.ID && i.ItemTypeID == SystemItemTypes.Category && (parentID.HasValue ? i.ParentID == parentID : i.ParentID == null)). Select(i => i.SortOrder). Max() : 0f) + 1000f; subCategory.SortOrder = sortOrder; userContext.Items.Add(subCategory); userContext.SaveChanges(); parentID = subCategory.ID; } // process all of the subcategories under this (sub)category in the database var subCategories = suggestionsContext.GalleryCategories.Where(gc => gc.ParentID == galleryCategory.ID); foreach (var sc in subCategories) InstallCategory(userContext, suggestionsContext, user, category, parentID, sc); // process all the Activities under this (sub)category var activities = suggestionsContext.GalleryActivities.Where(ga => ga.CategoryID == galleryCategory.ID); foreach (var activity in activities) InstallActivity(userContext, suggestionsContext, category, parentID, activity); } catch (Exception ex) { TraceLog.TraceException("InstallCategory failed", ex); return result; } return result; }
public static Item InstallActivity(UserStorageContext userContext, SuggestionsStorageContext suggestionsContext, Folder category, Guid? subCategory, GalleryActivity galleryActivity) { Item result = null; try { // deserialize the definition var def = JsonSerializer.Deserialize<ActivityDefinition>(galleryActivity.Definition); // create the new item corresponding to the activity DateTime now = DateTime.Now; var activity = new Item() { ID = Guid.NewGuid(), Name = def.Name, FolderID = category.ID, ParentID = subCategory, UserID = category.UserID, ItemTypeID = SystemItemTypes.Activity, IsList = true, Status = StatusTypes.Active, Created = now, LastModified = now, }; result = activity; // make this the last activity in the (sub)category float sortOrder = (userContext.Items.Any(i => i.UserID == category.UserID && i.FolderID == category.ID && i.ItemTypeID == SystemItemTypes.Activity && (subCategory.HasValue ? i.ParentID == subCategory : i.ParentID == null)) ? userContext.Items.Where(i => i.UserID == category.UserID && i.FolderID == category.ID && i.ItemTypeID == SystemItemTypes.Activity && (subCategory.HasValue ? i.ParentID == subCategory : i.ParentID == null)). Select(i => i.SortOrder). Max() : 0f) + 1000f; activity.SortOrder = sortOrder; // set ActivityID of gallery activity this Item is created from activity.GetFieldValue(ExtendedFieldNames.ActivityID, true).Value = galleryActivity.ID.ToString(); // if provided, set the default cadence of the activity if (def.Recurrence != null) activity.GetFieldValue(FieldNames.Repeat, true).Value = def.Recurrence.ToString(); // if provided, set the status if (def.Status != null) activity.Status = def.Status; userContext.Items.Add(activity); userContext.SaveChanges(); // install all the steps for the activity sortOrder = 1; foreach (var step in def.Steps) { InstallStep(userContext, category, activity.ID, step, sortOrder); sortOrder += 1; } } catch (Exception ex) { TraceLog.TraceException("InstallActivity failed", ex); return result; } return result; }
private static void InstallStep(UserStorageContext userContext, Folder category, Guid activity, ActivityStep activityStep, float sortOrder) { try { DateTime now = DateTime.Now; var status = (sortOrder == 1) ? StatusTypes.Active : null; var step = new Item() { ID = Guid.NewGuid(), Name = activityStep.Name, FolderID = category.ID, UserID = category.UserID, ParentID = activity, ItemTypeID = SystemItemTypes.Step, SortOrder = sortOrder * 1000f, Status = status, Created = now, LastModified = now, FieldValues = new List<FieldValue>() }; // TODO: calculate proper due date for first & last steps (based on recurrence setting) if (sortOrder == 1) { // TEMPORARY: set first step due date to today step.GetFieldValue(FieldNames.DueDate, true).Value = now.ToUniversalTime().ToLongDateString(); } step.GetFieldValue(FieldNames.ActionType, true).Value = activityStep.Action; userContext.Items.Add(step); userContext.SaveChanges(); } catch (Exception ex) { TraceLog.TraceException("InstallStep failed for step " + activityStep.Name, ex); } }
private static Folder CreateCategory(UserStorageContext userContext, User user, string name) { var category = userContext.Folders.FirstOrDefault(f => f.UserID == user.ID && f.Name == name); if (category == null) { category = new Folder() { ID = Guid.NewGuid(), Name = name, UserID = user.ID, ItemTypeID = SystemItemTypes.Category, }; // make this the last category in the list float sortOrder = (userContext.Folders.Any(i => i.UserID == user.ID && i.ItemTypeID == SystemItemTypes.Category) ? userContext.Folders.Where(i => i.UserID == user.ID && i.ItemTypeID == SystemItemTypes.Category). Select(i => i.SortOrder). Max() : 0f) + 1000f; category.SortOrder = sortOrder; userContext.Folders.Add(category); userContext.SaveChanges(); } return category; }