Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: