コード例 #1
0
        /// <summary>
        /// Gets the current view settings for the specified user.
        /// </summary>
        /// <param name="listId"></param>
        /// <returns></returns>
        public ActionResult GetCurrent(int listId)
        {
            ListViewSettings lvs = null;

            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                UserActiveView userActiveView = context.UserActiveView.FirstOrDefault(x => x.UserId == userId && x.ListId == listId);

                if (userActiveView != null)
                {
                    lvs = context.ListViewSettings.First(x => x.Id == userActiveView.ViewId);
                }
                else
                {
                    // if there's no last view stored, try to load the default view for this user
                    lvs = context.ListViewSettings.FirstOrDefault(x => x.ListId == listId && x.UserId == userId && x.IsDefault);

                    if (lvs == null)
                    {
                        // if there's no default view for this user, try to load the default view for this user
                        lvs = context.ListViewSettings.FirstOrDefault(x => x.ListId == listId && x.IsDefault && x.IsPublic);
                    }
                }
            }

            ViewSettings viewSettings = null;

            if (lvs != null)
            {
                viewSettings = CreateFromListViewSetting(lvs);
            }

            return(Content(JsonConvert.SerializeObject(viewSettings), "application/json"));
        }
コード例 #2
0
        /// <summary>
        /// Gets the view settings with the specified id.
        /// </summary>
        /// <param name="listId"></param>
        /// <returns></returns>
        public ActionResult GetViewById(int id)
        {
            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                ListViewSettings lvs = context.ListViewSettings.FirstOrDefault(x => x.Id == id);

                if (lvs == null)
                {
                    throw new Exception("The view doesn't exist");
                }

                UserActiveView userActiveView = context.UserActiveView.FirstOrDefault(x => x.UserId == userId && x.ListId == lvs.ListId);

                if (userActiveView != null)
                {
                    context.UserActiveView.Remove(userActiveView);
                }

                // set this view as an active one

                userActiveView                  = new UserActiveView();
                userActiveView.ListId           = lvs.ListId;
                userActiveView.UserId           = userId;
                userActiveView.ListViewSettings = lvs;

                context.UserActiveView.Add(userActiveView);

                context.SaveChanges();

                ViewSettings viewSettings = CreateFromListViewSetting(lvs);

                return(Content(JsonConvert.SerializeObject(viewSettings), "application/json"));
            }
        }
コード例 #3
0
        public ActionResult RemoveViewById(int id)
        {
            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                ListViewSettings lvs = context.ListViewSettings.FirstOrDefault(x => x.Id == id);
                if (lvs == null)
                {
                    throw new Exception("The view doesn't exist");
                }

                if (lvs.IsPublic && !isUserViewAdministrator)
                {
                    throw new Exception("The user doesn't have right to delete a public view");
                }

                if (lvs.UserId.HasValue && lvs.UserId != userId)
                {
                    throw new Exception("Only the administrator can remove other users' views.");
                }

                context.ListViewSettings.Remove(lvs);
                // correlated entries from UserActiveView get removed automatically

                context.SaveChanges();
            }

            return(Json(true));
        }
コード例 #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(ListName))
            {
                throw new ApplicationException("List Name was not supplied to ListViewSettings user control");
            }

            listSettings = userSettings.GetSettingsForList(ListName);
        }
コード例 #5
0
        ViewSettings CreateFromListViewSetting(ListViewSettings lvs)
        {
            ViewSettings vs = JsonConvert.DeserializeObject <ViewSettings>(lvs.ViewData);

            vs.name        = lvs.Name;
            vs.id          = lvs.Id;
            vs.isDefault   = lvs.IsDefault;
            vs.isPublic    = lvs.IsPublic;
            vs.isTemporary = lvs.IsTemporary;
            vs.listId      = lvs.ListId;

            return(vs);
        }
コード例 #6
0
        bool isUserViewAdministrator = true; // the user has right to alter public views

        /// <summary>
        /// Sets the specified view data as the current view for the specified user.
        /// </summary>
        /// <param name="viewSettings"></param>
        /// <returns></returns>
        public ActionResult SetTemporaryView(ViewSettings viewSettings)
        {
            if (viewSettings.isPublic || viewSettings.isDefault || !viewSettings.isTemporary)
            {
                throw new InvalidOperationException("A view cannot be public, default for this settings but must be temporary.");
            }

            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                ListViewSettings[] existing = context.ListViewSettings.Where(x => x.UserId == userId && x.IsTemporary && x.ListId == viewSettings.listId).ToArray();
                foreach (var x in existing)
                {
                    context.ListViewSettings.Remove(x);
                }

                UserActiveView userActiveView = context.UserActiveView.FirstOrDefault(x => x.UserId == userId);
                if (userActiveView != null)
                {
                    context.UserActiveView.Remove(userActiveView);
                }

                ListViewSettings lvs = new ListViewSettings();
                lvs.IsDefault   = false;
                lvs.IsTemporary = true;
                lvs.UserId      = userId;
                lvs.ListId      = viewSettings.listId;
                lvs.Name        = viewSettings.name;
                lvs.ViewData    = JsonConvert.SerializeObject(viewSettings, new JsonSerializerSettings()
                {
                    ContractResolver = new IgnoreThisTypePropertyFilterContractResolver <ViewSettings>()
                });

                context.ListViewSettings.Add(lvs);


                userActiveView                  = new UserActiveView();
                userActiveView.ListId           = lvs.ListId;
                userActiveView.UserId           = userId;
                userActiveView.ListViewSettings = lvs;

                context.UserActiveView.Add(userActiveView);

                context.SaveChanges();

                viewSettings = CreateFromListViewSetting(lvs);
            }

            return(Content(JsonConvert.SerializeObject(viewSettings), "application/json"));
        }
