Files
Umbraco-CMS/umbraco/businesslogic/UserType.cs
Shandem f6d0d043b5 DO NOT DOWNLOAD. DOWNLOAT LATEST STABLE FROM RELEASE TAB
Created 4.1.0 branch

[TFS Changeset #55082]
2009-06-19 07:39:16 +00:00

308 lines
9.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.Caching;
using umbraco.DataLayer;
namespace umbraco.BusinessLogic
{
/// <summary>
/// Represents a umbraco Usertype
/// </summary>
public class UserType
{
/// <summary>
/// Creates a new empty instance of a UserType
/// </summary>
public UserType() { }
/// <summary>
/// Creates a new instance of a UserType and attempts to
/// load it's values from the database cache.
/// </summary>
/// <remarks>
/// If the UserType is not found in the existing ID list, then this object
/// will remain an empty object
/// </remarks>
/// <param name="id">The UserType id to find</param>
public UserType(int id)
{
Cache();
this.LoadByPrimaryKey(id);
}
/// <summary>
/// Initializes a new instance of the <see cref="UserType"/> class.
/// </summary>
/// <param name="id">The user type id.</param>
/// <param name="name">The name.</param>
public UserType(int id, string name)
{
m_id = id;
m_name = name;
}
/// <summary>
/// Creates a new instance of UserType with all parameters
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
/// <param name="defaultPermissions"></param>
/// <param name="alias"></param>
public UserType(int id, string name, string defaultPermissions, string alias)
{
m_name = name;
m_id = id;
m_defaultPermissions = defaultPermissions;
m_alias = alias;
}
/// <summary>
/// A static constructor that will Cache the current UserTypes
/// </summary>
static UserType()
{
Cache();
}
private const string CACHE_KEY = "UserTypeCache";
private static string _connstring = GlobalSettings.DbDSN;
private int m_id;
private string m_name;
private string m_defaultPermissions;
private string m_alias;
/// <summary>
/// The cache storage for all user types
/// </summary>
private static List<UserType> UserTypes
{
get
{
//ensure cache exists
if (HttpRuntime.Cache[CACHE_KEY] == null)
ReCache();
return HttpRuntime.Cache[CACHE_KEY] as List<UserType>;
}
set
{
HttpRuntime.Cache[CACHE_KEY] = value;
}
}
private static ISqlHelper SqlHelper
{
get { return Application.SqlHelper; }
}
#region Public Properties
/// <summary>
/// Gets or sets the user type alias.
/// </summary>
public string Alias
{
get { return m_alias; }
set { m_alias = value; }
}
/// <summary>
/// Gets the name of the user type.
/// </summary>
public string Name
{
get { return m_name; }
set { m_name = value; }
}
/// <summary>
/// Gets the id the user type
/// </summary>
public int Id
{
get { return m_id; }
}
/// <summary>
/// Gets the default permissions of the user type
/// </summary>
public string DefaultPermissions
{
get { return m_defaultPermissions; }
set { m_defaultPermissions = value; }
}
/// <summary>
/// Returns an array of UserTypes
/// </summary>
[Obsolete("Use the GetAll method instead")]
public static UserType[] getAll
{
get { return GetAllUserTypes().ToArray(); }
}
#endregion
/// <summary>
/// Saves this instance.
/// </summary>
public void Save()
{
//ensure that this object has an ID specified (it exists in the database)
if (m_id == null || m_id <= 0)
throw new Exception("The current UserType object does not exist in the database. New UserTypes should be created with the MakeNew method");
SqlHelper.ExecuteNonQuery(@"
update umbracoUserType set
userTypeAlias=@alias,userTypeName=@name,userTypeDefaultPermissions=@permissions
where id=@id",
SqlHelper.CreateParameter("@alias", m_alias),
SqlHelper.CreateParameter("@name", m_name),
SqlHelper.CreateParameter("@permissions", m_defaultPermissions),
SqlHelper.CreateParameter("@id", m_id)
);
ReCache();
}
/// <summary>
/// Deletes this instance.
/// </summary>
public void Delete()
{
//ensure that this object has an ID specified (it exists in the database)
if (m_id == null || m_id <= 0)
throw new Exception("The current UserType object does not exist in the database. New UserTypes should be created with the MakeNew method");
SqlHelper.ExecuteNonQuery(@"
delete from umbracoUserType where id=@id",
SqlHelper.CreateParameter("@id", m_id));
ReCache();
}
/// <summary>
/// Load the data for the current UserType by it's id
/// </summary>
/// <param name="id"></param>
/// <returns>Returns true if the UserType id was found
/// and the data was loaded, false if it wasn't</returns>
public bool LoadByPrimaryKey(int id)
{
UserType userType = GetUserType(id);
if (userType == null)
return false;
this.m_id = userType.Id;
this.m_alias = userType.Alias;
this.m_defaultPermissions = userType.DefaultPermissions;
this.m_name = userType.Name;
return true;
}
/// <summary>
/// Creates a new user type
/// </summary>
/// <param name="name"></param>
/// <param name="defaultPermissions"></param>
/// <param name="alias"></param>
public static UserType MakeNew(string name, string defaultPermissions, string alias)
{
//ensure that the current alias does not exist
//get the id for the new user type
UserType existing = UserTypes.Find(
delegate(UserType ut)
{
return (ut.Alias == alias);
}
);
if (existing != null)
throw new Exception("The UserType alias specified already exists");
SqlHelper.ExecuteNonQuery(@"
insert into umbracoUserType
(userTypeAlias,userTypeName,userTypeDefaultPermissions)
values (@alias,@name,@permissions)",
SqlHelper.CreateParameter("@alias", alias),
SqlHelper.CreateParameter("@name", name),
SqlHelper.CreateParameter("@permissions", defaultPermissions));
ReCache();
//find the new user type
existing = UserTypes.Find(
delegate(UserType ut)
{
return (ut.Alias == alias);
}
);
return existing;
}
/// <summary>
/// Gets the user type with the specied ID
/// </summary>
/// <param name="id">The id.</param>
/// <returns></returns>
public static UserType GetUserType(int id)
{
return UserTypes.Find(
delegate(UserType ut)
{
return (ut.Id == id);
}
);
}
/// <summary>
/// Returns all UserType's
/// </summary>
/// <returns></returns>
public static List<UserType> GetAllUserTypes()
{
return UserTypes;
}
/// <summary>
/// Removes the UserType cache and re-reads the data from the db.
/// </summary>
private static void ReCache()
{
HttpRuntime.Cache.Remove(CACHE_KEY);
Cache();
}
/// <summary>
/// Read all UserType data and store it in cache.
/// </summary>
private static void Cache()
{
//don't query the database is the cache is not null
if (HttpRuntime.Cache[CACHE_KEY] != null)
return;
List<UserType> tmp = new List<UserType>();
using (IRecordsReader dr =
SqlHelper.ExecuteReader("select id, userTypeName, userTypeAlias, userTypeDefaultPermissions from umbracoUserType"))
{
while (dr.Read())
{
tmp.Add(new UserType(
dr.GetShort("id"),
dr.GetString("userTypeName"),
dr.GetString("userTypeDefaultPermissions"),
dr.GetString("userTypeAlias")));
}
}
UserTypes = tmp;
}
}
}