|
|
|
@@ -113,7 +113,7 @@ GLOBAL_PROTECT(protected_ranks)
|
|
|
|
|
return ((rank.rights & flag) == flag) //true only if right has everything in flag
|
|
|
|
|
|
|
|
|
|
//load our rank - > rights associations
|
|
|
|
|
/proc/load_admin_ranks(dbfail)
|
|
|
|
|
/proc/load_admin_ranks(dbfail, no_update)
|
|
|
|
|
if(IsAdminAdvancedProcCall())
|
|
|
|
|
to_chat(usr, "<span class='admin prefix'>Admin Reload blocked: Advanced ProcCall detected.</span>")
|
|
|
|
|
return
|
|
|
|
@@ -137,27 +137,38 @@ GLOBAL_PROTECT(protected_ranks)
|
|
|
|
|
prev = next
|
|
|
|
|
previous_rights = R.rights
|
|
|
|
|
if(!CONFIG_GET(flag/admin_legacy_system) || dbfail)
|
|
|
|
|
var/datum/DBQuery/query_load_admin_ranks = SSdbcore.NewQuery("SELECT rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")]")
|
|
|
|
|
if(!query_load_admin_ranks.Execute())
|
|
|
|
|
message_admins("Error loading admin ranks from database. Loading from backup.")
|
|
|
|
|
log_sql("Error loading admin ranks from database. Loading from backup.")
|
|
|
|
|
dbfail = 1
|
|
|
|
|
else
|
|
|
|
|
while(query_load_admin_ranks.NextRow())
|
|
|
|
|
var/skip
|
|
|
|
|
var/rank_name = query_load_admin_ranks.item[1]
|
|
|
|
|
if(CONFIG_GET(flag/load_legacy_ranks_only))
|
|
|
|
|
if(!no_update)
|
|
|
|
|
var/list/sql_ranks = list()
|
|
|
|
|
for(var/datum/admin_rank/R in GLOB.admin_ranks)
|
|
|
|
|
if(R.name == rank_name) //this rank was already loaded from txt override
|
|
|
|
|
skip = 1
|
|
|
|
|
break
|
|
|
|
|
if(!skip)
|
|
|
|
|
var/rank_flags = text2num(query_load_admin_ranks.item[2])
|
|
|
|
|
var/rank_exclude_flags = text2num(query_load_admin_ranks.item[3])
|
|
|
|
|
var/rank_can_edit_flags = text2num(query_load_admin_ranks.item[4])
|
|
|
|
|
var/datum/admin_rank/R = new(rank_name, rank_flags, rank_exclude_flags, rank_can_edit_flags)
|
|
|
|
|
if(!R)
|
|
|
|
|
continue
|
|
|
|
|
GLOB.admin_ranks += R
|
|
|
|
|
var/sql_rank = sanitizeSQL(R.name)
|
|
|
|
|
var/sql_flags = sanitizeSQL(R.include_rights)
|
|
|
|
|
var/sql_exclude_flags = sanitizeSQL(R.exclude_rights)
|
|
|
|
|
var/sql_can_edit_flags = sanitizeSQL(R.can_edit_rights)
|
|
|
|
|
sql_ranks += list(list("rank" = "'[sql_rank]'", "flags" = "[sql_flags]", "exclude_flags" = "[sql_exclude_flags]", "can_edit_flags" = "[sql_can_edit_flags]"))
|
|
|
|
|
SSdbcore.MassInsert(format_table_name("admin_ranks"), sql_ranks, duplicate_key = TRUE)
|
|
|
|
|
else
|
|
|
|
|
var/datum/DBQuery/query_load_admin_ranks = SSdbcore.NewQuery("SELECT rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")]")
|
|
|
|
|
if(!query_load_admin_ranks.Execute())
|
|
|
|
|
message_admins("Error loading admin ranks from database. Loading from backup.")
|
|
|
|
|
log_sql("Error loading admin ranks from database. Loading from backup.")
|
|
|
|
|
dbfail = 1
|
|
|
|
|
else
|
|
|
|
|
while(query_load_admin_ranks.NextRow())
|
|
|
|
|
var/skip
|
|
|
|
|
var/rank_name = query_load_admin_ranks.item[1]
|
|
|
|
|
for(var/datum/admin_rank/R in GLOB.admin_ranks)
|
|
|
|
|
if(R.name == rank_name) //this rank was already loaded from txt override
|
|
|
|
|
skip = 1
|
|
|
|
|
break
|
|
|
|
|
if(!skip)
|
|
|
|
|
var/rank_flags = text2num(query_load_admin_ranks.item[2])
|
|
|
|
|
var/rank_exclude_flags = text2num(query_load_admin_ranks.item[3])
|
|
|
|
|
var/rank_can_edit_flags = text2num(query_load_admin_ranks.item[4])
|
|
|
|
|
var/datum/admin_rank/R = new(rank_name, rank_flags, rank_exclude_flags, rank_can_edit_flags)
|
|
|
|
|
if(!R)
|
|
|
|
|
continue
|
|
|
|
|
GLOB.admin_ranks += R
|
|
|
|
|
//load ranks from backup file
|
|
|
|
|
if(dbfail)
|
|
|
|
|
var/backup_file = file("data/admins_backup.json")
|
|
|
|
@@ -184,7 +195,7 @@ GLOBAL_PROTECT(protected_ranks)
|
|
|
|
|
testing(msg)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/proc/load_admins()
|
|
|
|
|
/proc/load_admins(no_update)
|
|
|
|
|
var/dbfail
|
|
|
|
|
if(!CONFIG_GET(flag/admin_legacy_system) && !SSdbcore.Connect())
|
|
|
|
|
message_admins("Failed to connect to database while loading admins. Loading from backup.")
|
|
|
|
@@ -198,7 +209,7 @@ GLOBAL_PROTECT(protected_ranks)
|
|
|
|
|
GLOB.admins.Cut()
|
|
|
|
|
GLOB.protected_admins.Cut()
|
|
|
|
|
GLOB.deadmins.Cut()
|
|
|
|
|
dbfail = load_admin_ranks(dbfail)
|
|
|
|
|
dbfail = load_admin_ranks(dbfail, no_update)
|
|
|
|
|
//Clear profile access
|
|
|
|
|
for(var/A in world.GetConfig("admin"))
|
|
|
|
|
world.SetConfig("APP/admin", A, null)
|
|
|
|
|