Files
Umbraco-CMS/umbraco/cms/businesslogic/relation/Relation.cs
T
Shandem d6b4013743 more unit tests and fixes.
Fixes: 27541

[TFS Changeset #68434]
2010-06-14 09:57:43 +00:00

182 lines
6.2 KiB
C#

using System;
using System.Data;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
using umbraco.DataLayer;
using umbraco.BusinessLogic;
namespace umbraco.cms.businesslogic.relation
{
/// <summary>
/// Summary description for Relation.
/// </summary>
public class Relation
{
private int _id;
private CMSNode _parentNode;
private CMSNode _childNode;
private string _comment;
private DateTime _datetime;
private RelationType _relType;
protected static ISqlHelper SqlHelper
{
get { return Application.SqlHelper; }
}
public CMSNode Parent
{
get {return _parentNode;}
set
{
SqlHelper.ExecuteNonQuery("update umbracoRelation set parentId = @parent where id = " + this.Id, SqlHelper.CreateParameter("@parent", value.Id));
_parentNode = value;
}
}
public CMSNode Child
{
get {return _childNode;}
set
{
SqlHelper.ExecuteNonQuery("update umbracoRelation set childId = @child where id = " + this.Id, SqlHelper.CreateParameter("@child", value.Id));
_childNode = value;
}
}
public string Comment
{
get {return _comment;}
set
{
SqlHelper.ExecuteNonQuery("update umbracoRelation set comment = @comment where id = " + this.Id, SqlHelper.CreateParameter("@comment", value));
_comment = value;
}
}
public DateTime CreateDate
{
get {return _datetime;}
}
public RelationType RelType
{
get {return _relType;}
set
{
SqlHelper.ExecuteNonQuery("update umbracoRelation set relType = @relType where id = " + this.Id, SqlHelper.CreateParameter("@relType", value.Id));
_relType = value;
}
}
public int Id
{
get {return _id;}
}
public Relation(int Id)
{
using (IRecordsReader dr = SqlHelper.ExecuteReader("select * from umbracoRelation where id = @id", SqlHelper.CreateParameter("@id", Id)))
{
if (dr.Read())
{
this._id = dr.GetInt("id");
this._parentNode = new CMSNode(dr.GetInt("parentId"));
this._childNode = new CMSNode(dr.GetInt("childId"));
this._relType = RelationType.GetById(dr.GetInt("relType"));
this._comment = dr.GetString("comment");
this._datetime = dr.GetDateTime("datetime");
}
else
{
throw new ArgumentException("No relation found for id " + Id.ToString());
}
}
}
/// <summary>
/// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility
/// </summary>
public virtual void Save()
{
}
public void Delete()
{
SqlHelper.ExecuteNonQuery("delete from umbracoRelation where id = @id", SqlHelper.CreateParameter("@id", this.Id));
}
[MethodImpl(MethodImplOptions.Synchronized)]
public static Relation MakeNew(int ParentId, int ChildId, RelationType RelType, string Comment)
{
// The method is synchronized
SqlHelper.ExecuteNonQuery("INSERT INTO umbracoRelation (childId, parentId, relType, comment) VALUES (@childId, @parentId, @relType, @comment)",
SqlHelper.CreateParameter("@childId", ChildId),
SqlHelper.CreateParameter("@parentId", ParentId),
SqlHelper.CreateParameter("@relType", RelType.Id),
SqlHelper.CreateParameter("@comment", Comment));
return new Relation(SqlHelper.ExecuteScalar<int>("SELECT MAX(id) FROM umbracoRelation"));
}
public static List<Relation> GetRelationsAsList(int NodeId)
{
List<Relation> _rels = new List<Relation>();
System.Collections.ArrayList tmp = new System.Collections.ArrayList();
using (IRecordsReader dr = SqlHelper.ExecuteReader("select umbracoRelation.id from umbracoRelation inner join umbracoRelationType on umbracoRelationType.id = umbracoRelation.relType where umbracoRelation.parentId = @id or (umbracoRelation.childId = @id and umbracoRelationType.[dual] = 1)", SqlHelper.CreateParameter("@id", NodeId)))
{
while(dr.Read())
{
_rels.Add(new Relation(dr.GetInt("id")));
}
}
return _rels;
}
public static bool IsRelated(int ParentID, int ChildId) {
int count = SqlHelper.ExecuteScalar<int>("SELECT count(*) FROM umbracoRelation WHERE childId = @childId AND parentId = @parentId",
SqlHelper.CreateParameter("@childId", ChildId),
SqlHelper.CreateParameter("@parentId", ParentID));
return (count > 0);
}
public static bool IsRelated(int ParentID, int ChildId, RelationType Filter) {
int count = SqlHelper.ExecuteScalar<int>("SELECT count(*) FROM umbracoRelation WHERE childId = @childId AND parentId = @parentId AND relType = @relType",
SqlHelper.CreateParameter("@childId", ChildId),
SqlHelper.CreateParameter("@parentId", ParentID),
SqlHelper.CreateParameter("@relType", Filter.Id)
);
return (count > 0);
}
public static Relation[] GetRelations(int NodeId)
{
return GetRelationsAsList(NodeId).ToArray();
}
public static Relation[] GetRelations(int NodeId, RelationType Filter)
{
System.Collections.ArrayList tmp = new System.Collections.ArrayList();
using (IRecordsReader dr = SqlHelper.ExecuteReader("select umbracoRelation.id from umbracoRelation inner join umbracoRelationType on umbracoRelationType.id = umbracoRelation.relType and umbracoRelationType.id = @relTypeId where umbracoRelation.parentId = @id or (umbracoRelation.childId = @id and umbracoRelationType.[dual] = 1)", SqlHelper.CreateParameter("@id", NodeId), SqlHelper.CreateParameter("@relTypeId", Filter.Id)))
{
while(dr.Read())
{
tmp.Add(dr.GetInt("id"));
}
}
Relation[] retval = new Relation[tmp.Count];
for (int i = 0; i < tmp.Count; i++) retval[i] = new Relation((int)tmp[i]);
return retval;
}
}
}