using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.ComponentModel; using System.Collections.Generic; using umbraco.cms.businesslogic.web; using umbraco.cms; using System.Xml.Serialization; using System.Xml; using umbraco.cms.businesslogic.member; namespace umbraco.webservices.members { [WebService(Namespace = "http://umbraco.org/webservices/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] public class memberService : BaseWebService { override public Services Service { get { return Services.MemberService; } } /// /// Reads the user with the specified memberId /// /// [WebMethod] public memberCarrier readByLogin(string memberLoginName, string memberPassword, string username, string password) { Authenticate (username, password); umbraco.cms.businesslogic.member.Member foundMember = umbraco.cms.businesslogic.member.Member.GetMemberFromLoginNameAndPassword(memberLoginName, memberPassword); if (foundMember == null) return null; return CreateMemberCarrier(foundMember); } /// /// Reads the user with the specified memberId /// /// [WebMethod] public memberCarrier readById(int memberId, string username, string password) { Authenticate(username, password); umbraco.cms.businesslogic.member.Member foundMember = new umbraco.cms.businesslogic.member.Member(memberId); if (foundMember == null) return null; return CreateMemberCarrier(foundMember); } /// /// Reads the full list of members /// /// [WebMethod] public List readList(string username, string password) { Authenticate(username, password); Member[] members = Member.GetAll; List Members = new List(); foreach (umbraco.cms.businesslogic.member.Member member in members) { Members.Add(CreateMemberCarrier(member)); } return Members; } [WebMethod] public void update(memberCarrier carrier, string username, string password) { Authenticate(username, password); // Some validation if (carrier.Id == 0) throw new Exception("ID must be specifed when updating"); if (carrier == null) throw new Exception("No carrier specified"); // Get the user umbraco.BusinessLogic.User user = GetUser(username, password); // We load the member Member member = new Member(carrier.Id); // We assign the new values: member.LoginName = carrier.LoginName; member.Text = carrier.DisplayedName; member.Email = carrier.Email; member.Password = carrier.Password; // We iterate the properties in the carrier if (carrier.MemberProperties != null) { foreach (memberProperty updatedproperty in carrier.MemberProperties) { umbraco.cms.businesslogic.property.Property property = member.getProperty(updatedproperty.Key); if (property != null) { property.Value = updatedproperty.PropertyValue; } } } } [WebMethod] public int create(memberCarrier carrier, int memberTypeId, string username, string password) { Authenticate(username, password); // Some validation if (carrier == null) throw new Exception("No carrier specified"); if (carrier.Id != 0) throw new Exception("ID cannot be specifed when creating. Must be 0"); if (string.IsNullOrEmpty(carrier.DisplayedName)) carrier.DisplayedName = "unnamed"; // we fetch the membertype umbraco.cms.businesslogic.member.MemberType mtype = new umbraco.cms.businesslogic.member.MemberType(memberTypeId); // Check if the membertype exists if (mtype == null) throw new Exception("Membertype " + memberTypeId + " not found"); // Get the user that creates umbraco.BusinessLogic.User user = GetUser(username, password); // Create the new member umbraco.cms.businesslogic.member.Member newMember = umbraco.cms.businesslogic.member.Member.MakeNew(carrier.DisplayedName, mtype, user); // We iterate the properties in the carrier if (carrier.MemberProperties != null) { foreach (memberProperty updatedproperty in carrier.MemberProperties) { umbraco.cms.businesslogic.property.Property property = newMember.getProperty(updatedproperty.Key); if (property != null) { property.Value = updatedproperty.PropertyValue; } } } return newMember.Id; } /// /// Deletes the document with the specified ID /// /// /// /// [WebMethod] public void delete(int id, string username, string password) { Authenticate(username, password); // We load the member umbraco.cms.businesslogic.member.Member deleteMember; try { deleteMember = new umbraco.cms.businesslogic.member.Member(id); } catch (Exception ex) { throw new Exception("Member not found" + ex.Message); } // We delete him (cruel world) try { deleteMember.delete(); } catch (Exception ex) { throw new Exception("Member could not be deleted" + ex.Message); } } /// /// Creates container-object for member /// /// /// private memberCarrier CreateMemberCarrier(umbraco.cms.businesslogic.member.Member member) { memberCarrier carrier = new memberCarrier(); carrier.Id = member.Id; carrier.LoginName = member.LoginName; carrier.DisplayedName = member.Text; carrier.Email = member.Email; carrier.Password = member.Password; carrier.MembertypeId = member.ContentType.Id; carrier.MembertypeName = member.ContentType.Text; // Adding groups to member-carrier IDictionaryEnumerator Enumerator; Enumerator = member.Groups.GetEnumerator(); while (Enumerator.MoveNext()) { memberGroup group = new memberGroup(Convert.ToInt32(Enumerator.Key), ((umbraco.cms.businesslogic.member.MemberGroup)Enumerator.Value).Text); carrier.Groups.Add(group); } // Loading properties to carrier var props = member.getProperties; foreach (umbraco.cms.businesslogic.property.Property prop in props) { memberProperty carrierprop = new memberProperty(); if (prop.Value == System.DBNull.Value) { carrierprop.PropertyValue = null; } else { carrierprop.PropertyValue = prop.Value; } carrierprop.Key = prop.PropertyType.Alias; carrier.MemberProperties.Add(carrierprop); } return carrier; } } [Serializable] public class memberGroup { int groupID; string groupName; public memberGroup() { } public memberGroup(int groupID, string groupName) { GroupID = groupID; GroupName = groupName; } public int GroupID { get { return groupID; } set { groupID = value; } } public string GroupName { get { return groupName; } set { groupName = value; } } } [Serializable] [XmlType(Namespace = "http://umbraco.org/webservices/")] public class memberCarrier { public memberCarrier() { memberProperties = new List(); groups = new List(); } #region Fields private int id; private string password; private string email; private string displayedName; private string loginName; private int membertypeId; private string membertypeName; private List groups; private List memberProperties; #endregion #region Properties public int Id { get { return id; } set { id = value; } } public string DisplayedName { get { return displayedName; } set { displayedName = value; } } public string Password { get { return password; } set { password = value; } } public string Email { get { return email; } set { email = value; } } public string LoginName { get { return loginName; } set { loginName = value; } } public int MembertypeId { get { return membertypeId; } set { membertypeId = value; } } public string MembertypeName { get { return membertypeName; } set { membertypeName = value; } } public List Groups { get { return groups; } set { groups = value; } } public List MemberProperties { get { return memberProperties; } set { memberProperties = value; } } #endregion } [Serializable] [XmlType(Namespace = "http://umbraco.org/webservices/")] public class memberProperty { private string key; private object propertyValue; public memberProperty() { } public object PropertyValue { get { return propertyValue; } set { propertyValue = value; } } public string Key { get { return key; } set { key = value; } } } }