コード例 #1
0
ファイル: FeedController.cs プロジェクト: WSU-HELPLAB/OSBIDE
        /// <summary>
        /// Returns a raw feed of past feed items without any extra HTML chrome.  Used for AJAX updates to an existing feed.
        /// </summary>
        /// <param name="id">The ID of the first feed item received by the client.</param>
        /// <returns></returns>
        public ActionResult OldFeedItems(int id, int count, int userId, int errorType = -1, string keyword = "", int hash = 0)
        {
            try
            {
                var query = new ActivityFeedQuery();
                query.CommentFilter = hash == 0 ? keyword : "#" + keyword;
                if (errorType > 0)
                {
                    query = new BuildErrorQuery(Db);
                    (query as BuildErrorQuery).BuildErrorTypeId = errorType;
                }
                BuildBasicQuery(query);
                query.MaxLogId     = id;
                query.MaxQuerySize = count;

                //used to build a feed for a single person.  Useful for building profile-based feeds
                if (userId > 0)
                {
                    query.ClearSubscriptionSubjects();
                    query.AddSubscriptionSubject(Db.Users.Where(u => u.Id == userId).FirstOrDefault());
                }

                List <FeedItem>          feedItems     = query.Execute().ToList();
                List <AggregateFeedItem> aggregateFeed = AggregateFeedItem.FromFeedItems(feedItems);


                //build the "you and 5 others got this error"-type messages
                FeedViewModel vm = new FeedViewModel();
                BuildEventRelations(vm, feedItems);

                ViewBag.RecentUserErrors  = vm.RecentUserErrors;
                ViewBag.RecentClassErrors = vm.RecentClassErrors;
                ViewBag.ErrorTypes        = vm.ErrorTypes;

                return(View("AjaxFeed", aggregateFeed));
            }
            catch (Exception ex)
            {
                LogErrorMessage(ex);
                return(RedirectToAction("FeedDown", "Error"));
            }
        }
コード例 #2
0
ファイル: FeedController.cs プロジェクト: WSU-HELPLAB/OSBIDE
        /// <summary>
        ///
        /// </summary>
        /// <param name="id">The ID of the last event received by the user.  Used for AJAX updates</param>
        /// <returns></returns>
        public ActionResult Index(long timestamp = -1, int errorType = -1, string errorTypeStr = "", string keyword = "", int hash = 0)
        {
            //turned off for now.
            //return RedirectToAction("FeedDown", "Error");
            try
            {
                var query = new ActivityFeedQuery();

                query.CommentFilter = hash == 0 ? keyword : "#" + keyword;

                //Two ways that we can receive an error type: by name (errorTypeStr) or by ID (errorType).
                //First, we check the string and see if we can match it to an ID number.  Then, we check
                //to see if we have a valid ID number.  If it doesn't work out, just work as normal.
                if (string.IsNullOrEmpty(errorTypeStr) == false)
                {
                    errorTypeStr = errorTypeStr.ToLower().Trim();
                    ErrorType type = Db.ErrorTypes.Where(e => e.Name.CompareTo(errorTypeStr) == 0).FirstOrDefault();
                    if (type != null)
                    {
                        errorType = type.Id;
                    }
                }
                if (errorType > 0)
                {
                    query = new BuildErrorQuery(Db);
                    (query as BuildErrorQuery).BuildErrorTypeId = errorType;
                }
                BuildBasicQuery(query);
                FeedViewModel vm = new FeedViewModel();

                if (timestamp > 0)
                {
                    DateTime pullDate = new DateTime(timestamp);
                    query.StartDate = pullDate;
                }
                else
                {
                    query.MaxQuerySize = 40;
                }

                //and finally, retrieve our list of feed items
                var maxIdQuery = Db.EventLogs.Select(l => l.Id);
                if (maxIdQuery.Count() > 0)
                {
                    vm.LastLogId = maxIdQuery.Max();
                }
                else
                {
                    vm.LastLogId = 0;
                }

                List <FeedItem>          feedItems     = query.Execute().ToList();
                List <AggregateFeedItem> aggregateFeed = AggregateFeedItem.FromFeedItems(feedItems);
                this.UpdateLogSubscriptions(CurrentUser);
                try
                {
                    vm.LastPollDate = aggregateFeed.Select(a => a.MostRecentOccurance).Max();
                }
                catch (Exception)
                {
                    vm.LastPollDate = DateTime.MinValue.AddDays(2);
                }
                vm.Feed = aggregateFeed;
                vm.EventFilterOptions     = ActivityFeedQuery.GetAllEvents().OrderBy(e => e.ToString()).ToList();
                vm.UserEventFilterOptions = query.ActiveEvents;
                vm.ErrorTypes             = Db.ErrorTypes.Distinct().ToList();
                vm.SelectedErrorType      = new ErrorType();
                if (errorType > 0)
                {
                    vm.SelectedErrorType = Db.ErrorTypes.Where(e => e.Id == errorType).FirstOrDefault();
                    if (vm.SelectedErrorType == null)
                    {
                        vm.SelectedErrorType = new ErrorType();
                    }
                }

                //build possible courses and user types
                vm.Courses = Db.Courses.ToList();
                vm.CourseRoles.Add(CourseRole.Student);
                vm.CourseRoles.Add(CourseRole.Assistant);
                vm.CourseRoles.Add(CourseRole.Coordinator);
                if (_userSettings != null)
                {
                    vm.SelectedCourseId   = _userSettings.CourseFilter;
                    vm.SelectedCourseRole = _userSettings.CourseRole;
                }

                //build the "you and 5 others got this error"-type messages
                BuildEventRelations(vm, feedItems);
                vm.Keyword = keyword;

                return(View(vm));
            }
            catch (Exception ex)
            {
                LogErrorMessage(ex);

                return(RedirectToAction("FeedDown", "Error"));
            }
        }