コード例 #1
0
        private void InitializeView(Boolean forAdministration, Int32 idProfile, List <Int32> unloadIdCommunities, CommunityAvailability availability, List <Int32> onlyFromOrganizations, Dictionary <Int32, long> requiredPermissions = null)
        {
            View.IdProfile = idProfile;
            litePerson currentUser = CurrentManager.GetLitePerson(UserContext.CurrentUserID);
            litePerson person      = CurrentManager.GetLitePerson(idProfile);

            View.OnlyFromOrganizations = onlyFromOrganizations;
            View.SelectedIdCommunities = new List <int>();
            View.CurrentAvailability   = availability;
            View.ExcludeCommunities    = unloadIdCommunities;
            List <lm.Comol.Core.DomainModel.Filters.Filter> fToLoad = ServiceCommunities.GetDefaultFilters(idProfile, "", -1, -1, null, null, availability, -2, unloadIdCommunities, onlyFromOrganizations, requiredPermissions).OrderBy(f => f.DisplayOrder).ToList();

            View.LoadDefaultFilters(fToLoad, requiredPermissions, unloadIdCommunities, availability, onlyFromOrganizations);
            if (fToLoad != null && fToLoad.Any())
            {
                dtoCommunitiesFilters filters = new lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters(fToLoad, availability);
                filters.AvailableIdOrganizations       = onlyFromOrganizations;
                filters.OnlyFromAvailableOrganizations = (onlyFromOrganizations != null && onlyFromOrganizations.Any());
                filters.RequiredPermissions            = (requiredPermissions == null)? new List <dtoModulePermission>() : requiredPermissions.Select(r => new dtoModulePermission()
                {
                    IdModule = r.Key, Permissions = r.Value
                }).ToList();
                LoadCommunities(idProfile, filters, unloadIdCommunities, 0, View.CurrentPageSize, false);
                View.HasAvailableCommunities = true;
            }
            else
            {
                View.LoadNothing();
            }
        }
コード例 #2
0
        public void EnrollTo(Int32 idCommunity, String name, String path, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters)
        {
            Int32 idPerson = UserContext.CurrentUserID;

            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                Boolean reloadCommunities          = false;
                ModuleDashboard.ActionType dAction = ModuleDashboard.ActionType.None;
                dtoCommunityInfoForEnroll  item    = Service.GetEnrollingItem(idPerson, idCommunity, path);
                litePerson person = CurrentManager.GetLitePerson(idPerson);
                if (item != null && item.Id > 0 && person != null && person.Id > 0)
                {
                    if (!item.AllowEnroll)
                    {
                        dAction = ModuleDashboard.ActionType.EnrollNotAllowed;
                        View.DisplayEnrollMessage(item, dAction);
                    }
                    else
                    {
                        if (!item.HasConstraints && item.AllowUnsubscribe)
                        {
                            dtoEnrollment enrollment = Service.EnrollTo(idPerson, item);
                            if (enrollment == null)
                            {
                                dAction = ModuleDashboard.ActionType.UnableToEnroll;
                                View.DisplayEnrollMessage(item, dAction);
                            }
                            else
                            {
                                View.DisplayEnrollMessage(enrollment, enrollment.IdCommunity, person, Service.GetTranslatedProfileType(person), CurrentManager.GetUserDefaultOrganizationName(idPerson));
                                reloadCommunities = true;
                                dAction           = (enrollment.Status == EnrolledStatus.NeedConfirm) ? ModuleDashboard.ActionType.EnrollToCommunityWaitingConfirm : ModuleDashboard.ActionType.EnrollToCommunity;
                                lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(lm.Comol.Core.BaseModules.CommunityManagement.Domain.CacheKeys.UserCommunitiesTree(idPerson));
                            }
                        }
                        else
                        {
                            dAction = ModuleDashboard.ActionType.RequireEnrollConfirm;
                            View.DisplayConfirmMessage(item);
                        }
                    }
                }
                else
                {
                    dAction = ModuleDashboard.ActionType.UnableToEnroll;
                    View.DisplayUnknownCommunity(name);
                }
                View.SendUserAction(0, CurrentIdModule, idCommunity, dAction);
                if (reloadCommunities)
                {
                    LoadTree(filters, View.AdvancedMode, View.ReferenceIdCommunity, false);
                }
            }
        }
コード例 #3
0
        private void LoadTree(lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, Boolean advancedMode, Int32 idReferenceCommunity = 0, Boolean useCache = true)
        {
            litePerson p = CurrentManager.GetLitePerson(UserContext.CurrentUserID);
            List <dtoCommunityNodeItem> nodes = Service.GetTree(p, filters, advancedMode, idReferenceCommunity, useCache);

            List <Int32> idCommunities = View.GetIdcommunitiesWithNews(nodes.Where(n => n.Type == NodeType.Community && n.Details.Permissions.AccessTo).Select(n => n.IdCommunity).Distinct().ToList(), UserContext.CurrentUserID);

            nodes.Where(n => idCommunities.Contains(n.IdCommunity)).ToList().ForEach(n => n.Details.Permissions.ViewNews = true);
            View.LoadTree(nodes);
        }
コード例 #4
0
 public void LoadCommunities(Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy, Boolean ascending, Int32 pageIndex)
 {
     if (UserContext.isAnonymous)
     {
         View.DisplaySessionTimeout();
     }
     else
     {
         InternalLoadCommunities(itemsForPage, range, filters, orderBy, ascending, true, pageIndex, ModuleDashboard.ActionType.EnrollPageChangePageIndex);
     }
 }
