Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objLiveChatInfo"></param>
        /// <returns></returns>
        private LiveChatViewModel GetLiveChatViewModel(LiveChatInfo objLiveChatInfo)
        {
            var livechat = new LiveChatViewModel();

            livechat.LiveChatID = objLiveChatInfo.LiveChatID;
            livechat.PortalID   = objLiveChatInfo.PortalID;

            var moduleID = int.Parse(PortalController.GetPortalSetting("MyDnnLiveChatModuleID", objLiveChatInfo.PortalID, "-1"));
            var Settings = new ModuleController().GetModule(moduleID).ModuleSettings;

            //Visitor
            livechat.Visitor = new LiveChatVisitorViewModel()
            {
                UserID      = objLiveChatInfo.VisitorUserID,
                VisitorGUID = objLiveChatInfo.VisitorGUID,
                DisplayName = objLiveChatInfo.VisitorName,
                Email       = objLiveChatInfo.VisitorEmail,
                IP          = objLiveChatInfo.VisitorIP,
                UserAgent   = objLiveChatInfo.VisitorUserAgent,
                Avatar      = (Settings["VisitorDefaultAvatar"] != null ? Settings["VisitorDefaultAvatar"].ToString() : string.Empty)
            };
            var visitor = VisitorsOnlineApi.Instance.GetVisitorByGUID(objLiveChatInfo.PortalID, objLiveChatInfo.VisitorGUID);

            if (visitor != null)
            {
                if (visitor.UserID > 0)
                {
                    livechat.Visitor.Avatar = DotNetNuke.Common.Globals.ResolveUrl("~/dnnimagehandler.ashx?mode=profilepic&userid=" + visitor.UserID);
                }
                livechat.Visitor.LastURL     = visitor.LastURL;
                livechat.Visitor.ReferrerURL = visitor.ReferrerURL;
                livechat.Visitor.PastVisits  = visitor.TotalConnections;
                livechat.Visitor.OnlineDate  = visitor.OnlineDate;
            }

            //Departments
            livechat.Departments = LiveChatDepartmentManager.Instance.GetLiveChatDepartmentsViewModel(objLiveChatInfo.PortalID, objLiveChatInfo.LiveChatID);

            //Agents
            livechat.Agents             = LiveChatAgentManager.Instance.GetLiveChatAgentsViewModel(objLiveChatInfo.PortalID, objLiveChatInfo.LiveChatID);
            livechat.AgentDefaultAvatar = (Settings["AgentDefaultAvatar"] != null ? Settings["AgentDefaultAvatar"].ToString() : string.Empty);

            //Messages
            var messages = LiveChatMessageManager.Instance.GetMessages(objLiveChatInfo.LiveChatID);

            livechat.Messages = messages;

            livechat.Rate = objLiveChatInfo.Rate;

            livechat.IsClosed = objLiveChatInfo.IsClosed;

            return(livechat);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objLiveChatInfo"></param>
        public void UpdateLiveChat(LiveChatInfo objLiveChatInfo)
        {
            Requires.NotNull(objLiveChatInfo);
            Requires.PropertyNotNegative(objLiveChatInfo, "PortalID");

            using (IDataContext ctx = DataContext.Instance())
            {
                var rep = ctx.GetRepository <LiveChatInfo>();
                rep.Update(objLiveChatInfo);
            }

            DataCache.ClearCache(CachePrefix);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="livechatID"></param>
        public void DeleteLiveChat(int livechatID)
        {
            Requires.NotNegative("livechatID", livechatID);

            LiveChatInfo objLiveChatInfo = GetLiveChatByID(livechatID);

            Requires.NotNull(objLiveChatInfo);

            using (IDataContext ctx = DataContext.Instance())
            {
                var rep = ctx.GetRepository <LiveChatInfo>();
                rep.Delete(objLiveChatInfo);
            }

            DataCache.ClearCache(CachePrefix);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objLiveChatInfo"></param>
        /// <returns></returns>
        public int AddLiveChat(LiveChatInfo objLiveChatInfo)
        {
            Requires.NotNull(objLiveChatInfo);
            Requires.PropertyNotNegative(objLiveChatInfo, "PortalID");

            using (IDataContext ctx = DataContext.Instance())
            {
                objLiveChatInfo.LastMessageDate = DateTime.Now;
                var rep = ctx.GetRepository <LiveChatInfo>();
                rep.Insert(objLiveChatInfo);

                DataCache.ClearCache(CachePrefix);

                return(objLiveChatInfo.LiveChatID);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objLiveChatInfo"></param>
        /// <param name="objAgentView"></param>
        /// <param name="sendToVisitor"></param>
        /// <param name="sendToAgent"></param>
        private void AgentHasJoin(LiveChatInfo objLiveChatInfo, AgentView objAgentView, bool sendToVisitor, bool sendToAgent)
        {
            var agent = new LiveChatAgentViewModel()
            {
                AgentID     = objAgentView.AgentID,
                UserID      = objAgentView.UserID,
                DisplayName = objAgentView.DisplayName,
                Email       = objAgentView.Email,
                Avatar      = DotNetNuke.Common.Globals.ResolveUrl("~/dnnimagehandler.ashx?mode=profilepic&userid=" + objAgentView.UserID),
                IsOnline    = VisitorsOnlineApi.Instance.IsVisitorOnline(objLiveChatInfo.PortalID, objAgentView.UserID),
                JoinDate    = DateTime.Now
            };

            LiveChatAgentManager.Instance.AddLiveChatAgent(new LiveChatAgentInfo()
            {
                AgentID = agent.AgentID, UserID = agent.UserID, LiveChatID = objLiveChatInfo.LiveChatID, JoinDate = DateTime.Now
            });

            var objLiveChatMessageInfo = new LiveChatMessageInfo()
            {
                LiveChatID  = objLiveChatInfo.LiveChatID,
                SentBy      = MessageSentBy.System,
                CreateDate  = DateTime.Now,
                MessageType = MessageType.Text,
                Message     = objAgentView.DisplayName + " join chat"
            };
            int messageID = LiveChatMessageManager.Instance.AddMessage(objLiveChatMessageInfo);

            objLiveChatMessageInfo.MessageID = messageID;

            if (sendToVisitor)
            {
                Clients.Group(objLiveChatInfo.PortalID + "-" + objLiveChatInfo.VisitorGUID).agentHasJoin(objLiveChatInfo.LiveChatID, agent);
                Clients.Group(objLiveChatInfo.PortalID + "-" + objLiveChatInfo.VisitorGUID).reciveMessage(objLiveChatMessageInfo);
            }

            if (sendToAgent)
            {
                foreach (var item in LiveChatAgentManager.Instance.GetLiveChatAgents(objLiveChatInfo.LiveChatID))
                {
                    Clients.Group(AgentGroupName + item.UserID).agentHasJoin(objLiveChatInfo.LiveChatID, agent);
                    Clients.Group(AgentGroupName + item.UserID).reciveMessage(objLiveChatMessageInfo);
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="livechat"></param>
        /// <returns></returns>
        public int StartLiveChatByVisitor(LiveChatViewModel livechat)
        {
            if (LiveChatManager.Instance.hasVisitorOpenedLiveChat(livechat.PortalID, livechat.Visitor.VisitorGUID))
            {
                return(0);
            }

            var visitor = VisitorsOnlineApi.Instance.GetVisitorByGUID(livechat.PortalID, livechat.Visitor.VisitorGUID);

            var objLiveChatInfo = new LiveChatInfo()
            {
                PortalID         = livechat.PortalID,
                VisitorGUID      = livechat.Visitor.VisitorGUID,
                VisitorName      = livechat.Visitor.DisplayName,
                VisitorEmail     = livechat.Visitor.Email,
                VisitorUserID    = visitor.UserID,
                VisitorIP        = visitor.IP,
                VisitorUserAgent = visitor.UserAgent,
                VisitorMessage   = livechat.Message,
                CreateDate       = DateTime.Now,
                CloseDate        = DateTime.MaxValue,
                IsClosed         = false,
            };
            int livechatID = LiveChatManager.Instance.AddLiveChat(objLiveChatInfo);

            LiveChatDepartmentManager.Instance.AddLiveChatDepartment(new LiveChatDepartmentInfo()
            {
                LiveChatID   = livechatID,
                DepartmentID = livechat.Departments.First().DepartmentID,
                CreateDate   = DateTime.Now
            });

            //create messages
            var objLiveChatMessageInfo = new LiveChatMessageInfo()
            {
                LiveChatID  = livechatID,
                SentBy      = MessageSentBy.System,
                CreateDate  = DateTime.Now,
                MessageType = MessageType.Text,
                Message     = "Chat started",
            };

            LiveChatMessageManager.Instance.AddMessage(objLiveChatMessageInfo);

            if (!string.IsNullOrEmpty(livechat.Message))
            {
                objLiveChatMessageInfo = new LiveChatMessageInfo()
                {
                    LiveChatID  = livechatID,
                    SentBy      = MessageSentBy.Visitor,
                    CreateDate  = DateTime.Now,
                    MessageType = MessageType.Text,
                    Message     = livechat.Message
                };
                LiveChatMessageManager.Instance.AddMessage(objLiveChatMessageInfo);
            }

            livechat = GetLiveChatViewModel(objLiveChatInfo);

            //ersale live chat kamel shode be khode visitor(darkhast konande chat)
            Clients.Group(livechat.PortalID + "-" + visitor.VisitorGUID).startLiveChat(livechat);
            //send live chat request to agents
            var department = livechat.Departments.First();

            Clients.Group(DepartmentAgentsGroupName + department.DepartmentID).incomingLiveChat(livechatID, visitor.VisitorGUID, livechat.Message, "add");

            var context = GlobalHost.ConnectionManager.GetHubContext <VisitorsOnlineHub>();

            context.Clients.Group("MyDnnLiveChatAgents-" + department.DepartmentID).invokeScript(string.Format("mydnnLiveChatRequests({0},'add');", livechatID));

            //update visitor info in visitor list
            visitor.DisplayName = livechat.Visitor.DisplayName;
            visitor.Email       = livechat.Visitor.Email;

            //eslah shavad
            ///VisitorsOnlineApi.Instance.UpdateVisitorOnline(livechat.PortalID, visitor.VisitorGUID, visitor.UserName, visitor.DisplayName, visitor.Email, visitor.LastURL, Context.ConnectionId, true);
            //var context = GlobalHost.ConnectionManager.GetHubContext<VisitorsOnlineHub>();
            ///context.Clients.Group("MyDnnVisitorsOnline").updateVisitorInfo(visitor);

            return(livechatID);
        }