Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)
Paste
Pasted as PHP by registered user atmaca ( 3 months ago )
<?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 . "
)
");
Revise this Paste