コード例 #5
0
        public void LoadCommunities(Int32 idProfile, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, List <Int32> unloadIdCommunities, Int32 pageIndex, Int32 pageSize, Boolean useCache = true)
        {
            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                List <Int32> selectedItems = View.SelectedIdCommunities;
                Dictionary <Boolean, List <Int32> > selections = View.GetCurrentSelection();
                selectedItems = selectedItems.Except(selections[false]).ToList();
                selectedItems.AddRange(selections[true]);

                View.SelectedIdCommunities = selectedItems.Distinct().ToList();
                View.SearchFilters         = filters;
                List <dtoCommunityPlainItem> items = ServiceCommunities.GetPlainCommunities(idProfile, filters, unloadIdCommunities, useCache);
                if (items == null)
                {
                    View.LoadNothing();
                }
                else
                {
                    Int32     itemsCount = items.Count();
                    PagerBase pager      = new PagerBase();
                    pager.PageSize  = pageSize;
                    pager.Count     = (itemsCount > 0) ? itemsCount - 1 : 0;
                    pager.PageIndex = pageIndex;
                    View.Pager      = pager;


                    items = ServiceCommunities.GetCommunities(items, pageIndex, pageSize, Core.Dashboard.Domain.OrderItemsBy.Name, true);

                    if (items != null)
                    {
                        Language l = CurrentManager.GetDefaultLanguage();
                        Dictionary <Int32, List <String> > tags = ServiceTags.GetCommunityAssociationToString(items.Select(i => i.Community.Id).ToList(), UserContext.Language.Id, l.Id, true);
                        if (tags.Any())
                        {
                            foreach (dtoCommunityPlainItem item in items.Where(i => tags.ContainsKey(i.Community.Id)))
                            {
                                item.Community.Tags = tags[item.Community.Id];
                            }
                        }
                        View.LoadItems(items);
                    }
                    else
                    {
                        View.LoadItems(new List <dtoCommunityPlainItem>());
                    }
                }
            }
        }
コード例 #6
0
        private void InitializeColumns(lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, List <dtoEnrollingItem> items)
        {
            List <searchColumn> columns = new List <searchColumn>();

            columns.Add(searchColumn.info);
            columns.Add(searchColumn.name);
            if (items.Where(i => i.Community.SubscriptionStartOn.HasValue).Any())
            {
                columns.Add(searchColumn.startsubscriptionon);
            }
            if (items.Where(i => i.Community.SubscriptionEndOn.HasValue).Any())
            {
                columns.Add(searchColumn.endsubscriptionon);
            }
            if (items != null && items.Where(i => i.AllowSubscribe).Any())
            {
                columns.Add(searchColumn.actions);
                if (items.Where(i => i.AllowSubscribe).Count() > 0)
                {
                    columns.Add(searchColumn.select);
                }
            }
            switch (filters.IdcommunityType)
            {
            case (int)CommunityTypeStandard.Degree:
                if (filters.IdDegreeType < 1)
                {
                    columns.Add(searchColumn.degreetype);
                }
                break;

            case (int)CommunityTypeStandard.UniversityCourse:
                if (filters.Year < 1)
                {
                    columns.Add(searchColumn.year);
                }
                if (filters.IdCourseTime < 1)
                {
                    columns.Add(searchColumn.coursetime);
                }
                break;
            }
            //if (filters.IdResponsible<1)
            columns.Add(searchColumn.owner);
            if (items != null && items.Where(i => i.Community.MaxUsersWithDefaultRole > 0).Any())
            {
                columns.Add(searchColumn.maxsubscribers);
            }
            View.AvailableColumns = columns;
        }
コード例 #7
0
        public void EnrollTo(dtoCommunityInfoForEnroll community, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, Boolean advancedMode, Int32 idReferenceCommunity)
        {
            Int32 idPerson = UserContext.CurrentUserID;

            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                Boolean reloadCommunities = false;
                if (community != null)
                {
                    reloadCommunities = true;
                    litePerson person           = CurrentManager.GetLitePerson(idPerson);
                    String     profileType      = Service.GetTranslatedProfileType(person);
                    String     organizationName = CurrentManager.GetUserDefaultOrganizationName(idPerson);

                    dtoEnrollment enrollment = Service.EnrollTo(idPerson, community);
                    if (enrollment != null)
                    {
                        switch (enrollment.Status)
                        {
                        case EnrolledStatus.Available:
                        case EnrolledStatus.NeedConfirm:
                            lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(lm.Comol.Core.BaseModules.CommunityManagement.Domain.CacheKeys.UserCommunitiesTree(idPerson));
                            //View.NotifyEnrollment(enrollment, person, profileType, organizationName);

                            View.SendUserAction(0, CurrentIdModule, community.Id, (enrollment.Status == EnrolledStatus.Available) ? ModuleDashboard.ActionType.EnrollToCommunity : ModuleDashboard.ActionType.EnrollToCommunityWaitingConfirm);
                            reloadCommunities = true;
                            break;
                        }
                        View.DisplayEnrollMessage(enrollment, enrollment.IdCommunity, person, Service.GetTranslatedProfileType(person), CurrentManager.GetUserDefaultOrganizationName(idPerson));
                    }
                    if (reloadCommunities)
                    {
                        LoadTree(filters, advancedMode, idReferenceCommunity, false);
                    }
                }
                else
                {
                    View.SendUserAction(0, CurrentIdModule, ModuleDashboard.ActionType.NoSelectedCommunitiesToEnroll);
                }
            }
        }
コード例 #8
0
        public void ApplyFilters(Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy)
        {
            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                InternalLoadCommunities(itemsForPage, range, filters, orderBy, GetDefaultAscending(orderBy), false, 0, ModuleDashboard.ActionType.EnrollPageApplyFilters, true);

                View.CurrentFilters = filters;
                liteTile tile = null;
                if (filters.IdcommunityType > -1)
                {
                    tile = Service.GetTileForCommunityType(filters.IdcommunityType);
                }
            }
        }
コード例 #9
0
        public dtoTreeCommunityNode InternalFilter(dtoCommunitiesFilters filter, Int32 IdDefaultOrganization, List <Int32> onlyFromOrganizations = null)
        {
            dtoTreeCommunityNode root = (dtoTreeCommunityNode)this.Clone();

            if (root.Type != dtoCommunityNodeType.Root && filter.Status != CommunityStatus.None && filter.Status != this.Status)
            {
                root.Type = dtoCommunityNodeType.NotSelectable;
            }

            if (root.Type != dtoCommunityNodeType.Root && root.Type != dtoCommunityNodeType.NotSelectable && filter.Availability != CommunityAvailability.All)
            {
                root.Type = (filter.Availability == CommunityAvailability.NotSubscribed && this.Selected) ? dtoCommunityNodeType.NotSelectable
                    : this.Type;
            }
            if (root.Type != dtoCommunityNodeType.NotSelectable && this.IdOrganization == IdDefaultOrganization && this.IdFather == 0)
            {
                root.Type = dtoCommunityNodeType.NotSelectable;
            }

            if (root.Type != dtoCommunityNodeType.Root && !HasNodes(filter))
            {
                return(root);
            }
            else
            {
                foreach (dtoTreeCommunityNode n in this.Nodes.Where(n => onlyFromOrganizations == null || (onlyFromOrganizations != null && onlyFromOrganizations.Contains(n.IdOrganization))).OrderBy(nn => nn.Name).ToList())
                {
                    if (n.HasNodes(filter))
                    {
                        dtoTreeCommunityNode subNode = n.InternalFilter(filter, IdDefaultOrganization, onlyFromOrganizations);
                        if (subNode != null)
                        {
                            root.Nodes.Add(subNode);
                        }
                    }
                }
                if (root.Type == dtoCommunityNodeType.Root)
                {
                    root.Type = dtoCommunityNodeType.Root;
                }
                return(root);
            }
        }
コード例 #10
0
        public void EnrollTo(List <dtoCommunityToEnroll> sCommunities, Boolean applyToAll, Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy, Boolean ascending, Int32 pageIndex)
        {
            Int32 idPerson = UserContext.CurrentUserID;

            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                ModuleDashboard.ActionType dAction = ModuleDashboard.ActionType.None;
                Boolean reloadCommunities          = false;

                List <dtoCommunityToEnroll> cCommunities = View.CurrentSelectedItems;
                if (sCommunities.Where(i => !i.Selected).Any())
                {
                    cCommunities = cCommunities.Where(c => !sCommunities.Where(s => s.Id == c.Id).Any() || sCommunities.Where(s => s.Selected && s.Id == c.Id).Any()).ToList();
                }
                if (sCommunities.Where(i => i.Selected).Any())
                {
                    List <Int32> idCommunities = cCommunities.Select(c => c.Id).ToList();
                    cCommunities.AddRange(sCommunities.Where(s => s.Selected && !idCommunities.Contains(s.Id)).ToList());
                }

                List <dtoCommunityInfoForEnroll> items = Service.GetEnrollingItems(idPerson, cCommunities);
                if (items != null && items.Where(i => i.Id > 0).Any())
                {
                    if (!items.Where(i => i.AllowEnroll).Any())
                    {
                        dAction = ModuleDashboard.ActionType.EnrollNotAllowed;
                        if (items.Count == 1)
                        {
                            View.DisplayEnrollMessage(items.FirstOrDefault(), dAction);
                        }
                        else
                        {
                            View.DisplayEnrollMessage(items.Count, dAction);
                        }
                    }
                    else
                    {
                        reloadCommunities = true;
                        litePerson           person           = CurrentManager.GetLitePerson(idPerson);
                        String               profileType      = Service.GetTranslatedProfileType(person);
                        String               organizationName = CurrentManager.GetUserDefaultOrganizationName(idPerson);
                        List <dtoEnrollment> enrollments      = new List <dtoEnrollment>();
                        foreach (dtoCommunityInfoForEnroll cm in items.Where(i => i.AllowEnroll && !i.HasConstraints))
                        {
                            dtoEnrollment enrollment = Service.EnrollTo(idPerson, cm);
                            if (enrollment != null)
                            {
                                enrollments.Add(enrollment);
                            }
                        }
                        if (enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm).Any())
                        {
                            lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(lm.Comol.Core.BaseModules.CommunityManagement.Domain.CacheKeys.UserCommunitiesTree(idPerson));
                            enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm).ToList().ForEach(e => View.NotifyEnrollment(e, person, profileType, organizationName));
                        }
                        if ((enrollments.Any() && enrollments.Where(s => s.Status == EnrolledStatus.NotAvailable || s.Status == EnrolledStatus.UnableToEnroll).Any()) ||
                            items.Where(i => i.HasConstraints || !i.AllowUnsubscribe).Any())
                        {
                            UpdateSelectedItems(enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm || e.Status == EnrolledStatus.PreviousEnrolled || e.Status == EnrolledStatus.UnableToEnroll).Select(e => e.IdCommunity).ToList());
                            View.DisplayConfirmMessage(enrollments.Where(e => e.Status != EnrolledStatus.NotAvailable && e.Status != EnrolledStatus.UnableToEnroll).ToList(),
                                                       enrollments.Where(e => e.Status == EnrolledStatus.NotAvailable || e.Status == EnrolledStatus.UnableToEnroll).ToList(),
                                                       items.Where(i => !enrollments.Where(e => e.IdCommunity == i.Id).Any()).ToList(), person, profileType, organizationName);
                            View.SendUserAction(0, CurrentIdModule, items.Where(i => !enrollments.Where(e => e.IdCommunity == i.Id).Any()).Select(c => c.Id).ToList(), ModuleDashboard.ActionType.RequireEnrollConfirm);
                        }
                        else
                        {
                            if (enrollments.Where(e => e.Status == EnrolledStatus.Available).Any())
                            {
                                View.SendUserAction(0, CurrentIdModule, enrollments.Where(e => e.Status == EnrolledStatus.Available).Select(c => c.IdCommunity).ToList(), ModuleDashboard.ActionType.EnrollToCommunities);
                            }
                            if (enrollments.Where(e => e.Status == EnrolledStatus.NeedConfirm).Any())
                            {
                                View.SendUserAction(0, CurrentIdModule, enrollments.Where(e => e.Status == EnrolledStatus.NeedConfirm).Select(c => c.IdCommunity).ToList(), ModuleDashboard.ActionType.EnrollToCommunitiesWaitingConfirm);
                            }
                            UpdateSelectedItems(enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm || e.Status == EnrolledStatus.PreviousEnrolled || e.Status == EnrolledStatus.UnableToEnroll).Select(e => e.IdCommunity).ToList());
                            if (enrollments.Any() && enrollments.Count == items.Count)
                            {
                                View.DisplayEnrollMessage(enrollments);
                            }
                            else
                            {
                                View.DisplayEnrollMessage(enrollments, items.Where(i => !enrollments.Where(e => e.IdCommunity == i.Id).Any()).Select(c => c.Name).ToList());
                            }
                        }
                    }
                }
                else
                {
                    View.SendUserAction(0, CurrentIdModule, sCommunities.Select(c => c.Id).ToList(), ModuleDashboard.ActionType.UnableToEnroll);
                }
                if (reloadCommunities)
                {
                    InternalLoadCommunities(itemsForPage, range, filters, orderBy, ascending, true, pageIndex, ModuleDashboard.ActionType.EnrollPageLoadcommunitiesAfterEnrolling);
                }
            }
        }
