Beispiel #1
0
        public void AddXML(ProjectFlx.Schema.projectResults ProjectResults)
        {
            foreach (var result in ProjectResults.results)
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(result.Serialize());

                base.AddXML("app", doc);
            }
        }
Beispiel #2
0
 public DatabaseQuery(DatabaseConnection Connection, ProjectFlx.Schema.projectResults ProjectResults)
 {
     _database = Connection;
     _Projresults = ProjectResults;
 }
Beispiel #3
0
        private void wbtQuery(XmlNode current, String ResourceContentPath)
        {
            var nsmgr = new XmlNamespaceManager(current.OwnerDocument.NameTable);
            nsmgr.AddNamespace("wbt", "myWebTemplater.1.0");
            nsmgr.AddNamespace("sbt", "mySiteTemplater.1.0");
            nsmgr.AddNamespace("pbt", "myPageTemplater.1.0");

            var ns = new XmlNamespaceManager(TMPLT.DOCxml.NameTable);
            ns.AddNamespace("wbt", "myWebTemplater.1.0");

            if (current.SelectSingleNode("descendant-or-self::wbt:ProjSql | descendant-or-self::wbt:query", nsmgr) == null)
                return;

            ProjectFlx.DB.DatabaseConnection db = new ProjectFlx.DB.DatabaseConnection();
            ProjectFlx.Schema.projectResults result;
            ProjectFlx.DB.SchemaBased.DatabaseQuery dbq = new ProjectFlx.DB.SchemaBased.DatabaseQuery(db, result = new ProjectFlx.Schema.projectResults());

            // TODO: this become global and USECDN
            var projsqlpath = (_useCdn) ? Utility.Paths.CombinePaths(_resources.Host, ConfigurationManager.AppSettings["project-sql-path"], "ProjectSql.xml") : Path.Combine(Server.MapPath(ConfigurationManager.AppSettings["project-sql-path"]), "ProjectSql.xml");
            var projsql = new Schema.Extra.commonProj(projsqlpath);

            if (projsql == null)
                return;

            if (ConfigurationManager.AppSettings["validation-regx"] != null)
            {
                projsql.setRegX(Server.MapPath(ConfigurationManager.AppSettings["validation-regx"]));
            }

            TMPLT.AddXslParameter("projSql", projsql.ProjSqlNode);

            wbtProjSql(current, projsql, nsmgr);

            bool isUpdateQuery = false;

            // handle update, inserts, deletes
            if (RequestType == enumRequestType.POST)
            {
                var qproj = Request.Form["wbt_execute_project"];
                var qquery = Request.Form["wbt_execute_query"];

                if(qproj == null)
                    qproj = Request.Form["wbt_update_project"];

                if (qquery == null)
                    qquery = Request.Form["wbt_update_query"];

                if (!(String.IsNullOrEmpty(qproj) || String.IsNullOrEmpty(qquery)))
                {
                    isUpdateQuery = true;

                    projsql.setProject(qproj);
                    projsql.setQuery(qquery);
                    projsql.fillParms(Request.Form);

                    try
                    {
                        projsql.checkInputParms();
                        dbq.Query(projsql);
                    }
                    catch (Exception unhandled)
                    {
                        TMPLT.AddException(unhandled);
                    }
                }
            }

            // page queries
            var qresources = _resources.collectResources("queries", ".xml");
            qresources.AddRange(_resources.collectResources(Utility.Paths.CombinePaths(ResourceContentPath, "queries"), ".xml"));

            foreach (string s in qresources)
            {
                var xm = new XmlDocument();
                xm.Load((_useCdn) ? Utility.Paths.CombinePaths(_resources.Host, s) : Server.MapPath(s));

                XmlNode q = xm.SelectSingleNode("wbt:query", nsmgr);

                projsql.setProject(q.Attributes["project"].Value);
                projsql.setQuery(q.Attributes["query"].Value);

                foreach (XmlNode parm in q.SelectNodes("parameters/parameter"))
                    projsql.setParameter(parm.Attributes["name"].Value, getValueFromWbtParm(parm.InnerText));

                projsql.fillParms(Request.QueryString);
                if(!isUpdateQuery)      // form vars reserved for update query actions
                    projsql.fillParms(Request.Form);

                try
                {
                    projsql.checkInputParms();
                    dbq.Query(projsql);
                }
                catch (Exception unhandled)
                {
                    TMPLT.AddException(unhandled);
                }

            }

            // embeded queries (action result only)
            var queries = current.SelectNodes("wbt:query[@action='Result' or not(@action)] | *//wbt:query[@action='Result' or not(@action)]", ns);
            TMPLT.AddCookie("wbt_edits_token", Guid.NewGuid().ToString(), DateTime.Now.AddMinutes(3), true);

            foreach (XmlNode q in queries)
            {
                var logOnNode = q.SelectSingleNode("ancestor-or-self::*[@loggedonuser = '******'] | ancestor-or-self::*[@wbt:loggedonuser = '******'] | ancestor-or-self::LoggedOnUser | ancestor-or-self::LoggedOn | ancestor-or-self::LoggedIn | ancestor-or-self::LoggedIn", nsmgr);
                if (logOnNode != null && !LoggedOnUser)
                    continue;

                var authNode = q.SelectSingleNode("ancestor-or-self::*[@authenticated = 'true'] | ancestor-or-self::*[@wbt:authenticateduser = '******'] | ancestor-or-self::AuthenticatedUser", nsmgr);
                if (authNode != null && !AuthenticatedUser)
                    continue;

                projsql.setProject(q.Attributes["project"].Value);
                projsql.setQuery(q.Attributes["query"].Value);

                foreach (XmlNode parm in q.SelectNodes("parameters/parameter"))
                    projsql.setParameter(parm.Attributes["name"].Value, getValueFromWbtParm(parm.InnerText));

                projsql.fillParms(Request.QueryString);
                if (!isUpdateQuery)      // form vars reserved for update query actions
                    projsql.fillParms(Request.Form);

                try
                {
                    projsql.checkInputParms();
                    dbq.Query(projsql);
                }
                catch(Exception unhandled)
                {
                    TMPLT.AddException(unhandled);
                }
            }

            if (result.results.Count > 0)
                TMPLT.AddWBTXml(result.Serialize());
        }