/// ------------------------------------------------------------------------------------
        /// <summary>
        /// Adds a new category to the database and the tree. If the sliding panel is not
        /// null then it must be frozen until editing the category name is finished.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        public void AddCategory(string newCategoryName, SlidingPanel slidingPanel,
                                bool beginEditAfterAdding)
        {
            // Make sure the category name is unique.
            int i       = 0;
            var newName = newCategoryName;

            while (CategoryExists(newName))
            {
                newName = string.Format("{0} ({1})", newCategoryName, ++i);
            }

            newCategoryName = newName;

            var group = new SearchQueryGroup();

            group.Name = newCategoryName;
            App.Project.SearchQueryGroups.Add(group);
            App.Project.SearchQueryGroups.Save();

            // Hide the label that tells the user there are no saved patterns
            // because we know there is at least one category now.
            m_lblNoPatternsMsg.Visible = false;

            // Now add the category to the tree, select it and put user in edit mode.
            var node = Nodes.Add(newCategoryName);

            node.Tag     = group;
            SelectedNode = node;

            if (!beginEditAfterAdding)
            {
                return;
            }

            node.BeginEdit();
            if (slidingPanel != null)
            {
                m_slidingPanel      = slidingPanel;
                slidingPanel.Freeze = true;
            }
        }
Пример #2
0
        public static SearchQueryGroup BuildSearchQuery(SearchCriteria model, string[] searchFields)
        {
            //GOAL: (Title:[term]* Content:[term*]) AND (Title:[secondTerm]* Content:[secondTerm]*) AND (Type:[t1] OR Type:[t2] ... OR Type:[tN]) AND (Category:[c1] ... OR Category:[cN])
            //log.Trace("Keyword: {0}", keyword);
            var queryGroups = new SearchQueryGroup(QueryOperator.And);

            //var queryGroups = new List<string>();

            //**** TERMS ****
            var documentLibraryToSearch = AppSettingsUtility.GetValue <string>("ResourceLibrary.DocumentLibrary.ToSearch");

            if (!string.IsNullOrEmpty(documentLibraryToSearch))
            {
                var SearchDocumentLibraryGroup = new SearchQueryGroup(QueryOperator.Or);
                var documentLibraries          = documentLibraryToSearch.Split(',').ToList();

                foreach (var documentLibrary in documentLibraries)
                {
                    var searchTerm = new SearchTerm();
                    searchTerm.Field = "DocumentLibrary";
                    searchTerm.Value = documentLibrary;
                    SearchDocumentLibraryGroup.AddTerm(searchTerm);
                }

                queryGroups.AddGroup(SearchDocumentLibraryGroup);
            }

            //**** TERMS ****
            if (!string.IsNullOrEmpty(model.Term))
            {
                var SearchTermGroup = new SearchQueryGroup(QueryOperator.Or);
                var keyword         = model.Term + " " + model.SecondTerm;

                foreach (var field in searchFields)
                {
                    var keywords = keyword.Split(' ');
                    var count    = keywords.Count();

                    for (int i = 0; i < count; i++)
                    {
                        if (!SitefinityExtensions.IsNullOrEmpty(keywords[i]))
                        {
                            var searchTerm = new SearchTerm();
                            searchTerm.Field = field;
                            //log.Trace("Search Term Field: {0}", searchTerm.Field);
                            searchTerm.Value = keywords[i];
                            //log.Trace("Search Term Value: {0}", searchTerm.Value);
                            SearchTermGroup.AddTerm(searchTerm);
                        }
                    }
                }

                queryGroups.AddGroup(SearchTermGroup);
            }

            //**** TYPES *****
            if (model.Types != null && model.Types.Any())
            {
                var searchTypeGroup = new SearchQueryGroup(QueryOperator.Or);
                foreach (var type in model.Types)
                {
                    var searchTerm = new SearchTerm();
                    searchTerm.Field = "ResourceTypesIds";
                    searchTerm.Value = type;

                    searchTypeGroup.AddTerm(searchTerm);
                }
                queryGroups.AddGroup(searchTypeGroup);
            }

            //**** TOPICS ****
            if (model.Topics != null && model.Topics.Any())
            {
                var searchCategoriesGroup = new SearchQueryGroup(QueryOperator.Or);
                foreach (var cat in model.Topics)
                {
                    var searchTerm = new SearchTerm();
                    searchTerm.Field = "CategoryIds";
                    searchTerm.Value = cat.ToString().Replace("-", "");

                    searchCategoriesGroup.AddTerm(searchTerm);
                }
                queryGroups.AddGroup(searchCategoriesGroup);
            }

            //**** Authors ****
            if (model.Authors != null && model.Authors.Any())
            {
                var searchAuthorsGroup = new SearchQueryGroup(QueryOperator.Or);
                foreach (var cat in model.Authors)
                {
                    var searchTerm = new SearchTerm();
                    searchTerm.Field = "OrganizationalAuthorsIds";
                    searchTerm.Value = cat.ToString().Replace("-", "");

                    searchAuthorsGroup.AddTerm(searchTerm);
                }
                queryGroups.AddGroup(searchAuthorsGroup);
            }

            if (model.Types == null && model.Topics == null && string.IsNullOrEmpty(model.Term) && string.IsNullOrEmpty(model.SecondTerm))
            {
                SearchQueryGroup SearchAnyGroup = new SearchQueryGroup(QueryOperator.Or);
                var searchField = "Title";
                var sTerm       = "a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z*";

                foreach (var term in sTerm.Split(' '))
                {
                    var searchTerm = new SearchTerm
                    {
                        Field = searchField,
                        Value = term
                    };
                    //add wildcards to the query terms
                    SearchAnyGroup.AddTerm(searchTerm);
                }
                queryGroups.AddGroup(SearchAnyGroup);
            }

            return(queryGroups);
        }