コード例 #11
0
        public void EnrollTo(Int32 idCommunity, String name, String path, Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy, Boolean ascending, Int32 pageIndex)
        {
            Int32 idPerson = UserContext.CurrentUserID;

            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                Boolean reloadCommunities          = false;
                ModuleDashboard.ActionType dAction = ModuleDashboard.ActionType.None;
                dtoCommunityInfoForEnroll  item    = Service.GetEnrollingItem(idPerson, idCommunity, path);
                litePerson person = CurrentManager.GetLitePerson(idPerson);
                if (item != null && item.Id > 0 && person != null && person.Id > 0)
                {
                    if (!item.AllowEnroll)
                    {
                        dAction = ModuleDashboard.ActionType.EnrollNotAllowed;
                        View.DisplayEnrollMessage(item, dAction);
                    }
                    else
                    {
                        if (!item.HasConstraints && item.AllowUnsubscribe)
                        {
                            dtoEnrollment enrollment = Service.EnrollTo(idPerson, item);
                            if (enrollment == null)
                            {
                                dAction = ModuleDashboard.ActionType.UnableToEnroll;
                                View.DisplayEnrollMessage(item, dAction);
                            }
                            else
                            {
                                View.DisplayEnrollMessage(enrollment, enrollment.IdCommunity, person, Service.GetTranslatedProfileType(person), CurrentManager.GetUserDefaultOrganizationName(idPerson));
                                UpdateSelectedItems(new List <Int32>()
                                {
                                    enrollment.IdCommunity
                                });
                                reloadCommunities = true;
                                dAction           = (enrollment.Status == EnrolledStatus.NeedConfirm) ? ModuleDashboard.ActionType.EnrollToCommunityWaitingConfirm : ModuleDashboard.ActionType.EnrollToCommunity;
                                lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(lm.Comol.Core.BaseModules.CommunityManagement.Domain.CacheKeys.UserCommunitiesTree(idPerson));
                            }
                        }
                        else
                        {
                            dAction = ModuleDashboard.ActionType.RequireEnrollConfirm;
                            View.DisplayConfirmMessage(item);
                        }
                    }
                }
                else
                {
                    dAction = ModuleDashboard.ActionType.UnableToEnroll;
                    View.DisplayUnknownCommunity(name);
                }
                View.SendUserAction(0, CurrentIdModule, idCommunity, dAction);
                if (reloadCommunities)
                {
                    InternalLoadCommunities(itemsForPage, range, filters, orderBy, ascending, true, pageIndex, ModuleDashboard.ActionType.EnrollPageLoadcommunitiesAfterEnrolling);
                }
            }
        }
コード例 #12
0
 public void ApplyFilters(lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, Boolean advancedMode, Int32 idReferenceCommunity)
 {
     View.CurrentFilters = filters;
     LoadTree(filters, advancedMode, idReferenceCommunity, true);
 }
