예제 #1
0
 public bool UserHasManResTicketPermission(Domain.Enums.MessageUserType UserType)
 {
     return(UserType == MessageUserType.Manager ||
            UserType == MessageUserType.Resolver ||
            UserType == MessageUserType.CategoryManager ||
            UserType == MessageUserType.CategoryResolver);
 }
예제 #2
0
        //TODO: notification - V - test
        public void ChangeStatus(Int64 TicketId, Domain.Enums.TicketStatus Status, Domain.Enums.MessageUserType UserType)
        {
            if (!CheckSessionAccess())
            {
                return;
            }

            Int64   messageId = 0;
            Boolean Changed   = service.TicketStatusModify(TicketId, Status, View.GetChangeStatusMessage(Status), true, UserType, ref messageId);

            //Begin Action
            if (Changed)
            {
                Int64 userId = service.UserGetIdfromPerson(UserContext.CurrentUserID);

                List <KeyValuePair <int, String> > Objects = new List <KeyValuePair <int, string> >();
                Objects.Add(ModuleTicket.KVPgetUser(userId));
                Objects.Add(ModuleTicket.KVPgetTicket(TicketId));

                View.SendUserActions(
                    service.ModuleID,
                    ModuleTicket.ActionType.TicketStatusChanged,
                    View.ViewCommunityId,
                    ModuleTicket.InteractionType.UserWithLearningObject,
                    Objects);
                //End Action

                //TODO: Notification - TEST
                if (messageId > 0)
                {
                    SendNotification(messageId, userId, ModuleTicket.NotificationActionType.StatusChanged);
                }
            }
        }
예제 #3
0
        //private bool MessageDraftUpdate(
        //    String HtmlMessage,
        //    String Preview,
        //    Int64 TicketId,
        //    Int64 MessageId,
        //    Int64 UserId)
        //{
        //    Message msg = Manager.Get<Message>(MessageId);
        //    TicketUser usr = Manager.Get<TicketUser>(UserId);

        //    if (
        //        usr != null ||
        //        msg == null ||
        //        msg.Ticket == null ||
        //        msg.Ticket.Id != TicketId ||
        //        msg.Creator == null ||
        //        msg.Creator.Id != usr.Id ||
        //        !msg.IsDraft ||
        //        msg.Deleted != BaseStatusDeleted.None)
        //        return false;

        //    msg.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
        //    msg.Text = HtmlMessage;
        //    msg.Preview = Preview;

        //    Manager.SaveOrUpdate<Message>(msg);



        //    return true;
        //}
        /// <summary>
        /// Dato un Ticket e l'utente recupera il relativo messaggio DRAFT.
        /// Nel caso non esista, viene creato.
        /// </summary>
        /// <param name="TicketId"></param>
        /// <param name="UserId"></param>
        /// <returns></returns>
        private Message MessageDraftGet(
            Ticket Ticket, TicketUser User,
            Domain.Enums.MessageUserType UserType = Domain.Enums.MessageUserType.Partecipant,
            Domain.Enums.MessageType MessageType  = Domain.Enums.MessageType.FeedBack
            )
        {
            //if(!Manager.IsInTransaction())
            //{
            //    Manager.BeginTransaction();
            //}


            Message msg = Manager.GetAll <Message>(m =>
                                                   m.IsDraft == true && m.Deleted == BaseStatusDeleted.None &&
                                                   m.Creator != null && m.Creator.Id == User.Id &&
                                                   m.Ticket != null && m.Ticket.Id == Ticket.Id).FirstOrDefault();

            if (msg == null)
            {
                //if (!Manager.IsInTransaction())
                //    Manager.BeginTransaction();

                msg = new Message();
                msg.CreateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
                msg.Creator      = User;
                msg.Action       = Domain.Enums.MessageActionType.normal;
                msg.Attachments  = new List <TicketFile>();
                msg.DisplayName  = User.DisplayName;
                msg.IsDraft      = true;
                msg.Preview      = "";
                msg.ShowRealName = true;
                msg.Type         = MessageType;
                msg.UserType     = UserType;
                msg.Visibility   = true;
                msg.Ticket       = Ticket;
                msg.ToStatus     = Ticket.Status;
                msg.ToCondition  = Ticket.Condition;

                msg.ToCategory = (from Assignment ass in Ticket.Assignemts
                                  where ass.AssignedCategory != null
                                  orderby ass.CreatedOn
                                  select ass.AssignedCategory).LastOrDefault()
                                 ?? Ticket.CreationCategory;


                Manager.SaveOrUpdate <Message>(msg);
            }
            else
            {
                Manager.Refresh <Message>(msg);
            }

            //Manager.Flush();

            return(msg);
        }
예제 #4
0
        /// <summary>
        /// Modifica visibilità messaggio
        /// </summary>
        /// <param name="TicketId">Id Ticket</param>
        /// <param name="MessageId">Id Messaggio</param>
        /// <param name="Isvisibile">Visibilità</param>
        /// <param name="UserType">Tipo utente</param>
        /// <returns>TRUE se la modifica è avvenuta</returns>
        public Boolean MessageChangeVisibility(
            Int64 TicketId,
            Int64 MessageId,
            Boolean Isvisibile,
            Domain.Enums.MessageUserType UserType)
        {
            if (UserType == Domain.Enums.MessageUserType.none || UserType == Domain.Enums.MessageUserType.Partecipant ||
                CurrentPerson.TypeID == (int)UserTypeStandard.Guest ||
                CurrentPerson.TypeID == (int)UserTypeStandard.ExternalUser)
            {
                return(false);
            }

            Message msg = Manager.Get <Message>(MessageId);

            if (msg.UserType == Domain.Enums.MessageUserType.Partecipant)
            {
                return(false);
            }

            if (msg.Ticket == null || msg.Ticket.Id != TicketId || msg.Visibility == Isvisibile)
            {
                return(false);
            }

            msg.Visibility = Isvisibile;
            msg.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);

            if (msg.Attachments != null && msg.Attachments.Any())
            {
                foreach (TicketFile file in msg.Attachments)
                {
                    if (Isvisibile && file.Visibility == Domain.Enums.FileVisibility.hiddenMessage)
                    {
                        file.Visibility = Domain.Enums.FileVisibility.visible;
                    }
                    else if (!Isvisibile && file.Visibility == Domain.Enums.FileVisibility.visible)
                    {
                        file.Visibility = Domain.Enums.FileVisibility.hiddenMessage;
                    }
                }
            }


            Manager.SaveOrUpdate <Message>(msg);

            this.UserAccessUpdate(TicketId);

            return(true);
        }
        /// <summary>
        /// Restituisce le ActionType
        /// </summary>
        /// <param name="UserType">Tipo utente. Se diverso da creatore, controllo permessi per file comunità</param>
        /// <param name="idCommunity">= 0 Se creatore o portale</param>
        /// <param name="idPerson">= 0 se creatore o portale</param>
        /// <param name="repositoryPermissions">Repository permission: if NULL = no community permission</param>
        /// <returns></returns>
        /// <remarks>
        /// Eventuamente modificare i riferimenti per avere Id utente e comnità reali.
        /// </remarks>
        public List <lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions> UploadAvailableActionsGet(Domain.Enums.MessageUserType UserType, int idCommunity, int idPerson, lm.Comol.Core.FileRepository.Domain.ModuleRepository repositoryPermissions)
        {
            List <lm.Comol.Core.DomainModel.Repository.RepositoryAttachmentUploadActions> actions = new List <DomainModel.Repository.RepositoryAttachmentUploadActions>();

            //UserType == TK.Enums.MessageUserType.Partecipant ||

            if (idCommunity <= 0 || idPerson <= 0)
            {
                actions.Add(DomainModel.Repository.RepositoryAttachmentUploadActions.uploadtomoduleitem);
            }
            else
            {
                actions.Add(DomainModel.Repository.RepositoryAttachmentUploadActions.uploadtomoduleitem);

                if (repositoryPermissions != null)
                {
                    if (repositoryPermissions.Administration || repositoryPermissions.ManageItems || repositoryPermissions.ViewItemsList)
                    {
                        actions.Add(DomainModel.Repository.RepositoryAttachmentUploadActions.linkfromcommunity);
                    }
                    if (repositoryPermissions.UploadFile || repositoryPermissions.Administration || repositoryPermissions.ManageItems)
                    {
                        actions.Add(DomainModel.Repository.RepositoryAttachmentUploadActions.uploadtomoduleitemandcommunity);
                    }
                }
            }
            return(actions);
        }