Пример #3
0
        /// <summary>
        /// Sitfinity update after 7.3 requires ISearchQuery Object to be passed into ISearchService.
        /// In order to accommodate the change, based on prior string definition the required changes
        /// have been meet.
        ///
        /// Ex.
        ///     Prior setup produced
        ///                 "(Provider:OpenAccessDataProvider OR Provider:NewsReleaseProvider OR Provider:TodaysHeadlinesProvider) AND (CategoryIds:b97e989c41746fcd88eaff000002c0f4)"
        ///         when passed in
        ///             categories => {System.Guid[1]}
        ///                         [0]: {b97e989c-4174-6fcd-88ea-ff000002c0f4}
        ///
        ///             providers => {string[3]}
        ///                         [0]: "OpenAccessDataProvider"
        ///                         [1]: "NewsReleaseProvider"
        ///                         [2]: "TodaysHeadlinesProvider"
        ///
        ///     the breaking changed required the string produced to be changed to ISearchQuery
        ///     which has been converted to SearchQueryGroup.
        ///
        ///     for more info on the object definition, please refer to sitefinity definition.
        ///
        /// </summary>
        /// <param name="categories"> Categories to target </param>
        /// <param name="providers"> Providers to uses </param>
        /// <param name="terms"> Optional terms </param>
        /// <returns></returns>
        public static SearchQueryGroup BuildQuery(Guid[] categories, string[] providers, string terms = null)
        {
            SearchQueryGroup mainSearchQueryGroups = new SearchQueryGroup(QueryOperator.And);

            if (providers != null && providers.Any())
            {
                SearchQueryGroup searchProvideryGroup = new SearchQueryGroup(QueryOperator.Or);
                foreach (var pro in providers)
                {
                    SearchTerm searchTerm = new SearchTerm();
                    searchTerm.Field = "Provider";
                    searchTerm.Value = pro;

                    searchProvideryGroup.AddTerm(searchTerm);
                }
                mainSearchQueryGroups.AddGroup(searchProvideryGroup);
            }

            if (categories != null && categories.Any())
            {
                SearchQueryGroup searchCategoriesGroup = new SearchQueryGroup(QueryOperator.Or);
                foreach (var cat in categories)
                {
                    SearchTerm searchTerm = new SearchTerm();
                    searchTerm.Field = "CategoryIds";
                    searchTerm.Value = cat.ToString().Replace("-", "");

                    searchCategoriesGroup.AddTerm(searchTerm);
                }
                mainSearchQueryGroups.AddGroup(searchCategoriesGroup);
            }

            if (!string.IsNullOrWhiteSpace(terms))
            {
                SearchQueryGroup searchTermGroup = new SearchQueryGroup(QueryOperator.And);
                string[]         searchFields    = new[] { "Title", "Content", "Summary" };
                foreach (var field in searchFields)
                {
                    SearchTerm searchTerm = new SearchTerm();
                    searchTerm.Field = field;
                    //add wildcards to the query terms
                    searchTerm.Value = string.Join(" ", terms.Split(' ').Where(t => !string.IsNullOrWhiteSpace(t)).Select(term => term + "*").ToList());
                    searchTermGroup.AddTerm(searchTerm);
                }

                mainSearchQueryGroups.AddGroup(searchTermGroup);
            }

            if (categories == null && providers == null && string.IsNullOrEmpty(terms))
            {
                SearchQueryGroup searchAnyGroup = new SearchQueryGroup(QueryOperator.Or);
                // var searchFields = new[] { "Title", "Content" };
                var searchField = "Title";
                var sTerm       = "a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z*";

                foreach (var value in sTerm.Split(' '))
                {
                    //SearchTerm searchTerm = new SearchTerm();
                    //searchTerm.Field = "Content";
                    ////add wildcards to the query terms
                    //searchTerm.Value = value;
                    //searchAnyGroup.AddTerm(searchTerm);
                    var searchTerm = new SearchTerm
                    {
                        Field = searchField,
                        Value = value
                    };

                    searchAnyGroup.AddTerm(searchTerm);
                }
                mainSearchQueryGroups.AddGroup(searchAnyGroup);
            }

            return(mainSearchQueryGroups);
        }