Because I'm terrible at figuring out database-anything, can someone please edit 1.4.11 to add this native:
PHP Code:
#define ADMIN_ADD_ADMINS (1<<1)
#define PLEASE_SELECT -2
#define NO_PERMISSIONS -3
#define CUSTOM_PERMISSIONS 'c'
#define NEW_ADMIN_GROUP 'n'
#define GRP_ROOT 1
#define GRP_ADMIN 2
#define GRP_BITDONOR 3
#define GRP_REGULAR 4
#define GRP_MEGADONOR 5
#define GRP_GIGADONOR 6
#define GRP_WEBMINZ 2
#define GRP_WEBROOT 3
#define MIN_PASS_LENGTH 4
SB_AddAdmin(iClient, String:szLoginName[], String:szSteamId[], String:szEmail[] = "", String:szWebPanelPassword[] = "", String:szWebPanelPasswordConfirm[] = "", String:szServerAdminPassword[] = "",
String:szServerAdminGroup[] = "No Permissions", String:szWebAdminGroup[] = "No Permissions", String:szServerAccess[] = "")
{
if (!IsClientRcon(iClient))
{
ReplyToCommand("Hacking Attempt %L tried to add an admin, but doesnt have access.", iClient);
return;
}
new iMask = ADMIN_ADD_ADMINS; // This is intended for adding a Web Panel admin.
new String:szSrvMask[] = "0";
new String:server_a_pass[] = "-1";
new String:grp[] = "g1"
new String:svr[] = ""; //"s3,s4,s5" ,s6
new serverg = PLEASE_SELECT;
new webg = PLEASE_SELECT;
if (serverg == NO_PERMISSIONS)
{
szSrvMask[0] = '\0';
}
if (webg == NO_PERMISSIONS)
{
iMask = 0;
}
if (szLoginName[0] == '\0')
{
ReplyToCommand(iClient, "You must type a name for the admin.");
return;
}
else
{
if (StrContains(szLoginName, "'") != -1)
{
ReplyToCommand(iClient, "An admin name can not contain a \" ' \".");
return;
}
else
{
if (is_taken("admins", "user", $a_name))
{
ReplyToCommand(iClient, "An admin with this name already exists.");
return;
}
}
}
if (!IsValidSteamId(szSteamId, -1))
{
ReplyToCommand(iClient, "Please enter a valid Steam ID or Community ID. for the admin.")
return;
}
else
{
if (is_taken("admins", "authid", $a_steam))
{
$admins = $userbank->GetAllAdmins();
foreach($admins as $admin)
{
if ($admin['authid'] == $a_steam)
{
$name = $admin['user'];
break;
}
}
ReplyToCommand(iClient, "Admin %s already uses this Steam ID.", htmlspecialchars(addslashes(szVarName)));
return;
}
}
if (iMask != 0)
{
if (szWebPanelPassword[0] == '\0')
{
// A password is only required for users with web permissions.
ReplyToCommand(iClient, "You must type a password.");
return;
}
if (strlen(szWebPanelPassword) < MIN_PASS_LENGTH)
{
ReplyToCommand(iClient, "Your password must be at-least %i characters long.", MIN_PASS_LENGTH);
return;
}
else
{
if (szWebPanelPassword[0] == '\0')
{
ReplyToCommand(iClient, "You must confirm the password.");
return;
}
else if (!StrEqual(szWebPanelPassword, szWebPanelPasswordConfirm))
{
ReplyToCommand(iClient, "Your passwords don't match.")
return;
}
}
// No email
if(szEmail[0] == '\0')
{
// An E-Mail address is only required for users with web permissions.
ReplyToCommand(iClient, "You must type an e-mail address.");
return;
}
else
{
// Is an other admin already registred with that email address?
if (is_taken("admins", "email", $a_email))
{
$admins = $userbank->GetAllAdmins();
foreach($admins as $admin)
{
if($admin['email'] == $a_email)
{
$name = $admin['user'];
break;
}
}
ReplyToCommand(iClient, "This email address is already being used by %s.", htmlspecialchars(addslashes($name)));
return;
}
}
switch (webg)
{
case PLEASE_SELECT:
{
ReplyToCommand(iClient, "You must choose a group.");
return;
}
}
}
if (szServerAdminPassword[0] != '\0')
{
strcopy(server_a_pass, sizeof(server_a_pass), szServerAdminPassword)
}
// Choose to use a server password
if (server_a_pass != "-1") // This is initialized to -1 and is only overwrriten if the code above executes
{
//if (server_a_pass[0] == '\0') // This should be unreachable code.
//{
// ReplyToCommand("You must type a server password or uncheck the box.");
//}
//
// else
if (strlen(server_a_pass) < MIN_PASS_LENGTH)
{
ReplyToCommand(iClient, "Your password must be at least %i characters long.", MIN_PASS_LENGTH);
return;
}
// At this point the server password would be set to whatever was entered
}
else
{
// Don't set "-1" as password ;)
server_a_pass[0] = '\0';
}
switch (serverg)
{
case PLEASE_SELECT: // if they didn't choose a server group
{
ReplyToCommand(iClient, "You must choose a group.");
return;
}
}
xajax_AddAdmin(iMask, szSrvMask, szLoginName, szSteamId, szEmail, szWebPanelPassword, serverg, webg, server_a_pass, "", "", grp, srv);
}
xajax_AddAdmin(iMask, String:szSrvMask, String:szLoginName, String:szSteamId, String:szEmail, String:szWebPanelPassword, serverg, webg, String:server_a_pass, String:a_webname, String:a_servername, String:grp, String:srv)
{
// ##############################################################
// ## Start adding to DB ##
// ##############################################################
$gid = 0;
$groupID = 0;
$inGroup = false;
$wgid = NextAid();
new iImmunity = 0;
// Extract immunity from server mask string
new iPos = StrContains(szSrvMask, "#");
if (iPos != -1)
{
iImmunity = 0;
// Extract xyz from alkfnak[#xyz]m3m2n23o and convert to int
}
// Avoid negative immunity
iImmunity = (iImmunity > 0) ? iImmunity : 0;
if (webg == 'c' || webg <= 0)
{
webg = -1; // Custom permissions -> no group
}
new String:server_admin_group[255];
new server_admin_group_int = -1;
// Handle Serverpermissions
// Chose to create a new server admin group
if (serverg != 'c' && serverg > 0)
{
server_admin_group = $GLOBALS['db']->GetOne("SELECT `name` FROM ".DB_PREFIX."_srvgroups WHERE id = '" . (int)$serverg . "'");
new server_admin_group_int = serverg;
}
// Custom permissions -> no group
else
{
server_admin_group[0] = '\0';
server_admin_group_int = -1;
}
// Add the admin
$aid = $userbank->AddAdmin($a_name, $a_steam, $a_password, $a_email, webg, $mask, $server_admin_group, szSrvMask, iImmunity, $a_serverpass);
if ($aid > -1)
{
// Grant permissions to the selected server groups
$srv_groups = explode(",", $server);
$addtosrvgrp = $GLOBALS['db']->Prepare("INSERT INTO ".DB_PREFIX."_admins_servers_groups(admin_id,group_id,srv_group_id,server_id) VALUES (?,?,?,?)");
foreach($srv_groups AS $srv_group)
{
if(!empty($srv_group))
$GLOBALS['db']->Execute($addtosrvgrp,array($aid, $server_admin_group_int, substr($srv_group, 1), '-1'));
}
// Grant permissions to individual servers
$srv_arr = explode(",", $singlesrv);
$addtosrv = $GLOBALS['db']->Prepare("INSERT INTO ".DB_PREFIX."_admins_servers_groups(admin_id,group_id,srv_group_id,server_id) VALUES (?,?,?,?)");
foreach($srv_arr AS $server)
{
if(!empty($server))
$GLOBALS['db']->Execute($addtosrv,array($aid, $server_admin_group_int, '-1', substr($server, 1)));
}
if(isset($GLOBALS['config']['config.enableadminrehashing']) && $GLOBALS['config']['config.enableadminrehashing'] == 1)
{
// rehash the admins on the servers
$serveraccessq = $GLOBALS['db']->GetAll("SELECT s.sid FROM `".DB_PREFIX."_servers` s
LEFT JOIN `".DB_PREFIX."_admins_servers_groups` asg ON asg.admin_id = '".(int)$aid."'
LEFT JOIN `".DB_PREFIX."_servers_groups` sg ON sg.group_id = asg.srv_group_id
WHERE ((asg.server_id != '-1' AND asg.srv_group_id = '-1')
OR (asg.srv_group_id != '-1' AND asg.server_id = '-1'))
AND (s.sid IN(asg.server_id) OR s.sid IN(sg.server_id)) AND s.enabled = 1");
$allservers = array();
foreach($serveraccessq as $access) {
if(!in_array($access['sid'], $allservers)) {
$allservers[] = $access['sid'];
}
}
$objResponse->addScript("ShowRehashBox('".implode(",", $allservers)."','Admin Added', 'The admin has been added successfully', 'green', 'index.php?p=admin&c=admins');TabToReload();");
} else
$objResponse->addScript("ShowBox('Admin Added', 'The admin has been added successfully', 'green', 'index.php?p=admin&c=admins');TabToReload();");
$log = new CSystemLog("m", "Admin added", "Admin (" . $a_name . ") has been added");
return $objResponse;
}
else
{
$objResponse->addScript("ShowBox('User NOT Added', 'The admin failed to be added to the database. Check the logs for any SQL errors.', 'red', 'index.php?p=admin&c=admins');");
}
}
Almost done converting everything except for setting up SQL database related stuff (reading / writing data).