Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        // 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;
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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;
        }