コード例 #7
0
        protected void Page_Load()
        {
            userSettings = ListViewSettingsCollection.GetSettingsForUser();

            string listName = Page.Request.QueryString["list"];

            if (string.IsNullOrEmpty(listName))
            {
                int minOrder = userSettings.Settings.Min(us => us.ListViewDisplayOrder);
                listSetting = userSettings.Settings.SingleOrDefault(us => us.ListViewDisplayOrder == minOrder);
                listName    = listSetting.ListViewName;
            }
            listSetting = userSettings.Settings.SingleOrDefault(us => us.ListViewName == listName);
            Page.Title  = string.Format("Ticket Center: {0}", listSetting.ListViewDisplayName);
            ListViewSettingsEditorControl.ListName = listName;
            ListViewControl.ListName = listName;
        }
コード例 #8
0
        public ActionResult UpdateNamedView(ViewSettings viewSettings)
        {
            if (viewSettings.isTemporary)
            {
                throw new InvalidOperationException("A view cannot be temporary for this method.");
            }

            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                ListViewSettings lvs = context.ListViewSettings.FirstOrDefault(x => x.Id == viewSettings.id);

                // ensure that the current user can alter this view

                if (lvs.IsPublic && !isUserViewAdministrator)
                {
                    throw new Exception("The user doesn't have right to delete a public view");
                }

                if (lvs.UserId.HasValue && lvs.UserId != userId)
                {
                    throw new Exception("Only the administrator can remove other users' views.");
                }

                if (lvs.IsPublic != viewSettings.isPublic)
                {
                    throw new Exception("You cannot change isPublic property.");
                }

                // if the view is to become default, remove the default flag from an existing view that isn't this view
                if (viewSettings.isDefault)
                {
                    ListViewSettings existingDefault = null;

                    if (viewSettings.isPublic)
                    {
                        existingDefault = context.ListViewSettings.FirstOrDefault(x => x.UserId == userId && x.ListId == viewSettings.listId && x.IsDefault && !x.IsPublic && x.Id != viewSettings.id);
                    }
                    else
                    {
                        existingDefault = context.ListViewSettings.FirstOrDefault(x => x.IsDefault && x.ListId == viewSettings.listId && x.IsPublic && x.Id != viewSettings.id);
                    }

                    if (existingDefault != null)
                    {
                        existingDefault.IsDefault = false;
                    }
                }

                // check for a name collision - for any but this view

                bool doesNameExist = false;

                if (viewSettings.isPublic)
                {
                    doesNameExist = context.ListViewSettings.Any(x => x.UserId == userId && !x.IsPublic && x.Name == viewSettings.name && x.Id != viewSettings.id);
                }
                else
                {
                    doesNameExist = context.ListViewSettings.Any(x => x.IsPublic && x.Name == viewSettings.name && x.Id != viewSettings.id);
                }

                // if there's a name collision, rename the view

                if (doesNameExist)
                {
                    viewSettings.name += String.Format("_{0:yyyy-MM-dd HH:mm}", DateTime.Now);
                }

                // add a new view

                lvs.IsDefault = viewSettings.isDefault;
                lvs.Name      = viewSettings.name;
                lvs.ViewData  = JsonConvert.SerializeObject(viewSettings, new JsonSerializerSettings()
                {
                    ContractResolver = new IgnoreThisTypePropertyFilterContractResolver <ViewSettings>()
                });

                // we don't alter active view for the current user as it should remain the same

                context.SaveChanges();

                viewSettings = CreateFromListViewSetting(lvs);
            }

            return(Content(JsonConvert.SerializeObject(viewSettings), "application/json"));
        }
