Update: 2026-07-04 20:53:30
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
<?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
|
||||
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]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user