Ejemplo n.º 1
0
            public static bool Delete(Group Target)
            {
                string Name = Target.Name;

                if (Target == GroupDB.NoGroup)
                {
                    return(false);
                }
                else
                {
                    foreach (UserDB.User ThisUser in UserDB.List)
                    {
                        if (ThisUser.Groups.Select(x => x.Group).Contains(Target))
                        {
                            Server.ClientList.Where(x => x.UserObject == ThisUser).ToList().SendMessage("You were removed from Group: \"" + Target.Name + "\" because the group has been removed from the server.");
                            ThisUser.RemoveFromGroup(Target);
                            ThisUser.SaveAll();
                        }
                    }
                    Logger.Log.SystemMessage(String.Format("Deleted Group \"{0}\"", Name));
                    GroupDB.List.Remove(Target);
                    try
                    {
                        var deletable = new DirectoryInfo("./Database/Group/" + Name);
                        deletable.Delete(true);
                    }
                    catch (Exception e)
                    {
                        Logger.Log.Bug(e, "Directory \"" + "./Database/Group/" + Name + "\" is in use or does not exist!");
                    }
                    return(true);
                }
            }
Ejemplo n.º 2
0
                public bool RemoveRankFromGroup(Rank RankToRemove)
                {
                    try
                    {
                        List <Rank> RankCache = Ranks.ToArray().ToList();
                        Rank        NewRank   = NoRank;
                        if (RankCache.IndexOf(RankToRemove) > 0)
                        {
                            NewRank = RankCache[RankCache.IndexOf(RankToRemove) - 1];
                        }
                        else if (RankCache.IndexOf(RankToRemove) < RankCache.Count() - 1)
                        {
                            NewRank = RankCache[RankCache.IndexOf(RankToRemove) + 1];
                        }
                        else
                        {
                            NewRank = NoRank;
                        }
                        string RankType = "Demoted";
                        if (RankCache.IndexOf(RankToRemove) == 0)
                        {
                            RankType = "Promoted";
                        }
                        //We need to iterate over EVERY user and remove their reference to the rank we are trying to destory.

                        //Itereate over the userlist, look for a user who has this rank in thier groups:
                        List <UserDB.User> UserListCache = UserDB.List.ToArray().ToList();
                        foreach (UserDB.User ThisUser in UserListCache)
                        {
                            foreach (UserDB.User.GroupReference ThisGroupReference in ThisUser.Groups.ToArray())
                            {
                                if (ThisGroupReference.Group == this)
                                //This means that only the current group is rank adjusted. Though it shouldn't happen, groups COULD share the same object?
                                {
                                    if (ThisGroupReference.Rank == RankToRemove)
                                    {
                                        ThisGroupReference.PreviousRank = NoRank;
                                        ThisGroupReference.Rank         = NewRank;
                                        if (NewRank != NoRank)
                                        {
                                            //only message online users.
                                            Server.ClientList.Where(x => x.UserObject == ThisUser).ToList().SendMessage("Your rank in Group: \"" + ThisGroupReference.Group.Name + "\" has been removed. You have been " + RankType + " to Rank: \"" + NewRank.Name + "\".");
                                        }
                                        else
                                        {
                                            //only message online users.
                                            Server.ClientList.Where(x => x.UserObject == ThisUser).ToList().SendMessage("Your rank in Group: \"" + ThisGroupReference.Group.Name + "\" has been removed. As it was the last rank, You have been removed from the group.");
                                            ThisUser.RemoveFromGroup(this);
                                            ThisUser.SaveAll();
                                            continue;
                                        }
                                        ThisGroupReference.RankDate   = DateTime.Now;
                                        ThisGroupReference.RankedBy   = UserDB.SuperUser;
                                        ThisGroupReference.RankReason = "Previous Rank Deleted.";
                                        ThisUser.SaveAll();
                                    }
                                }
                            }
                        }
                        Ranks.Remove(RankToRemove);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        Logger.Log.Bug(e, "Error removing a rank from a group");
                        return(false);
                    }
                }