コード例 #13
0
        private void InternalLoadCommunities(Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy, Boolean ascending, Boolean useCache, Int32 pageIndex, ModuleDashboard.ActionType action = ModuleDashboard.ActionType.EnrollPageApplyFilters, Boolean applyFilters = false)
        {
            View.CurrentFilters = filters;
            List <dtoItemFilter <OrderItemsToSubscribeBy> > orderItems = GetOrderByItems(filters.IdcommunityType, orderBy);

            View.InitializeOrderBySelector(orderItems);
            List <dtoEnrollingItem> items = Service.GetCommunitiesToEnroll(UserContext.CurrentUserID, filters, useCache);
            Int32 itemsCount = (items == null) ? 0 : items.Count;
            Int32 pageSize   = CalculatePageSize(itemsForPage, range, itemsCount);

            View.CurrentPageSize = pageSize;
            InitializeColumns(filters, items);

            if (items == null)
            {
                View.DisplayErrorFromDB();
                View.CurrentOrderBy   = orderBy;
                View.CurrentAscending = ascending;
            }
            else
            {
                if (pageSize == 0)
                {
                    pageSize = View.DefaultPageSize;
                }
                PagerBase pager = new PagerBase();
                pager.PageSize  = pageSize;
                pager.Count     = (itemsCount > 0) ? itemsCount - 1 : 0;
                pager.PageIndex = pageIndex;
                View.Pager      = pager;
                List <dtoCommunityToEnroll> cItems = null;
                if (applyFilters)
                {
                    cItems = new List <dtoCommunityToEnroll>();
                }
                else
                {
                    cItems = View.CurrentSelectedItems;
                    List <dtoCommunityToEnroll> sItems = View.GetSelectedItems();
                    if (sItems.Where(i => !i.Selected).Any())
                    {
                        cItems = cItems.Where(c => !sItems.Where(s => s.Id == c.Id).Any() || sItems.Where(s => s.Selected && s.Id == c.Id).Any()).ToList();
                    }
                    if (sItems.Where(i => i.Selected).Any())
                    {
                        List <Int32> idCommunities = cItems.Select(c => c.Id).ToList();
                        cItems.AddRange(sItems.Where(s => s.Selected && !idCommunities.Contains(s.Id)).ToList());
                    }
                }
                View.CurrentSelectedItems = cItems;
                View.KeepOpenBulkActions  = (cItems.Count > 0);
                View.InitializeBulkActions(itemsCount > pageSize, cItems);
                items = Service.GetCommunities(UserContext.CurrentUserID, items, pageIndex, pageSize, orderBy, ascending);

                if (items != null)
                {
                    Language l = CurrentManager.GetDefaultLanguage();
                    Dictionary <Int32, List <String> > tags = ServiceTags.GetCommunityAssociationToString(items.Select(i => i.Community.Id).ToList(), UserContext.Language.Id, l.Id, true);
                    if (tags.Any())
                    {
                        foreach (dtoEnrollingItem item in items.Where(i => tags.ContainsKey(i.Community.Id)))
                        {
                            item.Community.Tags = tags[item.Community.Id];
                        }
                    }

                    View.LoadItems(items, orderBy, ascending);
                    //View.SendUserAction(0, CurrentIdModule, action);
                }
                else
                {
                    View.LoadItems(new List <dtoEnrollingItem>(), orderBy, ascending);
                }
            }
        }
コード例 #14
0
 public void InitView(Boolean advancedMode, lm.Comol.Core.BaseModules.CommunityManagement.CommunityAvailability availability = CommunityManagement.CommunityAvailability.Subscribed, Int32 idReferenceCommunity = 0, String referencePath = "")
 {
     View.AdvancedMode         = advancedMode;
     View.ReferenceIdCommunity = idReferenceCommunity;
     View.IsFirstLoad          = true;
     if (UserContext.isAnonymous)
     {
         View.DisplaySessionTimeout();
     }
     else
     {
         ModuleDashboard.ActionType action = (idReferenceCommunity > 0) ? ModuleDashboard.ActionType.TreeNoChildrenToLoad : ModuleDashboard.ActionType.TreeUnableToLoad;
         List <lm.Comol.Core.DomainModel.Filters.Filter> fToLoad = null;
         switch (availability)
         {
         case CommunityManagement.CommunityAvailability.Subscribed:
             fToLoad = Service.GetDefaultFilters(UserContext.CurrentUserID, "", -1, -1, null, null, availability).OrderBy(f => f.DisplayOrder).ToList();
             View.LoadDefaultFilters(fToLoad);
             break;
         }
         if (fToLoad != null && fToLoad.Any())
         {
             lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters = new lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters(fToLoad, availability);
             View.CurrentFilters = filters;
             action = (idReferenceCommunity > 0) ? ModuleDashboard.ActionType.TreeLoadChildren : ModuleDashboard.ActionType.TreeLoad;
             LoadTree(filters, advancedMode, idReferenceCommunity, false);
         }
         else
         {
             View.DisplayNoTreeToLoad((idReferenceCommunity > 0) ? CurrentManager.GetCommunityName(idReferenceCommunity) : "");
         }
         View.SendUserAction(idReferenceCommunity, CurrentIdModule, action);
     }
 }
コード例 #15
0
 public dtoTreeCommunityNode Filter(dtoCommunitiesFilters filter, Int32 IdDefaultOrganization, List <Int32> onlyFromOrganizations = null)
 {
     //return FullClone(this, null).InternalFilter(filter, IdDefaultOrganization, onlyFromOrganizations);
     return(InternalFilter(filter, IdDefaultOrganization, onlyFromOrganizations));
 }
コード例 #16
0
        public void EnrollTo(List <dtoCommunityInfoForEnroll> sCommunities, Int32 itemsForPage, RangeSettings range, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters, OrderItemsToSubscribeBy orderBy, Boolean ascending, Int32 pageIndex)
        {
            Int32 idPerson = UserContext.CurrentUserID;

            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                Boolean reloadCommunities = false;
                if (sCommunities.Any())
                {
                    reloadCommunities = true;
                    litePerson           person           = CurrentManager.GetLitePerson(idPerson);
                    String               profileType      = Service.GetTranslatedProfileType(person);
                    String               organizationName = CurrentManager.GetUserDefaultOrganizationName(idPerson);
                    List <dtoEnrollment> enrollments      = new List <dtoEnrollment>();
                    foreach (dtoCommunityInfoForEnroll cm in sCommunities)
                    {
                        dtoEnrollment enrollment = Service.EnrollTo(idPerson, cm);
                        if (enrollment != null)
                        {
                            enrollments.Add(enrollment);
                        }
                    }
                    if (enrollments.Any())
                    {
                        if (enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm).Any())
                        {
                            lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(lm.Comol.Core.BaseModules.CommunityManagement.Domain.CacheKeys.UserCommunitiesTree(idPerson));
                            enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm).ToList().ForEach(e => View.NotifyEnrollment(e, person, profileType, organizationName));
                            reloadCommunities = true;
                        }

                        if (enrollments.Where(e => e.Status == EnrolledStatus.Available).Any())
                        {
                            View.SendUserAction(0, CurrentIdModule, enrollments.Where(e => e.Status == EnrolledStatus.Available).Select(c => c.IdCommunity).ToList(), ModuleDashboard.ActionType.EnrollToCommunities);
                        }
                        if (enrollments.Where(e => e.Status == EnrolledStatus.NeedConfirm).Any())
                        {
                            View.SendUserAction(0, CurrentIdModule, enrollments.Where(e => e.Status == EnrolledStatus.NeedConfirm).Select(c => c.IdCommunity).ToList(), ModuleDashboard.ActionType.EnrollToCommunitiesWaitingConfirm);
                        }
                        UpdateSelectedItems(enrollments.Where(e => e.Status == EnrolledStatus.Available || e.Status == EnrolledStatus.NeedConfirm || e.Status == EnrolledStatus.PreviousEnrolled || e.Status == EnrolledStatus.UnableToEnroll).Select(e => e.IdCommunity).ToList());
                        View.DisplayEnrollMessage(enrollments);
                    }
                    if (reloadCommunities)
                    {
                        InternalLoadCommunities(itemsForPage, range, filters, orderBy, ascending, true, pageIndex, ModuleDashboard.ActionType.EnrollPageLoadcommunitiesAfterEnrolling, true);
                    }
                }
                else
                {
                    View.SendUserAction(0, CurrentIdModule, ModuleDashboard.ActionType.NoSelectedCommunitiesToEnroll);
                }
            }
        }
