public GroupReference AddToGroup(GroupDB.Group ThisGroup) { if (Groups.Select(x => x.Group).Contains(ThisGroup)) { foreach (GroupReference ThisGroupReference in Groups) { if (ThisGroupReference.Group == ThisGroup) { return(ThisGroupReference); } } } GroupReference output = new GroupReference(); if (ThisGroup == GroupDB.NoGroup) { Logger.Log.SystemMessage("Tried to add user \"" + Name + "\" to the NULL Group placeholder."); return(NoGroupReference); } output.Group = ThisGroup; if (ThisGroup.Ranks.Count() >= 1) { output.Rank = ThisGroup.Ranks[0]; } else { output.Rank = Database.GroupDB.NoRank; } output.RankDate = DateTime.Now; output.Parent = this; Groups.Add(output); return(output); }
public bool RemoveFromGroup(GroupDB.Group ThisGroup) { try { List <GroupReference> CachedGroupList = Groups.ToArray().ToList(); foreach (GroupReference ThisGroupReference in CachedGroupList) { if (ThisGroupReference.Group == ThisGroup) { Groups.Remove(ThisGroupReference); } } if (GroupRepresented == ThisGroup) { GroupRepresented = GroupDB.NoGroup; } return(true); } catch (Exception e) { Logger.Log.Bug(e, "Tried to remove user \"" + Name + "\" from a group"); return(false); } }
public void LoadAll() { string InputFile = "./Database/Users/" + Name + "/Info.Dat"; Utilities.IO.PrepareDirectory("./Database/"); Utilities.IO.PrepareDirectory("./Database/Users/"); Utilities.IO.PrepareDirectory("./Database/Users/" + Name); Utilities.IO.PrepareFile(InputFile); string[] InfoFileContents = Utilities.IO.ReadAllLines(InputFile); Logger.Log.SystemMessage("Loading Values for User \"" + Name + "\"..."); foreach (string line in InfoFileContents) { #region GetDataCouplets string ThisLine = line; if (!(ThisLine.Contains("\t"))) { continue; } while (ThisLine.Contains("\t\t")) { ThisLine = ThisLine.Replace("\t\t", "\t"); } string Header = ThisLine.Split('\t')[0]; string Data = ThisLine.Remove(0, ((Header.Length) + 1)); var Converted = Utilities.IO.StringToVariable(Data); //NOTE: These WILL Bypass GUI mode if enabled, as the GUI setting is turned on until it is read. //if (Converted is Boolean) Logger.Console.WriteLine(String.Format("Bool: {0}", Data)); //if (Converted is IPAddress) Logger.Console.WriteLine(String.Format("IPAddress: {0}", Data)); //if (Converted is Decimal) Logger.Console.WriteLine(String.Format("Decimal: {0}", Data)); //if (Converted is Int32) Logger.Console.WriteLine(String.Format("Int32: {0}", Data)); //if (Converted is String) Logger.Console.WriteLine(String.Format("String: {0}", Data)); #endregion #region SkipComments if (Header.ToUpperInvariant().StartsWith("REM") || (Header.ToUpperInvariant().StartsWith("#")) || (Header.ToUpperInvariant().StartsWith("//"))) { //We don't worry abbout Comments or remarks. continue; } #endregion object inputvalue = null; //Logger.Console.WriteLine(Converted.ToString()); //Console.WriteLine(Converted); try { if (Data == "") { continue; } if (Header.ToUpperInvariant() == "GROUP") { //try //{ string GroupString = Data; GroupDB.Group ThisGroup = GroupDB.FindGroup(GroupString); if (ThisGroup == GroupDB.NoGroup) { throw new System.ArgumentException("Group Not Found: \"" + GroupString + "\"."); } GroupReference ThisGroupReference = AddToGroup(ThisGroup); ThisGroupReference.LoadAll(); //} //catch (Exception e) { Logger.Log.Bug(e, Strings.OthersKicked + " given is NOT a group reference."); } continue; } Type temp = this.GetType().GetField(Header.ToUpperInvariant(), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase).FieldType; if (temp == typeof(IPAddress)) { inputvalue = IPAddress.Parse(Data); } else if (temp == typeof(Database.GroupDB.Group)) { inputvalue = Database.GroupDB.FindGroup(Data); } else if (temp == typeof(Database.UserDB.User)) { inputvalue = Database.UserDB.Find(Data); } else if (temp == typeof(DateTime)) { try { inputvalue = Data.ToDateTime(); } catch (Exception e) { //throw new System.ArgumentException(Header + ", " + Data, e); } } else if (temp == typeof(TimeSpan)) { inputvalue = TimeSpan.Parse(Data); } else { inputvalue = Convert.ChangeType(Data, temp); } this.GetType().GetField(Header.ToUpperInvariant(), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase).SetValue(this, inputvalue); //Logger.Console.WriteLine(this.GetType().GetField(Header.ToUpperInvariant(), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase).Name.SuffixTabs(4) + Data); } catch (Exception e) { ///* Logger.Console.WriteLine("&cERROR&e " + e); Logger.Console.WriteLine(String.Format("Unrecognised Value: {0}", Header.ToUpperInvariant())); Logger.Console.WriteLine(String.Format("Unrecognised Value: {0}", Data.ToUpperInvariant())); //Thread.Sleep(50000); //*/ //System.Console.WriteLine(e); Logger.Log.SystemMessage(String.Format("Unrecognised Value: {0}", Header.ToUpperInvariant())); //Unrecognised Value. continue; } } //Load All Permissions for this user. // As permissions in it's own right is a suboject, // Capabable of it's own specific Load() one var only, // we can do that instead if a specific permission needs to be reloaded. InputFile = "./Database/Users/" + Name + "/Permissions.Dat"; Utilities.IO.PrepareDirectory("./Database/"); Utilities.IO.PrepareDirectory("./Database/Users/"); Utilities.IO.PrepareDirectory("./Database/Users/" + Name); Utilities.IO.PrepareFile(InputFile); this.Permissions.LoadAll(InputFile); Logger.Log.SystemMessage("Loaded Values for User \"" + Name + "\"."); //end of loading is here. }