68 lines
2.4 KiB
PHP
68 lines
2.4 KiB
PHP
<?php
|
|
// ============================================================
|
|
// account_manager.php
|
|
// Handles rotation and selection of social media accounts
|
|
// ============================================================
|
|
|
|
require_once __DIR__ . '/../core/bootstrap.php';
|
|
|
|
class AccountManager {
|
|
private $con;
|
|
|
|
public function __construct() {
|
|
$this->con = Database::get('main');
|
|
}
|
|
|
|
/**
|
|
* Get an available account for a specific platform that hasn't been used too recently.
|
|
*
|
|
* @param string $platform 'facebook' or 'instagram'
|
|
* @param int $cooldownMinutes Minimum minutes since last active
|
|
* @return array|null Account details or null if none available
|
|
*/
|
|
public function getAvailableAccount($platform, $cooldownMinutes = 30) {
|
|
// Select an active account that was last active more than X minutes ago,
|
|
// or has never been active (last_active is NULL).
|
|
// Order by last_active ascending to rotate through them (least recently used first).
|
|
|
|
$stmt = $this->con->prepare("
|
|
SELECT id, username, total_posts, total_comments, proxy_ip, proxy_port, proxy_username, proxy_password
|
|
FROM social_accounts
|
|
WHERE platform = ?
|
|
AND status = 'active'
|
|
AND (last_active IS NULL OR last_active <= DATE_SUB(NOW(), INTERVAL ? MINUTE))
|
|
ORDER BY last_active ASC, id ASC
|
|
LIMIT 1
|
|
");
|
|
|
|
$stmt->execute([$platform, $cooldownMinutes]);
|
|
return $stmt->fetch(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
/**
|
|
* Update the last active timestamp for an account
|
|
*/
|
|
public function markAccountActive($accountId) {
|
|
$stmt = $this->con->prepare("UPDATE social_accounts SET last_active = NOW() WHERE id = ?");
|
|
$stmt->execute([$accountId]);
|
|
}
|
|
|
|
/**
|
|
* Increment comment count
|
|
*/
|
|
public function incrementCommentCount($accountId) {
|
|
$stmt = $this->con->prepare("UPDATE social_accounts SET total_comments = total_comments + 1, last_active = NOW() WHERE id = ?");
|
|
$stmt->execute([$accountId]);
|
|
}
|
|
|
|
/**
|
|
* Mark an account as restricted or banned
|
|
*/
|
|
public function markAccountStatus($accountId, $status) {
|
|
if (!in_array($status, ['active', 'restricted', 'banned'])) return false;
|
|
|
|
$stmt = $this->con->prepare("UPDATE social_accounts SET status = ? WHERE id = ?");
|
|
return $stmt->execute([$status, $accountId]);
|
|
}
|
|
}
|