Esempio n. 1
0
        public PendingMessageView[] PendingMessageCounts(int messageTimeOut)
        {
            WebOperationContext.Current.OutgoingResponse.Headers.Add("Cache-Control", "no-cache");
            PendingMessageView[] result = new PendingMessageView[0];
            try
            {
                if (SPUtility.ValidateFormDigest())
                {
                    // set the current user to online
                    IContactRepository crepo = new ContactRepository();
                    crepo.SetContactOnline(Language.SMUGroupName, SPContext.Current.Web.CurrentUser.ID);

                    // get the user statuses
                    IGroupRepository grepo = new GroupRepository();
                    var group       = grepo.GetGroup(Language.SMUGroupName);
                    var contactList = crepo.GetAllFromGroup(group, messageTimeOut);

                    // get the pending messages
                    IChatMessageRepository repo = new ChatMessageRepository();
                    var messages = repo.GetPendingMessageByUser(SPContext.Current.Web.CurrentUser.ID);

                    result = (from m in messages
                              group m by m.CreatedBy.ID into g
                              select new PendingMessageView()
                    {
                        ID = g.Key,
                        IsOnline = false,
                        Count = g.Count()
                    }).ToArray();

                    // get the pending information
                    result = (from i in contactList
                              where i.ID != SPContext.Current.Web.CurrentUser.ID
                              select new PendingMessageView()
                    {
                        ID = i.ID,
                        IsOnline = i.IsOnline,
                        Count =
                            (result.Any(p => p.ID == i.ID) ?
                             result.First(p => p.ID == i.ID).Count : 0)
                    }).ToArray();
                }
                else
                {
                    WebOperationContext.Current.OutgoingResponse.StatusCode        = System.Net.HttpStatusCode.Unauthorized;
                    WebOperationContext.Current.OutgoingResponse.StatusDescription = Language.UserNotValidated;
                }
            }
            catch (Exception ex)
            {
                Config.WriteException(ex);
                WebOperationContext.Current.OutgoingResponse.StatusCode        = System.Net.HttpStatusCode.InternalServerError;
                WebOperationContext.Current.OutgoingResponse.StatusDescription = Language.GetMessagesError;
            }
            return(result);
        }