Пример #1
0
        //================================================================================================ Public API

        public static string ConvertWikilinksToHtml(string articleText, Node parent)
        {
            if (string.IsNullOrEmpty(articleText))
            {
                return(articleText);
            }

            var index = 0;
            var regex = new Regex(WIKILINKPATTERN, RegexOptions.Multiline);

            while (true)
            {
                var match = regex.Match(articleText, index);
                if (!match.Success)
                {
                    break;
                }

                var wTitle = match.Groups["WikiTitle"].Value;
                var lTitle = match.Groups["LinkTitle"].Value;
                if (string.IsNullOrEmpty(lTitle))
                {
                    lTitle = wTitle;
                }

                Node targetArticle;

                using (new SystemAccount())
                {
                    var wikiWs       = parent == null ? null : Workspace.GetWorkspaceForNode(parent);
                    var articleQuery = ContentQuery.CreateQuery("+TypeIs:WikiArticle +DisplayName:@0",
                                                                new QuerySettings {
                        EnableAutofilters = FilterStatus.Disabled, Top = 1
                    },
                                                                wTitle);
                    if (wikiWs != null)
                    {
                        articleQuery.AddClause(string.Format("+InTree:\"{0}\"", wikiWs.Path));
                    }

                    targetArticle = articleQuery.Execute().Nodes.FirstOrDefault();
                }

                var templateValue = targetArticle != null?
                                    GetExistingLinkHtml(targetArticle.Path, lTitle) :
                                        GetAddLinkHtml(parent, wTitle, lTitle);

                articleText = articleText.Remove(match.Index, match.Length)
                              .Insert(match.Index, templateValue);

                index = match.Index + templateValue.Length;

                if (index >= articleText.Length)
                {
                    break;
                }
            }

            return(articleText);
        }
Пример #2
0
        private static object[] SearchContentQuery(string searchStr, string searchRoot, string contentTypes, bool simpleContent = false)
        {
            var queryStr = CreateContentQueryString(searchStr, searchRoot, contentTypes);
            var query    = ContentQuery.CreateQuery(queryStr, new QuerySettings
            {
                Sort = new List <SortInfo> {
                    new SortInfo("DisplayName")
                },
                EnableAutofilters    = FilterStatus.Disabled,
                EnableLifespanFilter = FilterStatus.Disabled
            });

            if (simpleContent)
            {
                return((from n in query.Execute().Nodes
                        where n != null
                        select new cs.SimpleServiceContent(n)).ToArray());
            }
            else
            {
                return((from n in query.Execute().Nodes
                        where n != null
                        select new cs.Content(n, true, false, false, false, 0, 0)).ToArray());
            }
        }
Пример #3
0
        private static Dictionary <string, int> GetAllPortalObjects(ADObjectType objType)
        {
            var typeText = string.Empty;

            if (objType == ADObjectType.AllContainers)
            {
                typeText = string.Concat(
                    "(TypeIs:", Common.GetNodeType(ADObjectType.OrgUnit).Name,
                    " OR TypeIs:", Common.GetNodeType(ADObjectType.Container).Name,
                    " OR TypeIs:", Common.GetNodeType(ADObjectType.Domain).Name, ")");
            }
            else
            {
                typeText = string.Concat("TypeIs:", Common.GetNodeType(objType).Name);
            }

            var queryText = string.Concat(typeText, " AND InTree:/Root/IMS");

            var settings = new QuerySettings {
                EnableAutofilters = false, EnableLifespanFilter = false
            };
            var query  = ContentQuery.CreateQuery(queryText, settings);
            var result = query.Execute();

            var guidIdList = (from node in result.Nodes
                              where !string.IsNullOrEmpty(node.GetProperty <string>("SyncGuid"))
                              select new { Guid = node.GetProperty <string>("SyncGuid").ToLower(), ID = node.Id });

            return(guidIdList.ToDictionary(a => a.Guid, a => a.ID));
        }
        private void RefreshIdentityResults()
        {
            ListEntries.Items.Clear();

            // do not allow empty search here
            if (SearchText.Text.Length == 0)
            {
                return;
            }

            var ws        = Workspace.GetWorkspaceForNode(ContextNode);
            var permQuery = ContentQuery.CreateQuery("InTree:@0", null, RepositoryStructure.ImsFolderPath);

            if (ws != null)
            {
                permQuery.AddClause(string.Format("InTree:\"{0}/{1}\"", ws.Path, Repository.LocalGroupsFolderName), LogicalOperator.Or);
            }

            switch (this.Isi.IdentityKind)
            {
            case SnIdentityKind.User:
                permQuery.AddClause("TypeIs:User");
                break;

            case SnIdentityKind.Group:
                permQuery.AddClause("TypeIs:Group");
                break;

            case SnIdentityKind.OrganizationalUnit:
                permQuery.AddClause("TypeIs:OrganizationalUnit");
                break;

            default:
                throw new InvalidOperationException("Unknown identity kind");
            }

            if (SearchText.Text.Length > 0)
            {
                var st = SearchText.Text;
                if (!st.StartsWith("*"))
                {
                    st = "*" + st;
                }
                if (!st.EndsWith("*"))
                {
                    st = st + "*";
                }

                permQuery.AddClause($"Name:{st}");
            }

            permQuery.Settings.EnableAutofilters = FilterStatus.Disabled;
            permQuery.Settings.Top  = 500;
            permQuery.Settings.Sort = new List <SortInfo> {
                new SortInfo("Name")
            };

            ListEntries.Items.AddRange((from node in permQuery.Execute().Nodes
                                        select GetListItem(node)).ToArray());
        }
