owner and admin section

This commit is contained in:
2026-09-09 08:26:26 +02:00
parent de46a91aa8
commit 85702c3000
30 changed files with 5611 additions and 674 deletions
+85
View File
@@ -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);
}