protected void set_messages_as_seen(Guid?threadId, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!threadId.HasValue || !MSGController.has_message(paramsContainer.Tenant.Id, null, paramsContainer.CurrentUserID.Value, threadId, null)) { responseText = "{\"ErrorText\":\"" + Messages.AccessDenied + "\"}"; return; } int msgCount = 0, sentCount = 0, notSeenCount = 0; bool result = MSGController.set_messages_as_seen(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, threadId.Value); if (result) { MSGController.get_thread_info(paramsContainer.Tenant.Id, threadId.Value, paramsContainer.CurrentUserID.Value, ref msgCount, ref sentCount, ref notSeenCount); } responseText = !result ? "{\"ErrorText\":\"" + Messages.OperationFailed + "\"}" : "{\"Succeed\":\"" + Messages.OperationCompletedSuccessfully + "\"" + ",\"ThreadInfo\":" + _get_thread_info_json(msgCount, sentCount, notSeenCount) + "}"; }
protected void get_thread_users(Guid?threadId, int?count, int?lastId, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!lastId.HasValue) { lastId = -1; } if (!threadId.HasValue || !MSGController.has_message(paramsContainer.Tenant.Id, null, paramsContainer.CurrentUserID.Value, threadId, null)) { responseText = "{\"ErrorText\":\"" + Messages.AccessDenied + "\"}"; return; } List <User> users = MSGController.get_thread_users(paramsContainer.Tenant.Id, threadId.Value, paramsContainer.CurrentUserID.Value, count, lastId); responseText = "{\"Users\":[" + ProviderUtil.list_to_string <string>(users.Select( u => "{\"UserID\":\"" + u.UserID.ToString() + "\"" + ",\"UserName\":\"" + Base64.encode(u.UserName) + "\"" + ",\"FirstName\":\"" + Base64.encode(u.FirstName) + "\"" + ",\"LastName\":\"" + Base64.encode(u.LastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address(paramsContainer.Tenant.Id, u.UserID.Value) + "\"}").ToList()) + "]}"; }
protected void get_not_seen_messages_count(ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } responseText = MSGController.get_not_seen_messages_count(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value).ToString(); }
protected void get_messages(Guid?threadId, long?minId, int?count, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!count.HasValue) { count = 0; } List <Message> messages = !threadId.HasValue ? new List <Message>() : MSGController.get_messages(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, threadId, null, minId, count); responseText = "{\"MinID\":" + (messages.Count > 0 ? messages.Min(u => u.ID) : 0).ToString() + ",\"Messages\":["; List <DocFileInfo> attachments = DocumentsController.get_owner_files(paramsContainer.Tenant.Id, messages.Where(u => u.HasAttachment.HasValue && u.HasAttachment.Value).Select(v => v.MessageID.Value).ToList()); bool isFirst = true; foreach (Message msg in messages) { responseText += (isFirst ? string.Empty : ",") + "{\"ID\":\"" + msg.ID.ToString() + "\"" + ",\"ThreadID\":\"" + msg.ThreadID.Value.ToString() + "\"" + ",\"MessageID\":\"" + msg.MessageID.Value.ToString() + "\"" + ",\"IsGroup\":" + (msg.IsGroup.HasValue && msg.IsGroup.Value).ToString().ToLower() + ",\"IsSender\":" + (msg.IsSender.HasValue && msg.IsSender.Value).ToString().ToLower() + ",\"Seen\":" + (msg.Seen.HasValue && msg.Seen.Value).ToString().ToLower() + ",\"Title\":\"" + Base64.encode(msg.Title) + "\"" + ",\"MessageText\":\"" + Base64.encode(msg.MessageText) + "\"" + ",\"SendDate\":\"" + PublicMethods.get_local_date(msg.SendDate.Value, true) + "\"" + ",\"ForwardedFrom\":\"" + (msg.ForwardedFrom.HasValue ? msg.ForwardedFrom.Value.ToString() : "") + "\"" + ",\"SenderUserID\":\"" + msg.SenderUserID.ToString() + "\"" + ",\"SenderUserName\":\"" + Base64.encode(msg.SenderUserName) + "\"" + ",\"SenderFirstName\":\"" + Base64.encode(msg.SenderFirstName) + "\"" + ",\"SenderLastName\":\"" + Base64.encode(msg.SenderLastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address(paramsContainer.Tenant.Id, msg.SenderUserID.Value) + "\"" + ",\"AttachedFiles\":" + DocumentUtilities.get_files_json(paramsContainer.Tenant.Id, attachments.Where(u => u.OwnerID == msg.MessageID).ToList(), true) + "}"; isFirst = false; } responseText += "]}"; }
protected void remove_thread(Guid?threadId, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } bool result = threadId.HasValue && MSGController.remove_thread(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, threadId.Value); responseText = result ? "{\"Succeed\":\"" + Messages.OperationCompletedSuccessfully + "\"}" : "{\"ErrorText\":\"" + Messages.OperationFailed + "\"}"; }
protected void get_recent_threads(int?count, int?lastId, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } List <ThreadInfo> threads = MSGController.get_threads(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, count, lastId); List <ThreadInfo> threadUsers = MSGController.get_thread_users(paramsContainer.Tenant.Id, threads.Where(u => u.IsGroup == true).Select( v => v.ThreadID.Value).ToList(), paramsContainer.CurrentUserID.Value); foreach (ThreadInfo tu in threadUsers) { ThreadInfo th = threads.Where(u => u.ThreadID == tu.ThreadID).FirstOrDefault(); th.UsersCount = tu.UsersCount; th.ThreadUsers = tu.ThreadUsers; } responseText = "{\"LastID\":" + (threads.Count > 0 ? threads.Max(u => u.ID) : 0).ToString() + ",\"Threads\":["; bool isFirst = true; foreach (ThreadInfo th in threads) { responseText += (isFirst ? string.Empty : ",") + "{\"ThreadID\":\"" + th.ThreadID.Value.ToString() + "\"" + ",\"IsGroup\":" + (th.IsGroup.HasValue && th.IsGroup.Value).ToString().ToLower() + ",\"UsersCount\":" + (th.UsersCount.HasValue ? th.UsersCount.Value : 0).ToString() + ",\"MessagesCount\":" + (th.MessagesCount.HasValue ? th.MessagesCount.Value : 0).ToString() + ",\"SentCount\":" + (th.SentCount.HasValue ? th.SentCount.Value : 0).ToString() + ",\"NotSeenCount\":" + (th.NotSeenCount.HasValue ? th.NotSeenCount.Value : 0).ToString() + ",\"Users\":[" + ProviderUtil.list_to_string <string>(th.ThreadUsers.Select( u => "{\"UserID\":\"" + u.UserID.ToString() + "\"" + ",\"UserName\":\"" + Base64.encode(u.UserName) + "\"" + ",\"FirstName\":\"" + Base64.encode(u.FirstName) + "\"" + ",\"LastName\":\"" + Base64.encode(u.LastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address(paramsContainer.Tenant.Id, u.UserID.Value) + "\"}").ToList()) + "]}"; isFirst = false; } responseText += "]}"; }
protected void remove_message(long?id, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!id.HasValue || !MSGController.has_message(paramsContainer.Tenant.Id, id, paramsContainer.CurrentUserID.Value, null, null)) { responseText = "{\"ErrorText\":\"" + Messages.AccessDenied + "\"}"; return; } bool result = id.HasValue && MSGController.remove_message(paramsContainer.Tenant.Id, id.Value); responseText = result ? "{\"Succeed\":\"" + Messages.OperationCompletedSuccessfully + "\"}" : "{\"ErrorText\":\"" + Messages.OperationFailed + "\"}"; }
protected void send_message(Guid?forwardedFrom, string title, string messageText, bool?isGroup, List <Guid> receiverUserIds, Guid?threadId, List <DocFileInfo> attachedFiles, Guid?groupId, string _ref, ref string responseText) { //GroupID will not be stored in the database and is just used for chat //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!string.IsNullOrEmpty(title) && title.Length > 490) { responseText = "{\"ErrorText\":\"" + Messages.MaxAllowedInputLengthExceeded + "\"}"; return; } else if (!PublicMethods.is_secure_title(title)) { responseText = "{\"ErrorText\":\"" + Messages.TheTextIsFormattedBadly + "\"}"; return; } if (!isGroup.HasValue) { isGroup = false; } Guid messageId = Guid.NewGuid(); isGroup = receiverUserIds.Count == 1 ? false : isGroup; bool selfChat = !isGroup.Value && ( (receiverUserIds.Count == 1 && receiverUserIds.First() == paramsContainer.CurrentUserID.Value) || (threadId == paramsContainer.CurrentUserID) ); if (!threadId.HasValue && ((isGroup.Value && receiverUserIds.Count > 1) || (!isGroup.Value && receiverUserIds.Count == 1))) { threadId = isGroup.Value ? Guid.NewGuid() : (receiverUserIds.Count == 1 ? receiverUserIds.First() : threadId); } if (attachedFiles != null) { attachedFiles.ForEach(f => f.move(paramsContainer.Tenant.Id, FolderNames.TemporaryFiles, FolderNames.Attachments)); } long result = MSGController.send_message(paramsContainer.Tenant.Id, messageId, forwardedFrom, paramsContainer.CurrentUserID.Value, title, messageText, isGroup.Value, receiverUserIds, threadId, attachedFiles); if (result <= 0 && attachedFiles != null) { attachedFiles.ForEach(f => f.move(paramsContainer.Tenant.Id, FolderNames.Attachments, FolderNames.TemporaryFiles)); } List <User> receiverUsers; User senderUser = UsersController.get_user(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value); responseText = result <= 0 ? "{\"ErrorText\":\"" + Messages.OperationFailed + "\"}" : "{\"Succeed\":\"" + Messages.OperationCompletedSuccessfully + "\""; bool sendForMany = !isGroup.Value && receiverUserIds.Count > 1; if (result > 0 && !sendForMany) { int msgCount = 0, sentCount = 0, notSeenCount = 0; MSGController.get_thread_info(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, threadId.Value, ref msgCount, ref sentCount, ref notSeenCount); receiverUsers = UsersController.get_users(paramsContainer.Tenant.Id, receiverUserIds); responseText += ",\"Thread\":{" + "\"ThreadID\":\"" + threadId.ToString() + "\"" + ",\"IsGroup\":" + isGroup.ToString().ToLower() + ",\"UsersCount\":" + receiverUserIds.Count.ToString().ToLower() + ",\"MessagesCount\":" + msgCount.ToString() + ",\"SentCount\":" + sentCount.ToString() + ",\"NotSeenCount\":" + notSeenCount.ToString() + ",\"Users\":[" + ProviderUtil.list_to_string <string>(receiverUsers.Select( u => "{\"UserID\":\"" + u.UserID.ToString() + "\"" + ",\"UserName\":\"" + Base64.encode(u.UserName) + "\"" + ",\"FirstName\":\"" + Base64.encode(u.FirstName) + "\"" + ",\"LastName\":\"" + Base64.encode(u.LastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address( paramsContainer.Tenant.Id, u.UserID.Value) + "\"" + "}").ToList()) + "]" + "}"; if (threadId == senderUser.UserID || (receiverUserIds != null && receiverUserIds.Contains(senderUser.UserID.Value))) { responseText += ",\"SenderIsReceiver\":" + true.ToString().ToLower(); } for (int i = 0; i < attachedFiles.Count; ++i) { attachedFiles[i].OwnerID = messageId; } responseText += ",\"Message\":{" + "\"ID\":" + result.ToString() + ",\"ReceiverID\":" + (result + 1).ToString() + ",\"MessageID\":\"" + messageId.ToString() + "\"" + ",\"ThreadID\":\"" + threadId.Value.ToString() + "\"" + ",\"ForwardedFrom\":\"" + (!forwardedFrom.HasValue ? "" : forwardedFrom.ToString()) + "\"" + ",\"IsGroup\":" + isGroup.ToString().ToLower() + ",\"GroupID\":\"" + (groupId.HasValue && groupId.HasValue ? groupId.Value : Guid.NewGuid()).ToString() + "\"" + ",\"SelfChat\":" + selfChat.ToString().ToLower() + ",\"IsSender\":" + true.ToString().ToLower() + ",\"Seen\":" + true.ToString().ToLower() + ",\"Title\":\"" + string.Empty + "\"" + ",\"MessageText\":\"" + Base64.encode(messageText) + "\"" + ",\"SendDate\":\"" + PublicMethods.get_local_date(DateTime.Now, true) + "\"" + ",\"SenderUserID\":\"" + senderUser.UserID.ToString() + "\"" + ",\"SenderUserName\":\"" + Base64.encode(senderUser.UserName) + "\"" + ",\"SenderFirstName\":\"" + Base64.encode(senderUser.FirstName) + "\"" + ",\"SenderLastName\":\"" + Base64.encode(senderUser.LastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address( paramsContainer.Tenant.Id, senderUser.UserID.Value) + "\"" + ",\"AttachedFiles\":" + DocumentUtilities.get_files_json(paramsContainer.Tenant.Id, attachedFiles, true) + ",\"Ref\":\"" + (string.IsNullOrEmpty(_ref) ? string.Empty : _ref) + "\"" + "}"; } responseText += "}"; //Send RealTime Data if (result > 0 && RaaiVanSettings.RealTime(paramsContainer.Tenant.Id) && !sendForMany) { List <Guid> userIds = new List <Guid>(); if (!isGroup.Value) { userIds = new List <Guid>() { threadId.Value, senderUser.UserID.Value } } ; else { userIds = receiverUserIds.Count > 0 ? receiverUserIds : MSGController.get_thread_users(paramsContainer.Tenant.Id, threadId.Value, paramsContainer.CurrentUserID.Value, 1000, null).Select(u => u.UserID.Value).ToList(); if (receiverUserIds.Count > 0) { userIds.Add(senderUser.UserID.Value); } } if (userIds.Count > 0) { RaaiVanHub.SendData(paramsContainer.Tenant.Id, userIds, RaaiVanHub.RealTimeAction.NewMessage, responseText); } } //end of Send RealTime Data }
protected void get_forwarded_messages(Guid?messageId, int?count, int?lastId, ref string responseText) { //Privacy Check: OK if (!paramsContainer.GBEdit) { return; } if (!messageId.HasValue || !MSGController.has_message(paramsContainer.Tenant.Id, null, paramsContainer.CurrentUserID.Value, null, messageId)) { responseText = "{\"ErrorText\":\"" + Messages.AccessDenied + "\"}"; return; } List <Message> fwdMessages = MSGController.get_forwarded_messages(paramsContainer.Tenant.Id, messageId.Value); responseText = "{\"ForwardedMessages\": ["; bool isFirst = true; List <DocFileInfo> attachments = DocumentsController.get_owner_files(paramsContainer.Tenant.Id, fwdMessages.Where(u => u.HasAttachment.HasValue && u.HasAttachment.Value).Select(v => v.MessageID.Value).ToList()); List <Message> messageUsers = MSGController.get_message_receivers(paramsContainer.Tenant.Id, fwdMessages.Select(m => m.MessageID.Value).ToList(), count); foreach (Message msg in messageUsers) { Message ms = fwdMessages.Where(m => m.MessageID == msg.MessageID).FirstOrDefault(); ms.ReceiverUsers = msg.ReceiverUsers; ms.ReceiversCount = msg.ReceiversCount; } foreach (Message msg in fwdMessages) { responseText += (isFirst ? string.Empty : ",") + "{\"ID\":\"" + msg.ID.ToString() + "\"" + ",\"MessageID\":\"" + msg.MessageID.Value.ToString() + "\"" + ",\"IsGroup\":" + (msg.IsGroup.HasValue && msg.IsGroup.Value).ToString().ToLower() + ",\"SenderUserID\":\"" + msg.SenderUserID.ToString() + "\"" + ",\"SenderUserName\":\"" + Base64.encode(msg.SenderUserName) + "\"" + ",\"SenderFirstName\":\"" + Base64.encode(msg.SenderFirstName) + "\"" + ",\"SenderLastName\":\"" + Base64.encode(msg.SenderLastName) + "\"" + ",\"SenderProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address( paramsContainer.Tenant.Id, msg.SenderUserID.Value) + "\"" + ",\"Title\":\"" + Base64.encode(msg.Title) + "\"" + ",\"MessageText\":\"" + Base64.encode(msg.MessageText) + "\"" + ",\"SendDate\":\"" + PublicMethods.get_local_date(msg.SendDate.Value, true) + "\"" + ",\"ForwardedFrom\":\"" + (msg.ForwardedFrom.HasValue ? msg.ForwardedFrom.Value.ToString() : "") + "\"" + ",\"AttachedFiles\":" + DocumentUtilities.get_files_json(paramsContainer.Tenant.Id, attachments.Where(u => u.OwnerID == msg.MessageID).ToList(), true) + ",\"Level\":" + msg.Level.ToString().ToLower() + ",\"ReceiversCount\":" + (msg.ReceiversCount.HasValue ? msg.ReceiversCount.Value : 0).ToString() + ",\"ReceiverUsers\":[" + ProviderUtil.list_to_string <string>(msg.ReceiverUsers.Select( u => "{\"UserID\":\"" + u.UserID.ToString() + "\"" + ",\"UserName\":\"" + Base64.encode(u.UserName) + "\"" + ",\"FirstName\":\"" + Base64.encode(u.FirstName) + "\"" + ",\"LastName\":\"" + Base64.encode(u.LastName) + "\"" + ",\"ProfileImageURL\":\"" + DocumentUtilities.get_personal_image_address( paramsContainer.Tenant.Id, u.UserID.Value) + "\"}").ToList()) + "]}"; isFirst = false; } responseText += "]}"; }
private void remove_calender_user(Guid calenderId, Guid userId, ref string responseText) { if (!paramsContainer.GBEdit) { return; } bool calenderDeleted = false; bool result = EventsController.remove_related_user(paramsContainer.Tenant.Id, calenderId, userId, ref calenderDeleted); responseText = result ? "{\"Succeed\":\"" + Messages.OperationCompletedSuccessfully + "\"}" : "{\"ErrorText\":\"" + Messages.OperationFailed + "\"}"; if (!result) { return; } List <Guid> relatedUserIds = EventsController.get_related_user_ids(paramsContainer.Tenant.Id, calenderId); Event _event = EventsController.get_event(paramsContainer.Tenant.Id, calenderId, true); if (userId == _event.CreatorUserID) { relatedUserIds.Remove(userId); DateTime NowDT = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); if (_event.BeginDate.Value > NowDT) { string strType = _event.EventType; string strMessage = strType + " " + "\" " + _event.Title + " \"" + " در تاریخ " + "\" " + PublicMethods.get_local_date(_event.BeginDate.Value) + " \"" + " لغو گردید"; string strTitle = "لغو " + strType; MSGController.bulk_send_message(paramsContainer.Tenant.Id, userId, relatedUserIds, strTitle, strMessage); } } else { if (!relatedUserIds.Any(u => u == _event.CreatorUserID.Value)) { relatedUserIds.Add(_event.CreatorUserID.Value); } string strMessage = "حذف رویداد از نوع " + _event.EventType + " و با عنوان: " + _event.Title; MSGController.bulk_send_message(paramsContainer.Tenant.Id, userId, relatedUserIds, string.Empty, strMessage); } //Save Log if (result) { LogController.save_log(paramsContainer.Tenant.Id, new Log() { UserID = paramsContainer.CurrentUserID, Date = DateTime.Now, HostAddress = PublicMethods.get_client_ip(HttpContext.Current), HostName = PublicMethods.get_client_host_name(HttpContext.Current), Action = Modules.Log.Action.RemoveEventUser, SubjectID = calenderId, SecondSubjectID = userId, ModuleIdentifier = ModuleIdentifier.EVT }); } //end of Save Log }
public void SendMessage(ref Event Calendar, ref List <Guid> relatedUserIds, string type, bool isRegisterMode, ref string message) { try { if (relatedUserIds != null && relatedUserIds.Count > 1) { string strRenderedKnowledgeDomains = ""; List <Modules.CoreNetwork.Node> CalenNodesKnowledgeDomains = EventsController.get_related_nodes(paramsContainer.Tenant.Id, Calendar.EventID.Value); if (CalenNodesKnowledgeDomains != null && CalenNodesKnowledgeDomains.Count() != 0) { int Counter = 0; foreach (Modules.CoreNetwork.Node CalenNode in CalenNodesKnowledgeDomains) { Counter++; if (Counter != 1) { strRenderedKnowledgeDomains += " ، "; } System.Web.UI.HtmlControls.HtmlAnchor a = new System.Web.UI.HtmlControls.HtmlAnchor(); a.InnerText = CalenNode.Name; a.Target = "_blank"; a.HRef = PublicConsts.get_client_url(PublicConsts.NodePage) + "/" + CalenNode.NodeID.ToString(); StringBuilder SB = new StringBuilder(); HtmlTextWriter TW = new HtmlTextWriter(new StringWriter(SB)); a.RenderControl(TW); strRenderedKnowledgeDomains += SB.ToString(); } } relatedUserIds.Remove(paramsContainer.CurrentUserID.Value); string strTitle = ""; string PostFix = ""; if (isRegisterMode) { strTitle = "ثبت " + type; PostFix = " ثبت شد"; } else { strTitle = "ویرایش " + type; PostFix = " ویرایش شد ، به تغییرات اعمال شده دقت فرمایید"; } string strMessage = "رویدادی از نوع " + "\" " + type + " \" با عنوان " + "\" " + Calendar.Title + " \"" + " برای تاریخ " + "\" " + PublicMethods.get_local_date(Calendar.BeginDate.Value) + " \"" + " شامل موضوعات : " + strRenderedKnowledgeDomains + PostFix; if (string.IsNullOrEmpty(strRenderedKnowledgeDomains)) { strMessage = "رویدادی از نوع " + "\" " + type + " \" با عنوان " + "\" " + Calendar.Title + " \"" + " برای تاریخ " + "\" " + PublicMethods.get_local_date(Calendar.BeginDate.Value) + " \"" + PostFix; } else { strMessage = "رویدادی از نوع " + "\" " + type + " \" با عنوان " + "\" " + Calendar.Title + " \"" + " برای تاریخ " + "\" " + PublicMethods.get_local_date(Calendar.BeginDate.Value) + " \"" + " شامل موضوعات : " + strRenderedKnowledgeDomains + PostFix; } bool result = MSGController.bulk_send_message(paramsContainer.Tenant.Id, paramsContainer.CurrentUserID.Value, relatedUserIds, strTitle, strMessage); if (!result) { message = "خطا در ارسال پیام به کاربران انتخاب شده"; } } } catch (Exception ex) { message = "خطا در ارسال پیام به کاربران انتخاب شده"; } }