Exemplo n.º 1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        protected IFileContainer GetFileContainer(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
        {
            string currentWorkingDirectory = templateParsingState.GetCWD(me);
            XmlAttribute filenameAttribute = me.Attributes["filename"];

            if (null == filenameAttribute)
            {
                me.ParentNode.ParentNode.InsertBefore(
                    templateParsingState.GenerateWarningNode("filename not specified: " + me.OuterXml),
                    me.ParentNode);

                return null;
            }

            string filename = templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.FileSystemResolver.GetAbsolutePath(
                currentWorkingDirectory,
                filenameAttribute.Value);

            try
            {
                return templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.FileSystemResolver.ResolveFile(filename);
            }
            catch (FileNotFoundException fnfe)
            {
                log.Warn("Attempted to get permission for a non-existant file: " + filenameAttribute.Value, fnfe);

                me.ParentNode.ParentNode.InsertBefore(
                    templateParsingState.GenerateWarningNode("File doesn't exist: " + me.OuterXml),
                    me.ParentNode);

                return null;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
        {
            if (templateParsingState.WebConnection.Session.User.Id == templateParsingState.FileHandlerFactoryLocator.UserFactory.AnonymousUser.Id)
                return false;

            return templateParsingState.WebConnection.Session.User.Local;
        }
Exemplo n.º 3
0
        /// <summary>
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState templateParsingState, XmlNode me)
        {
            IFileContainer fileContainer = GetFileContainer(templateParsingState, me);
            string action = me.Attributes["action"].Value;

            return fileContainer.FileConfigurationManager.Actions.ContainsKey(action);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="fileContainer"></param>
        /// <param name="namedPermission"></param>
        /// <returns></returns>
        protected override bool DetermineCondition(ITemplateParsingState templateParsingState, IFileContainer fileContainer, string namedPermission)
        {
            foreach (Dictionary<string, object> supportedNamedPermission in fileContainer.FileConfigurationManager.ViewComponents)
                if (supportedNamedPermission["NamedPermission"].ToString() == namedPermission)
                    return true;

            return false;
        }
Exemplo n.º 5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
        {
            IFileContainer fileContainer = GetFileContainer(templateParsingState, me);

            if (null == fileContainer)
                return false;

            return MinimumPermission <= fileContainer.LoadPermission(templateParsingState.WebConnection.Session.User.Id);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="fileContainer"></param>
        /// <param name="namedPermission"></param>
        /// <returns></returns>
        protected override bool DetermineCondition(ITemplateParsingState templateParsingState, IFileContainer fileContainer, string namedPermission)
        {
            // Always return true for administrators
            if (templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.UserManagerHandler.IsUserInGroup(
                templateParsingState.WebConnection.Session.User.Id,
                templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.UserFactory.Administrators.Id))
                return true;

            return fileContainer.HasNamedPermissions(templateParsingState.WebConnection.Session.User.Id, namedPermission);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="TemplateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState TemplateParsingState, System.Xml.XmlNode me)
        {
            XmlAttribute valueAttribute = me.Attributes["value"];
            if (null != valueAttribute)
                if (null != valueAttribute.Value)
                    if (valueAttribute.Value.Length > 0)
                        return true;

            return false;
        }
Exemplo n.º 8
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState templateParsingState, XmlNode me)
        {
            XmlAttribute l = me.Attributes["l"];
            XmlAttribute r = me.Attributes["r"];

            if ((null == l) || (null == r))
                return false;

            return l.Value.Equals(r.Value);
        }
        private void HandleConditional(
            ITemplateParsingState templateParsingState,
            IDictionary<string, object> getParameters,
            XmlNode conditionalNode)
        {
            Dictionary<string, ITemplateConditionHandler> templateConditionHandlers = templateParsingState.TemplateHandlerLocator.TemplateConditionHandlers;

            XmlNode current = conditionalNode.FirstChild;
            bool conditionMet = false;

            // Note:  Looping continues after the condition is met to ensure that all nodes are in the correct namespace
            while (null != current)
            {
                // Make sure the namespace is proper
                if (current.NamespaceURI != templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace)
                    conditionalNode.ParentNode.InsertBefore(
                        templateParsingState.GenerateWarningNode("All nodes within an <if> must be of " + templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace + " namespace: " + current.OuterXml),
                        conditionalNode);

                else
                {
                    // Make sure the node is supported
                    ITemplateConditionHandler templateConditionHandler;
                    if (!templateConditionHandlers.TryGetValue(current.LocalName, out templateConditionHandler))
                        conditionalNode.ParentNode.InsertBefore(
                            templateParsingState.GenerateWarningNode("There is no condition handler for " + current.LocalName + ": " + current.OuterXml),
                            conditionalNode);

                    if (!conditionMet)
                        try
                        {
                            if (templateConditionHandler.IsConditionMet(templateParsingState, current))
                            {
                                conditionMet = true;

                                foreach (XmlNode xmlNode in Enumerable<XmlNode>.FastCopy(Enumerable<XmlNode>.Filter(current.ChildNodes)))
                                    conditionalNode.ParentNode.InsertBefore(xmlNode, conditionalNode);
                            }
                        }
                        catch (Exception e)
                        {
                            log.Error("Unhandled error for condition tag " + current.LocalName + ": " + current.OuterXml, e);

                            conditionalNode.ParentNode.InsertBefore(
                                templateParsingState.GenerateWarningNode("An unhandled error occured processing: " + current.OuterXml),
                                conditionalNode);
                        }
                }

                current = current.NextSibling;
            }

            conditionalNode.ParentNode.RemoveChild(conditionalNode);
        }
Exemplo n.º 10
0
        void PostProcessElement(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
        {
            if (element.LocalName == "trim" && element.NamespaceURI == templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace)
            {
                XmlAttribute maxtagsAttribute = element.Attributes["maxtags"];
                XmlAttribute maxlengthAttribute = element.Attributes["maxlength"];

                ulong maxtags = ulong.MaxValue;
                if (null != maxtagsAttribute)
                    ulong.TryParse(maxtagsAttribute.Value, out maxtags);

                ulong maxlength = ulong.MaxValue;
                if (null != maxlengthAttribute)
                    ulong.TryParse(maxlengthAttribute.Value, out maxlength);

                ulong numTags = 0;
                ulong length = 0;

                bool trimming = false;
                foreach (XmlNode xmlNode in Enumerable<XmlNode>.FastCopy(XmlHelper.IterateAll<XmlNode>(element)))
                {
                    if (trimming)
                        xmlNode.ParentNode.RemoveChild(xmlNode);
                    else if (!(xmlNode is XmlComment))
                    {
                        numTags++;

                        if (numTags > maxtags)
                        {
                            xmlNode.ParentNode.RemoveChild(xmlNode);
                            trimming = true;
                        }
                        else if (xmlNode is XmlText)
                        {
                            XmlText xmlText = (XmlText)xmlNode;
                            ulong textLength = Convert.ToUInt64(xmlText.InnerText.Length);

                            if (length + textLength > maxlength)
                            {
                                xmlText.InnerText = xmlText.InnerText.Substring(0, Convert.ToInt32(maxlength - length));
                                trimming = true;
                            }
                            else
                                length += textLength;
                        }
                    }
                }

                templateParsingState.ReplaceNodes(element, element.ChildNodes);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateParsingState"></param>
        /// <param name="me"></param>
        /// <returns></returns>
        public bool IsConditionMet(ITemplateParsingState templateParsingState, XmlNode me)
        {
            IFileContainer fileContainer = GetFileContainer(templateParsingState, me);

            if (null == fileContainer)
                return false;

            XmlAttribute namedPermissionAttribute = me.Attributes["namedpermission"];

            if (null == namedPermissionAttribute)
            {
                me.ParentNode.ParentNode.InsertBefore(
                    templateParsingState.GenerateWarningNode("namedpermission not specified: " + me.OuterXml),
                    me.ParentNode);

                return false;
            }

            return DetermineCondition(templateParsingState, fileContainer, namedPermissionAttribute.Value);
        }
Exemplo n.º 12
0
        IEnumerable<XmlNode> DoParseTag(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
        {
            // Generate the xml
            StringBuilder xml = new StringBuilder(
                string.Format("<html xmlns=\"{0}\"><head></head><body>", templateParsingState.TemplateDocument.FirstChild.NamespaceURI),
                element.OuterXml.Length);

            foreach (XmlNode xmlNode in element.ChildNodes)
                if (xmlNode is XmlText)
                    xml.Append(((XmlText)xmlNode).InnerText);
                else
                    xml.Append(xmlNode.OuterXml);

            xml.Append("</body></html>");

            XmlDocument xmlDocument;
            try
            {
                xmlDocument = templateParsingState.LoadXmlDocument(
                    xml.ToString(),
                    templateParsingState.GetXmlParseMode(element),
                    element.OuterXml);
            }
            catch (WebResultsOverrideException wroe)
            {
                templateParsingState.ReplaceNodes(
                    element,
                    templateParsingState.GenerateWarningNode(wroe.WebResults.ResultsAsString));

                return new XmlNode[0];
            }

            // import the new tags
            IEnumerable<XmlNode> importedNodes = Enumerable<XmlNode>.FastCopy(Enumerable<XmlNode>.Cast(
                xmlDocument.FirstChild.ChildNodes[1].ChildNodes));

            templateParsingState.ReplaceNodes(element, importedNodes);

            return importedNodes;
        }
Exemplo n.º 13
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="me"></param>
 /// <returns></returns>
 public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
 {
     return templateParsingState.WebConnection.Session.User.Id != templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.UserFactory.AnonymousUser.Id;
 }
Exemplo n.º 14
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="me"></param>
 /// <returns></returns>
 public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
 {
     return !templateParsingState.WebConnection.Session.User.Local;
 }
 void ITemplateProcessor.Register(ITemplateParsingState templateParsingState)
 {
     templateParsingState.ProcessElementForConditionalsAndComponents += ProcessElementForConditionalsAndComponents;
 }
Exemplo n.º 16
0
 void DoSafeParseTag(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
 {
     MakeSafe(DoParseTag(templateParsingState, getParameters, element));
 }
Exemplo n.º 17
0
        void DoSafeTag(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
        {
            IEnumerable<XmlNode> childNodes = Enumerable<XmlNode>.FastCopy(Enumerable<XmlNode>.Cast(element.ChildNodes));

            templateParsingState.ReplaceNodes(element, childNodes);

            MakeSafe(childNodes);
        }
Exemplo n.º 18
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="me"></param>
 /// <returns></returns>
 public bool IsConditionMet(ITemplateParsingState templateParsingState, XmlNode me)
 {
     return templateParsingState.WebConnection.UserAgent is IMobile;
 }
Exemplo n.º 19
0
 void ProcessElementForDependanciesAndTemplates(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
 {
     if (templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace == element.NamespaceURI)
         if ("safeparse" == element.LocalName)
             DoSafeParseTag(templateParsingState, getParameters, element);
         else if ("safe" == element.LocalName)
             DoSafeTag(templateParsingState, getParameters, element);
         else if ("parse" == element.LocalName)
             DoParseTag(templateParsingState, getParameters, element);
 }
Exemplo n.º 20
0
        void ProcessElementForDependanciesAndTemplates(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
        {
            if (element.NamespaceURI == templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace)
                if (element.LocalName == "script")
                {
                    XmlAttribute srcAttribute = element.Attributes["src"];

                    if (null != srcAttribute)
                        templateParsingState.AddScript(templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.GetAbsolutePath(
                            templateParsingState.GetCWD(element),
                            srcAttribute.Value));

                    XmlHelper.RemoveFromParent(element);
                }
                else if (element.LocalName == "open")
                {
                    XmlAttribute filenameAttribute = element.Attributes["filename"];
                    XmlAttribute varnameAttribute = element.Attributes["varname"];

                    if ((null != filenameAttribute) && (null != varnameAttribute))
                    {
                        templateParsingState.AddScript(string.Format(
                            "{0}?Method=GetJSW&assignToVariable={1}",
                            templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.GetAbsolutePath(templateParsingState.GetCWD(element), filenameAttribute.Value),
                            varnameAttribute.Value));

                        XmlHelper.RemoveFromParent(element);
                    }
                    else if (templateParsingState.WebConnection.CookiesFromBrowser.ContainsKey(templateParsingState.TemplateHandlerLocator.TemplatingConstants.JavascriptDebugModeCookie))
                    {
                        XmlElement replacementScript = templateParsingState.TemplateDocument.CreateElement("", "script", templateParsingState.TemplateHandlerLocator.TemplatingConstants.HtmlNamespace);
                        XmlText alertText = templateParsingState.TemplateDocument.CreateTextNode("alert('Invalid open: " + element.OuterXml + "');");
                        replacementScript.AppendChild(alertText);

                        templateParsingState.ReplaceNodes(element, replacementScript);
                    }
                }
                else if (element.LocalName == "css")
                {
                    XmlAttribute srcAttribute = element.Attributes["src"];

                    if (null != srcAttribute)
                        templateParsingState.CssFiles.AddLast(templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.GetAbsolutePath(
                            templateParsingState.GetCWD(element),
                            srcAttribute.Value));

                    XmlHelper.RemoveFromParent(element);
                }
                else if (element.LocalName == "inserthead")
                {
                    // Try reading loc, default to 0

                    XmlAttribute locAttribute = element.Attributes["loc"];
                    double loc;

                    if (null != locAttribute)
                    {
                        if (!double.TryParse(locAttribute.Value, out loc))
                            loc = 0;
                    }
                    else
                        loc = 0;

                    LinkedList<XmlNode> insertNodes;
                    if (!templateParsingState.HeaderNodes.TryGetValue(loc, out insertNodes))
                    {
                        insertNodes = new LinkedList<XmlNode>();
                        templateParsingState.HeaderNodes[loc] = insertNodes;
                    }

                    foreach (XmlNode headNode in element.ChildNodes)
                        if (loc < 0)
                            insertNodes.AddFirst(headNode);
                        else
                            insertNodes.AddLast(headNode);

                    XmlHelper.RemoveFromParent(element);
                }
        }
 void ProcessElementForConditionalsAndComponents(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
 {
     if (element.NamespaceURI == templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace)
         if (element.LocalName == "if")
             HandleConditional(templateParsingState, getParameters, element);
         else if (element.LocalName == "component")
             LoadComponent(templateParsingState, getParameters, element);
         else if (element.LocalName == "snipit")
             LoadSnipit(templateParsingState, getParameters, element);
 }
Exemplo n.º 22
0
        private void GenerateScriptAndCssTags(ITemplateParsingState templateParsingState, XmlNode headNode)
        {
            XmlDocument templateDocument = templateParsingState.TemplateDocument;
            LinkedList<string> cssFiles = templateParsingState.CssFiles;

            foreach (string script in templateParsingState.Scripts)
            {
                XmlNode scriptNode = templateDocument.CreateElement("script", headNode.NamespaceURI);

                XmlAttribute srcAttribute = templateDocument.CreateAttribute("src");
                srcAttribute.Value = script;

                // type="text/javascript"
                XmlAttribute typeAttribute = templateDocument.CreateAttribute("type");
                typeAttribute.Value = "text/javascript";

                scriptNode.Attributes.Append(srcAttribute);
                scriptNode.Attributes.Append(typeAttribute);
                scriptNode.InnerText = "";

                headNode.AppendChild(scriptNode);
            }

            HashSet<string> addedCssFiles = new HashSet<string>();
            foreach (string cssFile in cssFiles)
                if (!addedCssFiles.Contains(cssFile))
                {
                    XmlNode cssNode = templateDocument.CreateElement("link", headNode.NamespaceURI);

                    // <link rel="stylesheet" type="text/css" media="screen, projection" href="//a.fsdn.com/sd/core-tidied.css?T_2_5_0_299" >

                    XmlAttribute srcAttribute = templateDocument.CreateAttribute("href");
                    srcAttribute.Value = cssFile;

                    XmlAttribute typeAttribute = templateDocument.CreateAttribute("type");
                    typeAttribute.Value = "text/css";

                    XmlAttribute relAttribute = templateDocument.CreateAttribute("rel");
                    relAttribute.Value = "stylesheet";

                    cssNode.Attributes.Append(srcAttribute);
                    cssNode.Attributes.Append(typeAttribute);
                    cssNode.Attributes.Append(relAttribute);

                    headNode.AppendChild(cssNode);

                    addedCssFiles.Add(cssFile);
                }

            // If javascript debug mode is off, combile all of the scripts into one that loads all at once
            if (!(templateParsingState.WebConnection.CookiesFromBrowser.ContainsKey(
                templateParsingState.FileHandlerFactoryLocator.TemplateHandlerLocator.TemplatingConstants.JavascriptDebugModeCookie)))
            {
                // Generate composite script tag
                XmlElement lastLocalScriptTag = null;

                LinkedList<string> scriptUrls = new LinkedList<string>();
                LinkedList<XmlElement> scriptElements = new LinkedList<XmlElement>();

                foreach (XmlElement node in XmlHelper.IterateAllElements(headNode))
                    if (node.LocalName == "script")
                        if (templateParsingState.FileHandlerFactoryLocator.TemplateHandlerLocator.TemplatingConstants.HtmlNamespaces.Contains(node.NamespaceURI))
                        {
                            // This is a script node
                            // get the script that's being loaded
                            string src = node.GetAttribute("src");

                            if (null != src)
                                if (src.Length > 0)
                                    if (src.StartsWith("/"))

                                        // Hueristic:  All scripts without a ? are merged into one
                                        // If a script has a ?, but it's for a system file or the user database, it can also be merged
                                        if ((!(src.Contains("?"))) || (src.StartsWith("/System/")) || (src.StartsWith("/Users/UserDB?")))
                                        {
                                            lastLocalScriptTag = node;
                                            scriptElements.AddLast(node);
                                            scriptUrls.AddLast(src);
                                        }
                                        else
                                        {
                                            // If the script cannot be merged, then add the BrowserCache GET argument so that the browser can cache it

                                            IWebResults scriptResults = templateParsingState.WebConnection.ShellTo(src);

                                            src = HTTPStringFunctions.AppendGetParameter(
                                                src,
                                                "BrowserCache",
                                                StringGenerator.GenerateHash(scriptResults.ResultsAsString));

                                            node.SetAttribute("src", src);
                                        }
                }

                // Remove dead script tags and update the last one to load a composite script
                if (null != lastLocalScriptTag)
                {
                    foreach (XmlElement node in scriptElements)
                        if (node != lastLocalScriptTag)
                            node.ParentNode.RemoveChild(node);

                    string serializedScriptList = JsonWriter.Serialize(scriptUrls);
                    string compositeScript = GenerateCompositeJavascript(templateParsingState.WebConnection, scriptUrls);
                    string hash = StringGenerator.GenerateHash(compositeScript);

                    string url = FileContainer.FullPath + "?Method=GetCompositeScript";
                    url = HTTPStringFunctions.AppendGetParameter(url, "scriptUrls", serializedScriptList);
                    url = HTTPStringFunctions.AppendGetParameter(url, "BrowserCache", hash);

                    lastLocalScriptTag.SetAttribute("src", url);
                }
            }
            else
            {
                // Warn when including a missing script
                foreach (XmlElement node in XmlHelper.IterateAllElements(headNode))
                    if (node.LocalName == "script")
                    {
                        string src = node.GetAttribute("src");

                        if (null != src)
                            if (src.Length > 0)
                                if (src.StartsWith("/"))
                                {
                                    src = src.Split('?')[0];

                                    if (!src.Contains("[")) // quick hack so scripts can contain [user]
                                        if (!templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.IsFilePresent(src))
                                        {
                                            node.InnerText = "alert('" + (src + " doesn't exist: " + node.OuterXml).Replace("'", "\\'") + "');";
                                            node.RemoveAttribute("src");
                                        }
                                }
                    }
            }
        }
Exemplo n.º 23
0
        private static void GenerateHeadTags(ITemplateParsingState templateParsingState, XmlNode headNode)
        {
            SortedDictionary<double, LinkedList<XmlNode>> headerNodes = templateParsingState.HeaderNodes;

            foreach (double loc in headerNodes.Keys)
                if (loc < 0)
                    foreach (XmlNode xmlNode in headerNodes[loc])
                        headNode.PrependChild(xmlNode);
                else
                    foreach (XmlNode xmlNode in headerNodes[loc])
                        headNode.InsertAfter(xmlNode, headNode.LastChild);

            // handle oc:title, if present
            // TODO:  Use XPATH
            XmlNodeList ocTitleNodes = headNode.OwnerDocument.GetElementsByTagName("title", templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace);

            if (ocTitleNodes.Count > 1)
                for (int ctr = 1; ctr < ocTitleNodes.Count; ctr++)
                {
                    XmlNode ocTitleNode = ocTitleNodes[ctr];
                    ocTitleNode.ParentNode.RemoveChild(ocTitleNode);
                }

            if (ocTitleNodes.Count > 0)
            {
                XmlNode ocTitleNode = ocTitleNodes[0];

                bool titleNodePresent = false;
                foreach (XmlNode titleNode in headNode.OwnerDocument.GetElementsByTagName("title", headNode.NamespaceURI))
                    if (titleNode.ParentNode == ocTitleNode.ParentNode)
                        titleNodePresent = true;

                if (!titleNodePresent)
                {
                    XmlNode titleNode = headNode.OwnerDocument.CreateElement("title", headNode.NamespaceURI);

                    foreach (XmlNode subNode in ocTitleNode.ChildNodes)
                        titleNode.AppendChild(subNode);

                    foreach (XmlAttribute attribute in ocTitleNode.Attributes)
                        titleNode.Attributes.Append(attribute);

                    ocTitleNode.ParentNode.InsertAfter(titleNode, ocTitleNode);
                }

                ocTitleNode.ParentNode.RemoveChild(ocTitleNode);
            }
        }
Exemplo n.º 24
0
 /// <summary>
 /// Always returns true
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="me"></param>
 /// <returns></returns>
 public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
 {
     return true;
 }
Exemplo n.º 25
0
 /// <summary>
 /// This is to work around a Mozilla quirk where it can't handle empty text areas
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="getParameters"></param>
 /// <param name="element"></param>
 void EnsureNoEmptyTextareas(ITemplateParsingState templateParsingState, IDictionary<string, object> getParameters, XmlElement element)
 {
     if (element.LocalName == "textarea" && templateParsingState.TemplateHandlerLocator.TemplatingConstants.HtmlNamespaces.Contains(element.NamespaceURI))
         if (element.IsEmpty)
             element.IsEmpty = false;
 }
Exemplo n.º 26
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="fileContainer"></param>
 /// <param name="namedPermission"></param>
 /// <returns></returns>
 protected abstract bool DetermineCondition(ITemplateParsingState templateParsingState, IFileContainer fileContainer, string namedPermission);
Exemplo n.º 27
0
 void ITemplateProcessor.Register(ITemplateParsingState templateParsingState)
 {
     templateParsingState.PostProcessElement += PostProcessElement;
 }
Exemplo n.º 28
0
 //static ILog log = LogManager.GetLogger<ComponentAndConditionalsResolver>();
 void ITemplateProcessor.Register(ITemplateParsingState templateParsingState)
 {
     templateParsingState.ProcessElementForDependanciesAndTemplates += ProcessElementForDependanciesAndTemplates;
 }
Exemplo n.º 29
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="templateParsingState"></param>
 /// <param name="me"></param>
 /// <returns></returns>
 public bool IsConditionMet(ITemplateParsingState templateParsingState, System.Xml.XmlNode me)
 {
     return templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.UserManagerHandler.IsUserInGroup(
         templateParsingState.WebConnection.Session.User.Id,
         templateParsingState.WebConnection.WebServer.FileHandlerFactoryLocator.UserFactory.Administrators.Id);
 }
        private void LoadSnipit(
            ITemplateParsingState templateParsingState,
            IDictionary<string, object> getParameters,
            XmlElement element)
        {
            XmlAttribute srcAttribute = (XmlAttribute)element.Attributes.GetNamedItem("src", templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace);

            if (null == srcAttribute)
                templateParsingState.ReplaceNodes(
                    element,
                    templateParsingState.GenerateWarningNode("oc:src must be specified: " + element.OuterXml));

            else
            {
                string fileName = templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.GetAbsolutePath(
                    templateParsingState.GetCWD(element),
                    srcAttribute.Value);

                IFileContainer fileContainer = templateParsingState.FileHandlerFactoryLocator.FileSystemResolver.ResolveFile(fileName);
                templateParsingState.WebConnection.TouchedFiles.Add(fileContainer);

                // If the user doesn't have permission for the component and the component has something to use instead, use it
                if (null == fileContainer.LoadPermission(templateParsingState.WebConnection.Session.User.Id) && element.HasChildNodes)
                {
                    XmlNode replacement = element.OwnerDocument.CreateElement("div");

                    foreach (XmlNode errorNode in element.ChildNodes)
                        replacement.AppendChild(errorNode);

                    element.ParentNode.InsertAfter(replacement, element);
                    element.ParentNode.RemoveChild(element);
                }
                else
                {
                    // If the user has permission, resolve the component and deal with default errors

                    XmlDocument snipitDocument = new XmlDocument();

                    // TODO:  GET Parameters

                    try
                    {
                        snipitDocument.LoadXml(string.Format(
                            "<div xmlns=\"{0}\" xmlns:oc=\"{1}\">{2}</div>",
                            templateParsingState.TemplateDocument.FirstChild.NamespaceURI,
                            templateParsingState.TemplateHandlerLocator.TemplatingConstants.TemplateNamespace,
                            fileContainer.CastFileHandler<ITextHandler>().ReadAll()));

                        XmlNodeList replacementNodes = snipitDocument.FirstChild.ChildNodes;
                        templateParsingState.SetCWD(replacementNodes, fileContainer.ParentDirectoryHandler.FileContainer.FullPath);
                        templateParsingState.ReplaceNodes(element, replacementNodes);
                    }
                    catch (WebResultsOverrideException wroe)
                    {
                        templateParsingState.ReplaceNodes(
                            element,
                            templateParsingState.GenerateWarningNode(wroe.WebResults.ResultsAsString));
                    }
                    catch (Exception e)
                    {
                        log.Error("An error occured when loading a component", e);

                        templateParsingState.ReplaceNodes(
                            element,
                            templateParsingState.GenerateWarningNode("An unhandled error occured.  See the system logs for more information"));
                    }
                }
            }
        }