public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var account = new AccountInfo();
            var controller = (((filterContext)).Controller).ToString().Split('.')[
                (((filterContext)).Controller).ToString().Split('.').Length - 1].Replace("Controller","");
            //var currentUser = account.GetUserName();
            var modules = UserModuleService.GetAllUserModuleByLdapUser(new UserModule() { LdapName = account.GetUserName() });
            var moduleList = ModuleService.GetAllModules();

            var moduleMenuList = new List<UserModuleDetails>();

            foreach (var module in moduleList)
            {
                moduleMenuList.AddRange(from userModule in modules
                                        where userModule.ModuleId == module.Id
                                        where userModule.IsAdd || userModule.IsEdit || userModule.IsApprover
                                        select new UserModuleDetails()
                                        {
                                            LdapName = userModule.LdapName,
                                            ModuleId = userModule.ModuleId,
                                            ModuleName = module.Name,
                                            DisplayName = module.DisplayName,
                                            Icon = module.Icon,
                                            IsAdd = userModule.IsAdd,
                                            IsEdit = userModule.IsEdit,
                                            IsApprover = userModule.IsApprover
                                        });
            }
            moduleMenuList.Add(new UserModuleDetails { ModuleName = "LandingPage" });

            var notificationList = NotificationService.GetAllNotificationDetailsList(account.GetFullName());

            filterContext.Controller.ViewBag.NotificationModel = notificationList;

            filterContext.Controller.ViewBag.CountNotifications = notificationList.Count;

            if (moduleMenuList.Any(a => a.ModuleName.ToUpper().Equals(controller.ToUpper())) || controller.ToUpper() == "NOTIFICATION") return;
            filterContext.HttpContext.Response.StatusCode = 401;
            filterContext.Controller.TempData["ErrorMessage"] = "You do not have permission to access this section, Please contact administrator <a href='mailto:[email protected]'>Service Desk</a>";

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "Error", area = "" }));

            filterContext.HttpContext.Response.Clear();
        }
        private bool CheckInStatus(string lockUser)
        {
            if (String.Equals(lockUser, String.Empty, StringComparison.CurrentCultureIgnoreCase)) return false;

            var account = new AccountInfo();
            var loginUser = account.GetFullName();
            return (String.Equals(loginUser, lockUser, StringComparison.CurrentCultureIgnoreCase));
        }
        private List<DocumentLibraryModel> GetDocumentModel(string folderPath, string libraryName, string sortField, string sortDir, string Type)
        {
            try
            {
                var account = new AccountInfo();
                var docModel = new DocumentLibraryModel() { FolderPath = folderPath, LibraryName = libraryName, SortField = sortField, SortDir = sortDir };
                var docLib = new DocumentLibrary() { FolderPath = docModel.FolderPath, LibraryName = docModel.LibraryName, SortField = docModel.SortField, SortDir = docModel.SortDir };
                var logInUser = account.GetFullName();

                var documents = DocumentLibraryService.GetAllDocuments(docLib);
                var output = new List<DocumentLibraryModel>();

                foreach (var model in documents)
                {
                    output.Add(new DocumentLibraryModel()
                    {
                        Name = model.Name,
                        Description = model.Description,
                        ContentType = model.ContentType,
                        FolderPath = model.FolderPath,
                        LibraryName = model.LibraryName,
                        RelativePath = model.RelativePath,
                        CreatedBy = model.CreatedBy,
                        CreatedDate = model.CreatedDate,
                        LastUpdated = model.LastUpdated,
                        ModifieddBy = model.ModifieddBy,
                        Permission = new SPPermissionModel() { CanAdd = model.Permission.CanAdd, CanDelete = model.Permission.CanDelete },
                        IsOldVersion = model.IsOldVersion,
                        ImgSrc = model.ImgSrc,
                        CheckedOutUserName = model.CheckedOutUserName,
                        IsCheckedoutToLocal = model.IsCheckedoutToLocal,
                        IsCheckedIn = CheckInStatus(model.CheckedOutUserName),
                        IsCheckedOut = CheckOutStatus(model.CheckedOutUserName),
                        LogInUserName = logInUser
                    });
                }

                var permission = DocumentLibraryService.GetPermission(docLib);
                ViewBag.canAdd = permission.Permission.CanAdd;

                return output;
            }
            catch (Exception ex) { throw ex; }
        }
        public void SendNewTopicSubscriptionMail(string forumName, string forumTitle, string forumBody, string topicLink)
        {
            var account = new AccountInfo();
            var departmentMapping = DepartmentService.GetDepartmentForumMappings(forumName);
            var result = GetModeratorEmailIds(forumName);

            var employees = ContactsService.GetByDepartmentOrlocation(departmentMapping);

            var departmentMails = employees.Aggregate(string.Empty, (current, subscription) => current + "," + subscription.Email);
            var subscriptionModel = GetAllSubscribedUsers(forumName);

            var mailIds = subscriptionModel.Aggregate(string.Empty, (current, subscription) => current + "," + subscription.EmployeeEmail);
            mailIds = mailIds + "," + departmentMails;
            var distinctWords = new List<string>(mailIds.ToLowerInvariant().Split(',').Distinct());
            
            mailIds = result.Aggregate(
                distinctWords.Where(t => !string.IsNullOrEmpty(t)).Aggregate(string.Empty,
                (current, t) => current + "," + t), 
                (current, moderators) => current.Replace("," + moderators.ToLowerInvariant(), string.Empty));

            var emailHelper = new EmailHelper();
            var paramters = new Dictionary<string, string>
                {
                    {"ForumName", forumName.Trim()},
                    {"TopicName", forumTitle.Trim()},
                    {"TipicLink", topicLink.Trim()},
                    {"ForumBody", forumBody.Trim()},
                    {"CreatedBy", account.GetFullName()},
                    {"Signature", ApplicationConfiguration.EmailSignature}
                };
            if (!string.IsNullOrEmpty(mailIds))
                emailHelper.SendBccMail("", mailIds, "NewTopicSubscription", paramters);
        }
        public void SendReplySubscriptionMail(string forumName, string forumTitle, string forumBody, string topicLink)
        {
            var account = new AccountInfo();
            forumBody = forumBody.Substring(0, 8) + " <b> Reply : </b>" + forumBody.Substring(8, forumBody.Length - 8);
            var departmentMapping = DepartmentService.GetDepartmentForumMappings(forumName);

            var employees = ContactsService.GetByDepartmentOrlocation(departmentMapping);

            var departmentMails = employees.Aggregate(string.Empty, (current, subscription) => current + "," + subscription.Email);
            var subscriptionModel = GetAllSubscribedUsers(forumName);

            var mailIds = subscriptionModel.Aggregate(string.Empty, (current, subscription) => current + "," + subscription.EmployeeEmail);
            mailIds = mailIds + "," + departmentMails;
            var distinctWords = new List<string>(mailIds.ToLowerInvariant().Split(',').Distinct());
            mailIds = distinctWords.Where(t => !string.IsNullOrEmpty(t)).Aggregate(string.Empty, (current, t) => current + "," + t);

            var emailHelper = new EmailHelper();
            var paramters = new Dictionary<string, string>
                {
                    {"ForumTitle", forumName + " : " +forumTitle.Trim()},
                    {"ForumBody", forumBody.Trim()},
                    {"PostedBy", account.GetFullName()},
                    {"TipicLink", topicLink.Trim()},
                    {"Signature", ApplicationConfiguration.EmailSignature}
                };
            if (!string.IsNullOrEmpty(mailIds))
                emailHelper.SendBccMail("", mailIds, "CommentsSubscription", paramters);
        }
        public void SendNewTopicMailToModerator(string topicForumPath, string topicTitle, string topicBody, string topicForum, string topicLink)
        {
            var account = new AccountInfo();
            var result = GetModeratorEmailIds(topicForumPath);
            var moderatorEmails = string.Join(",", result);
            var sendMail = new EmailHelper();

            var paramters = new Dictionary<string, string>
                                {
                                    {"TopicTitle", topicTitle.Trim()},
                                    {"TopicBody", topicBody.Trim()},
                                    {"TipicLink", topicLink.Trim()},
                                    {"TopicForum", topicForum },
                                    {"Requestor", account.GetFullName()},
                                    {"Signature", ApplicationConfiguration.EmailSignature}
                                };
            if (!string.IsNullOrEmpty(moderatorEmails))
                sendMail.SendBccMail("", moderatorEmails, "ForumNewTopicRequest", paramters);
        }
        private void RemoveChildForums(ForumsDetailsModel forums)
        {
            var account = new AccountInfo();
            SetFullNameAndEmail();

            foreach (var forumItem in forums.SubForums)
            {
                var subscriptionModel = new Subscription()
                {
                    CreatedBy = account.GetFullName(),
                    EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                    ForumName = forumItem.ForumFullPath,
                    IsActive = true,
                    IsDeleted = false,
                    IsSubscribed = true,
                };
                subscriptionModel = ForumSubscriptionService.GetSubscriptions(subscriptionModel);
                if (subscriptionModel != null)
                {
                    subscriptionModel.IsActive = false;
                    subscriptionModel.IsDeleted = true;
                    ForumSubscriptionService.UpdateSubscription(subscriptionModel);
                }
                if (forumItem.SubForums.Count > 0)
                    RemoveChildForums(forumItem);
            }
        }
        private void WriteChildForums(ForumsDetailsModel forums, string email)
        {
            var account = new AccountInfo();
            SetFullNameAndEmail();
            foreach (var forumItem in forums.SubForums)
            {
                var subscriptionModel = new Subscription()
                 {
                     CreatedBy = account.GetFullName(),
                     EmployeeEmail = account.GetEmailAddress(),
                     EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                     ForumName = forumItem.ForumFullPath,
                     IsActive = true,
                     IsDeleted = false,
                     IsSubscribed = true,
                     CreatedDate = DateTime.Now
                 };
                ForumSubscriptionService.InsertSubscription(subscriptionModel);

                if (forumItem.SubForums.Count > 0)
                    WriteChildForums(forumItem, email);
            }
        }
        private void WriteUpdateSubscription(string forumName, string email, string isSubscribed, bool subscribeParentOnly)
        {
            var account = new AccountInfo();
            SetFullNameAndEmail();

            #region Subscription database writing
            if (isSubscribed == "True")
            {
                var output = ConvertToForumDetailsListModel(ForumService.GetListofForums(forumName));
                var forum = new ForumsDetailsModel();
                forum.SubForums.AddRange(output);
                forum = null;
                var names = forumName.ForumSplit();
                foreach (var item in names)
                {
                    forum = (forum == null) ? output.FirstOrDefault(x => x.DisplayName == item) : forum.SubForums.FirstOrDefault(x => x.DisplayName == item);
                }

                var subscriptionModel = new Subscription()
                                        {
                                            CreatedBy = account.GetFullName(),
                                            EmployeeEmail = account.GetEmailAddress(),//email,
                                            EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                                            ForumName = forumName,
                                            IsActive = true,
                                            IsDeleted = false,
                                            IsSubscribed = true,
                                            CreatedDate = DateTime.Now
                                        };
                ForumSubscriptionService.InsertSubscription(subscriptionModel);
                if (!subscribeParentOnly)
                {
                    foreach (var forumItem in forum.SubForums)
                    {
                        subscriptionModel = new Subscription()
                        {
                            CreatedBy = account.GetFullName(),
                            EmployeeEmail = account.GetEmailAddress(),
                            EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                            ForumName = forumItem.ForumFullPath,
                            IsActive = true,
                            IsDeleted = false,
                            IsSubscribed = true,
                            CreatedDate = DateTime.Now
                        };
                        ForumSubscriptionService.InsertSubscription(subscriptionModel);

                        WriteChildForums(forumItem, email);
                    }
                }
                ForumSubscriptionService.SubscriptionRequestMail(forumName.ForumSplit().ForumJoin(), account.GetEmailAddress(), true);
            }
            #endregion

            #region un-Subscription database writing
            else if (isSubscribed == "False" && !subscribeParentOnly)
            {
                var output = ConvertToForumDetailsListModel(ForumService.GetListofForums(forumName));
                var forum = new ForumsDetailsModel();
                forum.SubForums.AddRange(output);
                forum = null;
                var names = forumName.ForumSplit();
                foreach (var item in names)
                {
                    forum = (forum == null) ? output.FirstOrDefault(x => x.DisplayName == item) : forum.SubForums.FirstOrDefault(x => x.DisplayName == item);
                }

                var subscriptionModel = new Subscription()
                {
                    CreatedBy = account.GetFullName(),
                    EmployeeEmail = account.GetEmailAddress(),
                    EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                    ForumName = forumName,
                    IsActive = true,
                    IsDeleted = false,
                    IsSubscribed = true,
                };
                subscriptionModel = ForumSubscriptionService.GetSubscriptions(subscriptionModel);
                if (subscriptionModel != null)
                {
                    subscriptionModel.IsActive = false;
                    subscriptionModel.IsDeleted = true;

                    ForumSubscriptionService.UpdateSubscription(subscriptionModel);
                }
                foreach (var forumItem in forum.SubForums)
                {
                    subscriptionModel = new Subscription()
                    {
                        CreatedBy = account.GetFullName(),
                        EmployeeEmail = account.GetEmailAddress(),
                        EmployeeName = account.GetUserName(), //User.Identity.Name.Replace("\\", "/"),
                        ForumName = forumItem.ForumFullPath,
                        IsActive = true,
                        IsDeleted = false,
                        IsSubscribed = true,
                    };
                    subscriptionModel = ForumSubscriptionService.GetSubscriptions(subscriptionModel);
                    if (subscriptionModel != null)
                    {
                        subscriptionModel.IsActive = false;
                        subscriptionModel.IsDeleted = true;

                        ForumSubscriptionService.UnsubscribeAllSubscriptions(subscriptionModel);
                    }
                    RemoveChildForums(forumItem);
                }
                ForumSubscriptionService.SubscriptionRequestMail(forumName.ForumSplit().ForumJoin(), account.GetEmailAddress(), false);
            }
            #endregion
        }
 private void SetUserFullName()
 {
     var account = new AccountInfo();
     if (String.IsNullOrEmpty(account.GetFullName()))
         account.SetFullName(SecurityService.GetLoggedInUserName(account.GetUserName()));
 }