/* * Box Social™ * http://boxsocial.net/ * Copyright © 2007, David Lachlan Smith * * $Id:$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Web; using BoxSocial.Internals; using BoxSocial.IO; namespace BoxSocial.Networks { [PseudoPrimitive] [DataTable("network_members")] [PermissionGroup] public class NetworkMember : User { public const string USER_NETWORK_FIELDS = "nm.user_id, nm.network_id, nm.member_join_date_ut, nm.member_join_ip, nm.member_email, nm.member_active, nm.member_activate_code"; [DataField("user_id")] private new long userId; // hide the parent variable to have it register in the table [DataField("network_id", typeof(Network))] private long networkId; [DataField("member_join_date_ut")] private long memberJoinDateRaw; [DataField("member_email", 255)] private string memberEmail; [DataField("member_active")] private bool memberActive; [DataField("member_activate_code", 64)] private string memberActivateCode; [DataField("member_join_ip", 50)] private string memberJoinIpRaw; public long NetworkId { get { return networkId; } } public string MemberEmail { get { return memberEmail; } } public bool IsMemberActive { get { return memberActive; } } public string MemberActivationCode { get { return memberActivateCode; } } public DateTime GetNetworkMemberJoinDate(UnixTime tz) { return tz.DateTimeFromMysql(memberJoinDateRaw); } public NetworkMember(Core core, long networkId, User user) : base(core) { this.userInfo = user.Info; this.userProfile = user.Profile; } public NetworkMember(Core core, long networkId, long memberId) : base(core) { SelectQuery query = GetSelectQueryStub(UserLoadOptions.All); query.AddCondition("network_members.user_id", memberId); query.AddCondition("network_id", networkId); DataTable memberTable = db.Query(query); if (memberTable.Rows.Count == 1) { loadItemInfo(memberTable.Rows[0]); loadUserInfo(memberTable.Rows[0]); loadUserProfile(memberTable.Rows[0]); loadUserIcon(memberTable.Rows[0]); } else { throw new InvalidUserException(); } } public NetworkMember(Core core, DataRow memberRow, UserLoadOptions loadOptions) : base(core, memberRow, loadOptions) { loadItemInfo(memberRow); } public NetworkMember(Core core, DataRow memberRow) : base(core) { loadItemInfo(memberRow); loadUserFromUser(core.PrimitiveCache[userId]); } public NetworkMember(Core core, Network theNetwork, User member) : base(core) { DataTable memberTable = db.Query(string.Format("SELECT {2} FROM network_members nm WHERE nm.user_id = {0} AND nm.network_id = {1}", member.UserId, theNetwork.NetworkId, USER_NETWORK_FIELDS)); if (memberTable.Rows.Count == 1) { loadItemInfo(memberTable.Rows[0]); } else { throw new InvalidUserException(); } loadUserFromUser(member); } /// /// {networkId, NetworkMember} /// /// /// public static Dictionary GetUserNetworks(Core core, User member) { Dictionary networks = new Dictionary(); DataTable userNetworks = core.Db.Query(string.Format("SELECT {1} FROM network_members nm WHERE user_id = {0} AND member_active = 1;", member.UserId, NetworkMember.USER_NETWORK_FIELDS)); foreach (DataRow memberRow in userNetworks.Rows) { networks.Add((int)memberRow["network_id"], new NetworkMember(core, memberRow, UserLoadOptions.Key)); } return networks; } public static bool CheckNetworkEmailUnique(Mysql db, string eMail) { DataTable networkMemberTable = db.Query(string.Format("SELECT user_id, member_email FROM network_members WHERE LCASE(member_email) = '{0}';", Mysql.Escape(eMail.ToLower()))); if (networkMemberTable.Rows.Count > 0) { //lastEmailId = (long)networkMemberTable.Rows[0]["user_id"]; return false; } return true; } public static new SelectQuery GetSelectQueryStub(UserLoadOptions loadOptions) { SelectQuery query = GetSelectQueryStub(typeof(NetworkMember)); query.AddFields(User.GetFieldsPrefixed(typeof(User))); query.AddJoin(JoinTypes.Inner, User.GetTable(typeof(User)), "user_id", "user_id"); if ((loadOptions & UserLoadOptions.Info) == UserLoadOptions.Info) { query.AddFields(UserInfo.GetFieldsPrefixed(typeof(UserInfo))); query.AddJoin(JoinTypes.Inner, UserInfo.GetTable(typeof(UserInfo)), "user_id", "user_id"); } if ((loadOptions & UserLoadOptions.Profile) == UserLoadOptions.Profile) { query.AddFields(UserProfile.GetFieldsPrefixed(typeof(UserProfile))); query.AddJoin(JoinTypes.Inner, UserProfile.GetTable(typeof(UserProfile)), "user_id", "user_id"); query.AddJoin(JoinTypes.Left, new DataField("user_profile", "profile_country"), new DataField("countries", "country_iso")); query.AddJoin(JoinTypes.Left, new DataField("user_profile", "profile_religion"), new DataField("religions", "religion_id")); } if ((loadOptions & UserLoadOptions.Icon) == UserLoadOptions.Icon) { query.AddField(new DataField("gallery_items", "gallery_item_uri")); query.AddField(new DataField("gallery_items", "gallery_item_parent_path")); query.AddJoin(JoinTypes.Left, new DataField("user_info", "user_icon"), new DataField("gallery_items", "gallery_item_id")); } return query; } } }