Files
OurUmbraco/uWiki/Library/xslt.cs
T

149 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml.XPath;
using umbraco.cms.businesslogic.web;
using System.Xml;
using umbraco.cms.businesslogic.member;
using umbraco.cms.businesslogic;
using umbraco.cms.businesslogic.property;
using umbraco.cms.businesslogic.propertytype;
namespace uWiki.Library {
[Umbraco.Core.Macros.XsltExtension("uWiki")]
public class Xslt {
public static XPathNodeIterator PageHistory(int nodeId) {
Document doc = new Document(nodeId);
XmlDocument xd = new XmlDocument();
XmlNode versions = umbraco.xmlHelper.addTextNode(xd, "versions", "");
if (doc != null) {
DocumentVersionList[] dvlList = doc.GetVersions();
PropertyType authorType = doc.getProperty("author").PropertyType;
foreach (DocumentVersionList dvl in dvlList) {
Document d = new Document(nodeId, dvl.Version);
int author = getPropertyFromVersion<int>(authorType, dvl.Version, "dataInt");
XmlNode x = umbraco.xmlHelper.addTextNode(xd, "version", "");
x.AppendChild(umbraco.xmlHelper.addTextNode(xd, "author", author.ToString()));
x.AppendChild(umbraco.xmlHelper.addTextNode(xd, "guid", dvl.Version.ToString()));
x.AppendChild(umbraco.xmlHelper.addTextNode(xd, "name", dvl.Text));
x.AppendChild(umbraco.xmlHelper.addTextNode(xd, "date", dvl.Date.ToString("s")));
versions.AppendChild( x );
x = null;
d = null;
}
}
return versions.CreateNavigator().Select(".");
}
private static T getPropertyFromVersion<T>(PropertyType pt, Guid version, string type)
{
return umbraco.BusinessLogic.Application.SqlHelper.ExecuteScalar<T>("select " + type + " from cmsPropertyData where versionId = @version AND propertyTypeId = @id",
umbraco.BusinessLogic.Application.SqlHelper.CreateParameter("@id", pt.Id),
umbraco.BusinessLogic.Application.SqlHelper.CreateParameter("@version", version)
);
}
public static string GetXmlNodeFromVersion(int id, string guid, bool deep) {
Document d;
if (!string.IsNullOrEmpty(guid))
d = new Document(id, new Guid(guid));
else
d = new Document(id);
XmlDocument xd = new XmlDocument();
XmlNode x = umbraco.xmlHelper.addTextNode(xd, "node", "");
d.XmlPopulate(xd, ref x, deep);
return x.OuterXml;
}
public static XPathNodeIterator GetAttachedFiles(int id) {
return Businesslogic.Data.GetDataSet("SELECT * FROM wikiFiles where nodeId = " + id.ToString(), "file");
}
public static XPathNodeIterator GetAttachedFile(int Fileid) {
return Businesslogic.Data.GetDataSet("SELECT * FROM wikiFiles where id = " + Fileid.ToString(), "file");
}
public static bool IsMemberInGroup(string GroupName, int memberid)
{
Member m = Utils.GetMember(memberid);
foreach (MemberGroup mg in m.Groups.Values)
{
if (mg.Text == GroupName)
return true;
}
return false;
}
public static bool IsInGroup(string GroupName)
{
if (umbraco.library.IsLoggedOn())
return IsMemberInGroup(GroupName, Member.CurrentMemberId());
else
return false;
}
public static void AddWikiHelpRequest(string section)
{
string url = HttpContext.Current.Request.Url.AbsoluteUri.ToLower();
string application = "";
string applicationPage = url.Substring(url.LastIndexOf("/") + 1, url.Length - url.LastIndexOf("/") - 1);
Businesslogic.WikiHelpRequest.Create(section.ToLower(), application, applicationPage,url);
}
public static XPathNodeIterator GetWikiHelpRequests()
{
return Businesslogic.Data.GetDataSet("SELECT applicationPage, COUNT(*) AS numberOfRequests FROM wikiHelpRequest GROUP BY applicationPage ", "requests");
}
public static XPathNodeIterator GetWikiHelpRequests(string section)
{
return Businesslogic.Data.GetDataSet("SELECT applicationPage, COUNT(*) AS numberOfRequests FROM wikiHelpRequest where section = '" + section + "' GROUP BY applicationPage", "requests");
}
public static XPathNodeIterator FindPackageForUmbracoVersion(int nodeid, string umbracoVersion)
{
XmlDocument xd = new XmlDocument();
Businesslogic.WikiFile wf = Businesslogic.WikiFile.FindPackageForUmbracoVersion(nodeid, umbracoVersion);
if (wf != null)
xd.AppendChild(wf.ToXml(xd));
return xd.CreateNavigator().Select(".");
}
public static XPathNodeIterator FindPackageDocumentationForUmbracoVersion(int nodeid, string umbracoVersion)
{
XmlDocument xd = new XmlDocument();
Businesslogic.WikiFile wf = Businesslogic.WikiFile.FindPackageDocumentationForUmbracoVersion(nodeid, umbracoVersion);
if (wf != null)
xd.AppendChild(wf.ToXml(xd));
return xd.CreateNavigator().Select(".");
}
}
}