コード例 #17
0
        public void UnsubscribeFromCommunity(Int32 idCommunity, String path, RemoveAction action, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters)
        {
            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                lm.Comol.Core.BaseModules.CommunityManagement.dtoUnsubscribeTreeNode node = Service.UnsubscribeInfo(UserContext.CurrentUserID, idCommunity, path);
                if (node != null)
                {
                    switch (action)
                    {
                    case RemoveAction.None:
                        break;

                    default:
                        ModuleDashboard.ActionType  dAction       = ModuleDashboard.ActionType.UnableToUnsubscribe;
                        List <liteSubscriptionInfo> subscriptions = Service.UnsubscribeFromCommunity(UserContext.CurrentUserID, node, action);
                        if (subscriptions == null && !subscriptions.Any())
                        {
                            switch (action)
                            {
                            case RemoveAction.FromCommunity:
                                dAction = ModuleDashboard.ActionType.UnableToUnsubscribeFromCommunity;
                                View.DisplayUnableToUnsubscribe(node.Name);
                                break;

                            case RemoveAction.FromAllSubCommunities:
                                dAction = ModuleDashboard.ActionType.UnableToUnsubscribeFromCommunities;
                                View.DisplayUnsubscriptionMessage(new List <String>(), node.GetAllNodes().Where(n => n.AllowUnsubscribe()).Select(n => n.Name).ToList());
                                break;
                            }
                        }
                        else
                        {
                            switch (action)
                            {
                            case RemoveAction.FromCommunity:
                                dAction = ModuleDashboard.ActionType.UnsubscribeFromCommunity;
                                View.DisplayUnsubscribedFrom(node.Name);
                                break;

                            case RemoveAction.FromAllSubCommunities:
                                dAction = ModuleDashboard.ActionType.UnsubscribeFromCommunities;
                                View.DisplayUnsubscriptionMessage(node.GetAllNodes().Where(n => n.AllowUnsubscribe() && subscriptions.Where(s => s.IdCommunity == n.Id && s.IdRole < 1).Any()).Select(n => n.Name).ToList(),
                                                                  node.GetAllNodes().Where(n => n.AllowUnsubscribe() && subscriptions.Where(s => s.IdCommunity == n.Id && s.IdRole > 0).Any()).Select(n => n.Name).ToList()
                                                                  );
                                break;
                            }
                        }
                        View.SendUserAction(0, CurrentIdModule, idCommunity, dAction);
                        switch (dAction)
                        {
                        case ModuleDashboard.ActionType.UnsubscribeFromCommunity:
                        case ModuleDashboard.ActionType.UnsubscribeFromCommunities:
                            LoadTree(filters, View.AdvancedMode, View.ReferenceIdCommunity, false);
                            break;
                        }
                        break;
                    }
                }
                else
                {
                    String name = CurrentManager.GetCommunityName(idCommunity);
                    if (!String.IsNullOrEmpty(name))
                    {
                        View.DisplayUnableToUnsubscribe(name);
                    }
                    View.SendUserAction(0, CurrentIdModule, idCommunity, ModuleDashboard.ActionType.UnableToUnsubscribe);
                }
            }
        }