コード例 #9
0
        public ActionResult SaveNewNamedView(ViewSettings viewSettings)
        {
            if (viewSettings.isTemporary)
            {
                throw new InvalidOperationException("A view cannot be temporary for this method.");
            }

            using (AngularPatternsEntities context = new AngularPatternsEntities())
            {
                // if the view is to be default, remove the default flag from an existing view, if any exist (for this user or public)
                if (viewSettings.isDefault)
                {
                    ListViewSettings existingDefault = null;

                    if (viewSettings.isPublic)
                    {
                        existingDefault = context.ListViewSettings.FirstOrDefault(x => x.UserId == userId && x.ListId == viewSettings.listId && x.IsDefault && !x.IsPublic);
                    }
                    else
                    {
                        existingDefault = context.ListViewSettings.FirstOrDefault(x => x.IsDefault && x.ListId == viewSettings.listId && x.IsPublic);
                    }

                    if (existingDefault != null)
                    {
                        existingDefault.IsDefault = false;
                    }
                }

                // remove any temporary view for this user
                ListViewSettings[] existing = context.ListViewSettings.Where(x => x.UserId == userId && x.IsTemporary && x.ListId == viewSettings.listId).ToArray();
                foreach (var x in existing)
                {
                    context.ListViewSettings.Remove(x);
                }

                // check for a name collision

                bool doesNameExist = false;

                if (viewSettings.isPublic)
                {
                    doesNameExist = context.ListViewSettings.Any(x => x.UserId == userId && !x.IsPublic && x.Name == viewSettings.name);
                }
                else
                {
                    doesNameExist = context.ListViewSettings.Any(x => x.IsPublic && x.Name == viewSettings.name);
                }

                // if there's a name collision, rename the view

                if (doesNameExist)
                {
                    viewSettings.name += String.Format("_{0:yyyy-MM-dd HH:mm}", DateTime.Now);
                }

                // add a new view

                ListViewSettings lvs = new ListViewSettings();
                lvs.IsDefault   = viewSettings.isDefault;
                lvs.IsPublic    = viewSettings.isPublic;
                lvs.IsTemporary = false;
                lvs.UserId      = viewSettings.isPublic ? null : (int?)userId;
                lvs.ListId      = viewSettings.listId;
                lvs.Name        = viewSettings.name;
                lvs.ViewData    = JsonConvert.SerializeObject(viewSettings, new JsonSerializerSettings()
                {
                    ContractResolver = new IgnoreThisTypePropertyFilterContractResolver <ViewSettings>()
                });

                context.ListViewSettings.Add(lvs);

                // remove any existing active view for this user

                UserActiveView userActiveView = context.UserActiveView.FirstOrDefault(x => x.UserId == userId);
                if (userActiveView != null)
                {
                    context.UserActiveView.Remove(userActiveView);
                }

                // set this view as an active one

                userActiveView                  = new UserActiveView();
                userActiveView.ListId           = lvs.ListId;
                userActiveView.UserId           = userId;
                userActiveView.ListViewSettings = lvs;

                context.UserActiveView.Add(userActiveView);

                context.SaveChanges();


                viewSettings = CreateFromListViewSetting(lvs);
            }

            return(Content(JsonConvert.SerializeObject(viewSettings), "application/json"));
        }
コード例 #10
0
        /// <summary>
        /// Applies the sorts from a specific user's list view settings.
        /// </summary>
        /// <param name="ticketQuery">The ticket query.</param>
        /// <param name="listViewSettings">The list view settings to sort by.</param>
        /// <returns></returns>
        private static IQueryable <Ticket> ApplySorts(this IQueryable <Ticket> ticketQuery, ListViewSettings listViewSettings)
        {
            IQueryable <Ticket> newQuery = ticketQuery;

            //sorts have to be applied in reverse order as the last applied is the first in the SQL query generated
            for (int x = listViewSettings.SortColumns.Count() - 1; x >= 0; x--)
            {
                ListViewSortColumn column = listViewSettings.SortColumns[x];
                bool isDescending         = (column.SortDirection == ColumnSortDirection.Descending);
                newQuery = newQuery.ApplySort(column.ColumnName, isDescending);
            }
            return(newQuery);
        }
コード例 #11
0
        /// <summary>
        /// Applies the filters, sorts, and pages for a specific user's list view settings.
        /// </summary>
        /// <param name="ticketQuery">The ticket query.</param>
        /// <param name="listViewSettings">The list view settings containing the filters and sorts to apply.</param>
        /// <returns></returns>
        public static IQueryable <Ticket> ApplyListViewSettings(this IQueryable <Ticket> ticketQuery, ListViewSettings listViewSettings, int startRowIndex)
        {
            IQueryable <Ticket> newQuery = ticketQuery;

            //TODO: Need to modify list search to store the where clause in list settings instead of managing the query directly
            if (listViewSettings.ListViewName != "search")
            {
                newQuery = newQuery.ApplyFilters(listViewSettings);
            }
            if (newQuery != null)
            {
                newQuery = newQuery.ApplySorts(listViewSettings);
            }
            else
            {
                newQuery = ticketQuery.ApplySorts(listViewSettings);
            }

            return(newQuery);
        }
コード例 #12
0
        /// <summary>
        /// Applies the filters for a specific user's list view settings.
        /// </summary>
        /// <param name="ticketQuery">The ticket query.</param>
        /// <param name="listViewSettings">The list view settings to filder by.</param>
        /// <returns></returns>
        private static IQueryable <Ticket> ApplyFilters(this IQueryable <Ticket> ticketQuery, ListViewSettings listViewSettings)
        {
            IQueryable <Ticket> newQuery = ticketQuery;

            foreach (ListViewFilterColumn column in listViewSettings.FilterColumns)
            {
                newQuery = newQuery.ApplyFilter(column.ColumnName, column.ColumnValue, column.EqualityComparison);
            }
            return(newQuery);
        }