<?php
/**
* FT Story Cleanup (vBulletin Scheduled Task)
*/
if (!defined('VB_AREA'))
{
exit;
}
$db->query_write("
INSERT INTO ft_story_cleanup_log
(phase, note, dateline)
VALUES
('start', 'cron basladi', " . TIMENOW . ")
");
error_log('FT Story cleanup START ' . date('d-m-Y H:i:s'));
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;
$deletedViews = 0;
$deletedMedia = 0;
$deletedText = 0;
$deletedReactions = 0;
$deletedOrphans = 0;
// expire olan story'leri al
$res = $db->query_read("
SELECT storyid
FROM ft_story
WHERE expiretime <= $now
LIMIT $limit
");
$storyids = array();
while ($row = $db->fetch_array($res))
{
$storyid = intval($row['storyid']);
if ($storyid > 0)
{
$storyids[] = $storyid;
}
}
if (!empty($storyids))
{
$idlist = implode(',', $storyids);
// Önce local dosya yollarını topla
$mres = $db->query_read("
SELECT storyid, filepath, thumbpath
FROM ft_story_media
WHERE storyid IN ($idlist)
");
$paths = array();
while ($m = $db->fetch_array($mres))
{
if (!empty($m['filepath']))
{
$paths[] = $m['filepath'];
}
if (!empty($m['thumbpath']))
{
$paths[] = $m['thumbpath'];
}
}
// Fiziksel dosyaları sil
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: önce bağlı tablolar
$db->query_write("DELETE FROM ft_story_view WHERE storyid IN ($idlist)");
$deletedViews += intval($db->affected_rows());
$db->query_write("DELETE FROM ft_story_reaction WHERE storyid IN ($idlist)");
$deletedReactions += intval($db->affected_rows());
$db->query_write("DELETE FROM ft_story_text WHERE storyid IN ($idlist)");
$deletedText += intval($db->affected_rows());
$db->query_write("DELETE FROM ft_story_media WHERE storyid IN ($idlist)");
$deletedMedia += intval($db->affected_rows());
$db->query_write("DELETE FROM ft_story WHERE storyid IN ($idlist)");
$deletedStories += intval($db->affected_rows());
}
/*
* Orphan cleanup
* Ana story kaydı silinmiş ama alt tablolarda yetim kayıt kalmışsa temizle
*/
$db->query_write("
DELETE v
FROM ft_story_view AS v
LEFT JOIN ft_story AS s ON (s.storyid = v.storyid)
WHERE s.storyid IS NULL
");
$deletedOrphans += intval($db->affected_rows());
$db->query_write("
DELETE r
FROM ft_story_reaction AS r
LEFT JOIN ft_story AS s ON (s.storyid = r.storyid)
WHERE s.storyid IS NULL
");
$deletedOrphans += intval($db->affected_rows());
$db->query_write("
DELETE t
FROM ft_story_text AS t
LEFT JOIN ft_story AS s ON (s.storyid = t.storyid)
WHERE s.storyid IS NULL
");
$deletedOrphans += intval($db->affected_rows());
$db->query_write("
DELETE m
FROM ft_story_media AS m
LEFT JOIN ft_story AS s ON (s.storyid = m.storyid)
WHERE s.storyid IS NULL
");
$deletedOrphans += intval($db->affected_rows());
if (function_exists('log_cron_action'))
{
log_cron_action(
"FT Story cleanup: deleted_stories=$deletedStories deleted_files=$deletedFiles deleted_views=$deletedViews deleted_media=$deletedMedia deleted_text=$deletedText deleted_reactions=$deletedReactions deleted_orphans=$deletedOrphans",
0
);
}
/*Log dosyasına kaydetsin*/
if (function_exists('log_cron_action'))
{
log_cron_action(
"FT Story cleanup: deleted_stories=$deletedStories deleted_files=$deletedFiles deleted_views=$deletedViews deleted_media=$deletedMedia deleted_text=$deletedText deleted_reactions=$deletedReactions deleted_orphans=$deletedOrphans",
0
);
}
error_log(
"FT Story cleanup END: deleted_stories=$deletedStories deleted_files=$deletedFiles deleted_views=$deletedViews deleted_media=$deletedMedia deleted_text=$deletedText deleted_reactions=$deletedReactions deleted_orphans=$deletedOrphans"
);
file_put_contents(
DIR . '/ft_story_cleanup_test.log',
date('d-m-Y H:i:s') . " | stories=$deletedStories | files=$deletedFiles | views=$deletedViews | media=$deletedMedia | text=$deletedText | reactions=$deletedReactions | orphans=$deletedOrphans\n",
FILE_APPEND
);
/*DB'ye yazdır*/
$db->query_write("
INSERT INTO ft_story_cleanup_log
(phase, note, dateline)
VALUES
(
'end',
'stories=$deletedStories files=$deletedFiles views=$deletedViews media=$deletedMedia text=$deletedText reactions=$deletedReactions orphans=$deletedOrphans',
" . TIMENOW . "
)
");Add a code snippet to your website: www.paste.org