コード例 #18
0
        public void UnsubscribeFromCommunity(Int32 idCommunity, String path, lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters)
        {
            if (UserContext.isAnonymous)
            {
                View.DisplaySessionTimeout();
            }
            else
            {
                lm.Comol.Core.BaseModules.CommunityManagement.dtoUnsubscribeTreeNode node = Service.UnsubscribeInfo(UserContext.CurrentUserID, idCommunity, path);
                if (node != null)
                {
                    ModuleDashboard.ActionType dAction = ModuleDashboard.ActionType.None;
                    List <lm.Comol.Core.BaseModules.CommunityManagement.dtoUnsubscribeTreeNode> nodes = node.GetAllNodes();
                    if (!nodes.Where(n => n.AllowUnsubscribe()).Any())
                    {
                        View.DisplayUnableToUnsubscribe(CurrentManager.GetCommunityName(idCommunity));
                        dAction = ModuleDashboard.ActionType.UnableToUnsubscribeFromCommunity;
                    }
                    else
                    {
                        List <RemoveAction> actions = new List <RemoveAction>();
                        actions.Add(RemoveAction.None);
                        actions.Add(RemoveAction.FromCommunity);
                        if (nodes.Where(n => n.AllowUnsubscribe()).Count() > 1)
                        {
                            actions.Add(RemoveAction.FromAllSubCommunities);
                        }

                        if (node == null)
                        {
                            View.DisplayUnableToUnsubscribe(CurrentManager.GetCommunityName(idCommunity));
                            dAction = ModuleDashboard.ActionType.UnableToUnsubscribeFromCommunity;
                        }
                        else if (!node.AllowUnsubscribe())
                        {
                            View.DisplayUnsubscribeNotAllowed(node.Name);
                            dAction = ModuleDashboard.ActionType.UnsubscribeNotallowed;
                        }
                        else if (node.AllowUnsubscribe() && (!node.CommunityAllowSubscription || node.MaxUsersWithDefaultRole > 0 || (node.CommunitySubscriptionEndOn.HasValue && DateTime.Now.AddDays(30) > node.CommunitySubscriptionEndOn.Value)))
                        {
                            View.DisplayConfirmMessage(idCommunity, path, node, actions, RemoveAction.None, nodes.Where(n => n.AllowUnsubscribe() && n.Id != idCommunity).ToList());
                            dAction = ModuleDashboard.ActionType.RequireUnsubscribeConfirm;
                        }
                        else
                        {
                            if (nodes.Where(n => n.AllowUnsubscribe()).Count() > 1)
                            {
                                View.DisplayConfirmMessage(idCommunity, path, node, actions, RemoveAction.FromCommunity, nodes.Where(n => n.AllowUnsubscribe() && n.Id != idCommunity).ToList());
                                dAction = ModuleDashboard.ActionType.RequireUnsubscribeConfirmFromSubCommunities;
                            }
                            else
                            {
                                List <liteSubscriptionInfo> subscriptions = Service.UnsubscribeFromCommunity(UserContext.CurrentUserID, node, RemoveAction.FromCommunity);
                                if (subscriptions != null && subscriptions.Any() && subscriptions.Count == 1 && subscriptions[0].IdRole < 1)
                                {
                                    View.DisplayUnsubscribedFrom(node.Name);
                                    dAction = ModuleDashboard.ActionType.UnsubscribeFromCommunity;
                                }
                                else
                                {
                                    View.DisplayUnableToUnsubscribe(node.Name);
                                    dAction = ModuleDashboard.ActionType.UnableToUnsubscribeFromCommunity;
                                }
                            }
                        }
                    }
                    View.SendUserAction(0, CurrentIdModule, idCommunity, dAction);
                    if (dAction == ModuleDashboard.ActionType.UnsubscribeFromCommunity)
                    {
                        LoadTree(filters, View.AdvancedMode, View.ReferenceIdCommunity, false);
                    }
                }
                else
                {
                    String name = CurrentManager.GetCommunityName(idCommunity);
                    if (!String.IsNullOrEmpty(name))
                    {
                        View.DisplayUnableToUnsubscribe(CurrentManager.GetCommunityName(idCommunity));
                    }
                    View.SendUserAction(0, CurrentIdModule, idCommunity, ModuleDashboard.ActionType.UnableToUnsubscribe);
                }
            }
        }
コード例 #19
0
        private void InitializeView(Int32 itemsForPage, RangeSettings range, Int32 preloadIdCommunityType, String searchText, Boolean preloadList)
        {
            View.DefaultPageSize = itemsForPage;
            View.DefaultRange    = range;
            View.IsInitialized   = true;
            View.FirstLoad       = true;
            litePerson person = CurrentManager.GetLitePerson(UserContext.CurrentUserID);

            if (person != null)
            {
                List <lm.Comol.Core.DomainModel.Filters.Filter> fToLoad = Service.GetDefaultFilters(UserContext.CurrentUserID, searchText, preloadIdCommunityType, -1, null, null, CommunityAvailability.NotSubscribed).OrderBy(f => f.DisplayOrder).ToList();
                View.LoadDefaultFilters(fToLoad);
                if (fToLoad != null && fToLoad.Any())
                {
                    //lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters = Service.GetDefaultFilters(person, CommunityManagement.CommunityAvailability.NotSubscribed, false, preloadIdCommunityType);
                    lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters filters = new lm.Comol.Core.BaseModules.CommunityManagement.dtoCommunitiesFilters(fToLoad, CommunityAvailability.NotSubscribed, preloadIdCommunityType);
                    if (preloadIdCommunityType > -1)
                    {
                        filters.IdcommunityType = preloadIdCommunityType;
                    }
                    View.CurrentFilters = filters;
                    if (preloadList)
                    {
                        InternalLoadCommunities(itemsForPage, range, filters, OrderItemsToSubscribeBy.Name, true, false, 0, ModuleDashboard.ActionType.EnrollPageLoadWithCommunities);
                    }
                    else
                    {
                        View.CurrentOrderBy   = OrderItemsToSubscribeBy.Name;
                        View.CurrentAscending = true;

                        InitializeColumns(filters, new List <dtoEnrollingItem>());
                        View.LoadItems(new List <dtoEnrollingItem>(), OrderItemsToSubscribeBy.Name, true);
                    }
                    View.SendUserAction(0, CurrentIdModule, ModuleDashboard.ActionType.EnrollPageLoad);
                }
                SetListTitle(preloadIdCommunityType, (fToLoad != null && fToLoad.Any()));
            }
            else
            {
                View.DisplaySessionTimeout();
            }
        }
