Beispiel #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string CurrentUserLogin = "";
            if (Bitrix.Security.BXPrincipal.Current.Identity.IsAuthenticated && OrdersIBlockId>0)
            {
                CurrentUserLogin = Bitrix.Security.BXPrincipal.Current.Identity.Name.Trim();
                BXFilterItem[] AgrimentsFilter = new BXFilterItem[1];

                if (Bitrix.Security.BXPrincipal.Current.IsInRole("Admin"))
                {
                    AgrimentsFilter[0] = new BXFilterItem(BXIBlockElement.Fields.IBlock.ID, BXSqlFilterOperators.Equal, OrdersIBlockId);
                }
                else
                {
                    AgrimentsFilter = new BXFilterItem[2];
                    AgrimentsFilter[0] = new BXFilterItem(BXIBlockElement.Fields.IBlock.ID, BXSqlFilterOperators.Equal, OrdersIBlockId);
                    AgrimentsFilter[1] = new BXFilterItem(new BXSchemeCustomField(BXIBlockElement.GetCustomFieldsKey(OrdersIBlockId), "LOGIN", BXIBlockElement.Fields.ID), BXSqlFilterOperators.Equal, CurrentUserLogin);
                }
            elements = BXIBlockElement.GetList(
               new BXFilter(AgrimentsFilter),
               new BXOrderBy(new BXOrderByPair(BXIBlockElement.Fields.CreateDate, BXOrderByDirection.Desc)),
               null,
               new BXQueryParams(new BXPagingOptions(0, Count))
               );

            }

            IncludeComponentTemplate();
            
        }
    protected void ItemGrid_Select(object sender, BXSelectEventArgs e)
    {
        if (typeSelectError != true)
            typeSelectError = false;

        List<RatingVotingWrapper> list = new List<RatingVotingWrapper>();
        
        BXFilter f = new BXFilter(ItemFilter.CurrentFilter, BXRatingVoting.Fields);
        //f.Add(new BXFilterItem(BXRatingVoting.Fields.TotalVotes, BXSqlFilterOperators.Greater, 0));

        //если задан тип элемента и поисковая фраза - ищем поиском
        BXFilterItem searchFilter = null;

        if (ItemFilter.CurrentFilter.Exists(TypeFilterExist) && ItemFilter.CurrentFilter.Exists(VotingSubjectContainsExist))
        {
            #region запускаем поиск по введенной строке
            //ErrorMessage.Visible = false;
            List<BXSearchResult> results = new List<BXSearchResult>();

            string boundEntityTypeId = string.Empty,
                moduleSearchId = string.Empty, 
                searchQuery = string.Empty;
            BXFormFilterItem tmp = null;
            foreach (BXFormFilterItem f1 in ItemFilter.CurrentFilter)
            {
                if (f1.filterName == "BoundEntityTypeId")
                    boundEntityTypeId = f1.filterValue.ToString();
                else if (f1.filterName == "VotingSubjectContains")
                {
                    searchQuery = f1.filterValue.ToString();
                    //удаляем фильтр из списка по VotingSubjectContains, 
                    //чтобы не создавать лишних условий в фильтре
                    tmp = f1;
                }
            }

            ItemFilter.CurrentFilter.Remove(tmp);
            //если опознан модуль и есть результаты поиска по словосочетанию
            if (TryGetModuleId(boundEntityTypeId, out moduleSearchId))
                switch (moduleSearchId)
                {
                    case "iblock":
                        List<int> iblockElementIds = new List<int>();
                        results = SearchItems(moduleSearchId, searchQuery);
                        foreach (BXSearchResult r in results)
                        {
                            int var_i;
                            int.TryParse(r.Content.ItemId, out var_i);
                            iblockElementIds.Add(var_i);
                        }
                        searchFilter = new BXFilterItem(BXRatingVoting.Fields.BoundEntityId, BXSqlFilterOperators.In, iblockElementIds);
                        f.Add(searchFilter);
                        break;
                    case "blog":
                        List<int> blogPostIds = new List<int>();
                        results = SearchItems(moduleSearchId, searchQuery);
                        foreach (BXSearchResult r in results)
                        {
                            int var_i;
                            string var_s = r.Content.ItemId;
                            var_s = var_s.Remove(0, 1);
                            int.TryParse(var_s, out var_i);
                            blogPostIds.Add(var_i);
                        }
                        searchFilter = new BXFilterItem(BXRatingVoting.Fields.BoundEntityId, BXSqlFilterOperators.In, blogPostIds);
                        f.Add(searchFilter);
                        break;
                    case "forum":
                        List<int> forumPostIds = new List<int>();
                        results = SearchItems(moduleSearchId, searchQuery);
                        foreach (BXSearchResult r in results)
                        {
                            int var_i;
                            int.TryParse(r.Content.ItemId, out var_i);
                            forumPostIds.Add(var_i);
                        }
                        searchFilter = new BXFilterItem(BXRatingVoting.Fields.BoundEntityId, BXSqlFilterOperators.In, forumPostIds);
                        f.Add(searchFilter);
                        break;
                    case "user":
                        List<int> userIds = new List<int>();
                        BXUserCollection users = BXUserManager.GetList(new BXFormFilter(new BXFormFilterItem("username", searchQuery, BXSqlFilterOperators.Equal)), new BXOrderBy_old());
                        if (users.Count > 0)
                            searchFilter = new BXFilterItem(BXRatingVoting.Fields.BoundEntityId, BXSqlFilterOperators.Equal, users[0].UserId);
                        else
                        {
                            e.Data = list;
                            return;
                        }
                        break;
                    default:
                        e.Data = list;
                        return;
                }
            #endregion
        }
        else if (ItemFilter.CurrentFilter.Exists(VotingSubjectContainsExist) && !typeSelectError)
        {
            //ErrorMessage.Visible = true;
            ErrorMessage.AddErrorText(GetMessage("Error.ChooseSubjectType"));
            typeSelectError = true;
            e.Data = list;
            return;
        }

        BXSelect s = new BXSelect(
            BXSelectFieldPreparationMode.Normal,
            BXRatingVoting.Fields.Id,
            BXRatingVoting.Fields.Active,
            BXRatingVoting.Fields.BoundEntityTypeId,
            BXRatingVoting.Fields.BoundEntityId,      //за что или за кого голосуют
            BXRatingVoting.Fields.CreatedUtc,         //дата создания
            BXRatingVoting.Fields.LastCalculatedUtc,  //дата последней модификации голосования
            BXRatingVoting.Fields.TotalValue,         //суммарное значение голосов
            BXRatingVoting.Fields.TotalPositiveVotes, //количество голосов "за"
            BXRatingVoting.Fields.TotalNegativeVotes, //количество голосов "против"
            BXRatingVoting.Fields.TotalVotes,         //количество голосов
            BXRatingVoting.Fields.XmlId
        );

        BXRatingVotingCollection col = BXRatingVoting.GetList(
            f,
            new BXOrderBy(BXRatingVoting.Fields, string.IsNullOrEmpty(e.SortExpression) ? "CreatedUtc DESC" : e.SortExpression),
            s,
            new BXQueryParams(e.PagingOptions),
            BXTextEncoder.EmptyTextEncoder
        );

        int recalculateId = 0;

        if (!String.IsNullOrEmpty(Request["recalculate"]) && Request["recalculate"] == "Y")
            int.TryParse(Request["RecalculateId"], out recalculateId);

        foreach (BXRatingVoting item in col)
        {
            if (recalculateId > 0 && item.Id == recalculateId) 
                item.Calculate(true);
            list.Add(new RatingVotingWrapper(item, this));
        }
        e.Data = list;
    }