Пример #5
0
        private ActionResult SearchLucene(string searchStr, string searchRoot, string contentTypes, bool simpleContent = false)
        {
            var queryStr = CreateLuceneQueryString(searchStr, searchRoot, contentTypes);
            var query    = ContentQuery.CreateQuery(queryStr, new QuerySettings
            {
                Sort = new List <SortInfo> {
                    new SortInfo {
                        FieldName = "DisplayName"
                    }
                },
                EnableAutofilters    = FilterStatus.Disabled,
                EnableLifespanFilter = FilterStatus.Disabled
            });

            if (simpleContent)
            {
                return(Json((from n in query.Execute().Nodes
                             where n != null
                             select new SimpleServiceContent(n)).ToArray(),
                            JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json((from n in query.Execute().Nodes
                             where n != null
                             select new Content(n, true, false, false, false, 0, 0)).ToArray(),
                            JsonRequestBehavior.AllowGet));
            }
        }
Пример #6
0
        private static void ExportByFilterText(ExportContext context, string fsRoot, string queryText)
        {
            var query = ContentQuery.CreateQuery(queryText);

            query.AddClause(@"InTree:""" + context.SourceFsPath + @"""", LogicalOperator.And);
            var result   = query.Execute();
            var maxCount = result.Count;
            var count    = 0;

            foreach (var nodeId in result.Identifiers)
            {
                try
                {
                    var content  = Content.Load(nodeId);
                    var relIndex = RepositoryPath.GetParentPath(context.SourceFsPath).Length + 1;
                    var relPath  = content.Path.Substring(relIndex).Replace("/", "\\");
                    var fsPath   = Path.Combine(fsRoot, relPath);
                    var fsDir    = Path.GetDirectoryName(fsPath);
                    var dirInfo  = new DirectoryInfo(fsDir);
                    if (!dirInfo.Exists)
                    {
                        Directory.CreateDirectory(fsDir);
                    }

                    ExportContent(content, context, fsDir, string.Concat(++count, "/", maxCount, ": ", Path.GetDirectoryName(relPath), "\\"));
                }
                catch (Exception ex)
                {
                    LogException(ex);
                }
            }
        }
Пример #7
0
        public void ContentQuery_AddClause_Comments_01()
        {
            var queryText1 = @"+TypeIs:WebContentDemo // comment1
/*+TypeIs:Article*/ .SKIP:5
+InTree:""/Root/Sites/Default_Site"" .SORT:abc// comment2
.COUNTONLY
//comment3 .SORT:def 
+CreationDate:>'2010.10.10' .TOP:3
/*comment4";

            var queryText1Expected = @"+(+TypeIs:WebContentDemo // comment1
/*+TypeIs:Article*/ 
+InTree:""/Root/Sites/Default_Site"" // comment2
//comment3 .SORT:def 
+CreationDate:>'2010.10.10' 
/*comment4*/) +(-TypeIs:Car) .SKIP:5 .SORT:abc .COUNTONLY
 .TOP:3";

            //the query init corrects the unclosed multiline comment at the end!
            var q1 = ContentQuery.CreateQuery(queryText1);

            //the AddClause moves all the relevant keywords to the end, skipping the comments
            q1.AddClause("-TypeIs:Car");

            Assert.AreEqual(queryText1Expected, q1.Text, "Query #1: texts does not match");
        }
Пример #8
0
        private void ExportByFilterText(Content root, ExportContext context, string fsRoot, string queryText)
        {
            var query    = ContentQuery.CreateQuery(queryText);
            var result   = query.Execute();
            var maxCount = result.Count;
            var count    = 0;

            foreach (var nodeId in result.Identifiers)
            {
                string  fsPath  = null;
                Content content = null;

                try
                {
                    content = Content.Load(nodeId);
                    var relPath = content.Path.Remove(0, 1).Replace("/", "\\");
                    fsPath = Path.Combine(fsRoot, relPath);
                    var fsDir   = Path.GetDirectoryName(fsPath);
                    var dirInfo = new DirectoryInfo(fsDir);
                    if (!dirInfo.Exists)
                    {
                        Directory.CreateDirectory(fsDir);
                    }

                    ExportContent(content, context, fsDir, String.Concat(++count, "/", maxCount, ": ", relPath, "\\"));
                }
                catch (Exception ex)
                {
                    PrintException(ex, content == null ? fsPath : content.Path);
                }
            }
        }
Пример #9
0
        // returns synchronized portal nodes
        private IEnumerable <Node> GetAllPortalObjects(ADObjectType objType, SyncTree syncTree)
        {
            var typeText = string.Empty;

            if (objType == ADObjectType.AllContainers)
            {
                typeText = string.Concat(
                    "(TypeIs:", Common.GetNodeType(ADObjectType.OrgUnit).Name,
                    " OR TypeIs:", Common.GetNodeType(ADObjectType.Container).Name,
                    " OR TypeIs:", Common.GetNodeType(ADObjectType.Domain).Name, ")");
            }
            else
            {
                typeText = string.Concat("TypeIs:", Common.GetNodeType(objType).Name);
            }

            var startPath = string.Concat('"', syncTree.PortalPath.TrimEnd(new char[] { '/' }), '"');
            var queryText = string.Concat(typeText, " AND InTree:", startPath);

            var settings = new QuerySettings {
                EnableAutofilters = false, EnableLifespanFilter = false
            };
            var query  = ContentQuery.CreateQuery(queryText, settings);
            var result = query.Execute();

            return(result.Nodes);
        }
Пример #10
0
        /* ====================================================================================================== Methods */
        private void BuildList()
        {
            // store the selected value for using it after the list is repopulated
            // (storing the index is not correct, we have to use the value)
            var selVal = this.SelectedIndex > 0 ? this.SelectedValue : null;

            // we have to clear the itemlist here to
            // refresh the item collection if changed
            this.Items.Clear();

            if (this.DropdownOptions.CommonType == DropDownCommonType.ContentTypeDropdown)
            {
                // special use-case, content type list is defined in webconfig
                var contentTypeNodes = GetWebContentTypeList();
                foreach (var ctContent in contentTypeNodes.Select(Content.Create))
                {
                    this.Items.Add(new ListItem(ctContent.DisplayName, ctContent.Name));
                }
            }

            if (!string.IsNullOrEmpty(this.DropdownOptions.Query))
            {
                // the list is built up from a query
                var sortinfo = new List <SortInfo> {
                    new SortInfo("Name")
                };
                var settings = new QuerySettings {
                    EnableAutofilters = FilterStatus.Disabled, Sort = sortinfo
                };
                var query  = ContentQuery.CreateQuery(this.DropdownOptions.Query, settings);
                var result = query.Execute();
                if (result.Count == 0)
                {
                    this.Items.Add(new ListItem(SenseNetResourceManager.Current.GetString("PortletFramework", "DropDown-NoItems"), string.Empty));
                    return;
                }
                this.Items.Add(new ListItem(SenseNetResourceManager.Current.GetString("PortletFramework", "DropDown-SelectOne"), string.Empty));
                foreach (var content in result.Nodes.Select(Content.Create))
                {
                    this.Items.Add(new ListItem(content.DisplayName, content.Name));
                }
            }

            // re-select the original selected value if needed
            if (selVal != null)
            {
                var index = 0;
                foreach (ListItem item in this.Items)
                {
                    if (selVal.CompareTo(item.Value) == 0)
                    {
                        this.SelectedIndex = index;
                        break;
                    }

                    index++;
                }
            }
        }
Пример #11
0
        /* ========================================================================= TOOLS */

        protected static ContentQuery CreateSafeContentQuery(string qtext)
        {
            var cquery    = ContentQuery.CreateQuery(qtext, QuerySettings.AdminSettings);
            var cqueryAcc = new ObjectAccessor(cquery);

            cqueryAcc.SetFieldOrProperty("IsSafe", true);
            return(cquery);
        }
Пример #12
0
        protected static ContentQuery CreateSafeContentQuery(string qtext, QuerySettings settings = null)
        {
            var cquery    = ContentQuery.CreateQuery(qtext, settings ?? QuerySettings.AdminSettings);
            var cqueryAcc = new PrivateObject(cquery);

            cqueryAcc.SetFieldOrProperty("IsSafe", true);
            return(cquery);
        }
Пример #13
0
        private static void PreloadControls()
        {
            try
            {
                QueryResult controlResult;
                var         cc = 0;

                var timer = new Stopwatch();
                timer.Start();

                using (new SystemAccount())
                {
                    var query = ContentQuery.CreateQuery("+Name:'*.ascx' -InTree:'/Root/Global/celltemplates' -Path:'/Root/Global/renderers/MyDataboundView.ascx' .SORT:Path",
                                                         new QuerySettings {
                        EnableAutofilters = false
                    });
                    if (!string.IsNullOrEmpty(Repository.WarmupControlQueryFilter))
                    {
                        query.AddClause(Repository.WarmupControlQueryFilter);
                    }

                    controlResult = query.Execute();

                    foreach (var controlId in controlResult.Identifiers)
                    {
                        var head = NodeHead.Get(controlId);
                        try
                        {
                            if (head != null)
                            {
                                var pct = BuildManager.GetCompiledType(head.Path);

                                //if (pct != null)
                                //    Trace.WriteLine(">>>>Precompiled control: " + pct.FullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.WriteException(new Exception("Error during control load: " + (head == null ? controlId.ToString() : head.Path), ex));
                            //Trace.WriteLine(">>>>Precompiled error during control load: " + (head == null ? controlId.ToString() : head.Path) + " ERROR: " + ex);
                        }

                        cc++;
                    }
                }

                timer.Stop();

                Logger.WriteInformation(string.Format("***** Control preload time: {0} ******* Count: {1} ({2})", timer.Elapsed, cc, controlResult.Count));
                //Trace.WriteLine(string.Format(">>>>Precompiled preload time: {0} ******* Count: {1} ({2})", timer.Elapsed, cc, controlResult.Count));
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
            }
        }
Пример #14
0
        /* ====================================================================================================== Methods */
        protected override void OnInit(EventArgs e)
        {
            if (ShowExecutionTime)
            {
                Timer.Start();
            }

            UITools.AddScript("$skin/scripts/sn/SN.KPIViewDropDown.js");

            // setup views list
            // the source list is built up from a query
            var sortinfo = new List <SortInfo>()
            {
                new SortInfo()
                {
                    FieldName = "Name", Reverse = false
                }
            };
            var settings = new QuerySettings()
            {
                EnableAutofilters = false, Sort = sortinfo
            };
            var query    = ContentQuery.CreateQuery(string.Format("InFolder:\"{0}\"", kpiSourcePath), settings);
            var result   = query.Execute();
            var viewList = new StringBuilder();

            // collect kpi views from under sources
            foreach (Node node in result.Nodes)
            {
                var c = SenseNet.ContentRepository.Content.Create(node);
                c.ChildrenQuerySettings = new QuerySettings()
                {
                    EnableAutofilters = false, Sort = sortinfo
                };
                foreach (var child in c.Children)
                {
                    viewList.Append(string.Concat("{ sourceName: '", node.Name, "', viewName: '", child.Name, "'},"));
                }
            }

            var viewListStr = string.Concat('[', viewList.ToString().TrimEnd(','), ']');


            string script = string.Format("SN.KPIViewDropDown.init('{0}','{1}',{2});", masterDropdownCss, slaveDropdownCss, viewListStr);

            UITools.RegisterStartupScript("KPIViewDropDownScript", script, this.Page);

            if (ShowExecutionTime)
            {
                Timer.Stop();
            }

            base.OnInit(e);
        }
Пример #15
0
        private static void PreloadControls()
        {
            try
            {
                QueryResult controlResult;
                var         cc = 0;

                var timer = new Stopwatch();
                timer.Start();

                using (new SystemAccount())
                {
                    var query = ContentQuery.CreateQuery(SafeQueries.PreloadControls);
                    if (!string.IsNullOrEmpty(Repository.WarmupControlQueryFilter))
                    {
                        query.AddClause(Repository.WarmupControlQueryFilter);
                    }

                    controlResult = query.Execute();

                    foreach (var controlId in controlResult.Identifiers)
                    {
                        var head = NodeHead.Get(controlId);
                        try
                        {
                            if (head != null)
                            {
                                var pct = BuildManager.GetCompiledType(head.Path);

                                //if (pct != null)
                                //    Trace.WriteLine(">>>>Precompiled control: " + pct.FullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.WriteException(new Exception("Error during control load: " + (head == null ? controlId.ToString() : head.Path), ex));
                            //Trace.WriteLine(">>>>Precompiled error during control load: " + (head == null ? controlId.ToString() : head.Path) + " ERROR: " + ex);
                        }

                        cc++;
                    }
                }

                timer.Stop();

                Logger.WriteInformation(Logger.EventId.NotDefined, string.Format("***** Control preload time: {0} ******* Count: {1} ({2})", timer.Elapsed, cc, controlResult.Count));
                //Trace.WriteLine(string.Format(">>>>Precompiled preload time: {0} ******* Count: {1} ({2})", timer.Elapsed, cc, controlResult.Count));
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
            }
        }
Пример #16
0
 private ContentQuery ParseQuery(string queryText)
 {
     if (queryText.StartsWith("<"))
     {
         SnLog.WriteWarning(
             "ReferenceFieldSetting.Query cannot be initialized with a NodeQuery source xml. Use content query text instead.",
             properties: new Dictionary <string, object> {
             { "InvalidFilter", queryText }
         });
         return(null);
     }
     return(ContentQuery.CreateQuery(queryText));
 }
Пример #17
0
        private void DeleteInstances(string[] contentTypeNames)
        {
            var result = ContentQuery.CreateQuery(
                ContentRepository.SafeQueries.TypeIs, QuerySettings.AdminSettings, new object[] { contentTypeNames })
                         .Execute();

            Logger.LogMessage($"Deleting {result.Count} content by matching content type{(contentTypeNames.Length > 1 ? "s" : "")}.");

            foreach (var node in result.Nodes)
            {
                Logger.LogMessage($"    {node.Path}");
                node.ForceDelete();
            }
        }
Пример #18
0
        private void DeleteInstances(string contentTypeName)
        {
            Logger.LogMessage($"Deleting content by content-type: {contentTypeName}");

            var nodes = ContentQuery.CreateQuery(
                ContentRepository.SafeQueries.TypeIs, QuerySettings.AdminSettings, contentTypeName)
                        .Execute().Nodes;

            foreach (var node in nodes)
            {
                Logger.LogMessage($"    {node.Path}");
                node.ForceDelete();
            }
        }
Пример #19
0
        public Content Search(string searchExpression)
        {
            var searchString = System.Web.HttpUtility.UrlDecode(searchExpression);

            var query = ContentQuery.CreateQuery(searchString, new QuerySettings {
                EnableAutofilters = FilterStatus.Disabled, EnableLifespanFilter = FilterStatus.Disabled
            });

            query.AddClause(string.Format("Name:{0}*", searchString.Replace("\"", "").Replace("*", "")), ChainOperator.Or);

            var result = query.Execute().Nodes;
            var feed   = result.Select(node => new Content(node, false, false, false, false, 0, 0)).ToArray();

            return(CreateFakeRootForFeed(feed));
        }
Пример #20
0
        public void QueryIsSafe_AddClause()
        {
            var cq = ContentQuery.CreateQuery(TestSafeQueries.SafeQuery2, null, "value1");

            Assert.AreEqual("+Field2:value1", cq.Text);
            Assert.IsTrue(cq.IsSafe);

            cq.AddClause(TestSafeQueries.SafeQuery3, ChainOperator.And, "value2", "value3");
            Assert.AreEqual("+(+Field2:value1) +(+Field3:value2 +Field4:value3)", cq.Text);
            Assert.IsTrue(cq.IsSafe);

            cq.AddClause("+Field1:Value1");
            Assert.AreEqual("+(+(+Field2:value1) +(+Field3:value2 +Field4:value3)) +(+Field1:Value1)", cq.Text);
            Assert.IsTrue(cq.IsSafe);
        }
Пример #21
0
        private static void PreloadControls()
        {
            try
            {
                QueryResult controlResult;
                var         cc = 0;

                var timer = new Stopwatch();
                timer.Start();

                using (new SystemAccount())
                {
                    var query = ContentQuery.CreateQuery(SafeQueries.PreloadControls);
                    if (!string.IsNullOrEmpty(SystemStart.WarmupControlQueryFilter))
                    {
                        query.AddClause(SystemStart.WarmupControlQueryFilter);
                    }

                    controlResult = query.Execute();

                    foreach (var controlId in controlResult.Identifiers)
                    {
                        var head = NodeHead.Get(controlId);
                        try
                        {
                            if (head != null)
                            {
                                BuildManager.GetCompiledType(head.Path);
                            }
                        }
                        catch (Exception ex)
                        {
                            SnLog.WriteException(ex, "Error during control load: " + (head == null ? controlId.ToString() : head.Path));
                        }

                        cc++;
                    }
                }

                timer.Stop();

                SnLog.WriteInformation($"***** Control preload time: {timer.Elapsed} ******* Count: {cc} ({controlResult.Count})");
            }
            catch (Exception ex)
            {
                SnLog.WriteException(ex);
            }
        }
Пример #22
0
        private ContentQuery GetQuery()
        {
            var queryString = GetQueryString();

            if (string.IsNullOrEmpty(queryString))
            {
                return(null);
            }

            try
            {
                var query = ContentQuery.CreateQuery(queryString);

                if (EnableAutofilters != FilterStatus.Default)
                {
                    query.Settings.EnableAutofilters = EnableAutofilters;
                }
                if (EnableLifespanFilter != FilterStatus.Default)
                {
                    query.Settings.EnableLifespanFilter = EnableLifespanFilter;
                }

                if (this.CQPParamsExist)
                {
                    query.Settings.Skip = CQPStartIndex + this.SkipFirst;
                    query.Settings.Top  = NodeQuery.UnlimitedPageSize - 1;
                    //CQPPageSize;
                }
                else if (this.SkipFirst > 0)
                {
                    query.Settings.Skip = this.SkipFirst;
                    query.Settings.Top  = NodeQuery.UnlimitedPageSize - 1;
                }

                if (Top > 0)
                {
                    query.Settings.Top = Top;
                }

                return(query);
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
                return(null);
            }
        }
Пример #23
0
        /// <summary>
        /// Returns the ID-s of Nodes, that contains the tag given as parameter.
        /// </summary>
        /// <param name="tag">Searched tag as String.</param>
        /// <param name="searchPathArray">Paths to search in.</param>
        /// <param name="contentTypeArray">Types to search.</param>
        /// <param name="queryFilter"></param>
        /// <returns>Node Id list.</returns>
        public static List <int> GetNodeIds(string tag, string[] searchPathArray, string[] contentTypeArray, string queryFilter = "")
        {
            if (string.IsNullOrEmpty(tag))
            {
                return(new List <int>());
            }

            tag = tag.ToLower();
            var pathList = string.Empty;
            var typeList = string.Empty;

            if (searchPathArray.Any() && contentTypeArray.Any())
            {
                pathList = "+Path:(";
                foreach (var path in searchPathArray)
                {
                    pathList = string.Concat(pathList, path, "* ");
                }
                pathList = string.Concat(pathList, ")");

                typeList = "+Type:(";
                foreach (var path in contentTypeArray)
                {
                    typeList = string.Concat(typeList, path, " ");
                }
                typeList = string.Concat(typeList, ")");
            }

            if (tag == string.Empty)
            {
                return(new List <int>());
            }

            ContentQuery query;

            if (!string.IsNullOrEmpty(pathList) && !string.IsNullOrEmpty(typeList))
            {
                query = ContentQuery.CreateQuery($"+Tags:\"{tag.Trim()}\" {pathList} {typeList} {queryFilter}");
            }
            else
            {
                query = ContentQuery.CreateQuery($"+Tags:\"{tag.Trim()}\" {queryFilter}");
            }

            return(query.Execute().Identifiers.ToList());
        }
Пример #24
0
        internal ContentTypeDependencies GetDependencies(string[] rootTypeNames)
        {
            var typeNames          = new List <string>();
            var inheritedTypeNames = new List <string>();

            foreach (var rootTypeName in rootTypeNames)
            {
                var typeSubtreeQuery = ContentQuery.CreateQuery(ContentRepository.SafeQueries.InTree,
                                                                QuerySettings.AdminSettings, ContentType.GetByName(rootTypeName).Path);
                var typeSubtreeResult = typeSubtreeQuery.Execute();
                typeNames.AddRange(typeSubtreeResult.Nodes.Select(n => n.Name));
                inheritedTypeNames.AddRange(typeNames.Except(rootTypeNames));
            }

            var relatedFolders = GetRelatedFolders(typeNames);

            var contentInstancesCount = ContentQuery.CreateQuery(
                ContentRepository.SafeQueries.TypeIsCountOnly,
                QuerySettings.AdminSettings, new object[] { rootTypeNames }).Execute().Count
                                        -
                                        relatedFolders.ContentTemplates.Select(p => ContentQuery.Query(
                                                                                   ContentRepository.SafeQueries.InTreeAndTypeIsCountOnly,
                                                                                   QuerySettings.AdminSettings, p, typeNames).Count).Sum();

            var PDP    = Providers.Instance.DataProvider.GetExtension <IPackagingDataProviderExtension>();
            var result = new ContentTypeDependencies
            {
                ContentTypeNames = rootTypeNames,
                // +InTree:[currentContentType.Path]
                InheritedTypeNames = inheritedTypeNames.ToArray(),
                // +TypeIs:[name]
                InstanceCount = contentInstancesCount,
                // ContentType/AllowedChildTypes: "Folder,File"
                PermittingContentTypes = GetContentTypesWhereTheyAreAllowed(typeNames),
                // ContentType/Fields/Field/Configuration/AllowedTypes/Type: "Folder"
                PermittingFieldSettings = GetContentTypesWhereTheyAreAllowedInReferenceField(typeNames),
                // ContentMetaData/Fields/AllowedChildTypes: "Folder File"
                PermittingContentCollection = PDP.GetContentPathsWhereTheyAreAllowedChildren(typeNames),

                Applications     = relatedFolders.Applications,
                ContentTemplates = relatedFolders.ContentTemplates,
                ContentViews     = relatedFolders.ContentViews
            };

            return(result);
        }
Пример #25
0
        public void Indexing_ExecutingUnprocessedDoesNotDuplicate()
        {
            var contentName = "Indexing_ExecutingUnprocessedDoesNotDuplicate";
            var query       = ContentQuery.CreateQuery(".COUNTONLY Name:" + contentName, new QuerySettings {
                EnableAutofilters = FilterStatus.Disabled, EnableLifespanFilter = FilterStatus.Disabled
            });

            var count = query.Execute().Count;

            if (count > 0)
            {
                Assert.Inconclusive();
            }

            var lastActivityId = MissingActivityHandler.MaxActivityId;

            var content = Content.CreateNew("Car", TestRoot, contentName);

            content.Save();

            content.ContentHandler.Index++;
            content.Save();

            content.ContentHandler.Index++;
            content.Save();

            count = query.Execute().Count;
            Assert.IsTrue(count == 1, String.Format("Before executing unprocessed activities found {0}, expected: 1.", count));

            MissingActivityHandler.MaxActivityId -= 3;

            // reset indexing history, so that executeunprocessedactivities will actually execute adddocument as it should be tested
            ResetIndexingHistory();

            LuceneManager.ExecuteUnprocessedIndexingActivities(null, false);    // call it with false, so last persisted maxactivityid will not overwrite the one we set above

            count = query.Execute().Count;
            Assert.IsTrue(count == 1, String.Format("After executing unprocessed activities #1 found {0}, expected: 1.", count));

            count = ContentQuery.Query(".COUNTONLY +Index:2 +Name:" + contentName, new QuerySettings {
                EnableAutofilters = FilterStatus.Disabled, EnableLifespanFilter = FilterStatus.Disabled
            }).Count;
            Assert.IsTrue(count == 1, String.Format("After executing unprocessed activities #2 found {0}, expected: 1.", count));
        }
Пример #26
0
        public override QueryResult GetChildren(string text, QuerySettings settings, bool getAllChildren)
        {
            if (!string.IsNullOrEmpty(Query) || !string.IsNullOrEmpty(text))
            {
                var cq = ContentQuery.CreateQuery(Query);
                if (EnableAutofilters != FilterStatus.Default)
                {
                    cq.Settings.EnableAutofilters = (EnableAutofilters == FilterStatus.Enabled);
                }
                if (EnableLifespanFilter != FilterStatus.Default)
                {
                    cq.Settings.EnableLifespanFilter = (EnableLifespanFilter == FilterStatus.Enabled);
                }

                if (settings != null)
                {
                    cq.Settings = settings;
                }

                if ((cq.IsContentQuery || string.IsNullOrEmpty(this.Query)) && !string.IsNullOrEmpty(text))
                {
                    cq.AddClause(text);
                }

                if (cq.IsContentQuery)
                {
                    //add SmartFolder's own children (with an Or clause)
                    var excapedPath = this.Path.Replace("(", "\\(").Replace(")", "\\)");
                    cq.AddClause((getAllChildren ?
                                  string.Format("InTree:\"{0}\"", excapedPath) :
                                  string.Format("InFolder:\"{0}\"", excapedPath)), ChainOperator.Or);
                }
                else
                {
                    cq.AddClause(new IntExpression(IntAttribute.ParentId, ValueOperator.Equal, this.Id), ChainOperator.Or);
                }

                var result = cq.Execute();
                return(result);
            }
            return(QueryResult.Empty);
        }
Пример #27
0
        public static void RetryAllFailedActions()
        {
            using (new SystemAccount())
            {
                var qs = new QuerySettings {
                    EnableLifespanFilter = false, EnableAutofilters = false
                };
                var queryText = string.Format("TypeIs:File AND InTree:\"{0}\" .SORT:CreationDate", _actionPath);
                var q         = ContentQuery.CreateQuery(queryText, qs);
                var result    = q.Execute();

                foreach (Node node in result.Nodes)
                {
                    var failFile = node as File;
                    if (failFile == null)
                    {
                        continue;
                    }

                    // restore ADAction object
                    var stream     = failFile.Binary.GetStream();
                    var serializer = new XmlSerializer(typeof(ADAction));
                    var adAction   = serializer.Deserialize(stream) as ADAction;
                    if (adAction == null)
                    {
                        continue;
                    }

                    try
                    {
                        adAction.Execute();
                        failFile.Delete();
                    }
                    catch (Exception ex) //TODO: catch block
                    {
                        // re-execution failed again, save exception
                        adAction.LastException = GetExceptionMsg(ex);
                        SaveAction(adAction, failFile);
                    }
                }
            }
        }
Пример #28
0
        //===================================================================================== Method

        protected override IEnumerable <Node> GetChildren()
        {
            if (!string.IsNullOrEmpty(Query))
            {
                var cq = ContentQuery.CreateQuery(Query);

                if (EnableAutofilters != FilterStatus.Default)
                {
                    cq.Settings.EnableAutofilters = (EnableAutofilters == FilterStatus.Enabled);
                }
                if (EnableLifespanFilter != FilterStatus.Default)
                {
                    cq.Settings.EnableLifespanFilter = (EnableLifespanFilter == FilterStatus.Enabled);
                }

                var result = cq.Execute();
                return(result.Nodes);
            }
            return(base.GetChildren());
        }
Пример #29
0
        protected override NodeQueryResult QueryChildrenFromLucene(int thisId)
        {
            if (string.IsNullOrEmpty(_childrenFilter))
            {
                return(base.QueryChildrenFromLucene(thisId));
            }
            else
            {
                //We need to apply a query filter. Execute a content
                //query and create a node query result on-the-fly.
                var query = ContentQuery.CreateQuery("+ParentId:@0", null, thisId);

                if (!string.IsNullOrEmpty(_childrenFilter))
                {
                    query.AddClause(_childrenFilter);
                }

                return(new NodeQueryResult(query.ExecuteToIds(ExecutionHint.ForceIndexedEngine)));
            }
        }
Пример #30
0
        public static void RetryAllFailedActions()
        {
            using (new SystemAccount())
            {
                var qs = new QuerySettings {
                    EnableLifespanFilter = FilterStatus.Disabled, EnableAutofilters = FilterStatus.Disabled
                };
                var q      = ContentQuery.CreateQuery(SafeQueries.FilesInTree, qs, _actionPath);
                var result = q.Execute();

                foreach (Node node in result.Nodes)
                {
                    var failFile = node as File;
                    if (failFile == null)
                    {
                        continue;
                    }

                    // restore ADAction object
                    var stream     = failFile.Binary.GetStream();
                    var serializer = new XmlSerializer(typeof(ADAction));
                    var adAction   = serializer.Deserialize(stream) as ADAction;
                    if (adAction == null)
                    {
                        continue;
                    }

                    try
                    {
                        adAction.Execute();
                        failFile.Delete(true);
                    }
                    catch (Exception ex) //TODO: catch block
                    {
                        // re-execution failed again, save exception
                        adAction.LastException = GetExceptionMsg(ex);
                        SaveAction(adAction, failFile);
                    }
                }
            }
        }