diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index 8c8d0c45..f9072f76 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -28,101 +28,84 @@ namespace TShockAPI.DB "CREATE TABLE IF NOT EXISTS GroupList (GroupName VARCHAR(255) PRIMARY, Commands VARCHAR(255), OrderBy VARCHAR(255));"; com.ExecuteNonQuery(); + } - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - com.AddParameter("@groupname", "trustedadmin"); - com.AddParameter("@commands", "admin,maintenance,cfg,butcher,item,heal,immunetoban,ignorecheatdetection,ignoregriefdetection,usebanneditem,manageusers"); - com.AddParameter("@order", "0"); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - com.AddParameter("@groupname", "admin"); - com.AddParameter("@commands", "newadmin,ban,unban,whitelist,causeevents,spawnboss,spawnmob,managewarp,time,tp,pvpfun,kill,logs,immunetokick,tphere"); - com.AddParameter("@order", "0"); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - com.AddParameter("@groupname", "newadmin"); - com.AddParameter("@commands", "default,kick,editspawn,reservedslot"); - com.AddParameter("@order", "0"); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - com.AddParameter("@groupname", "default"); - com.AddParameter("@commands", "canwater,canlava,warp,canbuild"); - com.AddParameter("@order", "0"); - com.ExecuteNonQuery(); - com.Parameters.Clear(); + //Add default groups + AddGroup("trustedadmin", "admin,maintenance,cfg,butcher,item,heal,immunetoban,ignorecheatdetection,ignoregriefdetection,usebanneditem,manageusers"); + AddGroup("admin", "newadmin,ban,unban,whitelist,causeevents,spawnboss,spawnmob,managewarp,time,tp,pvpfun,kill,logs,immunetokick,tphere"); + AddGroup("newadmin", "default,kick,editspawn,reservedslot"); + AddGroup("default", "canwater,canlava,warp,canbuild"); + AddGroup("vip", "default,canwater,canlava,warp,canbuild,reservedslot"); - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - com.AddParameter("@groupname", "vip"); - com.AddParameter("@commands", "default,canwater,canlava,warp,canbuild,reservedslot"); - com.AddParameter("@order", "0"); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - - String file = Path.Combine(TShock.SavePath, "groups.txt"); - if (File.Exists(file)) + String file = Path.Combine(TShock.SavePath, "groups.txt"); + if (File.Exists(file)) + { + using (StreamReader sr = new StreamReader(file)) { - using (StreamReader sr = new StreamReader(file)) + String line; + while ((line = sr.ReadLine()) != null) { - String line; - while ((line = sr.ReadLine()) != null) + if (!line.Equals("") && !line.Substring(0, 1).Equals("#")) { - if( !line.Equals("") && !line.Substring( 0,1 ).Equals( "#" ) ) + String[] info = line.Split(' '); + String comms = ""; + int size = info.Length; + int test = 0; + bool hasOrder = int.TryParse(info[info.Length - 1], out test); + if (hasOrder) + size = info.Length - 1; + for (int i = 1; i < size; i++) + { + if (!comms.Equals("")) + comms = comms + ","; + comms = comms + info[i].Trim(); + } + using (var com = database.CreateCommand()) { - String[] info = line.Split(' '); if (TShock.Config.StorageType.ToLower() == "sqlite") com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; else if (TShock.Config.StorageType.ToLower() == "mysql") com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; - String comms = ""; - int size = info.Length; - int test = 0; - bool hasOrder = int.TryParse(info[info.Length - 1], out test); - if( hasOrder ) - size = info.Length - 1; - for (int i = 1; i < size; i++) - { - if (!comms.Equals("")) - comms = comms + ","; - comms = comms + info[i].Trim(); - } - com.AddParameter("@groupname", info[0].Trim().ToString()); + + com.AddParameter("@groupname", info[0].Trim()); com.AddParameter("@commands", comms); - com.AddParameter("@order", hasOrder ? info[info.Length-1] : "0"); + com.AddParameter("@order", hasOrder ? info[info.Length - 1] : "0"); com.ExecuteNonQuery(); - com.Parameters.Clear(); } } } - String path = Path.Combine(TShock.SavePath, "old_configs"); - String file2 = Path.Combine(path, "groups.txt"); - if (!Directory.Exists(path)) - System.IO.Directory.CreateDirectory(path); - if (File.Exists(file2)) - File.Delete(file2); - File.Move(file, file2); } + String path = Path.Combine(TShock.SavePath, "old_configs"); + String file2 = Path.Combine(path, "groups.txt"); + if (!Directory.Exists(path)) + System.IO.Directory.CreateDirectory(path); + if (File.Exists(file2)) + File.Delete(file2); + File.Move(file, file2); + } + + } + + /// + /// Adds group with name and permissions if it does not exist. + /// + /// name of group + /// permissions + public void AddGroup(string name, string commands) + { + using (var com = database.CreateCommand()) + { + if (TShock.Config.StorageType.ToLower() == "sqlite") + com.CommandText = + "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; + else if (TShock.Config.StorageType.ToLower() == "mysql") + com.CommandText = + "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;"; + com.AddParameter("@groupname", name); + com.AddParameter("@commands", commands); + com.AddParameter("@order", "0"); + com.ExecuteNonQuery(); } } @@ -166,7 +149,7 @@ namespace TShockAPI.DB //Inherit Given commands String[] commands = reader.Get("Commands").Split(','); - for( int i = 0; i < commands.Length; i++ ) + for (int i = 0; i < commands.Length; i++) { group.AddPermission(commands[i].Trim()); }