예제 #6
0
        /// <summary>
        /// Aggiunge un messeggio dal Manager/Resolver al Ticket indicato
        /// </summary>
        /// <param name="TicketId">Id Ticket</param>
        /// <param name="Text">Testo messaggio</param>
        /// <param name="Preview">Eventuale anteprima</param>
        /// <param name="HideToUser">Se nascondere il messaggio all'utente</param>
        /// <param name="MessageType">Tipo di messaggio</param>
        /// <param name="UpdateAccess">SE aggiornare l'accesso dell'utente al Ticket</param>
        /// <param name="UserType">Tipo utente (per messaggio e controllo)</param>
        /// <returns>Eventuali errori</returns>
        public Domain.Enums.TicketMessageSendError MessageSendMan(
            Int64 TicketId,
            String Text,
            String Preview,
            Boolean HideToUser,
            Domain.Enums.MessageType MessageType,
            Domain.Enums.MessageUserType UserType,
            Boolean UpdateAccess,
            ref Int64 NewMessageId,
            Int64 DraftId   = -1,
            Boolean IsDraft = false
            )
        {
            bool isTicketClosed = false;

            if (UserType == Domain.Enums.MessageUserType.none || UserType == Domain.Enums.MessageUserType.Partecipant ||
                CurrentPerson.TypeID == (int)UserTypeStandard.Guest ||
                CurrentPerson.TypeID == (int)UserTypeStandard.ExternalUser)
            {
                return(Domain.Enums.TicketMessageSendError.NoPermission);
            }

            if (String.IsNullOrEmpty(Text) || String.IsNullOrEmpty(Preview))
            {
                return(Domain.Enums.TicketMessageSendError.NoMessage);
            }


            Domain.TicketUser Usr = this.UserGetfromPerson(UC.CurrentUserID);
            if (Usr == null || Usr.Id <= 0)
            {
                return(Domain.Enums.TicketMessageSendError.NoPermission);
            }


            Ticket tk = Manager.Get <Ticket>(TicketId);

            if (tk == null)
            {
                return(Domain.Enums.TicketMessageSendError.TicketNotFound);
            }

            if (tk.IsDraft)
            {
                return(Domain.Enums.TicketMessageSendError.DraftTicket);
            }

            bool    IsNew = false;
            Message msg   = (from Message m in tk.Messages where m.IsDraft == true && m.Creator != null && m.Creator.Id == Usr.Id select m).FirstOrDefault();

            if (msg == null || msg.Id <= 0)
            {
                msg   = new Message();
                IsNew = true;
            }
            else
            {
                //    TEORICAMENTE NON SERVE, MA FORSE MEGLIO METTERCELO!!!
                if (DraftId != msg.Id)
                {
                    //UPDATE FILE MESSAGE ID, FROM DraftId To msgId!!!
                }
            }

            if (IsNew)
            {
                msg.CreateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }
            else
            {
                msg.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }

            msg.Text         = Text;
            msg.Preview      = Preview;
            msg.Creator      = Usr;
            msg.DisplayName  = "";
            msg.SendDate     = DateTime.Now;
            msg.ShowRealName = true;
            msg.Ticket       = tk;
            msg.Type         = MessageType;
            msg.UserType     = UserType;
            msg.Visibility   = !HideToUser;

            if (tk.Status == TicketStatus.closeSolved || tk.Status == TicketStatus.closeUnsolved)
            {
                isTicketClosed = true;
                msg.IsDraft    = true;
            }
            else
            {
                msg.IsDraft = IsDraft;
            }

            msg.Action   = Domain.Enums.MessageActionType.normal;
            msg.ToStatus = tk.Status;

            Domain.TicketUser usr = (from Assignment asg in tk.Assignemts where asg.AssignedTo != null orderby asg.CreatedOn select asg.AssignedTo).FirstOrDefault();

            msg.ToUser = usr;

            Domain.Category cat = (from Assignment asg in tk.Assignemts where asg.AssignedCategory != null orderby asg.CreatedOn select asg.AssignedCategory).FirstOrDefault();

            if (cat == null)
            {
                cat = tk.CreationCategory;
            }

            msg.ToCategory = cat;

            if (IsNew)
            {
                tk.Messages.Add(msg);
            }
            //else
            //    Manager.SaveOrUpdate<Message>(msg);

            tk.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            Manager.SaveOrUpdate <Ticket>(tk);

            if (UpdateAccess)
            {
                this.UserAccessUpdate(tk.Id);
            }

            NewMessageId = msg.Id;

            if (isTicketClosed)
            {
                return(TicketMessageSendError.TicketClosed);
            }

            return(Domain.Enums.TicketMessageSendError.none);
        }