owner and admin section
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* cron_subscriptions.php — Da eseguire UNA VOLTA AL GIORNO.
|
||||
*
|
||||
* Cosa fa:
|
||||
* - Trova gli abbonamenti "active" la cui expires_at è già passata → li mette "expired"
|
||||
* e spegne il salone (shops.active = 0).
|
||||
* - Riaccende i saloni il cui abbonamento è tornato valido (active e non scaduto)
|
||||
* ma che risultano ancora spenti (es. dopo un rinnovo registrato).
|
||||
*
|
||||
* NON tocca i saloni "blocked" dall'admin: quelli restano spenti finché l'admin non li sblocca.
|
||||
*
|
||||
* Esecuzione (XAMPP / Windows Task Scheduler):
|
||||
* C:\xampp\php\php.exe C:\xampp\htdocs\comelifacciamo\public\cron_subscriptions.php
|
||||
* Esecuzione (cron Linux, ogni giorno alle 3:00):
|
||||
* 0 3 * * * /usr/bin/php /percorso/public/cron_subscriptions.php
|
||||
*/
|
||||
|
||||
// Percorso corretto: questo file sta in public/, la classe DB è in public/userarea/class/
|
||||
require_once(__DIR__ . '/userarea/class/db-functions.php');
|
||||
$pdo = DBHandlerSelect::getInstance()->getConnection();
|
||||
|
||||
$today = date('Y-m-d');
|
||||
$log = [];
|
||||
|
||||
try {
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// 1. Scaduti: erano active, la data è passata → expired + salone spento
|
||||
$exp = $pdo->prepare("
|
||||
SELECT shop_id FROM shop_subscriptions
|
||||
WHERE status = 'active' AND expires_at IS NOT NULL AND expires_at < ?
|
||||
");
|
||||
$exp->execute([$today]);
|
||||
$expiredShops = $exp->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
if ($expiredShops) {
|
||||
$updSub = $pdo->prepare("
|
||||
UPDATE shop_subscriptions SET status = 'expired'
|
||||
WHERE status = 'active' AND expires_at IS NOT NULL AND expires_at < ?
|
||||
");
|
||||
$updSub->execute([$today]);
|
||||
|
||||
// Spegni i saloni relativi
|
||||
$in = implode(',', array_fill(0, count($expiredShops), '?'));
|
||||
$updShop = $pdo->prepare("UPDATE shops SET active = 0 WHERE id IN ($in)");
|
||||
$updShop->execute($expiredShops);
|
||||
|
||||
$log[] = count($expiredShops) . " salone/i scaduto/i e disattivato/i.";
|
||||
}
|
||||
|
||||
// 2. Riattivazione: abbonamento tornato valido ma salone ancora spento.
|
||||
// (utile se un rinnovo ha rimesso status=active ma active era 0)
|
||||
$rea = $pdo->prepare("
|
||||
SELECT s.id
|
||||
FROM shops s
|
||||
JOIN shop_subscriptions sub ON sub.shop_id = s.id
|
||||
WHERE s.active = 0
|
||||
AND sub.status = 'active'
|
||||
AND (sub.expires_at IS NULL OR sub.expires_at >= ?)
|
||||
");
|
||||
$rea->execute([$today]);
|
||||
$reactivate = $rea->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
if ($reactivate) {
|
||||
$in = implode(',', array_fill(0, count($reactivate), '?'));
|
||||
$updOn = $pdo->prepare("UPDATE shops SET active = 1 WHERE id IN ($in)");
|
||||
$updOn->execute($reactivate);
|
||||
$log[] = count($reactivate) . " salone/i riattivato/i.";
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
if (empty($log)) $log[] = "Nessuna modifica.";
|
||||
$line = '[' . date('Y-m-d H:i:s') . '] ' . implode(' ', $log) . PHP_EOL;
|
||||
echo $line;
|
||||
// Log su file accanto allo script
|
||||
@file_put_contents(__DIR__ . '/cron_subscriptions.log', $line, FILE_APPEND);
|
||||
} catch (Throwable $e) {
|
||||
if ($pdo->inTransaction()) $pdo->rollBack();
|
||||
$err = '[' . date('Y-m-d H:i:s') . '] ERRORE: ' . $e->getMessage() . PHP_EOL;
|
||||
echo $err;
|
||||
@file_put_contents(__DIR__ . '/cron_subscriptions.log', $err, FILE_APPEND);
|
||||
}
|
||||
Reference in New Issue
Block a user