<?php
/**
* FT Story Cleanup (vBulletin Scheduled Task)
*/
if (!defined('VB_AREA'))
{
exit;
}
global $vbulletin;
if (!is_object($vbulletin) || !is_object($vbulletin->db))
{
// cron ortamı hazır değilse sessiz çık
return;
}
$db = $vbulletin->db;
$now = TIMENOW;
$limit = 200; // tek çalışmada kaç story temizlensin
$base = @realpath(DIR . '/ft_story_uploads');
$deletedStories = 0;
$deletedFiles = 0;
// expire olanları al
$res = $db->query_read("
SELECT storyid
FROM ft_story
WHERE expiretime <= $now
LIMIT $limit
");
while ($row = $db->fetch_array($res))
{
$storyid = intval($row['storyid']);
if ($storyid <= 0) { continue; }
$mres = $db->query_read("
SELECT filepath, thumbpath
FROM ft_story_media
WHERE storyid = $storyid
");
$paths = array();
while ($m = $db->fetch_array($mres))
{
if (!empty($m['filepath'])) { $paths[] = $m['filepath']; }
if (!empty($m['thumbpath'])) { $paths[] = $m['thumbpath']; }
}
foreach ($paths as $rel)
{
$rel = ltrim((string)$rel, '/');
// sadece bizim klasör
if (strpos($rel, 'ft_story_uploads/') !== 0)
{
continue;
}
$abs = DIR . '/' . $rel;
$real = @realpath($abs);
if ($real && $base && strpos($real, $base) === 0 && file_exists($real))
{
if (@unlink($real))
{
$deletedFiles++;
}
}
}
// DB temizliği
$db->query_write("DELETE FROM ft_story_view WHERE storyid = $storyid");
$db->query_write("DELETE FROM ft_story_media WHERE storyid = $storyid");
$db->query_write("DELETE FROM ft_story WHERE storyid = $storyid LIMIT 1");
$deletedStories++;
}
if (function_exists('log_cron_action'))
{
log_cron_action("FT Story cleanup: deleted_stories=$deletedStories deleted_files=$deletedFiles", 0);
}Add a code snippet to your website: www.paste.org