コード例 #20
0
        public Boolean HasNodes(dtoCommunitiesFilters filter)
        {
            Boolean result = false;
            var     query  = (from n in this.Nodes select n);

            if (filter.IdOrganization > 0)
            {
                query = query.Where(n => n.IdOrganization == filter.IdOrganization);
            }
            else if (filter.OnlyFromAvailableOrganizations)
            {
                query = query.Where(n => filter.AvailableIdOrganizations.Contains(n.IdOrganization));
            }
            if (filter.IdcommunityType > -1)
            {
                query = query.Where(n => n.IdCommunityType == filter.IdcommunityType);
            }
            else if (filter.IdRemoveCommunityType > -1)
            {
                query = query.Where(n => n.IdCommunityType != filter.IdRemoveCommunityType);
            }
            if (filter.Status != CommunityStatus.None)
            {
                query = query.Where(n => n.Status == filter.Status);
            }
            if (filter.IdResponsible != -1)
            {
                query = query.Where(n => n.IdResponsible == filter.IdResponsible);
            }
            if (filter.Availability != CommunityAvailability.All)
            {
                query = query.Where(n => (filter.Availability == CommunityAvailability.Subscribed && n.Selected) || (filter.Availability == CommunityAvailability.NotSubscribed && !n.Selected));
            }
            if (filter.IdCourseTime > 0)
            {
                query = query.Where(n => n.IdCourseTime == filter.IdCourseTime);
            }
            if (filter.IdDegreeType > 0)
            {
                query = query.Where(n => n.IdCourseTime == filter.IdDegreeType);
            }
            if (!String.IsNullOrEmpty(filter.CourseCode))
            {
                query = query.Where(n => !String.IsNullOrEmpty(n.CourseCode) && n.CourseCode.ToLower().Contains(filter.CourseCode.Trim().ToLower()));
            }
            if (filter.Year > 0)
            {
                query = query.Where(n => n.Year == filter.Year);
            }
            if (filter.IdTags.Any() && IsTagsSet)
            {
                query = query.Where(n => n.IdTags.Where(t => filter.IdTags.Contains(t)).Any());
            }
            if (filter.SearchBy != SearchCommunitiesBy.All)
            {
                switch (filter.SearchBy)
                {
                case SearchCommunitiesBy.Contains:
                    if (!String.IsNullOrEmpty(filter.Value))
                    {
                        query = query.Where(n => !String.IsNullOrEmpty(n.Name) && n.Name.ToLower().Contains(filter.Value.ToLower()));
                    }
                    break;

                case SearchCommunitiesBy.NameStartAs:
                    if (!String.IsNullOrEmpty(filter.Value))
                    {
                        query = query.Where(n => !String.IsNullOrEmpty(n.Name) && n.Name.ToLower().StartsWith(filter.Value.ToLower()));
                    }
                    break;

                case SearchCommunitiesBy.StartAs:
                    if (filter.StartWith != "#")
                    {
                        query = query.Where(n => string.Compare(n.FirstLetter, filter.StartWith.ToLower(), true) == 0);
                    }
                    else
                    {
                        query = query.Where(n => DefaultOtherChars().Contains(n.FirstLetter));
                    }

                    break;
                }
            }
            Boolean hasSubNodes = query.Any();

            if (filter.IdOrganization > 0)
            {
                result = (this.IdOrganization == filter.IdOrganization || hasSubNodes);
            }
            else if (filter.OnlyFromAvailableOrganizations && filter.AvailableIdOrganizations.Any())
            {
                result = (filter.AvailableIdOrganizations.Contains(this.IdOrganization) || hasSubNodes);
            }
            else
            {
                result = true;
            }
            // TO CHECK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            if (filter.IdcommunityType >= 0)
            {
                result = result && (((!filter.OnlyFromAvailableOrganizations && filter.IdOrganization < 1) || result) &&
                                    ((this.IdCommunityType == filter.IdcommunityType) || hasSubNodes));
            }
            else if (filter.IdRemoveCommunityType > -1)
            {
                result = result && (((!filter.OnlyFromAvailableOrganizations && filter.IdOrganization < 1) || result) &&
                                    (this.IdCommunityType != filter.IdRemoveCommunityType || hasSubNodes));
            }

            /* result = (((filter.OnlyFromAvailableOrganizations ) || (!filter.OnlyFromAvailableOrganizations && filter.IdOrganization < 1)) || result)
             *      && (this.IdCommunityType == filter.IdcommunityType || hasSubNodes);*/
            if (filter.IdTags.Any() && IsTagsSet)
            {
                result = (result && (IdTags.Where(t => filter.IdTags.Contains(t)).Any() || hasSubNodes));
            }

            if (filter.Status != CommunityStatus.None)
            {
                result = result && (((filter.IdcommunityType < 1 && filter.IdcommunityType < 0) || result) &&
                                    (this.Status == filter.Status || hasSubNodes));
            }
            if (filter.Availability != CommunityAvailability.All)
            {
                result = result && (((filter.IdcommunityType < 1 && filter.IdcommunityType < 0 && filter.Status == CommunityStatus.None) || result) &&
                                    (
                                        ((filter.Availability == CommunityAvailability.Subscribed && this.Selected) ||
                                         (filter.Availability == CommunityAvailability.NotSubscribed && !this.Selected)) || hasSubNodes
                                    ));
            }
            if (filter.SearchBy != SearchCommunitiesBy.All && !String.IsNullOrEmpty(this.Name))
            {
                switch (filter.SearchBy)
                {
                case SearchCommunitiesBy.Contains:
                    if (!String.IsNullOrEmpty(filter.Value))
                    {
                        result = (result && Name.ToLower().Contains(filter.Value.ToLower()) || hasSubNodes);
                    }
                    break;

                case SearchCommunitiesBy.NameStartAs:
                    if (!String.IsNullOrEmpty(filter.Value))
                    {
                        result = (result && Name.ToLower().StartsWith(filter.Value.ToLower()) || hasSubNodes);
                    }
                    break;

                case SearchCommunitiesBy.StartAs:
                    if (filter.StartWith != "#")
                    {
                        result = ((result && string.Compare(FirstLetter, filter.StartWith.ToLower(), true) == 0) || hasSubNodes);
                    }
                    else
                    {
                        result = ((result && DefaultOtherChars().Contains(FirstLetter)) || hasSubNodes);
                    }
                    break;
                }
            }
            if (filter.IdResponsible != -1)
            {
                result = ((result && filter.IdResponsible == IdResponsible) || hasSubNodes);
            }

            if (result)
            {
                return(result);
            }
            else if (Nodes.Count > 0)
            {
                foreach (dtoTreeCommunityNode n in this.Nodes)
                {
                    result = n.HasNodes(filter);
                    if (result == true)
                    {
                        break;
                    }
                }
            }
            return(result);
        }